MOSS: Opdatering af en brugerdefineret liste

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;

}
}

Man troede på ”MOSS: Opdatering af en brugerdefineret liste

  1. KSP skrev:
    Hej Paul,
    Vi har en lignende situation du er at nævne, men problemet er, jeg vil bruge denne web Servië på en load balance server.Dermed,Hvordan til at håndtere concurrency anmodninger i denne sag eller hvordan til at gøre den nye anmodning vente og kun én anmodning skal opdatere listen antallet indtil derefter alle andre anmodninger bør i que.Lad mig vide, hvordan man opnå dette.
    På forhånd tak.
    Svar

Efterlad et svar

Din e-mail adresse vil ikke blive offentliggjort. Krævede felter er markeret *