Ricerca dei guasti punta per direttive angolare (O, Imparare ad amare i trattini tutto nuovo)

Ho un paio di applicazioni che fanno $http.get() chiamate e volevo essere in grado di mostrare un messaggio di errore ben formattato con brutto errore dettagli nascosti, ma accessibile.  Fondamentalmente, Questo:

image

E poi se l'utente fa clic sull'errore, vedono più informazioni:

image

Roba semplice.  Poiché l'esatto errore potenziale stesso può apparire in schermo amministrativo così come lo schermo dell'utente finale, e chiaramente chiamata direttiva angolari personalizzati.  IO  trovato questo serie eccezionale di articoli (http://weblogs.asp.net/dwahlin/creating-custom-angularjs-directives-part-i-the-fundamentals) dal grande Dan Wahlin.  Seguendo il suo Consiglio, Ho creato molto rapidamente un <Ciao mondo> direttiva e si è trasferito al mio più complesso seccatoio di visualizzazione errore. Mi sono imbattuto in un po ' di problemi con questa direttiva più complessa.  Felicemente, sorta di caso, Avevo detto WebStorm (l'editor che uso in questi giorni) che il file JS era un file angolare e mi ha aiutato a capire il problema.  Questo è il codice per la direttiva stessa:

Angular.Module("CDLApp").direttiva("generalCdlErrorHandler", funzione() {

ritorno {
limitare: "E",
sostituire: true,

ambito di applicazione: {
retrieveLastConfigurationError: "&"
},

modello:
'<classe div = "alert di avviso di pericolo" ruolo = "alert" ng-init = "doShowExpandedErrorDetails = true" ng-Visualizza = "retrieveLastConfigurationError()">' +
«C'era un errore dei / o o altro errore. Questo di solito accade perché il file di dati di configurazione potrebbe non essere ' +
' trovato o il file di configurazione contiene informazioni inesatte (come riferimento a una libreria di documenti ' +
' che non esiste).' +
' <br />' +
' <div. ng-show = "doShowExpandedErrorDetails">' +
' <href = "#" ng-click = "doShowExpandedErrorDetails = ! doShowExpandedErrorDetails">' +
«Clicca qui per nascondere i dettagli». +
' </un>: ' +
' <br />' +
' <pre>{{retrieveLastConfigurationError() | JSON}}</pre>' +
' <br />' +
' </div>' +
' <div. ng-show = "!doShowExpandedErrorDetails">' +
' <href = "#" ng-click = "doShowExpandedErrorDetails = ! doShowExpandedErrorDetails">' +
«Clicca qui per espandere i dettagli di errore». +
' </un>' +
' </div>' +
'</div>'
};
});

Fondamentalmente, Sto creando un nuovo elemento chiamato un "generalCdlErrorHandler".  Deve accedere a una funzione chiamata retrieveLastConfigurationError e che viene gestito nell'oggetto ambito.  Probabilmente potrei avere appena utilizzato ambito del genitore, ma che si sente pigro.  Se qualcuno pensa che avrei dovuto fare che, Mi piacerebbe sapere nei commenti.

Questo era tutto bene, ma non stavo ottenendo nulla.  Senza errori spuntati nella console (almeno una volta ho risolto tutti gli errori di sx che ho creato lungo la strada).  Semplicemente non ha ottenuto alcun output dalla direttiva.  Sono andato e aggiunto qualche testo statico prima direttiva ng-spettacolo e io * fatto * che. Questo mi ha fatto pensare che forse la direttiva non era permesso implicitamente creare nuovo vars come "doShowExpandedErrorDetails" o hanno un "init-ng" in là. 

Sono tornato in HTML per vedere che se avessi un tipo e questa volta WebStorm mi ha aiutato.  Io ero stato passando nella funzione retrieveLastConfigurationError come questo:

<generale-cdl-errore-gestore retrieveLastConfigurationError="CDLController.retrieveLastConfigurationError()">
</generale-cdl-errore-gestore>

Ma davvero doveva essere questo:

<generale-cdl-errore-gestore recupera-ultimo--errore di configurazione = "CDLController.retrieveLastConfigurationError()">
</generale-cdl-errore-gestore>

WebStorm è stato abbastanza intelligente da sapere che doveva essere sillabate.  Se esso non avesse fornito quel pizzico, Sarebbe probabilmente essere ancora risoluzione dei problemi di questo sorriso, sorridere.  Divertente volte!

Il trucco è questo: non solo è il nome di elemento direttiva sillabato, così sono gli attributi che si aggiunge ad esso.  Una volta aggiunto i trattini, tutto ha funzionato benissimo.  Tutorial di Dan è capitato di usare nomi brevi singoli, quindi non fare il collegamento.

Spero che questo aiuti qualcuno.

</fine>

undefinedIscriviti al mio blog.

Seguimi su Twitter a http://www.twitter.com/pagalvin

IE9 Non piace molto quando si prende una scorciatoia con vostro <arco> Tag

Sono caduto in una cattiva abitudine di usare Chrome tutto il tempo.  È "male" perché la roba che io sviluppare realmente deve essere eseguito su un sacco di altri browser web, compresi, Purtroppo IE8.  Il mio portatile di lavoro dispone di IE9 standard per qualsiasi motivo) e stavo solo facendo un rapido controllo per vedere quali cose sembrava... e come non era abbastanza.  Per esempio:

