GERAPLI es una herramienta de desarrollo de programas WEB, usando como base PHP. El concepto de GERAPLI es aprovechar todo lo que sea estático para disponer siempre del máximo de información, aportado un entorno homogéneo de ejecución y requiriendo menos trabajo de programación. La potencia de GERAPLI se basa en los datos aportados por las base de datos.
Los elementos que lo forman son los siguientes:
Tablas XXX - Una base de datos (XXX) está formada por n tablas, que pueden estar relacionadas entre si para aportar los datos requeridos por una aplicación. GERAPLI, puede trabajar aisladamente o en simultáneo con: SQLSERVER, ORACLE, ISERIES o MySQL.
Permite acceder a:
- Cualquier tabla de la base de datos, por defecto definida.
- A tablas de otras base de datos dentro del mismo motor. Por ejemplo, en SQLSERVER, a la base de datos GERAPLI y a MURANO (si se trata de
aplicaciones SAGE).- A tablas de base de datos de motores distintos, en simultaneo. Es decir, unas tablas pueden estar en ISERIES, otras en SQLSERVER y otras en MySQL.
GERAPLI accede a todas ellas respetando las características de cadas una de ella.
El acceso a tablas y base de datos de GERAPLI hace que sea un producto INTEGRADOR.
Campo - Cualquier campo de cualquier tabla que se tenga definida en la base de datos. Sobre ellos podremos fijar: ámbito, formula, descripción y fila.
Ámbito - Características comunes que definen como se tiene que tratar el campo. Por ejemplo, podemos tener un ambito fecha_dia (que indique que corresponde a una fecha, en el que el valor por defecto es la fecha actual), o un ámbito fecha (sin valor inicial, que pueda o no estar informada). Cualquier fecha de entrada compartirán el ambito fecha_dia, mientras que otras fechas que no tienen porqué estar inicializadas serán de ámbito fecha.
Fórmula - Especifica un sentencia SQL (formula) con la cual se puede obtener un valor. Permite disponer de campos calculados.
Accesos - Indica la forma de acceder de una tabla a otra. Ejemplo tabla de factura que contiene el nombre del proveedor, la forma de acceder a la información del proveedor es utilizando el nombre del mismo. Al definir el acceso de facturas a proveedores se consigue que cuando estamos en la información de una factura, podemos acceder a cualquier dato de su proveedor asociado.
Programa - Es un objeto en donde se indica sobre que tabla se va ha trabajar. A partir de esa información se tedrán disponible un conjunto de operaciones definidas en GENLISTA: alta, modificaciones, bajas, listado PDF, traspaso a EXCEL, filtros, configuración, etc. simplificando el desarrollo de los programas sencillos.
Configuración - Permite guardar las preferencias de ejecución de los programas. Para cualquier programa se guarda la última forma con la que el usuario trabajo. Se dispone de un botón restablecer para hacer un reset de la configuración.
Combinado - Es un objeto en el que se relacionan varias tablas para aportar operaciones más complejas. Ejemplo albaranes, facturas, apuntes contables, etc. Permite automatizar la realización de operaciones más complejas en relaciones 1 a n.
Descripción - Todo es multiidioma. Se dispone de una tabla final (xw_ddescri) en la que se pueden guardar las descripciones en los n idiomas que se utilicen en la aplicación.
Menús - Permite definir una jerarquía ilimitada de opciones a ejecutar.
Parámetros - Antes de ejecutar una opción de menú validar un conjunto de parámetros.
Desde GerAPLI podemos catalogar todas las tablas asociadas a la base de datos.
Las tablas que están asociadas a esta base de datos tienen los diferentes campos:
- Nombre: Podemos poner un nombre a la tabla
- Fecha de creación: Indica la fecha de creación de la tabla
- Descripción: Como os mostraremos a continuación, podemos poner una descripción de la tabla
- Tipo
- Versión
- Módulo
En la descripción podemos incluir una pequeña descripción del campo:
Aquí tenemos un ejemplo de una tabla SAGE con diferentes tablas:
En una base de datos tenemos tablas, las cuales tienen: una definición de datos (que es estática, siempre la misma) y unos valores (filas) que son variables y dinámicos. Las características de los campos que aportan las bases de datos son insuficiente, básicamente: tipo de campo (char, int, smalldatetime, etc), longitud, número de decimales y nombre. GERAPLI, permite asociar información adicional a cada campo aportándole mayor funcionalidad.
Sobre un campo se puede aportar los siguientes datos:
- Tabla. Nombre de la tabla a la que pertenece el campo. La tabla puede ser: nombre tabla física, nombre vista, nombre tabla virtual. Con esté último, por ejemplo, podremos seleccionar n campos de una tabla y gestionarlos sin tener que afectar al resto de campos de la tabla.
- Campo. Nombre del campo. Si es un campo físico de una tabla, ha de coincidir con el nombre del campo en la tabla dentro de la base de datos.
- Ámbito. Nombre del ámbito asociado, por defecto es @NO (ninguno).
- Descripción. Título identificativo del campo. Al referenciarse un campo aparecerá esta descripción o la que corresponda en su idioma, y si no está informada,
entonces se muestra el nombre del campo.
- Descripción multiidIoma. Dependiendo de los idiomas que se tengan definido a nivel global se podrá completar la descripción en otros idiomas.
- Fórmula. Permite asociar a un campo una fórmula (externa) definida, por defecto se asume @NO.
- Fila columna. En formato n.m, donde n es la fila, y m es la columna. Por defecto, se asume blanco o 0.0.
- Pestaña. Nombre de la pestaña que se le asocia el campo. Por defecto, asume blanco. En formato n.m, donde n es la fila, y m es la columna. Por defecto, se
asume blanco o 0.0.- Tipo. Tipo de campo, puede ser Universal (para todos), Delegación (para un país o proveedor de software) o Cliente (para un cliente en concreto).
- Seguridad. Está asociado a la seguridad de campo. Por defecto, es P (público). Para activar un código distinto se tiene que habilitar otro tipo de seguridad. Si
no es público (P). Permite que el campo sólo sea accesible a los usuarios que tengan asociado ese nivel de seguridad.- Módulo. Nombre del aplicativo al que pertenece.
Los campos al hacer alta o modificaciones se distribuyen por defecto "encolumnados" según el orden en el que se definieron, con Fila columna, podemos ir situando los campos en el orden, fila y columna deseados. Además se utilizamos Pestañas, podemos ir situándolos en distintas áreas, bloques o pestañas.
En el siguiente ejemplo, se muestran todos los campos de la tabla XW_MENU. Para cada uno de ellos se indica su ámbito, formula, descripción y fila asociada.
En el programa de CAMPOS disponemos del botón SINCRONIZA, que permite completar con valores por defecto, la tabla XW_CAMPO para todas las tablas de la base de datos. Es decir, si partimos de una base de datos con n tablas y m campo, al pulsar SINCRONIZA generará una entrada de todos los campos para poder amplificar su información en XW_CAMPO.
El concepto de Ámbito define las características comunes que caracterizan los campos de entrada. Un ámbito define un conjunto de parámetros configurables, como la obligatoriedad del campo o el conjunto de valores posibles, entre otros, que se aplican a uno o mas campos de la base de datos, y que permiten implementar de forma rápida y sencilla un campo de entrada.
Los campos a informar para definir un nuevo ámbito son los siguientes:
Nombre identificador único, alfanumérico de máximo 30 caracteres, por el que siempre identificaremos el ámbito.
Descripción alfanumérica con máximo de 50 caracteres que describirán el ámbito.
Este campo tiene una posible selección de SI o NO, si lo definimos como SI, el campo al que se le está aplicando éste ámbito será de entrada obligatorio.
Este parámetro definirá la visibilidad del campo para el que estamos aplicando el ámbito.
| Valor | Descripción |
|---|---|
| Si, siempre | El campo al que se le aplica el ámbito siempre será visible |
| Si, alta | El campo al que se le aplica el ámbito solo es visible en el alta |
| Si, modificación | El campo al que se le aplica el ámbito solo es visible en la modificación |
| Si, relación | El campo solo es visible cuando visualizamos el conjunto de registros en pantalla |
| Virtual alta | Campo al que se le aplica el ámbito. No existe en la base de datos y solo permitirá introducir un valor cuando estemos en una alta |
| Virtual | Campo al que se le aplica el ámbito. No existe en la base de datos y solo permitirá introducir un valor cuando estemos en una alta o modificación |
| No, alta | El campo no será visible cuando estemos en una alta |
| Oculto | El campo nunca será visible |
Este parámetro define la alineación del campo cuando visualizamos el conjunto de registros en pantalla.
| Valor | Descripción |
|---|---|
| Izquierda | Justificado a la izquierda |
| Centrado | Justificado en el centro |
| Derecha | Justificado a la derecha |
Los diferentes posibles tipos de campo son:
Este es el tipo de campo que utiliza la aplicación por defecto. Permite la entrada de cualquier tipo de valor y nos permite configurar en función de las diferentes propiedades que se pueden aplicar a un ámbito, anteriormente descritas.
Un campo de tipo búsqueda tiene como objetivo permitir al usuario seleccionar un valor de una tabla de registros. Con este campo permitimos al usuario, configurar de forma rápida y sencilla un potente buscador altamente para configurar. El valor del campo puede ser alfanumérico o numérico.
Para definir un campo de tipo búsqueda, le asignaremos un ámbito de tipo "Búsqueda" y en el campo de entrada con el nombre de "Iguala" especificaremos una serie de parámetros entre los siguientes:
| Parámetros | Descripción |
|---|---|
| @ANCHO_CAMPO | Valor numérico en pixeles del ancho del campo para el que estamos definiendo la búsqueda. |
| @ANEXO | Nombre del campo en la tabla de la base de datos de la que estamos configurando el buscador que aparecerá a modo informativo a la derecha del valor seleccionado. |
| @ANEXOAUX | Este parámetro nos permite asignar un segundo valor a otro campo de la pantalla al seleccionar un valor en el buscador. El formato será el siguiente: nombre del campo en la base d datos - nombre del campo en la pantalla |
| @ANCHO | Valor numérico en pixeles del ancho de la nueva ventana de búsqueda. Esto solo se aplicara si estamos definiendo una búsqueda d tipo NV. |
| @ALTO | Valor numérico en pixeles del alto de la nueva ventana de búsqueda. Esto solo se aplicara si estamos definiendo una búsqueda d tipo NV. |
| @ACTBUSCAR | Los posibles valores de este parámetro pueden ser S o N. Si lo configuramos a S, al tener activado este campo de búsqueda en un filtro superior del Genlista, al salir del campo se nos activara la búsqueda seleccionada. |
| @BUSQUEDA | Campos de la tabla donde se realizará la búsqueda. Se puede utilizar "NOMBRE_CAMPO.%A" si queremos que nos busque por solo lo que termine por la cadena introducida, o "NOMBRE_CAMPO.A%" si queremos que nos busque por solo lo que empiece por la cadena introducida. Esto solo se podrá utilizar siempre y cuando no estemos realizando una búsqueda asociada a un programa. |
| @CONDI | Este parámetro definirá una condición SQL sobre la tabla en la que estamos buscando que condicionara la selección de registros. |
| @DESPLEGA "S" | Los posibles valores de este campo son S o N, si su valor es S la búsqueda se desplegara automáticamente al dar una alta. Este parámetro solo estará disponible si estamos en una búsqueda que no es NV ni asociado a un programa externo. |
| @DESCRI | Este parámetros nos permite modificar las descripciones asociadas a un campo de la base de datos. El formato esperado es: nombre del campo en la base de datos, un guion y la descripción deseada. Este parámetro se podrá utilizar siempre y cuando no sea una búsqueda asociada a un programa externo. CAUXMA=Código,NOMBMA=Nombre,GERTITULO=Cuenta de auxiliar. |
| @ENLACE "S" | Este parámetro tiene como posibles valores S o N, si su valore es S, cuando se seleccione un valor se actualizara el contenido de la pagina. |
| @GROUPBY | Este parámetro nos permite definir la parte de la sentencia SQL para agrupar los valores de la selección. |
| @INPUT | Este parámetro tiene como posibles valores S o N, si introducimos una N no nos aparecerá en pantalla el campo del tipo búsqueda solo nos mostrara la lupa para buscarlo y el valor anexo asociado a él. |
| @LISTA | Este parámetro nos permite definir que campos de la tabla de la base de datos se mostraran en la consulta de búsqueda. Los campos serán separados por comas. |
| @MOSTRAR_CAMP | Este parámetro se utiliza si queremos condicionar la aparición de un campo en la pantalla en función del valor seleccionado en el campo del buscador. En él se define el nombre del campo cual será condicionada su aparición. |
| @MOSTRAR_COND | Al igual que el parámetro anterior, este parámetro se utiliza si queremos condicionar la aparición de un campo en la pantalla en función del valor seleccionado en el campo del buscador. Define la condición de aparición del campo que estamos condicionando con @MOSTRAR_CAMP |
| @PG | Al definir este parámetro nos condiciona la interface de búsqueda a la ejecución de un programa Genlista que nos servirá de interfaces para realizar la búsqueda deseada. Con ello obtenemos un mayor potencial en la búsqueda ya que podemos configurar el buscador con todos los parámetros configurables en un programa Genlista. Hay que tener en cuenta que el nombre del programa que aquí definamos tendrá que existir en la definición de programa de Gerapli. Este programa que hagamos definido en Gerapli, tendremos que activar en el campo características la condición '@WINFRAME:Gerbuscador'. |
| @PGMTO | Al definir este parámetro nos permite acceder a un programa externo para gestionar el mantenimiento de la tabla asociada al programa definido en '@PG'. Este programa que hagamos definido en Gerapli, tendremos que activar en el campo características la condición '@WINFRAME:Gerbuscador'. Para poder activar este parámetro tenemos que tener activado el parámetro '@PG'. |
| @RETORNA | Este parámetro nos define el campo de la tabla de la base de datos, que queremos devolver al campo para el que estamos definiendo el buscador. Al seleccionar un registro del buscador, se nos informará el valor de este campo en la pantalla. |
| @TABLA | Define el nombre de la tabla en la que se realizará la búsqueda. |
| @TIPO | Este parámetro tiene como posible valor 'NV'. Si se informa con el valor 'NV' la búsqueda se abrirá en una nueva ventana. Este parámetro invalida el permitir abrir la búsqueda en un programa externo con el parámetro '@PG'. Si lo abrimos en un nuevo programa, este parámetro no se puede informar. |
El ámbito de tipo base de datos está pensado para permitir la introducción de código SQL en las sintaxis concretas para diferentes tipos de base de datos soportadas por el entorno Gerapli.
Para definir un campo de tipo base de datos el formato a utilizar ha de ser el siguiente:
Se tendrán que definir cuatro campos en la tabla, todos ellos con el mismo nombre a diferencia de su terminación, que será 1, 2, 3 y 4 respectivamente. En las consultas de GERAPLI, se activarán en función de la configuración definida en la opción de Base de datos disponible en el menú Gerapli. Si solo tenemos activada, por un ejemplo, el tipo de base de datos SQL Server en la primera posición, solo será visible el primer campo. Serán visibles todos los campos que coincidan con las definiciones de base de datos activadas en la opción de Base de datos.
Cuando definimos un campo de tipo calculado este no podrá ser modificado ni dado de alta, solo podrá ser visualizado en la pantalla de visualización de registros.
Este ámbito esta pensado para ser utilizado sobre campos calculados de la base de datos, donde no nos interesa realizar ninguna interacción sobre ello.
Para definir un campo de tipo color se tiene que definir en la base de datos como un campo alfanumérico de 10 caracteres. El formato interno del campo será #rrggbb, valor hexadecimal del color en 'R G B'. Al definir un campo de tipo "Color" en la pantalla de modificación y alta nos aparecerá un buscador donde nos permitirá seleccionar el color deseado o introducir su código exadecimal manualmente.
En la visualización de los registros de la tabla donde estamos aplicando el ámbito, se mostrara el propio color en cada una de las filas en vez de su código exadecimal.
El color puede ser seleccionado o se puede escribir su valor en #rrggbb.
El tipo de ámbito "desagrupado" se utiliza cuando en la base de datos tenemos un campo que ns interesa fragmentarlo en su interfaces de entrada. Si seleccionamos que un campo sea 'desagrupado' y no le asignamos ninguna propiedad al formato, Gerapli divide el campo en tantos subcampos de entrada como caracteres de longitud máxima tenga el campo en la base de datos o en la definición del parámetro.
Ejemplo:
Si nos interesa dividir el campo de entrada en una combinación de caracteres personal, o con algún tipo de separador podemos hacerlo fijándole los siguientes parámetros en el formato:
@CAMPOS Relación de campos, con el conjunto de caracteres que aparece en cada caso.
- Ejemplo: @DESCRIS:,-,-; En el primer campo no pondrá separador, en el segundo un guión y en el tercero otro guión. @SEPCAMPOS Utilizar un guión como separador de campos.
El ámbito de tipo "enlace" se utiliza para campos de tipo alfanumérico que nos interesa que al modificar su valor en la pantalla se actualice el resto de campos que estamos visualizando.
Utilizamos los campo de tipo "fecha" cuando nos interesa almacenar una fecha en un campo de la base de datos. Este ámbito por defecto nos asocia un calendario al capo de entrada para facilitar la selección al usuario. En la base de datos se define como un campo alfanumérico de diez caracteres y el formato grabado por defecto en el campo de la base de datos es: AAAA/MM/DD.
Los formatos de entrada posibles son los siguientes:
| Formato | Ejemplo |
|---|---|
| AAAA/MM/DD | 2016/07/10 |
| DD/MM/AAAA | 10/07/2016 |
| AA/MM/DD | 16/07/10 |
| DD/MM/AA | 10/07/16 |
| AAAA-MM-DD | 2016-07-10 |
| DD-MM-AAAA | 10-07-2016 |
| AA-MM-DD | 16-07-10 |
| DD-MM-AA | 10-07-16 |
SI en el campo de entrada del ámbito con nombre "Condicionado" introducimos el valor "@NUMERO", la fecha en la base de datos, en vez de ser guardada en formato AAAA/MM/DD se guardará con el formato numérico AAAAMMDD.
Si en el campo de entrada con nombre "Valor defecto" introducimos el valor "@FECHA" el campo por defecto asumirá el valor de la fecha actual en el formato especificado.
En valor por defecto se le puede indicar @FECHA, en cuyo caso asume la fecha del día actual.
Es un campo fecha que internamente (en la base de datos) se guarda como numérico en formato SAAMM (S: siglo 0-1900 1:2000, AA Año-2 último dígitos, MM- Número del mes). El Formato se escoge en el campo FORMATO del ámbito, aunque su valor por defecto es AAAA-MM.
Los formatos de entrada posibles son los siguientes:
| Formato | Ejemplo |
|---|---|
| AAAA-MM | 2016-07 |
| AAAA/MM | 2016/07 |
| MM-AAAA | 07-2016 |
| MM/AAAA | 07/2016 |
Es un campo fecha que internamente (en la base de datos) se guarda como numérico en formato SAAMMDD (S:siglo 0-1900 1:2000, AA Año-2 último dígitos, MM- Número del mes, DD-Número del día). El Formato se escoge en el campo FORMATO del ámbito, aunque su valor por defecto es AAAA-MM-DD.
Los formatos de entrada posibles son los siguientes:
| Formato | Ejemplo |
|---|---|
| AAAA-MM-DD | 2016-07-10 |
| AAAA/MM/DD | 2016/07/10 |
| AA-MM-DD | 16-07-10 |
| AA/MM/DD | 16/07/10 |
| AA/MM/DD | 16/07/10 |
| DD-MM-AAAA | 10-07-2016 |
| DD/MM/AAAA | 10/07/2016 |
| DD-MM-AA | 10-07-16 |
| DD/MM/AA | 10/07/16 |
En Gerapli, por defecto, los campos que definamos en la base de datos con un formato determinado son reconocidos por el aplicativo como un fichero y nos permite trabajar como tal con ellos.
El formato esperado por Gerapli en la base de datos para que este lo reconozca como un campo de tipo Fichero, lo mostramos a continuación con el siguiente ejemplo:
Para guardar un fichero en la base de datos con el nombre DOCUMENTO se tienen que definir los siguientes tres campos:
Definiendo un campo en la base de datos con esta nomenclatura Gerapli automáticamente nos lo reconocerá como un campo de tipo Fichero.
Un campo de tipo "Google map" es aquel que nos permite mostrar la dirección en un mapa Google. Para ello hemos de definir 3 campos: uno principal (alfanumérico de 1 carácter) que ha contener el ámbito con tipo 'google map' y dos con sufijo LAT y LNG de tipo dec(18,8) que contendrán las coordenadas, latitud/longitud de la dirección:
El ámbito asociado al campo principal determinará sobre que campos se calcula la dirección.
Posibles parámetros de un campo 'Google map':
@TIPO @AUTOMATICO/@MANUAL. Determina la forma de informar los campos de longitud y latitud de la dirección. Por defecto, es automática. Si se incluye ambas el usuario final podrá escoger. @ORIGEN Conjunto de campos sobre los que se calculará la dirección, si el tipo es automático, en el siguiente ejemplo: DIRECCIÓN, PROVINCIA y PAÍS. @NOMBRE Nombre que aparecerá al pulsar sobre la dirección localizada en el mapa Google. @ZOOM Zoom de visualización del mapa al mostrar la dirección.
Cuando definimos un campo de tipo "Grupo local" Gerapli automáticamente nos muestra un formato de entrada agrupado a todos los valores que contiene este campo en la tabla y nos permite que el usuario entrar un nuevo valor para el campo.
Los campos de tipo hora se utilizan cuando nos interesa guardar una hora en formato numérico en la base de datos. Esta hora será guardara en minutos y permitirá ser ordenada en la base de datos.
Este formato nos presenta un formato de entrada en pantalla con un desplegable, por defecto, si no definimos nada más, nos muestra un desplegable con horas disponibles de 6 de la mañana a 10 de la noche con un intervalo de 15 minutos entre hora y hora.
El el campo 'Iguala' en la definición del ámbito nos permite definir los siguientes parámetros para configurar este tipo de ámbito:
Un campo de tipo "Idioma" será solicitado en pantalla únicamente si su idioma asociado está activo en la tabla XW_IDIOMAS (tabla que establece de manera global los idiomas permitidos). Esto significa que podemos tener definidos n campos: DESCRIPCIÓN, DESCRIPCIÓN, DESCRIPCIÓN, DESCRIPCIÓN, DESCRIPCIÓN, DESCRIPCIÓN, DESCRIPCIÓN, DESCRIPCIÓN, correspondientes a los idiomas: Español, Inglés, Francés, Portugués, Catalán, Alemán, Italiano, Ruso, de manera dinámica sólo se solicitan por pantalla aquellos cuyos idiomas estén ACTIVOS.
Veamos ejemplo, en la tabla XW_MENU tenemos definidos los campos DESCRIPCIÓN.. DESCRIPCIÓN todos con el ámbito TIDIOMA, correspondiente a un tipo de campo IDIOMA.
Esto significará que si sólo se tiene definido los idiomas: ESPAÑOL y CATALÁN, únicamente se piden estás descripción y no el resto de idiomas. Pero si se pone ACTIVO otros idiomas, por ejemplo: INGLES, FRANCÉS y PORTUGUÉS, entonces automáticamente nos pasa a solicitar los nuevos idiomas activados.
Lo vemos con un ejemplo gráfico:
Al crear el campo IDIOMA se utiliza el carácter numérico del idioma: DESCRIPCIÓN.. DESCRIPCIÓN con las mismas características de creación, asociándola el mismo ÁMBITO, de tipo IDIOMA (IDI).
Un campo de tipo "Tipo imagen" permite la entrada de cualquier fichero, gráficos, externo. Para su correcto funcionamiento se tiene que definir el campo como IMAGEN y tener creado 2 campos adicionales con el mismo nombre, pero con prefijos SIZE (int) y TIPO (char(20)), de esta forma se conoce siempre su longitud y el tipo de fichero incorporado.
Veamos un ejemplo de creación de IMAGEN (en vez de CAMPO se puede poner cualquier nombre de variable): CAMPO_SIZE int CAMPO_TIPO char(20) CAMPO image
También se permite guardar de forma automática una miniatura de la imagen y un tamaño más grande que serán configurables.
Para esto, tendremos que definir en la base de datos: CAMPO_MIN image CAMPO_MAX image
La imagen "CAMPOMIN" será la que se muestre en miniatura en la lista de registros, el tamaño de esta será el que se haya puesto en la configuración. La imagen "CAMPOMAX" será la que se muestre en miniatura en la pantalla de modificación de registros, el tamaño de esta será el que se haya puesto en la configuración. Para asignar un campo como imagen, tenemos que asignar un ámbito de tipo "Imagen".
Veamos un ejemplo de foto de empleado:
Sólo se le indica el ámbito al campo principal, en este caso FOTO (IMAGEN), el resto de campos asociados con prefijo MIN, MAX, SIZE, TIPO son asumidos por defecto. En el ámbito IMAGEN en el campo IGUALA se indica con que tamaños se quiere mostrar la FOTO.
Posibles parámetros:
Si dejamos alto /ancho sin definir en alguno de los parámetros, lo hará proporcional.
El objetivo del campo de tipo "Lista doble" es poder seleccionar y guardar varios valores en un único campo. Para definir un campo de este tipo tenemos que seleccionar el tipo "Lista doble" y los valores a mostrar se pueden sacar de una selección a la base de datos o de un conjunto de valores definidos por el usuario.
Tanto el la selección a la base datos como la posible introducción de valores del usuario se han de informar en el campo "Igual a" del ámbito".
Cuando definimos un ámbito de tipo "Número" solo se nos permite entrar caracteres numéricos del 0 al 9.
Por defecto el formato mostrado es 999,00 siendo ,00 la parte correspondiente a los decimales que tenga. Se tiene disponible formato: '999,999', '999.999','999,00','999.00' que corresponde a NN.NNN,DD, siendo PCZ no mostrar a blanco el valor 0.
Veamos un ejemplo:
| Formato | Descripción | Ejemplo |
|---|---|---|
| 999 | Campo entero no decimal | 14500 |
| 999.999 | Campo entero no decimal con el punto como separador de miles | 14.500 |
| 999,999 | Campo entero no decimal con la coma como separador de miles | 14,500 |
| 999.00 | Campo decimal con el punto como separador de decimales | 14500.25 |
| 999,00 | Campo decimal con la coma como separador de decimales | 14500,25 |
| 999,999.00 | Campo decimal con el punto como separador de decimales y la coma como separador de miles | 14,500.25 |
| 999.999,00 | Campo decimal con la coma como separador de decimales y el punto como separador de miles | 14.500,25 |
Cuando definimos un campo de tipo "Password" su contenido se guarda encriptado en la base de datos.
Los ámbitos de tipo "Secuencia" se utilizan para definir en un campo un valor numérico auto incrementar. Una vez definida la secuencia, Gerapli asignará automáticamente el valor numérico que corresponda en este momento.
Los posibles parámetros para definir una secuencia, que se informarán en el campo "Iguala" del ámbito, son los siguientes:
| Parámetro | Descripción |
|---|---|
| @TABLA | Nombre de la tabla dónde se obtendrá la secuencia |
| @CAMPO | Nombre del campo de la tabla de dónde se obtendrá el valor de la secuencia |
| @WHERE | Condición en lenguaje SQL que condicionará la ejecución de la secuencia |
| @GROUPBY | Definición de la posible agrupación en lenguaje SQL que definirá la ejecución de la secuencia |
| @MODI | Sus posibles valores son S o N, si el valor es S, se actualizará el valor del campo que estamos aplicando al realizar una modificación. |
| @INCRE | Valor numérico en que se incrementará cada valor en la secuencia |
| @TIPO | Su posible valor es A y si vale A es que la secuencia es de valores Alfanuméricos |
| @INICIO | Valor numérico en el que se iniciará la secuencia |
| @FORMATO | Su posible valor es "99". Con este valor la secuencia siempre tendrá un mínimo de dos carácteres. |
Los campos de tipo "Text área" sirven para albergar un gran contenido texto Alfanumérico. El campo de entrada por defecto es multilínea.
Los posibles parámetros para definir en un "Text área", que se informarán en el campo "Iguala" del ámbito, son los siguientes:
| Parámetro | Descripción |
|---|---|
| @ANCHO | Número de caracteres que definirá el ancho del campo de entrada. |
| @ALTO | Número de filas del campo de entrada |
| @LONGITUD | Número total de caracteres que se podrán introducir dentro del campo. |
| @FUENTE_PROPORCIONAL | Los posibles valores de este campo pueden ser S o N. Si el valor es S la fuente de entrada será proporcional y se producirán saltos de línea automáticos al final de cada línea. |
Cuando se define un campo de tipo "Variable" nuestro objetivo es permitir en un solo campo de la base de datos el almacenamiento de N filas en la que cada una de las filas puede tener hasta dos valores.
Los posibles parámetros para definir en un ámbito de tipo "Variable", que se informarán en el campo "Iguala" del ámbito, son los siguientes:
| Parámetro | Descripción |
|---|---|
| @DEFECTO1 | Valor por defecto del primer campo de selección |
| @VALOR1 | Sentencia de selección en lenguaje SQL de los campos de la primera selección |
| @TIPO2 | Los posibles valores para este campo son RI o N. El campo de entrada del segundo valor sera un campo Radiobutton y si es N será un nuevo campo numérico. |
| @LONGI2 | Número de caracteres del segundo campo de entrada |
| @ANCHO2 | Número de pixels del segundo campo de entrada |
| @MAXIMO | Número máximo de posibles campos de entrada |
| @TOTAL | Posible valor es S o N, si es S totaliza en tiempo real la segunda columna de entrada |
Este parámetro nos define si se realizará una modificación en el contenido del campo antes de guardarlo en la base de datos.
Sus posibles valores son:
| Parámetro | Descripción |
|---|---|
| @NO | Valor por defecto: no se aplica ninguna conversión |
| Mayúsculas | Se aplicará una conversión a Mayúsculas en el contenido introducido en el campo |
| Minúsculas | Se aplicará una conversión a Minúscula en el contenido introducido en el campo |
| HTML | Se convertirán los caracteres especiales en caracteres codificados en HTML |
Define la configuración de entrada o salida del campo. En cada tipo de ámbito es utilizado de distinta manera como ya hemos explicado anteriormente.
Define el valor que tendrá el campo por defecto al dar una nueva alta.
El campo iguala contiene las principales características del ámbito. En función del tipo de ámbito seleccionado este campo puede contener una u otras características en función del tipo de ámbito seleccionado.
Este campo puede ser informado con una sentencia SQL de selección a la base de datos y los registros obtenidos serán mostrados en una lista de selección. La sentencia SQL de selección a la base de datos tiene que tener el siguiente formato:
| Tabla | Descripción |
|---|---|
| select CAMPO from TABLA | La lista de selección tendrá el mismo valor y descripción. |
| SELECT CAMPO1+'%c'+CAMPO2 from TABLA | La lista de selección tendrá como valor el CAMPO1 y como descripción el CAMPO2 |
El ámbito de tipo "Condicionado" permite condicionar acciones sobre campos, dependiendo de las condiciones en la que nos encontremos y las que se les haya indicado.
Añadir en el valor de "Condicionado" del atributo que queremos condicionar su aparición en pantalla. Afecta tanto a su descripción como a su valor. Aparecerá o desaparecerá en función de que se cumpla condición indicada (similar a parte de where de una sentencia sql).
Posible parámetros: @CAMPO Campo que condicionará la aparición del campo para el que estamos definiendo el ámbito en pantalla. @CONDI Condición para hacer aparecer el campo para el que estamos.
Ejemplo: El campo aparecerá sólo sí TIPOPR=1 or TIPOPR=5
Añadir en el valor de "Condicionado" del atributo que queremos condicionar su aparición en pantalla una sentencia SQL que devuelva en un campo con nombre CONTADOR un número, que se comparará con la condición introducida.
Posible parámetros: @SQL_CONDI_MODI Sentencia SQL que devuelve un número de registros en la variable CONTADOR . @PERMITIR_MODI Condición de comparación con el número de registros del SQL anterior, que condicionará la aparición del campo.
Ejemplo: Permitir la modificación de un campo si se cumple que el valor de CONTADOR es > 100, siendo CONTADOR -> select count(*) as CONTADOR from xw_usuarios.
Añadir en el valor de "Condicionado" del atributo que queremos condicionar la propiedad "@NO_VISMODI:S;" para indicar que no permitiremos su modificación ni su visualización.
Si bien internamente nos guardamos un código (ejemplo, ME-Entrada mañana/MS-Salida mañana/TE-Entrada tarde/..), al mostrar el campo nos interesa que aparezca la descripción asociada. Esto se consigue CONDICIONADO el ámbito con @LISTA_DESCRI:S.
Ejemplo:
Si se quiere poner un gráfico en un PDF existe el límite de que ha de ser de tipo JPG o PNG limitado a 256 colores. Se permiten transparencia pero no el uso de color verdadero. Para pasar un PNG de color verdadero a 256 colores, basta abrir el PNG con photoed.exe y salvarlo en opción avanzadas limitado a 256. Como el usuario no suele ser consciente de esta limitación en el campo GRAFICO hay que asociarle un AMBITO de tipo GRÁFICO que tenga como condicionado @PNG256. Genlista comprobará automáticamente que si es PNG no supere los 256 colores, evitando problemas posteriores.
Muchas veces es conveniente poner valor por defecto a campos, aunque el usuario final pueda modificarlos. Los valores por defecto, los podremos poner como valor fijo o como sentencias sql que aportan un valor. En ambos casos, hay que definir un AMBITO, con un valor en CONDICIONADO que lo indique. Veamos varios ejemplos:
| Valor CONDICIONADO | Descripción |
|---|---|
| @DEFECTO:SELECT BIC FROM M_EXTRACTOS_BAN WHERE CODIGO='$AICLEN$' | Ejecuta la sentecia SQL y aporta el valor de BIC |
| @DEFECTO:Cobro | El campo valdrá: Cobro |
@BGCOLOR: Añadir el atributo @BGCOLOR en el campo "Condicionado" para poner color en un campo según su valor, en la pantalla de LISTA (relación de registros). Ejemplo: @BGCOLOR:S-#669933,Nacional-#669933,N-#E4080A,No-#E4080A,A-#FFA200,No enviada-#FFA200;@BGCOLOR-MTO:SI;
@BGCOLOR-MTO:SI : Añadir el atributo "BGCOLOR-MTO:SI" para poner el color en la pantalla de MTO (al editar/visualizar un registro) definidos en el atributo "@BGCOLOR"
Utilizamos el parámetro "Rutina de entrada" cuando queremos tener el control total del campo y optamos por la opción de implementarlo en una rutina externa.
Este parámetro será informado con el siguiente formato:
m_rutina.inc nombre_funcion
Donde "m_rutina.inc" es el nombre del fuente donde irá buscar el campo de entrada y "nombre_funcion" será la función que ejecutará dentro del fuente que contendrá la implementación del campo.
El nombre del campo de entrada implementado tendrá que ser igual al nombre del campo en la base de datos con el prefijo "C_".
Ejemplo:
Si el nombre del campo en la base de datos es "CODIGO" el nombre del campo que implementaremos será "C_CODIGO".
El parámetro módulo tiene como objetivo clasificar internamente los ámbitos en función de la aplicación para el que esté definido.
En este parámetro definiremos posibles propiedades comunes para toda la definición del programa.
En la siguiente tabla se detallan cada una de ellas:
| Parámetro | Descripción |
|---|---|
| @ALTO_COL_FIJO | |
| @ANCHO_DESCRI | |
| @ANCHO_CAMPO | |
| @BOTONESINF | |
| @CABE_RUTA | Este parámetro especifica una rutina PHP por si nos interesa mostrar algo específico antes del alta modificación de consulta. |
| @COLUMNAS_RELEVANTES | En este parámetro definimos los campos de la tabla de la base de datos que nos interesa destacar de la consulta de registros. Se mostrarán negrita. |
| @CSS | Nos permite cargar una hoja de estilos CSS específica para la totalidad del programa. Con ello podemos modificar la apariencia de este programa en concreto. |
| @CONTORNO | |
| @COLOR_CABECERA | |
| @COLOR_LISTA1 | |
| @COLOR_LISTA2 | |
| @FILTRO | Este parámetro nos definirán los campos que aparecerán en la parte superior de los registros para poder filtrar de forma rápida sin tener que ir a la opción específica de filtros. El formato en el que se ha de especificar este parámetro es el siguiente: Nombre del campo-fila-columna-longitud en caracteres. Los diferentes campos se tendrán que separar por comas. La longitud del campo es opcional. Ejemplo: @FILTRO:CODIGO-1-1-20,NOMBRE-1-2-25; |
| @GERSINCRO | Este parámetro nos permite sincronizar el contenido de la tabla del programa entre dos servidores distintos. Los parámetros de configuración tendrán que ser informados en el fichero entorno. |
| @LATERALES_EX | Este parámetro especifica el número de los botones laterales separados por coma que nos interesa mostrar en la modificación o consulta. |
| @LATERAL_PESTA | |
| @LATERAL_PESTAEX | |
| @MTOVENTANA | |
| @MODIFILTROSQL | Por defecto, Gerapli no nos permite modificar los campos de la tabla que están incluidos en la condición de filtraje del programa. Con este parámetro informamos separados por comas los campos de la tabla que nos interesa permitir modificar todo y que estén en la condición de filtraje. |
| @NOFOCUSINICIAL | |
| @NOCHECK | Eliminar el botón de CHECK asociado a la fila. |
| @NUEVA_TABLA | FILA-PESTAÑA,FILA2-PESTAÑA2-... Hace el reset de tabla a partir de la fila indicada en la pestaña, si no se le indica -n sobre la principal |
| @PESTA_ANCHO | |
| @PESTA_ALTO | |
| @PESTA_TOP | |
| @PESTAINI | |
| @QUITAR_BARRA_SUPERIOR | |
| @ROWID | |
| @RESETFILTROS | |
| @REFRESCAR | |
| @SCROLL | Este parámetro nos permite definir un numero específico de filas por página en la consulta de registros de éste programa. Este número de filas prevalecerá al que tenga especificado el usuario. |
| @TOTALSEL | Conforme se van seleccionado filas en GENLISTA, se va aportando el acumulado del campo que se le indique. Ejemplo: @TOTALSEL:IMPORTE nos muestra en pantalla el acumulado del IMPORTE de las filas seleccionadas |
| @WINFRAME |
En una base de datos tenemos tablas, las cuales tienen: una definición de datos (que es estática, siempre la misma) y unos valores (filas) que son variables y dinámicos. Las características de los campos que aportan las bases de datos son insuficiente, básicamente: tipo de campo (char, int, smalldatetime, etc), longitud, número de decimales y nombre. GERAPLI, asocia a cada definición de campo de una tabla información adicional (por ejemplo en SQLSERVER obtenida de syscolumns, se vincula con la tabla xw_dcampo).
Así cada campo de cualquier tabla puede indicar sus variables comunes:
GERPERFIL ugestor GERWEB arquera, tig, gersoft GEREMPRESA GERIDIOMA ES / IN / CA/ AL / PT /RU/IT
Asegurarse que se tiene acceso correctamente definido, es decir, se tiene informado: GERUSER, GERPASS, GERWEB.
Cuando se realiza una operación de alta, modificación ó baja, podemos asociar una función que se ejecute antes o después de la operación. Esto nos permitirá mantener la integridad de los datos, sin necesidad de utilizar trigger. Ejemplo, queremos borrar un cliente, pues antes de borrarlo, comprobamos que no existan pedidos asociados a ese cliente. Si existen cancelamos el borrado y aportamos el correspondiente mensaje de error.
Las rutinas de PRE y POST se asocian sobre las operaciones Alta / Modifica / Baja, utilizando el siguiente formato: ¡!rutina.inc funcion
¡ (admiración abierta), PRE, se ejecuta antes de la operación. ! (admiración cerrada), POST, se ejecuta tras realizar la operación. rutina.inc Nombre rutina que contiene las funciones. La idea es no tener cada función en un .inc, sino compartirlas, es decir, tener múltiples funciones en un solo .inc. función Nombre de la función a ejecutar.
En el siguiente ejemplo, la Baja está permitida y se le asocia: ¡l_rutinas.inc Baja_acti Es decir, al intentar dar de baja un registro de la tabla l_agenda_activadad, antes de borrar el registro se ejecuta la rutina Baja_acti de l_rutinas.inc:
Veamos el fuente de l_rutinas.inc:
Desde el entorno se podrá llamar a cualquier programa externo. Pero para unificar desarrollos es interesante seguir unas mínimas normas:
El directorio de acceso web estará fijado en el servidor WEB por la variable de entorno WWW_ROOT. Es decir, el punto de inicio web se podrá poner en cualquier parte del servidor WEB, pero tiene que está informado en la variable de entorno global www_root.
Veamos unos ejemplos:
Servidor aplicaciones web 1. Directorio inicio d:\web por tanto, WWW_ROOT=D:\WEB Servidor aplicaciones web 2. Directorio inicio e:\web_publica por tanto WWW_ROOT=e:\web_publica
Directorios por defecto:
\config - Ficheros de configuración y ejecutables requeridos en entorno web. \ufweb\phx - Objetos compilados de php distribuibles en instalación del cliente. \ufweb\graficos - Incluye todos los gráficos básicos requeridos en la aplicación. \ufweb\uweb\ayudas - Ayudas de la aplicación \ufweb\uweb\css - Estilos de la aplicación (se generán automáticamente) \ufweb\uweb\noticias - Noticias en disco de la aplicación. \ufweb\uweb\template - Plantillas de la aplicación. \ufweb\uweb\graficos - Gráficos específicos de la aplicación. \ufweb\uweb\ficheros - Ficheros de la aplicación.
Si los desarrollos están hechos en PHP hemos de tener en cuenta que este lenguaje siempre es interpretado, por lo que inicialmente se tendría que aportar todos los fuentes de programas en la instalación del cliente FINAL. Esto puede ser conveniente en unos clientes y en otros no.
Por ello se recomienda en todos los programas .php incluir al inicio las siguientes líneas:
Cambiando la variable de entorno WWW_GERPHX a 1 en \config\entorno.ini, indicaremos que toda la ejecución de programa se hace encriptada, en cambio si vale WWWW_GERPHX 0 ó no está definida, entonces se ejecuta desencriptada.
Mecanismos para proteger el software php:
Cualquier programa php que quiera incluir un programa .inc o .php ha de contemplar la posibilidad de que sea en modo encriptado o normal.
Veamos un ejemplo de cómo hacerlo:
Al inicio del módulo .inc/.php incorporado de ha de incluir una primera línea que borre el programa desencriptado.
Veamos las primeras líneas del módulo s_docu_comun.inc
El primer programa si estamos en modo desencriptado, carga s_docu_comun.inc, pero si estamos en modo encriptado, entonces, informa una variable $nombre con el programa ..\phx\s_docu_comun.inx Descomprimido, tras cargase, la primera instrucción que ejecuta es unlink($nombre), que borrará el fuente del programa desencriptado.
El entorno es, por definición, multibase de datos. Es decir, se puede ejecutar los mismo en distintas base de datos. Las soportadas inicialmente son: SQLSERVER, ORACLE, MYSQL y DB/400. La conexión nos está asegurando la validación correcta de usuario/password, la ip desde donde se ejecuta, la sesión asignada, etc.
El entorno es, por definición, multiidioma. Es decir, trabaja indistinto en n idiomas en simultáneo. Si el usuario escoge idioma francés, todos los literales, mensajes, menús, etc han de estar en francés, pero si cambia a inglés, todo se ha de ver correcto en inglés. El idioma se guarda en $_POST[GERDIOMA]. Para tener en cuenta esto en el desarrollo de programa todos los literales se tendrían que obtener de la rutina: ger_tradu, que aporta el mensaje correcto en el idioma que corresponda.
Veamos un ejemplo:
Los parámetros de la rutina ger_tradu son:
recomienda utilizar un código comodín para hacer la traducción en otro momento. Ejemplo: #99999 al revisar la traducción se buscan todos los codigo #99999 y se dejan bien.
Para una ejecución más rápida se pueden poner los distintos mensajes traducidos en la llamada a la rutina. Pero si no están puesto en su idioma, el sistema accede por el código de mensaje y aporta el que corresponda en su idioma. Exteriorizar los mensajes permite que no se tengan que tocar los programas a aportar el aplicativo en un idioma u otro.
La tabla que contiene los mensajes y sus traducciones es xw_ddescri, de la cual se aporta su completo mantenimiento.
Son aquellas variables que permite configurar la ejecución de una aplicación para WEB/EMPRESA. Están disponibles, en el menú de administración apartado entorno.
Veamos un ejemplo:
Para generar directamente un PDF desde programa se tiene que hacer el siguiente include:
Dentro de GERAPLI/PROGRAMAS seleccionar el programa afectado, ir al campo CARACTERISTICAS e incluir @NOCHECK;.