//////////////////////////////////////////////////////////////////////////////// Copyright 2013, 2014, 2015, 2017, 2019 Newport Software Technologies, UNICEN This file is part of XGAP. XGAP is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. XGAP is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with XGAP. If not, see . //////////////////////////////////////////////////////////////////////////////// :encoding: utf-8 = Código extra en las páginas generadas = :lang: es :toc: :imagesdir: ../img/ :icons: :iconsdir: ../img/icons :ascii-ids: El elemento `codigoExtra/codigo` permite definir código a incluir en las páginas generadas. El atributo `@tipo` indica el tipo de código; puede ser `HTML`, `PHP` o `JAVASCRIPT`. El atributo `@ubicacion` indica la ubicación dentro de la página donde se debe emitir el código; más adelante se encuentran listadas todas las ubicaciones disponibles para cada tipo de página. En el caso de `@tipo="PHP"`, el código se emite dentro de una función que se define al comienzo de la página y se invoca en la ubicación indicada; esta función recibe un único parámetro `$params`, el cual es un array que contiene los pares `clave=>valor` indicados en la columna ``Parámetros'' de los listados de ubicaciones. Dado que el código extra no tiene alcance global, no es necesario preocuparse por modificar inadvertidamente el valor de alguna variable usada por XGAP. .Ejemplo de uso de código extra ==== [source,xml] ---- Esto va al inicio de la pagina. ]]> obtenerPrimero($sql); // $params['titulo'] es un parámetro provisto para esta ubicación $params['titulo'] .= ' en ' . XGAP_CONF_APLICACION . " | $descseccion"; ]]> ---- ==== == Ubicaciones == Posibles valores para `codigoExtra/codigo/@ubicacion`. [[codigoextra_ubicacion_todos]] === En todos los tipos de página === [options="header,autowidth",cols="`) |`Conexion 'conexion'` + `HistorialNavegacion 'historial'` |l, s, sm |en_head |Antes de generar el elemento `head`. Lo que se emite a la salida se incluye dentro del head. |- |l, s, sm |inicio_body |Justo después de abrir el elemento `body` |`Conexion 'conexion'` + `HistorialNavegacion 'historial'` + `boolean 'pagina_simple'` |l, s, sm |fin_body |Justo antes de cerrar el elemento `body` |`Conexion 'conexion'` + `boolean 'pagina_simple'` |l, s, sm |despues_abrir_estructura |Justo después de abrir la estructura de la página (al comienzo del contenedor principal) |`Conexion 'conexion'` + `HistorialNavegacion 'historial'` + `Flash 'flash'` + `boolean 'pagina_simple'` |l, s, sm |antes_cerrar_estructura |Justo antes de cerrar la estructura de la página (al final del contenedor principal) |`Conexion 'conexion'` + `HistorialNavegacion 'historial'` + `boolean 'pagina_simple'` |l, s, sm |antes_tabla_datos |Justo antes de abrir la tabla principal del listado |`Conexion 'conexion'` + `string 'id_tabla'` |l, s, sm, mi |despues_tabla_datos |Justo después de cerrar la tabla principal del listado |`Conexion 'conexion'` + `string 'id_tabla'` |l, s, sm, mi |inicio_celda_encabezado |Justo después de abrir una celda del encabezado de la tabla principal |`Conexion 'conexion'` + `string 'dato'` + `string &'valor_a_mostrar'` (XGAP ≥ r2.16.0.568) |l, s, sm, mi |fin_celda_encabezado |Justo antes de cerrar una celda del encabezado de la tabla principal |`Conexion 'conexion'` + `string 'dato'` |l, s, sm, mi |antes_fila_datos |Antes de abrir una fila del cuerpo de la tabla principal (XGAP ≥ r2.16.0.700) |`Conexion 'conexion'` + `integer 'cant_filas'`: cantidad total de filas en el cuerpo + `integer 'fila'`: número de fila actual + `array 'valores_fila'`: valores de todas las columnas de la fila actual + `string &'nombre'`: ID de la fila + `string &'clase'`: clase de la fila |l, s, sm, mi |inicio_celda_datos |Justo después de abrir una celda del cuerpo de la tabla principal |`Conexion 'conexion'` + `string 'dato'` + `integer 'fila'` + `array 'valores_fila'` + `string &'valor_a_mostrar'` |l, s, sm, mi |fin_celda_datos |Justo antes de cerrar una celda del cuerpo de la tabla principal |`Conexion 'conexion'` + `string 'dato'` + `integer 'fila'` + `array 'valores_fila'` + `string 'valor_mostrado'` |l, s, sm, mi |antes_consulta |Antes de crear la consulta SQL para obtener los datos para el listado. (XGAP ≥ 2.12.3) |`Conexion 'conexion'` + `HistorialNavegacion 'historial'` |l, s, sm, mi |despues_consulta |Despues de ejecutar la consulta SQL para obtener los datos para el listado. (XGAP ≥ r2.16.0.732) |`Conexion 'conexion'` + `HistorialNavegacion 'historial'` + `ADORecordSet 'recordset'` + `int 'total_filas'`: cantidad total de filas obtenidas por la consulta, sin tener en cuenta paginación + `string 'sql_filas'`: código SQL para obtener los datos de las filas + `string 'sql_total_filas'`: código SQL para obtener el valor de `'total_filas'` |l, s, sm, mi |crea_consulta |Permite crear manualmente la consulta SQL para obtener los datos para el listado. Debe establecer los valores de `$params['SQL']` y `$params['SQLCount']` |`Conexion 'conexion'` + `string &'SQL'` + `int &'SQLCount'` + `string 'select'` + `string 'from'` + `string 'where'` + `string 'orderBy'` + `string 'groupBy'` + `string 'having'` + `array 'filtros2'` + `array 'columnasFiltros'` + `string 'condiciones'` + `string 'paramsAExluir'` + `string 'condiciones_personalizadas'` + `string 'orden'` |l, s, sm, mi |arma_link |Antes de generar un link en una columna que tiene `@llevaALink` |`Conexion 'conexion'` + `ADORecordSet 'recordset'` + `string 'dato'` + `int 'fila'` + `string &'paginaForm'`: el link + `array &'paramPagina'`: parámetros para agregar al link |l, mi |==== === En `listado_csv`, `listado_ods`, `listado_pdf`, `listado_rtf` y `listado_xls` === [options="header,autowidth",cols="`) |`Conexion 'conexion'` + `HistorialNavegacion 'historial'` |en_head |Antes de generar el elemento `head`. Lo que se emite a la salida se incluye dentro del head. |- |inicio_body |Justo después de abrir el elemento `body` |`Conexion 'conexion'` `HistorialNavegacion 'historial'` `boolean 'pagina_simple'` |fin_body |Justo antes de cerrar el elemento `body` |`Conexion 'conexion'` `boolean 'pagina_simple'` |despues_abrir_estructura |Justo después de abrir la estructura de la página (al comienzo del contenedor principal) |`Conexion 'conexion'` + `HistorialNavegacion 'historial'` + `Flash 'flash'` + `boolean 'pagina_simple'` |antes_cerrar_estructura |Justo antes de cerrar la estructura de la página (al final del contenedor principal) |`Conexion 'conexion'` + `HistorialNavegacion 'historial'` + `boolean 'pagina_simple'` |==== === En `formulario` === [options="header,autowidth",cols="> |`Conexion 'conexion'` + `Seguridad 'seguridad'` + `HistorialNavegacion 'historial'` + `Configuracion 'configuracion'` + `string 'accion'` + `array 'metadatos'` + `array 'campos'` + `array &'registro'` + `Flash 'flash'` |despues_obtener_vbles_sistema |Después de inicializar las variables de la página, pero antes de comenzar a procesar la acción o la presentación de la página (XGAP ≥ r2.16.0.678) |`Conexion 'conexion'` + `iSeguridad 'seguridad'` + `HistorialNavegacion 'historial'` + `Configuracion 'configuracion'` + `boolean 'agregado'` |despues_inicializacion |Después de inicializar las variables de la página, justo antes de comenzar a emitir a la salida; no se llega a esta ubicación si el formulario ejecuta correctamente una acción, dado que se redirige a la página destino antes; es decir, sólo se llega si el formulario se muestra |`Conexion 'conexion'` + `HistorialNavegacion 'historial'` + `Flash 'flash'` + `boolean 'agregado'` + `ADORecordSet 'recordset'`: el registro completo obtenido desde la base de datos; sólo está disponible si `$params['agregado'] == false`; en caso contrario, es `null` (XGAP ≥ r2.16.0.736) + `string &'titulo'` + `array &'valores'` + `boolean &'sololectura'` |despues_html |Después de terminar de generar salida html (después de ``) |`Conexion 'conexion'` + `HistorialNavegacion 'historial'` + |en_head |El contenido sale dentro del elemento `head` |- |inicio_body |Justo después de abrir el elemento `body` |`Conexion 'conexion'` + `HistorialNavegacion 'historial'` + `boolean 'pagina_simple'` |fin_body |Justo antes de cerrar el elemento `body` |`Conexion 'conexion'` + `boolean 'pagina_simple'` |despues_abrir_estructura |Justo después de abrir la estructura de la página (al comienzo del contenedor principal) |`Conexion 'conexion'` + `HistorialNavegacion 'historial'` + `Flash 'flash'` + `boolean 'pagina_simple'` |antes_cerrar_estructura |Justo antes de cerrar la estructura de la página (al final del contenedor principal) |`Conexion 'conexion'` + `HistorialNavegacion 'historial'` + `boolean 'pagina_simple'` |antes_accion |Antes de ejecutar la acción, cualquiera sea. Esta ubicación se coloca justo antes que las ubicaciones `antes_{insert,update,delete}`. (XGAP ≥ r2.17.0.958) |`Conexion 'conexion'` + `Seguridad 'seguridad'` + `HistorialNavegacion 'historial'` + `Configuracion 'configuracion'` + `string 'accion'` + `string 'nombre_tabla'` + `array 'metadatos'` + `array &'registro'` + `boolean &'realizar_operacion'`: inicialmente tiene valor `true`; si se cambia a `false`, no se realiza la operación y se continúa cargando el formulario actual |antes_insert |Antes de validar los datos y ejecutar la inserción en la BD |`Conexion 'conexion'` + `string 'nombre_tabla'` + `array 'metadatos'` + `array &'registro'` + `boolean &'realizar_operacion'`: inicialmente tiene valor `true`; si se cambia a `false`, no se realiza la operación y se continúa cargando el formulario actual |despues_insert |Después de ejecutar la inserción en la BD |`Conexion 'conexion'` + `string 'nombre_tabla'` + `array 'metadatos'` + `Flash flash` + `array &'registro'` + `boolean &'realizar_redireccion'`: inicialmente tiene valor `true`; si se cambia a `false`, no se hace la redirección a la página de retorno y se continúa cargando el formulario actual |antes_update |Antes de validar los campos y ejecutar la actualización en la BD |`Conexion 'conexion'` + `string 'nombre_tabla'` + `array 'metadatos'` + `array &'registro'` + `boolean &'realizar_operacion'`: inicialmente tiene valor `true`; si se cambia a `false`, no se realiza la operación y se continúa cargando el formulario actual |despues_update |Después de ejecutar la actualización en la BD |`Conexion 'conexion'` + `string 'nombre_tabla'` + `array 'metadatos'` + `Flash 'flash'` + `array &'registro'` + `boolean &'realizar_redireccion'`: inicialmente tiene valor `true`; si se cambia a `false`, no se hace la redirección a la página de retorno y se continúa cargando el formulario actual |antes_delete |Antes de ejecutar el borrado en la BD |`Conexion 'conexion'` + `string 'nombre_tabla'` + `string 'clave'` + `array 'metadatos'` + `array &'registro'` + `boolean &'realizar_operacion'`: inicialmente tiene valor `true`; si se cambia a `false`, no se realiza la operación y se continúa cargando el formulario actual |despues_delete |Después de ejecutar el borrado en la BD |`Conexion 'conexion'` + `string 'nombre_tabla'` + `string 'clave'` + `array 'metadatos'` + `Flash flash` + `array &'registro'` + `boolean &'realizar_redireccion'`: inicialmente tiene valor `true`; si se cambia a `false`, no se hace la redirección a la página de retorno y se continúa cargando el formulario actual |antes_redirigir |Después de ejecutar la acción y antes de redirigir a la página destino. Sólo se ejecuta si la acción se completó correctamente. (XGAP ≥ r2.12.8.65) |`string 'accion'` + `array 'registro'`: El registro final sobre el que se operó. Es vacío si la acción es "cancelar". + `HistorialNavegacion 'historial'` + `boolean 'redireccionar_master'` + `Flash 'flash'` + `boolean 'es_destino_predeterminado'`: ¿El destino es el que se sigue de manera predeterminada (true), o está dado en el request, via `RequestXgap::PARAMETRO_PAG_RETORNO` (false)? (XGAP ≥ r2.16.0.741) + `string &'destino'`: El URL al que se va a redirigir. Se puede modificar para cambiar el destino, o dejar con un valor vacío para cancelar la redirección. |despues_accion |Después de ejecutar la acción y justo antes de comenzar la carga del formulario. Esta ubicación se coloca después de la redirección que se realiza luego de la ejecución correcta de la acción, por lo que sólo se invoca si la acción no se completa correctamente o se cancela la redirección. (XGAP ≥ r2.16.1.794) |`Conexion 'conexion'` + `Seguridad 'seguridad'` + `HistorialNavegacion 'historial'` + `Configuracion 'configuracion'` + `Flash 'flash'` + `string 'accion'` + `boolean 'accion_ok'`: ¿La acción se completó correctamente? + `array 'registro'`: El registro final sobre el que se operó. Es vacío si la acción es "cancelar". |antes_abrir_form |Antes de abrir el formulario principal |`Conexion 'conexion'` + `string 'nombre'` + `array 'metadatos'` + `array 'valores'` + `boolean 'agregado'` |despues_abrir_form |Después de abrir el formulario principal |`Conexion 'conexion'` + `string 'nombre'` + `array 'metadatos'` + `array 'valores'` + `boolean 'agregado'` |antes_cerrar_form |Antes de cerrar el formulario principal |`Conexion 'conexion'` + `string 'nombre'` + `array 'metadatos'` + `array 'valores'` + `boolean 'agregado'` |despues_cerrar_form |Después de cerrar el formulario principal |`Conexion 'conexion'` + `string 'nombre'` + `array 'metadatos'` + `array 'valores'` + `boolean 'agregado'` |antes_campo_link |Antes de generar un campo con `@tipo='Link'`. (XGAP ≥ 2.12.1) |`Conexion 'conexion'` + `HistorialNavegacion 'historial'` + `array 'metadatos'` (XGAP ≥ r2.16.0.584) + `array 'valores'` (XGAP ≥ r2.16.0.584) + `boolean 'agregado'` (XGAP ≥ r2.16.0.584) + `string 'id'` + `string &'url'` + `array &'parametros'` + `string &'contenido'` + `string &'click'` + `string &'tip'` |==== [[antes_procesar_uploads__campos]] [NOTE] .Referencias ==== El parámetro "accion", que se pasa en varias ubicaciones, puede tomar uno de los siguientes valores: { \'agregar' | \'agregar-volver' | \'agregar-seguir' | \'modificar' | \'borrar' | \'cancelar' }. El parámetro "campos" de la ubicación "antes_procesar_uploads" es un array que contiene los datos de los campos de tipo "Archivo", en el formato: [source,php] ---- array( // [string] nombre del archivo 'nombrearchivo' => '{nombre archivo}', // [boolean|null] ¿se debe conservar el archivo original? // true: si; false; no; null: no aplicable 'conservar' => $c, // [string] valor del elemento "campo/destino" 'destino' => '{destino #1}', // [FormFileUpload] objeto que representa el upload 'upload' => $u ) //, '{dato #2}' => array(...), ... ); ---- ==== === En `formulario_master` === [options="header,autowidth",cols="`, después de enviar los headers HTTP) |`Conexion 'conexion'` + `HistorialNavegacion 'historial'` |despues_html |Después de terminar de generar salida html (después de ``) |`Conexion 'conexion'` + `HistorialNavegacion 'historial'` |en_head |El contenido sale dentro del elemento `head` |- |inicio_body |Justo después de abrir el elemento `body` |`Conexion 'conexion'` + `HistorialNavegacion 'historial'` + `boolean 'pagina_simple'` |fin_body |Justo antes de cerrar el elemento `body` |`Conexion 'conexion'` + `boolean 'pagina_simple'` |despues_abrir_estructura |Justo después de abrir la estructura de la página (al comienzo del contenedor principal) |`Conexion 'conexion'` + `HistorialNavegacion 'historial'` + `Flash 'flash'` + `boolean 'pagina_simple'` |antes_cerrar_estructura |Justo antes de cerrar la estructura de la página (al final del contenedor principal) |`Conexion 'conexion'` + `HistorialNavegacion 'historial'` + `boolean 'pagina_simple'` |antes_abrir_datos |Antes de abrir la estructura que contiene los datos de la entidad. |`Conexion 'conexion'` + `array 'metadatos'` + `array 'valores'` |despues_abrir_datos |Después de abrir la estructura que contiene los datos de la entidad. |`Conexion 'conexion'` + `array 'metadatos'` + `array 'valores'` |antes_cerrar_datos |Antes de cerrar la estructura que contiene los datos de la entidad. |`Conexion 'conexion'` + `array 'metadatos'` + `array 'valores'` |despues_cerrar_datos |Después de cerrar la estructura que contiene los datos de la entidad. |`Conexion 'conexion'` + `array 'metadatos'` + `array 'valores'` |antes_titulo_campo |Antes de mostrar el título de un campo. |`Conexion 'conexion'` + `string 'dato'` + `string &'valor_a_mostrar'` |despues_titulo_campo |Después de mostrar el título de un campo. |`Conexion 'conexion'` + `string 'dato'` + `string 'valor_a_mostrar'` |antes_valor_campo |Antes de mostrar el valor de un campo. |`Conexion 'conexion'` + `string 'dato'` + `ADORecordSet 'recordset'` + `array 'valores'` + `string &'valorAMostrar'` |despues_valor_campo |Después de mostrar el valor de un campo. |`Conexion 'conexion'` + `string 'dato'` + `ADORecordSet 'recordset'` + `array 'valores'` + `string 'valorAMostrar'` |==== === En `formulario_reporte` === [options="header,autowidth",cols="`, después de enviar los headers HTTP) |`Conexion 'conexion'` + `HistorialNavegacion 'historial'` |despues_html |Después de terminar de generar salida html (después de ``) |`Conexion 'conexion'` + `HistorialNavegacion 'historial'` |en_head |El contenido sale dentro del elemento `head` |- |inicio_body |Justo después de abrir el elemento `body` |`Conexion 'conexion'` + `HistorialNavegacion 'historial'` + `boolean 'pagina_simple'` |fin_body |Justo antes de cerrar el elemento `body` |`Conexion 'conexion'` + `boolean 'pagina_simple'` |despues_abrir_estructura |Justo después de abrir la estructura de la página (al comienzo del contenedor principal) |`Conexion 'conexion'` + `HistorialNavegacion 'historial'` + `Flash 'flash'` + `boolean 'pagina_simple'` |antes_cerrar_estructura |Justo antes de cerrar la estructura de la página (al final del contenedor principal) |`Conexion 'conexion'` + `HistorialNavegacion 'historial'` + `boolean 'pagina_simple'` |==== === En `grafico` === [options="header,autowidth",cols="`, después de enviar los headers HTTP) |`Conexion 'conexion'` + `HistorialNavegacion 'historial'` |despues_html |Después de terminar de generar salida html (después de ``) |`Conexion 'conexion'` + `HistorialNavegacion 'historial'` |en_head |Antes de generar el elemento `head`. Lo que se emite a la salida se incluye dentro del head. |- |inicio_body |Justo después de abrir el elemento `body` |`Conexion 'conexion'` + `HistorialNavegacion 'historial'` + `boolean 'pagina_simple'` |fin_body |Justo antes de cerrar el elemento `body` |`Conexion 'conexion'` + `boolean 'pagina_simple'` |despues_abrir_estructura |Justo después de abrir la estructura de la página (al comienzo del contenedor principal) |`Conexion 'conexion'` + `HistorialNavegacion 'historial'` + `Flash 'flash'` + `boolean 'pagina_simple'` |antes_cerrar_estructura |Justo antes de cerrar la estructura de la página (al final del contenedor principal) |`Conexion 'conexion'` + `HistorialNavegacion 'historial'` + `boolean 'pagina_simple'` |==== === En `menu` y `reporte_odt` === En el caso de `menu` y `reporte_odt`, sólo se aplican las ubicaciones que están disponibles en <>. Además, el tipo de código está restringido a `@tipo="PHP"`. // vim: syntax=asciidoc textwidth=80: