Tag Archives: lists. asmx

Lists. asmx, GetListItems e pastas

Eu estava fazendo uma pesquisa para alguém hoje em torno de serviço da web list.asmx fornecido como parte do SharePoint 2010 (e versões anteriores).  Ela foi capaz de obter os itens da lista na pasta raiz (incluindo os nomes das subpastas), mas não poderia obter itens de subpastas.  Eu fiz alguns olhando em volta na Internet e é uma questão surpreendentemente comum.  Ainda, Eu não poderia obter uma boa resposta para a pergunta simples, "se eu sei que a pasta, Como faço para obter os itens na pasta?”  Para ser honesto, Eu não tentei tudo o que dura desde que eu tenho quis figura esta um fora em meu próprio por um tempo Sorriso.

Para configurá-lo, Eu criei um site chamado "Blogging cenários" e uma lista personalizada denominada "Lista com Sub pastas personalizadas".  Em seguida, criei pastas com o nome:

  • Ano 2005
  • Ano 2006
  • Ano 2007

Eu adicionei alguns itens para a pasta "Ano 2006".  Isso é o que parece:

image

Meu amigo não é escrever código c# mas sim usando Java, assim que o envelope SOAP foi o que ela realmente precisava.  Para obter que, Eu escrevi um pouco de jQuery e então usado fiddler para começar a conversa de HTTP real.

Aqui está o jQuery pertinente (Eu copiei o código para baixo abaixo se você quiser copiar/colar):

image

Eles primeiro chave deve incluir ambos um <queryOptions> and <QueryOptions> nó.  A segunda chave é que o <Pasta> nó é uma URL para que o cliente tem acesso.

Pode haver outras maneiras de obter esta, mas isso funcionou bem para mim quando usando jQuery.

Aqui está o envelope SOAP para o acima:

<soapenv:Envelope xmlns:soapenv =’http://schemas.xmlsoap.org/soap/envelope/’>                
  <soapenv:Corpo>
    <GetListItems xmlns =’
http://schemas.Microsoft.com/SharePoint/SOAP/’>
      <listName>Lista personalizada com Sub pastas</listName>
      <viewFields>  
        <ViewFields>
          <FieldRef FieldRef nome =' título’ />
          <FieldRef FieldRef nome ='EncodedAbsUrl’ />
        </ViewFields>
      </viewFields>
      <queryOptions>
        <QueryOptions>
          <Pasta>
http://demoserver1/Blogs Lista de cenários/listas/Custom com Sub pastas/ano 2006</Pasta>
        </QueryOptions>
      </queryOptions>
   
</GetListItems>
  </soapenv:Corpo>
</soapenv:Envelope>

Um monte de exemplos e discussão em torno deste levou-me a crer que era tudo que eu preciso <QueryOptions> e especifique um nome de pasta.  Para mim, Eu preciso tanto para envolvê-lo dentro <queryOptions> assim como especificar um URL totalmente qualificado para o <Pasta> nó.

Aqui está o programa de configuração do AJAX jQuery:

$(documento).pronto(função() {
       var soapEnv =
           "<soapenv:Envelope xmlns:soapenv =’http://schemas.xmlsoap.org/soap/envelope/’> \
               <soapenv:Corpo> \
                    <GetListItems xmlns =’http://schemas.Microsoft.com/SharePoint/SOAP/’> \
                       <listName>Lista personalizada com Sub pastas</listName> \
                       <viewFields> \
                           <ViewFields> \
                              <FieldRef FieldRef nome =' título’ /> \
                              <FieldRef FieldRef nome ='EncodedAbsUrl’ /> \
                          </ViewFields> \
                       </viewFields> \
                       <queryOptions> \
                         <QueryOptions> \
                           <Pasta>http://demoserver1/Blogging Lista de cenários/listas/Custom com Sub pastas/ano 2006</Pasta> \
                         </QueryOptions> \
                       </queryOptions> \
                   </GetListItems> \
               </soapenv:Corpo> \
           </soapenv:Envelope>";

</fim>

Subscreva ao meu blog.

Siga-me no Twitter em http://www.twitter.com/pagalvin

Lists. asmx, GetList e "valor não pode ser nulo”

Descobri hoje que o GetList() Método em lists. asmx serviço da Web tem de ser chamado com muito cuidado ou é propenso ao lançar uma misteriosa exceção "Valor não pode ser nulo" (e que está assumindo que você pode passar a mensagem de erro genérico ainda pior, "Exceção do tipo ' Microsoft.SharePoint.SoapServer.SoapServerException’ foi lançada.")  Especificamente, Achei que você não pode fornecer qualquer tipo de prefixo sobre o método GetList.  O seguinte trecho de jQuery ilustra o ponto:

image

Se você fizer isso, o serviço web responde com "Valor não pode ser nulo" como por isso Fiddler-desde transcrição HTTP:

<?XML version = "1.0" Encoding = "utf-8"?>
  <sabão:Envelope
     xmlns:sabão ="
http://schemas.xmlsoap.org/soap/envelope/"    
     xmlns:xsi = "
http://www.w3.org/2001/XMLSchema-instance
     xmlns:XSD ="
http://www.w3.org/2001/XMLSchema">

  <sabão:Corpo>
    <sabão:Falhas>
      <FaultCode>sabão:Servidor</FaultCode>
      <FaultString>
        Exceção do tipo ' Microsoft.SharePoint.SoapServer.SoapServerException’ foi lançada.
      </FaultString>
      <Detalhes>
        <ErrorString xmlns ="
http://schemas.Microsoft.com/SharePoint/SOAP/">
Valor não pode ser nulo.
        </ErrorString>
      </Detalhes>
    </sabão:Falhas>
  </sabão:Corpo>
</sabão:Envelope>

É claro, Você provavelmente não iria adicionar o prefixo "s0" em seu próprio país, mas algumas ferramentas são propensas a fazê-lo (como o Eclipse).

Isto é tanto mais confuso / frustrante porque outros métodos toleram prefixos.  Por exemplo, o GetListCollection Método não se importa se for prefixado, mesmo com prefixos de disparates como "xyzzy":

image

Este "valor não pode ser nulo" parece bastante comum com lists. asmx tão esperançosamente isto ajudará alguém fora no futuro.

</fim>

Subscreva ao meu blog.

Siga-me no Twitter em http://www.twitter.com/pagalvin