lunes, 26 de marzo de 2018

PeopleTools - Navegador de Archivos en el Application Server

Más de una vez, he requerido de generar archivos de trace o revisar cargas que haya realizado en el servidor de aplicación (Application Server) o incluso revisar si mis archivos fueron creados correctamente.

Para no tener que depender del sysadmin, y estar solicitando que ten envíen archivos o revisar si se crearon correctamente o etc.. etc.. hice esta página para poder accesar y descargar o revisar los archivos que necesito del servidor de aplicación.

Alguna vez recuerdo haber encontrado uno pero ya por más que lo busqué ... quedó perdido en algún lugar. Así que mejor generé el mío y que ahora comparto aquí.


Tan solo necesité crear
- 1 Menú
- 1 Componente
- 1 Página
- 1 Registro (tabla) y 1 Registro Derivado
- Algunas líneas de PeopleCode y listo ....

Ahora voy explicando

Este es mi record derived


El capo FILE_PATH_NAME lo utilizo para guardar y mostrar la ruta actual en la que se encuentra, es básica ya que es la que ocupo para saber dónde buscar los archivos.

El campo URL lo utilizo para especificar el nombre de la URL de algún sitio de FTP que tenga disponible. Cuando descargo los archivos no los puedo abrir directamente desde su ubicación, eso debido a temas de seguridad. Quizá en un ambiente windows pudiera funcionar con el protocolo FILE:// , pero para Linux no me funcionó.

Así que la utilizo para copiar temporalmente el archivo y desde ahí es donde llamo el VIEWATTACHMENT.

El campo VARIABLE_ENV, es un Drop List Box y tiene translates con algunas variables de ambiente (las que pude recordar.. jejeje) ustedes podrán agregar las que requieran. Lo utilizo para cambiar el FILE_PATH_NAME a ubicaciones ya predefinidas.

Después, mi Record principal


El campo ID_SEQ_ITEM lo utilizo para numerar los archivos ... al final ya no le encontré gran utilidad, pero si a ustedes les sirve lo pueden volver a mostrar.

ATTACHSYSFILENAME lo utilizo para guardar la ruta completa y nombre de archivo, es de ahí donde tomo la información para abrir los archivos

ATTACHUSERFILE es el campo que en realidad se muestra, es como que únicamente el nombre del archivo.

Ahora mi página:


Aquí están los campos que les comenté, solo hay un Rowset, que trabaja con el Record (que si bien es una tabla, pero núnca guarda datos)

El ATTACHUSERFILE es un botón de tipo Link

La distribución de la página:



El activate de mi Página


Que sirve para inicializar los valores y la primera vista de archivos

Mi componente:


Y sus propiedades



Si observan, el SearchRecord es el de INSTALLATION, que para lo único que me sirve es para entrar, para brincarme el search natural de People.

También tengo desactivados todos los botones del Toolbar.

Existe código en el PostBuild del componente:


Intento aquí definir el caracter para las rutas (Windows o Linux) pero está más preparado para Linux, para Windows habrá que hacer más ajustes.

El SavePostChange del Componente


Que para lo que sirve es volver a cargar los datos con la nueva ruta que se haya modificado. Esto lo hice así ya que lo que desencadena el cambiar de directorio es cuando se da clic en el nivel 1, pero estando parado sobre ese nivel no podría limpiarlo o volverlo a cargar, ya que PeopleTools no lo permite, así que cuando la dirección cambia, tan solo genero un DoSaveNow () y con este código en el SavePostChange toma el cambio en la Ruta actual y refresca el detalle.


El código en mi Record principal, solo tiene el evento de FieldChange y código en el FieldFormula

El código del FieldChange es el que tiene el control para cambiar de directorios o descargar los archivos


Uso algo de Java para poder definir si es una carpeta o no, y en base a eso cambio la ruta y refresco o descargo el archivo.


Aquí está la función que mando llamar de varios lados, que es la que llena el Rowset con el listado de los archivos.

El código en mi derived


Es el que actualiza mi ruta si se selecciona alguna de las variables de ambiente predefinidas.

Y bueno, así es como se ve la página
Dando clic en los links de abajo, se va navegando en los diferentes directorios y niveles. Para subir de nivel es el que tiene los dos puntos seguidos  ( /.. )

Y bueno, eso en general es todo. Está sencillo relativamente, creo que si se ponen creativos podrían hacer bastantes mejoras.

Aquí el proyecto para descargar

Sugiero precaución en su uso, y dar solo permisos a quienes tengan conocimiento técnico.

Si bien, así como está no puede borrar ningún arhivo o modificarlo, pero tiene el potencial para realizar muchas cosas.

Y bueno... espero les sirva.


jueves, 1 de marzo de 2018

Gestor de Consultas (Query Manager) Usar un subquery como campo de selección


Usando las PeopleTools 8.53 ya no te permite agregar un campo proveniente de un subquery (recuerdo que en alguna versión anterior se podía ... pero quizá es ya estoy viejito y ya no me acuerdo... jajaja).

En específico, detecta la palabra FROM y no te  permite añadirlo.

Así que para lograr eso, seguir estos pasos:


1. Crear un objeto SQL desde el Designer. En este objeto tendrás tu subquery que quieres utilizar como campo en tu consulta, teniendo el cuidado de realizar las referencias adecuadas a tu query principal. Ejemplo (Objeto  SQL_TEST:
     

Estoy usando este texto:

(  SELECT 'HOLA' || A.EXCHNG_TO_CURRENCY %P(1)%TextIn(o)m dual )

Para los metadatos es importante respetar mayúsculas y minúsculas tal y cual está

 2. Creamos nuestra consulta desde el aplicativo (muy simple en mi caso, solo para el ejemplo)

3. Añadimos una expresión a la consulta (con la longitud y tipo necesario a tu resultado)


En esta expresión hago referencia al SQL que previamente construí (SQL_TEST). El texto es este:

%SQL(SQL_TEST,Fr )

Es indispensable que las letras  Fr se encuentren en mayúsuclas y minúsculas, tal y como está en el ejemplo.

En el objeto SQL que creamos, tiene estos metadatos:

%P(1)%TextIn(o)m

Lo que estamos esperando que haga es que sustituya el %P(1) por Fr el %TestIn(o) es fijo, insertará la letra "o" y la última m la pone al final, obteniendo la palabra: From

4. Esa expresión le damos al botón de "Usar como Campo"

5. Nuestros campos se deben de ver así:


6. Si vemos nuestro SQL observamos que ya se encuentra el subquery:


7. Listo!! Podemos ver el resultado








Translate