Archives Catégorie: RESTE

HTTP 406 Erreur lors de l'utilisation $http.get angulaire contre les Points de terminaison pour le repos SharePoint

Mise à jour: Marc AD ndersson a souligné ce grand morceau de l'info: http://blogs.Office.com/2014/08/13/JSON-Light-support-Rest-SharePoint-API-Released/. Qui explique beaucoup de choses :).

C'est peut-être le pire titre d'un billet de blog jamais! Anyhoo.

Généralement, je fais toutes mes prototypage sur une instance d'Office 365. J'ai mon instance personnelle afin que je ne dois pas être inquiet qui touchent tout le monde. Soit dit en passant – Rappelez-vous lorsque nous appelons menées autour des machines virtuelles sur nos ordinateurs portables avec MOSS – SQL Server, IIS, décidant de Hyper-V vs. VMWare? Anyhoo...

J'avais mis au point une application à l'aide de moment angulaire dans cet environnement qui fait, entre autres choses, ce:

$http.Get(serverUrl)
.succès(fonction(données, statut, en-têtes, config) {

var getLinksResponse = données;

getLinksResponse.value.forEach(fonction(theResult) {

// et ainsi de suite et donc de mousse

Cela fonctionnait très bien dans deux environnements SharePoint en ligne. Cependant, Quand mon collègue il porté vers une instance de Cloudshare, il devenait un HTTP 406 erreur (qui était la première fois jamais, je suis celui-là, donc... yay, Je pense). Nous avons fait quelques recherches et a remarqué que l'en-tête « Accepter » était éteint. SharePoint en ligne était parfaitement heureux avec:

Accepter: application/json

Mais l'instance de cloudshare (qui est SP sur prem, hébergé sur un serveur virtuel) voulait le classique « odata = verbose "ajouté dans ainsi:

Accepter: application/json;OData = verbose

Pour résoudre ce, Nous avons ajouté l'en-tête comme tel:

var config = {en-têtes: {
« Accepter »: « application/json;OData = verbose'
}
};

$http.Get(serverUrl,config)
.succès(fonction(données, statut, en-têtes, config) {

var getLinksResponse = données;

getLinksResponse.value.forEach(fonction(theResult) {

// et ainsi de suite et donc de mousse

Qui s'est débarrassé de la 406, mais il a aussi changé le format de la réponse. C'était plus... bavard. (haha!) Plusieurs modifications ont été nécessaires et voici le résultat final:

var config = {en-têtes: {
« Accepter »: « application/json;OData = verbose'
}
};

$http.Get(serverUrl,config)
.succès(fonction(données, statut, en-têtes, config) {

var getLinksResponse = données;

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

// et ainsi de suite et donc de mousse

C'est seulement transformée en un 30 problème minute pour nous, donc nous avons eu de la chance. J'espère que quelqu'un le trouve utile.

</fin>

Comment spécifier des gens comme une zone de recherche / Source de contenu à l'aide de SharePoint 2013 API REST

J'ai eu raison de travailler avec SharePoint 2013 API de recherche par l'intermédiaire de repos pour la première fois. J'ai voulu Rechercher des personnes, pas de documents. La clé ici est que l'apprentissage vous spécifiez des sources de contenu via son GUID (ou au moins dans ce cas). JQuery par l'extrait suivant comment:

    loadExpertsAsync: fonction() {

        jQuery.support.cors = True;

        $.Ajax({
            URL: ce.CreateFullApiUrl() +
                "?QueryText = « portails »&SourceId = « b09a7990-05ea-4af9-81ef-edfab16c4e31 »" +
                "&sélectionnezPropriétés ='LinkedInProfileUrl,GoogleCirclesProfileUrl,BALargeProfilePictureUrls,BAGridPictures,WorkEmail,Compétences,AboutMe,Intérêts,JobTitle,PastProjects,PictureURL,PreferredName,TwitterHandle,LinkedInProfileUrl,PreferredName,GoogleCirclesProfileUrl'" +
                "&RowLimit = 99",
            méthode: "Télécharger",
            en-têtes: { "Accepter": "application/json; OData = verbose" },
            cache: faux,
            succès: fonction (résultat) {

Dans mon cas, J'utilise l'API contre SharePoint en ligne. Pour obtenir le GUID, J'ai suivi ces étapes:

  1. Accès au centre d'administration de SharePoint
  2. Sélectionnez « Rechercher » de la navigation de gauche
  3. Sélectionnez « Gérer les Sources de résultat »
  4. Sélectionnez « Les populations locales les résultats »
  5. Regardez l'URL.

Mon URL regardé quelque chose comme:

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

Le paramètre ID source est ce qui a fonctionné pour moi.

(Je comprends que l'ID de la source peut en fait être une sorte de chose permanente avec SP, mais je vais toujours vérifier de toute façon 🙂 ).

</fin>

undefinedS'abonner à mon blog.

Me suivre sur Twitter à http://www.twitter.com/pagalvin

Exemple SharePoint reste appels

Voici une série d'appels de repos échantillon qui fonctionne pour moi et peut vous dépanner ainsi. Comme des 02/2014, il y a deux exemples 🙂

  1. Référencer une colonne avec des espaces dans son nom
  2. Référence une colonne de sélection multiple
  3. Effectuer une recherche de personnes par l'intermédiaire de repos

 

Je vais ajouter à cela que le temps passe.

Voici quelques encres utiles, que j'ai trouvé aussi bien:

Référencer une colonne avec des espaces dans son nom

J'ai créer une liste personnalisée avec une colonne nommée « Auteur du Blog » (espace entre Blog et auteur).

Le $select pour référencer cette colonne est:

image

Il suffit de remplacer l'espace avec « _x0020_ ». Nous voyons le _x0020_ dans beaucoup d'exemples à travers les internets et le reste n'est pas différent.

Si vous ne faites que, vous êtes susceptible d'obtenir un message d'erreur comme ceci:

L'expression “Auteur du blog” n'est pas valide.

Assez facile.

Référence une colonne de recherche sélection multiple

Mettre en place:

  1. Créer une liste personnalisée nommée catégories.
  2. Ajouter certaines catégories. J'ai ajouté des catégories thusly:image
  3. Créer une autre liste personnalisée appelée MockBlog et ajouter des catégories comme une colonne de liste à sélection multiple (ou colonne de site si cela est comment dé).

Ajouter des articles à votre liste de Mockblog et vous êtes prêt.

Un appel de style Ajax en utilisant jQuery ressemblera à quelque chose comme ça:

serverUrl  = "/_API/web/listes/GetByTitle(« MockBlog »)/articles" +
             "?$Sélectionnez = Title,Catégories/titre,Blog_x0020_Author/titre" + 
             "&$Développez = Blog_x0020_Author,Catégories";

Nous sommes en disant SharePoint "Donnez-moi le titre pour toutes les catégories (Catégories/titre). Obtenir les valeurs réelles pour Titre par $DéveloppezING, la liste de catégories. » (Mon paraphrasant RESTful est probablement assez lâche, mais cela comment j'interprète il).

Si vous faites ceci via JavaScript et utiliser Fiddler pour Regardez la sortie, vous obtenez quelque chose comme ça en retour:

 

image

(Ce qui précède est un objet JSON)

Effectuer une recherche de personnes par l'intermédiaire de repos

J'ai blogué sur ce séparément. Il est important de spécifier un paramètre sourceid dont la valeur est le GUID de la source de contenu de populations locales. (Sources de contenu utilisé pour être appelées étendues et c'est oh-Gustave n'est pas si difficile d'appeler tout un champ pour moi!).

Pour en savoir plus à ce sujet ici: http://www.mstechblogs.com/paul/?p=10385

 

</fin>

undefinedS'abonner à mon blog.

Me suivre sur Twitter à http://www.twitter.com/pagalvin

Facile et rapide: Créer un Site SharePoint à l'aide de repos

Il y a beaucoup de ressources autour qui montrent comment procéder, mais je ne pouvais pas trouver un lien complet aller-à, Nous voici donc.

Vous pouvez créer un site SharePoint à l'aide de l'API REST.  Voici un exemple entièrement cuit:

<!--
    SiteRequestForm.html: Recueillir des informations et créer un site pour l'utilisateur.
-->

<Centre>
<table>
    <TR>
        <TD>Nom du site:</TD>
        <TD><entrée type= "texte" nom= SiteName"" ID= SiteName"" /></TD>
    </TR>
    <TR>
        <TD colspan= 2"">
            <entrée type= "submit" ID= "CreateSiteButton" valeur= "Créer le Site" />
        </TD>
    </TR>
</table>
</Centre>

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

<script>
var CreateSiteLogicContainer = {

    createSiteData: {
            "paramètres": {
                __metadata: { type"": "SP.WebInfoCreationInformation" },
                URL: "Paultest1",
                Titre: "Paultest1",
                Description: "web rest-créé par Paul!",
                Langue: 1033,
                WebTemplate: « sts",
                UseUniquePermissions As Boolean: faux
            }
    },

    createSite: fonction () {

        jQuery.support.cors = True;

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

            en-têtes: {
                "accepter": « application/json; OData = verbose",
                "content-type": « application/json;OData = verbose",
                « X-RequestDigest": $(« #__REQUESTDIGEST").Val()
            },

            données: JSON.stringify(CreateSiteLogicContainer.createSiteData),

            succès: fonction () { alerte("la réussite"); },
            erreur: fonction () { alerte("erreur"); }

        });
    },

    wireUpForm: fonction () {
        $("#CreateSiteButton").Cliquez sur(fonction () {
            alerte("Sur le point d'essayer et de créer le site.");
            CreateSiteLogicContainer.createSite();
        });
    }


}

CreateSiteLogicContainer.wireUpForm();

</script>

Lorsque réussie, vous obtenez un paquet JSON en réponse à ceci:

image

Mes pensées principales et les enseignements de cette comprennent:

  • Cette approche utilise jQuery.  Dans mon cas, ma bibliothèque jQuery est situé dans ".../ plugins. "  Vous aurez envie de changer cela pour pointer vers votre emplacement préféré de JQ.
  • Vous pouvez copier et coller cet extrait entier dans un composant WebPart éditeur de contenu sur une page, et il devrait fonctionner parfaitement.  Vous aurez envie de changer le point de fin de l'appel d'API et assurez-vous que vous référencez JQ correctement.
  • L'URL est relative à point de terminaison de l'API.  Dans mon cas, C'est créer des sous-sites sous https://bigapplesharepoint.com
  • Vous n'avez pas besoin de fournir une contenu-longueur. Certains blogs et MSDN document implique que vous faites, mais s'est passé pour moi automatiquement, qui je suppose est géré par l'appel de $.ajax lui-même.
  • Cette ligne est nécessaire pour éviter une réponse "interdite": « X-RequestDigest": $(« #__REQUESTDIGEST").Val().  Il existe d'autres façons de le faire, mais c'est assez agréable.  J'ai perdu le lien de blog qui a fourni ce raccourci.  H/T à vous, mystérieux blogueur!

Bonne chance et espérons que cela aide quelqu'un.

</fin>

undefinedS'abonner à mon blog.

Me suivre sur Twitter à http://www.twitter.com/pagalvin

Simple et rapide: SharePoint reste appel seules déclarations 100 Comptes rendus

J'ai travaillé sur un site public face pour ma pratique de SharePoint ici dans New York et il utilise beaucoup d'appels JavaScript et reste pour afficher le contenu.

Au cours du développement de ligne principale, J'ai créer un petit groupe de données avec juste 10 ou alors rangées dans une liste personnalisée et mes appels reste tous tiré de là.  Une fois je suis tombé vers le haut de la liste d'avoir quelques centaines de lignes de données pour tester la croissance anticipée, J'ai trouvé que je voulais en venir exactement 100 lignes retournées retour sur mes appels reste.

Il s'agit d'une chose très simple à l'adresse.  Dans mon cas (et je crois que dans la plupart des cas), la valeur par défaut reste appelle à SharePoint (et peut-être comme un standard de l'industrie?) retour 100 lignes.  Pour retourner plus que la valeur par défaut, Utilisez le paramètre $top lors de votre appel, comme dans:

OBTENIR /Insights Dev/_api/web/lists/GetByTitle(« MockBlog »)/articles?$Sélectionnez = ID,Titre,Catégories/titre,Blog_x0020_Author/titre,DatePublished,BlogSummary&$Développez = Blog_x0020_Author,Catégories&$filtre =&$haut = 9999

J'ai pris 9999 dans ce cas car je sais que growth-wise, Il n'y aura plus de 200 ou alors les lignes ajoutées à cette liste en un an.  S'il devient disgracieux, Nous pouvons mettre en œuvre certains pagination vers le bas de la route.

</fin>

undefinedS'abonner à mon blog.

Me suivre sur Twitter à http://www.twitter.com/pagalvin