Archives mensuelles: Janvier 2015

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>

Mode d'emploi: Activer plusieurs anguleux SharePoint WebPart sur la même Page

Ce blog postes décrit comment vous pouvez avoir plusieurs composants WebPart SharePoint de base de Angular.js (référencés via un composant WebPart éditeur de contenu) sur la même page. J'appelle un composant WebPart éditeur de contenu (CEWP) qui référence JavaScript construit en utilisant le framework Angular.js « Partie Web angulaire ».

Processus de démarrage du moment angulaire est super facile et à peu près tous les exemples que vous trouverez sur les internets va quelque chose comme ça:

<html ng-app = « myApp »>

<bla /><bla /><bla />

</html>

Cela tombe en panne, Cependant, Si vous souhaitez activer multiples CEWP représentant plusieurs composants WebPart angulaire sur la même page. Angulaire sera automatiquement l'amorcer contre la première directive de ng-app découvertes – au moins depuis la version angulaire 1.3.6. La solution est assez simple : manuellement amorcer votre code à la place. Ce qui précède maintenant remplace par quelque chose comme ça:

<corps>
<d
id IV =”bootstrapHere” ng-contrôleur =”myController comme theController”>
<bla /><bla /><bla />
</Div>
</corps>

<script src =”//Ajax.googleapis.com/ajax/libs/angularjs/1.3.6/Angular.js”></script>

<script>
Angular.bootstrap(Angular.Element(document.getElementById(“bootstrapHere”)),[« myApp »]);
</script>

Essentiellement, au lieu de ng-app sur l'élément pour faire votre amorçage, vous gifler un ID sur cet élément. Puis, utiliser des données d'amorçage() méthode sur angulaire lui-même pour contrôler l'amorçage du processus en cours d'exécution. J'ai testé avec trois WebPart angulaires différentes sur la même page et ça marche un charme.

</fin>

undefinedS'abonner à mon blog.

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