image

Ha * dovrebbe * simile a questa:

image

 

Non solo è stato spento, ma non erano infornamento mio eventi click.  (Maggior parte di loro, in ogni caso).

Visivamente, sembrava che le cose cominciarono ad andare fuori dai binari vicino il link "Advanced Setup".  Ho scavato in quella parte del codice HTML e ho trovato che ho avuto questa linea:

<estendono la classe = "glyphicon glyphicon-nuova finestra" />

Che sembra come sintassi consentita ("Versione di chrome 40.02214.94 m"va bene con esso). Sono andato e comunque ha cambiato, come illustrato:

<estendono la classe = "glyphicon glyphicon-nuova finestra"></arco>

Che fissa.

Una cosa piccola piccola ha causato una grande confusione di uno schermo.  Divertente volte.

Questo è successo a essere una soluzione rapida, ma è anche il genere di cosa che ottiene solo la spina dorsale fuori allineamento, quando lo vedi.  Ci sono oltre 500 righe di codice HTML in questa funzione admin poco e si non vogliono trovare te scavando tra quelle erbacce, mai sorriso, sorridere.

</fine>

undefinedIscriviti al mio blog.

Seguimi su Twitter a http://www.twitter.com/pagalvin

HTTP 406 Errore quando si utilizza $http.get angolare contro SharePoint resto punti finali

Aggiornamento: Marc AD ndersson ha sottolineato questo grande pezzo di informazioni: http://Blogs.Office.com/2014/08/13/JSON-Light-support-Rest-SharePoint-API-Released/. Questo spiega tante :).

Che può essere il peggior titolo di un post del blog mai! Anyhoo.

In genere faccio tutti i miei prototipi contro un'istanza di O365. Ho la mia istanza personale in modo che non devo preoccuparmi che colpisce chiunque altro. Come una digressione – ricorda quando chiamiamo trasportati intorno macchine virtuali sui nostri computer portatili con MOSS – SQL Server, IIS, decidendo vs Hyper-V. VMWare? Anyhoo...

Avevo sviluppato un app utilizzando angolare in questo ambiente che fa, tra le altre cose, Questo:

