Arhive de categorii: RESTUL

HTTP 406 Eroare atunci când se utilizează unghiulară $http.get împotriva SharePoint restul sfârşitul puncte

Actualizare: Marc AD ndersson a subliniat această bucată mare de informaţii: http://blogs.Office.com/2014/08/13/JSON-Light-support-rest-SharePoint-API-released/. Care explică mult :).

Care ar putea fi mai rău titlul un blog post vreodată! Anyhoo.

De obicei face tot de meu prototipuri împotriva o instanta O365. Am meu instanţă personale, astfel încât nu trebuie să fie îngrijorat de oricine altcineva care afectează. Ca o deoparte-amintesc când am apel efectuate în jurul maşinilor virtuale pe laptop-urile noastre cu muşchi – SQL Server, IIS, se decide Hyper-V vs. VMWare? Anyhoo...

Am dezvoltat un app folosind unghiulară în acest mediu care face, Printre alte lucruri, Acest lucru:

$http.get(serverUrl)
.succesul(funcţia(date, statutul, anteturi, config) {

var getLinksResponse = datele;

getLinksResponse.value.forEach(funcţia(Rezultatul) {

// şi aşa mai departe şi astfel încât spuma

Acest lucru a fost de lucru bine în două medii diferite SharePoint online. Cu toate acestea, când colegul meu l-a portat la o instanţă de Cloudshare, El a fost obtinerea o HTTP 406 eroare (care a fost prima dată am ajuns vreodată că unul, Deci... yay, bănuiesc). Am facut un pic de cercetare şi am observat că antetul "Accepta" a fost oprit. SharePoint online a fost perfect fericit cu:

Accepta: cerere/json

Dar instanta cloudshare (care este SP prem, Găzduit într-un server virtual) vrut clasic "odata = verbose" adăugat în, precum şi:

Accepta: cerere/json;Odata = verbose

Pentru a stabili că, am adăugat antetul ca atare:

var config = {anteturi: {
"Accept": ' cerere/json;Odata = verbose'
}
};

$http.get(serverUrl,config)
.succesul(funcţia(date, statutul, anteturi, config) {

var getLinksResponse = datele;

getLinksResponse.value.forEach(funcţia(Rezultatul) {

// şi aşa mai departe şi astfel încât spuma

Că am scăpat de 406, dar, de asemenea, modificat formatul de răspuns. A fost mai mult... "vorbaret". (haha!) Mai multe modificări au fost necesare şi aici este rezultatul final:

var config = {anteturi: {
"Accept": ' cerere/json;Odata = verbose'
}
};

$http.get(serverUrl,config)
.succesul(funcţia(date, statutul, anteturi, config) {

var getLinksResponse = datele;

getLinksResponse.d.results.forEach(funcţia(Rezultatul) {

// şi aşa mai departe şi astfel încât spuma

Acest lucru doar sa transformat într-un 30 problema minut pentru noi, asa ca am avut ghinion. Sperăm că cineva aceasta constată utile.

</scop>

Cum pentru a specifica oamenilor ca un domeniu de căutare / Sursă de conţinut utilizând SharePoint 2013 RESTUL API

Am avut un motiv pentru a lucra cu SharePoint 2013 API de căutare prin intermediul restul pentru prima dată. Am vrut pentru a căuta oameni, nu documente. Cheia aici este că de învăţare specificate sursele de conținut prin intermediul GUID sale (sau cel puţin în acest caz). JQuery următorul fragment Arată cum:

    loadExpertsAsync: funcţia() {

        jQuery.support.cors = adevărat;

        $.Ajax({
            URL-ul: Acest lucru.CreateFullApiUrl() +
                "?querytext = "portaluri"&IDSursă = "b09a7990-05ea-4af9-81ef-edfab16c4e31"" +
                "&selectproperties ='LinkedInProfileUrl,GoogleCirclesProfileUrl,BALargeProfilePictureUrls,BAGridPictures,WorkEmail,Abilităţi,AboutMe,Interesele,Funcţie,PastProjects,PictureURL,PreferredName,TwitterHandle,LinkedInProfileUrl,PreferredName,GoogleCirclesProfileUrl'" +
                "&RowLimit = 99",
            metoda: "OBŢINE",
            anteturi: { "Accepta": "cerere/json; Odata = verbose" },
            cache-ul: fals,
            succesul: funcţia (rezultatul) {

În cazul meu, I sînt running API împotriva SharePoint online. Pentru a obţine GUID-ul, Am urmat pasii:

  1. Accesaţi centrul de administrare SharePoint
  2. Selectează "căutare" din stânga mâna de navigare
  3. Selectaţi "gestionare rezultatul surse"
  4. Selectaţi "Localnicii rezultate"
  5. Uita-te la URL-ul.

URL-ul meu arata ceva de genul:

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

Parametrul IDSursă este ceea ce a lucrat pentru mine.

(Am înţeles că IDSursă poate fi de fapt un fel de lucru permanente cu SP, but I’ll always check anyway 🙂 ).

</scop>

undefinedAboneaza-te la blog-ul meu.

Urmaţi-mă pe Twitter, la http://www.twitter.com/pagalvin

Exemplu SharePoint restul apeluri

Aici este un set de probă restul apeluri care funcţionează pentru mine şi vă poate ajuta, de asemenea. Ca de 02/2014, there are two examples 🙂

  1. O coloană cu spaţii în numele de referinţă
  2. Referinţă o coloană de selecție multiplă
  3. Efectuaţi o căutare de oameni prin intermediul restul

 

Voi adăuga la acest lucru ca timpul trece.

Aici sunt unele cerneluri utile am găsit, de asemenea:

O coloană cu spaţii în numele de referinţă

Pot crea o listă personalizată cu o coloană numită "Blog-ul autorului" (spaţiu între Blog şi autorul).

$select această coloană de referinţă este:

image

Pur şi simplu înlocuiţi spaţiul cu "_x0020_". Vom vedea _x0020_ în multe exemple în întreaga Internet şi restul nu este diferit.

Dacă nu faci asta, sunteţi răspunzător pentru a obţine un mesaj de eroare de genul asta:

Expresia “Blog-ul autorului” nu este valid.

Destul de uşor.

Referinţă o coloană de căutare selecție multiplă

Înfiinţat:

  1. Crea o listă personalizată numit categorii.
  2. Adauga unele categorii. Am adăugat categorii astfel:image
  3. Creaţi o altă listă particularizată numit MockBlog şi adăugaţi categorii ca o coloană multi-lista selecta (sau coloană de site în cazul în care este modul în care aţi rola).

Adăuga unele elemente la lista de Mockblog şi sunteţi gata.

Un apel de stil Ajax, utilizarea jQuery va arata ceva de genul:

serverUrl  = "/_api/web/liste/GetByTitle('MockBlog')/elemente" +
             "?$Selectaţi = titlu,Categorii/titlu,Blog_x0020_Author/titlu" + 
             "&$Expand = Blog_x0020_Author,Categorii";

Noi suntem spune SharePoint "da-mi titlul pentru toate categoriile (Categorii/titlu). Valorile reale pentru a lua Titlul de $extindeING lista categoriilor." (Meu parafrazând odihnitor este, probabil, destul de lejer, dar cum eu sunt interpretarea acestora).

Dacă aţi face acest lucru prin intermediul JavaScript şi utilizarea Lăutar să se uite la ieşire, veţi obţine ceva de genul asta în schimb:

 

image

(De mai sus este un obiect JSON)

Efectuaţi o căutare de oameni prin intermediul restul

I blogged despre acest separat. Cheia este de a specifica un parametru de IDSursă a căror valoare este GUID-ul de sursa de conținut Local de persoane. (Sursele de conținut folosit pentru a fi numit domenii şi my-oh-mea nu atât de greu pentru a apela tot ceea ce un domeniu de aplicare pentru mine!).

Citeşte mai multe despre el aici: http://www.mstechblogs.com/paul/?p=10385

 

</scop>

undefinedAboneaza-te la blog-ul meu.

Urmaţi-mă pe Twitter, la http://www.twitter.com/pagalvin

Rapid şi uşor: Creaţi un sit SharePoint, utilizând restul

Există o mulţime de resurse în jurul care arată cum să facă acest lucru, dar nu am putut găsi o cuprinzătoare-a merge link-ul, Deci, aici suntem.

Puteţi crea un sit SharePoint, utilizând API restul.  Aici este un exemplu complet coapte:

<!--
    SiteRequestForm.html: Colecta informaţii şi de a crea un site pentru utilizator.
-->

<Centrul>
<tabel>
    <TR>
        <TD>Numele site-ului:</TD>
        <TD><intrare tip= "text" nume= "SiteName" ID-ul= "SiteName" /></TD>
    </TR>
    <TR>
        <TD ColSpan= "2">
            <intrare tip= "submit" ID-ul= "CreateSiteButton" valoarea= "Creaţi site-ul" />
        </TD>
    </TR>
</tabel>
</Centrul>

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

<script-ul>
var CreateSiteLogicContainer = {

    createSiteData: {
            "parametrii": {
                __metadata: { "tip de": "SP.WebInfoCreationInformation" },
                URL-ul: "Paultest1",
                Titlul: "Paultest1",
                Descriere: "creat de restul web de Paul!",
                Limba: 1033,
                WebTemplate: "sts",
                UseUniquePermissions: fals
            }
    },

    createSite: funcţia () {

        jQuery.support.cors = adevărat;

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

            anteturi: {
                "Accept": "cerere/json; Odata = verbose",
                "content-type": "cerere/json;Odata = verbose",
                "X-RequestDigest": $("#__REQUESTDIGEST").vasilica()
            },

            date: JSON.stringify(CreateSiteLogicContainer.createSiteData),

            succesul: funcţia () { alertă("succesul"); },
            eroare: funcţia () { alertă("eroare"); }

        });
    },

    wireUpForm: funcţia () {
        $("#CreateSiteButton").faceţi clic pe(funcţia () {
            alertă("Cale de a încerca şi de a crea site-ul.");
            CreateSiteLogicContainer.createSite();
        });
    }


}

CreateSiteLogicContainer.wireUpForm();

</script-ul>

Când de succes, tu a lua un pachet de JSON în răspuns ca aceasta:

image

Cheie gândurile mele şi cunoştinţele din acest includ:

  • Această abordare foloseste jQuery.  În cazul meu, mea bibliotecă jQuery este situat în ".../ plugin-uri. "  Veţi dori să schimbe că la punctul de la locaţia dumneavoastră preferat de JQ.
  • Puteţi copia şi lipi acest fragment întreg într-o parte de Editor de conţinut Web pe o pagină, şi ar trebui să funcţioneze bine.  Veţi dori să schimba punctul final al API apel şi asiguraţi-vă de referinţă JQ corect.
  • URL-ul este relativ API dumneavoastră final.  În cazul meu, este crearea sub-site-uri sub https://bigapplesharepoint.com
  • Nu aveţi nevoie pentru a oferi un conţinut de lungime. Unele posturi blog-ul şi MSDN documentul implică faptul că faci, dar sa întâmplat pentru mine automat, care presupun este gestionate de $.ajax apel în sine.
  • Această linie este necesară pentru a evita un răspuns "interzis": "X-RequestDigest": $("#__REQUESTDIGEST").vasilica().  Există alte moduri de a face acest lucru, dar acest lucru este destul de frumos.  Am pierdut link-ul la blog-ul care a furnizat această comandă rapidă.  H/T la tine, misterios blogger!

Mult noroc şi sper că acest lucru ajută pe cineva.

</scop>

undefinedAboneaza-te la blog-ul meu.

Urmaţi-mă pe Twitter, la http://www.twitter.com/pagalvin

Simplă şi rapidă: SharePoint restul apela numai revine 100 Înregistrări

Am fost de lucru pe un site public cu care se confruntă pentru practica mea de SharePoint aici în New York şi se foloseşte o mulţime de JavaScript şi restul apeluri pentru a afişa conţinut.

În timpul dezvoltării magistrala, Creează un set de date mici, cu doar 10 sau aşa rânduri dintr-o listă particularizată şi apelurile mele restul toate trase de acolo.  O dată am întâlnit lista pentru a avea câteva sute de rânduri de date pentru a testa pentru creşterea anticipată, Am constatat că am fost obtinerea exact 100 rânduri s-a întors înapoi pe apelurile mele de restul.

Acesta este un lucru foarte simplu la adresa.  În cazul meu (şi cred că în majoritatea cazurilor), implicit restul numeşte SharePoint (şi, eventual, ca un standard în industrie?) reveni 100 rânduri.  Pentru a reveni mai mult implicit, utilizaţi parametrul $top apel, ca şi în:

IA /Insights Dev/_api/web/lists/GetByTitle('MockBlog')/elemente?$Selectaţi = ID,Titlul,Categorii/titlu,Blog_x0020_Author/titlu,DatePublished,BlogSummary&$Expand = Blog_x0020_Author,Categorii&$filtru =&$sus = 9999

Am luat 9999 în acest caz, deoarece ştiu că growth-wise, acolo nu va fi mai mult 200 sau astfel încât rândurile adăugate la această listă într-un an.  În cazul în care acesta devine dizgraţios, putem implementa unele paginare în jos pe drum.

</scop>

undefinedAboneaza-te la blog-ul meu.

Urmaţi-mă pe Twitter, la http://www.twitter.com/pagalvin