Calculo de Fecha Driver XA con SPL Timestamp y/o D
Posted in 2007
Holas,
Tengo un problema en una aplicación desarrollada en Java que corre con
WebLogic 8.1 y utiliza JDBC Driver XA 2.21.JC4, en una parte de la
transacción que engloba a dos bases de datos, esta invoca a un SPL que corre
en IDS 7.31.FD7X7 para realizar un calculo de fecha, el cual lo calcula de
manera errónea para el aplicativo.
El aplicativo en Java envía como parámetro la fecha en formato TimeStamp o
String (de las dos formas he probado), se utiliza timestamp por que en el
SPL la variable que lo recibe es DATETIME, claro la idea es cambiar el SPL
pero este es utilizado por varias aplicaciones y el cambio podría afectar.
FechaBean fecha=new FechaBean();
fecha.setFecha(fecha.getFormatDate("dd/MM/yyyy HH:mm:ss"),"dd/MM/yyyy
HH:mm:ss"); datos.put("fec_con", fecha.getTimestamp());
y al llamar al SPL lo hemos probado pasándolo como timestamp es decir
haciendo:
fecha.getTimestamp() //EJEMPLO EN REALIDAD SE JALA EL DATO DEL MAPA CON KEY
FEC_CON
COMO SE SABE EL TIMESTAMP TE DEVUELVE EL FORMATO YYYY-MM-DD HH:MM:SS
y también como cadena así:
FechaBean fecha=new FechaBean((Timestamp)hmDatos.get("fec_con"));
String fechaOperacion=fecha.getFormatDate("yyyy-MM-dd HH:mm:ss");
El SPL recibe correctamente la fecha que se pasa tanto como cadena o
Timestamp desde Java llega correctamente al SPL ccs01_registra_ope, a
continuación la secuencia del calculo de la fecha y donde es la falla:
1. Primero se llama a un SPL ccs01_det_fec_lim
AQUÍ LO QUE SE MUESTRA EN EL LOG DEL SPL PARA ESA PARTE execute procedure
mansirat.ccs01_det_fec_lim ( ec_num_ruc = 20131257750, ed_fec_ope =
2007-03-30 16:27:44) //LA FECHA LLEGO CORRECTAMENTE
2. Y en la línea de este SPL se obtiene el formato que espera el SPL LET
ld_fec_aux = DATE(ed_fec_ope); //AQUI SE OBTIENE EL FORMATO CORRECTO DE LA
FECHA MM/DD/YYYY
SE MUESTRA EN EL LOGO LO SIGUIENTE:
expression:(date ed_fec_ope) evaluates to 03/30/2007 let ld_fec_aux =
03/30/2007
3. Para luego pasar esta variable ld_fec_aux al SPL sgs33_suma_dias_ha la
cual llega correctamente según se muestra en el log del SPL
execute procedure mansirat.sgs33_suma_dias_ha ( wfecini = 03/30/2007, wdias
= 2, wdpto = NULL.)
Posteriormente en este SPL se realiza la siguiente asignación:
LET wfecfin = wfecini; //ES AQUI DONDE SE PRODUCE EL PROBLEMA OBTENIENDO UN
FORMATO DE FECHA QUE EL SPL NO ESPERA "YYYY-MM-DD"
SE MUESTRA EN EL LOG LO SIGUIENTE:
expression:(date wfecini)
evaluates to 2007-03-30
let wfecfin = 2007-03-30 // cuando deberia ser 03/30/2007.
He utilizado la variable DBDATE=MDY4/ para tratar de formatear la fecha pero
no he tenido resultados positivos, la pregunta es como puedo setear esta
variable en la confiiguracion del pool de conexiones ya que en los manuales
no me dicen nada de esto, lo he seteado a nivel de la cuenta .profile y en
el /etc/profile del UNIX del server de BD y nada.
Si tienen algunas otras ideas que me puedan servir de ayuda, se los
agradecería es posible que alguno de ustedes haya pasado por esto.
Saludos,
José Luís Renteria P.
División de Soporte Técnico
SUNAT
511-4112230 / 10508
jrenteri@sunat.gob.pe <mailto:jrenteri@sunat.gob.pe>