- Obtener el usuario y nombre de equipo.
&IpAddress = &HttpRequest.GetHeader("X-FORWARDED-FOR").Trim()If &IpAddress = ''&IpAddress = &HttpRequest.RemoteAddressEndIf&IpAddress -> Varchar(15)&HttpRequest -> HttpRequest
2.- Enviar PDF por medio de HTTP.
3.- Conocer la ubicacion fisica donde esta instalado el servidor de aplicacion:
java [!&PathServidor!] = getHttpContext().getDefaultPath();
La variable PathServidor puede ser VarChar o Character.
Solo se debe ejecutar desde un Webpanel o TRN, pero no desde un Procedimiento.
Es mejor ubicarlo en el Start de una MasterPage luego asignarle a una variable de Session para que este disponible para todos los objetos.
4.- Configurar Hover y Selecction color en RWD:
Configurar Hover y Selection Color en RWD
5.- Crear un Menu com GAM y Genexus.
Un ejemplo de Menu con GAM
6.-Cuando te desplega un error de COMPILACIÓN que falta el OBJETO SDT.
Consejo para generar las SDT que no existen o fueron modificadas
Se sugiere en el BlogSpot de Enrique Almeida, crear un PROCEDURE tipo Main, luego le adicionan todas las SDT inluido los Bussines Components, luego compilar y solucionado el problema.
7.- Problemas cuando utilizas BC con WWP.
Para superar ese tema se debe realizar lo siguiente:
Aplicaciones de Genexus con Mapas
9.- User Controls para convertir HTML o cualquier texto en PDF.
URL donde descargar la UC
10.- UC para enviar mensajes de confirmacion.
UC para realizar mensaje de confirmacion
Documentación sobre la UC de confirmación
11.- Un cliente SQL para la mayoria de las bases de datos.
Un Cliente SQL para muchos gestores de base de datos
13.- Libreria para convertir HTML en PDF.
LIbreria para convertir HTML en PDFs
14.- Generar PDF masivos.
Para ello utilizar el comando SUBMIT en lugar de CALL, recuerde que se debe incorporar un parametro mas al inicio.
Se puede incluir tambien una ruta del archivo pdf, por ejemplo c:/temporal/mipdf.pdf.
15.- Ejecutar en modo linea de comanos un WEBPANEL, muy util cuando se tiene que ejecutar tareas programas tanto en Linux como en Windows.
#!/bin/sh
clear
DIA=`date +%d`
MES=`date +%m`
ANO=`date +%Y`
HORA=`date +%H:%M:%S`
HORA=`date +%H-%M-%S`
echo PROCESANDO...
HORA=`date +%H-%M-%S`
ARCHIVO=CALCULOS_inicia_$DIA-$MES-$ANO-$HORA.txt
ls >/usr/local/coactivas/$ARCHIVO
curl http://localhost:8080/roles/servlet/hprocesos130
HORA=`date +%H-%M-%S`
ARCHIVO=CALCULOS_termina_$DIA-$MES-$ANO-$HORA.txt
ls >/usr/local/coactivas/$ARCHIVO
echo FINALIZA CALCULOS.
echo FIN DEL PROCESO.
22.- Descargar o Visualizar PDF
Una alternativa es crear una carpeta donde pueda ubicar los archivos para que luego puedan ser depurados en ciertos periodos de tiempo, una forma podria ser crear en el caso del Tomcat en linux /usr/local/tomcat/webapps/descargas/ o en Windows c:/Tomcat7/webapps/descargas/
Otra solución es recurrir a un servidor de archivos o file server.
Documentos: /DocumentosSitioPrueba/pdf/
/DocumentosSitioPrueba/xls/
/DocumentosSitioPrueba/xml/
/DocumentosSitioPrueba/img/
Y para obtener los archivos desde una ubicación fuera de la publicación podrías utilizar lo siguiente en un procedimiento main + HTTP:
//Tipo de variables
&httpResponse : HTTPResponse
&contenido : Varchar
&nombreArchivo : Varchar
&tipoContenido : Varchar
&pathArchivo : Varchar
//Contenido de variables para archivos pdf
&contenido : 'application/pdf'
&nombreArchivo : 'archivopdf.pdf'
&tipoContenido : 'inline'//Se utiliza inline para que se muestre en el navegador, si se desea que se descargue el archivo se utiliza attachment
&pathArchivo : '/DocumentosSitioPrueba/pdf/archivopdf.pdf'
&httpResponse.AddHeader('Content-Type',&contenido)
&httpResponse.AddHeader('Content-Disposition',Format('%2; filename='+ "%1", &nombreArchivo.Trim(), &tipoContenido))
&httpResponse.AddFile(&pathArchivo)
23.- Impresiòn en WEB.
23.- Recuperar KB desde un MDF
Generar
el pdf usando en Call Protocol Internal. Si luego necesitás que se vea
el pdf en Linea, seguidamente despues de generarlo, a continuacion crea un procedure (con
protocolo Http y main=true) en cuyo Source debe tener lo siguiente:
&Respuesta.AddHeader('Content-Type','content = application/pdf')
&Respuesta.AddHeader('Content-Disposition','inline; filename='+&FileName)
&Respuesta.AddFile(&FileName)
SI deseas copiar el archivo se debe proceder de la siguiente formaí:
Considerando que &FileNameOutputServer un parámetro donde se incluye el path.
Para el ejemplo se dispone de un servidor Linux y dichos pdfs se copian a un servidor
Windows.
Seguidamente en Linux montamos al directorio compartido de Windows como un
filesystem.
&FileSource.Source = &FileName
&FileSource.Copy(&FileNameOutput)
&ErrCode = &FileSource.ErrCode
&ErrDescription = &FileSource.ErrDescription
/* Ahora copio el Archivo al Servidor donde se almacenan los PDF */
if not &DirectorioCopiaFactElect.IsEmpty()
&FileNameOutputServer=&DirectorioCopiaFactElect+&FileNameOutput
&FileSource.Copy(&FileNameOutputServer)
&ErrCode = &FileSource.ErrCode
&ErrDescription = &FileSource.ErrDescription
endif
3.- Conocer la ubicacion fisica donde esta instalado el servidor de aplicacion:
java [!&PathServidor!] = getHttpContext().getDefaultPath();
La variable PathServidor puede ser VarChar o Character.
Solo se debe ejecutar desde un Webpanel o TRN, pero no desde un Procedimiento.
Es mejor ubicarlo en el Start de una MasterPage luego asignarle a una variable de Session para que este disponible para todos los objetos.
4.- Configurar Hover y Selecction color en RWD:
Configurar Hover y Selection Color en RWD
5.- Crear un Menu com GAM y Genexus.
Un ejemplo de Menu con GAM
6.-Cuando te desplega un error de COMPILACIÓN que falta el OBJETO SDT.
Consejo para generar las SDT que no existen o fueron modificadas
Se sugiere en el BlogSpot de Enrique Almeida, crear un PROCEDURE tipo Main, luego le adicionan todas las SDT inluido los Bussines Components, luego compilar y solucionado el problema.
7.- Problemas cuando utilizas BC con WWP.
Para superar ese tema se debe realizar lo siguiente:
- Tools, Explore Kno.....Directory, eliminar los .ARI.
- en la carpeta compile, elimine los objetos en mencion que tengan _bc que identifican que tienen relacion con los BC.
- En la carpeta state de forma similar en el punto anterior eliminar los que tengan relacion con el objeto y cuya extension es .ARI.
Aplicaciones de Genexus con Mapas
9.- User Controls para convertir HTML o cualquier texto en PDF.
URL donde descargar la UC
10.- UC para enviar mensajes de confirmacion.
UC para realizar mensaje de confirmacion
Documentación sobre la UC de confirmación
11.- Un cliente SQL para la mayoria de las bases de datos.
Un Cliente SQL para muchos gestores de base de datos
13.- Libreria para convertir HTML en PDF.
LIbreria para convertir HTML en PDFs
14.- Generar PDF masivos.
Para ello utilizar el comando SUBMIT en lugar de CALL, recuerde que se debe incorporar un parametro mas al inicio.
Se puede incluir tambien una ruta del archivo pdf, por ejemplo c:/temporal/mipdf.pdf.
15.- Ejecutar en modo linea de comanos un WEBPANEL, muy util cuando se tiene que ejecutar tareas programas tanto en Linux como en Windows.
- Descargar el CURL seleccione su versión de Windows desde esta URL: Descargar CURL
- Se crea un carpeta en Archivos de Programas (x86) o en otra ubicación donde sea mas comodo para ejecutar.
- Copiar los dos archivos a esa carpeta.
- Crear un BAT con lo siguiente:
c:\curl\curl.exe http://mihost:8080/aplicacion/servlet/hwebpanel
cls
- Luego crea una tarea programa donde ejecute este script a la hora y fecha señalada.
- yum remove curl curl-devel
- clear
- wget http://curl.haxx.se/download/curl-7.24.0.tar.bz2
- tar xfj curl-7.24.0.tar.bz2
- cd curl-7.24.0
- ./configure --prefix=/usr
- make
- make install
- #check version
- curl -V
./configure --with-curl=/usr --with-curlwrappers // Instalar Soporte
Otra Forma: Tomado de: Documentacion para Instalar CURL en CENTOS
1) crear un nuevo archivo /etc/yum.los repos.d/ciudad-ventilador.repo
2) Pegar el siguiente contenido:
[CityFan]
name=City Fan Repo
baseurl=http://www.city-fan.org/ftp/contrib/yum-repo/rhel5/x86_64/
enabled=1
gpgcheck=0
3)
yum clean all
yum install curl
Desde un paquete:
http://download.fedora.redhat.com/pub/fedora/linux/development/rawhide/x86_64/os/Packages/?P=*curl*
rpm –Uvh packagename
De forma similar crear un .sh por ejemplo en /usr/local/procesos, de la siguiente forma:#!/bin/sh
clear
DIA=`date +%d`
MES=`date +%m`
ANO=`date +%Y`
HORA=`date +%H:%M:%S`
HORA=`date +%H-%M-%S`
echo PROCESANDO...
HORA=`date +%H-%M-%S`
ARCHIVO=CALCULOS_inicia_$DIA-$MES-$ANO-$HORA.txt
ls >/usr/local/coactivas/$ARCHIVO
curl http://localhost:8080/roles/servlet/hprocesos130
HORA=`date +%H-%M-%S`
ARCHIVO=CALCULOS_termina_$DIA-$MES-$ANO-$HORA.txt
ls >/usr/local/coactivas/$ARCHIVO
echo FINALIZA CALCULOS.
echo FIN DEL PROCESO.
cd /usr/local/procesos
curl http://mihost:8080/miapl/servlet/hwebpanel
clear
Crear una tarea programada con el comando CRONTAB -e
Asigna la el dia la hora para que se ejecute dicho script.
NOTA: Al crear el Shell, mejor copy paste y haga los ajustes necesarios, por el asunto de los signos especiales.
16.- Problemas con Tomcat7 y Genexus.
Errores al utilizar el Tomcat7
17.- Problemas al imprimir un PDF en un servidor en produccion Linux.
Para solventar aquello se tiene que copia desde su origen los archivos con extensión RPT, que estan ubicados en la raiz de la carpeta donde se genero los la aplicacion con genexus, ejemplo:
copiar desde:
c:/tomcat7/webapps/miaplicacion/reporte_pdf.rpt
Copiar el archivo reporte_pdf.rpt a la ubicacion en el servidor de produccion.
/usr/local/tomcat/webappp/miaplicacion
18.- UTILIZAR UC - DVelop_Bootstrap_ConfirmPanel
Siempre interactuar con el usuario en una aplicación web sobre todo es muy util, debido aquello se ve la necesidad de utilizar esta UC.
Aqui un ejemplo:
Event Start
DVelop_Bootstrap_ConfirmPanel1.ConfirmationText='TEXTO DEL MENSAJE'
DVelop_Bootstrap_ConfirmPanel1.Title ='TITULO'
DVelop_Bootstrap_ConfirmPanel1.YesButtonCaption = 'BOTONSI'
DVelop_Bootstrap_ConfirmPanel1.NoButtonCaption = 'BOTONNO'
DVelop_Bootstrap_ConfirmPanel1.CancelButtonCaption= 'CANCEL'
DVelop_Bootstrap_ConfirmPanel1.ConfirmType='0'
// 0 = Desplega un Boton de Confirmar BOTONSI
// 1 = Desplega dos Botones BOTONSI y BOTONSI
// 2 = Desplega Tres Botones BOTONSI BOTONNO CANCEL
Endevent
Event Enter
DVelop_Bootstrap_ConfirmPanel1.ConfirmationText = 'PRUEBAS TEXTO DEL MENSAJE'
DVelop_Bootstrap_ConfirmPanel1.Title = 'PRUEBAS TITULO'
DVelop_Bootstrap_ConfirmPanel1.Confirm()
Endevent
Event Refresh
// Es posible modificar el tipo de Boton, en tiempo de ejecucion
// Asignando un valor a esta propiedad, dichos estan
// descritos en la parte superior
DVelop_Bootstrap_ConfirmPanel1.ConfirmType = '0'
Endevent
Event DVelop_Bootstrap_ConfirmPanel1.onYes
Msg('CLICK EN BOTONSI')
Endevent
Event DVelop_Bootstrap_ConfirmPanel1.onNo
Msg('CLICK EN BOTONNO')
Endevent
Event DVelop_Bootstrap_ConfirmPanel1.onCancel
MSG('CLICK BOTON CANCEL...')
Endevent
19.- CREAR UN PROCEDIMIENTO QUE SE EJECUTE CON CURL y CRONTAB en LINUX
Asignar en la propiedad:
Call Protocol = HTTP
20.- EJECUTAR SQL DENTRO DE GENEXUS
NOTA: Al crear el Shell, mejor copy paste y haga los ajustes necesarios, por el asunto de los signos especiales.
16.- Problemas con Tomcat7 y Genexus.
Errores al utilizar el Tomcat7
17.- Problemas al imprimir un PDF en un servidor en produccion Linux.
Para solventar aquello se tiene que copia desde su origen los archivos con extensión RPT, que estan ubicados en la raiz de la carpeta donde se genero los la aplicacion con genexus, ejemplo:
copiar desde:
c:/tomcat7/webapps/miaplicacion/reporte_pdf.rpt
Copiar el archivo reporte_pdf.rpt a la ubicacion en el servidor de produccion.
/usr/local/tomcat/webappp/miaplicacion
18.- UTILIZAR UC - DVelop_Bootstrap_ConfirmPanel
Siempre interactuar con el usuario en una aplicación web sobre todo es muy util, debido aquello se ve la necesidad de utilizar esta UC.
Aqui un ejemplo:
Event Start
DVelop_Bootstrap_ConfirmPanel1.ConfirmationText='TEXTO DEL MENSAJE'
DVelop_Bootstrap_ConfirmPanel1.Title ='TITULO'
DVelop_Bootstrap_ConfirmPanel1.YesButtonCaption = 'BOTONSI'
DVelop_Bootstrap_ConfirmPanel1.NoButtonCaption = 'BOTONNO'
DVelop_Bootstrap_ConfirmPanel1.CancelButtonCaption= 'CANCEL'
DVelop_Bootstrap_ConfirmPanel1.ConfirmType='0'
// 0 = Desplega un Boton de Confirmar BOTONSI
// 1 = Desplega dos Botones BOTONSI y BOTONSI
// 2 = Desplega Tres Botones BOTONSI BOTONNO CANCEL
Endevent
Event Enter
DVelop_Bootstrap_ConfirmPanel1.ConfirmationText = 'PRUEBAS TEXTO DEL MENSAJE'
DVelop_Bootstrap_ConfirmPanel1.Title = 'PRUEBAS TITULO'
DVelop_Bootstrap_ConfirmPanel1.Confirm()
Endevent
Event Refresh
// Es posible modificar el tipo de Boton, en tiempo de ejecucion
// Asignando un valor a esta propiedad, dichos estan
// descritos en la parte superior
DVelop_Bootstrap_ConfirmPanel1.ConfirmType = '0'
Endevent
Event DVelop_Bootstrap_ConfirmPanel1.onYes
Msg('CLICK EN BOTONSI')
Endevent
Event DVelop_Bootstrap_ConfirmPanel1.onNo
Msg('CLICK EN BOTONNO')
Endevent
Event DVelop_Bootstrap_ConfirmPanel1.onCancel
MSG('CLICK BOTON CANCEL...')
Endevent
19.- CREAR UN PROCEDIMIENTO QUE SE EJECUTE CON CURL y CRONTAB en LINUX
Asignar en la propiedad:
Call Protocol = HTTP
20.- EJECUTAR SQL DENTRO DE GENEXUS
En ocasiones especiales es necesario poder incluir
sentencias SQL en los programas generados de las aplicaciones
Client/Server.
El uso más común, es para modificar los permisos de las tablas
de la aplicación, aunque puede utilizarse para realizar cualquier acción..
¿Cómo
funciona?
Se debe
incluir la constante “SQL” delante de la sentencia que se va a ejecutar.
Por
ejemplo:
SQL DELETE
* FROM CLIENTES
En el
código generado aparecerá un comentario indicando que se está ejecutando una
sentencia SQL del usuario.
Es posible
ejecutar sentencias SQL creadas en
tiempo de ejecución. Si se incluyen atributos y/o variables dentro de la
sentencia SQL con la notación [!att/var!], su valor es considerado en tiempo de
ejecución.
Por
ejemplo, si en Oracle se quiere cambiar el rol de un usuario:
&Role
= "MyRole"
SQL SET ROLE TO [!&Role!]
Otro ejemplo:
&Sent = 'DELETE FROM CLIENTES
WHERE CLICOD = 2'
SQL [!&Sent!]
Ha sido
implementado en la versión 7.5 en los upgrade 1 de cada uno de los generadores
en la versión 7.0
Consideraciones
- Es importante recordar que las sentencias SQL que se utilicen en el comando SQL de GeneXus NO pueden retornar valores (retornar un status, devolver registros RPC, etc.). Esto también implica que no se tiene un manejo de errores, por lo cual si la sentencia produce un error cancelará la aplicación (el usuario no tiene permisos, la tabla sobre la que se opera no existe, etc)
- El comando NO hace diferencia en lo que al DBMS se refiere, debiendo ser previsto por parte del desarrollador posibles diferencias de sintáxis entre ellos.
- Es importante tener en cuenta que si la sentencia actualiza datos, puede requerir un commit. Por lo tanto, si el objeto GeneXus en el que es utilizado el comando SQL no actualiza los datos de la base, debe agregarse un comando commit, o incluirse en una UTL que lo haga.
- El comando es ignorado en modelos no Client/Server.
En un Web panel a receptar la NOTIFICACION escribe lo siguiente:
Event OnMessage(&NotificationInfo)
Msg(&NotificationInfo.Message + ' -- ' + &NotificationInfo.Id.ToFormattedString() )
EndEvent
Msg(&NotificationInfo.Message + ' -- ' + &NotificationInfo.Id.ToFormattedString() )
EndEvent
Event Enter
PROCEDIMIENTO.SUBMIT("", &Par01)
Event En el Procedimiento llamado con SubMit, escribes lo siguiente:
&NotificationInfo.Id = '1'
&NotificationInfo.Message = 'TERMINO PROCESO DE REVISION ' + &Registros.ToFormattedString()
&webnotification.Broadcast(&NotificationInfo)
&NotificationInfo.Id = '1'
&NotificationInfo.Message = 'TERMINO PROCESO DE REVISION ' + &Registros.ToFormattedString()
&webnotification.Broadcast(&NotificationInfo)
Cada vez que se utilice esta opcion se enviara un mensaje al WEBPANEL.
22.- Descargar o Visualizar PDF
Una alternativa es crear una carpeta donde pueda ubicar los archivos para que luego puedan ser depurados en ciertos periodos de tiempo, una forma podria ser crear en el caso del Tomcat en linux /usr/local/tomcat/webapps/descargas/ o en Windows c:/Tomcat7/webapps/descargas/
Otra solución es recurrir a un servidor de archivos o file server.
Documentos: /DocumentosSitioPrueba/pdf/
/DocumentosSitioPrueba/xls/
/DocumentosSitioPrueba/xml/
/DocumentosSitioPrueba/img/
Y para obtener los archivos desde una ubicación fuera de la publicación podrías utilizar lo siguiente en un procedimiento main + HTTP:
//Tipo de variables
&httpResponse : HTTPResponse
&contenido : Varchar
&nombreArchivo : Varchar
&tipoContenido : Varchar
&pathArchivo : Varchar
//Contenido de variables para archivos pdf
&contenido : 'application/pdf'
&nombreArchivo : 'archivopdf.pdf'
&tipoContenido : 'inline'//Se utiliza inline para que se muestre en el navegador, si se desea que se descargue el archivo se utiliza attachment
&pathArchivo : '/DocumentosSitioPrueba/pdf/archivopdf.pdf'
&httpResponse.AddHeader('Content-Type',&contenido)
&httpResponse.AddHeader('Content-Disposition',Format('%2; filename='+ "%1", &nombreArchivo.Trim(), &tipoContenido))
&httpResponse.AddFile(&pathArchivo)
23.- Impresiòn en WEB.
1. Deberias revisar esta informacion del wiki:
2. Existe un ejemplo para gx9 en el gxopen: pero creo que si se importa a evo sin problemas
3. Deberias configurar para que en lugar de que genere pdf llame aun reporte txt automaticamente:
yo tengo el codigo moficado de esta manera:
&loops= 0
do while &loops <= 4 // endless loop
&loops= &loops+1
msg(concat("printing loop #", str(&loops), " "), status)
for each
where PrintFileStatus='1' // files to be printed
msg(concat("printing ", PrintFileName," "),status)
//&Printed= PrintDocument(PrintFileName) // printing the file
call(RGelatoNotaPedidoTexto2,PrintFileName)
If &Printed=0
PrintFileStatus="P" // setting with "Printed" value
PrintFileDatePrinted=now() // updating the printed date and the flag
msg("successfully printed", status)
else
msg("print failed",status)
endif
commit
endfor
&seconds=sleep(5) // waiting 5 seconds for to search again (files to be printed)
enddo
23.- Recuperar KB desde un MDF
| |||||||||||||||||||||||
|
4 comentarios:
Muy buenos consejos... el punto 34 te lo robaste de otro blog pero bueno, al menos coloca la fuente o los créditos.
Saludos.
Excelente!! Se Agradece!!
Estoy luchando con el punto 30 y no me funciona
tenes algun secreto que falta? como me puedo contactar con vos, para ver que estoy haciendo mal. desde ya muchas gracias por todooo
Genio!!!! no se por donde empezar a chorear. Gracias
Publicar un comentario