26 marzo 2014

De No-Unicode a Unicode (Parte 8 de 10)

Conversión de archivos de datos Omnis (df1)

  • ¡¡ CUIDADO !!
    Haga una copia de seguridad de sus archivos, antes de convertirlos en una versión Unicode de Omnis Studio.

Desde la versión 4.3 (y 4.3.x) Unicode, Omnis Studio incluye un conversor de los datos e índices contenidos en ficheros df1 de Omnis. En el caso de encontrar datos de tipo “Character” almacenados en campos de tipo “Binay”, (por ejemplo, al guardar un documento creado con un editor de textos externo) no se llevará cabo ningún tipo de conversión.

Al abrir un archivo de datos Omnis con una versión Unicode, se le pedirá que confirme si desea realmente realizar la conversión. Si pulsa sobre el botón “Sí”, Omnis mostrará un cuadro de diálogo con las siguientes opciones:

  • Rápida (Quick)
    Los índices son eliminados y después reconstruidos, los datos no se convierten. Ésta opción puede resultar útil en los casos en que el archivo a convertir únicamente contenga caracteres de 7 bits, tenga en cuenta que Omnis no realizará comprobación alguna en cuanto a esto, será responsabilidad suya.

  • Completa (Full)
    Se lleva a cabo la conversión completa del archivo.

Cuando el fichero es abierto desde comandos


A los comandos “Open data file” y  “Prompt for data file” se les ha añadido la opción “Convert without user prompts”. Si esta opción está activada, no se mostrará el diálogo para conversión mencionado anteriormente, pero si podrá seleccionar, (como parte del comando), si desea usar "Quick Unicode conversion" o "Full Unicode conversion", de éste modo podrá indicar el nivel de conversión que desee.

Compruebe cabalmente si los resultados de la conversión son los deseados, no deseche la copia de seguridad del archivo de datos no-Unicode y que realizo antes de la conversión, al menos hasta que esté completamente seguro de que los datos ha sido convertidos con éxito. Realice algunas pruebas con los datos desde su aplicación. Normalmente usted hará esto con una nueva versión de Omnis Studio, pero cuando la librería es convertida a Unicode al igual que sus archivos de datos, deberá tener especial precaución por los posibles problemas que se puedan presentar.

Datos tipo “Character” y “Binary” bajo Unicode

No es posible concatenar una variable de tipo “Character” con otra de tipo “Binary” cuando se está trabajando con una versión Unicode de Omnis Studio. El opción correcta sería usar $readfile para leer un archivo y guardarlo sobre una variable binaria, para después analizarlo. La asignación de datos de tipo “Characer” a “Binary” y viceversa es probable que cause problemas, sobre todo al usar Unicode, y debe ser por tanto evitado.

19 marzo 2014

De No-Unicode a Unicode (Parte 7 de 10)

Conversión de Librerías


Al abrir una librería Omnis con una versión Unicode, se le pedirá que convierta el archivo. Se trata de una conversión total, incluyendo los caracteres menores del 128. Una vez que la librería ha sido convertida a Unicode, no podrá volver a utilizarse como versión no-Unicode.

Control de versiones (VCS)

La versión Unicode de Omnis VCS construye librerías que funcionan únicamente con versiones Unicode de Omnis Studio. Sólo las versiones no-Unicode de VCS pueden construir bibliotecas ejecutables tanto con versiones Unicode, como no-Unicode.

Edición de textos en campos con barras de desplazamiento

La propiedad $righttoleft fue añadida con la intención de permitir la entrada de texto en los campos de edición con desplazamiento de derecha ha izquierda y con la finalidad de (por ejemplo) permitir la introducción de datos con escritura árabe. Esta propiedad ha sido mejorada para que en un campo con varias líneas de texto, muestre la barra de desplazamiento vertical situada a la izquierda.

Oracle8 DAM (Unicode)

Se ha creado una nueva propiedad de sesión para DAM de Oracle8 (DAMORA8), disponible en sólo con el DAM Unicode.
  • $nationaltonclob
    $nationaltonclob puede ser usado para modificar la asignación predeterminada para los tipos de datos Omnis “Character” y “National”. Por defecto, los tipos “Character” y “National” creados con un tamaño superior a $maxvarchar2 son relacionados con el tipo de datos NCLOB, pero, fijando la propiedad $nationaltonclob a kTrue, sólo los campos de tipo “National” mayores de $maxvarchar2 serán asignados como NCLOB. De éste modo los campos de tipo “Character” mayores de $maxvarchar2 serán asignados como no-Unicode CLOB y podrían sufrir pérdida de datos por truncamiento, si es el caso que contienen caracteres Unicode.

12 marzo 2014

De No-Unicode a Unicode (Parte 6 de 10)

El componente FormFile


Las propiedades $filereadencoding y $filewriteencoding del componente FormFile, introducido en la versión 4.0 de Studio, fueron modificadas en la versión 4.1, de modo que la constante kFFEncoding permitiese el uso del grupo kUniType… y poder así indicar la codificación del archivo. En el caso de la propiedad $filereadencoding podrán usarse todas las constantes del grupo excepto kUniTypeCharacter, y en el caso de la propiedad $filewriteencoding excepto kUniTypeAuto y kUniTypeCharacter .

