Punta de localización de averías para directivas Angular (O, Aprendiendo a amar de guiones de nuevo)

Tengo un par de aplicaciones hacen $http.get() llamadas y yo quería ser capaz de mostrar un mensaje de error muy bien formateado con error feo detalles ocultos, pero accesible.  Básicamente, Esto:

image

Y entonces si el usuario hace clic en el error, Ven más info:

image

Cosa simple.  Desde el exacto mismo potencial error puede aparecer en la pantalla administrativa así como la pantalla del usuario final, claramente pidió una directiva personalizada Angular.  ME  Encontré esto excelente serie de los artículos (http://weblogs.asp.net/dwahlin/creating-custom-angularjs-directives-part-i-the-fundamentals) por la gran Dan Wahlin.  Siguiendo su Consejo, He creado muy rápidamente una <Hola mundo> la Directiva y se trasladó a mi más complejo escurridor pantalla de error. Me topé con un poco de problemas con esta directiva más compleja.  Felizmente, una especie de casualidad, Le había dicho informaticas (el editor de que usar estos días) que el archivo JS era un archivo Angular y me ayudó a resolver el problema.  Este es el código de la propia Directiva:

angular.Module("CDLApp").Directiva("generalCdlErrorHandler", función() {

retorno {
restringir: "E",
reemplazar: verdadero,

ámbito de aplicación: {
retrieveLastConfigurationError: "&"
},

plantilla:
'<div class = "alerta alerta-peligro" papel = "alerta" NG-init = "doShowExpandedErrorDetails = true" ng-Mostrar = "retrieveLastConfigurationError()">' +
"Hubo un error de E/S u otro error. Esto suele suceder porque no podía ser el archivo de configuración de datos ' +
' se encuentra o el archivo de configuración contiene información inexacta (como referencia a una biblioteca de documentos ' +
"eso no existe).' +
' <BR />' +
' <ng-Mostrar div = "doShowExpandedErrorDetails">' +
' <a href = "#" ng-clic = "doShowExpandedErrorDetails = ! doShowExpandedErrorDetails">' +
«Haga clic aquí para ocultar los detalles.» +
' </un>: ' +
' <BR />' +
' <pre>{{retrieveLastConfigurationError() | JSON}}</pre>' +
' <BR />' +
' </div>' +
' <ng-Mostrar div = "!doShowExpandedErrorDetails">' +
' <a href = "#" ng-clic = "doShowExpandedErrorDetails = ! doShowExpandedErrorDetails">' +
«Haga clic aquí para ampliar detalles del error». +
' </un>' +
' </div>' +
'</div>'
};
});

Básicamente, Estoy creando un nuevo elemento llamado un "generalCdlErrorHandler".  Necesita acceso a una función llamada retrieveLastConfigurationError y que se maneja en el objeto del ámbito de aplicación.  Probablemente podría haber sólo usado alcance de los padres, Pero se siente perezoso.  Si alguien piensa que debería haber hecho eso, Me encantaría escucharlo en los comentarios.

Esto fue bien, Pero no sentía nada.  No hay errores en la consola (al menos una vez he arreglado todos los errores de sx que creé en el camino).  Simplemente no tengo ninguna salida de la Directiva.  Fui y añadido algún texto estático antes de la Directiva ng-show y yo * hizo * eso. Esto me hizo pensar que tal vez la Directiva no estaba permitida implícitamente crear nuevos vars como "doShowExpandedErrorDetails" o una "ng-init" en allí. 

Volví en el HTML para ver si tenía un tipo y esta vez informaticas me ayudó a salir.  Había estado haciendo pasar en la función retrieveLastConfigurationError como esta:

<General-cdl-error-controlador retrieveLastConfigurationError="CDLController.retrieveLastConfigurationError()">
</General-cdl-error-controlador>

Pero realmente necesitaba ser esto:

<General-cdl-error-controlador de recuperar-último-configuración-error = "CDLController.retrieveLastConfigurationError()">
</General-cdl-error-controlador>

Informaticas era lo suficientemente inteligente como para saber que debía integrarse.  Si hubiese dado esa pista, Yo podría probablemente ser todavía problemas esto Sonreír.  Divertido veces!

El truco es este: No sólo es el nombre del elemento de directiva con un guión, Así que son atributos que agrega a él.  Una vez que he añadido los guiones, todo funcionó muy bien.  Tutorial de dan pasó a utilizar nombres cortos solos, Así que yo no hice la conexión.

Espero que esto ayude a alguien.

</final>

undefinedSuscribirse a mi blog.

Sígueme en Twitter en http://www.twitter.com/pagalvin

IE9 Realmente no le gusta cuando tomas un atajo con tu <abarcan> Etiquetas

He caído en una mala costumbre de usar Chrome todo el tiempo.  Es "malo" porque las cosas que me desenvuelvo realmente necesita para funcionar en muchos otros navegadores web, incluyendo, Lamentablemente IE8.  Mi portátil de trabajo tiene IE9 estándar por cualquier motivo) y estaba haciendo una rápida comprobación para ver qué cosas... y como lo fue bonito.  Por ejemplo:

