SoporteIniciar sesión
Contáctenos
Conjuntos de caracteres y conversión con Microsoft Dynamics NAV y MS SQL (3.2.92v)

Conjuntos de caracteres y conversión con Microsoft Dynamics NAV y MS SQL (3.2.92v)

June 16, 2016 · Michael Bock · Funcionalidades

Gestionar la conversión de caracteres entre distintos sistemas que utilizan diferentes conjuntos de caracteres siempre es todo un reto. Si todos los sistemas pudieran trabajar de forma nativa con, por ejemplo, UTF8, sería mucho más sencillo. Pero hasta que eso sea así, nosotros (como proveedor de soluciones de integración de datos) hacemos todo lo posible por gestionar estos aspectos con el menor impacto posible para nuestros usuarios finales.

Por eso, es un placer para mí presentarte una nueva forma de gestionar la conversión de caracteres entre sistemas que admiten UTF8 (como Salesforce.com) y sistemas que usan una base de datos MS SQL (como Microsoft Dynamics NAV, GP, AX).

En RapidiOnline llevamos tiempo dando soporte internamente al manejo de textos como UTF8 (unicode). El punto de partida sigue siendo un conjunto de caracteres estándar (por ejemplo, cp850, o el que usen los sistemas de origen y destino), ya que no todos los sistemas admiten unicode y no siempre sabemos qué conjunto de caracteres se usa en los sistemas instalados localmente. Sin embargo, podemos configurar un servicio de RapidiOnline para que use UTF8 internamente en todos los textos que se transfieren desde o hacia un sistema determinado.

En los sistemas que admiten UTF8 esto funciona perfectamente porque no hay conversión y tenemos la certeza de no perder ninguna información - así que los datos se pueden transferir correctamente.

Sin embargo, si se transfieren datos entre un sistema que usa UTF8 y otro sistema que no admite UTF8 ni unicode - lo que sigue siendo el caso en la mayoría de las instalaciones de Microsoft Dynamics NAV - en algún momento debe producirse una conversión entre los sistemas.

Para los sistemas que se ejecutan en MS-SQL Server, ahora tenemos la posibilidad de dejar que el driver de MS-SQL gestione esta conversión. Enviaremos los textos al driver de MS-SQL en formato UTF8 y le pediremos que haga la conversión. Lo mismo ocurre al leer textos; el driver de MS-SQL entregará los textos en formato UTF8. De este modo mantenemos los datos en formato UTF8 al transferirlos, por lo que no perdemos ninguna información. Dicho de otro modo, dejamos que el sistema que necesita los datos en otro formato (el servidor de base de datos MS-SQL) haga la conversión. Como el servidor de base de datos MS-SQL es el sistema del cliente y está configurado para conocer y admitir el conjunto de caracteres usado internamente en esa base de datos, también es el mejor sistema para realizar una conversión correcta de los caracteres.

Cómo configurar el RapidiConnector para que el driver de MS-SQL gestione la conversión

Para configurar el RapidiConnector de forma que el driver de MS-SQL gestione la conversión entre UTF8 y el conjunto de caracteres usado internamente en la base de datos, tienes que añadir dos líneas (parámetros) al archivo rapidi.cfg de cada RapidiConnector (rapidi.exe) que tengas instalado (localmente en tu servidor).

Añade las siguientes líneas al archivo o archivos rapidi.cfg:

MSSQLUseUnicodeText : 1
MSSQLUseUnicodeTextVarChar : 1


Ambos parámetros son 0 por defecto, así que debes ponerlos en 1 para que surtan efecto. El MSSQLUseUnicodeText permite que enviemos/recibamos UTF8 para los campos con los tipos SQL_WCHAR y SQL_WVARCHAR (multibyte, campos de caracteres unicode en MS SQL). El parámetro MSSQLUseUnicodeTextVarChar hace lo mismo para SQL_CHAR y SQL_VARCHAR (columnas de un solo byte).

Cómo configurar tu servicio central de RapidiOnline para usar textos UTF8

En el lado central, también tenemos que indicarle al servicio de RapidiOnline que debe mantener los textos en formato UTF8 y no convertirlos a ningún otro conjunto de caracteres. Esto también se hace con un parámetro del archivo cfg, de la siguiente manera:

SForceUseUnicodeText : 1


Este parámetro también es 0 por defecto (así que hay que ponerlo en 1 para que funcione). Por ahora, configurar parámetros en el archivo cfg central no es posible desde la interfaz de usuario, así que tienes que pedírselo a nuestro soporte.

Estas funciones se introdujeron en la versión 3.2.92v. Si lo necesitas, pide a nuestro soporte que te ayude con la actualización.

 

Gestionar correctamente los textos UTF8 y conservarlos como UTF8 en las fórmulas

Al cambiar a tener los textos en formato UTF8 internamente en RapidiOnline, las funciones que manipulan cadenas de texto también tienen que reconocer que una cadena está en formato UTF8 y gestionarla correctamente. Igual de importante, también tienen que entregar el resultado como una cadena codificada en UTF8. Varias funciones ya lo hacían (como POS, LENGTH y COPY), pero algunas funciones seguían entregando el resultado como texto normal.

Ahora las funciones BEFORE, AFTER, LAST, MIDDLE, DEL, POSTDEL también funcionan con cadenas de texto UTF8 (unicode), conservando la cadena como unicode para su posterior procesamiento.

Este cambio se introdujo en la versión 3.2.92x. Tienes que actualizar tanto el central como el RapidiConnector a esta versión. Pide a nuestro soporte que te ayude con cualquier actualización.

 Como siempre, tus comentarios y preguntas son bienvenidos.

Gracias

Michael

¡Tu éxito es nuestro éxito!

Conoce a nuestro equipo de Éxito del Cliente, que se asegura de que aproveches al máximo tu servicio.

Reserva una cita

 

Compruebe si encaja con su entorno

Díganos qué sistemas utiliza y le diremos con franqueza si Rapidi es la herramienta adecuada.