Månadsarkiv: Januari 2015

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>

Anvisningar: Aktivera flera kantiga SharePoint-webbdelar på samma sida

Denna blogg inlägg beskriver hur du kan ha flera Angular.js baserade SharePoint-webbdelar (refereras via en webbdelen Innehållsredigeraren) på samma sida. Jag ringer en webbdelen Innehållsredigeraren (CEWP) som refererar till JavaScript byggt med Angular.js ramen en "kantiga webbdel."

Vinkelformigs bootstrap processen är super lätt och bara om alla exempel du hittar på internets går ungefär så här:

<HTML-ng-app = "MittProgram">

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

</HTML>

Detta bryter ner, men, Om du vill aktivera flera CEWP som representerar flera kantiga webbdelar på samma sida. Vinkelformig kommer bara automatiskt starta mot det första direktivet om ng-app det fynd – åtminstone från och med kantiga version 1.3.6. Lösningen är ganska enkel – starta manuellt din kod i stället. Ovanstående nu ändras till något sånt här:

<organ>
<d
IV id =”bootstrapHere” ng-controller =”myController som theController”>
<bla /><bla /><bla />
</div>
</organ>

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

<skript>
Angular.bootstrap(Angular.element(document.getElementById(“bootstrapHere”)),["MittProgram"]);
</skript>

I princip, istället för att använda ng-app på elementet göra din bootstrapping, du slap ett ID på elementet. Sedan, använda bootstrap() metoden på kantiga själv styra den bootstrapping bearbeta vid körning. Jag har testat detta med tre olika kantiga webbdelar på samma sida och det fungerar en charm.

</slutet>

undefinedPrenumerera på min blogg.

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