lunes, 15 de septiembre de 2014

Artículo: Cómo encontrar y depurar los errores en el código XML que personaliza la Interface de Excel.

Podemos depurar código XML en Excel
Podemos depurar código XML en Excel.
Seguro que más de uno, en los artículos anteriores, se ha vuelto loco buscando donde se había confundido y pensando en porque no se muestran los cambios que os he explicado en esos artículos. Como ya os he comentado es  muy fácil confundirse al escribir el código XML y la verdad es que si no conocemos las opciones que os voy a explicar hoy, es muy difícil encontrar el error. Como poco a poco los ejemplos se van a ir complicando, creo que ya es el momento de explicaros dos opciones que tenemos para encontrar errores en el código XML. Una está en el "Custom UI Editor" y la otra está dentro de Excel. Vamos con ellas. Para este artículo voy a utilizar el documento acabado en el artículo anterior. Si no lo tenéis lo podéis descargar del siguiente enlace:


Una vez tengamos todos el documento vamos a empezar con el trabajo en el "Custom UI Editor". Abrimos el documento y vamos a provocar varios errores en el código XML, para así ver que opciones tenemos en el programa para encontrarlos. Por ejemplo, vamos a empezar cometiendo uno de los errores más típicos, el de las mayúsculas. Vamos a cambiar las dos etiquetas "ribbon", pondremos la primera letra en mayúsculas.

<Ribbon>
</Ribbon>
Escribimos la etiqueta ribbon con mayúsculas
Escribimos la etiqueta ribbon con mayúsculas.

Ahora vamos con la opción que nos ayudará a encontrar este error, el botón para validar. Este botón está situado en la pequeña barra de herramientas que tiene el "Custom UI Editor", es el botón con una "V" roja de validación.

Botón para validar el código XML
Botón para validar el código XML.

Cuando pulséis este botón el "Custom UI Editor" hará una validación del código y si encuentra algún error os mostrará información sobre el error que ha encontrado. Pulsamos y obtendremos el siguiente mensaje.

Mensaje de error al validar el código XML
Mensaje de error al validar el código XML.

Os resumo lo que dice, básicamente nos está diciendo que dentro de un "customUI", no puede haber algo llamado "Ribbon". Eso es lo que nos dice en la primera parte del mensaje, nos dice que en el espacio de nombres que hemos indicado en la primera línea del código XML, no hay elementos que se llamen "Ribbon", dentro de un "customUI". Esta es la primera línea de código XML que tenemos escrita.

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">

Cuando escribimos esta línea en otro artículo, os conté un poco por encima para que servía, pero ahora os puedo dar más detalles. Un espacio de nombres es una manera de organizar elementos, objetos, es una organización virtual. Es una manera de organizar objetos de diferentes tipos que pueden tener los mismos nombres, organizándolos en espacios de nombres diferentes, podemos evitar esos conflictos. En concreto, en nuestro ejemplo, le indicábamos que queríamos utilizar el espacio de nombres en el que están incluidos todos los elementos y objetos que se pueden utilizar para crear una personalización de la Interface de Usuario en Excel 2010. Bueno pues al pulsar el botón para validar, el "Custom UI Editor" comprueba si los elementos que utilizamos en las etiquetas, existen en ese espacio de nombres. Como en XML se diferencia entre mayúsculas y minúsculas, no ha encontrado el que nosotros hemos indicado.

Fijaros, que el mensaje es mucho más interesante de lo que parece a primera vista. Habla de que dentro de un "customUI", es decir dentro del primer nivel que hemos creado en el código XML, no existe algo llamado "Ribbon". Es decir, que no solo mira si existe lo que hemos escrito, también mira si lo que hemos escrito tiene sentido en el nivel que está escrito. De hecho fijaros, justo después de decirnos eso, nos da las posibilidades que tenemos para utilizar dentro de un "cutomUI". Nos dice que podemos usar "commands", "ribbon", "backstage" y "contextMenus". Aquí sólo hemos usado "ribbon", del resto ya hablaremos. Por lo tanto ya veis, que si nos fijamos bien en el mensaje y nos lo tomamos con tranquilidad, tenemos mucha información para encontrar el problema.


Antes de continuar leyendo el artículo recuerda que todo lo que os ofrezco aquí es Gratis, pero si te gusta mi trabajo, puedes realizar una donación para que pueda continuar con este proyecto. Cualquier cantidad desde 1€/1$ es bienvenida. Gracias!!!!!!!!!!!!!!


Vamos a provocar otro error, ahora vamos a corregir la etiqueta de cierre de "ribbon". Ponemos esa en minúsculas pero la de apertura la dejamos en mayúsculas. Pulsamos de nuevo el botón para validar.

<Ribbon>
</ribbon>
Las etiquetas de apertura y de cierre no coinciden
Las etiquetas de apertura y de cierre no coinciden.

Y ahí tenemos el mensaje de error, en este caso es mucho más sencillo de localizar el problema. Las etiquetas de apertura y de cierre no coinciden, no son iguales. Es otra de las comprobaciones que hace al validar el código XML. En realidad seguimos teniendo el problema de "Ribbon" con mayúsculas, pero por lo que parece primero comprueba la validez de la estructura del código... Y después entra a mirar si los objetos existen o están bien utilizados. Fijaros que incluso en este mensaje ya nos ofrece más información y nos dice en que líneas está el problema que ha localizado. Esta opción para validar el código parece muy simple, pero es realmente potente. Arreglamos los errores de las etiquetas "ribbon" y probamos otra vez a validar el código. Ahora recibiréis un mensaje diciendo que todo está "OK".

