Hay muchos buenos ejemplos de actualización de listas personalizadas mediante el SDK. Aquí está otro.
Problema del negocio: Formulario de InfoPath ha sido diseñada que permite a los usuarios entrar en línea requisiciones de compra. Requisición PO los números deben ser secuencia tradicional basado en valores enteros y calcula automáticamente.
Solución de negocio: Crear una lista personalizada de MOSS que contiene dos columnas: "ControlField" y "ControlValue". La columna valor contiene el siguiente número de requisición de compra. Tenga en cuenta que el genérico "control" Convención de nomenclatura proporciona para campos de control futuros que pueden utilizarse como sea necesario.
Solución técnica: Crear un servicio web accedido por el cliente de InfoPath. El servicio web vuelta devuelve el siguiente número de requisición de compra y actualiza el valor de la lista.
Lecciones aprendidas:
- Al agregar este servicio web como origen de datos en el formulario de InfoPath, Me pareció necesario para convertirlo en un udc y almacenarlo en una biblioteca de conexiones de datos.
- También me pareció necesario para permitir el dominio cruzado de secuencias de comandos mediante la administración de servicios centrales // Administración de aplicaciones // configuración del servidor de forma.
- La primera vez la forma trató de acceso al servicio web, Toma un tiempo y en ocasiones, sería tiempo. Ha jugueteado con los ajustes de configuración del servidor de forma para ampliar las opciones de tiempo de espera y que parecía ayudar a.
El código:
utilizando Sistema;
utilizando System.Web;
utilizando System.Web.Services;
utilizando System.Web.Services.Protocols;
utilizando Microsoft.SharePoint;
utilizando System.Configuration;
[WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
público clase PoService : System.Web.Services.WebService
{
público PoService () {
//Descomentar la siguiente línea si utiliza componentes diseñados
//InitializeComponent();
}
/// <Resumen>
/// Obtener el número siguiente de la lista de control número de sharepoint po.
/// Incrementar el número de la lista.
/// </Resumen>
/// <Devuelve></Devuelve>
[WebMethod]
público cadena GetNextPoNumber()
{
cadena SpPoControlSiteName; // Nombre del Real Sitio MOSS que aloja la lista de Control de la PO.
cadena SpPoControlListName; // Nombre de la lista de musgo real que contiene el control de la Po.
SpPoControlSiteName = ConfigurationSettings.AppSettings["PoControlListHostingSite"].ToString();
SpPoControlListName = ConfigurationSettings.AppSettings["PoControlList"].ToString();
cadena nextPoReqNumber = "xyzzy";
utilizando (SPSite sitio = Nuevo SPSite(SpPoControlSiteName))
{
utilizando (SPWeb Web = página. OpenWeb())
{
SPList currentList = web. Listas de[SpPoControlListName];
foreach (SPItem controlItem en currentList.Items)
{
Si (((cadena)controlItem["ControlField"]).Es igual a("NextPoNumber"))
{
nextPoReqNumber = (cadena)controlItem["ControlValue"];
int int_nextPoReqNumber;
int_nextPoReqNumber = Convertir.ToInt32(nextPoReqNumber);
int_nextPoReqNumber ;
controlItem["ControlValue"] = int_nextPoReqNumber;
controlItem.Update();
}
} // Localización de, lectura y actualización del número en la lista.
} // uso de spweb web = site.openweb()
} // uso de spsite site = new spsite("http://localhost/mizuho")
retorno nextPoReqNumber;
}
}