Tag Archives: lists.asmx

Lists.asmx, GetListItems og möppur

Ég var að gera sumir rannsókn fyrir einhvern dag um list.asmx vefur þjónustu sem hluta af SharePoint 2010 (og fyrr).  Hún var fær til fá the listi atriði á the rót mappa (þ.mt nöfn undir-möppur), en gat ekki fá atriði í staðinn fyrir einhvern-mappa.  Ég gerði nokkrar að leita í kring um internets og það er furðu algeng spurning.  En, Ég gat ekki fengið góða svar við einfaldri spurningu, "Ef ég veit að möppu, hvernig fæ ég þau atriði í möppunni?"  Til að vera heiðarlegur, Ég vissi ekki að reyna allt sem erfitt þar sem ég hef langað til að reikna þetta einn út á mitt eigið um stund bros.

Til að setja þetta upp, Ég bjó til síðuna sem heitir "Blogging Atburðarás" og sérsniðin listi sem heitir "Custom Listi með Sub möppur".  Ég skapaði þá möppur sem heita:

  • Ár 2005
  • Ár 2006
  • Ár 2007

Ég bætti nokkrum hlutum við möppu "ársins 2006".  Þetta er það sem það lítur út eins og:

image

Vinur minn er ekki að skrifa C # kóða heldur að nota Java, svo SOAP umslag var það sem hún þarf í raun.  Til að fá sem, Ég skrifaði smá jQuery og síðan notað Fiddler til að fá raunverulegan HTTP samtal.

Hér er viðeigandi jQuery (Ég afrita kóðann fyrir neðan ef þú vilt afrita / líma):

image

Þeir fyrstu Lykilatriðið er að fela bæði <queryOptions> og <QueryOptions> hnút.  Annað lykilatriði er að <Mappa> hnútur er slóðin sem viðskiptavinurinn hefur aðgang.

Það kann að vera aðrar leiðir til að fá þetta, en þetta virkaði vel fyrir mig þegar að nota jQuery.

Hér er sápa umslag fyrir ofan:

<soapenv:Umslag xmlns:soapenv =’HTTP://schemas.xmlsoap.org / sápu / umslag /’>                
  <soapenv:Body>
    <GetListItems xmlns =’
HTTP://schemas.microsoft.com / SharePoint / sápu /’>
      <listname>Custom Listi með Sub Mappa</listname>
      <viewFields>  
        <ViewFields>
          <FieldRef Name = 'Titill’ />
          <FieldRef Name = 'EncodedAbsUrl’ />
        </ViewFields>
      </viewFields>
      <queryOptions>
        <QueryOptions>
          <Mappa>
HTTP://demoserver1/Blogging Atburðarás / listar / Custom List með Sub Mappa / árið 2006</Mappa>
        </QueryOptions>
      </queryOptions>
   
</GetListItems>
  </soapenv:Body>
</soapenv:Umslag>

A einhver fjöldi af dæmum og umræðu um þetta leiddi mig til að trúa því að allt sem ég þarf var <QueryOptions> og tilgreina heiti fyrir möppuna.  Fyrir mig, Ég þarf að bæði vefja það inni <queryOptions> og tilgreina fullgildur vefslóð fyrir að <Mappa> hnút.

Hér er jQuery AJAX skipulag:

$(skjal).tilbúinn(virka() {
       var soapEnv =
           "<soapenv:Umslag xmlns:soapenv =’HTTP://schemas.xmlsoap.org / sápu / umslag /’> \
               <soapenv:Body> \
                    <GetListItems xmlns =’HTTP://schemas.microsoft.com / SharePoint / sápu /’> \
                       <listname>Custom Listi með Sub Mappa</listname> \
                       <viewFields> \
                           <ViewFields> \
                              <FieldRef Name = 'Titill’ /> \
                              <FieldRef Name = 'EncodedAbsUrl’ /> \
                          </ViewFields> \
                       </viewFields> \
                       <queryOptions> \
                         <QueryOptions> \
                           <Mappa>http://demoserver1/Blogging Atburðarás / listar / Custom List með Sub Mappa / árið 2006</Mappa> \
                         </QueryOptions> \
                       </queryOptions> \
                   </GetListItems> \
               </soapenv:Body> \
           </soapenv:Umslag>";

</enda>

Gerast áskrifandi að bloggið mitt.

Fylgdu mér á Twitter á http://www.twitter.com/pagalvin

Lists.asmx, GetList og "Value getur ekki verið tómt”

Ég uppgötvaði í dag að GetList() aðferð í lists.asmx vefur þjónusta þarf að vera kölluð mjög vel eða það er viðkvæmt að kasta dularfulla "Value getur ekki verið tómt" undantekning (og það er miðað við að þú getur fengið framhjá jafnvel verri almenna villuboð, “Exception of type ‘Microsoft.SharePoint.SoapServer.SoapServerException’ var kastað. ")  Sérstaklega, Ég fann að þú getur ekki veita hvers konar forskeyti á GetList aðferð.  Eftirfarandi jQuery seðillinn sýnir punkt:

image

Ef þú gerir það, vefur þjónusta bregst við "Value getur ekki verið tómt" eins og á þessu Fiddler-enda HTTP afrit:

<?XML útgáfa = "1,0" kóðun = "UTF-8"?>
  <sápa:Umslag
     xmlns:sápa ="
HTTP://schemas.xmlsoap.org / sápu / umslag /"    
     xmlns:XSi = "
HTTP://www.w3.org/2001/XMLSchema-instance"
     xmlns:xsd ="
HTTP://www.w3.org/2001/XMLSchema">

  <sápa:Body>
    <sápa:Kenna>
      <faultcode>sápa:Server</faultcode>
      <faultstring>
        Exception of type ‘Microsoft.SharePoint.SoapServer.SoapServerException’ var kastað.
      </faultstring>
      <smáatriði>
        <errorstring xmlns ="
HTTP://schemas.microsoft.com / SharePoint / sápu /">
Gildi getur ekki verið tómt.
        </errorstring>
      </smáatriði>
    </sápa:Kenna>
  </sápa:Body>
</sápa:Umslag>

Auðvitað, þú myndi sennilega ekki bæta við að "s0" forskeyti á eigin spýtur, en sumir verkfæri eru tilhneigingu til að gera það (eins og Eclipse).

Þetta er allt meira truflandi / svekkjandi vegna þess að aðrar aðferðir þola forskeyti.  Til dæmis, á GetListCollection aðferð ekki huga ef að það hefur verið bætt viðfyrir framan, jafnvel með óskiljanlegum forskeyti eins og "xyzzy":

image

Þetta "gildi getur ekki verið tómt" virðist nokkuð algengt með lists.asmx svo vonandi mun þetta hjálpa einhverjum í framtíðinni.

</enda>

Gerast áskrifandi að bloggið mitt.

Fylgdu mér á Twitter á http://www.twitter.com/pagalvin