Tabla de Contenidos

Fábrica - Modelos Logs - Log de Cargas de Procesos (Archivos)

Este es el log utilizado para registrar las notificaciones que puedan presentar en los procesos de cargas de información.

Tipos de Notificaciones

A continuación se listan los tipos de notificaciones que deben ser considerados en el log de Cargas

¿Donde usar el Servicio?

Este servicio debe consumirse en los procesos de cargas de:

Nota: Aplicaciones Powerbuilder

Powerbuilder tiene restricciones para el consumo de servicios Rest por lo tanto en las aplicaciones de esta tecnología se implementará un API para realizar las llamadas.

Diccionario de Datos

OWNER SICOF TABLE FILE_UPLOAD_LOG COMMENTS Contiene el log de cargas de archivos o procesos de las aplicaciones de la compañia
# NAME NULL TYPE COMMENTS WS1)
1IDNNUMBERCódigo interno del registro (Se controla por secuencia)Interno, Autoincremental
2FECHAYDATEFecha en la cuál se genera la cargaNo utilizado
3NOMBRE_ARCHIVOYVARCHAR2(256)Mensaje simple del error (Resumen)Externo, Requerido
4NOMBRE_PROCESOYVARCHAR2(256)Nombre del proceso que realiza la cargaExterno, Requerido
5NUMERO_LINEAYNUMBERNúmero de linea del archivo donde se genera la notificaciónExterno, Requerido
6COLUMNA_GRUPOYVARCHAR2(1024)Columna o grupo de colunas que generan la notificaciónObsoleto, Externo
7NOTIFICACIONYVARCHAR2(2048)Mensaje de notificaciónObsoleto, Externo
8LOG_LINEANCLOBArray Json que contiene las notificaciones generadas en la lineaExterno, Requerido
8HOST_CLIENTEYVARCHAR2(50)Host del cliente (Dirección IP)Externo, Requerido
9FECHA_REGISTROYDATEFecha del sistema DBInterno, Formato dd/mm/yyyy hh:mm:ss, Requerido
10CODIGO_USUARIOYNUMBERCódigo del usuario de la sesión en la cuál se genera el errorExterno, Requerido
11CODIGO_MEMPRESAYVARCHAR2(64)Código de la empresa de la sesión en la cuál se genera el errorExterno, Requerido
12CODIGO_APLICACIONYNUMBERCódigo de la aplicación (Identificador interno numérico)Externo, Requerido
13INFO_APPYVARCHAR2(256)Información de la aplicación (En las situaciónes donde no se identifique código interno se puede enviar el nombre de la aplicación o información adicional)Externo
14SESSION_MACYVARCHAR2(64)MAC del equipo del usuarioExterno
15SESSION_BROWSERVERSIONYVARCHAR2(64)Versión del NavegadorExterno, Requerido
16SESSION_OSTYPEYVARCHAR2(64)Sistema OperativoExterno, Requerido

Columna: WS

Se adiciona esta columna para identificar reglas asociadas a la implementación de los servicios web que permiten gestionar el almacenamiento de los logs. La columna es una referencia y no hace parte del servicio sin embargo las reglas que se definen en ella si aplican para la columna relacionada:

Reglas

Nota

Columna: LOG_LINEA

Esta columna sirve para almacenar todas la notificaciones que se pueden presentar al procesar una linea del archivo de la carga. Se define la siguiente estructura base ejemplo:

{
  "columns":[
    {
      "column_name":"Requerido: Nombre de la columna",
      "column_value": "Requerido: Valor de la columna",
      "column_notifications":
        [
          {"msg":"Requerido: Mensaje de Notificación 1"},
          {"msg":"Requerido: Mensaje de Notificación 2"},
          {"msg":"Requerido: Mensaje de Notificación N"}
        ]
    }
  ]
}

Donde:

Ejemplo:

{
  "columns":[
    {
      "column_name":"fecha_sistema",
      "column_value": "01/01/20",
      "column_notifications":
        [
          {"msg":"El año de la fecha es menor a la vigencia actual"},
          {"msg":"La fecha no tiene el formato dd/mm/yyyy"}
        ]
    }
  ]
}

Notas

Modo de uso: Powerbuilder - Documentación

Para visualizar la documentación debe descargar el siguiente repositorio Documentación, abrir la pagina Index.html en su navegador web la cual es similar a la siguiente imagen:

En ella encontrará la documentación de las librerias que hacen parte del framework Objetos SICOF el cuál se irá actualizando frecuentmente a medida que se documenten las clases.

La Libreria que contiene la funcionalidad de los logs es la librería sf00util.pbl

Los Objetos relacionados en el API son:

Ejemplos de Uso

Para facilitar la implementación y uso del API de gestión de log de cargas se crea un objeto interno privado en la clase global guo_app el cual puede ser accedido por el método of_log_file_upload() que devuelve la instancia del objeto. Sin embargo para implementaciones específicas se puede optar por crear y administrar la clase n_cst_log_file_upload según considere el desarrollador.

A continuación se listan ejemplos de uso el cuál presenta las forma de utilizar el API, para más información debe consultar la documentación en el repositorio.

