archivi categoria: RESTO

HTTP 406 Errore quando si utilizza $http.get angolare contro SharePoint resto punti finali

Aggiornamento: Marc AD ndersson ha sottolineato questo grande pezzo di informazioni: http://Blogs.Office.com/2014/08/13/JSON-Light-support-Rest-SharePoint-API-Released/. Questo spiega tante :).

Che può essere il peggior titolo di un post del blog mai! Anyhoo.

In genere faccio tutti i miei prototipi contro un'istanza di O365. Ho la mia istanza personale in modo che non devo preoccuparmi che colpisce chiunque altro. Come una digressione – ricorda quando chiamiamo trasportati intorno macchine virtuali sui nostri computer portatili con MOSS – SQL Server, IIS, decidendo vs Hyper-V. VMWare? Anyhoo...

Avevo sviluppato un app utilizzando angolare in questo ambiente che fa, tra le altre cose, Questo:

$http.Get(serverUrl)
.successo(funzione(dati, status, intestazioni, config) {

var getLinksResponse = dati;

getLinksResponse.value.forEach(funzione(theResult) {

// e così via e così schiuma

Questo stava lavorando bene in due diversi ambienti di SharePoint online. Tuttavia, Quando il mio collega portato a un'istanza di Cloudshare, Egli fu sempre un HTTP 406 errore (che era la prima volta che ho mai avuto che uno, quindi... evviva, Suppongo). Abbiamo fatto un po' di ricerche e ho notato che l'intestazione "Accept" era spento. SharePoint online era perfettamente felice con:

Accettare: applicazione/json

Ma l'istanza cloudshare (che è SP su prem, ospitato in un server virtuale) ha voluto il classico "odata = verbose" aggiunto pure:

Accettare: applicazione/json;OData = verbose

Alle difficoltà che, Abbiamo aggiunto l'intestazione come tale:

var config = {intestazioni: {
'Accettare': ' applicazione/json;OData = verbose'
}
};

$http.Get(serverUrl,config)
.successo(funzione(dati, status, intestazioni, config) {

var getLinksResponse = dati;

getLinksResponse.value.forEach(funzione(theResult) {

// e così via e così schiuma

Che si è sbarazzato della 406, ma ha anche cambiato il formato della risposta. Era più... dettagliato. (ma ha anche cambiato il formato della risposta.  Era più... prolisso.!) Ulteriori cambiamenti sono stati richiesti ed ecco il risultato finale:

var config = {intestazioni: {
'Accettare': ' applicazione/json;OData = verbose'
}
};

$http.Get(serverUrl,config)
.successo(funzione(dati, status, intestazioni, config) {

var getLinksResponse = dati;

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

// e così via e così schiuma

Questo solo trasformato in una 30 problema minuto per noi, così siamo stati fortunati. Speriamo che qualcuno trova questo utile.

</fine>

Come specificare la gente come un ambito di ricerca / Origine di contenuto utilizzando SharePoint 2013 API REST

Ho avuto ragione a lavorare con SharePoint 2013 API di ricerca tramite REST per la prima volta. Ho voluto cercare persone, non documenti. La chiave qui è quella di apprendimento è specificare origini di contenuto tramite il relativo GUID (o almeno in questo caso). Illustrato nel seguente frammento di jQuery come:

    loadExpertsAsync: funzione() {

        jQuery.support.cors = true;

        $.AJAX({
            URL: Questo.CreateFullApiUrl() +
                "?QueryText = 'portali'&SourceId = 'b09a7990-05ea-4af9-81ef-edfab16c4e31'" +
                "&scegliereProprietà ='LinkedInProfileUrl,GoogleCirclesProfileUrl,BALargeProfilePictureUrls,BAGridPictures,WorkEmail,Competenze,AboutMe,Interessi,JobTitle,PastProjects,PictureURL,PictureURL,TwitterHandle,LinkedInProfileUrl,PictureURL,GoogleCirclesProfileUrl'" +
                "&ROWLIMIT = 99",
            Metodo.: "Ottieni",
            intestazioni: { "Accettare": "applicazione/json; OData = verbose" },
            cache: falso,
            successo: funzione (risultato) {

Nel mio caso, Sono in esecuzione le API contro SharePoint online. Per ottenere il GUID, Ho seguito questi passaggi:

  1. Accesso al centro di admin di SharePoint
  2. Selezionare "Cerca" dalla mano sinistra spostamento
  3. Selezionare "Gestione fonti di risultato"
  4. Selezionare "Risultati di gente locale"
  5. Guardate l'URL.

Il mio URL sembrava qualcosa come:

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

Il parametro sourceid è ciò che ha funzionato per me.

(Capisco che il sourceid potrebbe in realtà essere una sorta di permanente cosa con SP, ma sarò sempre controllare comunque 🙂 ).

</fine>

undefinedIscriviti al mio blog.

Seguimi su Twitter a http://www.twitter.com/pagalvin

Esempio SharePoint resto chiamate

Ecco una serie di chiamate di resto di campione che funziona per me e può aiutarvi anche. Come di 02/2014, ci sono due esempi 🙂

  1. Fare riferimento a una colonna con spazi nel nome
  2. Fare riferimento a una colonna di seleziona multipla
  3. Eseguire una ricerca di persone tramite il resto

 

Aggiungerò a questo col passare del tempo.

Qui ci sono alcuni inchiostri utili che ho trovato pure:

Fare riferimento a una colonna con spazi nel nome

Creare un elenco personalizzato con una colonna denominata "Autore del Blog" (spazio tra il Blog e autore).

Il $select per fare riferimento a tale colonna è:

image

Semplicemente sostituire lo spazio con "_x0020_". Vediamo la _x0020_ in molti esempi in tutto il internets e resto non è diverso.

Se non fai che, Tu sei responsabile ottenere un messaggio di errore come questo:

L'espressione “Autore del Blog” non è valido.

Abbastanza facile.

Fare riferimento a una colonna di ricerca selezione multipla

Impostare:

  1. Creare un elenco personalizzato denominato categorie.
  2. Aggiungi alcune categorie. Ho aggiunto questa convenzione categorie:image
  3. Creare un altro elenco personalizzato denominato MockBlog e aggiungere categorie come una colonna di elenco di selezione multipla (o colonna del sito se questo è come si tira).

Aggiungere alcuni elementi all'elenco Mockblog e siete pronti.

Una chiamata di stile Ajax utilizzando jQuery avrà un aspetto come questo:

  = serverUrl "/API/web/liste/GetByTitle('MockBlog')/elementi" +
             "?$Selezionare = titolo,Categorie/titolo,Blog_x0020_Author/titolo" + 
             "&$Espandere = Blog_x0020_Author,Categorie";

Stiamo raccontando SharePoint "Dammi il titolo per tutte le categorie (Categorie/titolo). Ottenere i valori effettivi per Titolo da $EspandereING elenco categorie." (Mio parafrasando riposante è probabilmente abbastanza sciolto, ma questo come sto interpretarlo).

Se stai facendo questo tramite JavaScript e usando Fiddler a guardare l'output, qualcosa di simile si ottiene in cambio:

 

image

(Quanto sopra è un oggetto JSON)

Eseguire una ricerca di persone tramite il resto

Ho bloggato su questo separatamente. La chiave è quello di specificare un parametro sourceid cui valore è il GUID dell'origine di contenuto gente locale. (Le origini di contenuto usato per essere chiamato ambiti ed è oh-mio così difficile non chiamare tutto un ambito per me!).

Per saperne di più su di esso qui: http://www.mstechblogs.com/paul/?p=10385

 

</fine>

undefinedIscriviti al mio blog.

Seguimi su Twitter a http://www.twitter.com/pagalvin

Facile e veloce: Creare un sito di SharePoint utilizzando il resto

Ci è un sacco di risorse intorno che mostrano come fare questo, ma non riuscivo a trovare un link completo go-a, così siamo qui.

È possibile creare un sito di SharePoint utilizzando l'API REST.  Ecco un esempio completamente al forno:

<!--
    SiteRequestForm.html: Raccogliere informazioni e creare un sito per l'utente.
-->

<centro>
<tabella>
    <TR>
        <TD>Nome del sito:</TD>
        <TD><ingresso tipo= "testo" nome= "NomeSito" Identificazione= "NomeSito" /></TD>
    </TR>
    <TR>
        <TD colspan= 2"">
            <ingresso tipo= "Invia" Identificazione= CreateSiteButton"" valore= "Crea il sito" />
        </TD>
    </TR>
</tabella>
</centro>

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

<script di>
var CreateSiteLogicContainer = {

    createSiteData: {
            «parametri": {
                __metadata: { "tipo": "SP.WebInfoCreationInformation" },
                URL: "Paultest1",
                Titolo: "Paultest1",
                Descrizione: "web resto-creato da Paolo!",
                Lingua: 1033,
                WebTemplate: m."",
                UseUniquePermissions: falso
            }
    },

    createSite: funzione () {

        jQuery.support.cors = true;

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

            intestazioni: {
                "Accettare": "application/json; OData = verbose",
                "content-type": "application/json;OData = verbose",
                "X-RequestDigest": $("#__REQUESTDIGEST").Val()
            },

            dati: Stringify(CreateSiteLogicContainer.createSiteData),

            successo: funzione () { avviso("il successo"); },
            errore: funzione () { avviso("errore"); }

        });
    },

    wireUpForm: funzione () {
        $("#CreateSiteButton").fare clic su(funzione () {
            avviso("Per cercare di creare il sito.");
            CreateSiteLogicContainer.createSite();
        });
    }


}

CreateSiteLogicContainer.wireUpForm();

</script di>

Quando è successo, si ottiene un pacchetto JSON in risposta come questo:

image

I miei pensieri chiavi e apprendimenti da questo includono:

  • Questo approccio utilizza jQuery.  Nel mio caso, mia libreria jQuery si trova in ".../ plugin. "  Ti consigliamo di cambiare che per puntare alla tua posizione preferita di JQ.
  • È possibile copiare e incollare quel frammento intero in una Web Editor contenuto Part in una pagina e dovrebbe funzionare bene.  Ti consigliamo di cambiare il punto di fine della chiamata API e assicurarsi che si fa riferimento JQ correttamente.
  • L'URL è relativo dell'endpoint di API.  Nel mio caso, è la creazione di siti secondari sotto https://bigapplesharepoint.com
  • Non è necessario fornire una contenuto-lunghezza. Alcuni blog e MSDN documento implica che si fa, ma è successo per me automaticamente, che presumo viene gestita dalla chiamata del AJAX $.
  • Questa linea è necessaria al fine di evitare una risposta "proibita": "X-RequestDigest": $("#__REQUESTDIGEST").Val().  Ci sono altri modi per farlo, ma questo è abbastanza piacevole.  Ho perso il link al blog che ha fornito questa scorciatoia.  H/T a voi, misteriosa blogger!

Buona fortuna e spero che questo aiuti qualcuno fuori.

</fine>

undefinedIscriviti al mio blog.

Seguimi su Twitter a http://www.twitter.com/pagalvin

Semplice e veloce: SharePoint resto chiamare solo ritorni 100 Record

Sto lavorando su un sito web di fronte pubblico per la mia pratica di SharePoint qui in New York e utilizza un sacco di chiamate JavaScript e resto per mostrare i contenuti.

Durante lo sviluppo del mainline, Creare un piccolo set di dati con solo 10 o così le righe in un elenco personalizzato e tutte le mie chiamate resto tirato da lì.  Una volta ho urtato l'elenco per avere qualche centinaia di righe di dati per il test di crescita atteso, Ho trovato che mi stavo esattamente 100 righe restituite indietro sulle mie chiamate resto.

Questa è una cosa molto semplice indirizzo.  Nel mio caso (e credo che nella maggior parte dei casi), l'impostazione predefinita resto chiama per SharePoint (e possibilmente come uno standard industriale?) ritorno 100 righe.  Per restituire più di default, utilizzare il parametro $top su chiamata, come in:

OTTENERE /Insights Dev/_api/web/lists/GetByTitle('MockBlog')/elementi?$selezionare = ID,Titolo,Categorie/titolo,Blog_x0020_Author/titolo,DatePublished,BlogSummary&$Espandere = Blog_x0020_Author,Categorie&$filtro =&$Top = 9999

Ho scelto 9999 in questo caso da allora so che growth-wise, non ci sarà più di 200 o così aggiunte a questo elenco in un anno.  Se diventa sgraziato, Noi possiamo attuare qualche spostamento lungo la strada.

</fine>

undefinedIscriviti al mio blog.

Seguimi su Twitter a http://www.twitter.com/pagalvin