Kategori Arkiv: RESTEN

HTTP 406 Fel när du använder kantiga $http.get mot SharePoint resten slutpunkter

Uppdatering: Marc AD ndersson påpekade detta stor bit av information: http://blogs.Office.com/2014/08/13/JSON-Light-support-rest-SharePoint-API-Released/. Som förklarar en hel del :).

Det kan vara den värsta titeln på ett blogginlägg någonsin! Anyhoo.

Jag gör alla min prototyping mot en O365-instans. Jag har min personliga instans så att jag slipper vara orolig som påverkar någon annan. Som en parentes – kom ihåg när vi kallar burna runt virtuella maskiner på våra bärbara datorer med MOSS-SQL Server, IIS, beslutande Hyper-V vs. VMWare? Hur som helst...

Jag hade utvecklat en app som använder vinkelformig i denna miljö som gör, bland annat, Detta:

$http.get(serverUrl)
.framgång(funktionen(data, status, headers, config) {

var getLinksResponse = data;

getLinksResponse.value.forEach(funktionen(Resultatet) {

// och så vidare och så skum

Detta fungerade bara bra i två olika SharePoint online miljöer. Men, När min kollega portat det till en Cloudshare-instans, Han var att få en HTTP 406 fel (vilket var första gången jag någonsin fått det, så... yay, Tror jag). Vi gjorde lite forskning och märkte att "Acceptera" huvudet var off. SharePoint online var helt nöjd med:

Acceptera: Application/json

Utom den cloudshare instansen (som är SP på prem, värd i en virtual server) ville ha klassiskt "odata = verbose" tillagda i:

Acceptera: Application/json;OData = verbose

Att fixa det, Vi lade till i huvudet som sådan:

var config = {headers: {
"Acceptera": ' application/json;OData = verbose "
}
};

$http.get(serverUrl,config)
.framgång(funktionen(data, status, headers, config) {

var getLinksResponse = data;

getLinksResponse.value.forEach(funktionen(Resultatet) {

// och så vidare och så skum

Som fick bort den 406, men det ändras även formatet för svaret. Det var mer... verbose. (haha!) Fler ändringar var nödvändiga och här är slutresultatet:

var config = {headers: {
"Acceptera": ' application/json;OData = verbose "
}
};

$http.get(serverUrl,config)
.framgång(funktionen(data, status, headers, config) {

var getLinksResponse = data;

getLinksResponse.d.results.forEach(funktionen(Resultatet) {

// och så vidare och så skum

Detta bara förvandlats till en 30 minut problem för oss, så vi lucked ut. Förhoppningsvis hittar någon detta användbara.

</slutet>

Hur du anger människor som en sökomfattning / Använda SharePoint-innehållskälla 2013 REST API

Jag hade anledning att arbeta med SharePoint 2013 Sök-API via resten för första gången. Jag ville söka efter personer, inte dokument. Nyckeln för att lära sig här är att anger du innehåll källor via dess GUID (eller åtminstone i detta fall). Följande jQuery utdrag visar hur:

    loadExpertsAsync: funktionen() {

        jQuery.support.cors = sant;

        $.Ajax({
            URL: Detta.CreateFullApiUrl() +
                "?querytext = "portaler"&SourceId = "b09a7990-05ea-4af9-81ef-edfab16c4e31"" +
                "&selectproperties ='LinkedInProfileUrl,GoogleCirclesProfileUrl,BALargeProfilePictureUrls,BAGridPictures,WorkEmail,Färdigheter,AboutMe,Intressen,Yrkestitel,PastProjects,PictureURL,PreferredName,TwitterHandle,LinkedInProfileUrl,PreferredName,GoogleCirclesProfileUrl "" +
                "&ROWLIMIT = 99",
            metoden: "FÅ",
            headers: { "Acceptera": "Application/json; OData = verbose" },
            cache: falskt,
            framgång: funktionen (resultat) {

I mitt fall, Jag kör API mot SharePoint online. Att få GUID, Jag följde stegen:

  1. Komma åt SharePoint admin center
  2. Välj "Sök" från den vänstra navigeringen
  3. Välj hantera"resultatet källor"
  4. Välj "Lokalbefolkningen resultat"
  5. Titta på Webbadressen.

Min URL såg något liknande:

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

Parametern sourceid är vad arbetat för jag.

(Jag förstår att målentiteten kan faktiskt vara ett slags permanent sak med SP, men jag ska alltid kontrollera ändå 🙂 ).

</slutet>

undefinedPrenumerera på min blogg.

Följ mig på Twitter vid http://www.twitter.com/pagalvin

Exempel SharePoint resten samtal

Här är en uppsättning prov resten samtal som fungerar för mig och kan hjälpa dig också. Som av 02/2014, there are two examples 🙂

  1. Referera till en kolumn med blanksteg i namnet
  2. Referens en Multi-Välj kolumn
  3. Människor söka via resten

 

Jag lägger till detta som tiden går.

Här är några användbara bläck som jag har hittat samt:

Referera till en kolumn med blanksteg i namnet

Jag skapa en anpassad lista med en kolumn som heter "Blog författare" (utrymmet mellan blogg och författare).

$select att referera till kolumnen är:

image

Helt enkelt ersätta utrymmet med "_x0020_". Vi ser _x0020_ i många exempel över internets och resten är inte annorlunda.

Om du inte gör som, Du kan få ett felmeddelande liknande detta:

Uttrycket “Blogg författare” är inte giltig.

Lätt nog.

Referens en Multi-Välj uppslagskolumn

Ställ in:

  1. Skapa en anpassad lista som heter kategorier.
  2. Lägga till vissa kategorier. Jag la kategorier thusly:image
  3. Skapa en anpassad lista som kallas MockBlog och lägga till kategorier som en Multi-Välj lista kolumn (eller webbplatskolumn om det är hur du slår).

Lägga till vissa objekt i listan Mockblog och du är redo.

En Ajax stil samtal med hjälp av jQuery kommer att se ut så här:

serverUrl  = "/_api/web/listor/GetByTitle("MockBlog")/objekt" +
             "?$Välj = Title,Kategorier/titel,Blog_x0020_Author/titel" + 
             "&$Expandera = Blog_x0020_Author,Kategorier";

Vi säger SharePoint "ge mig titeln för alla kategorier (Kategorier/titel). Få de faktiska värdena för Avdelning genom $Expanderaning listan Kategorier." (Min vilsam omskriva är nog ganska lös, men detta hur jag tolkar det).

Om du gör detta via JavaScript och använder spelman titta på utdata, du får något sådant i gengäld:

 

image

(Ovanstående är en JSON objekt)

Människor söka via resten

Jag bloggade om detta separat. Viktiga är att ange en sourceid parameter vars värde är GUID för lokalbefolkningen innehållskällan. (Innehållskällor brukade kallas omfattningar och det är min-oh-my så hårt att inte kalla allt ett scope för mig!).

Läs mer om det här: http://www.mstechblogs.com/paul/?p=10385

 

</slutet>

undefinedPrenumerera på min blogg.

Följ mig på Twitter vid http://www.twitter.com/pagalvin

Snabb och enkel: Skapa en SharePoint-webbplats med resten

Det finns en hel del resurser runt som visar hur man gör detta, men jag kunde inte hitta en omfattande gå till länk, så här är vi.

Du kan skapa en SharePoint-webbplats med hjälp av vila API.  Här är en fullt bakade exempel:

<!--
    SiteRequestForm.html: Samla in information och skapa en webbplats för användaren.
-->

<Center>
<tabell>
    <TR>
        <TD>Webbplatsens namn:</TD>
        <TD><input typ= "text" Namn= "Platsnamn" ID= "Platsnamn" /></TD>
    </TR>
    <TR>
        <TD ColSpan= "2">
            <input typ= "Skicka" ID= "CreateSiteButton" värde= "Skapa webbplatsen" />
        </TD>
    </TR>
</tabell>
</Center>

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

<skript>
var CreateSiteLogicContainer = {

    createSiteData: {
            "parametrar": {
                __metadata: { "typ": "SP.WebInfoCreationInformation" },
                URL: "Paultest1",
                Avdelning: "Paultest1",
                Beskrivning: "Vila-skapad webb av Paul!",
                Språk: 1033,
                Webbmallen: "sts",
                UseUniquePermissions: falskt
            }
    },

    createSite: funktionen () {

        jQuery.support.cors = sant;

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

            headers: {
                "Acceptera": "application/json; OData = verbose",
                "content-type": "application/json;OData = verbose",
                "X-RequestDigest": $(#__REQUESTDIGEST"").val()
            },

            data: JSON.stringify(CreateSiteLogicContainer.createSiteData),

            framgång: funktionen () { Alert("framgång"); },
            fel: funktionen () { Alert("fel"); }

        });
    },

    wireUpForm: funktionen () {
        $("#CreateSiteButton").Klicka på(funktionen () {
            Alert("Om att försöka skapa webbplatsen.");
            CreateSiteLogicContainer.createSite();
        });
    }


}

CreateSiteLogicContainer.wireUpForm();

</skript>

När framgångsrika, du får ett JSON paket som svar så här:

image

Mina viktiga tankar och lärdomar från detta:

  • Denna strategi använder jQuery.  I mitt fall, min jQuery biblioteket ligger i ".../ plugins. "  Vill du ändra som att peka till din favorite JQ-läge.
  • Du kan kopiera och klistra in det hela utdraget i en Innehållsredigeraren på en sida och det bör fungera alldeles utmärkt.  Du vill ändra slutpunkten för API-anrop och se till att du referera JQ korrekt.
  • Webbadressen är i förhållande till din API slutpunkt.  I mitt fall, Det skapar underwebbplatser under https://bigapplesharepoint.com
  • Du behöver inte ge ett innehåll-längd. Några blogginlägg och MSDN dokument innebär att du gör, men hände mig automatiskt, som jag antar sköts av $.ajax appellen sig själv.
  • Denna linje är krävs för att undvika en "förbjuden" svar: "X-RequestDigest": $(#__REQUESTDIGEST"").val().  Det finns andra sätt att göra det, men det är ganska trevligt.  Jag har tappat länken till blogg som denna genväg.  H/T till dig, mystiska blogger!

Lycka till och hoppas att detta hjälper någon.

</slutet>

undefinedPrenumerera på min blogg.

Följ mig på Twitter vid http://www.twitter.com/pagalvin

Snabb och enkel: SharePoint resten kallar endast returnerar 100 Poster

Jag har jobbat på en offentlig inför webbplats för min SharePoint praktik här i New York och en massa JavaScript och resten samtal för att visa innehåll.

Under stambanan utveckling, Jag skapa en liten datamängd med bara 10 eller så rader i en anpassad lista och min resten uppmanar alla drog därifrån.  En gång jag stötte upp listan att ha några hundra rader med data för att testa för förväntad tillväxt, Jag tyckte att jag var får exakt 100 rader som returneras tillbaka på mina övriga samtal.

Detta är en mycket enkel sak att adress.  I mitt fall (och jag tror i de flesta fall), standard resten samtal till SharePoint (och eventuellt som en branschstandard?) återvändande 100 rader.  Tillbaka mer än standard, Använd parametern $top på ditt samtal, som i:

FÅ /Insights Dev/_api/web/lists/GetByTitle("MockBlog")/objekt?$Välj = ID,Avdelning,Kategorier/titel,Blog_x0020_Author/titel,DatePublished,BlogSummary&$Expandera = Blog_x0020_Author,Kategorier&$filter =&$toppen = 9999

Jag plockade 9999 i detta fall eftersom jag vet att growth-wise, Det kommer inte finnas mer än 200 eller så rader läggs till i listan under ett år.  Om det blir otymplig, Vi kan genomföra några kalla på vägen.

</slutet>

undefinedPrenumerera på min blogg.

Följ mig på Twitter vid http://www.twitter.com/pagalvin