Hai moitos bos exemplos de actualizar as listas personalizadas a través do SDK. Aquí está aínda outra.
Problema de negocio: Formulario InfoPath foi deseñado que permite que os usuarios insiran as solicitudes de compra en liña. Números petición PO debe ser valores enteiros baseados en secuencias tradicionais e calcula automaticamente.
Business Solution: Crear unha lista MOSS personalizado que contén dúas columnas: "ControlField" and "ControlValue". O valor da columna contén o seguinte número da petición de compra. Note that the generic "control" convención de nomenclatura prevé campos de control futuros que poden ser utilizados segundo a necesidade.
Solución Técnica: Crear un servizo de web acceder polo cliente InfoPath. O servizo web devolve o seguinte número da petición de compra e actualiza o valor da lista.
Leccións aprendidas:
- Engadindo este servizo web como fonte de datos para o formulario do InfoPath, Eu penso necesario convertelo en un UDC e almacena-lo nunha biblioteca de conexión de datos.
- Eu tamén penso que é necesario para permitir cruz dominio script vía central de administración de servizos de // xestión de aplicacións // configuración do servidor de forma.
- A primeira vez que o formulario intentou acceder o servizo web, leva un tempo e de cando en vez, sería o tempo de espera. Eu xogaba con as opcións de configuración do servidor de forma a ampliar a configuración de tempo de espera e que parecía axudar.
O código:
utilización Sistema;
utilización System.Web;
utilización System.Web.Services;
utilización System.Web.Services.Protocols;
utilización Microsoft.SharePoint;
utilización System.Configuration;
[WebService(Namespace = "Http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
público clase PoService : System.Web.Services.WebService
{
público PoService () {
//Uncomment the following line if using designed components
//InitializeComponent();
}
/// <resumo>
/// Obtain the next PO number from the sharepoint po number control list.
/// Increment the PO number in that list.
/// </resumo>
/// <returns></returns>
[WebMethod]
público corda GetNextPoNumber()
{
corda SpPoControlSiteName; // Name of the actual MOSS site that hosts the PO Control list.
corda SpPoControlListName; // Name of the actual MOSS list containing the Po control.
SpPoControlSiteName = ConfigurationSettings.AppSettings["PoControlListHostingSite"].ToString();
SpPoControlListName = ConfigurationSettings.AppSettings["PoControlList"].ToString();
corda nextPoReqNumber = "Xyzzy";
utilización (SPSite site = novo SPSite(SpPoControlSiteName))
{
utilización (SPWeb web = site.OpenWeb())
{
SPList currentList = web.Lists[SpPoControlListName];
foreach (SPItem controlItem en currentList.Items)
{
se (((corda)controlItem["ControlField"]).Igual("NextPoNumber"))
{
nextPoReqNumber = (corda)controlItem["ControlValue"];
int int_nextPoReqNumber;
int_nextPoReqNumber = Converter.ToInt32(nextPoReqNumber);
int_nextPoReqNumber ;
controlItem["ControlValue"] = int_nextPoReqNumber;
controlItem.Update();
}
} // Locating, reading and updating the PO number in the list.
} // using spweb web = site.openweb()
} // using spsite site = new spsite("Http://localhost/mizuho")
volver nextPoReqNumber;
}
}