Además, también se dispone de una constante kUniTypeBinary para identificar los archivos que se tratarán como datos binarios sin procesar, el código antiguo sigue estando soportado.

El componente Fileops


El componente Fileops contiene dos nuevos métodos, $readcharacter() y $writecharacter(), que permiten la lectura y/o escritura de datos en formato Unicode.
  • $readcharacter(encoding,variable) Lee un fichero almacenando sus caracteres en variable; encoding podrá ser una constante del grupo kUniType…, excepto kUniTypeBinary o kUniTypeCharacter.

  • $writecharacter(encoding,variable) Sustituye el contenido del archivo, con los datos  de variable; encoding podrá ser una constante del grupo kUniType…, excepto kUniTypeAuto, kUniTypeBinary o kUniTypeCharacter.

Cuando se usan las opciones Import/Export y Report File


Es posible especificar la codificación de los archivos de texto que se generan al usarse las opciones de importación y exportación, así como al enviar un informe a un archivo de texto, esto podrá hacerse mediante las propiedades $importencoding y $exportencoding:
  • $importencoding Especifica la codificación que se utilizará para los datos importados, tanto al importar desde un puerto, como cuando el archivo de importación no contiene una cabecera Unicode BOM. Podrá usarse cualquiera de las constantes del grupo kUniType..., con excepción de kUniTypeAuto, kUniTypeCharacter, kUniTypeBinary y las kUniTypeUTF32….

  • $exportencoding Especifica la codificación que se utilizará en la exportación de datos, tanto al imprimir sobre un puerto o sobre un archivo de texto. Podrá usarse cualquiera de las constantes del grupo kUniType..., con excepción de kUniTypeAuto, kUniTypeCharacter y kUniTypeBinary.

  • $exportbom Si es “true”, indicará que la propiedad $exportencoding deberá usar una codificación Unicode, se creará la marca Unicode BOM al inicio del archivo de salida.

Todas éstas propiedades pueden ser localizadas entre las preferencias Omnis ($root.$prefs). Cuando se trata de un servidor multi-hilo, existirá un valor separado para cada una de estas propiedades, en correspondencia con cada hilo.

06 marzo 2014

De No-Unicode a Unicode (Parte 5 de 10)

Conversión de datos Unicode

La función uniconv() permite convertir caracteres Unicode de un tipo a otro.

Su sintaxis es: uniconv(srctype,src,dsttype,dst,bom,errtext)

Convierte src y guarda el resultado en dst. Devolverá cero o un valor distinto de cero junto con el texto de error en errtext. src y dst pueden ser variables de tipo binario o carácter, en función de los valores usados en srctype y dsttype.

bom es un valor booleano: si es cierto, dst será “Unicode Byte Order Marker” (BOM).

srctype y dsttype podrán ser cualquiera de las siguientes constates kUniType...

kUniTypeAuto

La codificación de origen es detectada automáticamente y sólo puede ser usado en alusión al origen de datos.

kUniTypeUTF8

Los datos son guardados en una variable binaria y codificados en UTF-8.

kUniTypeUTF16BE

Los datos son guardados en una variable binaria y codificados en UTF-16BE.

kUniTypeUTF16LE

Los datos son guardados en una variable binaria y codificados en UTF-16LE.

kUniTypeUTF16

Los datos son guardados en una variable binaria y codificados en UTF-16LE si la plataforma es “little-endian” o en UTF-16BE si la plataforma en uso es “big-endian”. Esto asegura estar usando la codificación apropiada según el sistema operativo en uso.

kUniTypeUTF32BE

Los datos son guardados en una variable binaria y codificados en UTF-32BE.

kUniTypeUTF32LE

Los datos son guardados en una variable binaria y codificados en UTF-32LE.

kUniTypeUTF32

Los datos son guardados en una variable binaria y codificados en UTF-32LE si la plataforma es “little-endian” o en UTF-32BE si la plataforma en uso es “big-endian”. Ésto asegura estar usando la codificación apropiada según el sistema operativo en uso.

kUniTypeNativeCharacters

Los datos son guardados en una variable binaria, donde cada byte es un carácter del juego de caracteres “Latin 1” según el sistema operativo en uso (Ansi, si se trata de Windows, MacRoman si es un Mac, e ISO-8859-1 si es Unix.

kUniTypeCharacter

Los datos son guardados en una variable de tipo carácter.

En los casos de kUniTypeAnsiThai, kUniTypeAnsiCentralEuropean, kUniTypeAnsiCyrillic, kUniTypeAnsiLatin1, kUniTypeAnsiGreek, kUniTypeAnsiTurkish, kUniTypeAnsiHebrew, kUniTypeAnsiArabic, kUniTypeAnsiBaltic, y kUniTypeAnsiVietnamese, los datos son guardados en una variable binaria, y contiene datos de tipo carácter, donde cada byte es codificado usándose para ello el conjunto de códigos ANSI estándar.