Resolução de problemas dica para directivas Angular (Ou, Aprendendo a amar hífens tudo de novo)

Eu tenho um par de apps que fazem $http.get() chamadas e eu queria ser capaz de mostrar uma mensagem de erro bem formatada com detalhes de erro feio escondidos, mas acessível.  Basicamente, Isso:

image

E então se o usuário clica sobre o erro, Eles vêem mais informação:

image

Coisas simples.  Desde que o exato mesmo erro potencial pode aparecer na tela do administrativa, bem como a tela do usuário final, claramente apelou a uma directiva Angular personalizada.  EU  Encontrei este melhor série de artigos (http://weblogs.asp.net/dwahlin/creating-custom-angularjs-directives-part-i-the-fundamentals) pela grande Dan Wahlin.  A seguir o seu Conselho, Criei muito rapidamente uma <Hello world> a directiva e mudou-se para meu rodo de exibição de erro mais complexo. Encontrei um pouco de dificuldade com a presente directiva mais complexa.  Felizes para sempre, meio que por acaso, Eu tinha dito WebStorm (o editor que eu uso hoje em dia) que o arquivo JS foi um arquivo Angular e me ajudou a descobrir o problema.  Este é o código para a própria directiva:

angular.Module("CDLApp").Directiva("generalCdlErrorHandler", função() {

Voltar {
restringir: "E",
substituir: verdadeiro,

âmbito de aplicação: {
retrieveLastConfigurationError: "&"
},

modelo:
'<classe div = "alerta alerta-perigo" papel = "alerta" ng-init = "doShowExpandedErrorDetails = true" ng-show = "retrieveLastConfigurationError()">' +
' Houve um erro de e / ou outro erro. Isso geralmente acontece porque o arquivo de dados de configuração não pôde ser ' +
' encontrado ou o arquivo de configuração contém informações imprecisas (como fazer referência a uma biblioteca de documento ' +
' isso não existe).' +
' <DRI>' +
' <div. ng-show = "doShowExpandedErrorDetails">' +
' <href = "#" ng-clique = "doShowExpandedErrorDetails = ! doShowExpandedErrorDetails">' +
«Clique aqui para ocultar detalhes.» +
' </uma>: ' +
' <DRI>' +
' <Pre>{{retrieveLastConfigurationError() | JSON}}</Pre>' +
' <DRI>' +
' </div>' +
' <div. ng-show = "!doShowExpandedErrorDetails">' +
' <href = "#" ng-clique = "doShowExpandedErrorDetails = ! doShowExpandedErrorDetails">' +
«Clique aqui para expandir os detalhes do erro». +
' </uma>' +
' </div>' +
'</div>'
};
});

Basicamente, Estou criando um novo elemento chamado um "generalCdlErrorHandler".  Precisa de acesso a uma função chamada retrieveLastConfigurationError e que é tratado no objeto de escopo.  Eu provavelmente poderia ter usado escopo do pai, Mas isso é preguiçoso.  Se alguém acha que eu deveria ter feito isso, Eu adoraria ouvir sobre isso nos comentários.

Isto estava tudo bem, Mas eu não estava conseguindo nada.  Não apareceu no console de erros (pelo menos uma vez consertei todos os erros de sx que criei ao longo do caminho).  Simplesmente não consegui qualquer saída da directiva.  Eu fui e acrescentou alguns texto estático antes da Directiva ng-show e eu * fez * que. Isso me fez pensar que, talvez, a directiva não tinha permissão para implicitamente criar novos vars como "doShowExpandedErrorDetails" ou um "ng-init" lá dentro. 

Voltei para o HTML para ver que se eu tinha um tipo e desta vez WebStorm me ajudaram.  Eu tinha sido passando na função retrieveLastConfigurationError, assim:

<geral-cdl-manipulador de erro retrieveLastConfigurationError="CDLController.retrieveLastConfigurationError()">
</geral-cdl-manipulador de erro>

Mas o que realmente precisava ser isto:

<geral-cdl-manipulador de erro recuperar-último--erro de configuração = "CDLController.retrieveLastConfigurationError()">
</geral-cdl-manipulador de erro>

WebStorm foi esperto o suficiente para saber que tinha de ser hifenizadas.  Se ele não tivesse fornecido essa dica, Eu iria provavelmente ser ainda Solucionando este Sorriso.  Vezes divertidos!

O truque é este: Não só é o nome do elemento a directiva hifenizado, Então são os atributos que você adicionar a ele.  Uma vez eu adicionei os hífens, tudo funcionou muito bem.  Tutorial de Dan aconteceu de eu usar nomes curtos único, Então não fiz a conexão.

Espero que isso ajude alguém.

</fim>

undefinedSubscreva ao meu blog.

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

IE9 Realmente não gosta quando você tomar um atalho com seu <extensão> Marcas

Já cai em um mau hábito de usar o Chrome o tempo todo.  É "ruim", porque as coisas que eu desenvolvo realmente precisa ser executado em um monte de outros navegadores da web, incluindo, Infelizmente o IE8.  Meu laptop de trabalho tem padrão do IE9 por qualquer motivo) e eu estava apenas fazendo uma rápida verificação para ver o que parecia... e como era bonita.  Por exemplo:

