arquivos Mensais: Janeiro 2015

HTTP 406 Erro ao usar $http.get Angular contra pontos de extremidade de resto do SharePoint

Atualização: Marc AD ndersson apontou este grande pedaço de informação: http://Blogs.Office.com/2014/08/13/JSON-Light-support-REST-SharePoint-API-Released/. Isso explica muita coisa :).

Isso pode ser o pior título de um post de blog já! Seja como for.

Normalmente faço tudo do meu prototipagem contra uma instância O365. Eu tenho minha instância pessoal para que não tenho que me preocupar que afetam qualquer outro. Como um aparte – lembra quando nós chamamos carreg em torno de máquinas virtuais em nossos laptops com musgo – SQL Server, IIS, decidindo vs Hyper-V. VMWare? Seja como for...

Eu tinha desenvolvido um aplicativo usando Angular neste ambiente que faz, entre outras coisas, Isso:

$http.Get(serverUrl)
.sucesso(função(dados, estatuto, cabeçalhos, config) {

var getLinksResponse = dados;

getLinksResponse.value.forEach(função(theResult) {

// e assim por diante e então espuma

Isto estava funcionando muito bem em dois ambientes diferentes do SharePoint online. No entanto, Quando o meu colega é portado para uma instância de Cloudshare, Ele estava ficando um HTTP 406 erro (Qual foi a primeira vez que tive aquele, Então... yay, Eu suponho). Nós fizemos um pouco de pesquisa e notei que o cabeçalho de "Aceitar" estava fora. SharePoint online foi perfeitamente feliz com:

Aceitar: application/json

Mas a instância cloudshare (Qual é o SP na prem, hospedado em um servidor virtual) queria o clássico "odata = verbose" adicionado em também:

Aceitar: application/json;OData = verbose

Para corrigir isso, adicionamos o cabeçalho como tal:

config var = {cabeçalhos: {
'Aceitar': ' application/json;OData = verbose'
}
};

$http.Get(serverUrl,config)
.sucesso(função(dados, estatuto, cabeçalhos, config) {

var getLinksResponse = dados;

getLinksResponse.value.forEach(função(theResult) {

// e assim por diante e então espuma

Que livrou o 406, Mas isso também mudou o formato da resposta. Era mais... detalhado. (haha!) Mais mudanças foram necessárias e aqui está o resultado final:

config var = {cabeçalhos: {
'Aceitar': ' application/json;OData = verbose'
}
};

$http.Get(serverUrl,config)
.sucesso(função(dados, estatuto, cabeçalhos, config) {

var getLinksResponse = dados;

getLinksResponse.d.Results.forEach(função(theResult) {

// e assim por diante e então espuma

Este só se transformou em um 30 minuto problema para nós, Então nós tivemos sorte. Espero que alguém acha isso útil.

</fim>

How-to: Habilitar várias Angular SharePoint Web Parts na mesma página

Este blog posts descreve como você pode ter vários Angular.js com base em web parts do SharePoint (referenciado através de uma web part do editor de conteúdo) na mesma página. Vou ligar uma web part do editor de conteúdo (CEWP) que Referências JavaScript construído utilizando o framework de Angular.js um "Angular Web Part".

Processo de inicialização do angular é super fácil e apenas sobre cada exemplo que você encontrar na Internet é algo assim:

<ng-aplicativo HTML = 'myApp'>

<blá /><blá /><blá />

</HTML>

Isto quebra para baixo, no entanto, Se você deseja habilitar vários CEWP representando várias peças web angular na mesma página. Angular será automaticamente somente bootstrap contra a primeira directiva ng-app-achados – pelo menos a partir da versão angular 1.3.6. A solução é muito simples – seu código de inicialização manualmente em vez disso. Acima agora muda para algo parecido com isto:

<corpo>
<d
identificação de IV =”bootstrapHere” ng-controlador =”myController como theController”>
<blá /><blá /><blá />
</div>
</corpo>

<script src =”//Ajax.googleapis.com/AJAX/libs/angularjs/1.3.6/angular.js”></script>

<script>
angular.Bootstrap(angular.Element(Document. getElementById(“bootstrapHere”)),['myApp']);
</script>

Basicamente, em vez de usar o ng-app no elemento para fazer sua inicialização., bate uma ID para o elemento. Em seguida, Use o bootstrap() método na angular próprio para controlar a inicialização processo em tempo de execução. Eu testei isso com três peças web angulares diferentes na mesma página e funciona um encanto.

</fim>

undefinedSubscreva ao meu blog.

Siga-me no Twitter em http://www.twitter.com/pagalvin