32.- Error al crear BASE DE DATOS de GAM.
8. Unable to load DLL 'libmySQL.dll': The specified module could not be found.
\========== Retrieve GAM Version From Database started ==========
error: Unable to load DLL 'libmySQL.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
-
Retrieve GAM Version From Database Success
- Causa: Los procesos del GAM que ejecutan en el IDE de Genexus usan csharp y
ADO Net para conectarse a la BD del GAM (detectar la versión del GAM en
la BD, registrar aplicaciones, generar permisos).
-
Por ese motivo se requiere el cliente ADO Net correspondiente al DBMS que se está usando, en el caso de Mysql bajarlo de aquí.
- Se debe instalar el driver para 32 bits, aunque la máquina de
desarrollo sea de 64 bits, ésto es porque los procesos dentro del IDE
corren en 32 bits. Por ende, la libmysql.dll de 32 bits se debe copiar
al directorio c:\windows\syswow64.
- En ejecución de la aplicación (en producción incluso) sí se puede usar 64 bits si se quiere.
33.- Scroll en una Grilla.
- Dentro del Webpanel desde el ToolBox arrastramos el Componente Section al webform.
- El elemento SECTION CREA UN DIV en nuestro código HTML, un div es un
contenedor que cumple una función similar a una tabla pero con la
posibilidad de asignarle mas propiedades.
-

- Solo queda darle la propiedad de SCROLL a nuestro SECTION desde CSS
Para esto creamos una nueva clase dentro de SECTION llamada scroll (botón derecho en section add class)
Buscamos la propiedad OVERFLOW y le asignamos el valor AUTO. Esta
propiedad va a mostrar un scroll horizontal o vertical según sea
necesario, en caso de que el contenido no sobrepase al contenedor no se
mostrara el scroll.

Ahora agregamos la grilla que queremos mostrar al SECTION

- Finalmente toca asignarle la nueva clase a nuestro section desde el lado
del form y modificando el whith y height logramos una vista similar a
esta

