Pasos Previos
Que tenes que saber antes de desarrollar con flexmind
Introducción
Flexmind está basado en el uso y desarrollo de componentes independientes y vinculados entre sí. Cada componente es un objeto javascript que se ejecuta para obtener el resultado esperado según el componente usado.
Cada componente es configurado a través de archivos php y html (usando la librería templates), que ejecutan funciones javascript (que crean un objeto).
Luego de leer estas guías de desarrollo, si deseas conocer en detalle los parámetros de cada componente, ingresa a la documentación correspondiente.
Para poder desarrollar aplicaciones con flexmind es necesario respetar dos estándares fundamentales:
- Estructura de directorio
- Diseño de la Base de Datos
Por favor, lee con atención los siguientes capítulos para comprender y aprender el correcto uso de ambos.
Diseño de Base de Datos
El diseño de Base de Datos es fundamental para el correcto funcionamiento del Framework. Una base de datos que no respete el estándar de no podrá ser usada.
Las reglas principales del estándar son:
1) Normalización de nombres de tablas:
- El nombre de las tablas debe estar formado de la siguiente forma XXX_YYYY_NN_[T]_[Z] donde
X,Y: cualquier carácter de la "a" a la "z" en minúscula excluyendo la ñ y vocales con acento.
N: cualquier número del 0 al 9
[T]: las palabras cab, det, arb, rel, hec, dim indicando respectivamente los tipos de tablas Cabecera, Detalle, Árbol y de Relación.
[Z]: cualquier palabra alfanumérica en minúscula de longitud variable y pudiendo incluir el carácter guión bajo (_). - Los nombres de tablas flx_core_[N]_[Z] esta reservado para tablas internas del Framework.
- El prefijo XXX_YYYY_NN debe ser único por esquema de base de datos, es decir, no puede haber dos tablas con el mismo prefijo.
- El prefijo XXX_YYYY_NN debe representar un conjunto de tablas que tengan relación entre las mismas o dentro del sistema.
Para comprender mejor, vamos a utilizar como ejemplo la tabla CLIENTES sys_publ_01_cab_clientes donde:
- XXX = sys (por system, pero puede ser cualquier caracter, que indentifique o haga referencia un esquema o subsistema dentro de la base de datos).
- YYYY = publ (tambien a modo de ejemplo, usamos publ por "publico", por que entendemos que esta tabla será utilizada por varios módulos dentro de un sistema)
- NN = 01 (por que es la primer tabla)
- T = cab (por que es una tabla tipo cabecera)
- Z = clientes (descripción de la tabla)
2) Normalización de nombres de campos:
La clave primaria de toda tabla debe ser numérica y autoincremental
- El nombre de la clave primaria tiene que tener como nombre el prefijo del nombre de la tabla sacando los guiones y agregando al inicio la palabra id_, sintacticamente sería id_XXXYYYYNN.
- En el manual, llamaremos prefijo de la tabla a sysform01 como a sys_form_01.
- El resto de los campos de la tabla deben estar formada por el prefijo de la tabla seguido por el carácter guión y luego cualquier palabra alfanumérica. Sintácticamente sería XXXYYYYNN_[Z]
- Las claves foráneas deben representar la siguiente sintaxis rela_XXXYYYYNN donde XXXYYYYNN es el prefijo de la tabla relacionada
- En caso de que una tabla sea referenciada a si misma se usará como nombre del campo rela_padre.
Continuando con el ejemplo
- id_syspubl01 (llave primaria obligatoria = id_XXXYYYYNN)
- syspubl01_nombre (campos de la tabla =XXXYYYYNN_[Z] donde Z = nombre)
En esta guía llamaremos prefijo de una tabla a los primeros 9 digitos del nombre de una tabla (sin guiones). Es este ejemplo, el prefijo es syspubl01
A modo de ejemplo, la tabla sys_publ_01_cab_clientes debe estar relacionada (relación muchos a uno) a la tabla sys_publ_02_cab_tipo_cliente. Para ello se debería agregar este campo:
- rela_syspubl02 (rela_XXXYYYYNN clave foránea que hace referencia a la tabla sys_publ_02_cab_tipo_cliente)
3) Normalización de Restricciones:
Las restricciones deberían tener la siguiente sintaxis: fk_XXXYYYYNN_MM donde XXXYYYYNN es el prefijo de la tabla maestra y MM un número incremental de 01 a 99 por cada clave foránea vinculada a la tabla.
Siguien con el ejemplo, la restricción del campo rela_syspubl02 debería llamarse:
- fk_syspubl01_01
NOTA: La ulización del Gestor de Base de datos para MariaDB respeta todas estas directrices, y genera los prefijos y restricciones en forma automática
4) Normalización de Funciones:
Las funciones deberían tener la siguiente sintaxis: aaa_bbb_ccc o aaaBbbCcc
- aaa: Nombre del Módulo o Concepto Final (Liquidaciones, Sueldos, Facturacion)
- bbb: Operación:
- sum
- getStr (para strings)
- getInt (para integers)
- count
- ccc: Detalle
Estructura de Directorio
El correcto funcionamiento del Framework depende (en una gran medida) de respetar la estructura de directorios. Esta estructura permite una programación más comprensible y ordenada.
Todos los módulos del sistema se almacenan en una carpeta llamada "modulos". Como regla general, cada módulo debe tener una carpeta con un nombre representativo de la misma. Dentro, debe contener dos subcarpetas imprescindibles:
- "php" conteniendo archivos con extensión php
- "templates" conteniendo archivos con extensión HTML
Esto es así por que flexmind utiliza una librería llamada "templates" que permite SEPARAR el código PHP del código HTML/JS.
A continuación, se muestra a modo de ejemplo una estructura de directorio:
/modulos/
[modulo]/
php/
ver_[modulo].php
ver_[modulo]_abm.php
validar_[modulo].php
onSubmit_[modulo].php
templates/
ver_grid.html
ver_form.html
Archivo/Carpeta | Proposito |
---|---|
[modulo]/ | [modulo] del módulo. |
[modulo]/php/ | Aquí se incluyen los archivos con extensión php |
[modulo]/php/ver_[modulo].php | Archivo encargado de armar la vista de los datos del modulo (componente flexGrid) |
[modulo]/php/ver_[modulo]_abm.php | Archivo encargado de armar el formulario (alta y modificación) del modulo. |
[modulo]/php/validar_[modulo].php | Archivo encargado de las validaciones u operaciones del sistema antes que se inicie la transacción a la base de datos |
[modulo]/php/onSubmit_[modulo].php | Archivo encargado de las validaciones y operaciones antes de que finalice la transacción a la base de datos |
[modulo]/templates/ | Aquí se incluyen los archivos con extensión html |
[modulo]/templates/ver_grid.html | Archivo encargado de armar la vista de datos del módulo. El mismo contiene código javascript que generalmente no es necesario modificar. |
[modulo]/templates/ver_form.html | Archivo encargado de armar el formulario del modulo. |
[modulo]/templates/ver_reporte_[modulo].html | Este tipo de archivo es usado para generar reportes. El mismo contiene la información de cabecera de una tabla. |
[modulo]/templates/un_[detalle]_[modulo].html | Este archivo es usado como template para el detalle de un reporte |
Carpeta Uploads
El framework almacenará los archivos adjuntos en la carpeta reservada llamada "media/uploads". Todos los módulos que necesitan almacenar adjuntos (imagenes, documentos, etc) serán almacenados en dicha carpeta.
NOTA: El framework realiza una "subida" a una carpeta TEMPORAL en un primer momento, y al "guardar" un registro en la base de datos, el archivo es movido a la carpeta final de destino (dentro de media/uploads)
Librería Templates
Como te explicamos en el capitulo "Estructura de directorio", flexmind utiliza una librería llamada "templates" que permite SEPARAR el código PHP del código HTML/JS.
Cada archivo con extensión php incorpora esta librería y define en primer lugar los archivos html que serán usados por el mismo:
Aquí, se incorpora el archivo ver_grid.html ubicado dentro de la carpeta templates
El archivo html contiene "variables" (palabras encerradas por llaves {var}) que son sobreescritas por el php a través de esta librería al momento de ejecutar el php. Por ejemplo, en este archivo, encontramos las variables {idFlex} y {title}
El archivo php, sobre escribe estas variables de esta forma:
Finalmente, el archivo php debe retornar todo el código html, utilizando la función pparse:
El resultado de esto, se puede visualizar en la consola del navegador (al ejecutar el php, por ejemplo, cuando abrimos un módulo):
Que sigue?
Una vez que te has familiarizado con la estructura de directorios y diseñado tu primer tabla en la base de datos en forma estandarizada, podrás desarrollar tu primer módulo.