Hi ha molts bons exemples d'actualització de les llistes personalitzades mitjançant l'SDK. Aquí és un altre.
Problema de negoci: Formulari InfoPath ha estat dissenyat que permet als usuaris introduir en línia compra requisitions. PO sol·licitud ha de ser números de seqüència tradicional basat en valors enters i calcula automàticament.
Solució de negoci: Crear una llista personalitzada de molsa que contenen dues columnes: "ControlField" i "ControlValue". La columna de valor conté el següent número de sol·licitud de compra. Tingueu en compte que el genèric "control" proporciona Convenció de nomenclatura per als camps de futur control que es pot utilitzar com sigui necessari.
Solució tècnica: Crear un servei web accessible per part del client de l'InfoPath. El servei web torna altra vegada el proper número de la sol·licitud compra i actualitza el valor de la llista.
Lliçons apreses:
- Quan afegiu aquest servei web com a font de dades al formulari de l'InfoPath, Em va semblar necessari per convertir-lo en un udc i emmagatzemar-lo en una biblioteca de connexió de dades.
- Jo també resultava necessari habilitar els scripts entre dominis mitjançant l'administració de serveis centrals // aplicacions de gestió // configuració de servidor de forma.
- La primera vegada provat el formulari accedir al servei web, pren un temps i d'ocasió, ho faria temps d'espera. Em fiddled amb escenes de configuració de servidor de forma d'ampliar la configuració del temps d'espera i que semblava que ajudés.
El codi:
utilitzant Sistema;
utilitzant System;
utilitzant System.Web.Services;
utilitzant System.Web.Services.Protocols;
utilitzant Microsoft.SharePoint;
utilitzant System.Configuration;
[WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
públic classe PoService : System.Web.Services.WebService
{
públic PoService () {
//Incomenti la línia següent si utilitzant dissenyat components de
//InitializeComponent();
}
/// <resum>
/// Obtenir el següent nombre PO de la llista del sharepoint po nombre control.
/// Incrementar el nombre de PO en aquesta llista.
/// </resum>
/// <devolucions></devolucions>
[WebMethod]
públic corda GetNextPoNumber()
{
corda SpPoControlSiteName; // Nom del lloc real molsa que allotja la llista de PO Control.
corda SpPoControlListName; // Nom de la llista actual de molsa que contenen el control Po.
SpPoControlSiteName = ConfigurationSettings.AppSettings["PoControlListHostingSite"].ToString();
SpPoControlListName = ConfigurationSettings.AppSettings["PoControlList"].ToString();
corda nextPoReqNumber = "xyzzy";
utilitzant (SPSite lloc = nou SPSite(SpPoControlSiteName))
{
utilitzant (SPWeb web = lloc. OpenWeb())
{
SPList currentList = la web. Llistes[SpPoControlListName];
foreach (SPItem controlItem en currentList.Items)
{
Si (((corda)controlItem["ControlField"]).És igual a("NextPoNumber"))
{
nextPoReqNumber = (corda)controlItem["ControlValue"];
Int int_nextPoReqNumber;
int_nextPoReqNumber = Convertir.ToInt32(nextPoReqNumber);
int_nextPoReqNumber ;
controlItem["ControlValue"] = int_nextPoReqNumber;
controlItem.Update();
}
} // Localització, llegir i actualitzar el nombre PO a la llista.
} // utilitzant spweb web = site.openweb()
} // utilitzant spsite lloc = spsite nou("http://localhost/mizuho")
retorn nextPoReqNumber;
}
}