# Paquetes

Los paquetes están formados por transacciones, tareas, datos iniciales y otros recursos (por ejemplo imágenes o scripts js, css, etc.).

## Clasificación

Los paquetes pueden clasificarse en dos categorías:

* Paquetes de sistema. Incluyen bibliotecas y aplicaciones que son de utilidad para otros paquetes o el sistema V12, como el paquete *dbext* que ofrece funciones para gestionar variables globales, eventos, autorizaciónes, etc.
* Paquetes de usuario. Incluyen principalmente aplicaciones con un propósito específico o para un área del negocio, como el paquete *rhgf* (Gestión Financiera de los Recursos Humanos)

## Estructura

La estructura de carpetas de un paquete debe ser:

```
/ (raíz del paquete)
    |---pack.manifest
    |---Nombre_del_paquete/
        |---_install/
        |---_static/
        |---entry-point.dkl
```

* Raíz del paquete. Aquí se incluyen archivos que se colocarán en la carpeta de binarios de Devkron, p.e. archivos .dll, programas o bibliotecas comunes.
* ```pack.manifest``` Es un archivo de texto en formato JSON que contiene metadatos del paquete, [vea la estructura del archivo](pack.manifest.md)
* Carpeta ```Nombre_del_paquete``` Esta carpeta debe tener el nombre del paquete, contiene a las carpetas ```_install```, ```_static``` y a las que correspondan a las transacciones y tareas incluidas.
* Carpeta ```_install``` Contiene esquemas, datos y programas requeridos por la instalación
* Carpeta ```_static``` Contiene recursos estáticos que son requeridos por las páginas de los programas del paquete, por ejemplo imágenes, js o css
* Archivo ```entry-point.dkl``` Este archivo es el punto de entrada para todas las transacciones (generalmente carga configuraciones e inicializa el controlador)

## Instalación
Los paquetes generalmente están acoplados a un esquema de datos relacionales, datos iniciales, nuevos privilegios y variables globales que deben 
ser integrados a la base de datos para poder usarse. 

Una lista simple (no exhaustiva) de tareas necesarias para la instalación puede incluir:
1. Instalar el esquema de datos (ddm) lo que implica alterar la estructura de la base de datos
2. Insertar datos iniciales, privilegios y variables.
3. Relacionar los nuevos privilegios insertados al grupo de Administradores (groupid: 'admins', 'administradores' o 'administrators' )

Para simplificar el proceso de instalación, todos los paquetes incluyen el programa ```_install/install.dkl``` que realiza estas tareas de forma automatizada desde la línea de comando.


## Enrutamiento

Una vez instalado un paquete, se podrá acceder a las transacciones (aplicaciones y servicios) mediante URLs dentro del directorio virtual ```!``` y a sus 
recursos estáticos a través del directorio virtual ```$```.

Ejemplos:

* ```https://sistema.miempresa.com/!/cxc/clientes/``` Accede a la transacción ```clientes``` (a través de entry-point.dkl) del paquete ```cxc```
* ```https://sistema.miempresa.com/$/cxc/icono1.png``` Accede a una imagen en la carpeta ```_static``` del paquete ```cxc```


