Der er mange gode eksempler på opdatere brugerdefinerede lister via SDK. Her er endnu en.
Business problem: InfoPath-formular er udformet, kan brugere angive online indkøbsrekvisitioner. PO rekvisition tal bør være traditionelle sekvens baseret heltalsværdier og beregnes automatisk.
Business løsning: Oprette en brugerdefineret MOSS liste med to kolonner: "ControlField" og "ControlValue". Kolonnen værdi indeholder den næste indkøb-rekvisitionsnummer. Bemærk, at generiske "kontrol" navngivningskonventionen giver for fremtidige kontrol felter, der kan anvendes efter behov.
Tekniske løsning: Oprette en webservice adgang til InfoPath-klienten. Webtjenesten returnerer tilbage den næste indkøb-rekvisitionsnummer og opdateres værdien for listen.
Indhøstede erfaringer:
- Når du tilføjer denne webtjeneste som datakilde til InfoPath-formularen, Jeg fandt det nødvendigt at konvertere det til en udc og gemme det i et dataforbindelsesbibliotek.
- Jeg har også fundet det nødvendigt at aktivere cross domain scripting via centrale services administration // programadministration // form serverkonfiguration.
- Første gang formen forsøgt hen til adgang web service, det tager et stykke tid og lejlighed, Det ville timeout. Jeg pillede ved indstillingerne i form serverkonfiguration at udvide indstillingerne timeout og som syntes at hjælpe.
Koden:
ved hjælp af System;
ved hjælp af Sektionsgruppen;
ved hjælp af System.Web.Services;
ved hjælp af System.Web.Services.Protocols;
ved hjælp af Microsoft.SharePoint;
ved hjælp af System.Configuration;
[WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
offentlige klasse PoService : System.Web.Services.WebService
{
offentlige PoService () {
//Ualmindelig den følgende linje hvis bruger designede komponenter
//InitializeComponent();
}
/// <Resumé>
/// Få den næste PO-nummer fra sharepoint po nummer kontrol liste.
/// Øg PO-nummer i denne liste.
/// </Resumé>
/// <Returnerer></Returnerer>
[WebMethod]
offentlige streng GetNextPoNumber()
{
streng SpPoControlSiteName; // Navnet på den faktiske MOSS websted, der hoster PO Control list.
streng SpPoControlListName; // Navnet på den faktiske MOSS liste der indeholder kontrolelementet Po.
SpPoControlSiteName = ConfigurationSettings.AppSettings["PoControlListHostingSite"].ToString();
SpPoControlListName = ConfigurationSettings.AppSettings["PoControlList"].ToString();
streng nextPoReqNumber = "xyzzy";
ved hjælp af (SPSite site = nye SPSite(SpPoControlSiteName))
{
ved hjælp af (SPWeb Web = site. OpenWeb())
{
SPList.Update() currentList = web. Lister[SpPoControlListName];
foreach (SPItem controlItem i currentList.Items)
{
Hvis (((streng)controlItem["ControlField"]).Er lig med("NextPoNumber"))
{
nextPoReqNumber = (streng)controlItem["ControlValue"];
int int_nextPoReqNumber;
int_nextPoReqNumber = Konvertere.ToInt32(nextPoReqNumber);
int_nextPoReqNumber ;
controlItem["ControlValue"] = int_nextPoReqNumber;
controlItem.Update();
}
} // Lokalisering, læsning og ajourføring PO-nummer på listen.
} // ved hjælp af spweb web = site.openweb()
} // ved hjælp af spsite site = ny spsite("http://localhost/mizuho")
tilbagevenden nextPoReqNumber;
}
}