image

Tiene * supone * a este aspecto:

image

 

No sólo fue apagado, Pero no estaban disparando mis eventos de clic.  (Mayoría de ellos, de todos modos).

Visualmente, Parecía que las cosas empezaron a salir los rieles cerca el enlace "Configuración avanzada".  Que excavó en esa parte del HTML y encontré que tenía esta línea:

<span class = "glyphicon glyphicon-nueva-ventana" />

Parece que es permisible sintaxis ("Versión de chrome 40.02214.94 m"está bien.). Fui y me cambié de todos modos, como se muestra:

<span class = "glyphicon glyphicon-nuevo-la ventana"></abarcan>

Lo arregló.

Una cosita causó un desastre enorme de una pantalla.  Divertido veces.

Esto le pasó a ser una solución rápida, Pero también es el tipo de cosas que sólo la columna vertebral de la alineación cuando lo veas.  Existen más de 500 líneas de HTML en esta función admin poco y no quieren encontrarte escarbando entre las hierbas, alguna vez Sonreír.

</final>

undefinedSuscribirse a mi blog.

Sígueme en Twitter en http://www.twitter.com/pagalvin

HTTP 406 Error al utilizar $http.get Angular contra SharePoint resto puntos finales

Actualización: Marc AD ndersson señaló esta gran pieza de información: http://blogs.Office.com/2014/08/13/JSON-Light-support-Rest-SharePoint-API-released/. Eso explica mucho :).

Nunca puede ser el peor título de una entrada de blog! ANYHOO.

Normalmente hago todos mis prototipos contra una instancia O365. Tengo mi instancia personal así que no tengo que estar preocupado de afectando a nadie. Como acotación al margen – recuerda cuando llamamos llevados alrededor de las máquinas virtuales en nuestros ordenadores portátiles con musgo – SQL Server, IIS, decidir vs Hyper-V. VMWare? En fin...

Había desarrollado una aplicación usando Angular en este entorno que hace, entre otras cosas, Esto:

