jueves, 27 de febrero de 2014

Pasar BigText a XML en Navision

¡La de problemas que me he encontrado para trabajar con los BigText en Navision!.
Su manejo no es intuitivo y se necesita de un poco de conocimiento previo a la hora de utilizarlo.
En particular, mi necesidad de las variables del tipo BigText surgen en un proyecto en el que desde un servidor de navision consumia los web services de otro servidor de Navision. En futuros posts comentare los pormenores de este proyecto, pero el post actual es para comentar uno de los quebraderos de cabeza que mas amargado me ha tenido.
En un determinado momento y por necesidades varias, me veo en el plan de transformar un BigText a XML. Sencillo, ¿No? aqui por ejemplo hay una solucion para leer bigtext y pasarlo a XML.
Pues bien, así utilice mi variable BigText, poniendo FORMAT() para que me leyese el contenido y en principio me funciono estupendamente.
Pero no podia ser tan bonito, si leemos la definicion de la funcion format vemos que indica que es para variables de tipo simple ysi leemos la definicion del tipo de datos BIGTEXT vemos que es compleja. Por lo que en teoria no deberia de funcionar, pero funciona!!!.
ERROR!!!!!!!!
No funciona!!!!!!!!!!
Bueno, para ser correctos, funciona cuando el BigText no contiene muchos caracteres, el error que da es el de Excedido el tamaño del bufer.

Por lo que la única solución correcta es la de utilizar InStream y OutStream.
Por lo que en realidad se deberia hacer así:
XmlDocPasado.async := FALSE;
TempBlob.HTML.CREATEOUTSTREAM(ostream);
BTPasado.WRITE(ostream);
TempBlob.CALCFIELDS(HTML);
TempBlob.HTML.CREATEINSTREAM(istream);
XmlDocPasado.load(istream);

Ocurre exactamento lo mismo con la variable Automation 'Navision Attain Hash 1.0'.BSTRConverter y su metodo BSTR. PArece que con este metodo nos va a devolver un bonito chorro de carácteres para pasar a nuesto XML y idem de idem, Excedido el tamaño del bufer.

jueves, 20 de febrero de 2014

Saber si una columna concreta existe en una tabla

Estoy trabajando en un proyecto que pretende ser adaptable a varias bases de datos. En el, surge la necesidad de saber en una consulta de SQL si un campo existe en una tabla concreta o no existe.La consulta para averiguarlo es así: SELECTCASE WHEN (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'Empresa$Tabla' AND
COLUMN_NAME
= 'Columna') = 0 THEN 'NO TIENE COLUMNA Columna' ELSE 'SI TIENE COLUMNA Columna' END

Para averiguar si la Tabla existe sería así:
SELECTCASE WHEN (SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_NAME = 'Empresa$Tabla') = 0 THEN 'NO TIENE TABLA Empresa$Tabla' ELSE 'SI TIENE TABLA Empresa$Tabla' END

jueves, 13 de febrero de 2014

Cómo volver a mostrar la ventana de datos de informes en Reporting Services

El otro día cerre el Reporting Services, y al volverlo a abrir me habia desaparecido la ventana Datos del Informe. No es la primera vez que me pasaba, pero no recordaba como se voliva a mostrar. Como tampoco recordaba su nombre no era capaz de encontrar la manera.
Buscando en internet ayuda, encontre en esta web la solución.

La opción está en el menú Ver-Datos de Informe.
O darle a Ctrl + Alt + D

jueves, 6 de febrero de 2014

Cambiar los captions de un formulario de Navision en tiempo de ejecucion

Para poder cambiar los captions de un formulario, utilizaremos la propiedad CaptionClass del campo.
En el formulario seleccionamos el campo que deseamos cambiar el caption.

 
En las propiedades seleccionamos CaptionClass y ponemos '1,1,,' + NuestroCaption.
 
 
NuestroCaption puede ser perfectamente un parámetro que cambiemos en el openform por ejemplo, o una funcion como en el ejemplo anterior.
El CaptionClass utiliza de la Codeunit 1 la funcion DimCaptionClassTranslate