image

Tem * deveria * assim:

image

 

Não só era desligado, Mas meus click eventos não estavam atirando.  (Maioria deles, de qualquer forma).

Visualmente, Parecia que as coisas começaram a sair dos trilhos perto do link "Configuração avançada".  Cavei na parte do HTML e descobriu que eu tinha esta linha:

<Span classe = "glyphicon glyphicon-novo-janela" />

Parece ter sido permitido sintaxe ("Versão do chrome 40.02214.94 m"está tudo bem com ele). Eu fui e mudou-o de qualquer maneira, como mostrado:

<Span classe = "glyphicon glyphicon-novo-janela"></extensão>

Que fixa-lo.

Uma coisinha tão minúscula causou uma enorme confusão de uma tela.  Vezes divertidos.

Isto passou a ser uma solução rápida, Mas também é o tipo de coisa que só obtém sua coluna fora do alinhamento, quando você vê-lo.  Existem mais de 500 linhas de HTML nesta função admin pouco e você não querem encontrar-se a cavar entre essas ervas daninhas, Já Sorriso.

</fim>

undefinedSubscreva ao meu blog.

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

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

A Comissão de veículo a Motor de Nova Jersey Toma outra vítima

Assim, meu filho está um pouco atrasado, obtendo sua licença de condução.  Ontem, no meio da manhã, caminhões até Oakland NJ para obtê-lo.  Ele fica lá, preenche a papelada é emitida uma autorização de demosntração e descobre que ele agora deve ir para outro Localização de MVC para fazer seu exame de vista.  Porque, Aparentemente, testadores de olho altamente qualificados não só vivem em qualquer lugar, Então NJ MVC precisa ir onde está o talento.  Ou, Talvez seja porque eles estão seguindo uma filosofia de hamiltoniano de consolidação?  Tanto quanto Hamilton sentiu fabricação e financeira consolidação foram essenciais para a futura força económica da República, Talvez se sinta NJ MVC que precisam consolidar olho teste de talento para a futura força de NJ MVC?  Talvez seja parte de um plano inefável?  Ai de mim, Eu tenho apenas perguntas sobre este tópico e sem respostas. 

