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 1. Ejemplo de uso de código extra
<codigoExtra>
    <codigo tipo="HTML" ubicacion="inicio_body">
        <![CDATA[
        <div class="mensaje">Esto va al inicio de la pagina.</div>
        ]]>
    </codigo>
    <codigo tipo="JAVASCRIPT" ubicacion="fin_body">
        <![CDATA[
        alert("Mensaje javascript.");
        ]]>
    </codigo>
    <codigo tipo="PHP" ubicacion="despues_inicializacion">
        <![CDATA[
        $conexion = $params['conexion'];
        $idseccion = $_REQUEST['idseccion'];
        $sql = "SELECT dvalortraducido FROM traduccion"
             . " WHERE cnombre = 'SECCION' AND cvalor = '$idseccion'";
        $descseccion = $conexion->obtenerPrimero($sql);
        // $params['titulo'] es un parámetro provisto para esta ubicación
        $params['titulo'] .= ' en ' . XGAP_CONF_APLICACION . " | $descseccion";
        ]]>
    </codigo>
    <!-- Inválido: ya existe un bloque de código en esta ubicación
        y con este tipo -->
    <codigo tipo="PHP" ubicacion="despues_inicializacion">
        <![CDATA[
        $otra_mas = $_REQUEST['otra_mas'];
        ]]>
    </codigo>
</codigoExtra>

Ubicaciones

Posibles valores para codigoExtra/codigo/@ubicacion.

En todos los tipos de página

@ubicacion Ubicación en la página Parámetros (@tipo="PHP")
inicio_pagina

Al comienzo de la página, antes de inicializar XGAP. (XGAP ≥ 2.11.2)

-

antes_inicializacion

Antes de inicializar las variables de la página

-

xgap_cargado

Luego de cargar el entorno de XGAP, pero antes de definir las variables de la página. (XGAP ≥ r2.12.10.245)

Conexion 'conexion'
iSeguridad 'seguridad'
HistorialNavegacion 'historial'
Configuracion 'configuracion'

Nota El caso particular de @ubicacion="inicio_pagina" sólo se aplica cuando @tipo="PHP". El código en esta ubicación no se emite dentro de una función, sino a nivel global. Esto permite definir elementos globales, como ser constantes, funciones o clases, lo que no sería posible o no tendría sentido dentro de una función.

En listado, listado_seleccion, listado_seleccion_m y listado_master_inline

Referencias para la columna “En”:

l

listado

s

listado_seleccion

sm

listado_seleccion_m

mi

listado_master_inline

@ubicacion Ubicación en la página Parámetros (@tipo='PHP') En
despues_inicializacion

Después de inicializar las variables de la página; justo antes de comenzar a emitir a la salida

Conexion 'conexion'
ADORecordSet 'recordset'
HistorialNavegacion 'historial'
Flash 'flash'
string &'titulo'

l, s, sm, mi

despues_html

Después de terminar de generar salida HTML (después de </html>)

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

@ubicacion Ubicación en la página Parámetros (@tipo='PHP')
despues_inicializacion

Después de inicializar las variables de la página; justo antes de comenzar a emitir a la salida

Conexion 'conexion'
ADORecordSet 'recordset' (XGAP ≥ 2.12.3)
HistorialNavegacion 'historial'
string &'titulo'
string &'nombre_archivo'

antes_consulta

Antes de crear la consulta SQL para obtener los datos para el listado.

Conexion 'conexion'
HistorialNavegacion 'historial'

despues_consulta

Despues de ejecutar la consulta SQL para obtener los datos para el listado. En listado_csv y listado_xls la consulta no se ejecuta, por lo que recordset es nulo y total_filas es 0.

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'

En contenido

@ubicacion Ubicación en la página Parámetros (@tipo='PHP')

[El parámetro 'conexión' tiene valor null en todas las ubicaciones si /pagina/@con-conexion = 'false'.]
despues_inicializacion

Después de inicializar las variables de la página; justo antes de comenzar a emitir a la salida

Conexion 'conexion'
HistorialNavegacion 'historial'
Flash 'flash'
string &'titulo'

despues_html

Después de terminar de generar salida html (después de </html>)

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

@ubicacion Ubicación en la página Parámetros (@tipo='PHP')
antes_procesar_uploads

Antes de procesar los campos de tipo "Archivo". (XGAP ≥ r2.16.0.649) ref

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 </html>)

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'

Nota
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:

<?php
// Lista de campos indexada por elemento "campo/dato"
$params['campos'] = array(
    '{dato #1}' => 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

@ubicacion Ubicación en la página Parámetros (@tipo='PHP')
despues_inicializacion

Después de inicializar las variables de la página; justo antes de comenzar a emitir a la salida

Conexion 'conexion'
HistorialNavegacion 'historial'
Flash 'flash'
ADORecordSet 'recordset' (XGAP ≥ r2.16.1.813)
string &'titulo'
array &'valores'
boolean &'sololectura'

antes_html

Antes de comenzar a generar salida html (antes de <html>, después de enviar los headers HTTP)

Conexion 'conexion'
HistorialNavegacion 'historial'

despues_html

Después de terminar de generar salida html (después de </html>)

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

@ubicacion Ubicación en la página Parámetros (@tipo='PHP')
antes_html

Antes de comenzar a generar salida html (antes de <html>, después de enviar los headers HTTP)

Conexion 'conexion'
HistorialNavegacion 'historial'

despues_html

Después de terminar de generar salida html (después de </html>)

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

@ubicacion Ubicación en la página Parámetros (@tipo='PHP')
despues_inicializacion

Después de inicializar las variables de la página; justo antes de comenzar a emitir a la salida

Conexion 'conexion'
HistorialNavegacion 'historial'
Flash 'flash'
string &'titulo'

despues_inicializacion_grafico

Después de inicializar las variables del gráfico

Conexion 'conexion'
HistorialNavegacion 'historial'
array &'valores'
array &'descripciones'
array &'colores'
array &'etiquetas'
array &'links'
string &'leyenda'
float &'maximoy'
int &'step'
int &'orientacion_leyendas'

antes_html

Antes de comenzar a generar salida html (antes de <html>, después de enviar los headers HTTP)

Conexion 'conexion'
HistorialNavegacion 'historial'

despues_html

Después de terminar de generar salida html (después de </html>)

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 todos los tipos de página. Además, el tipo de código está restringido a @tipo="PHP".