Det finns många goda exempel på uppdatera anpassade listor via SDK. Här är ännu en.
Affärsproblem: InfoPath-formuläret har utformats kan användare ange online inköpsrekvisitioner. PO rekvisitionen nummer ska vara traditionella sekvens baserade heltalsvärden och beräknas automatiskt.
Affärslösning: Skapa en anpassad MOSS-lista som innehåller två kolumner: "ControlField" och "ControlValue". Värdekolumnen innehåller nästa inköpsrekvisition nummer. Observera att generiskt "kontroll" namnkonvention ger för framtida kontrollfält som kan användas som behövs.
Teknisk lösning: Skapa en webbtjänst som InfoPath klient tillgång. Webbtjänsten returnerar tillbaka nästa inköpsrekvisition och uppdateras värdet i listan.
Lärdomar:
- När du lägger till denna webbtjänst som en datakälla i InfoPath-formuläret, Jag fann det nödvändigt att konvertera den till en udc och lagra det i ett dataanslutningsbibliotek.
- Jag också funnit det nödvändigt att skriptstöd cross-domän via centrala tjänster administration // programhantering // formuläret konfiguration.
- Första gången form försökte få tillgång till webbtjänsten, Det tar ett tag och ibland, Det skulle vara tid. Fingrade jag med inställningar i formuläret konfiguration att expandera timeout-inställningar och som verkade för att hjälpa.
Koden:
med hjälp av System;
med hjälp av System.Web;
med hjälp av System.Web.Services;
med hjälp av System.Web.Services.Protocols;
med hjälp av Microsoft.SharePoint;
med hjälp av System.Configuration;
[WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
offentliga klass PoService : System.Web.Services.WebService
{
offentliga PoService () {
//Avkommentera följande rad om du använder komponenter för
//InitializeComponent();
}
/// <Sammanfattning>
/// Få nästa PO nummer från sharepoint po kontroll listan.
/// Öka antalet PO i listan.
/// </Sammanfattning>
/// <Returnerar></Returnerar>
[WebMethod]
offentliga sträng GetNextPoNumber()
{
sträng SpPoControlSiteName; // Namnet på den faktiska MOSS webbplats som är värd för IO-kontroll listan.
sträng SpPoControlListName; // Namnet på den faktiska MOSS lista som innehåller kontrollen Po.
SpPoControlSiteName = ConfigurationSettings.AppSettings["PoControlListHostingSite"].ToString();
SpPoControlListName = ConfigurationSettings.AppSettings["PoControlList"].ToString();
sträng nextPoReqNumber = "xyzzy";
med hjälp av (SPSite plats = nya SPSite(SpPoControlSiteName))
{
med hjälp av (SPWeb Web = webbplats. OpenWeb())
{
SPList currentList = web. Listor[SpPoControlListName];
foreach (SPItem controlItem i currentList.Items)
{
om (((sträng)controlItem["ControlField"]).Är lika med("NextPoNumber"))
{
nextPoReqNumber = (sträng)controlItem["ControlValue"];
int int_nextPoReqNumber;
int_nextPoReqNumber = Konvertera.ToInt32(nextPoReqNumber);
int_nextPoReqNumber ;
controlItem["ControlValue"] = int_nextPoReqNumber;
controlItem.Update();
}
} // Att lokalisera, läsa och uppdatera PO numret i listan.
} // med hjälp av spweb web = site.openweb()
} // webbplatsen för spsite = nya spsite("http://localhost/mizuho")
återvändande nextPoReqNumber;
}
}