$http.Get(serverUrl)
.successo(funzione(dati, status, intestazioni, config) {

var getLinksResponse = dati;

getLinksResponse.value.forEach(funzione(theResult) {

// e così via e così schiuma

Questo stava lavorando bene in due diversi ambienti di SharePoint online. Tuttavia, Quando il mio collega portato a un'istanza di Cloudshare, Egli fu sempre un HTTP 406 errore (che era la prima volta che ho mai avuto che uno, quindi... evviva, Suppongo). Abbiamo fatto un po' di ricerche e ho notato che l'intestazione "Accept" era spento. SharePoint online era perfettamente felice con:

Accettare: applicazione/json

Ma l'istanza cloudshare (che è SP su prem, ospitato in un server virtuale) ha voluto il classico "odata = verbose" aggiunto pure:

Accettare: applicazione/json;OData = verbose

Alle difficoltà che, Abbiamo aggiunto l'intestazione come tale:

var config = {intestazioni: {
'Accettare': ' applicazione/json;OData = verbose'
}
};

$http.Get(serverUrl,config)
.successo(funzione(dati, status, intestazioni, config) {

var getLinksResponse = dati;

getLinksResponse.value.forEach(funzione(theResult) {

// e così via e così schiuma

Che si è sbarazzato della 406, ma ha anche cambiato il formato della risposta. Era più... dettagliato. (ma ha anche cambiato il formato della risposta.  Era più... prolisso.!) Ulteriori cambiamenti sono stati richiesti ed ecco il risultato finale:

var config = {intestazioni: {
'Accettare': ' applicazione/json;OData = verbose'
}
};

$http.Get(serverUrl,config)
.successo(funzione(dati, status, intestazioni, config) {

var getLinksResponse = dati;

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

// e così via e così schiuma

Questo solo trasformato in una 30 problema minuto per noi, così siamo stati fortunati. Speriamo che qualcuno trova questo utile.

</fine>

How-to: Abilitare più angolare SharePoint Web part sulla stessa pagina

Questo blog post descrive come si può avere multiplo Angular.js basato su web part di SharePoint (viene fatto riferimento tramite una web part editor contenuto) sulla stessa pagina. Sto chiamando una web part editor contenuto (CEWP) che fa riferimento JavaScript costruito utilizzando il framework di Angular.js un "Web parte angolare."

Processo di bootstrap di angolare è super facile e quasi ogni esempio trovate su internets va qualcosa come questo:

<ng-app HTML = 'myApp'>

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

</html>

Questo si rompe, Tuttavia, Se si desidera abilitare più CEWP che rappresenta più angolare web part nella stessa pagina. Angolare sarà solo automaticamente inizializzarlo contro la prima direttiva ng-app reperti – almeno a partire dalla versione angolare 1.3.6. La soluzione è abbastanza semplice – manualmente il codice di bootstrap invece. Sopra ora cambia in qualcosa di simile:

<corpo>
<doppie
identificazione IV =”bootstrapHere” ng-controllore =”myController come controllante”>
<bla /><bla /><bla />
</div>
</corpo>

<script src =”//AJAX.googleapis.com/AJAX/libs/angularjs/1.3.6/Angular.js”></script di>

<script di>
Angular.bootstrap(Angular.Element(Document. getElementById(“bootstrapHere”)),['myApp']);
</script di>

Fondamentalmente, ng-app sull'elemento per anziché fare il bootstrap, uno schiaffo un ID su quell'elemento. Poi, utilizzare il bootstrap() Metodo su angolare stessa per controllare l'avvio automatico di processo in fase di esecuzione. Ho provato questo con tre parti di web angolare diverso sulla stessa pagina e funziona un fascino.

</fine>

undefinedIscriviti al mio blog.

Seguimi su Twitter a http://www.twitter.com/pagalvin

La Commissione di autoveicolo New Jersey prende un'altra vittima

Così, mio figlio è un po ' in ritardo ottenendo il suo permesso di guida.  Ieri, a metà mattina, Egli camion fino a Oakland NJ per ottenerlo.  Arriva, riempie le sue scartoffie è rilasciato un permesso di libera e apprende che ora egli deve andare a un altro Posizione di MVC per prendere la sua prova di occhio.  Perché, a quanto pare, tester occhio altamente qualificati non solo vivono ovunque, così NJ MVC deve andare dove è il talento.  O, Forse è perché seguono una filosofia Hamiltoniana di consolidamento?  Tanto come Hamilton sentiva finanziario e manifatturiero consolidamento sono stati fondamentali per la futura forza economica della Repubblica, Forse NJ MVC si sente che bisogno di consolidare la occhio prova il talento per la futura forza di MVC NJ?  Forse è un ineffabile piano?  Ahimè, Ho solo domande su questo argomento e non risposte. 

Consigli seguenti di Oakland, moglie e figlio del camion loro modo giù a Lodi, NJ con la libera licenza di Lodi.  Lodi possono avere il parcheggio peggiore di qualsiasi posizione NJ MVC.  E, Poiché essi ospitano anche alcune delle scarse ancora altamente ambita occhio test macchine e occhio test professionisti, attirano i supplicant di tutte le bande, tonalità, educazione e curiosi.  Mio figlio lavora la sua strada attraverso il labirinto di linee e le indicazioni fornite dai professionisti del NJ MVC "never-look-them-in-the-eye" e infine arrivano all'occhio test linea.  Ora imparano che la persona di Oakland ha fatto un errore su autorizzazione libera.  Egli mis-digitato il numero di previdenza sociale, mettendo un un "8" al posto di "2" in una delle cifre.  La persona di NJ DMV lo sapeva perché quando ha tirato su quel SS# sbagliato nel computer, esso non ha mostrato il nome di mio figlio.  Dicono di moglie e figlio, "oh, che è il numero sbagliato, Hai bisogno di un '2' c'invece un '8'."  Ciò che molti, Forse ogni singola persona giusta mentalità si aspetterebbe a questo punto è per la persona di NJ MVC correggere semplicemente il numero appena entrato nel computer.  Ah! Fool!  No, invece è stato chiesto di fornire la sua scheda di sicurezza sociale.  Let's divagando un attimo e considerare che, al fine di ottenere il permesso di libera in primo luogo, aveva già fornito un passaporto così come un New Jersey certificato di nascita e la lettera scritta a lui al suo indirizzo di casa.   Sua madre è con lui, condivide il suo nome, il suo indirizzo, sua altezza (ma purtroppo, non il suo gusto nel film di fantascienza) ... è il nome, mio figlio è bene e veramente identificato come residente di lunga vita di questi stati degli Stati Uniti e in effetti, New Jersey stessa da qualsiasi misura che potete immaginare.  Se la persona NJ MVC sarebbe hanno semplicemente risolto l'errore che ha fatto la persona di Oakland, il computer sarebbe hanno tirato su informazioni di mio figlio e che sarebbe stata la fine della storia.  Ma ancora una volta, Fool!  Non possono farlo. Invece, MVC NJ insistere ora su una scheda di sicurezza sociale. 

Così, moglie e figlio andare a casa per farlo e ritorno.  E alla fine, egli ottiene il suo permesso.

Ecco tre diversi viaggi a NJ MVC in un giorno.  Per ottenere il suo permesso.  Ci sono voluti quasi 6 ore dall'iniziano alla fine.  Questa è l'introduzione di mio figlio alla guida dello stato del giardino.

NJ MVC è chiaramente rotto. 

</fine>

Angolare non riesce per il Bootstrap in IE9

Sto giocando con Angular.js per l'ultimo lungo mentre e per la vita di me, NON ho potuto ottenere il mio apps angolare per lanciare in IE9.  Tutti funzionano bene in IE11 ma IE9 mostrerebbe solo le parentesi graffe e bit simile.

Cercato in giro e non poteva trovare qualcuno lamentava il suo problema.  Ha funzionato benissimo in Chrome, IE11, non solo IE9.

Ero gettato fuori dal fatto che la console di IE mi dava errori come questo:

SEC7111: Sicurezza HTTPS è compromessa da res://ieframe.dll/forbidframing.htm

Quell'errore mi aveva pensando che c'era qualche problema scaricando l'angolare o altre librerie che avevo bisogno.  Come si scopre, Questo non era il problema.

Di rovistando internets, Ho finalmente scoperto che dovevo cercare la frase era "bootstrap" e che sembrava che il bootstrap stava fallendo.  Alla fine, il mio problema era che io avevo decorato mia <html> Tag con l'attributo ng-app, come in:

<ng-app html = "MatrixApp">

Pozzo, che non ha funzionato per IE9.  Invece, Avvolto tutto il resto del codice HTML nella <corpo> all'interno di un div e riferimenti MatrixApp quel modo.

Problema risolto.

Speriamo che questo qualcuno fa risparmiare qualche dolore.

</fine>

Creazione di forme personalizzate SharePoint senza una pagina Master

Il mio collega, Lauren Jones, ha scritto un bel passo-passo su come creare un modulo di immissione dati personalizzati tramite SharePoint Designer.  Che non è esattamente "nuovo sotto il sole", ma c'è un po ' di torsione.  Nelle sue parole:

Creazione di moduli personalizzati è semplice da fare in SharePoint Designer, navigare al tuo elenco e nastro dal menu selezionare ' modulo elenco’ e creare il nuovo modello di modulo.

Questo funziona bene se si desidera che il form per essere collegato a te pagina master, ma cosa fare se avete il caso di utilizzo di creare una forma che è in una finestra popup o è autonomo senza il cromo di SharePoint. Ho avuto esattamente questo caso di utilizzo, Volevo a custom stile una forma quindi utilizzare tale modulo in un popup div inline all'interno di una pagina.

Non disperare, c'è un modo per farlo che non è così intuitivo ma abbastanza facile da realizzare.

Potete leggere tutti i dettagli qui: http://www.bigapplesharepoint.com/pages/View-An-Insight.aspx?BlogID=55&rtitle=customforms&rsrouce=pgblog e si può vedere in azione cliccando il link "Contattaci per ulteriori informazioni" su uno qualsiasi dei servizi nella pagina servizi del nostro sito Big Apple SharePoint (http://www.bigapplesharepoint.com/services).

Lauren scrive un sacco di roba buona su UX e branding.  Si possono vedere più di qui scrivendo qui: http://www.bigapplesharepoint.com/team?showExpertName=Lauren%20Jones.

</fine>

Design distrazione e ubriaco sulla caratteristica Coolaid

Il mio collega, Lauren Jones (https://twitter.com/laurenjones02) ha scritto un breve articolo parlando di come eccessivamente complesse implementazioni SP sono molto duri con gli utenti finali.  È sorta di ovvio, in un modo, ma è facile per me dire che dopo che io ho orchestrato molto complesso rollout di cose agli utenti finali impreparati nel corso degli anni.

Ecco la chiave ' grafico:

Cinque anni fa, Quando srotolato SharePoint per un'organizzazione per la prima volta con un obiettivo primario di diventare la piattaforma di collaborazione e sostituzione unità di quota, abbiamo introdotto anche sociale e feed di notizie tramite RSS, Miei siti e profili, e tagging folksonomy. Inutile dire che, Questo è stato molto per gli utenti finali ad adottare in un colpo solo. Mentre ci era successo con adozione nei dintorni di gestione documentale e profili, RSS e tagging ebbe meno successo, e questo era davvero dovuto cambiamento gestione comunicazione e formazione. Noi non potevamo farlo tutto in una volta. Prendendo il meno è più di approccio e rilasciando funzionalità nelle fasi è più facile per gli utenti finali ad accettare ed adottare per.

Questo articolo si ricorda un altro po ', di che ho letto Kris Gale relative al set di funzionalità di Yammer, “Quello costo ingegneri e Product Manager non considerano.”

Se avete una storia horror o una storia di successo da condividere, Spero che tu lo farai che nei commenti, sul sito di Big Apple.

</fine>

Weekly Roundup – Luglio 13, 2014

I per xpost questo qui durante il fine settimana passato. 

Qui è il 3Rd articolo di una serie dove scrivo di post di blog e articoli online che sono stati particolarmente interessanti per me l'ultima settimana o giù di lì.  Voce questa settimana la serie mette in evidenza due progetti CodePlex per un potenziale sostituto di InfoPath e per la gestione dei permessi con SharePoint, notizie su satelliti, ancora un altro framework JavaScript e un cenno di Babbage Ada e il suo ruolo nella storia di computazione.

Potete leggerla qui: http://www.bigapplesharepoint.com/pages/View-An-Insight.aspx?BlogID=93&rsource=pgblog&rtitle=roundup

</fine>

Vista CAML query in tempo reale con ULS Viewer

Il mio collega, Pierangelo Patel, ha scritto su un bel percorso guidato che descrivono come vedere il CAML dietro varie SP una query che accada nel corso del business in tempo reale utilizzando il visualizzatore ULS.

Qui è l'intro:

Hai mai desiderato sapere quali query CAML vengono eseguiti dal Server di SharePoint?

Pozzo, per la risoluzione dei problemi e a scopo di apprendimento, non è una cattiva idea. Dopotutto, SQL Profiler ha aiutato noi risolvere un sacco di problemi.

Ci possono essere prodotti là fuori, ma trovato un modo per farlo senza spendere dollari extra! E qui è...

Potete leggere il tutto qui: http://www.bigapplesharepoint.com/pages/View-An-Insight.aspx?BlogID=68&rsource=pgblog&rtitle=caml.

</fine>