Muestra las diferencias entre dos versiones de la página.
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:46] administraidor [Columna: LOG_LINEA] |
ada:howto:sicoferp:factory:logmodels:fileuploadlog [2021/09/21 13:09] (actual) administraidor |
||
---|---|---|---|
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 ==== |