Há muitos bons exemplos de atualizar listas personalizadas através do SDK. Aqui está mais um.
Problema de negócios: Formulário do InfoPath foi concebido que permite aos usuários para entrar on-line compra requisições. Requisição de PO números devem ser seqüência tradicional com base em valores inteiros e calculados automaticamente.
Solução de negócios: Criar uma lista personalizada de musgo contendo duas colunas: "ControlField" e "ControlValue". A coluna de valor contém o próximo número de requisição de compra. Observe que o genérico "controle" Convenção de nomenclatura prevê campos de controle futuras que podem ser usados conforme necessário.
Solução técnica: Criar um web service acessado pelo cliente do InfoPath. O serviço da web retorna para o próximo número de requisição de compra e atualiza o valor da lista.
Lições aprendidas:
- Ao adicionar esse serviço web como uma fonte de dados para o formulário do InfoPath, Achei necessário para convertê-lo para um udc e armazená-lo em uma biblioteca de conexão de dados.
- Eu também achei necessário para ativar os scripts de domínio cruzado através de administração de serviços centrais // gerenciamento de aplicativos // configuração do servidor de forma.
- A primeira vez que o formulário tentou acessar o serviço web, demora um pouco e de vez em quando, seria o tempo. Eu brincava com as configurações em configuração do servidor para expandir a forma de configurações de tempo limite e que pareceu ajudar.
O código:
usando Sistema;
usando System. Web;
usando System.Web.Services;
usando Protocols;
usando Microsoft. SharePoint;
usando System. Configuration;
[WebService(Namespace = "http://www.Conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
público Classe PoService : System.Web.Services.WebService
{
público PoService () {
//Descomente a linha a seguir se usando componentes concebidos
//InitializeComponent();
}
/// <Resumo>
/// Obter o número de PO a próxima da lista do sharepoint po número controle.
/// Incrementar o número de PO nessa lista.
/// </Resumo>
/// <Retorna></Retorna>
[WebMethod]
público Cadeia de caracteres GetNextPoNumber()
{
Cadeia de caracteres SpPoControlSiteName; // Nome do site do musgo real que hospeda a lista de controle de PO.
Cadeia de caracteres SpPoControlListName; // Nome da lista de musgo real que contém o controle de Po.
SpPoControlSiteName = ConfigurationSettings.AppSettings["PoControlListHostingSite"].ToString();
SpPoControlListName = ConfigurationSettings.AppSettings["PoControlList"].ToString();
Cadeia de caracteres nextPoReqNumber = "xyzzy";
usando (SPSite t: Microsoft.SharePoint.SPSite local = Novo SPSite t: Microsoft.SharePoint.SPSite(SpPoControlSiteName))
{
usando (SPWeb Web = site. OpenWeb())
{
SPList t: Microsoft.SharePoint.SPList currentList = web. Listas de[SpPoControlListName];
foreach (SPItem controlItem em currentList.Items)
{
se (((Cadeia de caracteres)controlItem["ControlField"]).É igual a("NextPoNumber"))
{
nextPoReqNumber = (Cadeia de caracteres)controlItem["ControlValue"];
int int_nextPoReqNumber;
int_nextPoReqNumber = Converter.ToInt32(nextPoReqNumber);
int_nextPoReqNumber ;
controlItem["ControlValue"] = int_nextPoReqNumber;
controlItem.Update();
}
} // Localização de, ler e atualizar o número da OC na lista.
} // usando spweb web = site.openweb()
} // usando spsite site = new spsite("http://localhost/mizuho")
Voltar nextPoReqNumber;
}
}