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

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
ada:howto:sicoferp:factory:logmodels:fileuploadlog [2021/08/13 20:27]
administraidor
ada:howto:sicoferp:factory:logmodels:fileuploadlog [2021/09/21 13:09] (actual)
administraidor
Línea 66: Línea 66:
   "​columns":​[   "​columns":​[
     {     {
-      "​column_name":"​Nombre de la columna",​ +      "​column_name":"​Requerido: ​Nombre de la columna",​ 
-      "​column_value":​ "Valor de la columna",​+      "​column_value":​ "Requerido: ​Valor de la columna",​
       "​column_notifications":​       "​column_notifications":​
         [         [
-          {"​msg":"​Mensaje de Notificación 1"}, +          {"​msg":"​Requerido: ​Mensaje de Notificación 1"}, 
-          {"​msg":"​Mensaje de Notificación 2"}, +          {"​msg":"​Requerido: ​Mensaje de Notificación 2"}, 
-          {"​msg":"​Mensaje de Notificación ​3"}+          {"​msg":"​Requerido: ​Mensaje de Notificación ​N"}
         ]         ]
     }     }
Línea 105: Línea 105:
 </​code>​ </​code>​
  
 +=== Notas ===
 +  * Los valores de las columnas deben ser registrados como String
  
 ==== Modo de uso: Powerbuilder - Documentación ==== ==== 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: 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:​pbdoclogs.png?600 |}} +{{ :​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. ​ 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. ​
Línea 119: Línea 121:
   * **n_cst_app**:​ Clase contenedora de objetos logs   * **n_cst_app**:​ Clase contenedora de objetos logs
   * **n_cst_log_file_upload**:​ Clase para la gestión de log de cargas   * **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 ==== ==== Modo de uso: Java ====
ada/howto/sicoferp/factory/logmodels/fileuploadlog.1628886429.txt.gz · Última modificación: 2021/08/13 20:27 por administraidor