Etikedaj Arkivoj: Listoj.Asmx

Listoj.Asmx, GetListItems kaj Tekoj

Mi estis faranta iun esploron por iu hodiaŭ ĉirkaŭ la listo.Asmx araneaĵa servo provizita kiel parto de SharePoint 2010 (Kaj antaŭe).  Ŝi estis kapabla akiri la listajn erojn ĉe la radika teko (Inkluzivanta la nomojn de sub-tekoj), Sed ne povus akiri erojn en sub-tekoj.  Mi faris kelkajn rigardantan proksimume sur la interretoj kaj ĝi estas surprize ofta demando.  Ankoraŭ, Mi ne povus akiri bonan respondon al la simpla demando, “Se mi scias la tekon, Kiel mi akiras la eroj en la teko?”  Esti honesta, Mi ne provis ĉiuj tiu malfacila pro tio ke mi deziris kalkuli ĉi tiu unu ekstere sur mia propra por momento rideto.

Instali tion ĉi, Mi kreis ejon nomis “Blogging Scenaroj” kaj laŭmenda listo nomis “Laŭmendan Liston kun Sub Tekoj”.  Mi tiam kreis tekojn nomis:

  • Jaro 2005
  • Jaro 2006
  • Jaro 2007

Mi aldonis kelkajn erojn al la teka “Jaro 2006”.  Tio ĉi estas kio ĝi similas:

image

Mia amiko ne estas skribanta C# kodon sed prefere uzanta Java, Do la SAPA koverto estis kio ŝi vere devis.  Akiri tion, Mi skribis iom de jQuery kaj tiam uzita fiddler akiri la realan HTTPan konversacion.

Ĉi tie-a la rilata jQuery (Mi kopiis la kodon sube se vi deziras kopii/almeti):

image

Ili unue kerna estas inkluzivi ambaŭ <QueryOptions> Kaj <QueryOptions> Nodo.  La dua ŝlosilo estas ke la <Teko> Nodo estas URL al kiu la kliento havas aliron.

Tie povas esti aliaj vojoj akiri tion ĉi, Sed tio ĉi laboris bone por mi kiam uzanta jQuery.

Ĉi tie estas la SAPA koverto por la supra:

<Soapenv:Koverto xmlns:Soapenv=’Http://Schemas.Xmlsoap.Org/sapa/koverto/’>                
  <Soapenv:Korpo>
    <GetListItems xmlns=’
Http://Schemas.Microsoft.Com/sharepoint/sapo/’>
      <ListName>Laŭmenda Listo kun Sub Tekoj</ListName>
      <ViewFields>  
        <ViewFields>
          <FieldRef Nomo='Titolo’ />
          <FieldRef Nomo='EncodedAbsUrl’ />
        </ViewFields>
      </ViewFields>
      <QueryOptions>
        <QueryOptions>
          <Teko>
Http://Demoserver1/Blogging Scenaroj/enlistigas/Laŭmendan Liston kun Sub Teka/Jaro 2006</Teko>
        </QueryOptions>
      </QueryOptions>
   
</GetListItems>
  </Soapenv:Korpo>
</Soapenv:Koverto>

Multaj ekzemploj kaj diskuto ĉirkaŭ tio ĉi gvidis min kredi ke ĉiuj mi devas estis <QueryOptions> Kaj specifi tekan nomon.  Por mi, Mi devas al ambaŭ mantelo ĝi interne <QueryOptions> Tiel kiel specifas plene kvalifikita URL por la <Teko> Nodo.

Ĉi tie-a la jQuery AJAXa aranĝo:

$(Dokumento).Preta(Funkcio() {
       Var soapEnv =
           "<Soapenv:Koverto xmlns:Soapenv=’Http://Schemas.Xmlsoap.Org/sapa/koverto/’> \
               <Soapenv:Korpo> \
                    <GetListItems xmlns=’Http://Schemas.Microsoft.Com/sharepoint/sapo/’> \
                       <ListName>Laŭmenda Listo kun Sub Tekoj</ListName> \
                       <ViewFields> \
                           <ViewFields> \
                              <FieldRef Nomo='Titolo’ /> \
                              <FieldRef Nomo='EncodedAbsUrl’ /> \
                          </ViewFields> \
                       </ViewFields> \
                       <QueryOptions> \
                         <QueryOptions> \
                           <Teko>http://demoserver1/Blogging Scenaroj/enlistigas/Laŭmendan Liston kun Sub Teka/Jaro 2006</Teko> \
                         </QueryOptions> \
                       </QueryOptions> \
                   </GetListItems> \
               </Soapenv:Korpo> \
           </Soapenv:Koverto>";

</Fino>

Aboni al mia blogo.

Sekvi min sur Pepi ĉe http://www.twitter.com/pagalvin

Listoj.Asmx, GetList kaj “Valoro ne povas esti null”

Mi eltrovis hodiaŭ ke la GetList() Metodo en Listoj.Asmx Araneaĵa servo devas esti vokita tre zorgeme aŭ ĝi estas kuŝa ĵeti misteran “Valoron ne povas esti null” escepto (Kaj tio estas supozanta vin povas akiri pasintan la para pli malbona kolektiva eraro mesaĝo, “Escepto de tipo ‘Microsoft.SharePoint.SoapServer.SoapServerException’ Estis ĵetita.”)  Specife, Mi trovis ke vi ne povas provizi ajnan specon de prefikso sur la GetList metodo.  La sekvanta jQuery ereto ilustras la punkton:

image

Se vi fari tion, La araneaĵa servo respondas kun “Valoro ne povas esti null” kiel por tio ĉi Fiddler-Provizita HTTPan transskribaĵon:

<?Xml versio="1.0" Kodanta="utf-8"?>
  <Sapo:Koverto
     Xmlns:Sapo="
Http://Schemas.Xmlsoap.Org/sapa/koverto/"    
     Xmlns:Xsi=”
Http://Www.w3.org/2001/xmlschema-okazo
     Xmlns:Xsd="
Http://Www.w3.org/2001/xmlschema">

  <Sapo:Korpo>
    <Sapo:Misfaro>
      <Faultcode>Sapo:Servilo</Faultcode>
      <Faultstring>
        Escepto de tipo ‘Microsoft.SharePoint.SoapServer.SoapServerException’ Estis ĵetita.
      </Faultstring>
      <Detalo>
        <Errorstring xmlns="
Http://Schemas.Microsoft.Com/sharepoint/sapo/">
Valoro ne povas esti null.
        </Errorstring>
      </Detalo>
    </Sapo:Misfaro>
  </Sapo:Korpo>
</Sapo:Koverto>

Nature, Vi verŝajne ne aldonus tiu “s0” prefikso sur via propra, Sed kelkaj iloj estas kuŝaj fari ĝin (Kiel Eklipso).

Tio ĉi estas multe pli konfuzanta / Ĉagreniĝanta ĉar aliaj metodoj toleras prefiksojn.  Ekzemple, La GetListCollection Metodo ne atentas se ĝi estas estita prefixed, Eĉ kun absurdaj prefiksoj kiel “xyzzy”:

image

Ĉi tiu “valoro ne povas esti null” ŝajnas juste ofta kun listoj.Asmx sekve espereble tio ĉi helpos iun ekstere en estonteco.

</Fino>

Aboni al mia blogo.

Sekvi min sur Pepi ĉe http://www.twitter.com/pagalvin