You are on page 1of 5

Archivos Planos con XML Publisher

En est nueva entrada vamos estudiar la forma de generar archivos planos utilizando XML Publisher y sin necesidad de crear objetos por el app designer ni de escribir cdigo. Para poder poner en prctica la informacin que vamos a generar en est entrada, es necesario tener conocimientos bsicos de XML y del Gestor de Consultas de PEOPLESOFT. Las plantillas XML Publisher que nos permiten generar archivos planos son las plantillas eText. Estas plantillas son creadas en MS WORD y son formato RTF igual que las que se usan normalmente para generar los reportes en PDF. La diferencia de ests plantillas con las plantillas normales es la estructura que se debe definir. Para el ejercicio de generacin de plantillas eText de esta entrada vamos a utilizar la consulta conectada que creamos en la entrada anterior. Al igual que para una plantilla XML Publisher normal, lo primero que tenemos que tener para desarrollar nuestra plantilla es la estructura XML sobre la cual vamos a trabajar. Para nuestro ejemplo la estructura ser la siguiente: Estructura XML. Est estructura se descarga desde la consulta conectada. .

Luego de definir la estructura XML definimos que tipo de plantilla vamos a generar. Generalmente los archivos planos se pueden generar: de longitud fija o delimitados.

Para

definir

una plantilla eText de longitud fija utilizamos

el siguiente encabezado:

La propiedad <TEMPLATE TYPE> define que queremos un archivo plano de longitud fija o delimitado. Para un archivo plano delimitado la cabecera que se debe utilizar es la siguiente:

Luego de definir las propiedades generales de la plantilla, se procede a definir los datos que se van a generar dentro del archivo plano. Para lo anterior debemos definir las siguientes propiedades. 1. Definir el nivel dentro del XML del cual vamos a extraer la informacin. En nuestro caso el archivo plano debe tener un primer tipo de fila que contenga los datos del rol. Estos datos se deben

tomar de la ruta ConnectedQuery/PE_CQ_ROLES. Con este dato definimos la propiedad <LEVEL> (Esto aplica tanto para los archivos delimitado como para los de longitud fija.) Luego de definir el nivel se definen las propiedades de cada uno de los datos que se incluirn en el archivo y dentro del nivel que estamos configurando. Para un archivo de longitud fija se deben definir las siguientes propiedades: <POSITION>Indica a partir de que posicin se empezar a escribir el dato dentro de la fila que se est generando <LENGTH>Indica la longitud que va a tener el campo dentro de la fila que se est generando <FORMAT>Define el formato del campo. Las opciones son NUMBER, ALPHA y DATE <PAD>Indica el carcter con el cual se debe rellenar el campo para completar la longitud total del campo. Por ejemplo si queremos rellenar el campo con espacios a la derecha est propiedad debe ser R, ' ', si deseamos llenar el campo con ceros a la izquierda el valor debe ser L, '0' <DATA>Indica el elemento xml del cual se extraer la informacin. Dentro de este campo se pueden usar funciones como condicionales y funciones XPATH que permitan extraer informacin de niveles diferentes al que se est trabajando. <COMMENTS>Comentarios que no afectarn en nada la generacin del archivo. En nuestro ejemplo para una plantilla de longitud fija est seccin para los roles debe lucir de la siguiente forma:

Dentro de una plantilla delimitada la propiedades a definir para cada uno de los campos que formaran una fila del archivo plano <MAXIMUM LENGTH>Mxima longitud que podr tener el campo <FORMAT>Define el formato del campo. Las opciones son NUMBER, ALPHA y DATE <DATA>Indica el elemento xml del cual se extraer la informacin. Dentro de este campo se pueden usar funciones como condicionales y funciones XPATH que permitan extraer informacin de niveles diferentes al que se est trabajando. <COMMENTS>Comentarios que no afectarn en nada la generacin del archivo.

En nuestro ejemplo est seccin para los roles debe lucir de la siguiente forma:

Longitud

Fija

Delimitada

Cada vez que inicializamos una seccin <LEVEL> debemos terminar esa seccin con un <END LEVEL> en nuestro caso no hemos puesto an el <END LEVEL> debido a que los roles tienen dos secciones hijas: Usuarios y Listas de Permiso, entonces para lograr este comportamiento lo que hacemos es anidar otras secciones <LEVEL> antes de cerrar la que pertenece a los roles.

Para anidar el <LEVEL> que nos mostrar los usuarios, debemos agregar una seccin igual a la anterior pero en el campo <LEVEL> asociamos el nodo XML que pertenece a los usuarios, y adicionalmente agregamos en <END LEVEL> ya que los usuarios no tienen ningn otro nivel anidado. La seccin de usuarios quedara de la siguiente forma:

Longitud

Fija

Delimitada

De

la

misma

forma

la

seccin

para

las

listas

de

permisos

quedara

asi:

Longitud

Delimitada

Listo, por ltimo agregamos el <END LEVEL> de nuestra seccin de roles y con esto finalizamos nuestra plantilla;

Longitud Fija

Delimitada

Las plantillas completas las podemos descargar de los siguientes enlaces: Longitud Fija y Delimitada

2. El siguiente paso es crear la definicin del informe. Podemos utilizar el mismo origen de datos que utilizamos en la entrada anterior. El tipo de plantilla que debemos seleccionar es eTexto.

3. Por ltimo podemos ejecutar nuestro reporte por la ruta Inicio > Herramientas de Informes > XML Publisher > Gestor de Informes de Consulta. Al ejecutarlo debemos seleccionar en formato "Texto" para que genere nuestro archivo plano. Este proceso tiene un bug al momento de ejecutar un reporte que genera un archivo plano mediante una plantilla eText. Para corregir este bug se debe reemplazar el siguiente cdigo que se encuentra en en app engine PSXPQRYRPT en la seccin MAIN en el paso ExecRpt:

&oRptDefn.ProcessReport(&TemplateId, &LanguageCd, &oRptDefn.GetOutDestFormatString(&OutDestFormat)); Por el siguiente:

&AsOfDate,

/*INICIO CHGA #001 */ If &oRptDefn.TemplateType = "ETX" Then REM Local File &fileCSV; REM &fileCSV = GetFile(&ReportName | String(&ProcessInstance) | ".txt", "w", "UTF-8", %FilePath_Relative); REM &fileCSV.WriteString(&oRptDefn.ProcessETextReport(&T emplateId, %Language_User, %Date)); &oRptDefn.ProcessReport(&TemplateId, &LanguageCd, &AsOfDate, "TXT"); Else /*FIN CHGA #001 */ &oRptDefn.ProcessReport(&TemplateId, &LanguageCd, &oRptDefn.GetOutDestFormatString(&OutDestFormat)); End-If; &AsOfDate,

Y listo con esto hemos creado un archivo plano utilizando las herramientas que el XML Publisher nos suministra, sin necesidad de escribir cdigo