Det er mange gode eksempler på oppdaterer egendefinerte lister via SDK. Her er enda en.
Forretningsproblem: InfoPath-skjemaet er utformet som lar brukerne angi online innkjøpsrekvisisjoner. PO innkjøpsrekvisisjon tall bør være tradisjonelle sekvens basert heltallsverdier og beregnet automatisk.
Forretningsløsning: Opprette en egendefinert MOSS-liste som inneholder to kolonner: "ControlField" og "ControlValue". Verdi-kolonnen inneholder den neste kjøpsordrenummer. Merk at generisk "kontroll" navnekonvensjonen inneholder for fremtidige kontrollfelt som kan brukes som nødvendig.
Teknisk løsning: Opprette en webtjeneste tilgang til InfoPath klienten. Webtjenesten returnerer tilbake neste kjøpsordrenummer og oppdaterer verdien for listen.
Erfaringer:
- Når du legger til denne webtjenesten som datakilde i InfoPath-skjemaet, Jeg fant det nødvendig å konvertere den til en udc og lagre dem i et datatilkoblingsbibliotek.
- Jeg også funnet det nødvendig å aktivere tvers av domener skripting via sentrale tjenester administrasjon // Programbehandling // skjemaet serverkonfigurasjon.
- Første gang skjemaet prøvde å få tilgang til webtjenesten, Det tar en stund og til tider, det ville tid ut. Jeg fingret med innstillingene i skjemaet server å utvide tidsavbruddsinnstillingene og som syntes å.
Koden:
ved hjelp av Systemet;
ved hjelp av System.Web;
ved hjelp av System.Web.Services;
ved hjelp av System.Web.Services.Protocols;
ved hjelp av Microsoft.SharePoint;
ved hjelp av System.Configuration;
[WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
offentlig klassen PoService : System.Web.Services.WebService
{
offentlig PoService () {
//Uncomment følgende linje hvis bruker utviklet komponenter
//InitializeComponent();
}
/// <Sammendrag>
/// Få neste PO nummer fra sharepoint po nummer kontroll-listen.
/// Øke innkjøpsordrenummer i listen.
/// </Sammendrag>
/// <Returnerer></Returnerer>
[WebMethod]
offentlig streng GetNextPoNumber()
{
streng SpPoControlSiteName; // Navnet på selve MOSS området som inneholder listen PO kontroll.
streng SpPoControlListName; // Navnet på den faktiske MOSS listen som inneholder kontrollen Po.
SpPoControlSiteName = ConfigurationSettings.AppSettings["PoControlListHostingSite"].ToString();
SpPoControlListName = ConfigurationSettings.AppSettings["PoControlList"].ToString();
streng nextPoReqNumber = "xyzzy";
ved hjelp av (SPSite Site = nye SPSite(SpPoControlSiteName))
{
ved hjelp av (SPWeb Web = området. OpenWeb())
{
SPList currentList = web. Lister[SpPoControlListName];
foreach (SPItem controlItem i currentList.Items)
{
Hvis (((streng)controlItem["ControlField"]).Er lik("NextPoNumber"))
{
nextPoReqNumber = (streng)controlItem["ControlValue"];
Int int_nextPoReqNumber;
int_nextPoReqNumber = Konvertere.ToInt32(nextPoReqNumber);
int_nextPoReqNumber ;
controlItem["ControlValue"] = int_nextPoReqNumber;
controlItem.Update();
}
} // Finne, lese og oppdatere innkjøpsordrenummeret i listen.
} // bruke spweb web = site.openweb()
} // bruke spsite siden = nye spsite("http://localhost/mizuho")
avkastning nextPoReqNumber;
}
}