Pza. Candelaria, 1, Edf.Olympo
Santa Cruz de Tenerife
Tenerife · Islas Canarias
38003 · ESPAÑA

922.276.532 Teléfonos 679.404.986

Civicom

 

Consultores de Gestión ERP, Open ERP, BI, CRM, RR.HH., e-Business, TPV, TIC

OpenERP en IE

2010·JUN·09, ed. 2010·JUN·17 © Javier de Lorenzo-Cáceres

Error con IE y la vista de proceso de OpenERP

Issue with IE and the OpenERP process view

(La vista de proceso no funciona en IE7/IE8) (Process view does not work in IE7/IE8)
https://bugs.launchpad.net/openobject-client-web/+bug/506742
http://www.openobject.com/forum/topic12415.html?sid=444776cc7c9aa9c1ad9a73b7ef42fb04
http://www.openerp.com/forum/post46810.html?sid=65ef822f3f97b2dae724b1bbf4fcbe1f
SíntomaSymptom
Al intentar ver los procesos de OpenERP con Internet Explorer, se muestra una página en blanco en lugar del diagrama de flujo con sus nodos y transiciones. Este error no se produce en FireFox. When trying to view the OpenERP processes using Internet Explorer, it shows just a blank page instead a flowchart with the expected nodes and transitions. This issue doesn't arise in Firefox.
IE indica el error siguiente:

[ Script error ]
Línea: 9
Carácter: 124662
Código: 0
Mensaje de Error: Argumento inválido.
URL: http://192.168.4.101:8080/static/workflow/javascript/draw2d/draw2d.js

[ Script error ]
Línea: 9
Carácter: 101460
Código: 0
Mensaje de Error: Se esperaba un objeto.
URL: http://192.168.4.101:8080/static/workflow/javascript/draw2d/draw2d.js
IE tells the following error:

[ Script error ]
Line: 9
Character: 124662
Code: 0
Error Message: Invalid argument.
URL: http://192.168.4.101:8080/static/workflow/javascript/draw2d/draw2d.js

[ Script error ]
Line: 9
Character: 101460
Code: 0
Error Message: Object expected.
URL: http://192.168.4.101:8080/static/workflow/javascript/draw2d/draw2d.js
EntornoEnvironment
Como el código javascript se ejecuta en el cliente y hay muchos, es difícil determinar la causa del problema así como reproducirlo, pero todo indica que se debe a una falta de entendimiento entre el archivo js e IE. Since javascript code is run at the client side and there are a lot, it's difficult to isolate the cause of the problem as well as to reproduce it, but it points to some sort of mismatching between the js file and IE.
IntroIntro
draw2d.js ya no es libre; OpenERP incluye la licencia.
http://www.draw2d.org/draw2d/
draw2d.js is not free anymore; OpenERP includes its license.
http://www.draw2d.org/draw2d/
draw2d.js se distribuye en formato javascript "minificado" también llamado "comprimido" (no en el sentido de un algoritmo Huffman de longitud variable sino tan sólo eliminando espacios, avances de línea y retornos de carro). Por tanto, todo el código se encuentra en una sola línea: la línea 9. draw2d.js is sold in a "minified" javascript format, a.k.a "compressed" (not in the sense of the Huffman variable lenght algorithm but just removing spaces, line feeds and carriage returns). Hence, the whole code is placed in a single line: line 9.
Una solución a medias en tres pasosA half solution in three steps
Primero, "embellecemos" ("desminificamos") el código usando por ejemplo http://jsbeautifier.org/ o cualquiera de las herramientas indicadas en ese sitio, o cualquier otra. First we need to "beautify" ("deminify") the javascript code using http://jsbeautifier.org/ for instance, or any of the tools pointed in that same site or any else.
Ahora que el fichero tiene el estilo de indentación normal, podemos localizar con precisión el código que no gusta a IE. Now that the file has the usual indentation style, we may precisely see what IE dislikes.
Segundo, editamos el fichero draw2d.js y ubicamos las declaraciones al principio, antes que las llamadas que las usan. Second, we need to edit the file to place the declarations before the calls to them.
Tercero, renombramos zIndex por zindex. Third, we change the name of zIndex to zindex.
Ahora se muestra la página, al menos los nodos, e IE no indica error alguno. Si las transiciones no se muestran pruebe a usar el modo "Vista de Compatibilidad" de IE. Durante el segundo de los pasos anteriores puede ver que IE también indica errores en process.js pero al terminar el trabajo con draw2d.js desaparecen. Now the page is shown, at least the nodes, and IE tells no issues. If transitions are not shown, try using the "Compatibility View" of IE. At the previous second step we see that IE also cries about issues at process.js but when the job with draw2d.js is finished they don't arise anymore.

UnicodeDecodeError

Síntoma
En el visor de procesos, al hacer dobe clic en una transición de estado se muestra el error "UnicodeDecodeError".
IntroIntro
ASCII es un código de caracteres de 7 bits por lo que acepta valores en el rango (0, ..., 127) mientras que ANSI e ISO-8859 son códigos de caracteres de 8 bits y UTF-8 es un código de caracteres de longitud variable hasta 32 bits (8, 16, 24 ó 32 según el "idioma"). Todos ellos son compatibles para los 7 bits menos significativos (la zona baja) que cubren los caracteres del alfabeto latino básico moderno, suficiente solamente para idiomas como el inglés e indonesio. Cuando queremos usar un carácter como una vocal con tilde o una eñe, que no pertenecen al citado alfabeto, el viejo ASCII simplemente no lo soporta, ANSI e ISO-8859 usan la zona alta (bit más significativo=1: (128, ..., 255) y UTF-8 usa 16 bits por tratarse de "español". La zona alta es ilegal por definición en UTF-8. La longitud del "eslabón" correspondiente a un carácter de una cadena UTF-8 se indica en los bits más significativos (los primeros de la izquierda) del primer byte (por lo que UTF-8 es difícil de descodificar en orden inverso) y los restantes bytes comienzan con 10 (lo que determina que forman parte de un "eslabón" porque aislados serían ilegales al pertenecer al rango 128-255). Por ejemplo, en nuestro caso (caracteres especiales latinos occidentales), una vocal con tilde o una eñe (que se resuelven con 16 bits) tendrán la forma 110xxxxx·10xxxxxx donde el valor que tomen las x determinarán el carácter de que se trata.

El formato de los distintos eslabones de 8, 16, 24 y 32 bits es el siguiente:

  • 0xxxxxx eslabón de 1 byte=8 bits, 7 para caracteres (compatible con ASCII y la zona baja de ANSI e ISO-8859).
  • 110xxxxx·10xxxxxx eslabón de 2 bytes=16 bits, 11 para caracteres.
  • 1110xxxx·10xxxxxx·10xxxxxx eslabón de 3 bytes=24 bits, 16 para caracteres.
  • 11110xxx·10xxxxxx·10xxxxxx·10xxxxxx eslabón de 4 bytes=32 bits, 21 para caracteres.

En concreto,
la "ó" se representa:
c3·b3 hexadecimal, donde c3=11000011=195 y b3=10110011=179
la eñe se representa:
c3·b1 hexadecimal, donde c3=11000011=195 y b1=10110001=177

Solución
Corresponde a los desarrolladores de OpenERP utilizar UTF-8 de forma nativa o usar una representación válida. De otra forma, lo único que podemos hacer es traducir las transiciones sin usar estos caracteres o no traducirlas.

Publicidad

Servidor HP + OpenERP

aese, s.l. aese, s.l.