Ci sono molti buoni esempi di aggiornamento elenchi personalizzati tramite il SDK. Qui è ancora un altro.
Problema aziendale: Modulo di InfoPath è stato progettato che permette agli utenti di immettere online acquistano requisizioni. Requisizione PO numeri dovrebbero essere la sequenza tradizionale basato su valori integer e calcolati automaticamente.
Soluzione di business: Creare un elenco personalizzato di MOSS contenente due colonne: "ControlField" e "ControlValue". Colonna valore contiene il numero della richiesta di acquisto successivo. Si noti che il generico "controllo" Convenzione di denominazione fornisce i campi di controllo futuro che possono essere utilizzati come necessario.
Soluzione tecnica: Creare un servizio web accessibile dal client InfoPath. Il servizio web restituisce indietro il successivo numero della richiesta di acquisto e aggiorna il valore della lista.
Lezioni apprese:
- Quando si aggiunge questo servizio web come origine dati per il modulo di InfoPath, Ritenuto necessario convertirlo in un udc e memorizzarlo in una raccolta connessioni dati.
- Anche trovato necessario attivare tra domini scripting tramite Amministrazione centrale servizi // gestione applicazioni // configurazione del server di forma.
- La prima volta il modulo provato ad accedere al servizio web, ci vuole un po' di tempo e in occasione, sarebbe tempo fuori. I giocherellava con le impostazioni nella configurazione del server di forma per espandere le impostazioni di timeout e che sembrava di aiutare.
Il codice:
utilizzando Sistema;
utilizzando System. Web;
utilizzando System.Web.Services;
utilizzando Protocols;
utilizzando Microsoft. SharePoint;
utilizzando System. Configuration;
[WebService(Namespace = "http://www.Conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
pubblica classe PoService : System.Web.Services.WebService
{
pubblica PoService () {
//Decommentare la seguente riga se utilizza componenti progettati
//InitializeComponent();
}
/// <Riassunto>
/// Ottenere il numero di PO successivo dall'elenco sharepoint po numero controllo.
/// Incrementare il numero di PO in quella lista.
/// </Riassunto>
/// <restituisce></restituisce>
[WebMethod]
pubblica stringa GetNextPoNumber()
{
stringa SpPoControlSiteName; // Nome del sito MOSS effettivo che ospita l'elenco di controllo di PO.
stringa SpPoControlListName; // Nome dell'elenco effettivo di MOSS che contiene il controllo di Po.
SpPoControlSiteName = ConfigurationSettings.AppSettings["PoControlListHostingSite"].ToString();
SpPoControlListName = ConfigurationSettings.AppSettings["PoControlList"].ToString();
stringa nextPoReqNumber = "xyzzy";
utilizzando (SPSite sito = Nuovo SPSite(SpPoControlSiteName))
{
utilizzando (SPWeb Web = site. OpenWeb())
{
SPList currentList = web. Elenchi[SpPoControlListName];
foreach (SPItem controlItem in currentList.Items)
{
Se (((stringa)controlItem["ControlField"]).È uguale a("NextPoNumber"))
{
nextPoReqNumber = (stringa)controlItem["ControlValue"];
int int_nextPoReqNumber;
int_nextPoReqNumber = Convertire.ToInt32(nextPoReqNumber);
int_nextPoReqNumber ;
controlItem["ControlValue"] = int_nextPoReqNumber;
controlItem.Update();
}
} // Individuazione, lettura e l'aggiornamento il numero di PO nell'elenco.
} // utilizzando spweb web = site.openweb()
} // utilizzando il sito spsite = nuovo spsite("http://localhost/mizuho")
ritorno nextPoReqNumber;
}
}