34.- PAGINADO MANUAL CUANDO TENEMOS UN GRID SIN TABLA BASE
Tomado de:
Paginado
Cuando un grid no tiene tabla base no se calcula el ‘recordcount’ ni
el ‘pagecount’ que son las funciones para calcular los registros, dado
que el paginado no se hace en la consulta de la DB sino que se hace del
lado servidor. Por ende, en ocasiones cuando damos clic en el botón
‘Last Page’ de un GRID STB con paginado, si debería haber 5 registros en
la última página, intenta llenar los faltantes con más registros y
pareciera que es un bug, sin embargo es un comportamiento normal.
Lo que debemos aplicar para que funcione correctamente el paginado en GX es hacerlo manualmente de la siguiente manera*:
Suponiendo que en mi KB tengo una transacción película con estos
atributos: Id, Nombre y Año. Coloco en mi web panel un grid sin tabla
base con las variables basadas en dichos atributos y dos imágenes para
eliminar y editar.
El código a usar es el siguiente:
Event Load
&RecordCount = 0
For each order PeliculaNombre
where PeliculaId >= &FilterPeliculaId
&Eliminar.FromImage(Eliminar)
&ImgEditar.FromImage(Editar)
&PeliculaId = PeliculaId
&PeliculaNombre = PeliculaNombre
&PeliculaAnio = PeliculaAnio
LOAD
&RecordCount +=1
Endfor
Endevent
Event ‘FirstPage’
Grid1.FirstPage()
Endevent
Event ‘NextList’
Grid1.NextPage()
Endevent
Event ‘Last’
&RecordCount = 0
For each //Este FE es indentico al Load, sin el comando load
Where PeliculaId >= &FilterPeliculaId
&PeliculaId = PeliculaId
&PeliculaNombre = PeliculaNombre
&PeliculaAnio = PeliculaAnio
&RecordCount +=1
Endfor
&PageCount = int(&RecordCount / Grid1.Rows) + iif(mod(&RecordCount,Grid1.Rows)=0,0,1)
Grid1.GotoPage(&PageCount)
Endevent
Event ‘BackList’
Grid1.PreviousPage()
Endevent
El resultado al dar clic a la última página vemos que es el correcto y sería de esta manera:
*NOTA: El código descrito solamente aplica para GRIDs Sin Tabla Base
35.- Habilitar servicios Web Rest en un servidor LINUX con un WAR.
- Se debe Copiar las siguientes sentencias.
- En la parte de SERVLET.
<servlet>
<servlet-name>JerseyListener</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>gob.ec.GXApplication</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>JerseyListener</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
36.- Configurar PrinterServer
- Implementación y uso desde GeneXus
- La aplicación GeneXus se comunica con el servicio de impresión via ajax desde el navegador de la máquina cliente.
- Profundizando en los detalles de la implementación, la misma consiste en dos partes:
- Llamada a servicio via ajax
- Servicio de impresión
1 - En la aplicación que va a invocar al reporte debe incluirse el javascript estándar
gxprint.js (distribuido por GeneXus). Se puede hacer en cada Web Panel o en toda la aplicación, incluyéndolo en la Master Page.
Event Start
Form.JScriptSrc.Add("gxprint.js")
Endevent
Mayor referencia: Utilizar PrintServer
37.- Stored Procedures en el ISERIES.
De vez en cuando surge la necesidad de crear stored procedures, aquello se torna un dolor de cabeza principalmente por la
SINTAXIS, sobre todo por la POQUISIMA INFORMACION sobre el tema referente a la Herramienta Genexus
, para ello se recomienda principalmente la siguiente:
1.- Utilizar la version Gx15.
2.- Crear un Data Stored para Stored Procedures,
- Asignar Servidor, Schema de la base de datos, Usuario y password.
Luego Crear Objeto Stored Procedure, donde se describe todo los campos que requiere el Stored Procedure
para su ejecucion.
3.- Para la Version 6 de OS400 solo se permite parametros de INPUT, desde la Version 7 ya existe la posibilidad de recibir datos en los parametros descritos como INOUT.
4.- En un modelo RPG o COBOL, crear los programa en RPG o COBOL pero con la opcion IDLE, son mas eficiente.
5.- Crear en el MODELO DE JAVA WEB, un procedimiento tipo MAIN.
6.- En el Source ubicar lo siguiente, acorde a la definicion del Objeto Stored Procedure.
java String cmdBuffer = " DROP PROCEDURE STORED/PONCLI ";
java ExecuteDirectSQL.execute(context, remoteHandle, "DEFAULT", cmdBuffer) ;
//java cmdBuffer = " CREATE PROCEDURE STORED/PONCLI (INOUT CHAR(3), INOUT CHAR(5), INOUT CHAR(40)) EXTERNAL NAME STORED/PONCLI LANGUAGE RPG GENERAL ";
java cmdBuffer = " CREATE PROCEDURE STORED/PONCLI(IN MODO CHAR ( 3), IN CLICOD CHAR (5), IN CLINOM CHAR ( 40)) LANGUAGE RPGLE SPECIFIC STORED/PONCLI NOT DETERMINISTIC NO SQL CALLED ON NULL INPUT EXTERNAL NAME STOREP/PONCLI PARAMETER STYLE GENERAL WITH NULLS";
java ExecuteDirectSQL.execute(context, remoteHandle, "DEFAULT", cmdBuffer) ;
java System.out.println("STORED PROCEDURE PONCLI CREADO");
java cmdBuffer = " DROP PROCEDURE STORED/REVCLI ";
java ExecuteDirectSQL.execute(context, remoteHandle, "DEFAULT", cmdBuffer) ;
//java cmdBuffer = " CREATE PROCEDURE STORED/REVCLI (INOUT CHAR(3), INOUT CHAR(5), INOUT CHAR(40)) EXTERNAL NAME STORED/REVCLI LANGUAGE RPG GENERAL ";
java cmdBuffer = " CREATE PROCEDURE STORED/REVCLI(IN MODO CHAR ( 3), IN CLICOD CHAR (5), IN CLINOM CHAR ( 40)) LANGUAGE RPGLE SPECIFIC STORED/REVCLI NOT DETERMINISTIC NO SQL CALLED ON NULL INPUT EXTERNAL NAME STOREP/REVCLI PARAMETER STYLE GENERAL WITH NULLS";
java ExecuteDirectSQL.execute(context, remoteHandle, "DEFAULT", cmdBuffer) ;
java Application.commitDataStores(context, remoteHandle, null, "CRTJDBCCALLS");
java System.out.println("STORED PROCEDURE REVCLI CREADO");
java System.exit(0);
7.- Compilar y luego ejecutar de esa manera se crean los Stored Procedure desde el mismo Genexus, he intentado
de algunas maneras pero nunca se ejecuta la clase crtjdbccalls, en virtud de ello se tiene que hacerlo mediante
el NAVIGATOR o en pantalla VERDE ejecutar STRSQL seguidamente ejecutar las sentencias DROP y CREATE.
8.- En el mismo entorno de pantalla VERDE es posible ejecutar el comando CALL que invoca al Stored Procedure
recien creado de la siguiente forma:
CALL STORED/PONCLI ('2', '5', '5')
Sentencia CALL completada.
9.- Si no responde Sentencia CALL completada, existe algun error al crear los SP.
Referencia:
Stored Procedures para DB2