1
Conversión de Sistema para Ypacaraí
Java Win / Linux y Windows Guido Gaona
&i = dfrclose( )
8. Uso de dfwopen: con esta función se pueden crear archivos delimitados, sirve
principalmente para exportar datos. Abajo un ejemplo de lo que pretendía
solucionar la impresión de reportes Text en Linux y Windows conjuntamente (fue
otra la solución implementada)
java [!&dirusr!] = System.getProperty("user.dir", "unknown"); //obtenemos el directorio de trabajo
java [!&fileseparator!] = System.getProperty("file.separator"); //obtenemos el separador de archivos
&dirusr = &dirusr.Trim() + &fileseparator //al directorio de trabajo le sumamos el separador de
archivos
2
Conversión de Sistema para Ypacaraí
Java Win / Linux y Windows Guido Gaona
else
msg('¡Error en la creación del archivo *.sh!', status)
endif
// endif
&err = Shell(&dirusr.Trim() + 'rcjals004.sh') //llamamos al archivo para tirar a la impresora
if &err <> 0
msg('¡Error durante la impresión del recibo!', status)
else
msg('¡Recibo de caja impreso correctamente', status)
endif
endif
9. Show Status Bar Model Property = Always: esto para mostrar el status bar
para poder visualizar los mensajes tipo nowait o status.
10.Path en la red: hay casos en que sería util implementar el path a una carpeta
compartida en la red. Simplemente se hace así (solo un ejemplo):
&ImgPath = ""
&inipath = '\\192.168.1.107\cyl'
&Extension = 'dot'
&Titulo = 'Plantillas'
&buttcap = 'Seleccionar'
&TipoBoton=0
call('gxSelFile', &PthArc, &Inipath, &Extension, &Titulo, &buttcap, &TipoBoton)
&Plantilla.UseMSOffice = 0
&Plantilla.Template = &PthArc
If &Plantilla.ErrCode <> 0
msg(&Plantilla.ErrDescription+' Error al tomar la plantilla')
else
&PthArc = 'C:\Temp\Modelo'+'Prueba'+'.DOC'
&Plantilla.Open(&PthArc)
If &Plantilla.ErrCode <> 0
msg(&Plantilla.ErrDescription+' Error al crear el documento')
else
&Plantilla.Replace('{{NOMBRE}}','GUIDO MIGUEL GAONA CANDIA',0,0)
&Plantilla.Replace('{{CUENTA}}',ServerNow(),0,0)
&Plantilla.Replace('{{Situacion}}','Prueba',0,0)
endif
endif
11. Código Java nativo
java [!&dirusr!] = System.getProperty("java.version"); //versión de java
java [!&dirusr!] = System.getProperty("os.version", "unknown"); //versión del sistema operativo
java [!&dirusr!] = System.getProperty("os.name", "unknown"); //nombre del sistema operativo
java [!&dirusr!] = System.getProperty("os.arch", "unknown"); //arquitectura de sistema operativo
(32 o 64 bits)
java [!&dirusr!] = System.getProperty("user.dir", "unknown"); //directorio en el que está corriendo
el programa java.
java [!&dirusr!] = System.getProperty("user.name", "unknown"); //nombre de usuario logueado
java [!&dirusr!] = System.getProperty("user.home", "unknown"); //directorio por defecto del
usuario, C:\Documents and Settings\CPCGX
java [!&dirusr!] = System.getProperty("java.io.tmpdir"); //obtiene por ejemplo C:\Documents and
Settings\CPCGX\Configuración local\Temp
msg(&dirusr)
3
Conversión de Sistema para Ypacaraí
Java Win / Linux y Windows Guido Gaona
4
Conversión de Sistema para Ypacaraí
Java Win / Linux y Windows Guido Gaona
Event 'Seleccionar'3
&OkUser = 0
&PerRegCod=PerRegCod
return
EndEvent // 'Seleccionar'
Event Enter
&OkUser = 0
&PerRegCod=PerRegCod
return
EndEvent // Enter
Esto no es posible en los prompt creados por Genexus, se deberá por tanto crear
prompt de usuario para todos los casos necesarios si el cliente así lo pide y de
acuerdo a lo que resuelva la gerencia (CPC), esto es a confirmar.
24.En los wp con grillas y filtros, verificar si la grilla tiene datos de acuerdo
a los filtros, de lo contrario devolver el cursor al primer filtro (esto tampoco es
posible para los prompt de Genexus).
Event &PerCiuDsc.IsValid //último filtro en orden de tabulación. No debe ser combo
box.
refresh
EndEvent
Event grd_1.OnLineActivate
&CantReg = 0
for each line
&CantReg += 1
exit
endfor
if &CantReg = 0
msg('Sin datos según filtro')
&PerBarDsc.Setfocus() //primer filtro en orden de tabulación.
endif
EndEvent // grd_1.OnLineActivate
5
Conversión de Sistema para Ypacaraí
Java Win / Linux y Windows Guido Gaona
registra la salida del evento, favor, tome como ejemplo alguno que ya fue
corregido, como W CtbTr012.
28.Controlar en Procedimientos que imprimen en print block o Excel: poner
regla para pdf y adaptar los envíos a Excel (visto más abajo).
29.Reportes a PDF: debe hacerse sí o sí pues el report viewer usa dll que no nos
sirve en Linux, se logra agregando al classpath el jar iText.jar y a los reportes
en rules output_file("nombre.pdf", "PDF");
30.PDFReport.ini: para Linux se debe agregar en el cliente la línea:
Acrobat Location= /usr/lib/Adobe/Reader9/bin/acroread Donde el path debe
ser el lector PDF instalado.
También se puede especificar el directorio donde se depositarán los archivos
creados con la siguiente línea (tanto en Linux como en Windows):
OutputFileDirectory= /home/cpc/Documents/ReportesPDF
31.Reportes PDF tardan demasiado: los reportes PDF tardan en generarse en
aquellos donde se tienen tipos de letras no estándares (por decirlo así). Se debe
por tanto modificar todos los reportes que tengan este problema cambiando los
tipos de letras que causan esto. Con Arial y Arial Narrow por ejemplo corre
perfectamente, generalmente con todos los Fonts True Type. Uno que causa
esto es Arial Narrow Bold. Aún bajando el JDK a la versión 1.6 u11 no se
soluciona completamente, se reduce el tiempo de respuesta considerablemente
pero dejando de usar estos tipos de letras es la solución más óptima.
32.P GenAl011 y P GenAl011 son, numerador y liberador correctos:
reemplazar donde no sean estos los usados, como en TES por ejemplo que se
usan PCtlPr001 y PctlPr002.
33.Funciones exclusivas de VB: debe reemplazarlas por alguno para Java o
estándar.
(a) Variables globales: en Java también se tienen variables globales, para
lo que se deben tener las clases: initGlob (inicializa as variaveis globais),
varPut (carga la variable global) y varGet (recupera la variable global).
Estas clases las debe tener en el Model Target Path. En el menú principal
de cada módulo se debe inicializar con call('initGlob'), esto cerializa las
variables globales, las prepara.
los procedimientos consernientes a variables globales son:
■ P GenAc014: inicia variable global SISTEMA.
■ P GenDa012: obtiene variable global SISTEMA.
■ P GenDa003: obtiene variable global SISTEMA, llamado desde
PgenDa001.
■ P GenAc015: inicia variable global EMPRESA.
■ P GenAc016: inicia variable global USUARIO.
6
Conversión de Sistema para Ypacaraí
Java Win / Linux y Windows Guido Gaona
7
Conversión de Sistema para Ypacaraí
Java Win / Linux y Windows Guido Gaona
forma 4 >>
En P CtbDa004:
//Reemplazo por esto. GMGC
&i = 21 - &Totalnivel //donde &Totalnivel es el largo de &formato
34.Reportes Excel en Linux: los reportes que están envíando a Excel se deben
adaptar para que usen OpenOffice y así corran en Linux. Se debe agregar al
classpath el jar poi.jar.
Para este propósito, se crearon los procedimientos P GenAc018 y P
GenDa018, en GEN, que determinan la plataforma en que corre la aplicación.
Debe llamar a PgenAc018 en el menú principal del módulo para inicializar la
variable global PGenAc018.Call() //graba variable global PLATAFORMA. Puede tomar como
ejemplo algún reporte que ya fue adaptado, como por ejemplo R PerLs031:
PGenDa018.Call(&unix, &LOCATION)
&FileName = trim(&LOCATION) + 'MAEST_SOCIO.XLS'
&Hoja.UseAutomation = 0 //Esto hace que tome el poi.jar para OpenOffice.
&Hoja.Open(&FileName) //Donde &Hoja es del tipo ExcelDocument.
If &Hoja.ErrCode <> 0
msg(&Hoja.ErrDescription)
else
&Hoja.Clear()
&Fila =1
&Hoja.Cells(&Fila,1).Bold = 1
&Hoja.Cells(&Fila,1).Text = "Socio"
&Hoja.Cells(&Fila,2).Bold = 1
&Hoja.Cells(&Fila,2).Text = "Documento"
&Hoja.Cells(&Fila,3).Bold = 1
endif
for each order PerSocNro
&PerSexoAbreviado = substr(PerSocSexo, 1, 1)
if &PerSexoAbreviado = 'F'
8
Conversión de Sistema para Ypacaraí
Java Win / Linux y Windows Guido Gaona
&PerSexoSoc = 'FEMENINO'
else
&PerSexoSoc = 'MASCULINO'
endif
if &Output = 'XLS'
do 'GrabarDetXLS'
else
print P_Detalle
&CantReg += 1
endif
endfor
&Hoja.Save()
&Hoja.Close()
Sub 'GrabarDetXLS'
&Fila += 1
&Hoja.Cells(&Fila,1).Number = PerSocNro
&Hoja.Cells(&Fila,2).Number = PerSocNroDoc
EndSub
35.Reportes Excel en Linux (Plantilla): los reportes que están envíando a Excel
en base a una plantilla se deben adaptar para que usen OpenOffice y así corran
en Linux. Se debe agregar al classpath el jar poi.jar.
P AhrPr028:
PGenDa018.Call(&unix, &LOCATION)
if &unix = 'UNIX' //linux
&PthArc = trim(&LOCATION) + 'PLANTILLAS/AHRRECUPERARMONTOS'
else //windows
&PthArc = trim(&LOCATION) + 'PLANTILLAS\AHRRECUPERARMONTOS'
endif
&Plantilla.UseAutomation = 0 //para que use OpenOffice al generar.
&Plantilla.Template = &PthArc+'.XLT' //usamos la plantilla preformateada.
&Plantilla.Cells(2,2).Text = &infordate
&Plantilla.Cells(5,2).Number = &MonAV1
&Plantilla.Cells(6,2).Number = &MonAV5
&Plantilla.Save()
&Plantilla.Close()
endif
9
Conversión de Sistema para Ypacaraí
Java Win / Linux y Windows Guido Gaona
36.Reportes Word en Linux (Plantilla): los reportes que están envíando a Word
en base a una plantilla se deben adaptar para que usen OpenOffice y así corran
en Linux. Se debe agregar al classpath los jar unoil.jar, ridl.jar, juh.jar,
jurt.jar y sandbox.jar.
Se debe tener levantado el servidor del Ooo (para Windows, solo debe apuntar al
directorio correcto en Linux y en algunos casos no es necesario apuntar sino ejecutarlo
desde una consola):
> cd C:\Archivos de programa\OpenOffice.org 3\program
> soffice “-accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager"
-nologo -headless -nofirststartwizard
Cabe notar que aún no funciona usando de esta forma, sí con UseMSOffice = 1 que es
para Ms Office.
P AhrPr016:
PGenDa018.Call(&unix, &LOCATION)
if &unix = 'UNIX' //linux
&PthArc = trim(&LOCATION) + 'PLANTILLAS/CONTRATO PF'
else //windows
&PthArc = trim(&LOCATION) + 'PLANTILLAS\CONTRATO PF'
endif
&Plantilla.UseMSOffice = 0 //para que use OpenOffice al generar, donde &Plantilla es del tipo
WordDocument.
&Plantilla.Template = &PthArc+'.DOT' //usamos la plantilla preformateada.
&Pzo = Trim(Str(AhrCtaDiasPlazo,3,0))
//&WordDocument.Replace(OldText, NewText[, MatchCase [, MatchWholeWord]])
&Plantilla.Replace('[PLAZO]',&Pzo,0,0) //GMGC
&SocNro = Trim(Str(AhrCtaSocNro,6,0))
&Plantilla.Replace('[SOCIO NRO.]',&SocNro,0,0) //GMGC
&NroCon = Trim(Str(AhrCtaNroContrato,6,0))
&Plantilla.Replace('[CERTIFICADO NRO.]',&NroCon,0,0) //GMGC
10
Conversión de Sistema para Ypacaraí
Java Win / Linux y Windows Guido Gaona
Endfor
&Plantilla.Save()
&Plantilla.Close()
endif //si ocurre algún error.
37.W RecVe002: muy buen ejemplo para casos de grilla sin tabla base y las
validaciones correspondientes.
38.W SubVe002: es un buen ejemplo para resolver en aquellos programas donde
se utiliza F3 para llamar a una lista de selección pero que también se necesita
para seleccionar.
Event 'Prompt'3
do case
case cursor(&PerSocNro) or cursor(&PerSocNroDoc)
&PerSocNroDoc = NullValue(&PerSocNroDoc)
&PerSocNro = NullValue(&PerSocNro)
call(WPerPt024, &PerSocNro)
refresh
otherwise
do'selecc'
endcase
EndEvent
Event 'Seleccionar'
do'selecc'
EndEvent // 'Seleccionar'
Sub 'selecc'
if &Existe = 'S'
call(RSubLs007, 'SCR', &Socio, &PerNroDoc, ' ', ' ')
else
msg('No existe socio')
&PerSocNro.Setfocus()
endif
EndSub
11
Conversión de Sistema para Ypacaraí
Java Win / Linux y Windows Guido Gaona
12