Categorie Archieven: SharePoint webservices

Het opgeven van mensen als een zoekbereik / De bron van de inhoud met behulp van SharePoint 2013 REST API

Ik had reden om te werken met de SharePoint 2013 Search API via REST voor de eerste keer. Ik wilde om te zoeken naar personen, geen documenten. De sleutel leren hier is dat die u opgeeft inhoudsbronnen via de GUID (of op zijn minst in dit geval). De volgende jQuery fragment toont hoe:

    loadExpertsAsync: functie() {

        jQuery.support.cors = True;

        $.Ajax({
            URL: Dit.CreateFullApiUrl() +
                "?QueryText = 'sites'&sourceid = 'b09a7990-05ea-4af9-81ef-edfab16c4e31'" +
                "&selectproperties ='LinkedInProfileUrl,GoogleCirclesProfileUrl,BALargeProfilePictureUrls,BAGridPictures,WorkEmail,Vaardigheden,AboutMe,Belangen,JobTitle,PastProjects,Afbeeldings-URL,PreferredName,TwitterHandle,LinkedInProfileUrl,PreferredName,GoogleCirclesProfileUrl'" +
                "&rowlimit = 99",
            methode: "Toevoegen",
            headers: { "Accepteren": "application/json; odata = verbose" },
            cache: vals,
            succes: functie (resultaat) {

In mijn geval, I 'm running de API tegen SharePoint online. Om de GUID, Ik volgde deze stappen:

  1. Toegang tot de SharePoint admin center
  2. Selecteer 'zoeken' uit de linker navigatie
  3. Selecteer "Resultaat bronnen beheren"
  4. Selecteer "Lokale bevolking resultaten"
  5. Kijk naar de URL.

Mijn URL keek iets als:

https://xyzzy-admin.sharepoint.com/_layouts/15/searchadmin/EditResultSource.aspx?level=tenant&sourceid=b09a7990%2D05ea%2D4af9%2D81ef%2Dedfab16c4e31&view=1

De parameter sourceid is wat werkte voor mij.

(Ik begrijp dat de sourceid daadwerkelijk kan een soort permanente ding met SP, maar ik zal altijd te controleren hoe dan ook 🙂 ).

</einde>

undefinedAbonneren op mijn blog.

Volg mij op Twitter op http://www.twitter.com/pagalvin

Lists.asmx, GetListItems en mappen

Ik deed wat onderzoek voor iemand vandaag rond de list.asmx webservice geleverd als onderdeel van SharePoint 2010 (en eerder).  Ze kon krijgen de lijstitems op de root-map (met inbegrip van de namen van de submappen), maar kon niet items in submappen.  Ik deed wat rondkijken op de internets en het is een verrassend gemeenschappelijke vraag.  Nog, Ik kon niet krijgen een goed antwoord op de eenvoudige vraag, "als ik weet dat de map, Hoe krijg ik de items in de map?”  Om eerlijk te zijn, Ik heb niet proberen zo hard aangezien ik figuur dit één uit op mijn eigen voor een tijdje wilde Glimlach.

Dit instellen, Ik heb een site met de naam "Bloggen scenario's" en een aangepaste lijst genaamd "Aangepaste lijst met Sub Folders".  Ik vervolgens mappen met deze naam gemaakt:

  • Jaar 2005
  • Jaar 2006
  • Jaar 2007

Ik een paar items toegevoegd aan de map "Year 2006".  Dit is wat het als kijkt:

image

Mijn vriend is niet C# code te schrijven maar eerder met behulp van Java, dus de SOAP-envelop wat ze echt nodig was.  Om dat te krijgen, Ik schreef een beetje van jQuery en vervolgens fiddler gebruikt om de werkelijke HTTP gesprek.

Hier is het relevante jQuery (Ik heb de code gekopieerd naar beneden hieronder als u wilt kopiëren en plakken):

image

Zij eerste sleutel is om zowel een <queryOptions> en <QueryOptions> knooppunt.  De tweede sleutel is dat de <Map> knooppunt is een URL waarnaar de client toegang heeft.

Kunnen er andere manieren om dit te krijgen, maar dit werkte goed voor mij toen met behulp van jQuery.

Hier is de SOAP-envelop voor de bovenstaande:

<soapenv:Envelop xmlns:soapenv =’http://schemas.xmlsoap.org/soap/envelope/’>                
  <soapenv:Lichaam>
    <GetListItems xmlns =’
http://schemas.Microsoft.com/SharePoint/SOAP/’>
      <listName>Aangepaste lijst met submappen</listName>
      <viewFields>  
        <ViewFields>
          <FieldRef naam =' titel’ />
          <FieldRef naam ='EncodedAbsUrl’ />
        </ViewFields>
      </viewFields>
      <queryOptions>
        <QueryOptions>
          <Map>
http://demoserver1/bloggen Scenario's / lijsten/aangepaste lijst met Sub mappen/jaar 2006</Map>
        </QueryOptions>
      </queryOptions>
   
</GetListItems>
  </soapenv:Lichaam>
</soapenv:Envelop>

Een heleboel voorbeelden en discussie rond dit leidde me om te geloven dat alles wat ik nodig was <QueryOptions> en geef een mapnaam.  Voor mij, Ik nodig beide wikkel het binnen <queryOptions> zo goed als een volledig gekwalificeerde URL opgeven voor de <Map> knooppunt.

Hier is de setup jQuery AJAX:

$(document).klaar(functie() {
       var soapEnv =
           "<soapenv:Envelop xmlns:soapenv =’http://schemas.xmlsoap.org/soap/envelope/’> \
               <soapenv:Lichaam> \
                    <GetListItems xmlns =’http://schemas.Microsoft.com/SharePoint/SOAP/’> \
                       <listName>Aangepaste lijst met submappen</listName> \
                       <viewFields> \
                           <ViewFields> \
                              <FieldRef naam =' titel’ /> \
                              <FieldRef naam ='EncodedAbsUrl’ /> \
                          </ViewFields> \
                       </viewFields> \
                       <queryOptions> \
                         <QueryOptions> \
                           <Map>http://demoserver1/Blogging Scenario's / lijsten/aangepaste lijst met Sub mappen/jaar 2006</Map> \
                         </QueryOptions> \
                       </queryOptions> \
                   </GetListItems> \
               </soapenv:Lichaam> \
           </soapenv:Envelop>";

</einde>

Abonneren op mijn blog.

Volg mij op Twitter op http://www.twitter.com/pagalvin

Lists.asmx, GetList en "waarde kan niet null”

Ik ontdekte vandaag dat de GetList() methode in lists.asmx web-service moet zeer zorgvuldig worden genoemd of het is gevoelig voor het gooien van een mysterieuze "Waarde null kan niet" uitzondering (en dat de veronderstelling dat kunt u voorbij het nog erger algemene foutbericht, "Uitzondering van het type ' Microsoft.SharePoint.SoapServer.SoapServerException’ werd gegooid.")  Specifiek, Ik vond dat u niet elke vorm van voorvoegsel te op de GetList-methode verstrekken.  De volgende jQuery fragment illustreert het punt:

image

Als u dat doen, de webservice reageert met "Waarde kan niet null" als per dit Fiddler-geboden HTTP transcript:

<?XML version = "1.0" encoding = "utf-8"?>
  <zeep:Envelop
     xmlns:zeep ="
http://schemas.xmlsoap.org/soap/envelope/"    
     xmlns:XSi = "
http://www.w3.org/2001/XMLSchema-instance
     xmlns:XSD ="
http://www.w3.org/2001/XMLSchema">

  <zeep:Lichaam>
    <zeep:Schuld>
      <FaultCode>zeep:Server</FaultCode>
      <FaultString>
        Uitzondering van het type ' Microsoft.SharePoint.SoapServer.SoapServerException’ werd gegooid.
      </FaultString>
      <detail>
        <ErrorString xmlns ="
http://schemas.Microsoft.com/SharePoint/SOAP/">
Waarde kan niet null.
        </ErrorString>
      </detail>
    </zeep:Schuld>
  </zeep:Lichaam>
</zeep:Envelop>

Natuurlijk, u niet zou waarschijnlijk toevoegen dat "s0" voorvoegsel op uw eigen, maar sommige tools zijn geneigd om het te doen (zoals Eclipse).

Dit is des te meer verwarrend / frustrerend omdat andere methoden voorvoegsels tolereren.  Bijvoorbeeld, de GetListCollection methode erg niet als het wordt zijn voorafgegaan, zelfs met onzin voorvoegsels zoals "xyzzy":

image

Dit "waarde null kan niet" lijkt vrij algemeen met lists.asmx dus hopelijk dit iemand uit in de toekomst helpen zal.

</einde>

Abonneren op mijn blog.

Volg mij op Twitter op http://www.twitter.com/pagalvin