Google
 
Mostrando las entradas con la etiqueta Tips. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Tips. Mostrar todas las entradas

lunes, 7 de julio de 2008

Tips GX: Impresión x Posición PDF, Java II

Esta vez el tip es para imprimir texto

java getPrinter().GxAttris("MS Sans Serif", 20, true, false, false, false, 0, 0, 0, 0, 0, 255, 255, 255) ;
java getPrinter().GxDrawText("MS Sans Serif Font 20", 80, 400, 80+200, 400+20, 256) ;

java getPrinter().GxAttris("MS Sans Serif", 18, true, false, false, false, 0, 100, 50, 200, 0, 255, 255, 255) ;
java getPrinter().GxDrawText("MS Sans Serif Font 18 Otro Color", 80, 500, 80+200, 500+20, 256) ;

java getPrinter().GxAttris("MS Sans Serif", 16, true, false, false, false, 0, 100, 50, 200, 1, 10, 200, 10) ;
java getPrinter().GxDrawText("
MS Sans Serif Font 16 Otro fondo de Color", 80, 600, 80+200, 600+20, 256) ;

domingo, 6 de julio de 2008

Tips GX: Impresión x Posición PDF, Java

Hace como 7 años, investigando (aunque mas cercano es decir curioseando), encontré una forma de imprimir imágenes en un AS/400, programando en RPG. De aquel pseudo-descubrimiento, llegue junto a un compañero de trabajo y amigo con visión empresarial, dimos un curso de Impresiones Avanzadas AFPDS.

Aquel requerimiento inicial para urgar en este tipo de solución consistía en la impresión dinámica de "overlays" para los extractos de Tarjetas de Crédito, mi ex-empresa tenia varias Entidades Bancarias y Financieras como Clientes, y cada uno de ellos con un diseño de extracto "pseudo-exclusivo".

Realizar esta solución dentro de un ambiente Genexus, a primera vista, me pareció imposible de desarrollar por el mantenimiento que podría requerir y la solución casi mas cercana, seria crear un reporte por cada formato de extracto (el cual seria prácticamente un reporte por cada entidad) y eso en el largo plazo, ante modificaciones masivas, requeriría mucho tiempo.

Aquello no me gusto para nada, hasta que se me ocurrió una idea, y al final logre imprimir imágenes por posición en forma dinámica. El tema es que estaba buscando la forma de sacar rédito de este conocimiento, pero creo hoy, ya como profesional independiente, y con los trabajos a tiempo completo que tengo por delante, quizás alguien le encuentre una mejor presentación o inclusive presione a la gente de Artech a realizar una implementación de este "tip"

Tengo un xpz para que lo vean como funciona, son 2 objetos, un webpanel y un reporte. Envienme un email a generadordecodigo@gmail.com y les adjunto el xpz, aunque el tip consiste en utilizar el siguiente código.

java getPrinter().GxDrawBitMap([!&fname!], [!&PosXa!], [!&PosYa!], [!&PosXb!], [!&PosYb!]) ;

Web Panel Inicio









PDF Resultado

jueves, 8 de noviembre de 2007

Tips GX: Abrir archivo PDF

Abrir archivo PDF desde una carpeta no publica con un webpanel

Crear un procedimiento con las siguientes propiedades

  • Main = true
  • Call Protocol = HTTP
Definir variables con los siguientes Tipo de Datos
  • XmlWriter
  • HttpResponse

Enviar por parametros el nombre del archivo PDF con el path completo

Agregar el siguiente código
&xmlvar.OpenResponse(&httpresponse)
&httpresponse.AddHeader("Content-Type", "content = application/pdf")
&httpResponse.AddHeader("Content-Disposition", "attachment;filename=" + &PDFName)
&httpresponse.AddFile(&FullPathFile) &xmlvar.Close()

Llamar desde un webpanel para que solicite al usuario si desea abrir o guardar el archivo.

Si se desea abrir directamente, modificar como sigue:
&httpResponse.AddHeader("Content-Disposition", "inline;filename=" + &PDFName)



Tips K2B e Idea: NoVisibleConditions

Esta semana estoy trabando mucho con K2B, y resulta también, que estoy escribiendo mucho.

Situación
Genere una transacción, donde se genera un Id único para todos los Clientes de Empresas Externas. Cada empresa externa, tiene su propia calificación para identificar a sus Clientes, para lo cual, creé un atributo que identifica para que Empresa Externa es la carga del Cliente.

Cada combinación de claves por la empresa externa son claves candidatas. Esta por demás decir que los atributos que no correspondan al Tipo de empresa externa, quedan vacías.

Ejemplo
TipoEmpresaExterna = 'Empresa 1'
AtrClaveEmpresa101
AtrClaveEmpresa102

TipoEmpresaExterna = 'Empresa 2'
AtrClaveEmpresa201
AtrClaveEmpresa202

AtrClaveEmpresa203

TipoEmpresaExterna = 'Empresa 3'
AtrClaveEmpresa301


Al generar los pattern K2B, tuve la idea al cargar la Transacción, al visualizar el workwith, solo debía verse los atributos claves según el Tipo de empresa externa que seleccione el usuario. Es hay donde comencé a escribir bastante, en la Transacción y con Pattern K2B.

Tips
Esto es básicamente lo que escribí es K2B para el evento Refresh del Workwith

If not &TipoEmpresaExterna.IsEmpty()
If &TipoEmpresaExterna <> 'Empresa 2'
// atributos
AtrClaveEmpresa101.Visible = 0
AtrClaveEmpresa102.Visible = 0

// Variables del filtro
&AtrClaveEmpresa101.Visible = 0
&AtrClaveEmpresa102.Visible = 0

// Los literas de las variables del filtro
K2BSearchTitleAtrClaveEmpresa101.Visible = 0
K2BSearchTitleAtrClaveEmpresa102.Visible = 0
Endif

If &TipoEmpresaExterna <> 'Empresa 2'
// atributos
AtrClaveEmpresa201.Visible = 0
AtrClaveEmpresa202.Visible = 0
AtrClaveEmpresa203.Visible = 0

// Variables del filtro
&AtrClaveEmpresa201.Visible = 0
&AtrClaveEmpresa202.Visible = 0

&AtrClaveEmpresa203.Visible = 0

// Los literas de las variables del filtro
K2BSearchTitleAtrClaveEmpresa201.Visible = 0
K2BSearchTitleAtrClaveEmpresa202.Visible = 0
K2BSearchTitleAtrClaveEmpresa203.Visible = 0

Endif
...

Endif

También agregue el evento .Click para la variable &TipoEmpresaExterna

Idea
Habilitar una propiedad NoVisibleConditions, donde se cargue la condición para que no se visualice el atributo en la grilla, en los filtros y en el tab General.

lunes, 5 de noviembre de 2007

Tips: Ejecutar un objeto java gx desde un objeto rpg gx

El tip consiste en ejecutar el mandato RUNJVA desde un rpg gx sin necesidad de crear un programa CL a mano

Fuente RPG GX

variable &CmdJava Char(350)

&CmdJava = 'CHGJOB CCSID(37)' // no investigue mucho, pero sin esto no funciona ;)
&CmdJava = concat('RUNJVA CLASS(namejavaobj) ,
concat(" CLASSPATH('",
concat('//dirpackagegx/db2_classes.jar:',
concat('//dirpackagegx/gxclassr.jar:',
concat('//dirpackagegx/packagenamejavagx.jar:',
concat('//dirpackagegx/iText.jar:',
concat('//dirpackagegx/jt400.jar', "') PROP((java.awt.headless true)) GCHINL(262144)" )))))))

call('qcmdexc', &CmdJava, 350)

miércoles, 31 de octubre de 2007

Tips GX e Idea: Ajustar ancho de columna de una Grilla

Te ha pasado que cuando desarrollas un nuevo sistema, defines las transacciones, haces la reorg, le aplicas pattern, lo especificas, lo compilas, y listo!!!, a cargar las nuevas transacciones.

Hasta el momento de cargar las transacciones, pareciera que uno no se cuenta de como van a quedar los títulos de las columnas de las grillas.

Por ejemplo dos atributo, tipo Char 1, con los valores (S, N), visualizado con un combo box (Si, No)

"Permiso de usuario a visualizar su email",
"Permiso de usuario a visualizar su nombre completo"

Las columnas quedan muy anchas y estéticamente no queda bien

Digamos, que sos de las personas que cargan en la transacción la propiedad del atributo "Column Title", antes de continuar ,Te felicito!, vas por buen camino, pero como en mi caso, tengo que reconocer que en esa área, tengo una mala práctica.

Digamos entonces que cargue en la propiedad "Column Title"

"Permiso ver email", ó "Ver email"
"Permiso ver Nombre" ó "Ver Nombre"

Para este ejemplo, quizás ya sea suficiente con eso, la columna de la Grilla queda menos ancha, y si no, es ahi donde se comienza a abreviar. Para el tema de abreviaciones no quiero entrar en detalles, pues generalmente los usuarios finales me preguntan ¿Y que significa la columna:

"Per. Usu. Email"?

Tips:
Ante esta situación leyendo un poco, encontre una mini solución:
Hacer que títulos de las columnas aparezcan en más de una linea utilizando <BR> y seteando la propiedad TitleFormat en 1, de los atributos, variables que esten en una grilla.

Como utilizo Pattern, generalmente corrijo el título de las columnas de una grilla, es ahí donde agrego el tag <BR>

"Permiso<BR>ver email", ó "Ver<BR>email"
"Permiso<BR>ver Nombre" ó "Ver<BR>Nombre"

Luego, en el evento Start agrego la siguiente linea (eso en K2B lo hago en el Pattern)

NombreAtributo.TitleFormat = 1

Idea:
Agregar la propiedad TitleFormat al atributo para que vaya acompañado con el valor de la propiedad "Column Title"

Espero te sirva