# Instalación y configuración

[← Volver al índice](../crudl.md)

Este marco se encuentra en el repositorio <a href="https://github.com/Induxsoft/dkl-web" target="_blank">https://github.com/Induxsoft/dkl-web</a>

## Archivos del marco

De manera predeterminada, los archivos compartidos deben estar en una carpeta llamada `crudl` directamente en la raíz de binarios de Devkron (junto a la carpeta `web` o `fastcgi`). Estos archivos se usan por todos los sitios Web gestionados por la instancia.

| Archivo | Propósito |
|---|---|
| `crudl.dk` | Biblioteca de funciones de configuración y enrutamiento. Se incluye desde el punto de entrada. |
| `controller.dkl` | Controlador principal. Determina la operación, selecciona modelo y vista, y devuelve la respuesta. |
| `entity.dk` | Modelo genérico. Implementa las operaciones CRUD-L sobre tablas con el patrón de diseño de Devkron. |
| `view.dk` | Vista genérica. Resuelve la ubicación de las vistas y produce la salida JSON. |
| `error.dk` | Vista de error predeterminada para salida HTML. |
| `form.dk` | Vista de formulario predeterminada. |
| `list.dk` | Vista de lista predeterminada. |
| `websencia.dk` | Renderiza vistas creadas con Websencia (páginas en formato JSON). |
| `mysql.dbr.dkh` | Funciones específicas para MySQL, incluida la suplantación de identidad. |

`form.dk`, `list.dk` y `error.dk` son implementaciones mínimas destinadas a que un CRUD-L funcione desde el primer momento sin escribir vistas. Producen una salida de diagnóstico, no una interfaz de usuario. Debe sustituirlas por vistas propias en la carpeta de cada entidad, o por vistas comunes en la ruta indicada por `@base_path`. Ver [Implementación de las vistas](vistas.md).

## El punto de entrada

`entry-point.dkl` es el punto de entrada del controlador y debe colocarse dentro de la carpeta del sitio Web o del sistema que lo va a emplear, de modo que sus configuraciones sean exclusivas.

Estructura mínima:

```
#include "dkli.dkh"
#!

module "Controller configs"
{
    #include "functions.dkh"
    #include "serialize.dkh"
    #include "dbr.dkh"
    #include "crudl/crudl.dk"

    // Configuración de rutas y variables globales

    do crudl.load_config()
    do crudl.loadRoutesJSON()

    #include "crudl/controller.dkl"
}
```

El orden importa. `crudl.dk` debe incluirse antes de llamar a sus funciones, y `controller.dkl` debe ser lo último, porque su cuerpo se ejecuta al ser incluido.

## Variables globales del punto de entrada

### Rutas

```
// Ruta física del sitio Web
@path_root = "web/nombre_host"

// Ruta relativa donde se encuentran las carpetas de las entidades
@base_path = "ruta/relativa/entidades"

// Ubicación de los archivos compartidos del marco
@dbmvc_path = "crudl/"
```

La ruta de búsqueda de las entidades se forma concatenando `@path_root` y `@base_path`.

### Conexión

```
// Nombre cualificado de la conexión a la base de datos
@crudl.qname = "conexion@aplicacion"

// Credenciales, únicamente para el modo de conexión constante
@crudl.user = "Nombre del usuario"
@crudl.pwd  = "Contraseña del usuario"
```

Si no se define `@crudl.qname`, la conexión puede pasarse por la URL mediante los parámetros `_app_group` y `_connection`. Ver [Conexión a la base de datos y sesión](conexion-y-sesion.md).

### Motor de base de datos

```
@db_engine = "MY_SQL"
```

El valor predeterminado es `MY_SQL`. Ver [Otros motores de base de datos](#otros-motores-de-base-de-datos) al final de este documento.

### Vistas

```
// Nombres de las vistas predeterminadas
@list_view  = "list.dk"
@form_view  = "form.dk"
@error_view = "error.dk"

// Extensión asumida si el nombre de la vista no la indica
@dkl_view_ext   = ".dk"

// Extensión asumida para archivos de Websencia
@websencia_ext  = ".jsnwm"
```

### Comportamiento

```
// Valor del identificador que indica 'entidad nueva'
@entity_id_blank = "_new"

// Identificador de espacio de trabajo, tomado de la URL
@ws = @@(@http_context,"request/get/ws")

// Manifiesto de privilegios exigido para la suplantación de identidad
@crudl.access_privilege = '{"access":[{"workspace":"' + @ws + '"}]}'
```

## Estructura de carpetas de una entidad

Cada tipo de entidad tiene una carpeta con su nombre bajo `@path_root` + `@base_path`:

```
{@path_root}/{@base_path}/{_entities_type}/
                              ├── model.dk       (opcional)
                              ├── controller.dk  (opcional)
                              ├── form.dk        (opcional)
                              └── list.dk        (opcional)
```

Si no existe `model.dk`, se usa el modelo genérico `entity.dk`. Si no existe `controller.dk`, no se ejecuta ningún controlador específico. Si no existen las vistas, se buscan en la ruta común y después en la carpeta del marco.

## Otros motores de base de datos

El controlador incluye `crudl/mysql.dbr.dkh`, que contiene las funciones de suplantación de identidad específicas de MySQL.

Para usar otro gestor deberá proporcionar un archivo equivalente que implemente las mismas funciones:

| Función | Propósito |
|---|---|
| `dbr.check_alter_access::&user` | Devuelve `@true` si el usuario de la sesión satisface el manifiesto de `@crudl.access_privilege`. |
| `dbr.alter_id::qname, uid, uname, ids` | Devuelve una conexión abierta bajo la identidad indicada, aprovisionando el usuario y la sesión locales si no existen. |

Estas funciones solo son necesarias si va a emplear el modo de conexión por suplantación de identidad. Ver [Conexión a la base de datos y sesión](conexion-y-sesion.md).

## Documentos relacionados

* [Enrutamiento y enmascaramiento de URL](enrutamiento.md)
* [Archivo de configuración `.crudl`](configuracion.md)
* [Referencia de parámetros y variables](referencia.md)
