Herramientas de usuario

Herramientas del sitio


ada:howto:sicoferp:factory:logmodels:transaccionallog

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:transaccionallog [2021/08/19 14:32]
administraidor
ada:howto:sicoferp:factory:logmodels:transaccionallog [2021/09/20 13:38] (actual)
administraidor
Línea 139: Línea 139:
   * El API puede ser activada o desactivada por medio de la constante: **LOG_TRANSACCIONAL** (Solo en aplicaciones SICOF ERP (Appeon/​Powerbuilder)) siempre y cuando se utilice la implementación de la clase **guo_app**.   * El API puede ser activada o desactivada por medio de la constante: **LOG_TRANSACCIONAL** (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.
-  * Para el procesamiento de logs de bloques se implementa Clase sailjson para generar ​de cadenas de texto en formato ​Json.+  * 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 ==
Línea 176: Línea 179:
 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 por cada registro que realice operaciones DML. A continuacion se muestra un ejemplo de uso funcional en Appeon/​Powerbuilder que puede ser tomado como referencia.
  
 <code java> <code java>
-/*Ejemplo ​de Uso del API con el Log de Cargas*/ +/*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 ​ljson, ljson1, ljson2 +sailjson ​iuo_json
-ljson = create sailjson +
-//add json object array, first item +
-ljson1 = ljson.addarrayitem('​columns'​) +
-ljson1.setattribute( '​column_name',​ '​codigo_tercero'​) +
-ljson1.setattribute( '​column_old_value',​ '​0'​) +
-ljson1.setattribute( '​column_new_value',​ '​1234'​) +
-//add second item of the array +
-ljson1 = ljson.addarrayitem( '​columns'​) +
-ljson1.setattribute( '​column_name',​ '​valor_debito'​) +
-ljson1.setattribute( '​column_old_value',​ '​0'​) +
-ljson1.setattribute( '​column_new_value',​ '​100000'​) +
-//Consumir Log de Cargas con traza en formato json +
-guo_app.of_log_transactional( ).of_add_log(f_hoy(),​ "​Causación por Plantilla",​ "​Update",​ "​PRESUP01.DET_ASIENTO_CONTABLE",​ ljson, true, SQLCA)+
 </​code>​ </​code>​
  
-== Notas == +<code java> 
-  Todos los valores ​del objeto json deben ser ingresados como string+/*PASO 2: Incializar el objeto iuo_json antes de utilizarlo*/​ 
 +iuo_jsoncreate 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_transactional con los siguientes argumentos 
 +string as_dataobject 
 +string as_column 
 +string as_old_value 
 +string as_new_value 
 +*/ 
 + 
 +//​Validaciones previas de control 
 +if IsNull(as_dataobject) then return 
 +if IsNull(as_column) then return 
 +if IsNull(as_old_value) then as_old_value = ""​ 
 +if IsNull(as_new_value) then as_new_value = ""​ 
 + 
 +//Crear propiedad de la columna con el valor anterior 
 +iuo_json.setattribute(as_dataobject + "​."​ + as_column + "​_OldValue",​ as_old_value) 
 + 
 +//Crear propiedad de la columna con el nuevo valor 
 +iuo_json.setattribute(as_dataobject + "​."​ + as_column + "​_NewValue",​ as_new_value) 
 +</​code>​ 
 + 
 +<code java> 
 +//En el metodo de guardado ​del proceso consumir el API de Log de transacciones con el objeto json 
 +guo_app.of_log_transactional( ).of_add_log(Date(ldt_fecha),​ "​w_conexion_cliente_fe::​guardar",​ "​update",​ '​TBL_FE_CONEXION_CLIENTE',​ iuo_json, true, ts_transaccion) 
 + 
 +//Por último se debe reiniciar el componente para otro proceso 
 +iuo_json = Create sailjson 
 +</​code>​ 
 + 
 +<code java> 
 +//En el evento itemchanged del datawindow consumir el método local of_add_log_transactional 
 +String ls_column, ls_old_data 
 +ls_column = dwo.name 
 +Choose Case ls_column 
 +  Case '​codigo_cliente'​  
 +    ls_old_data = getitemstring(row,​ ls_column) 
 +    of_add_log_transactional(dataobject,​ ls_column, ls_old_data,​ data) 
 +End Choose 
 +</​code>​
  
 ==== Modo de uso: Java ==== ==== Modo de uso: Java ====
ada/howto/sicoferp/factory/logmodels/transaccionallog.1629383552.txt.gz · Última modificación: 2021/08/19 14:32 por administraidor