Herramientas de usuario

Herramientas del sitio


ada:howto:sicoferp:factory:logmodels:fileuploadlog

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Próxima revisión
Revisión previa
ada:howto:sicoferp:factory:logmodels:fileuploadlog [2021/07/09 19:06]
192.168.177.6 creado
ada:howto:sicoferp:factory:logmodels:fileuploadlog [2021/09/21 13:09] (actual)
administraidor
Línea 16: Línea 16:
   * Aplicaciones .Net   * Aplicaciones .Net
   * Web Service   * Web Service
 +  * Aplicaciones Móbiles
 +  * Aplicaciones Powerbuilder ([[#Nota: Aplicaciones Powerbuilder|Ver Nota siguiente]])
   * Soluciones que afecten los productos SICOF   * Soluciones que afecten los productos SICOF
  
Línea 22: Línea 24:
  
 ===== Diccionario de Datos ===== ===== Diccionario de Datos =====
-^OWNER |SICOF ^TABLE |MOV_LOG_ERRORES ​^COMMENTS |Contiene el registro ​de errores genrados en los procesos de las aplicaciones ​SICOF +^OWNER |SICOF ^TABLE |FILE_UPLOAD_LOG ​^COMMENTS |Contiene el log de cargas de archivos o procesos de las aplicaciones ​de la compañia ​
-^# ^NAME ^NULLEABLE ​^TYPE ^COMMENTS ^^   +^# ^NAME ^NULL ^TYPE ^COMMENTS ^WS((Define las reglas que debe aplicar el Web Service)) ​^   
-|1|CODIGO_INTERNO|N|NUMBER(38,0)|Identificador ​interno del registro (autoincrementado ​por secuencia)|| +|1|ID|N|NUMBER|Código ​interno del registro (Se controla ​por secuencia)|Interno, Autoincremental
-|2|COD_ORA_ERROR|Y|NUMBER|Código del error (Puede usuarse para errores del manejador de base de datos pero el campo es multiproposito)|| +|2|FECHA|Y|DATE|Fecha en la cuál se genera la carga|No utilizado
-|3|MSJ_ORA_ERROR|Y|VARCHAR2(1024)|Mensaje simple del error (Resumen)|| +|3|NOMBRE_ARCHIVO|Y|VARCHAR2(256)|Mensaje simple del error (Resumen)|Externo, Requerido
-|4|NOM_PROCEDIMIENTO|Y|VARCHAR2(128)|Nombre del métodoprocedimiento,​ claseo contexto de ejecución local donde se genera el error|+|4|NOMBRE_PROCESO|Y|VARCHAR2(256)|Nombre del proceso que realiza la carga|ExternoRequerido
-|5|FECHA|Y|DATE|Fecha en la cuál se genera ​el error|| +|5|NUMERO_LINEA|Y|NUMBER|Número de linea del archivo donde se genera ​la notificación|Externo, Requerido
-|6|USUARIO_BD|Y|VARCHAR2(32)|Usuario de conexión ​de la base de datos|| +|6|COLUMNA_GRUPO|Y|VARCHAR2(1024)|Columna o grupo de colunas que generan ​la notificación|Obsoleto, Externo
-|7|OBSERVACION|Y|VARCHAR2(2048)|Mensaje ​extendido del error (Detalle)|| +|7|NOTIFICACION|Y|VARCHAR2(2048)|Mensaje ​de notificación|Obsoleto, Externo| 
-|8|HOST_CLIENTE|Y|VARCHAR2(50)|Host del cliente (Dirección IP)| +|8|LOG_LINEA|N|CLOB|Array Json que contiene las notificaciones generadas en la linea|Externo,​ Requerido
-|9|FECHA_REGISTRO|Y|DATE|Fecha del sistema DB|| +|8|HOST_CLIENTE|Y|VARCHAR2(50)|Host del cliente (Dirección IP)|Externo, Requerido
-|10|CODIGO_USUARIO|Y|NUMBER|Código del usuario de la sesión en la cuál se genera el error|| +|9|FECHA_REGISTRO|Y|DATE|Fecha del sistema DB|Interno, Formato dd/mm/yyyy hh:mm:ss, Requerido
-|11|CODIGO_MEMPRESA|Y|VARCHAR2(64)|Código de la empresa de la sesión en la cuál se genera el error|| +|10|CODIGO_USUARIO|Y|NUMBER|Código del usuario de la sesión en la cuál se genera el error|Externo, Requerido
-|12|CODIGO_APLICACION|Y|NUMBER|Código de la aplicación (Identificador interno numérico)|| +|11|CODIGO_MEMPRESA|Y|VARCHAR2(64)|Código de la empresa de la sesión en la cuál se genera el error|Externo, Requerido
-|13|INFO_APP|Y|VARCHAR2(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)|| +|12|CODIGO_APLICACION|Y|NUMBER|Código de la aplicación (Identificador interno numérico)|Externo, Requerido
-|14|SESSION_MAC|Y|VARCHAR2(64)|MAC del equipo del usuario|| +|13|INFO_APP|Y|VARCHAR2(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
-|15|SESSION_BROWSERVERSION|Y|VARCHAR2(64)|Versión del Navegador|| +|14|SESSION_MAC|Y|VARCHAR2(64)|MAC del equipo del usuario|Externo
-|16|SESSION_OSTYPE|Y|VARCHAR2(64)|Sistema Operativo|+|15|SESSION_BROWSERVERSION|Y|VARCHAR2(64)|Versión del Navegador|Externo, Requerido
-|17|ERROR_LOG|Y|CLOB|Utilizada solo para casos especiales donde sea necesaria registrar información amplia del error|| +|16|SESSION_OSTYPE|Y|VARCHAR2(64)|Sistema Operativo|ExternoRequerido|
-|18|ERROR_TYPE|Y|VARCHAR2(64)|Tipo del error (LEVEMODERADO, CRITICO por defecto)||+
  
-==== Modo de usoPowerbuilder (Próximamente) ​==== +==== ColumnaWS  ​==== 
-[[#NotaAplicaciones Powerbuilder|Ver Nota]]+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:
  
-==== Modo de uso: Java (Próximamente) ==== +=== Reglas === 
-Para las aplicaciones desarrolladas en la tecnología ​Java el log de sesión será implementado por medio de un servicio web.+ 
 +  * **Interno**:​ Indica que el campo se gestiona dentro del servicio y por lo tanto no se pedira en los parametros. 
 +  * **Autoincremental**:​ Indica que el campo se comporta como una secuencia. 
 +  * **Externo**:​ Indica que el campo debe estar en los parametros del consumo. 
 +  * **Requerido**:​ Indica que el campo debe ser enviado en el consumo y el servicio debe validarlo para continuar. 
 +  * **Obsoleto**:​ Indica que el campo ya no es utilizado en la nueva implementación. 
 +  * **No utilizado**:​ Indica que el campo no será utilizado en ninguna implementación. 
 + 
 +=== Nota === 
 +  * Todas las operaciones del servicio que gestiona la persistencia de la tabla deben estar documentadas incluyendo la definición de los campos, formatos, longitudes de columnas e indicar si es requerido o no. 
 + 
 +==== 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: 
 + 
 +<code yaml> 
 +
 +  "​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"} 
 +        ] 
 +    } 
 +  ] 
 +
 +</​code>​ 
 + 
 +Donde: 
 + 
 +  * **columns**:​ Arrya de Columnas del archivo de carga 
 +  * **column_name**:​ Propiedad contenida en cada indice del array json que representa el nombre de la columna analizada del proceso de carga. 
 +  * **column_value**:​ Propiedad contenida en cada indice del array json que representa el valor de la columna analizada del proceso de carga. 
 +  * **column_notifications**:​ Propiedad contenida en cada indice del array json que representa el array de notificaciones de la columna analizada del proceso de carga. 
 +  * **msg**: Propiedad contenida en cada indice de column_notifications de la columna analizada del proceso de carga. 
 + 
 +Ejemplo: 
 + 
 +<code yaml> 
 +
 +  "​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"​} 
 +        ] 
 +    } 
 +  ] 
 +
 +</​code>​ 
 + 
 +=== Notas === 
 +  * Los valores de las columnas deben ser registrados como String 
 + 
 +==== Modo de uso: Powerbuilder - Documentación ==== 
 +Para visualizar la documentación debe descargar el siguiente repositorio [[http://​adacsc.co:​1443/​svn/​repository/​ADA/​SICOF/​Objetos%20SICOF/​FUENTES/​branches/​branches%2012.5.2.5.0/​doc/​documentacion|Documentación]],​ abrir la pagina Index.html en su navegador web la cual es similar a la siguiente imagen: 
 + 
 +{{ :​ada:​howto:​sicoferp:​factory:​logmodels:​pbdoc_objetos_sicof.png?​600 |}} 
 + 
 +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: 
 + 
 +  * **n_cst_app**:​ Clase contenedora de objetos logs 
 +  * **n_cst_log_file_upload**:​ Clase para la gestión de log de cargas 
 + 
 +=== 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. 
 + 
 +<code java> 
 +/*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 
 +</​code>​ 
 + 
 +== Consideraciones == 
 +  * El API puede ser activada o desactivada por medio de la constante: **LOG_UPLOAD_FILE** (Solo en aplicaciones SICOF ERP (Appeon/​Powerbuilder)) siempre y cuando se utilice la implementación de la clase **guo_app**. 
 +  * El desarrollador es el encargado de gestionar la transacción que realiza la persistencia. 
 +  * Para el procesamiento de logs de bloques se implementa Clase sailjson para procesamiento de cadenas de texto en ese formato. 
 +  * Cada módulo (Contabilidad,​ Prespuesto, Tesorería, Compras, Talento y Nómina) debe implementar el método de inicialización **of_init_logs(SQLCA)** en el método **of_process_step_init_transaction** de la clase **guo_app** especializada por cada módulo. A continuación se muestra una imagen de referencia de la implementación del módulo de presupuesto. Utilice esta guía para implementaciones en otros módulos teniendo presente que la clase **n_cst_app** se especializa con el nombre de la aplicación que la contiene. Ejemplo: en presupuesto la clase especializada es **n_cst_app_presupuesto**,​ por lo general la clase esta en la libreria principal que contiene el objeto **Application**. 
 + 
 +{{ :​ada:​howto:​sicoferp:​factory:​logmodels:​ejemplo_n_cst_app.png?​600 |}} 
 + 
 +== 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. 
 + 
 +<code java> 
 +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 
 +</​code>​ 
 + 
 +== 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. 
 + 
 +<code java> 
 +/*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 
 +</​code>​ 
 + 
 +<code java> 
 +/*PASO 2: Incializar el objeto iuo_json antes de utilizarlo*/​ 
 +iuo_json= create sailjson 
 +</​code>​ 
 + 
 +<code java> 
 +/* 
 +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 
 + 
 +</​code>​ 
 + 
 +<code java> 
 +//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 
 +</​code>​ 
 + 
 +<code java> 
 +//Invocar el método local of_add_log_file_upload  
 +of_add_log_file_upload (1, '​codigo_tercero',​ '',​ ls_notificaciones) 
 +</​code>​ 
 + 
 +==== Modo de uso: Java ==== 
 +Para las aplicaciones desarrolladas en las tecnologías (Web): 
 + 
 +  * Java  
 +  * .Net 
 +  * PHP 
 + 
 +el log de sesión será implementado por medio de un [[http://10.1.20.89/​doku.php?​id=ada:​howto:​sicoferp:​factory:​integrations:​logs|Servicio Web]] el cual deberá considerar las reglas de [[#Columna: WS|Columna: WS]]   
  
 [[ada:​howto:​sicoferp:​factory:​logmodels|←Volver atras]] [[ada:​howto:​sicoferp:​factory:​logmodels|←Volver atras]]
  
ada/howto/sicoferp/factory/logmodels/fileuploadlog.1625857613.txt.gz · Última modificación: 2021/07/09 19:06 por 192.168.177.6