MOSS: Oppdatere en egendefinert liste

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;

}
}

En tenkte på “MOSS: Oppdatere en egendefinert liste

  1. KSP skrev:
    Hei Paul,
    Vi har en lignende situasjon hva du nevner, men problemet er jeg vil bruke denne web servie på en server for balanse.Dermed,Hvordan håndtere samtidighet forespørsler i dette tilfellet eller hvordan for å gjøre den nye forespørselen vente og bare en forespørsel skal oppdatere listenummeret til da alle andre forespørsler skal que.Behage utleie meg vite hvor å oppnå denne.
    Takk på forhånd.
    Svar

Avreise en svar til KSP skrev: Avbryt svar

e-postadressen din vil ikke offentliggjøres. Obligatoriske felt er merket *