Conselhos do seguinte Oakland, esposa e filho caminhão caminho até Lodi, NJ com autorização demosntração de Lodi.  Lodi pode ter o pior estacionamento de qualquer local de NJ MVC.  E, desde que eles também hospedar alguns dos escassos ainda altamente cobiçado olho teste máquinas e olho testes profissionais, Eles atraem os suplicantes de todos os matizes, máscaras, educação e curiosos.  Meu filho trabalha o seu caminho através do labirinto de linhas e orientações fornecidas pelos profissionais de NJ MVC "never-look-them-in-the-eye" e finalmente chegar ao olho teste linha.  Agora aprendem que a pessoa de Oakland cometeu um erro na autorização de demosntração.  Ele mal digitado o número de segurança social, colocando um "8" no lugar de "2" em um dos dígitos.  A pessoa de NJ Detran sabia disso porque quando ela chegou essa SS# errada no computador, Ele não mostrar o nome do meu filho.  Esposa e filho dizer, "oh, Esse é o número errado, Você precisa de um '2' lá em vez de um '8'."  O que muitos, Talvez se esperaria cada pessoa justa mente neste momento é para a pessoa de NJ MVC simplesmente corrigir o número acabou de entrar no computador.  Ha! Tolo!  Não, em vez disso pediram-lhe forneceu seu cartão da segurança social.  Vamos divagar por um momento e considerar que a fim de obter a autorização de demosntração em primeiro lugar, Ele já tinha previsto nos passaporte, bem como um Nova Jersey certidão de nascimento e carta escrita com ele no endereço da casa dele.   A mãe dele está com ele, compartilha o nome dele, seu endereço, sua altura (Mas, infelizmente, Não gosto por filmes de ficção científica) ... que você quiser, meu filho está bem e verdadeiramente identificados como vida longa residente dos Estados dos EUA e, na verdade, New Jersey em si por quaisquer medidas que você pode imaginar.  Se a pessoa de NJ MVC teria simplesmente fixado o erro que a pessoa de Oakland fez, o computador teria puxado as informações do meu filho e que teria sido o fim da história.  Mas mais uma vez, tolo!  Eles não podem fazer isso. Em vez disso, o MVC NJ agora insistem em um cartão de segurança social. 

Assim, esposa e filho voltar para obtê-lo e retorno.  E no final, Ele obtém sua licença.

Isso é três viagens diferentes para NJ MVC em um dia.  Para obter a sua autorização.  Levou quase 6 horas do começam ao fim.  Esta é a introdução do meu filho, para conduzir no estado jardim.

NJ MVC é claramente quebrado. 

</fim>

Angular falha para inicialização no IE9

Eu fui brincar com Angular.js para o último tempo enquanto e para a vida de mim, Não consegui meus apps Angular para lançar no IE9.  Todos eles trabalham muito bem em IE11 mas IE9 só mostraria o chaves e bits semelhantes.

Eu procurei e não consegui encontrar ninguém reclamando sobre o problema dele.  Funcionou bem no Chrome, IE11, Só não o IE9.

Fui jogado pelo fato de que o console do IE estava me dando erros como este:

SEC7111: A segurança HTTPS está comprometida por res://ieframe.dll/forbidframing.htm

Esse erro me fez pensar que havia algum problema transferindo o angular ou outras bibliotecas que eu precisava.  Como acontece, Isto não era a questão.

Por bisbilhotando a internets, Finalmente descobri que eu precisava para procurar a frase era "bootstrap" e que parecia que a inicialização estava falhando.  No final, meu problema era que eu tinha decorado meu <HTML> marca com o atributo ng-app, como em:

<ng-aplicativo HTML = "MatrixApp">

Bem, Isso não funcionou para o IE9.  Em vez disso, Enrolei todo o resto do HTML na <corpo> dentro de um div e referências MatrixApp assim.

Problema resolvido.

Espero que este alguém salva algum sofrimento.

</fim>

Criação de formulários personalizados do SharePoint sem uma página mestre

Meu colega, Lauren Jones, escreveu uma bela passo a passo sobre como criar um formulário de entrada de dados personalizados usando o SharePoint Designer.  Não é exatamente "novo sob o sol", mas há um pouco de torção.  Em suas palavras:

Criar formulários personalizados é simples de fazer no SharePoint Designer, Navegue a sua lista e no menu, selecione a faixa de opções ' formulário de lista’ e criar o seu novo modelo de formulário.

Isso funciona bem se você quer sua forma seja anexada à você página mestra, Mas e se você tem o caso de uso da criação de um formulário que é em uma janela pop-up ou é autônomo sem o cromo do SharePoint. Eu tinha exatamente este caso de uso, Eu queria a custom estilo um formulário, em seguida, usar esse formulário em um popup div embutido dentro de uma página.

