# dbr.apps **dbr.apps.dkl** Ofrece funciones para administrar categorías de accesos directos, accesos directos, aplicaciones, tipos de elementos de datos y acciones. ## Administración de categorías ### category.set Agrega o actualiza la información de una categoría de aplicaciones. ``` dbr.apps.category.set::&db,&data ``` ##### Parámetros * `db` - Referencia a una conexión de bases de datos. * `data` - Es un objeto que representa la categoría, debe tener dos propiedades: id y title, ambas son cadenas. ##### Valor de retorno toda la información de la fila que fue agregada o actualizada en la tabla sys_app_category ##### Excepciones Excepciones de bases de datos. ##### Ejemplo ``` #include "dkli.dkh" #! program "Ejemplo" { #include "functions.dkh" #include "serialize.dkh" #include "dbr.dkh" #include "dbr.apps.dkl" namespace "dbr.apps" ref db = dbr.open("mydb@myappgroup") new category { @"id": "U001" @"title": "Categoría de ejemplo" } do category.set(db,shortcut) } ``` ### category.import Agrega o actualiza los datos de un conjunto de categorías. ``` dbr.apps.category.import::&db, &list ``` ##### Parámetros * `db` - Referencia a una conexión de bases de datos. * `list` - Lista de objetos que representan a las categorías, cada objeto debe tener dos propiedades: id y title, ambas son cadenas. ##### Valor de retorno Ninguno (0) ##### Excepciones Excepciones de bases de datos. ##### Ejemplo ``` #include "dkli.dkh" #! program "Ejemplo" { #include "functions.dkh" #include "serialize.dkh" #include "dbr.dkh" #include "dbr.apps.dkl" namespace "dbr.apps" ref db = dbr.open("mydb@myappgroup") ref lista = list.create() new categoria1 { @"id": "U001" @"title": "Categoría de ejemplo 1" } new categoria2 { @"id": "U002" @"title": "Categoría de ejemplo 2" } do list.add(lista,categoria1) do list.add(lista,categoria2) do category.import(db,lista) } ``` ### category.delete Elimina una categoría por su id, la eliminación es física. ``` dbr.apps.category.delete::&db, id ``` ##### Parámetros * `db` - Referencia a una conexión de bases de datos. * `id` - Identificador de la categoría que se desea eliminar. ##### Valor de retorno true/false , true si se eliminó la categoría de lo contrario false. ##### Excepciones Excepciones de bases de datos. ##### Ejemplo ``` #include "dkli.dkh" #! program "Ejemplo" { #include "functions.dkh" #include "serialize.dkh" #include "dbr.dkh" #include "dbr.apps.dkl" namespace "dbr.apps" ref db = dbr.open("mydb@myappgroup") id = "U001" do category.delete(db,id) } ``` ### categories Devuelve una lista de todas las categorías. ``` dbr.apps.categories::&db ``` ##### Parámetros * `db` - Referencia a una conexión de bases de datos. ##### Valor de retorno Lista de todas las categorías. ``` [ { "id":"cat_001", "title":"categoría 1" }, ... ] ``` ##### Excepciones Excepciones de bases de datos. ##### Ejemplo ``` #include "dkli.dkh" #! program "Ejemplo" { #include "functions.dkh" #include "serialize.dkh" #include "dbr.dkh" #include "dbr.apps.dkl" namespace "dbr.apps" ref db = dbr.open("mydb@myappgroup") ref categorias= categories(db) } ``` ## Administración de accesos directos ### shortcut.set Agrega o actualiza los datos de un acceso directo. ``` dbr.apps.shortcut.set::&db,&data ``` ##### Parámetros * `db` - Referencia a una conexión de bases de datos. * `data` - Es un objeto que representa el acceso directo, debe tener siete propiedades: id, title, icon96x96, src, _blank, appid y cat. Todas son cadenas. ##### Valor de retorno Toda la información de la fila agregada o actualizada. ##### Excepciones Excepciones de bases de datos. ##### Ejemplo ``` #include "dkli.dkh" #! program "Ejemplo" { #include "functions.dkh" #include "serialize.dkh" #include "dbr.dkh" #include "dbr.apps.dkl" namespace "dbr.apps" ref db = dbr.open("mydb@myappgroup") new shortcut { @"id": "paquete.app" @"title": "Nombre de paquete" @"icon96x96": "/$/paquete/img/icons/docs-96x96.png" @"src": "/!/paquete/app/" @"_blank": "0" @"appid": "paquete.app" @"cat": "id_categoria" } do shortcut.set(db,shortcut) } ``` ### shortcut.import Agrega o actualiza los datos de un conjunto de accesos directos. ``` dbr.apps.shortcut.import::&db,&list ``` ##### Parámetros * `db` - Referencia a una conexión de bases de datos. * `list` - Lista de objetos que representan a los accesos directos, cada objeto debe tener siete propiedades: id, title, icon96x96, src, _blank, appid y cat. Todas son cadenas. ##### Valor de retorno Ninguno (0) ##### Excepciones Excepciones de bases de datos. ##### Ejemplo ``` #include "dkli.dkh" #! program "Ejemplo" { #include "functions.dkh" #include "serialize.dkh" #include "dbr.dkh" #include "dbr.apps.dkl" namespace "dbr.apps" ref db = dbr.open("mydb@myappgroup") ref lista = list.create() new shortcut1 { @"id": "paquete.app1" @"title": "Nombre de paquete 1" @"icon96x96": "/$/paquete/img/icons/docs-96x96.png" @"src": "/!/paquete/app1/" @"_blank": "0" @"appid": "paquete.app1" @"cat": "id_categoria" } new shortcut2 { @"id": "paquete.app2" @"title": "Nombre de paquete 2" @"icon96x96": "/$/paquete/img/icons/docs-96x96.png" @"src": "/!/paquete/app2/" @"_blank": "0" @"appid": "paquete.app2" @"cat": "id_categoria" } do list.add(lista,shortcut1) do list.add(lista,shortcut2) do shortcut.import(db,lista) } ``` ### shortcut.delete Elimina un acceso directo. ``` dbr.apps.shortcut.delete::&db,id ``` ##### Parámetros * `db` - Referencia a una conexión de bases de datos. * `id` - Identificador del acceso directo que se desea eliminar. ##### Valor de retorno true/false, true si se elimina el acceso directo de lo contrario false. ##### Excepciones Excepciones de bases de datos. ##### Ejemplo ``` #include "dkli.dkh" #! program "Ejemplo" { #include "functions.dkh" #include "serialize.dkh" #include "dbr.dkh" #include "dbr.apps.dkl" namespace "dbr.apps" ref db = dbr.open("mydb@myappgroup") id = "paquete.app" do shortcut.delete(db,id) } ``` ### shortcuts Devuelve una lista de accesos directos ``` dbr.apps.shortcuts::&db,groupid ``` ##### Parámetros * `db` - Referencia a una conexión de bases de datos. * `groupid` - Identificador del grupo(groupid o guid) o a todos los grupos si groupid="*" o al usuario conectado si groupid="" (cadena vacía). ##### Valor de retorno Lista de los accesos directos. ``` [ { //todos los campos de la tabla sys_app_shortcut "category":"" //categoría del acceso directo. "info":"" //información de la aplicación. } ] ``` ##### Excepciones Excepciones de bases de datos. ##### Ejemplo ``` #include "dkli.dkh" #! program "Ejemplo" { #include "functions.dkh" #include "serialize.dkh" #include "dbr.dkh" #include "dbr.apps.dkl" namespace "dbr.apps" ref db = dbr.open("mydb@myappgroup") ref _shorcuts= shortcuts(db,"*") } ``` ## Administración de aplicaciones ### set Agregar o actualiza los datos de una aplicación. ``` dbr.apps.set::&db,&data ``` ##### Parámetros * `db` - Referencia a una conexión de bases de datos. * `data` - Es un objeto que representa el acceso directo, debe tener cinco propiedades: pack_id, app_id, app_title, created, y app_info. Todas son cadenas. ##### Valor de retorno Toda la información de la fila agregada o actualizada(sys_app_catalog). ##### Excepciones Excepciones de bases de datos. ##### Ejemplo ``` #include "dkli.dkh" #! program "Ejemplo" { #include "functions.dkh" #include "serialize.dkh" #include "dbr.dkh" #include "dbr.apps.dkl" namespace "dbr.apps" ref db = dbr.open("mydb@myappgroup") new app { @"pack_id": "paquete" @"app_id": "paquete.app.v1" @"app_title": "Título de app" @"created": "2024-02-21 23:59:59" @"app_info": "Info de app" } do set(db,app) } ``` ### import Agrega o actualiza los datos de un conjunto de aplicaciones. ``` dbr.apps.import::&db,&list ``` ##### Parámetros * `db` - Referencia a una conexión de bases de datos. * `list` - Lista de objetos que representan a las aplicaciones, cada objeto debe tener cinco propiedades: pack_id, app_id, app_title, created, y app_info. Todas son cadenas. ##### Valor de retorno Ninguno (0) ##### Excepciones Excepciones de bases de datos. ##### Ejemplo ``` #include "dkli.dkh" #! program "Ejemplo" { #include "functions.dkh" #include "serialize.dkh" #include "dbr.dkh" #include "dbr.apps.dkl" namespace "dbr.apps" ref db = dbr.open("mydb@myappgroup") ref lista = list.create() new app1 { @"pack_id": "paquete" @"app_id": "app_id" @"app_title": "Titulo de app" @"created": "2023-12-05 23:59:59" @"app_info": "Info de app" } new app2 { @"pack_id": "paquete" @"app_id": "app_id" @"app_title": "Título de app" @"created": "2023-12-05 23:59:59" @"app_info": "Info de app" } do list.add(lista,app1) do list.add(lista,app2) do import(db,lista) } ``` ### delete Elimina una aplicación. ``` dbr.apps.delete::&db,id ``` ##### Parámetros * `db` - Referencia a una conexión de bases de datos. * `id` - Es un identificador de la aplicación que se desea eliminar. ##### Valor de retorno true/false, true si se elimina la aplicación de lo contrario false. ##### Excepciones Excepciones de bases de datos. ##### Ejemplo ``` #include "dkli.dkh" #! program "Ejemplo" { #include "functions.dkh" #include "serialize.dkh" #include "dbr.dkh" #include "dbr.apps.dkl" namespace "dbr.apps" ref db = dbr.open("mydb@myappgroup") id = "app_id" do delete(db,id) } ``` ### list Devuelve una lista de todas las aplicaciones. ``` dbr.apps.list::&db ``` ##### Parámetros * `db` - Referencia a una conexión de bases de datos. ##### Valor de retorno Toda la información y columna de la tabla sys_app_catalog. ##### Excepciones Excepciones de bases de datos. ##### Ejemplo ``` #include "dkli.dkh" #! program "Ejemplo" { #include "functions.dkh" #include "serialize.dkh" #include "dbr.dkh" #include "dbr.apps.dkl" namespace "dbr.apps" ref db = dbr.open("mydb@myappgroup") ref mis_app= list(db) } ``` ## Administración de tipos de elementos ### itemtype.set Agrega o actualiza un tipo de elemento sobre el que aplican acciones. ``` dbr.apps.itemtype.set::&db,&data ``` ##### Parámetros * `db` - Referencia a una conexión de bases de datos. * `data` - Objeto que representa el tipo de elemento, debe tener dos propiedades: id y title, ambas son cadenas. ##### Valor de retorno Toda la información de la fila agregada o actualizada. ##### Excepciones Excepciones de bases de datos. ##### Ejemplo ``` #include "dkli.dkh" #! program "Ejemplo" { #include "functions.dkh" #include "serialize.dkh" #include "dbr.dkh" #include "dbr.apps.dkl" namespace "dbr.apps" ref db = dbr.open("mydb@myappgroup") new itemtype { @"id": "U001" @"title": "Itemtype de ejemplo" } do itemtype.set(db,itemtype) } ``` ### itemtype.view_url Establece la URL de consulta del DTE según criterio de prioridad: 0-Solo si no está establecida,1-Sobre-escribir ``` dbr.apps.itemtype.view_url ``` ##### Parámetros * `db` - Referencia a una conexión de bases de datos. * `dte_id` - Tipo del elemento de dato. * `url` - Url que se va agregar o actualizar. * `override` - true/false, si es true se actualizará la url anterior. ##### Valor de retorno Ninguno (0) ##### Excepciones - Excepciones de bases de datos. ##### Ejemplo ``` #include "dkli.dkh" #! program "Ejemplo" { #include "functions.dkh" #include "serialize.dkh" #include "dbr.dkh" #include "dbr.apps.dkl" namespace "dbr.apps" ref db = dbr.open("mydb@myappgroup") do itemtype.view_url(db,"DET01","url nueva",@true) } ``` ### itemtype.import Agrega o actualiza los datos de un conjunto de tipos de elementos. ``` dbr.apps.itemtype.set::&db,&list ``` ##### Parámetros * `db` - Referencia a una conexión de bases de datos. * `list` - Es una lista de objetos que representan a los tipos de elementos, cada objeto debe tener dos propiedades: id y title, ambas son cadenas. ##### Valor de retorno Ninguno (0) ##### Excepciones Excepciones de bases de datos. ##### Ejemplo ``` #include "dkli.dkh" #! program "Ejemplo" { #include "functions.dkh" #include "serialize.dkh" #include "dbr.dkh" #include "dbr.apps.dkl" namespace "dbr.apps" ref db = dbr.open("mydb@myappgroup") ref lista = list.create() new itemtype1 { @"id": "U001" @"title": "Itemtype de ejemplo 1" } new itemtype2 { @"id": "U002" @"title": "Itemtype de ejemplo 2" } do list.add(lista,itemtype1) do list.add(lista,itemtype2) do itemtype.import(db,lista) } ``` ### itemtype.delete Elimina un tipo de elemento. ``` dbr.apps.itemtype.delete::&db,id ``` ##### Parámetros * `db` - Referencia a una conexión de bases de datos. * `id` - Identificador del itemtype que se desea eliminar. ##### Valor de retorno true/false, true si logra eliminar el tipo de elemento de dato. ##### Excepciones Excepciones de bases de datos. ##### Ejemplo ``` #include "dkli.dkh" #! program "Ejemplo" { #include "functions.dkh" #include "serialize.dkh" #include "dbr.dkh" #include "dbr.apps.dkl" namespace "dbr.apps" ref db = dbr.open("mydb@myappgroup") id = "U001" do itemtype.delete(db,id) } ``` ### itemtypes Devuelve una lista de todos los tipos de elementos. ``` dbr.apps.itemtypes::&db ``` ##### Parámetros * `db` - Referencia a una conexión de bases de datos. ##### Valor de retorno Lista de los tipos de elementos. ``` [ { "id":"0001", "title":"Clientes" } ] ``` ##### Excepciones Excepciones de bases de datos. ##### Ejemplo ``` #include "dkli.dkh" #! program "Ejemplo" { #include "functions.dkh" #include "serialize.dkh" #include "dbr.dkh" #include "dbr.apps.dkl" namespace "dbr.apps" ref db = dbr.open("mydb@myappgroup") ref _types_element= itemtypes(db) } ``` ## Buscador por tipo de elemento ### detfinder.set Agrega o actualiza el buscador para un tipo de elemento de dato ``` dbr.apps.detfinder.set::&db,&data ``` ##### Parámetros * `db` - Referencia a una conexión de bases de datos. * `data` - Referencia con los datos a insertar o actualizar. ``` { "det":"Tipo de elemento de dato", "class":"Clase del elemento.", "sql_query":"Consulta sql para obtener los datos de la base de datos.", "keyfield":"Campo clave", "textfield":"Campo a mostrar en el elemento", "primarykey":"Clave primaria" } ``` ##### Valor de retorno Toda la información de la fila agregada o actualizada. ##### Excepciones Excepciones de bases de datos. ##### Ejemplo ``` #include "dkli.dkh" #! program "Ejemplo" { #include "functions.dkh" #include "serialize.dkh" #include "dbr.dkh" #include "dbr.apps.dkl" namespace "dbr.apps" ref db = dbr.open("mydb@myappgroup") new data { "det":"Tipo de elemento de dato", "class":"Clase del elemento.", "sql_query":"Consulta sql para obtener los datos de la base de datos.", "keyfield":"Campo clave", "textfield":"Campo a mostrar en el elemento", "primarykey":"Clave primaria" } do detfinder.set(db,data) } ``` ### detfinder.import Agrega o actualiza todos los buscadores necesarios indicados en una lista. ``` dbr.apps.detfinder.import::&db,&list ``` ##### Parámetros * `db` - Referencia a una conexión de bases de datos. * `list` - Lista con los objetos a insertar o actualizar. ``` [ { "det":"Tipo de elemento de dato", "class":"Clase del elemento.", "sql_query":"Consulta sql para obtener los datos de la base de datos.", "keyfield":"Campo clave", "textfield":"Campo a mostrar en el elemento", "primarykey":"Clave primaria" }, ... ] ``` ##### Valor de retorno Ninguno (0) ##### Excepciones Excepciones de bases de datos. ##### Ejemplo ``` #include "dkli.dkh" #! program "Ejemplo" { #include "functions.dkh" #include "serialize.dkh" #include "dbr.dkh" #include "dbr.apps.dkl" namespace "dbr.apps" ref db = dbr.open("mydb@myappgroup") new data_1 { "det":"Tipo de elemento de dato", "class":"Clase del elemento.", "sql_query":"Consulta sql para obtener los datos de la base de datos.", "keyfield":"Campo clave", "textfield":"Campo a mostrar en el elemento", "primarykey":"Clave primaria" } new data_2 { "det":"Tipo de elemento de dato", "class":"Clase del elemento.", "sql_query":"Consulta sql para obtener los datos de la base de datos.", "keyfield":"Campo clave", "textfield":"Campo a mostrar en el elemento", "primarykey":"Clave primaria" } ref list=list.create() do list.add(list,data_1) do list.add(list,data_2) do detfinder.import(db,list) } ``` ## Administración de acciones ### itemaction.set Agrega o actualiza una acción. ``` dbr.apps.itemaction.set::&db,&data ``` ##### Parámetros * `db` - Referencia a una conexión de bases de datos. * `data` - Es un objeto que representa una acción, debe tener nueve propiedades: id, title, icon16x16, href, _blank, appid, itemtype, req_context_item_id y act_type. Todas son cadenas. ##### Valor de retorno Toda la información de la fila agregada o actualizada. ##### Excepciones Excepciones de bases de datos. ##### Ejemplo ``` #include "dkli.dkh" #! program "Ejemplo" { #include "functions.dkh" #include "serialize.dkh" #include "dbr.dkh" #include "dbr.apps.dkl" namespace "dbr.apps" ref db = dbr.open("mydb@myappgroup") new itemaction { @"id": "U001" @"title": "Itemaction de ejemplo" @"icon16x16": "iconLink" @"href": "link" @"_blank": "0" @"appid": "app_id" @"itemtype": "itemtype_id" @"req_context_item_id": "0" // 0 para acciones generales y 1 para acciones específicos @"act_type": "Tipo de acción" } do itemaction.set(db,itemaction) } ``` ### itemaction.get Obtiene la información de una acción ``` dbr.apps.itemaction.get::&db,id ``` ##### Parámetros * `db` - Referencia a una conexión de bases de datos. * `id` - Identificador de la acción. ##### Valor de retorno Toda la información de la fila que con respecto al valor de la id de la acción. ##### Excepciones Excepciones de bases de datos. ##### Ejemplo ``` #include "dkli.dkh" #! program "Ejemplo" { #include "functions.dkh" #include "serialize.dkh" #include "dbr.dkh" #include "dbr.apps.dkl" namespace "dbr.apps" ref db = dbr.open("mydb@myappgroup") ref accion= itemaction.get(db,"ACT0001") } ``` ### itemaction.import Agrega o actualiza los datos de un conjunto de acciones. ``` dbr.apps.itemaction.import::&db,&list ``` ##### Parámetros * `db` - Referencia a una conexión de bases de datos. * `list` - Es una lista de objetos que representan a las acciones, cada objeto debe tener nueve propiedades: id, title, icon16x16, href, _blank, appid, itemtype, req_context_item_id y act_type. Todas son cadenas. ##### Valor de retorno Ninguno (0) ##### Excepciones Excepciones de bases de datos. ##### Ejemplo ``` #include "dkli.dkh" #! program "Ejemplo" { #include "functions.dkh" #include "serialize.dkh" #include "dbr.dkh" #include "dbr.apps.dkl" namespace "dbr.apps" ref db = dbr.open("mydb@myappgroup") ref lista = list.create() new itemaction1 { @"id": "U001" @"title": "Itemaction de ejemplo 1" @"icon16x16": "iconLink" @"href": "link" @"_blank": "0" @"appid": "app_id" @"itemtype": "itemtype_id" @"req_context_item_id": "0" // 0 para acciones generales y 1 para acciones específicas @"act_type": "Tipo de acción" } new itemaction2 { @"id": "U002" @"title": "Itemaction de ejemplo 2" @"icon16x16": "iconLink" @"href": "link" @"_blank": "0" @"appid": "app_id" @"itemtype": "itemtype_id" @"req_context_item_id": "0" // 0 para acciones generales y 1 para acciones específicas @"act_type": "Tipo de acción" } do list.add(lista,itemaction1) do list.add(lista,itemaction2) do itemaction.import(db,lista) } ``` ### itemaction.delete Elimina una acción. ``` dbr.apps.itemaction.delete::&db,id ``` ##### Parámetros * `db` - Referencia a una conexión de bases de datos. * `id` - Identificador del itemaction que se desea eliminar. ##### Valor de retorno true/false, true si logra elim9inar el registro. ##### Excepciones Excepciones de bases de datos. ##### Ejemplo ``` #include "dkli.dkh" #! program "Ejemplo" { #include "functions.dkh" #include "serialize.dkh" #include "dbr.dkh" #include "dbr.apps.dkl" namespace "dbr.apps" ref db = dbr.open("mydb@myappgroup") id = "U001" do itemaction.delete(db,id) } ``` ### itemactions Obtiene una lista de todas las acciones asociadas a un tipo de elemento. ``` Consideraciones: Si iditemtype="*" devuelve todas las acciones. Si acttype="*" no aplica el filtro por tipo de acción ('action' o 'report'). Si text=="" no se aplica el filtro like por el id, título de la acción, tipo de elemento o shortcut. req==0 Devolver todas las acciones, ==1 req_context_item_id=false (or null) y ==2 req_context_item_id=true. req==1 y iditemtype="*" mostrar los campos del shortcut. ``` ``` dbr.apps.itemactions::&db,iditemtype,acttype,text,req ``` ##### Parámetros * `db` - Referencia a una conexión de bases de datos. * `iditemtype` - Es un identificador del itemtype, si su valor es "*" devuelve todas las acciones. * `acttype` - Es un valor del tipo de acción, si su valor es "*" no aplica el filtro por tipo de acción ("action" o "report"). ##### Valor de retorno Lista de las acciones según los campos de filtros. ``` [ { "id":"", "title":", "shorttitle":"", "icon":"", "href":"", "_blank":"", "appid":"", "itemtype":"", "req_context_item_id":"", "act_type":"" }, ... ] ``` ##### Excepciones Excepciones de bases de datos. ##### Ejemplo ``` #include "dkli.dkh" #! program "Ejemplo" { #include "functions.dkh" #include "serialize.dkh" #include "dbr.dkh" #include "dbr.apps.dkl" namespace "dbr.apps" ref db = dbr.open("mydb@myappgroup") ref acciones= itemactions(db,"*","*","","0") } ``` ## Administración de privilegios Archivo requeridos ``` #include "dbr.events.dkl" #include "dbr.security.dkl" ``` ### action.grant Valida privilegios del usuario que inicio sesión, también valida privilegio sobre entidades. ``` dbr.apps.action.grant::action_id ``` ##### Parámetros * `action_id` - Identificador del privilegio o privilegio sobre entidad. ##### Valor de retorno Ninguno (0) ##### Excepciones - Excepciones de bases de datos. - Denegado por falta de privilegio requerido. ##### Ejemplo ``` #include "dkli.dkh" #! program "Ejemplo" { #include "functions.dkh" #include "serialize.dkh" #include "dbr.dkh" #include "dbr.apps.dkl" #include "dbr.events.dkl" #include "dbr.security.dkl" namespace "dbr.apps" ref db = dbr.login("mydb@myappgroup","usuario","contraseña") - GP11 : privilegio de obtener presupuesto - DET060 : Tipo del elemento de dato a la que pertenece la entidad. - 5001 : Entidad(referencia de la unidad organizacional). do grant("GP11:DET060:5001") } ``` ### action.pre Valida privilegios del usuario que inicio sesión, también valida privilegio sobre entidades, Se ejecuta antes de iniciar una transacción. Si el usuario actual tiene el permiso se dispara un evento (pre_ id del permiso). ``` dbr.apps.action.pre::action_id ``` ##### Parámetros * `action_id` - Identificador del privilegio o privilegio sobre entidad. ##### Valor de retorno Ninguno (0) ##### Excepciones - Excepciones de bases de datos. - Denegado por falta de privilegio requerido. ##### Ejemplo ``` #include "dkli.dkh" #! program "Ejemplo" { #include "functions.dkh" #include "serialize.dkh" #include "dbr.dkh" #include "dbr.apps.dkl" #include "dbr.events.dkl" #include "dbr.security.dkl" namespace "dbr.apps" ref db = dbr.login("mydb@myappgroup","usuario","contraseña") - GP11 : privilegio de obtener presupuesto - DET060 (opcional): Tipo del elemento de dato a la que pertenece la entidad. - 5001 (opcional): Entidad(referencia de la unidad organizacional). // do pre("GP11:DET060:5001") validar el privilegio principal y privilegio sobre entidades // do pre("GP11") validar solo el privilegio principal do dbr.begin(db) //code do dbr.commit(db) exception { if dbr.in_transaction(db){ do dbr.rollback(db) } //registrar log do dbr.apps.action.log() //lanzar el error ocurrido do rise_error(last_error_code(),last_error()) } } ``` ### action.pos Se ejecuta antes de realizar el commit de una transacción. Si el usuario actual tiene el permiso se dispara un evento (pos_ id del permiso). ``` dbr.apps.action.pos::&output ``` ##### Parámetros * `output` - Datos de salida. ##### Valor de retorno Ninguno (0) ##### Excepciones - Excepciones de bases de datos. - Denegado por falta de privilegio requerido. ##### Ejemplo ``` #include "dkli.dkh" #! program "Ejemplo" { #include "functions.dkh" #include "serialize.dkh" #include "dbr.dkh" #include "dbr.apps.dkl" #include "dbr.events.dkl" #include "dbr.security.dkl" namespace "dbr.apps" ref db = dbr.login("mydb@myappgroup","usuario”, “contraseña") - GP11 : privilegio de obtener presupuesto - DET060 (opcional): Tipo del elemento de dato a la que pertenece la entidad. - 5001 (opcional): Entidad(referencia de la unidad organizacional). // validar el pre // do pre("GP11:DET060:5001") validar el privilegio principal y privilegio sobre entidades // do pre("GP11") validar solo el privilegio principal do dbr.begin(db) //code new datos_de_salida { //Todos los datos necesarios } do pos(datos_de_salida) do dbr.commit(db) exception { if dbr.in_transaction(db){ do dbr.rollback(db) } //registrar log do dbr.apps.action.log() //lanzar el error ocurrido do rise_error(last_error_code(),last_error()) } } ``` ### action.ext Se ejecuta después de realizar el commit de una transacción. Si el usuario actual tiene el permiso se dispara un evento (ext_ id del permiso). ``` dbr.apps.action.ext::output ``` ##### Parámetros * `output` - Datos de salida. ##### Valor de retorno Ninguno (0) ##### Excepciones - Excepciones de bases de datos. - Denegado por falta de privilegio requerido. ##### Ejemplo ``` #include "dkli.dkh" #! program "Ejemplo" { #include "functions.dkh" #include "serialize.dkh" #include "dbr.dkh" #include "dbr.apps.dkl" #include "dbr.events.dkl" #include "dbr.security.dkl" namespace "dbr.apps" ref db = dbr.login("mydb@myappgroup","usuario”, “contraseña") - GP11 : privilegio de obtener presupuesto - DET060 (opcional): Tipo del elemento de dato a la que pertenece la entidad. - 5001 (opcional): Entidad(referencia de la unidad organizacional). // validar el pre // do pre("GP11:DET060:5001") validar el privilegio principal y privilegio sobre entidades // do pre("GP11") validar solo el privilegio principal do dbr.begin(db) //code new datos_de_salida { //Todos los datos necesarios } //Disparar evento post // do pos(datos_de_salida) do dbr.commit(db) //Disparar evento ext do ext(datos_de_salida) exception { if dbr.in_transaction(db){ do dbr.rollback(db) } //registrar log do dbr.apps.action.log() //lanzar el error ocurrido do rise_error(last_error_code(),last_error()) } } ``` ### action.log Agrega el ultimo error a la bitacora. Para poder ejecutar esta función antes se debe ejecutar la función pre o grant ``` dbr.apps.action.log:: ``` ##### Parámetros Ninguno ##### Valor de retorno Ninguno (0) ##### Excepciones Excepciones de bases de datos. ##### Ejemplo ``` #include "dkli.dkh" #! program "Ejemplo" { #include "functions.dkh" #include "serialize.dkh" #include "dbr.dkh" #include "dbr.apps.dkl" #include "dbr.events.dkl" #include "dbr.security.dkl" namespace "dbr.apps" ref db = dbr.login("mydb@myappgroup","usuario","contraseña") - GP11 : privilegio de obtener presupuesto - DET060 (opcional): Tipo del elemento de dato a la que pertenece la entidad. - 5001 (opcional): Entidad(referencia de la unidad organizacional). // validar el pre // do pre("GP11:DET060:5001") validar el privilegio principal y privilegio sobre entidades // do pre("GP11") validar solo el privilegio principal do dbr.begin(db) //code new datos_de_salida { //Todos los datos necesarios } //Disparar evento post // do pos(datos_de_salida) do dbr.commit(db) //Disparar evento ext // do ext(datos_de_salida) exception { if dbr.in_transaction(db){ do dbr.rollback(db) } //registrar log do dbr.apps.action.log() //lanzar el error ocurrido do rise_error(last_error_code(),last_error()) } } ```