Herramientas de usuario

Herramientas del sitio


ada:howto:sicoferp:factory:logmodels:registryerrors

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:registryerrors [2021/08/18 19:35]
administraidor
ada:howto:sicoferp:factory:logmodels:registryerrors [2021/09/21 12:53] (actual)
administraidor
Línea 169: Línea 169:
  
 == Consideraciones == == Consideraciones ==
-  * El API puede ser activada o desactivada por medio de la constante: **LOG_ERRORS** (Solo en aplicaciones SICOF ERP (Appeon/​Powerbuilder)).+  * El API puede ser activada o desactivada por medio de la constante: **LOG_ERRORS** (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.   * El desarrollador es el encargado de gestionar la transacción que realiza la persistencia.
   * Se automatiza el registro de errores en los objetos **uo_datawindow** y **uo_datastore** en toda su herencia.   * Se automatiza el registro de errores en los objetos **uo_datawindow** y **uo_datastore** en toda su herencia.
   * Se automatiza el registro de errores genéricos no controlados lanzados por el evento **systemerror** de Powerbuilder.   * Se automatiza el registro de errores genéricos no controlados lanzados por el evento **systemerror** de Powerbuilder.
   * Para el procesamiento de logs de bloques se implementa Clase sailjson para procesamiento de cadenas de texto en ese formato.   * 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 **guo_app.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 == == API Json ==
-Se adicionan métodos de procesamiento de bloques en formato json los cuales pueden ser utilziados ​para registrar trazas de error a continuación se muestran ejemplos de uso del API.+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> <code java>
-sailjson ljson+sailjson ljson, ljson1 ​
 String ls_content String ls_content
  
Línea 206: Línea 209:
  
 ljson.setattribute( '​creattime',​ string(now(),​ '​yyyymmdd.hhmmss'​)) ljson.setattribute( '​creattime',​ string(now(),​ '​yyyymmdd.hhmmss'​))
 +
 ls_content =  ljson.getformatjson(''​ ) ls_content =  ljson.getformatjson(''​ )
 destroy ljson destroy ljson
 </​code>​ </​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_error con los siguientes argumentos
 +Integer ai_indx
 +String as_error_code
 +String as_error_description
 +String as_error_line
 +String as_error_method
 +String as_error_tracer
 +*/
 +
 +//​Validaciones previas de control
 +if IsNull(ai_indx) then ai_indx = 0
 +if IsNull(as_error_code) then as_error_code = ""​
 +if IsNull(as_error_description) then as_error_description = ""​
 +if IsNull(as_error_line) then as_error_line = ""​
 +if IsNull(as_error_method) then as_error_method = ""​
 +if IsNull(as_error_tracer) then as_error_tracer= ""​
 +
 +//Registrar las propiedades del error con el indice
 +iuo_json.setattribute("​error"​ + String(ai_indx) + "​_code",​ as_error_code)
 +iuo_json.setattribute("​error"​ + String(ai_indx) + "​_description",​ as_error_description)
 +iuo_json.setattribute("​error"​ + String(ai_indx) + "​_line",​ as_error_line)
 +iuo_json.setattribute("​error"​ + String(ai_indx) + "​_method",​ as_error_method)
 +iuo_json.setattribute("​error"​ + String(ai_indx) + "​_tracer",​ as_error_tracer)
 +
 +</​code>​
 +
 +<code java>
 +//En el metodo donde se gestiona el error se consume el API Log de Errores con traza en formato json, se recomienda uitlizar una transacción diferente a la del proceso para que se pueda almacenar el error
 +guo_app.of_log_error( ).of_add_log("​EJEMPLO_CODE",​ 10, lson, 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_error
 +of_add_log_error(1,​ "​-1",​ 'Error actualizando base de datos',​ '​100',​ '​SystemError',​ ''​)
 +</​code>​
  
 ==== Modo de uso: Java ==== ==== Modo de uso: Java ====
ada/howto/sicoferp/factory/logmodels/registryerrors.1629315354.txt.gz · Última modificación: 2021/08/18 19:35 por administraidor