miércoles, 27 de noviembre de 2013

Imprimir un string en varias lineas de un reporte PDF

Bueno no se si les haya pasado, pero en mi caso me ocurrió que tenía un string o varchar o como le llamen de un tamaño de 500 caracteres, y que al momento de enviarlo a imprimir a un reporte PDF se salía de los márgenes del mismo y no como uno esperaba que se recorra automáticamente hacia abajo. Así que a buscar la manera de solucionar el inconveniente. (Me olvidaba, aclaro estaba trabajando en ambiente Web para el Generador Java)

Es aquí cuando me enteré de la función GXGetMLi, y en base a un poco de programación se consiguió que se imprima todo el string hacia abajo sin que salga de los márgenes del reporte PDF.

La función GXGetMLi recibe el string, el número de línea y el número de caracteres a imprimir por esa línea y devuelve el resto del string especificado por los parámetros mencionados. Todo esto más un contador y un for y una que otra validación con un if y listo.

For &contadorlinea = 1 to 5
    &lineaImprimir = GXGetMLi(&Descripcion, &contadorlinea, 100)
    if NOT &lineaImprimir.IsEmpty() AND &contadorlinea = 1
        print LineaDescripcion
    else
        if NOT &lineaImprimir.IsEmpty()
            print LineaDescripcion1
        endif
    endif
Endfor

A tomar en consideración:
  1. No es lo mismo imprimir minúsculas que Mayúsculas, por lo que recomiendo tomar en cuenta la impresión como si se lo estuviera haciendo solo con mayúsculas para no llevarse sorpresas cuando el usuario ingrese solo este tipo de caracteres.
  2. Tomar en cuenta el número de caracteres a imprimir, porque puede ser el caso de tener varias descripciones a imprimir y en forma de columna. Por lo que se debe tomar en cuenta el ancho y por ende el número de caracteres que calzarán en ese ancho de columna.
  3. Si se dieron cuenta el número de repeticiones del for por el número de caracteres enviado a la función explicada es igual a 500 que es el tamaño del string.
  4. Y me olvidaba si tienen saltos de línea la función hará los saltos de línea correspondiente así que esto puede alterar el número de líneas a imprimir por lo que al menos yo elimino los saltos de lìnea del string ( para saber cómo eliminar saltos de línea de un string click aquí ).
Nota:

Para .Net me dijeron, pero ustedes pueden comprobarlo, que no hace falta esta codificación sino simplemente configurar en las propiedades de la variable a imprimir en la pestaña de Layout aquella que dice Alignment y colocar MiddleJustify. Si no les funciona ya saben que hacer.

lunes, 25 de noviembre de 2013

Eliminando Saltos de línea de un String

Aquí una pequeña guía para eliminar el salto de línea de un string. Se van a usar funciones propias de la herramienta como son Chr y StrReplace.

Primero creamos una variable tipo Varchar para almacenar el salto de línea. En mi caso la nombrare &LF

Después almacenamos el valor del salto de línea mediante la función CHR, recibe como parámetro el código decimal del carácter (Código ASCII), el código decimal del salto de línea es 10.

&LF = CHR(10)

Por último usamos la función STRReplace para reemplazar el salto de línea por cualquier carácter deseado. La función recibe como parámetros el String, el carácter a reemplazar y el carácter que lo reemplazará (ya parece trabalenguas).

&String = STRReplace(&String, &LF.Trim(), " ")

Descarga Export para Genexus EV2

domingo, 24 de noviembre de 2013

Abrir Web Panel en una nueva pestaña

Trabajando con este bendito Genexus me encontré con la necesidad de abrir un WebPanel en otra pestaña del navegador desde una acción de la línea de un Grid. Adicionalmente necesitaba pasar unos parámetros que construía en un Sub. Así que con estas condiciones a googlear, y me encontré con algunas opciones en varios foros y blogs, las mismas que serán mostradas a continuación.

Cabe mencionar, no se si debería, que estoy trabajando con la versión Evolution 2. Esto lo menciono por si acaso no más.

Bueno principalmente encontré tres opciones:

La primera mediante la propiedad Link y el Evento Load del Grid, la segunda mediante código JavaScript y la propiedad Link y la tercera que no es más que abrirla en un popup especificando las propiedades para su apertura. Ahora si empecemos con las respectivas codificaciones de cada ejemplo:
  1. Como mencione se debe codificar en el evento Load del Grid. Donde se tiene una variable tipo imagen agregada en las columnas del grid, la misma que posee la propiedad "Link" que es a la que vamos a igualar a la propiedad "Link" del web panel a abrir en una nueva pestaña.

  2. Event Load
           &NuevaVentana.LinkTarget = "_blank"
           &NuevaVentana.Link = WebPanel.Link(&Parametro)
    EndEvent

  3. Está es la opción que utilice. Se crea un Texblock en el Web Panel y se especifica como Foramato "HTML" y mediante código JavaScript  se realiza la llamada pertinente al Web Panel con su propiedad "Link" en el Evento "Click" de la variable correspondiente pasando los parámetros y llamando a los Subs respectivos.

  4. Event &NuevaVentana.Click
           do 'LlamadaSub'
           TextBlock.Caption='<script>window.open("'+WebPanel.Link(&Parametro)+'","Pagina Nueva");</script>'
    EndEvent

    Se debe tomar en cuenta las comillas dobles y simples usadas en el JavaScript.

  5. Esta opción solo abre en una pantalla emergente conocida como Pop Up, pero con la peculiaridad de que se pueden especificar ciertos parámetros para su apertura. Esta operación se realiza mediante una variable tipo "Window"

  6. Event &NuevaVentana.Click
           &InWindow.Url = WebPanel.Link(&Parametro)
           &InWindow.Open()
    EndEvent
Descarga Export para Genexus EV2