SharePoint - Como inserir novos itens usando o serviço web lista?
-
01-07-2019 - |
Pergunta
Eu tenho uma lista com 2 campos de texto e um campo de escolha. Como faço para usar o serviço web Lists.asmx para inserir um novo produto? Eu posso fazer uma referência da Web para o serviço lists.asmx, para que possa supor que isto é conhecido.
Eu gostaria de um exemplo completo, incluindo o código e o XML para a consulta CAML. Idealmente a amostra usaria C #.
Solução
Usando o serviço de listas web para inserir item para uma lista do SharePoint pode realmente ser complicado. Uma vez que este método é da forma: XML dentro, fora XML, ele pode ser difícil de obter os parâmetros direita.
Em primeiro lugar você deve dar uma olhada na definição da lista. Ele pode ser recuperado com o método GetList (), como mostrado abaixo:
XmlNode listXml = sharePointLists.GetList(listName);
File.WriteAllText("listdefinition.xml", listXml.OuterXml);
Importante aqui estão os nomes dos campos e seus tipos de dados. Os nomes de campo nunca será o mesmo que o que você vê no SharePoint GUI. Um bom exemplo é o campo Título, que é usado para o primeiro campo da lista.
Agora que você sabe disso, você pode criar a consulta para ir para SharePoint. Um exemplo:
<Batch OnError="Continue">
<Method ID="1" Cmd="New">
<Field Name="Title">Abcdef</Field>
<Field Name="Project_x0020_code">999050</Field>
<Field Name="Status">Open</Field>
</Method>
</Batch>
O elemento Batch é o elemento raiz do XML. Dentro você pode colocar diferentes métodos. Estes devem ter uma identificação única (que é usado para relatar erros de volta para você) e um comando, que pode ser por exemplo "Novo" ou "Update". Dentro do método, você coloca elementos de campo que especificam o valor para cada campo. Por exemplo, o campo Título obtém o valor "Abcdef". Tenha o cuidado de usar o nome exato como é devolvido pelo GetList ().
Para executar a consulta no SharePoint, use os UpdateListItems () método:
XmlNode result = sharePointLists.UpdateListItems(listDefinition.Name, updates);
O valor de retorno é um fragmento XML contendo o status de cada atualização. Por exemplo:
<Results xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<Result ID="1,New">
<ErrorCode>0x00000000</ErrorCode>
<z:row ows_ContentTypeId="0x010036F3F587127F1A44B8BA3FEFED4733C6"
ows_Title="Abcdef"
ows_Project_x0020_code="999050"
ows_Status="Open"
ows_LinkTitleNoMenu="Abcdef"
ows_LinkTitle="Abcdef"
ows_ID="1005"
...
xmlns:z="#RowsetSchema" />
</Result>
</Results>
Você pode analisar isso e olhar para o ErrorCode para ver quais métodos falharam.
Na prática, eu criei uma classe wrapper que cuida de todos os detalhes sujos para mim. Infelizmente, este é propriedade de meu empregador, então não posso compartilhar com você.
Esta classe de mensagens publicitárias é parte de um utilitário interno que é usado para recuperar informações de nosso banco de dados de projeto e publicá-la em SharePoint. Desde que foi desenvolvido durante o tempo de empresa, eu não estou autorizado a publicá-la aqui.