Categorie Archieven: REST

HTTP 406 Fout bij het gebruik van hoekige $http.get tegen SharePoint REST eindpunten

Update: Marc AD ndersson om erop te wijzen dit grote stuk van info: http://blogs.Office.com/2014/08/13/JSON-Light-Support-rest-SharePoint-API-Released/. Dat verklaart veel :).

Dat is misschien wel de ergste titel van een blogpost ooit! Hoe dan ook.

Ik meestal doe alle van mijn prototyping tegen een O365 exemplaar. Ik heb mijn persoonlijke exemplaar, zodat ik niet hoef te worden bezorgd op het gebied van iemand anders. Als een terzijde-Onthoud wanneer wij uitgevoerd rond virtuele machines op onze laptops met mos-SQL Server, IIS, beslissende Hyper-V vs. VMWare? Hoe dan ook...

Ik had ontwikkeld een app gebruikt Angular in deze omgeving die doet, onder andere, Dit:

$http.Get(serverUrl)
.succes(functie(gegevens, status, headers, config) {

var getLinksResponse = data;

getLinksResponse.value.forEach(functie(theResult) {

// en zo verder en zo schuim

Dit werkte prima in twee verschillende SharePoint online omgevingen. Echter, Toen mijn collega het ported aan de aanleg van een Cloudshare, Hij kreeg een HTTP 406 fout (die was de eerste keer dat ik ooit kreeg die ene, dus... yay, Denk ik). We heb een beetje van het onderzoek en merkte dat de "Accept" header uitgeschakeld was. SharePoint online was perfect gelukkig met:

Accepteren: application/json

Behalve het cloudshare exemplaar (Wat is SP op prem, gehost op een virtuele server) wilde de klassieke "odata = verbose" toegevoegd ook:

Accepteren: application/json;odata = verbose

Om dat te bevestigen, Wij toegevoegd de kop als zodanig:

var config = {headers: {
'Accepteren': ' application/json;odata = verbose'
}
};

$http.Get(serverUrl,config)
.succes(functie(gegevens, status, headers, config) {

var getLinksResponse = data;

getLinksResponse.value.forEach(functie(theResult) {

// en zo verder en zo schuim

Die verlost van de 406, maar het ook de indeling van de reactie gewijzigd. Het was meer... uitgebreide. (haha!) Meer veranderingen nodig waren en hier is het eindresultaat:

var config = {headers: {
'Accepteren': ' application/json;odata = verbose'
}
};

$http.Get(serverUrl,config)
.succes(functie(gegevens, status, headers, config) {

var getLinksResponse = data;

getLinksResponse.d.Results.forEach(functie(theResult) {

// en zo verder en zo schuim

Dit alleen omgezet in een 30 minuut probleem voor ons, Dus wij lucked uit. Hopelijk vindt iemand dit nuttig.

</einde>

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

In het volgende voorbeeld SharePoint REST oproepen

Hier is een set van monster REST oproepen die werken voor mij en kan u helpen zo goed. Als van 02/2014, there are two examples šŸ™‚

  1. Verwijzen naar een kolom met ruimten In zijn naam
  2. Verwijst naar een meervoudige selectie kolom
  3. Een zoekopdracht mensen via REST

 

Ik zal toevoegen aan dit naarmate de tijd verstrijkt.

Hier zijn sommige nuttige inkten die ik zo goed heb gevonden:

Verwijzen naar een kolom met ruimten In zijn naam

Ik maken een aangepaste lijst met een kolom met de naam "blogauteur" (ruimte tussen Blog en auteur).

De $select om te verwijzen naar die kolom is:

image

Simpelweg vervangen naar de ruimte met "_x0020_". We zien de _x0020_ in veel voorbeelden over de internets en REST is niet anders.

Als u dat niet doet, je bent aansprakelijk om een foutmelding als deze:

De expressie “Blog Auteur” is niet geldig.

Gemakkelijk genoeg.

Verwijst naar een meervoudige selectie opzoekkolom

Instellen:

  1. Een aangepaste lijst met de naam Categorieƫn maken.
  2. Sommige categorieƫn toevoegen. Ik heb toegevoegd categorieƫn thusly:image
  3. Maak een andere aangepaste lijst genoemd MockBlog en categorieƫn toevoegen als een meervoudige selectie lijstkolom (of sitekolom als dat is hoe u rollen).

Sommige items toevoegen aan uw lijst met Mockblog en je bent klaar.

Een Ajax stijl gesprek met behulp van jQuery ziet er iets als dit:

serverUrl  = "/_api/web/lijsten/GetByTitle('MockBlog')/items" +
             "?$Selecteer = Titel,Categorieƫn/titel,Blog_x0020_Author/titel" + 
             "&$Vouw = Blog_x0020_Author,Categorieƫn";

We vertellen SharePoint "Geef me de titel voor alle categorieƫn (Categorieƫn/titel). Krijgen van de werkelijke waarden voor Titel door $uit te breidenING de lijst Categorieƫn." (Mijn rustgevende parafrase is waarschijnlijk vrij losse, maar dit hoe ik ben interpretatie van het).

Als u dit doet via JavaScript en met behulp van Fiddler om te kijken naar de output, in ruil daarvoor krijg je zoiets als dit:

 

image

(Het bovenstaande is een JSON-object)

Een zoekopdracht mensen via REST

Ik geblogd over dit afzonderlijk. De sleutel is om een parameter van de sourceid waarvan de waarde de GUID van de bron van de lokale bevolking inhoud is opgeven. (Inhoudsbronnen gebruikt te worden genoemd scopes en het is mijn-oh-mijn zo moeilijk niet te roepen alles een scope voor mij!).

Lees hier meer over het: http://www.mstechblogs.com/paul/?p=10385

 

</einde>

undefinedAbonneren op mijn blog.

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

Snel en eenvoudig: Een SharePoint-Site met behulp van REST maken

Er zijn een heleboel middelen rond die laten zien hoe dit te doen, maar ik kon het niet vinden een uitgebreide Ga-naar-link, Dus hier zijn we.

U kunt een SharePoint-site met behulp van de REST API.  Hier is een volledig gebakken voorbeeld:

<!--
    SiteRequestForm.html: Informatie verzamelen en een site maken voor de gebruiker.
-->

<Center>
<tabel>
    <tr>
        <TD>Naam van de site:</TD>
        <TD><input type= "tekst" naam"SiteName =" id"SiteName =" /></TD>
    </tr>
    <tr>
        <TD ColSpan= "2">
            <input type= "submit" id"CreateSiteButton =" waarde= "Maak de Site" />
        </TD>
    </tr>
</tabel>
</Center>

<script src="../Plugins/jQuery-1.11.0.min.js"></script>

<script>
var CreateSiteLogicContainer = {

    createSiteData: {
            "parameters": {
                __metadata: { "type": "SP.WebInfoCreationInformation" },
                URL: "Paultest1",
                Titel: "Paultest1",
                Beschrijving: "rest-gemaakt web door Paul!",
                Taal: 1033,
                WebTemplate: "St",
                UseUniquePermissions: vals
            }
    },

    createSite: functie () {

        jQuery.support.cors = True;

        CreateSiteLogicContainer.createSiteData.parameters.Url = $("#SiteName").Val();
        
        $.Ajax({
            URL: "https://bigapplesharepoint.sharepoint.com/NBAIADev/_api/web/webinfos/add",
            methode: "POST",

            headers: {
                "accept": "application/json; odata = verbose",
                "content-type": "application/json;odata = verbose",
                "X-RequestDigest": $(#__REQUESTDIGEST"").Val()
            },

            gegevens: JSON.stringify(CreateSiteLogicContainer.createSiteData),

            succes: functie () { waarschuwing("succes"); },
            fout: functie () { waarschuwing("fout"); }

        });
    },

    wireUpForm: functie () {
        $("#CreateSiteButton").Klik op(functie () {
            waarschuwing("Ongeveer om te proberen en de site hebt gemaakt.");
            CreateSiteLogicContainer.createSite();
        });
    }


}

CreateSiteLogicContainer.wireUpForm();

</script>

Wanneer succesvol, krijg je een pakje JSON in reactie als dit:

image

Mijn belangrijkste gedachten en lessen uit deze opnemen:

  • Deze aanpak maakt gebruik van jQuery.  In mijn geval, mijn jQuery bibliotheek bevindt zich "../ plugins. "  U zult willen veranderen om te wijzen op uw favoriete JQ locatie.
  • U kunt kopiĆ«ren en plakken dat hele fragment in een webonderdeel Inhoudseditor op een pagina en het zou moeten werken prima.  U zult willen wijzigen het eindpunt van de API-aanroep en zorg ervoor dat u verwijst naar JQ correct.
  • De URL is ten opzichte van uw API eindpunt.  In mijn geval, het het creĆ«ren van subsites onder https://bigapplesharepoint.com
  • U hoeft niet te bieden een inhoud-lengte. Sommige blog posts en MSDN document impliceert dat jij, maar gebeurde voor mij automatisch, die ik neem aan dat wordt afgehandeld door de $.ajax aanroep zelf.
  • Deze regel is nodig om te voorkomen dat een "verboden" antwoord: "X-RequestDigest": $(#__REQUESTDIGEST"").Val().  Er zijn andere manieren om het te doen, maar dit is vrij aardig.  Ik heb de link naar blog die deze snelkoppeling verloren.  H/T aan u, mysterieuze blogger!

Veel geluk en hoop dat die dit helpt iemand uit.

</einde>

undefinedAbonneren op mijn blog.

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

Snelle en eenvoudige: SharePoint REST gesprek enige Returns 100 Records

Ik heb gewerkt op een openbare geconfronteerd met web site voor mijn SharePoint praktijk hier in New York en het maakt gebruik van veel JavaScript en REST oproepen naar inhoud weergeven.

Tijdens de mainline ontwikkeling, Ik maak een kleine dataset met net 10 of zo rijen in een aangepaste lijst en mijn aanroepen REST alle trok vanaf daar.  Eens ik gestoten op de lijst dat een paar honderd rijen met gegevens om te testen voor verwachte groei, Ik vond dat ik kreeg precies 100 rijen geretourneerd terug op mijn aanroepen REST.

Dit is een heel simpel ding naar adres.  In mijn geval (en ik denk dat in de meeste gevallen), de standaard REST roept naar SharePoint (en eventueel als een industriestandaard?) terugkeer 100 rijen.  Om terug te keren meer dan de standaard, Gebruik de parameter $top voor uw oproep, Als in:

KRIJGEN /Insights Dev/_api/web/lists/GetByTitle('MockBlog')/items?$Selecteer = ID,Titel,Categorieƫn/titel,Blog_x0020_Author/titel,DatePublished,BlogSummary&$Vouw = Blog_x0020_Author,Categorieƫn&$filter =&$Top = 9999

Ik pakte 9999 in dit geval omdat ik weet dat growth-wise, Er zal niet meer dan 200 of zo rijen toegevoegd aan deze lijst in een jaar.  Als het wordt logge, We kunnen sommige wisselbestand op de weg.

</einde>

undefinedAbonneren op mijn blog.

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