$http.Get(serverUrl)
.éxito(función(datos, estado, cabeceras, config) {

var getLinksResponse = datos;

getLinksResponse.value.forEach(función(theResult) {

// y así sucesivamente y así producir espuma

Esto estaba trabajando muy bien en dos diferentes entornos en línea de SharePoint. Sin embargo, Cuando mi colega lo portado a una instancia de Cloudshare, Me estaba poniendo un HTTP 406 error (que fue la primera vez que he tenido esa, Así que... ¡ yay, Creo que sí). Hicimos un poco de investigación y notó que el encabezado de "Aceptar" estaba fuera de. Estaba perfectamente contento con SharePoint online:

Aceptar: application/json

Pero la instancia cloudshare (que es SP en prem, alojado en un servidor virtual) Quería que el clásico "odata = verbose" agregó también en:

Aceptar: application/json;OData = verbose

Para arreglar eso, Hemos añadido la rúbrica como tal:

var config = {cabeceras: {
'Aceptar': ' application/json;OData = verbose'
}
};

$http.Get(serverUrl,config)
.éxito(función(datos, estado, cabeceras, config) {

var getLinksResponse = datos;

getLinksResponse.value.forEach(función(theResult) {

// y así sucesivamente y así producir espuma

Que se deshizo de la 406, pero también cambió el formato de la respuesta. Era más... detallado. (jaja!) Más cambios fueron necesarios y aquí está el resultado final:

var config = {cabeceras: {
'Aceptar': ' application/json;OData = verbose'
}
};

$http.Get(serverUrl,config)
.éxito(función(datos, estado, cabeceras, config) {

var getLinksResponse = datos;

getLinksResponse.d.results.forEach(función(theResult) {

// y así sucesivamente y así producir espuma

Esto sólo se convirtió en un 30 minuto problema para nosotros, así que suerte. Esperemos que alguien encuentra esta útil.

</final>

How-to: Habilitar múltiples piezas angulares Web de SharePoint en la misma página

Este blog posts describe cómo puedes tener múltiples Angular.js basado en elementos web de SharePoint (hace referencia a través de un elemento web editor de contenido) en la misma página. Yo estoy llamando a un elemento web editor de contenido (CEWP) que hace referencia JavaScript construido utilizando el framework de Angular.js un "elemento Web Angular".

Proceso de arranque de angular es súper fácil y cada ejemplo que encontrará el internets es algo como esto:

<HTML ng-app = 'myApp'>

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

</HTML>

Esto se rompe, Sin embargo, Si desea habilitar múltiples CEWP que representa a varias partes de la web angular en la misma página. Angular se solamente automáticamente arranque contra la primera Directiva de ng-app se encuentra – por lo menos desde la versión angular 1.3.6. La solución es bastante simple – arranque manualmente el código en su lugar. Lo anterior ahora cambia a algo como esto:

<cuerpo>
<d
identificación IV =”bootstrapHere” ng-controlador =”myController como theController”>
<bla /><bla /><bla />
</div>
</cuerpo>

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

<secuencia de comandos>
angular.bootstrap(angular.Element(Document.getElementById(“bootstrapHere”)),['myApp']);
</secuencia de comandos>

Básicamente, en lugar de utilizar ng-app sobre el elemento para hacer tu bootstrapping, que bofetada un ID a dicho elemento. A continuación, Utilice el bootstrap() método angular para controlar el arranque del proceso en tiempo de ejecución. He probado esto con tres partes web Angular diferente en la misma página y funciona de maravilla.

</final>

undefinedSuscribirse a mi blog.

Sígueme en Twitter en http://www.twitter.com/pagalvin

La Comisión de vehículos motorizados de Nueva Jersey toma otra víctima

Por lo tanto, mi hijo está un poco atrasado obtener su permiso de conducir.  Ayer, en la media mañana, camiones hasta Oakland NJ para conseguirlo.  Llegue, llena su papeleo se expide un permiso sin sellar y aprende que ahora debe ir a otro Ubicación de MVC para tomar el examen de su vista.  Porque, al parecer, probadores de ojo altamente calificados no sólo vivir, Entonces NJ MVC tiene que ir donde está el talento.  O, Quizás es porque están siguiendo una filosofía hamiltoniano de consolidación?  Tanto como Hamilton sentido financiero y manufacturero consolidación fueron fundamentales para la futura fuerza económica de la República, Tal vez NJ MVC siente que necesitan consolidar ojo prueba de talento para la futura fuerza de NJ MVC?  Tal vez es parte de un plan de inefable?  ¡ Ay!, Tengo sólo preguntas sobre este tema y no hay respuestas. 

Consejo de Oakland siguientes, esposa e hijo de camiones camino Lodi, NJ con el permiso sin sellar de Lodi.  Lodi tenga el estacionamiento peor de cualquier localización NJ MVC.  Y, puesto que también hospedan algunos escasos aún altamente codiciado ojo prueba de máquinas y ojo pruebas profesionales, atraen a suplicantes de todas las tendencias, tonos, Educación y curiosos.  Mi hijo trabaja su camino a través del laberinto de líneas y direcciones proporcionadas por los profesionales de NJ MVC "never-look-them-in-the-eye" y finalmente llegan al ojo prueba de línea.  Ahora se enteran de que la persona Oakland cometió un error en el permiso sin sellar.  Él introducido incorrectamente el número de seguridad social, poner un un "8" en lugar de "2" en uno de los dígitos.  La persona del DMV NJ sabía esto porque cuando sacó a ese mal SS# en la computadora, No lo nombre de mi hijo.  Esposa e hijo decir, "¡ Oh!, es el número equivocado, se necesita un '2' en lugar de un '8'."  Lo que muchos, Tal vez cabría esperar cada persona justa mente en este momento es para que la persona NJ MVC corregir simplemente el número acaba de entrar en la computadora.  Ja! Tonto!  No, en cambio, se le pidió que proporcionó su tarjeta de seguro social.  Vamos a divagar un momento y considera con el fin de obtener el permiso sin sellar en primer lugar, que ya había proporcionado un pasaporte nosotros así como una Nueva Jersey certificado de nacimiento y carta escrita con él en su domicilio.   Su madre está con él, comparte su nombre, su dirección, su altura (Pero tristemente, No es su gusto en películas de ciencia ficción) ... lo que quieras, mi hijo está bien y verdaderamente identificados como vida larga residente de esos Estados y, de hecho, Nueva Jersey sí mismo por cualquier medida que puedas imaginar.  Si la persona NJ MVC simplemente habría arreglado el error hizo la persona de Oakland, el equipo habría levantado información de mi hijo y que habría sido el fin de la historia.  Pero de nuevo, tonto!  No pueden hacerlo. En su lugar, NJ MVC insisten ahora en una tarjeta de seguridad social. 

Por lo tanto, esposa e hijo Vete a casa a buscarlo y regreso.  Y al final, obtiene su permiso de.

Eso es tres diferentes viajes a NJ MVC en un día.  Para obtener su permiso.  Tomó casi 6 horas de principio a fin.  Esta es la introducción de mi hijo a conducir en el estado de jardín.

NJ MVC está claramente rota. 

</final>

Angular es incapaz de arrancar en IE9

Yo he estado jugando con Angular.js para el último mucho tiempo y para la vida de mí, No podría conseguir mis aplicaciones Angular para lanzar en IE9.  Todos trabajan bien en IE11 pero IE9 sólo mostraría las llaves y pedacitos de similares.

Busqué alrededor y no pudo encontrar a nadie quejándose acerca de su problema.  Funcionó bien en Chrome, IE11, No IE9.

Me echaron por el hecho de que la consola IE me daba errores como este:

SEC7111: Seguridad HTTPS está comprometida de res://ieframe.dll/forbidframing.htm

Ese error me había pensando que había algún problema al descargar el angular u otras librerías que necesitaba.  Como resulta, Este no era el problema.

Por husmear los internets, Finalmente descubrí que necesitaba para buscar la frase "bootstrap" y que parecía que estaba fallando el bootstrap.  En el final, mi problema era que yo había decorado mi <HTML> etiqueta con el atributo ng-app, como en:

<HTML ng-app = "MatrixApp">

Bien, Eso no funcionó para IE9.  En su lugar, Envolví todo el resto del HTML en el <cuerpo> dentro de un div y referencias MatrixApp así.

Problema resuelto.

Esperemos que esto ahorra alguien algo de dolor.

</final>

Creación de formularios de SharePoint personalizados sin una página maestra

Mi colega, Lauren Jones, escribió un buen tutorial sobre cómo crear un formulario de entrada de datos personalizados utilizando SharePoint Designer.  Eso no es exactamente "nuevo bajo el sol" pero hay un poco de giro.  En sus palabras:

Crear formularios personalizados es directo en SharePoint Designer, Desplácese a la lista y en la selección de menú de cinta ' formulario de lista’ y crear la nueva plantilla de formulario.

Esto funciona bien si quieres tu formulario se adjuntará a tu página principal, Pero qué pasa si tienes el caso de uso de la creación de una forma estáen en una ventana emergente o independiente sin el cromo de SharePoint. Tenía exactamente este caso de uso, Quería a la aduana una forma del estilo y usa esa forma en un popup div inline dentro de una página.

No se desesperen, Hay una manera de hacerlo que no es tan intuitiva pero bastante fácil de lograr.

Puedes leer todos los detalles aquí: http://www.bigapplesharepoint.com/pages/View-An-Insight.aspx?BlogID=55&rtitle=customforms&rsrouce=pgblog y puedes verlo en acción haciendo clic en el enlace "contacte con nosotros para obtener más información" en cualquiera de los servicios en la página de servicios de nuestro sitio de Big Apple SharePoint (http://www.bigapplesharepoint.com/services).

Lauren escribe un montón de cosas buenas en UX y branding.  Puedes ver más aquí escribiendo aquí: http://www.bigapplesharepoint.com/team?showExpertName=Lauren%20Jones.

</final>

Diseño de distracción y borracho en la característica Coolaid

Mi colega, Lauren Jones (https://twitter.com/laurenjones02) escribió un breve artículo hablando de cómo excesivamente complejas implementaciones SP son muy duras para los usuarios finales.  Es una especie de obvio, de una manera, Pero es fácil para mí decir después he orquestado muchas implementaciones complejas de cosas a los usuarios finales preparados en los años.

Esta es la clave ' gráfico:

Hace cinco años, cuando rodé a SharePoint a una organización por primera vez con un objetivo principal de convertirse en la plataforma de colaboración y reemplazar parte unidades, También hemos introducido social y noticias se alimenta a través de RSS, Mis sitios y perfiles, y etiquetado folksonomía. No hace falta decirlo, Esto fue mucho para que los usuarios finales a adoptar en una sola vez. Mientras que hubo éxito con adopción alrededor de perfiles y gestión de documentos, RSS y etiquetado tuvo menos éxito y esto fue debido al cambio de gestión comunicación y formación. No pudimos hacerlo todo a la vez. Tomando el menos es más enfoque y soltar funcionalidad en fases es más fácil para los usuarios finales aceptar y adoptar a.

Este artículo recuerda a otro poco por que leí Kris Gale relacionados con el conjunto de características de Yammer, “El costo de ingenieros y gerentes de producto no consideran.”

Si usted tiene una historia de terror o historia de éxito para compartir, Espero que harás en comentarios el sitio de Big Apple.

</final>

Resumen semanal – Julio 13, 2014

I para xpost aquí el pasado fin de semana. 

Aquí le damos la 3Rd artículo de una serie donde escribo sobre blogs y artículos en línea que estaban especialmente interesantes para mí en la última semana, más o menos.  Entrada de esta semana en la serie destaca dos proyectos de CodePlex para un posible reemplazo de InfoPath y para gestionar los permisos con SharePoint, Noticias sobre los satélites, Sin embargo, otro framework de JavaScript y un guiño a Ada Babbage y su papel en la historia de la computación.

Se puede leer aquí: http://www.bigapplesharepoint.com/pages/View-An-Insight.aspx?BlogID=93&rsource=pgblog&rtitle=roundup

</final>

Vista CAML consultas en tiempo Real con visor ULS

Mi colega, Ashsih Patel, escrito por un agradable recorrido describiendo cómo ver el CAML detrás varios SP consultas que suceden en el curso de negocios en tiempo real utilizando el visor de ULS.

Aquí está la intro:

¿Querías saber qué consultas CAML son ejecutadas por SharePoint Server?

Bien, para solucionar problemas y aprender a propósito, No es una mala idea. Después de todo, Analizador de SQL ha estado ayudando a nosotros resolver muchas cuestiones.

Puede haber productos afuera pero descubrí una forma de hacerlo sin tener que gastar dinero extra! Y aquí está...

Usted puede leer todo aquí: http://www.bigapplesharepoint.com/pages/View-An-Insight.aspx?BlogID=68&rsource=pgblog&rtitle=caml.

</final>