Kategori Arkiv: RESTEN

HTTP 406 Fejl når du bruger kantede $http.get mod SharePoint resten slutpunkter

Opdatering: Marc AD ndersson påpegede dette store stykke af info: http://Blogs.Office.com/2014/08/13/JSON-Light-support-rest-SharePoint-API-Released/. Det forklarer en masse :).

Det kan være den værste titlen på et blog-indlæg nogensinde! Anyhoo.

Jeg typisk gøre alle mine prototyping mod en O365-forekomst. Jeg har min personlige instans, så jeg ikke behøver at være bekymret om påvirker alle andre. Som en sidebemærkning--huske, når vi kalder udført omkring virtuelle maskiner på vores bærbare computere med mos-SQL Server, IIS, besluttende Hyper-V vs. VMWare? Anyhoo...

Jeg havde udviklet en app ved hjælp af kantede i dette miljø, der gør, blandt andet, Dette:

$http.get(serverUrl)
.succes(funktion(data, status, overskrifter, config) {

var getLinksResponse = data;

getLinksResponse.value.forEach(funktion(Myndigheden) {

// og så videre og så skum

Det virkede fint i to forskellige SharePoint online miljøer. Dog, Når min kollega porteret det til en forekomst af Cloudshare, Han fik en HTTP 406 fejl (der var første gang jeg nogensinde fik at man, så... yay, Jeg gætter). Vi gjorde en smule forskning og bemærket, at overskriften "Acceptere" var off. SharePoint online var helt tilfreds med:

Acceptere: ansøgning/json

Men cloudshare forekomsten (der er SP på prem, hostet i en virtuel server) ønskede klassiske "odata = verbose" tilføjet i samt:

Acceptere: ansøgning/json;OData = verbose

Hen til lave at, vi tilføjede i hovedet som sådan:

var config = {overskrifter: {
'Acceptere': «ansøgning/json;OData = verbose'
}
};

$http.get(serverUrl,config)
.succes(funktion(data, status, overskrifter, config) {

var getLinksResponse = data;

getLinksResponse.value.forEach(funktion(Myndigheden) {

// og så videre og så skum

Der fik befri for den 406, men det også ændret format af respons. Det var mere... verbose. (haha!) Flere ændringer var nødvendige og her er det endelige resultat:

var config = {overskrifter: {
'Acceptere': «ansøgning/json;OData = verbose'
}
};

$http.get(serverUrl,config)
.succes(funktion(data, status, overskrifter, config) {

var getLinksResponse = data;

getLinksResponse.d.Results.forEach(funktion(Myndigheden) {

// og så videre og så skum

Dette kun forvandlet til et 30 minut problem for os, så vi lucked ud. Forhåbentlig finder nogen dette nyttigt.

</slutningen>

Sådan angives mennesker som et søgeområde / Udgangspunktet for indeksering ved hjælp af SharePoint 2013 REST API

Jeg havde grund til at arbejde med SharePoint 2013 Search API via resten for første gang. Jeg ønskede at søge efter personer, ikke dokumenter. Nøglen læring her er, at angiver du indholdskilder via sin GUID (eller i det mindste i dette tilfælde). Følgende jQuery kodestykke viser hvordan:

    loadExpertsAsync: funktion() {

        jQuery.support.cors = True;

        $.Ajax({
            URL-adresse: Dette.CreateFullApiUrl() +
                "?querytext = 'hjemmesider'&SourceId = 'b09a7990-05ea-4af9-81ef-edfab16c4e31'" +
                "&selectproperties ='LinkedInProfileUrl,GoogleCirclesProfileUrl,BALargeProfilePictureUrls,BAGridPictures,WorkEmail,Færdigheder,AboutMe,Interesser,Jobtitel,PastProjects,PictureURL,PreferredName,TwitterHandle,LinkedInProfileUrl,PreferredName,GoogleCirclesProfileUrl'" +
                "&ROWLIMIT = 99",
            metode: "FÅ",
            overskrifter: { "Acceptere": "ansøgning/json; OData = verbose" },
            cache: falsk,
            succes: funktion (resultat) {

I mit tilfælde, Jeg kører API mod SharePoint online. At få GUID'EN, Jeg har fulgt disse trin:

  1. Adgang til SharePoint administration
  2. Vælg "Søg" fra den venstre hånd navigation
  3. Vælg Administrer"resultatet kilder"
  4. Vælg "Lokale folk resultater"
  5. Kig på URL-adressen.

Min URL kiggede noget som:

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

Parameteren sourceid er hvad arbejdede nemlig mig.

(Jeg forstår at sourceid faktisk kan være en slags permanent ting med SP, men jeg vil altid tjekke alligevel 🙂 ).

</slutningen>

undefinedAbonner på min blog.

Følg mig på kvidre på http://www.twitter.com/pagalvin

Eksempel SharePoint resten opkald

Her er et sæt af prøven resten opkald, der arbejder for mig og kan hjælpe dig ud samt. Som af 02/2014, there are two examples 🙂

  1. Referere til en kolonne med mellemrum i navn
  2. Referere til en multi-Vælg kolonne
  3. Udføre en People Search via resten

 

Jeg vil tilføje, at som tiden går.

Her er nogle nyttige trykfarver, jeg har fundet, samt:

Referere til en kolonne med mellemrum i navn

Jeg oprette en brugerdefineret liste med en kolonne med navnet "Blog forfatter" (plads mellem Blog og forfatter).

$select til at henvise til denne kolonne er:

image

Du skal blot udskifte rummet med "_x0020_". Vi ser _x0020_ i mange eksempler på tværs af internets og resten er ikke anderledes.

Hvis du ikke gør det, du risikerer at få en fejlmeddelelse som denne:

Udtrykket “Blog forfatter” er ikke gyldigt.

Let nok.

Referere til en multi-Vælg opslagskolonne

Opsætning af:

  1. Oprette en brugerdefineret liste navngivne kategorier.
  2. Tilføj nogle kategorier. Jeg har tilføjet kategorier thusly:image
  3. Oprette et andet brugerdefineret liste kaldet MockBlog og føje kategorier som en multi-Vælg listekolonne (eller webstedskolonne hvis det er hvordan du rulle).

Tilføje nogle elementer på listen Mockblog og du er klar.

En Ajax stil opkald ved hjælp af jQuery vil se noget som dette:

serverUrl  = "/_api/web/lister/GetByTitle('MockBlog')/elementer" +
             "?$Vælg = Title,Kategorier/titel,Blog_x0020_Author/titel" + 
             "&$Udvid = Blog_x0020_Author,Kategorier";

Vi fortæller SharePoint "Giv mig titlen for alle kategorier (Kategorier/titel). Få de faktiske værdier for Titel ved $UdvidING listen kategorier." (Min afslappende omskrive er sandsynligvis temmelig løs, men dette hvordan jeg fortolke det).

Hvis du gør det via JavaScript og brug af Fiddler til at se på output, du får noget som dette til gengæld:

 

image

(Ovenstående er en JSON objekt)

Udføre en People Search via resten

Jeg blogges om dette særskilt. Centrale er at angive en sourceid parameter hvis værdi er GUID'EN for den lokale befolkning indholdskilde. (Indholdskilder plejede at blive kaldt dækningsområder og det er min-oh-my så svært ikke at kalde alt en mulighed for mig!).

Læs mere om det her: http://www.mstechblogs.com/paul/?p=10385

 

</slutningen>

undefinedAbonner på min blog.

Følg mig på kvidre på http://www.twitter.com/pagalvin

Hurtig og nem: Oprette et SharePoint-websted ved hjælp af resten

Der er en masse ressourcer omkring at vise hvordan man gør det, men jeg kunne ikke finde en omfattende gå til link, så her er vi.

Du kan oprette et SharePoint-websted ved hjælp af API'EN resten.  Her er en fuldt bagt eksempel:

<!--
    SiteRequestForm.html: Indsamle oplysninger og oprette et websted for brugeren.
-->

<Center>
<tabel>
    <Tr>
        <TD>Navn på websted:</TD>
        <TD><input type= "tekst" Navn= "SiteName" id= "SiteName" /></TD>
    </Tr>
    <Tr>
        <TD colspan= "2">
            <input type= "Send" id= "CreateSiteButton" værdi= "Opretter webstedet" />
        </TD>
    </Tr>
</tabel>
</Center>

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

<script>
varians CreateSiteLogicContainer = {

    createSiteData: {
            "parametre": {
                __metadata: { "type": "SP.WebInfoCreationInformation" },
                URL-adresse: "Paultest1",
                Titel: "Paultest1",
                Beskrivelse: "resten-skabte web af Paul!",
                Sprog: 1033,
                Webstedsskabelonen: "sts",
                UseUniquePermissions: falsk
            }
    },

    createSite: funktion () {

        jQuery.support.cors = True;

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

            overskrifter: {
                "acceptere": "ansøgning/json; OData = verbose",
                "content-type": "ansøgning/json;OData = verbose",
                "X-RequestDigest": $("#__REQUESTDIGEST").Val()
            },

            data: JSON.stringify(CreateSiteLogicContainer.createSiteData),

            succes: funktion () { alarm("succes"); },
            fejl: funktion () { alarm("fejl"); }

        });
    },

    wireUpForm: funktion () {
        $("#CreateSiteButton").Klik på(funktion () {
            alarm("Ved at prøve og oprette webstedet.");
            CreateSiteLogicContainer.createSite();
        });
    }


}

CreateSiteLogicContainer.wireUpForm();

</script>

Når det lykkes, du får en JSON pakke som svar på denne:

image

Min centrale tanker og læringer fra denne omfatter:

  • Denne fremgangsmåde bruger jQuery.  I mit tilfælde, mit jQuery biblioteket er beliggende i ".../ plugins. "  Du vil gerne ændre det til at pege på din foretrukne JQ placering.
  • Du kan kopiere og indsætte det hele kodestykket i webdelen Indholdsredigering på en side og skal det fungere bare fint.  Du ønsker at ændre slutpunktet for API-kald og sørg for du reference JQ korrekt.
  • URL-adressen er i forhold til din API slutpunkt.  I mit tilfælde, Det er at oprette underordnede websteder under https://bigapplesharepoint.com
  • Du behøver ikke at give en indhold-længde. Nogle blogindlæg og MSDN dokument indebærer, at du gør, men der skete for mig automatisk, som jeg formoder bliver håndteret af $.ajax opkaldet, selv.
  • Denne linje er påkrævet for at undgå en "forbudte" svar: "X-RequestDigest": $("#__REQUESTDIGEST").Val().  Der er andre måder at gøre det, men det er ret nice.  Jeg har mistet linket til blog, leveres denne genvej.  H/T til dig, mystiske blogger!

Held og lykke og håber det hjælper nogen.

</slutningen>

undefinedAbonner på min blog.

Følg mig på kvidre på http://www.twitter.com/pagalvin

Hurtig og enkel: SharePoint resten kalder kun returnerer 100 Poster

Jeg har arbejdet på et offentligt modstående websted for min SharePoint praksis her i New York og det bruger en masse JavaScript og resten opkald til at vise indhold.

Under hovedlinjen udvikling, Jeg oprette en lille datasæt med lige 10 eller så rækker i en brugerdefineret liste og min resten opfordrer alle trak derfra.  En gang jeg stødte op på listen for at have et par hundrede rækker af data til at teste for forventede vækst, Jeg fandt, at jeg fik præcis 100 rækker, der returneres tilbage på min hvile opkald.

Dette er en meget simpel ting at adresse.  I mit tilfælde (og jeg tror i de fleste tilfælde), standard resten opkald til SharePoint (og muligvis som en industri standard?) tilbagevenden 100 rækker.  At vende tilbage mere end standard, Brug parameteren $top på dit opkald, som i:

FÅ /Insights Dev/_api/web/lists/GetByTitle('MockBlog')/elementer?$Vælg = ID,Titel,Kategorier/titel,Blog_x0020_Author/titel,DatePublished,BlogSummary&$Udvid = Blog_x0020_Author,Kategorier&$filter =&$Top = 9999

Jeg tog 9999 i dette tilfælde da jeg ved at growth-wise, der vil ikke være mere end 200 eller så rækker føjes til denne liste i et år.  Hvis det bliver klodset, Vi kan gennemføre nogle personsøgning på vej.

</slutningen>

undefinedAbonner på min blog.

Følg mig på kvidre på http://www.twitter.com/pagalvin