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 #.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top