El código XML no tiene errores
El código XML no tiene errores.

Por acabar ya con las pruebas con mensajes de error, podemos comprobar que pasa si nos confundimos al escribir mal una de las propiedades de los objetos. Por ejemplo vamos a cambiar la propiedad "label" del grupo de controles "grupoFacturas". Dejamos esa línea así, en lugar de "label", escribimos "babel", que evidentemente no está bien.

<group id="grupoFacturas" babel="Facturas">

La propiedad o atributo no existe, está mal escrito el nombre
La propiedad o atributo no existe, está mal escrito el nombre.

Al validar el código, ahí tenemos el mensaje en el que nos indica que el atributo, la propiedad no está definida. Como ya sabemos,  un grupo de controles, un "group" no tiene una propiedad llamada "babel", nos hemos confundido en el nombre.

Bueno, pues ya veis, este programa parece muy simple pero esconde muchas cosas. Arreglamos el error y vamos con una última prueba, en este caso la prueba va servir para comprobar que a veces el "Custom UI Editor" no es suficiente para encontrar los errores en el código. Vamos a cambiar la propiedad "imageMso" del primer botón que aparece en la ficha personalizada. Recordad que con esta propiedad podíamos indicar que los botones muestren una imagen que pertenece a alguno de los controles que incorporan las aplicaciones de Office. En el primer botón habíamos utilizado la imagen que muestra la opción para crear nuevos documentos.

Imágen que se muestra con la propiedad imageMSO igual a FileNew
Imagen que se muestra con la propiedad imageMSO igual a FileNew.

Ahora en el código hacemos el siguiente cambio, en lugar de "FileNew", vamos a poner la "fileNew". Nos volvemos a equivocar con el tema de las mayúsculas y minúsculas. No os pongo toda la línea, sólo donde va el cambio, en la propiedad "imageMso".

<button id="botonNuevaFactura" imageMso="fileNew" 

Ahora, pulsar el botón para validar el código y veréis como lo da por bueno, no hay errores. Abrid el documento en Excel y comprobar si es así.


El código XML no tiene errores
El código XML no tiene errores.

La propiedad imageMso no es correcta y no aparece la imagen en el botón
La propiedad imageMso no es correcta y no aparece la imagen en el botón.

Bueno, pues ya veis que no es correcto, había un fallo aunque el "Custom UI Editor" daba por bueno el código. ¿Cuál es el problema? Bueno pues que el "Custom UI Editor" no comprueba la validez de los valores que asignamos a las propiedades, a los atributos. Lo que escribimos entre las comillas dobles, no lo comprueba y ahí es donde está el problema. Se puede hacer algo, bueno pues por suerte sí, pero esto ya es trabajo de Excel.

Excel tiene una opción que le permite depurar el código XML al abrir un documento que contenga personalizaciones en la Interface de Usuario, por defecto está desactivada pero ahora vamos a ver cómo la podemos activar. No hace falta que tengáis abierto el documento con el que estamos trabajando. Debemos acceder a las opciones de Excel en la ficha "Archivo".

Accedemos a las Opciones de Excel para activar la depuración del código XML
Accedemos a las Opciones de Excel para activar la depuración del código XML.

En la ventana de opciones de Excel, debemos acceder a la sección "Avanzadas" y llegar hasta la subsección "General", ahí está la opción que debemos activar: "Mostrar errores de interfaz de usuario en el complemento".

Activamso la opción para depurar el código XML
Activamos la opción para depurar el código XML.

Una vez activada, sólo nos queda abrir el documento otra vez y ver qué pasa. Esto es lo que nos encontraremos.

Error en tiempo de ejecución de IU personalizada
Error en tiempo de ejecución de IU personalizada.

¿Qué tenemos aquí? Bueno pues un mensaje de error, porque Excel sí que ha detectado el error que habíamos cometido. En él, nos dice que hemos usado un Id de control de Office desconocido, vamos que el valor que hemos colocado en la propiedad "imagenMso" no es correcto, no lo conoce. No hay en Office un control llamado "fileNew", lo hay que se llama "FileNew", pero con la primera letra en minúsculas no. Por lo tanto, ya veis que la depuración y validación que se hace en Excel del código XML es mucho más completa, pero la del "Custom UI Editor" es un primer paso para no andar todo el rato comprobando el código en Excel. 

Para acabar ya, os voy a mostrar los mensajes que mostraría Excel con los errores que hemos provocado antes en el "Custom UI Editor". También los detecta pero con el añadido de mostrar más información sobre los errores, por ejemplo la línea en la que están localizados.

Error por utilizar ribbon con mayúsculas detectado en Excel
Error por utilizar ribbon con mayúsculas detectado en Excel.

Error porque no coinciden las etiquetas de apertura y cierre detectado en Excel
Error porque no coinciden las etiquetas de apertura y cierre detectado en Excel.

El error producido porque la propiedad babel no existe detectado en Excel
El error producido porque la propiedad babel no existe detectado en Excel.

Resumiendo, la validación del "Custom UI Editor" la podemos usar mientras escribimos el código XML y si al abrir el documento en Excel tenemos algún problema... Podemos usar la depuración de Excel que es mucho más completa. Bueno, pues ya está, ya veis que tenemos opciones, que no vamos tan a ciegas como parece. Esto es todo por esta semana, la próxima más... ;)

*Siguiente Artículo:*:

No hay comentarios:

Publicar un comentario