Enviar parámetros por código BBj a un JasperReport

144 views
Skip to first unread message

nigalval

unread,
Apr 18, 2017, 10:27:13 AM4/18/17
to MundoBBx
Estimada comunidad...

Hemos comenzado a implementar JasperReports a nuestras aplicaciones desarrolladas en BBj, hemos logrado llamar desde código BBj un reporte .jrxml, el cual nos muestra datos de la base de datos a través de una consulta SQL y un adaptador independiente al código BBj, sin embargo, nos han nacido la siguientes dudas: ¿Cómo le paso parámetros desde el código BBj al reporte sin la necesidad de que el reporte tenga su propia conexión?, ¿Cómo "rescato" los datos de una ventana y los paso como parámetros al reporte?, si alguien me puede guiar como hacerlo, lo agradecería.

►Para ser más especifico, lo que buscamos es rescatar los datos desde la BBjGrid y pasarlos al reporte:


Desde ya muchas gracias, estaré atento a sus respuestas.


Administrador

unread,
Apr 18, 2017, 12:29:43 PM4/18/17
to MundoBBx
Estimado Nicolás,

Una de las construcciones que admite el objeto BBJasperReport, es enviando el reporte asociado con un Recordset.
Por tanto, si tienes una grilla con datos, que quieres enviar a un reporte Jasper los pasos serían:

1) Crear un BBjRecordSet, en cualquier de sus modalidades. Por ejemplo, un BBjRecordSet en memoria.
2) Poblar el BBjRecordSet con los datos desde la grilla
3) Crear el reporte Jasper con la coincidencia de los campos que definiste en el BBjRecordSet utilizado en tu programa.
4) Invocar el reporte Jasper en tu código.


Adjunto un simple reporte Jasper utilizado por el programa BBj.
Adjunto encontrarás un programa con la siguiente funcionalidad:

a) Muestra una grilla con las regiones de Chile
b) Con el botón reporte, crea un BBjRecordSet en memoria que luego envía como parámetro al objeto BBJasperReport.


El programa:
rem 'Reporte Jasper desde BBjRecordSet
rem
begin
rem
use ::bbjasper.bbj::BBJasperViewerWindow
use ::bbjasper.bbj::BBJasperViewerControl
use ::bbjasper.bbj::BBJasperReport
use java.sql.ResultSet
rem
declare BBjSysGui sysgui!
declare BBjTopLevelWindow window!
declare BBjStandardGrid grid!
rem
sysgui = unt
open (sysgui)"X0"
sysgui! = bbjapi().getSysGui()
cols = 2
rows = 0
window! = sysgui!.addWindow(0,0,540,440,"Grid",$00010093$,$$)
rem
flags$ = $81c2$; rem ' column header
grid! = window!.addGrid(100,101,102,10,10,400,340,flags$,rows,cols)
grid!.setColumnHeaderCellText(0,"Region")
grid!.setColumnHeaderCellText(1,"Nombre")
grid!.setColumnWidth(0,40)
grid!.setColumnWidth(1,200)
rem
reporte!=window!.addButton(104,50,380,90,20,"Reporte",$0800$)
progreso!=window!.addProgressBar(105,145,380,100,20)
progreso!.setVisible(BBjAPI().FALSE)
rem
fila=-1
template$="REGION:C(2),NOMBRE:C(26*=)"
dim rec$:template$
while 1
    dread rec.region$,rec.nombre$,END=*break
fila=fila+1
grid!.setNumRows(fila+1)
grid!.setCellText(fila,0,rec.region$)
grid!.setCellText(fila,1,rec.nombre$)
wend
window!.setVisible(BBjAPI().TRUE)
rem
reporte!.setCallback(reporte!.ON_BUTTON_PUSH,"emitereporte")
window!.setCallback(window!.ON_CLOSE,"eoj")
process_events
rem
eoj:
stop
rem
emitereporte:
progreso!.setIndeterminate(BBjAPI().TRUE)
progreso!.setText("Generando reporte...")
progreso!.setVisible(BBjAPI().TRUE)
recordSet!=BBJAPI().createMemoryRecordSet(template$)
filas=grid!.getNumRows()
for lin=0 to filas-1
    data! = recordSet!.getEmptyRecordData()
    data!.setFieldValue("REGION",grid!.getCellText(lin,0))
    data!.setFieldValue("NOMBRE",grid!.getCellText(lin,1))
recordSet!.insert(data!)
next lin
rem
reportFile$="Estados.jrxml"
rem 
resultSet! = recordSet!.getJDBCResultSet()
resultSet!.beforeFirst()
rem Parametros (si hubiera)
params! = new java.util.HashMap()
rem Crea y llena el reporte con el ResultSet
report!=new BBJasperReport(reportFile$,resultSet!,params!)
report!.fill()
bbjasperViewer! = new BBJasperViewerWindow(report!)
progreso!.setVisible(BBjAPI().FALSE)
bbjasperViewer!.show(1)
return
rem
DATA "01","Region Metropolitana"
DATA "02","XV Arica y Parinacota"
DATA "03","I Tarapaca"
DATA "04","II Antofagasta"
DATA "05","III Atacama"
DATA "06","IV Coquimbo"
DATA "07","V Valparaiso"
DATA "08","VI O'Higgins"
DATA "09","VII Maule"
DATA "10","VIII Biobio"
DATA "11","IX La Araucania"
DATA "12","XIV Los Rios"
DATA "13","X Los Lagos"
DATA "14","XI Aysen"
DATA "15","XII Magallanes y Antartica"

Saludos cordiales,

Administrador MundoBBx
Estados.jasper
Estados.jrxml

nigalval

unread,
Apr 20, 2017, 3:26:06 PM4/20/17
to MundoBBx
José, muchas gracias por la respuesta anterior quedó todo muy claro. 

Hemos aprendido como pasar parámetros (fields) a los reportes, ahora queremos trabajar con las tablas de JasperReport, pero al parecer estas necesitan un "DataSet", en el cual tenemos los mismos campos de la BBjGrid, pero al pasarlos de la forma que indica en el tutorial anterior, la aplicación se cae.
Mi duda es, al momento de usar un DataSet en una Tabla Jasper hay que indicarle a BBj que DataSet usa, o tiene otra forma de manejar los datos?


José Aguilar

unread,
Apr 20, 2017, 3:31:16 PM4/20/17
to MundoBBx
Estimado Nicolás,

Me alegra que la explicación anterior les haya sido útil.
Respecto a tu consulta (si es que la entiendo bien), la lógica para trabajar con distintos dataset es que para cada uno de ellos, debes tener su correspondiente documento Jasper, con el formato de columnas que le estás enviando desde el programa BBj.

Saludos cordiales,

Administrador MundoBBx

--
Has recibido este mensaje porque estás suscrito al grupo "MundoBBx" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a mundobbx+unsubscribe@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Reply all
Reply to author
Forward
0 new messages