Não se desespere, Há uma maneira de fazer isso que não é tão intuitiva, mas muito fácil de realizar.

Você pode ler todos os detalhes aqui: http://www.bigapplesharepoint.com/pages/View-An-Insight.aspx?BlogID=55&rtitle=customforms&rsrouce=pgblog e você pode vê-lo em ação, clicando no link "entre em contato conosco para obter mais informações" em qualquer um dos serviços na página serviços de nosso site de Big Apple SharePoint (http://www.bigapplesharepoint.com/services).

Lauren escreve muitas coisas boas sobre UX e branding.  Você pode ver mais de aqui escrever aqui: http://www.bigapplesharepoint.com/team?showExpertName=Lauren%20Jones.

</fim>

Distraindo Design e bêbado sobre o recurso Coolaid

Meu colega, Lauren Jones (https://twitter.com/laurenjones02) Escrevi um pequeno artigo falando sobre como excessivamente complexas implementações de SP são muito difíceis para os usuários finais.  É meio óbvio., de uma forma, Mas é fácil para mim dizer isso depois de eu ter orquestrado muitas implementações complexas das coisas aos despreparados usuários finais ao longo dos anos.

Aqui está a chave ' gráfico:

Há cinco anos., Quando desenrolado do SharePoint para uma organização pela primeira vez com um principal objetivo de se tornar a plataforma de colaboração e substituição de unidades de participação, introduzimos também sociais e feeds de notícias através de RSS, Meus Sites e perfis, e marcação de folksonomia. Escusado será dizer, Isto foi muito para os usuários finais para adotar de uma vez. Embora tenha havido sucesso com adoção em torno de gestão de documentos e perfis, RSS e marcação foi menos bem sucedido e isto era realmente devido a comunicação de mudança de gestão e formação. Não pudemos fazer isso tudo de uma vez. Levando o menos é a abordagem mais e liberando a funcionalidade em fases é mais fácil para os usuários finais a aceitar e adotar a.

Este artigo lembra-se de mais um pouco que eu li por Kris Gale relacionadas ao conjunto de recursos do Yammer, “A um custo de engenheiros e gerentes de produto não considere.”

Se você tem uma história de horror ou uma história de sucesso para compartilhar, Espero que você vai fazer isso nos comentários o site da Big Apple.

</fim>

Weekly Roundup – Julho 13, 2014

I para xpost este aqui sobre o fim de semana passado. 

Aqui é o 3RD artigo em uma série onde eu escrevo sobre blog posts e artigos on-line que eram especialmente interessantes para mim na última semana ou assim.  Entrada da semana na série destaca dois projetos CodePlex para um potencial substituto do InfoPath e para o gerenciamento de permissões com o SharePoint, notícias sobre satélites, ainda um outro quadro de JavaScript e um aceno para Ada Babbage e seu papel na história de computação.

Você pode lê-lo aqui: http://www.bigapplesharepoint.com/pages/View-An-Insight.aspx?BlogID=93&rsource=pgblog&rtitle=roundup

</fim>

Vista CAML consultas em tempo Real com visualizador de ULS

Meu colega, Fabiana Pinheiro, escreveu acima uma bela passo a passo descrever como ver o CAML atrás SP várias consultas que acontecem no âmbito da empresa em tempo real usando o Visualizador de ULS.

Aqui é a introdução:

Querias saber que consultas CAML são executadas pelo servidor do SharePoint?

Bem, para a solução de problemas e aprendizagem propósito, Não é uma má ideia. Afinal de contas, SQL Profiler está nos ajudando a solucionar muitos problemas.

Pode haver produtos lá fora, mas eu descobri uma maneira de fazê-lo sem gastar dinheiro extra! E aqui está...

Você pode ler a coisa toda aqui: http://www.bigapplesharepoint.com/pages/View-An-Insight.aspx?BlogID=68&rsource=pgblog&rtitle=caml.

</fim>