/*Ejemplos de uso utilizando la instancia genérica de la clase guo_app*/
guo_app.of_log_file_upload( ).of_set_process_header(f_hoy(), "carga_prueba.txt", "Carga de Terceros")
guo_app.of_log_file_upload( ).of_add_log(10, "codigo_tercero", "columna nula", true, SQLCA)
guo_app.of_log_file_upload( ).of_add_log(f_hoy(), "carga_prueba.txt", "Carga de Terceros", 10, "codigo_tercero", "columna nula", true, SQLCA)
guo_app.of_log_file_upload( ).of_add_log(f_hoy(), "carga_prueba.txt", "Carga de Terceros", 10, ljson, true, SQLCA)
 
/*Ejemplo de uso definiendo la clase*/
n_cst_log_file_upload luo_log_file_upload
luo_log_file_upload= Create n_cst_log_file_upload 
luo_log_file_upload.of_add_log(f_hoy(), "carga_prueba.txt", "Carga de Terceros", 10, ljson, true, SQLCA)
destroy luo_log_file_upload
Consideraciones

API Json

Se adicionan métodos de procesamiento de bloques en formato json los cuales pueden ser utilizados para registrar trazas de error a continuación se muestran ejemplos de uso del API.

sailjson ljson, ljson1 
String ls_content
 
ljson = create sailjson
ljson.setattribute( 'version', '1001')
//add json object
ljson1 = ljson.addobject( 'header')
ljson1.setattribute( 'count', 3)
ljson1.setattribute( 'comment', 'items count')
 
//add json object array, first item
ljson1 = ljson.addarrayitem( 'data')
ljson1.setattribute( 'colid', 1)
ljson1.setattribute( 'colname', 'aaaaaa')
ljson1.setattribute( 'coladdr', '')
//add second item of the array
ljson1 = ljson.addarrayitem( 'data')
ljson1.setattribute( 'colid', 2)
ljson1.setattribute( 'colname', 'bbbbbbbb')
setnull(ls)
ljson1.setattribute( 'coladdr', ls)
//add third item of the array
ljson1 = ljson.addarrayitem( 'data')
ljson1.setattribute( 'colid', 3)
ljson1.setattribute( 'colname', 'cccccc')
 
ljson.setattribute( 'creattime', string(now(), 'yyyymmdd.hhmmss'))
 
ls_content =  ljson.getformatjson('' )
destroy ljson
Limitaciones

Se identifica que actualmente la versión de Appeon (2013/2016) presenta problemas con el procesamiento del API Json para estructuras complejas como Arrays por esta razon cada procesamiento del API debe ser realizado a un solo nivel de complejidad. A continuacion se muestra un ejemplo de uso funcional en Appeon/Powerbuilder que puede ser tomado como referencia.

/*PASO 1: Definir un objeto de la clase sailjson en la zona de instancia del componente donde se va utilizar el API como una ventana, objeto no visual, etc*/
sailjson iuo_json
/*PASO 2: Incializar el objeto iuo_json antes de utilizarlo*/
iuo_json= create sailjson
/*
PASO 3: No es obligatorio, pero se recomienda crear un método local de asignación para simplificar el proceso como ejemplo se define metodo of_add_log_file_upload con los siguientes argumentos
Integer ai_indx
String as_column_name
String as_column_value
String as_column_notifications[]
*/
 
//Validaciones previas de control
if IsNull(ai_indx) then ai_indx = 0
if IsNull(as_column_name) then return
if IsNull(as_column_value) then as_column_value = ""
if IsNull(as_column_notifications) then return
if UpperBound(as_column_notifications) = 0 then return
 
//Registrar las propiedades de la notificación con el indice
iuo_json.setattribute("column" + String(ai_indx) + "_name", as_column_name)
iuo_json.setattribute("column" + String(ai_indx) + "_value", as_column_value)
 
//Registrar los mensajes de notificación con los indices
Integer li_i, li_count
String ls_msg
li_count = UpperBound(as_column_notifications)
for li_i = 1 to li_count
  ls_msg = as_column_notifications[li_i]
  iuo_json.setattribute("column" + String(ai_indx) + "_notifications" + String(li_i), ls_msg)
next
//En el metodo donde se gestionan las notificaciones se consume el API Log de Cargas con traza en formato json, se recomienda utilizar una transacción diferente a la del proceso para que se pueda almacenar la notificación
guo_app.of_log_file_upload( ).of_add_log(f_hoy(), "carga_prueba.txt", "Carga de Terceros", 10, iuo_json, true, SQLCA)
 
//Por último se debe reiniciar el componente para otro proceso
iuo_json = Create sailjson
//Invocar el método local of_add_log_file_upload 
of_add_log_file_upload (1, 'codigo_tercero', '', ls_notificaciones)

Modo de uso: Java

Para las aplicaciones desarrolladas en las tecnologías (Web):

el log de sesión será implementado por medio de un Servicio Web el cual deberá considerar las reglas de Columna: WS

←Volver atras

1)
Define las reglas que debe aplicar el Web Service