XGAP ChangeLog

Versión 2.17.0 (en desarrollo)
  • [r2.17.0.964 - 24/01/2019] Se agrega la posibilidad de incluir código extra en los documentos de tipo Reporte ODT (reporte_odt), en las ubicaciones que están disponibles para todos los tipos de página.
  • [r2.17.0.959 - 23/05/2017] Nueva ubicación de código extra para formularios: antes_accion.
  • [r2.17.0.958 - 23/05/2017] (Ticket #137) Para permitir que se cancele el upload de archivos en un envío de formulario, se agrega el nuevo método PHP FormFileUpload::cancelar(). También se agregan los métodos FormFileUpload::fueCancelado() y FormFileUpload::motivoCancelado() (upload.inc.php).
  • [r2.17.0.955 - 23/05/2017] Nuevos métodos PHP: Upload::rutaAbsolutaUpload(), FormFileUpload::tamanio() y FormFileUpload::tipo() (upload.inc.php).
  • [r2.17.0.954 - 23/05/2017] Se agrega la posibilidad de incluir código extra en las definiciones de menúes, en las ubicaciones que están disponibles para todos los tipos de página.
  • [r2.17.0.951 - 22/02/2016] Nuevo parámetro en los métodos PHP Javascript::construirLista(), Javascript::construirObjeto() y Javascript::construirArray(): $claves_como_strings = false (javascript.inc.php).
  • [r2.17.0.949 - 22/02/2017] (Ticket #135)

    Se agrega funcionalidad en el cliente, opcional, para prevenir el envío múltiple de formularios.

    • Nueva opción para generación en el archivo de configuración de la aplicación (aplicacion.xml): /aplicacion/generacion/formularios/evitar-envio-multiple.
    • Nueva opción para formularios: /formulario/evitar-envio-multiple. Tiene mayor prioridad que la opción global en aplicacion.xml.

    Esta funcionalidad se puede habilitar globalmente usando aplicacion.xml:/aplicacion/generacion/formularios/evitar-envio-multiple/@habilitar='true' y deshabilitar en formularios individuales con {entidad}_formulario.xml:/formulario/evitar-envio-multiple/@habilitar='false', o viceversa.

  • [r2.17.0.943 - 24/08/2016] Nuevo parámetro en los métodos PHP Mensaje::porTipo(), Mensaje::error(), Mensaje::alerta(), Mensaje::notificacion(), Mensaje::info(), Mensaje::generico(): $registrar = true (mensaje.inc.php), para controlar si se debe registrar el mensaje a través del Auditor.
  • [r2.17.0.942 - 24/08/2016] Nuevos parámetros de configuración de la aplicación: inclusion_inicio_head e inclusion_fin_head. Permiten incluir contenido personalizado después de la apertura y antes del cierre, respectivamente, del elemento head en todas las páginas HTML generadas.

    Advertencia de compatibilidad: Hasta el momento, si una aplicación generada contenía un archivo con nombre head.inc.php en su directorio raíz, éste se incluía antes de cerrar el elemento head. Esta funcionalidad (no documentada) de inclusión implícita quedó reemplazada por la definición explícita de inclusion_fin_head; por lo tanto, para mantener el comportamiento existente en las aplicaciones que estuvieran utilizando este archivo, se deberá definir inclusion_fin_head con valor 'head.inc.php'.

  • [r2.17.0.938 - 19/07/2016] Nuevo atributo para columnas de listados: /listado/columnas/*/@clase-expr; complementa al ya existente /listado/columnas/*/@clase.
  • [r2.17.0.937 - 19/07/2016] (Ticket #134) Corrección de funcionalidad incompleta: En #94 (r2.15.0) se agregó el atributo /listado/columnas/*/@clase, pero sólo se estaba aplicando en columnas regulares (columnas/columna) de listados normales; no se tenía en cuenta en listados de tipo seleccion ni seleccion_m, ni en columnas/acciones, columnas/checkbox ni columnas/combo. Ahora sí se aplica en todos los lugares mencionados.
  • [r2.17.0.934 - 19/07/2016] (Ticket #132) Corrección de deficiencia en la implementación de campos Seleccionables autocompletables en formularios: no se procesaban elementos XInclude en el listado asociado al campo; por lo tanto, si el listado contenía XIncludes, es posible que el autocompletable no funcionara correctamente.

    Para evitar posibles problemas de compatibilidad en aplicaciones existentes, el comportamiento predeterminado sigue siendo no procesar XInclude en los listados asociados; para hacerlo, es necesario habilitarlo explícitamente, usando uno de los siguientes atributos:

    • Para toda la aplicación: /aplicacion/generacion/formularios/@procesar-xinclude-documentos-relacionados = "true" en aplicacion.xml.
    • Para un campo particular: campo/entidad/@procesar-xinclude = "true" en *_formulario.xml.
  • [r2.17.0.933 - 19/07/2016] Nuevo método PHP XgapXml::loadDocumentFromFile() (xml.inc.php).
  • [r2.17.0.932 - 05/07/2016] Listados en formato HTML: se agregan clases al elemento contenedor del navegador de paginación. Estas clases están documentadas en el nuevo método PHP Componentes::clasesNavegador() (componentes.inc.php).
  • [r2.17.0.931 - 05/07/2016] Nuevo elemento y atributo para listados: /listado/configuracion/paginador/@filas-por-pagina.
  • [r2.17.0.928 - 24/05/2016] Nuevo método PHP Conexion::expresionComparacionValorEntre() (conexion.inc.php).
  • Mejoras en el buscador personalizado en listados:
    • [r2.17.0.927 - 24/05/2016] Se agrega la posibilidad de incluir separadores entre los campos: buscador/personalizado-simple/separador.
    • [r2.17.0.926 - 24/05/2016] Nuevo atributo, en tipos texto, calendario, combo y combobd: buscador/personalizado-simple//{texto|calendario|combo|combobd}/@etiqueta-pos.
    • [r2.17.0.925 - 24/05/2016] Nuevo atributo: buscador/personalizado-simple//*/@es-param-condicion-consulta.
  • [r2.17.0.921 - 13/05/2016] Cambios en la clase PHP Auditor (auditor.inc.php):
    • Nuevo parámetro en el método Auditor::log(): $en_error.
    • Nuevas constantes que definen los valores posibles para este parámetro: Auditor::EN_ERROR_*.
  • [r2.17.0.920 - 13/05/2016] Nuevos métodos PHP: Formateo::textoTipoErrorPhp(), Formateo::errorPhp() (formateo.inc.php).
  • [r2.17.0.919 - 21/04/2016] Nueva opción para generación en el archivo de configuración de la aplicación (aplicacion.xml): /aplicacion/generacion/@copiar-paginas-predefinidas.
  • [r2.17.0.918 - 21/04/2016] Nuevo método PHP Request::hostYPuerto() (request.inc.php).
  • [r2.17.0.917 - 21/04/2016] Nuevo método PHP Mensaje::porTipo() (mensaje.inc.php).
  • [r2.17.0.915 - 21/04/2016] Nuevo parámetro en los métodos PHP Form::combo_bd_sin_hidden y Form::combo_bd: $agregar_opcion_vacia (form.inc.php).
Versión 2.16.1 (17/04/2016)
  • [r2.16.1.855 - 04/12/2015] Nuevo atributo para la condición de acciones globales en listados: configuracion/acciones/accion/condicion/@efecto.
  • [r2.16.1.853 - 27/10/2015] En reportes ODT se agrega la posibilidad de indicar en cada solicitud si se debe realizar o no la conversión a PDF, a través de una variable PHP global booleana con nombre $emitir_pdf o de un parámetro de request con nombre xgap_conv.

    Para que se tengan en cuenta los valores mencionados, debe estar definida la constante PHP XGAP_COMANDO_GENERACION_PDF (ver item previo).

  • [r2.16.1.852 - 23/10/2015] En reportes ODT se agrega la posibilidad de emitir el reporte en formato PDF, convirtiendo internamente el ODT generado a PDF mediante un comando externo. Para ello debe estar definida la constante PHP XGAP_COMANDO_GENERACION_PDF y su valor debe ser el comando a ejecutar.

    Esta nueva funcionalidad está definida en el código de salida predeterminado, es decir que no se aplica en reportes que usan salida personalizada (/odt/configuracion/salida).

  • [r2.16.1.846 - 09/10/2015] Nuevo parámetro de configuración de la aplicación: formato_consultas_log. Indica el formato en que se deben guardar las consultas a la base de datos en el log de la aplicación. Si no se especifica o se usa el valor 'mantener', se mantiene el comportamiento previo, que es no aplicar ningún formato.
  • Mejoras para reportes ODT:
    • [r2.16.1.842 - 06/10/2015] Nuevo elemento: /odt/configuracion/template/xslt-adicional.
    • [r2.16.1.843 - 06/10/2015] Nuevo elemento: /odt/configuracion/reporte/meta.
  • [r2.16.1.840 - 06/10/2015] Nueva clase PHP: XgapODFXSLTProcessorExt (odf-xslt-ext.inc.php).
  • [r2.16.1.836 - 06/10/2015] Nuevo atributo para imprimibles en listados: configuracion/imprimibles/imprimir/@maximo-filas-permitidas.
  • [r2.16.1.834 - 06/10/2015] Nuevo parámetro opcional para el método PHP Componentes::controlImprimir(): $tip (componentes.inc.php).
  • Nuevas opciones para menúes:
    • [r2.16.1.824 - 08/09/2015] Los siguientes atributos admiten expresiones embebidas, cuando están habilitadas para la aplicación (/aplicacion/generacion/expresiones-embebidas/@habilitar = 'true'): carpeta/@nombre, carpeta/@roles, carpeta/@id, carpeta/@tip, carpeta/@clase, item/@nombre, item/@roles, item/@id, item/@url, item/@tip, item/@clase, separador/@roles.
    • [r2.16.1.825 - 08/09/2015] Nuevos atributos para items: item/@target y item/@usar-seguridad.
  • [r2.16.1.823 - 08/09/2015] Nueva opción de configuración de la aplicación /aplicacion/generacion/expresiones-embebidas (aplicacion.xml).
  • [r2.16.1.822 - 08/09/2015] Nuevos métodos Flash::descartarActual() y Flash::descartarSiguiente() (flash.inc.php).
  • [r2.16.1.816 - 14/05/2015] (Ticket #124) Nuevo atributo para columnas de acciones en listados: columnas/acciones/accion/@mostrar-si-deshabilitada.
  • [r2.16.1.814 - 13/05/2015] (Ticket #123) Nuevos elementos para formularios: /formulario/configuracion/flash/mensaje-insert-ok, /formulario/configuracion/flash/mensaje-update-ok, /formulario/configuracion/flash/mensaje-delete-ok y /formulario/configuracion/flash/mensaje-firma-digital-ok.
  • [r2.16.1.813 - 13/05/2015] Nuevo parámetro para la ubicación de código extra en masters 'despues_inicializacion': 'recordset'.
  • [r2.16.1.812 - 11/05/2014] Nuevo atributo para campos de formularios: campos//campo/@mostrarLinkDeshabilitado.
    Es equivalente al ya existente para listados columnas/columna/@mostrarLinkDeshabilitado.
  • [r2.16.1.805 - 08/04/2015] (Ticket #122) En campos de formulario de tipo ComboBD, se permite especificar el texto a mostrar en la opción del combo que corresponde a selección vacía, en vez del predefinido "--".
    • Nuevo parámetro para los métodos PHP Form::combo_bd() y Form::combo_bd_sin_hidden(): $texto_opcion_vacia.
    • Nuevo elemento y atributo para campos de formulario @tipo="ComboBD": campo/opcion-combobd-seleccion-vacia/@texto.
  • [r2.16.1.802 - 07/04/2015] Nuevo parámetro para el método PHP Json::codificar(): $es_utf8 = false.
  • [r2.16.1.794 - 26/03/2015] Nueva ubicación de código extra para formularios: despues_accion.
  • [r2.16.1.789 - 11/03/2015] Nuevo parámetro para los métodos PHP Conexion::existeFila(), Conexion::existeFilaCond(), Conexion::metaDatos(), Conexion::ajustarMetacolumnas(), Conexion::getTablas() y Conexion::getVistas(): $excepcion = false.
  • [r2.16.1.788 - 11/03/2015] (Ticket #119) Nuevo atributo para formularios: /formulario/campos/@considerar-request-inicializacion-valores-modificacion.
  • [r2.16.1.779 - 20/12/2014] Cambio en la clase PHP Conexion: se incluyen registros de operaciones sobre transacciones en el log de la aplicación.

    Nuevo parámetro en los métodos StartTrans(), CompleteTrans() y FailTrans(): $log = true, para indicar si se debe registrar o no.

  • [r2.16.1.778 - 20/12/2014] Se agrega la posibilidad de incluir en el log de la aplicación los mensajes emitidos a través de la clase Mensaje y de instancias de la clase ObjetoMensaje, y los errores producidos al procesar formularios.
    • Nuevo parámetro de configuración de la aplicación: tipos_mensaje_incluir_log.
    • Nuevo parámetro en los métodos PHP ObjetoMensaje::nuevo() y ObjetoMensaje::nuevoErrorPredefinido(): $guardar_backtrace.
    • Nuevo método PHP ObjetoMensaje::backtrace().
  • [r2.16.1.777 - 20/12/2014] Nuevo método PHP AplicacionXgap::realFullAppDir().
  • [r2.16.1.776 - 20/12/2014] Nuevo atributo en listados: /listado/consulta/condiciones_de_parametros//param/@ignorar-en-determinacion-filtro-vacio.
  • [r2.16.1.774 - 20/12/2014] Nuevo elemento para listados: /listado/configuracion/master. Complementa al ya existente /listado/configuracion/form.
  • [r2.16.1.769 - 20/12/2014] Nuevo parámetro para las ubicaciones de código extra en formularios 'despues_insert', 'despues_update' y 'despues_delete': 'realizar_redireccion'.
  • [r2.16.1.767 - 20/12/2014] Cuando se limpia un buscador personalizado en un listado usando el botón "Limpiar", ahora se envía en el POST el parámetro "accion" con el valor definido por la nueva constante BuscadorPersonalizadoSimple::VALOR_ACCION_LIMPIAR_BUSCADOR_PERS.
  • [r2.16.1.765 - 20/12/2014] Se introduce la posibilidad de usar un archivo de configuración de XGAP local: xgap.local.php.

    Si en el mismo directorio que xgap.php existe un archivo con nombre xgap.local.php, se usan las definiciones de constantes de configuración que haya en este último, en vez de las correspondientes del primero.

    Esto permite mantener xgap.php intacto, simplificando el proceso de actualización de la versión instalada de XGAP, ya que no se pierde la configuración si se sobreescribe este archivo con la nueva versión.

  • [r2.16.1.764 - 20/12/2014] Cambio en la clase PHP Conexion_oci8: se implementa el método referenciasEntrantes(), que antes retornaba siempre un valor vacío.
  • [r2.16.1.763 - 20/12/2014] Cambio en la estructura retornada por el método PHP Conexion::referenciasEntrantes(). Anteriormente no se podía retornar más de una referencia por cada tabla referenciante; la nueva estructura sí lo permite.
    La estructura anterior se incluye en la nueva por compatibilidad con versiones anteriores.
  • [r2.16.1.761 - 20/12/2014] Cambio en la clase PHP Conexion_postgres8: se implementan los métodos comentarioTabla() y comentariosColumnas(), que antes retornaban siempre un valor vacío.
  • [r2.16.1.760 - 20/12/2014] Nuevos parámetros para los métodos Conexion::comentarioTabla() y Conexion::comentariosColumnas(): $esquema = null, $excepcion = false.
  • [r2.16.1.758 - 20/12/2014] Nuevo parámetro para el método Conexion::clavesExtranjeras(): $esquema = false.
Versión 2.16.0 (19/12/2014)
  • [r2.16.0.743 - 10/11/2014] (Ticket #118) Nuevo elemento para acciones globales de listados: configuracion/acciones/accion/confirmar-ejecucion.
  • [r2.16.0.741 - 27/10/2014] Nuevo parámetro para la ubicación de código extra en formularios 'antes_redirigir': 'es_destino_predeterminado'.
  • [r2.16.0.737 - 30/08/2014] (Ticket #115) Nuevo elemento para campos de formulario: campo/condicion-no-editable.
  • [r2.16.0.736 - 30/08/2014] Nuevo parámetro para la ubicación de código extra en formularios 'despues_inicializacion': 'recordset'.
  • [r2.16.0.732 - 27/06/2014] Nueva ubicación de código extra para listados: despues_consulta.
  • [r2.16.0.729 - 27/06/2014] Nuevo método: Formateo::textoPlanoAHtml().

    Advertencia de compatibilidad: La versión mínima requerida de PHP pasa a ser 5.2.4.

  • [r2.16.0.727 - 22/05/2014] Nuevo elemento para menúes de details en masters: details/menu/condicion.
  • [r2.16.0.723 - 18/05/2014] (Ticket #75) Se agrega modo de mantenimiento.
    • Nueva sección en la guía de usuario para documentar este modo: Administración → Modo de mantenimiento.
    • Nuevos parámetros de configuración en_mantenimiento, pagina_mantenimiento, mensaje_mantenimiento, paginas_accesibles_en_mantenimiento y rolfs_acceso_en_mantenimiento.
    • Nueva página predefinida: aplicacionenmantenimiento_contenido.xml.
  • [r2.16.0.721 - 18/05/2014] Cambios en la interfaz iSeguridad:

    Nuevas constantes iSeguridad::VAR_SESION_ID_USUARIO_ACTUAL, iSeguridad::VAR_SESION_NOMBRE_CORTO_USUARIO_ACTUAL, iSeguridad::VAR_SESION_NOMBRE_COMPLETO_USUARIO_ACTUAL, iSeguridad::VAR_SESION_ID_ROLF_ACTUAL y iSeguridad::VAR_SESION_NOMBRE_ROLF_ACTUAL.

    Nuevos métodos iSeguridad::usuarioLogueado() y iSeguridad::rolFuncionalUsuarioLogueado(), implementados en Seguridad::usuarioLogueado() y Seguridad::rolFuncionalUsuarioLogueado().

    Advertencia de compatibilidad: Las aplicaciones que utilicen una clase de seguridad personalizada (parámetro de configuración clase_seguridad) que no herede de la implementación provista por XGAP (clase Seguridad) deberán implementar estos métodos.

  • [r2.16.0.716 - 18/05/2014] Nueva constante PHP: FULL_APP_DIR. Contiene la ruta completa del directorio raíz de la aplicación en ejecución.
  • [r2.16.0.713 - 13/05/2014] Nuevo atributo para páginas de tipo listado, formulario, master, contenido y grafico: /*/@clases.
  • [r2.16.0.705 - 30/04/2014] Cambios en los mensajes de flash:
    • Se agrega la posibilidad de mostrar acciones predefinidas en los mensajes, una para cerrar el cuadro de mensajes y otra para mantenerlo visible (transformarlo en permanente cuando es transitorio). Estas acciones están controladas por nuevos parámetros de configuración de la aplicación: mostrar_acciones_mensajes_flash, accion_mensajes_flash__cerrar__texto, accion_mensajes_flash__mantener__texto.
    • Ahora se puede especificar el efecto a usar cuando se muestran y ocultan los mensajes, mediante los parámetros de configuración de la aplicación efecto_abrir_mensajes_flash_transitorios, efecto_cerrar_mensajes_flash_transitorios, efecto_abrir_mensajes_flash_permanentes, efecto_cerrar_mensajes_flash_permanentes
  • [r2.16.0.704 - 30/04/2014] Nuevo atributo para columnas de listados: columnas/columna/@mostrarLinkDeshabilitado.
  • [r2.16.0.703 - 30/04/2014] Nuevos parámetros para las ubicaciones de código extra en masters 'antes_valor_campo' y 'despues_valor_campo': 'recordset' y 'valores'.
  • [r2.16.0.702 - 30/04/2014] Nuevo método PHP Formateo::truncar().
  • [r2.16.0.701 - 30/04/2014] Nuevo método PHP Conexion::crearConsultaGenerica().
  • [r2.16.0.700 - 30/04/2014] Nueva ubicación de código extra para listado, listado_seleccion, listado_seleccion_m y listado_master_inline: antes_fila_datos.
  • [r2.16.0.699 - 30/04/2014] Nuevo método PHP EstructuraPagina::esSimple().
  • [r2.16.0.695 - 29/04/2014] Nuevas funciones PHP xgap_array_insert() y uriPaginaActual() (funciones.php).
  • [r2.16.0.694 - 29/04/2014] Cambios en la clase PHP Html:
    • Nuevo método Html::heading().
    • Los métodos Html::cerrarTag(), Html::elemento(), Html::cerrarComentario() y Html::comentario() reciben un nuevo parámetro: $salto_linea. Si en la invocación no se pasa este parámetro, el comportamiento de los métodos es el mismo que antes.
  • [r2.16.0.693 - 29/04/2014] En campos de buscadores personalizados de tipo rangofechas (buscador/personalizado-simple/rangofechas) se incluye un botón que permite vincular los campos de inicio y fin del rango, haciendo que los dos tengan el mismo valor. De esta manera se hace más sencillo buscar una fecha específica, dado que sólo hace falta seleccionarla una vez.

    El elemento generado es un button con clase ButtonLinkFields.

  • [r2.16.0.691 - 29/04/2014] Se incluye el script formulario.js en páginas de tipo listado, seleccion, contenido y grafico.

    Advertencia de compatibilidad: Las páginas de estos tipos que incluyan manualmente formulario.js, por ejemplo mediante configuracion/inclusiones/archivo, deberían ser modificadas para quitar esta inclusión manual; de lo contrario el archivo se va a estar cargando dos veces.

  • [r2.16.0.689 - 29/04/2014] Nueva clase javascript XGAP_FORM.LinkedFieldSet (formulario.js).
  • [r2.16.0.688 - 29/04/2014] El flash ahora se puede deshabilitar, tanto para el request actual como para el siguiente. Este estado de deshabilitación se emplea para indicar que no se deben mostrar automáticamente sus contenidos al cargar la página, pero no afecta de ningún otro modo su funcionamiento; las operaciones sobre él se siguen comportando de la misma manera.

    Nuevos métodos en la clase PHP Flash (flash.inc.php): Flash::estaDeshabilitadoActual(), Flash::estaDeshabilitadoSiguiente(), Flash::cambiarDeshabilitadoActual(), Flash::cambiarDeshabilitadoSiguiente().

  • [r2.16.0.687 - 29/04/2014] Nuevo parámetro de request predefinido, con nombre dado por la nueva constante PHP RequestXgap::PARAMETRO_SIN_FOCO_INICIAL_AUTOMATICO. Si está presente en el request y tiene valor verdadero, en los formularios no se cambia el foco automáticamente al primer campo habilitado o al definido por /formulario/campos/@foco-inicial.
  • [r2.16.0.686 - 29/04/2014] Se agrega la posibilidad de registrar en el cliente el estado de los campos del formulario, usando el módulo javascript XGAP_FORM.FormState. La generación de esta característica está controlada por dos nuevos atributos XML: la opción de configuración de la aplicación (aplicacion.xml) /aplicacion/generacion/formularios/@registrar-estado-cliente-campos y la opción para formularios /formulario/@registrar-estado-cliente-campos.
  • [r2.16.0.684 - 29/04/2014] Nuevo módulo javascript para usar con formularios (formulario.js): XGAP_FORM.FormState.
  • [r2.16.0.683 - 29/04/2014] Nuevo atributo para el control de borrado lógico en listados: borrado-logico/valor/@boolean.
  • [r2.16.0.681 - 29/04/2014] Se agrega la posibilidad de usar la ubicación de código extra 'despues_inicializacion' en páginas de tipo listado_master_inline.
  • [r2.16.0.678 - 29/04/2014] Nuevo parámetro para la ubicación de código extra despues_obtener_vbles_sistema: 'agregado'.
  • [r2.16.0.667 - 31/03/2014] Nuevos atributos para definiciones de parámetros de request en listados y masters:
    • En listado: @nombre-expr y @expr en /listado/configuracion/acciones/accion/destino/parametros/parametro, /listado/columnas/columna/imagen/miniatura/parametros/parametro, /listado/columnas/columna/imagen/link/parametros/parametro y /listado/columnas/acciones/accion/destino/parametros/parametro; @nombre-expr en /listado/columnas/columna/parametros-link/parametro.
    • En master: @nombre-expr y @expr en /formulario/acciones/accion/parametros/parametro.
  • [r2.16.0.666 - 31/03/2014] Nueva función PHP: urlCompletoServidor() (funciones.php).
  • [r2.16.0.665 - 31/03/2014] Cambios en la clase PHP Request (request.inc.php):
    • Nuevos métodos: Request::esSeguro(), Request::esquema(), Request::host() y Request::puerto().
    • El método Request::metodo() ahora retorna el resultado siempre en mayúsculas.
  • [r2.16.0.650 - 24/03/2014] Nuevo atributo para controlar la validación en el cliente en campos de formulario: campos//campo/validacion-cliente/@excluir.
  • [r2.16.0.649 - 24/03/2014] Nueva ubicación de código extra para formularios: antes_procesar_uploads.
  • [r2.16.0.647 - 24/03/2014] Nuevos métodos PHP (upload.inc.php): FormFileUpload::linkArchivo(), FormFileUpload::fueMovido(), FormFileUpload::cambiarDirDestino(), FormFileUpload::cambiarNombreArchivo(), FormFileUpload::valor().
  • [r2.16.0.646 - 24/03/2014] Nueva excepción PHP: XgapIllegalStateException (illegalstateexception.inc.php).
  • [r2.16.0.644 - 24/03/2014] Nuevas funciones PHP (funciones.php): extraer_directorio_pagina() y uniformizar_separadores_directorio().
  • [r2.16.0.643 - 24/03/2014] Se agregó una página que permite comprobar si el entorno cumple con los requerimientos de un motor de XGAP. (/test_reqs.php).

    Además, en la parte inferior de la página principal del generador se agregaron links que llevan a esta nueva página (se muestra automáticamente uno por cada versión de motor instalada).

  • [r2.16.0.641 - 24/03/2014] Nuevo atributo para campos en masters: /formulario/campos//campo/@mostrar-saltos-linea.
  • [r2.16.0.640 - 24/03/2014] Nuevos elementos y atributos para acciones en masters (/formulario/acciones/accion): @imagen, @teclaacceso, @historial, @pasarParametrosDetail, tip, preparar.
    Además, el elemento link ahora puede no estar presente, lo que indica que la acción debe enviar el request a la misma página.
  • [r2.16.0.639 - 24/03/2014] Nuevos elementos: /listado/configuracion/texto-listado-vacio y /listado/configuracion/texto-listado-vacio-con-filtros para listados; /formulario/details/detail/texto-listado-vacio para masters.
  • [r2.16.0.638 - 24/03/2014] El parámetro de request RequestXgap::PARAMETRO_PAG_RETORNO ahora admite el valor especial SELF, que hace que el URL de retorno sea el mismo del request; es decir, causa que la página vuelva sobre sí misma con los mismos parámetros GET.

    Se puede usar, por ejemplo, para que un formulario se vuelva a cargar después de realizar la operación, en vez de volver a la página de retorno normal.

  • [r2.16.0.637 - 24/03/2014] Nuevos atributos para el elemento de formularios /formulario/campos//campo/destino-link/parametros/parametro: @nombre-expr, @dato y @expr.
  • [r2.16.0.623 - 26/11/2013] Nuevos elementos en javascript para formularios (formulario.js). Namespaces: XGAP_FORM.Select y XGAP_FORM.Select.Chained. Funciones y clases: XGAP_FORM.Select.resetSelection, XGAP_FORM.Select.setOptionsData, XGAP_FORM.Select.getOptionsData, XGAP_FORM.Select.getOptionData, XGAP_FORM.Select.OptionsFilter, XGAP_FORM.Select.Chained.ChildOptionsFilterByParentSelectedOptionData.

    Ejemplo: filtro de las opciones de un select de acuerdo al valor seleccionado en otro:

    <select id="padre" name="padre">
      <option value="" selected="selected">--</option>
      <option value="p1">Padre 1</option>
      <option value="p2">Padre 2</option>
    </select>
    <select id="hijo" name="hijo">
      <option value="" selected="selected">--</option>
      <option value="h1">Hijo 1</option>
      <option value="h2">Hijo 2</option>
      <option value="h3">Hijo 3</option>
      <option value="h4">Hijo 4</option>
    </select>
    <script type="text/javascript">
    jQuery(document).ready(function () {
      var combo_padre = obtener_elemento("padre"),
          combo_hijo = obtener_elemento("hijo"),
          datos_filtro = {
            "": true,
            "p1": [ "", "h2", "h3" ]
          };
      XGAP_FORM.Select.setOptionsData(combo_padre, "filtro", datos_filtro, [""], "value");
      (new XGAP_FORM.Select.Chained.ChildOptionsFilterByParentSelectedOptionData(
          combo_padre, combo_hijo, "filtro", "value", [""]))
          .applyFilterOnParentChange();
    });
    </script>

    El resultado es:

    Cuando en "padre" se selecciona En "hijo" quedan las opciones Filtro en efecto
    "" todas true
    "p1" "", "h2", "h3" [ "", "h2", "h3" ]
    "p2" "" default ([""])
  • [r2.16.0.622 - 26/11/2013] Nuevo elemento para reportes ODT: /odt/variables/variable/requerida.
  • [r2.16.0.620 - 26/11/2013] Nuevo código de error predefinido para mensajes: Mensaje::COD_ERR_EJEC_FALTAN_PARAMETROS.
  • [r2.16.0.616 - 01/11/2013] (Ticket #111) En reportes ODT se agrega la posibilidad de que se definan nuevas variables PHP: cada elemento que genera una variable $var_{nombre} ahora también puede generar una variable correspondiente $var_xmltxt_{nombre}, con el mismo valor pero con los caracteres especiales XML escapados para que se pueda emitir como texto XML de forma segura. Esta generación está controlada por el nuevo atributo /odt/configuracion/@definir-variables-xmltxt.
  • [r2.16.0.615 - 01/11/2013] Nuevo método PHP: Formateo::prepararTextoXml() (formateo.inc.php).
  • [r2.16.0.613 - 22/10/2013] (Ticket #109) Nuevo elemento para formularios: /formulario/campos//campo/condicion-campo-visible.
  • [r2.16.0.610 - 11/10/2013] Nuevo parámetro en las ubicaciones de código extra antes_insert, antes_update y antes_delete en formularios: boolean &'realizar_operacion' = true. Si se cambia su valor a falso, se aborta la operación y se vuelve a presentar el formulario.
  • [r2.16.0.607 - 10/10/2013] Nuevas funciones javascript (utilidades.js): xgapIsUndefined, xgapIsBoolean, xgapIsObject, xgapConstruirUrl.
  • [r2.16.0.604 - 03/10/2013] (Ticket #108) Nuevo elemento para masters: /formulario/campos//campo/condicion-visible.
  • [r2.16.0.601 - 01/10/2013] Nuevo atributo para campos de formulario autocompletables: (texto-autocompletable|seleccionar-autocompletable)/@ignorar-acentos.
  • [r2.16.0.598 - 23/09/2013] Nuevo tipo de validación para campos de formulario: ip4.
  • [r2.16.0.591 - 11/09/2013] (Ticket #107) Nuevo elemento para campos de buscadores personalizados simples en listados: /listado/configuracion/buscador/personalizado-simple//condicion.
  • [r2.16.0.584 - 02/09/2013] Nuevos parámetros en la ubicación de código extra antes_campo_link en formularios:
    • array 'metadatos'
    • array 'valores'
    • boolean 'agregado'
  • [r2.16.0.583 - 28/08/2013] Cambios en la clase Conexion:
    • Nuevos métodos PHP: Conexion::obtenerListaIndexadaPorClave() y Conexion::literalSql().
    • Conexion::obtenerTodos() recibe dos nuevos parámetros opcionales: $numrows y $offset.
    • Se modifica Conexion::expresionComparacionBinaria() para que acepte cualquier operador, no sólo uno de los predefinidos.
  • [r2.16.0.582 - 28/08/2013] Nueva clase PHP: XgapTableArray.
  • [r2.16.0.577 - 12/08/2013] (Ticket #105) Nuevo elemento para campos de formulario: campo/validacion-cliente; permite controlar la validación que se realiza en el cliente. Incluye los elementos campo/validacion-cliente/predefinida, campo/validacion-cliente/fn-condicion-realizacion y campo/validacion-cliente/fn-valor-atributo.

    El elemento campo/validacion-cliente/predefinida tiene el mismo significado que campo/validacion y es la nueva forma recomendada de especificar el tipo de validación de formato, aunque campo/validacion se mantiene por compatibilidad.

  • [r2.16.0.576 - 12/08/2013] (Ticket #104) Nuevo elemento para campos de formulario: campo/validacion-servidor-predefinida. Provee dos formas de controlar la validación que se realiza en el servidor: campo/validacion-servidor-predefinida/@realizar y campo/validacion-servidor-predefinida/condicion-realizacion.
  • [r2.16.0.571 - 01/08/2013] (Ticket #101) Mejora en campos de formulario que incluyen un calendario para selección de fecha/hora: se agrega la posibilidad de definir un controlador javascript para actuar ante la selección de un valor en el calendario, con el nuevo elemento campo/eventos/calendar-update.
  • [r2.16.0.570 - 01/08/2013] (Ticket #100) Se corrigen bugs causados por dos bibliotecas javascript de terceros (ExtJS y DHTML Calendar) que agregaban propiedades con el mismo nombre en el objeto Date, con lo cual la última de las dos en cargarse sobreescribía las propiedades definidas por la primera. Por ejemplo, ambas definen la función Date.parseDate.

    Advertencia de compatibilidad: Para solucionar el problema fue necesario modificar DHTML Calendar para renombrar las propiedades que agrega a Date, es decir que cambió parte del API definido por este widget. Específicamente, los cambios fueron los siguientes:

    Antes Ahora
    Date._MD Date._jscal_MD
    Date.SECOND Date.jscal_SECOND
    Date.MINUTE Date.jscal_MINUTE
    Date.HOUR Date.jscal_HOUR
    Date.DAY Date.jscal_DAY
    Date.WEEK Date.jscal_WEEK
    Date.parseDate Date.jscal_parseDate
    Date.prototype.getMonthDays Date.prototype.jscal_getMonthDays
    Date.prototype.getDayOfYear Date.prototype.jscal_getDayOfYear
    Date.prototype.getWeekNumber Date.prototype.jscal_getWeekNumber
    Date.prototype.equalsTo Date.prototype.jscal_equalsTo
    Date.prototype.setDateOnly Date.prototype.jscal_setDateOnly
  • [r2.16.0.569 - 23/07/2013] (Ticket #99) El formateo de valor de campo por código (listados: /listado/columnas/columna/[formato|formato-variedad]/codigo; formularios master: /formulario/campos//campo/formato/codigo) ahora tiene predefinida una nueva variable: $registro, que le permite al código tener acceso a todos los campos del registro al que pertenece el valor.
  • [r2.16.0.568 - 23/07/2013] (Ticket #98) En listados, la ubicación de código extra inicio_celda_encabezado ahora recibe un parámetro adicional: &'valor_a_mostrar'.
  • [r2.16.0.567 - 23/07/2013] Nueva función PHP info_tipos_pagina_xgap().
  • [r2.16.0.563 - 11/07/2013] Nueva constante RequestXgap::PARAMETRO_DISPOSICION_CONTENIDO_IMPRIMIBLES y nuevo método RequestXgap::disposicionContenido (request.inc.php).

    Se provee una manera de indicar por cada solicitud el tipo de disposición de contenido con que se deben retornar documentos no HTML generados por la aplicación, ignorando durante dicha solicitud el valor del parámetro de configuración disposicion_contenido_imprimibles. Para ello se debe pasar en la solicitud un parámetro con el nombre dado por la constante RequestXgap::PARAMETRO_DISPOSICION_CONTENIDO_IMPRIMIBLES y el valor deseado para la disposición de contenido.

  • [r2.16.0.562 - 11/07/2013] Nuevo método PHP Request::metodo().
Versión 2.15.0 (07/07/2013)
  • [r2.15.0.555 - 07/07/2013] Nuevo objeto javascript XGAP.Flash (flash.js). Permite acceder al Flash después de cargada la página.
  • [r2.15.0.553 - 07/07/2013] Se agregó el script de shell bin/console, que provee un shell interactivo de PHP con un entorno funcional de XGAP precargado. Requiere la versión CLI de PHP con soporte de readline.
  • [r2.15.0.552 - 07/07/2013] Se puede especificar en cada llamado la página de retorno en páginas de tipo listado, formulario, master, contenido, grafico y formulario_reporte, indicándola como valor del nuevo parámetro de request RequestXgap::PARAMETRO_PAG_RETORNO.
  • [r2.15.0.547 - 07/07/2013] Nuevos métodos PHP: Formateo::prepararSalidaString() y Formateo::prepararSalidaUrl().

    La función preparar_salida() ahora es un alias de Formateo::prepararSalidaString(), con algunas mejoras de rendimiento.

  • [r2.15.0.546 - 28/05/2013] (Ticket #94) Nuevo atributo para columnas de listados: /listado/columnas/*/@clase.
  • [r2.15.0.544 - 20/05/2013] (Ticket #93) Mejora en campos de formulario de tipo Seleccionable: se agrega la posibilidad de definir controladores javascript para actuar ante la selección de un valor, con el nuevo elemento campo/eventos/select.
  • (Ticket #92)
    • [r2.15.0.543 - 11/05/2013] Nuevos métodos javascript XGAP_FORM.cambiarHabilitacionSeleccionable(), XGAP_FORM.deshabilitarSeleccionable() y XGAP_FORM.habilitarSeleccionable() (formulario.js).
    • [r2.15.0.542 - 11/05/2013] Nuevos métodos javascript XGAP.cambiarHabilitacionLink(), XGAP.deshabilitarLink() y XGAP.habilitarLink() (utilidades.js).
  • [r2.15.0.539 - 11/05/2013] (Ticket #91) Nueva opción para campos de formulario autocompletables: (texto-autocompletable|seleccionar-autocompletable)/columnas-extra-mostrar.
  • [r2.15.0.522 - 19/04/2013] (Ticket #90) Nuevo parámetro de configuración de aplicación: usar_css_ext_predefinido.
  • [r2.15.0.518 - 30/03/2013] Se crea la versión inicial de un manual de usuario de XGAP, en el directorio doc/manual. Se consolida en este lugar información que antes podía encontrarse separada en diferentes lugares.
  • [r2.15.0.511 - 12/03/2013] Nuevo objeto javascript: XGAP.console (utilidades.js). Provee un reemplazo para window.console que es seguro para usar en cualquier entorno: si la consola no está disponible, los métodos de este objeto no tienen efecto, en vez de producir un error.
  • [r2.15.0.509 - 05/03/2013] Nueva función PHP (funciones.php): xgap_get_remote_file_contents().
  • [r2.15.0.490 - 22/01/2013] Nuevo parámetro en el método PHP Auditor::log(): $tipo; nuevas constantes para usar con este parámetro: Auditor::TIPO_LOG_OPERACION, Auditor::TIPO_LOG_ERROR, Auditor::TIPO_LOG_ADVERTENCIA, Auditor::TIPO_LOG_INFORMACION.

    Advertencia de compatibilidad: El agregado del tipo hace que cambie:

    • el formato del archivo de auditoría; se agrega el tipo como segundo campo en cada línea.
    • la estructura de la tabla de auditoría en la base de datos; se puede usar el script bd/update-2_15_0.sql para actualizar las bases de datos de aplicaciones existentes.
  • (Ticket #87)
    • [r2.15.0.488 - 21/01/2013] Nuevo parámetro de configuración de aplicación: duracion_token_csrf.
    • [r2.15.0.487 - 21/01/2013] Cambio en la interfaz iSeguridad: nuevo método iSeguridad::destruirSesionAplicacion().

      Advertencia de compatibilidad: Las aplicaciones que utilicen una clase de seguridad personalizada (parámetro de configuración clase_seguridad) que no herede de la implementación provista por XGAP (clase Seguridad) deberán implementar este método.

    • [r2.15.0.486 - 21/01/2013] Nuevas clases PHP: XgapRand (rand.inc.php) y XgapCsrf (csrf.inc.php).

      Advertencia de requerimientos: La clase XgapCsrf requiere que esté disponible la extensión Hash de PHP.

    • [r2.15.0.485 - 21/01/2013] Nuevo parámetro de configuración: sal_hashes.
      Se incluye un botón en la página de configuración de la aplicación que permite generar un valor aleatorio para este parámetro.

      Advertencia de compatibilidad: Se debe agregar el parámetro sal_hashes al archivo de configuración de las aplicaciones existentes, dado que es requerido.

    • [r2.15.0.484 - 21/01/2013] Nueva función javascript (utilidades.js): xgap_random_token().
  • (Ticket #84) Soporte para firmas digitales en operaciones de formularios.
    • [r2.15.0.483 - 21/01/2013] Nuevo elemento para formularios: /formulario/firma-digital.
    • [r2.15.0.482 - 21/01/2013] Nuevas clases e interfaces PHP: iXgapPublicKeyInfrastructure, iXgapStoredPublicKeyInfrastructure, iFirmaOperacion, XgapPublicKeyInfrastructure, XgapOpenSslPublicKeyInfrastructureTest, XgapDefaultOpenSslPublicKeyInfrastructure, FirmaOperacion, FirmaOperacionDefault.
    • [r2.15.0.481 - 21/01/2013] Nueva constante booleana, disponible para las aplicaciones en tiempo de ejecución: XGAP_FIRMADO_OPERACIONES_HABILITADO; se define automáticamente durante la generación en xgap.php, de acuerdo al valor de aplicacion.xml:/aplicacion/seguridad/@usa-firmas-digitales.
    • [r2.15.0.480 - 21/01/2013] Nueva opción de configuración de generación en aplicacion.xml: /aplicacion/seguridad/@usa-firmas-digitales. Permite habilitar o deshabilitar en tiempo de generación el uso del soporte de firmas.
    • [r2.15.0.479 - 21/01/2013] Nuevos parámetros de configuración de la aplicación: archivo_clase_pki, clase_pki, archivo_clase_firmaoperacion, clase_firmaoperacion, frase_clave_privada_requerida, certificado_obligatorio_en_carga_clave_privada, codificador_datos_firmaoperacion y archivo_codificador_datos_firmaoperacion.
  • [r2.15.0.475 - 18/01/2013] Cambios en la clase PHP Contexto:
    • Nuevos métodos: Contexto::existeSesion(), Contexto::idSesion(), Contexto::cambiarIdSesion() y Contexto::regenerarIdSesion().
    • Por consistencia en los nombres, se agrega el método Contexto::destruirSesionAplicacion() con la misma funcionalidad que Contexto::destruir_sesion_aplicacion() y este último se hace obsoleto, disparando un aviso si se invoca.
  • [r2.15.0.473 - 18/01/2013] (Ticket #86) Se agrega la posibilidad de definir el tiempo máximo de inactividad de la sesión, de forma separada para cada aplicación, usando el nuevo parámetro de configuración duracion_sesion. Si el tiempo de inactividad se supera, en el siguiente acceso se destruye automáticamente la sesión de esa aplicación, sin afectar a las demás. Este control es independiente de la duración de sesión configurada en PHP.

    Nuevo método PHP Contexto::obtenerTiempoUltimaActividad()

  • [r2.15.0.472 - 17/01/2013] (Ticket #85) Los menúes generados a partir de archivos *_menu.xml se pueden guardar en un cache para evitar que se recreen en cada solicitud.
    • Nuevos atributos para las definiciones de menúes: /menu/@cache, para indicar el tipo de cache a usar (por defecto se usa cache por rol), y /menu/@id para permitir que las aplicaciones guarden más de un menú en cache.
    • Se reconoce un nuevo parámetro en los requests, definido por RequestXgap::PARAMETRO_RECARGA_MENU. Si está presente en el request, se invalida el cache y se reconstruye el menú.
  • [r2.15.0.470 - 17/01/2013] Nuevas clases PHP XgapXml y XgapXmlArray (xml.inc.php).
  • [r2.15.0.469 - 17/01/2013] Nuevas excepciones PHP: XgapNotImplementedException, XgapFunctionNotImplementedException y XgapMethodNotImplementedException.
  • [r2.15.0.468 - 17/01/2013] Los items de menúes generados a partir de archivos *_menu.xml ahora comprueban si el usuario tiene permiso para acceder al destino (/menu//item/@url), de acuerdo a lo que indica iSeguridad::puedeVerPagina(), y no se muestran en caso de no tenerlo.

    Advertencia de compatibilidad: En el código generado ahora se convierten correctamente los caracteres XML especiales en entidades. Esto implica que si en un archivo de definición de menú se estaban escapando manualmente estos caracteres, se debe corregir para eliminar el escape manual. Por ejemplo, si ppal_menu.xml antes decía:
    url="ciudad_listado.php?xgap_historial=reset&amp;amp;agregado=true"
    se debe cambiar a:
    url="ciudad_listado.php?xgap_historial=reset&amp;agregado=true"

  • [r2.15.0.467 - 17/01/2013] Nuevos métodos PHP: Flash::vaciar(), Flash::existeSiguiente() y Flash::obtenerSiguiente().
  • [r2.15.0.466 - 17/01/2013] Cambios en la clase PHP Conexion:
    • Nuevos métodos Conexion::blobEncode() y Conexion::blobDecode().
    • Los métodos Conexion::ejecutarConsulta(), Conexion::ejecutarConsultaLimitOffset(), Conexion::ejecutarConsultaSegura(), Conexion::ejecutarConsultaSeguraLimitOffset(), Conexion::ejecutarConsultaActualizacion(), Conexion::obtenerPrimeraFila(), Conexion::obtenerPrimero() y Conexion::obtenerTodos() reciben un nuevo parámetro $excepcion, que permite indicar si al producirse un error en la consulta se debe disparar una excepción o generar un error de aplicación, como ocurría hasta ahora; el comportamiento predeterminado sigue siendo generar un error.
  • [r2.15.0.465 - 17/01/2013] Nueva clase PHP: XgapClassLoader (classloader.inc.php). Implementa carga automática de clases/interfaces provistas por XGAP. Se activa automáticamente cuando se carga la configuración, o se puede habilitar manualmente invocando a XgapClassLoader::register().
  • [r2.15.0.463 - 16/01/2013] Se define explícitamente qué parámetros de configuración son requeridos.

    Advertencia de compatibilidad: Ahora se verifica más estrictamente la correctitud de los parámetros de configuración durante la carga del archivo conf.inc.php, por lo cual se producirán excepciones en aplicaciones que tengan algún problema de configuración que antes no se detectaba, por ejemplo un parámetro requerido faltante o un parámetro entero definido como string.

  • [r2.15.0.461 - 16/01/2013] Nueva interfaz PHP: iXgapVarConvert (ivarconvert.inc.php), con implementaciones: XgapVarConvertSerialized (varconvertserialized.inc.php), XgapVarConvertExported (varconvertexported.inc.php), XgapVarConvertJson (varconvertjson.inc.php), XgapVarConvertXml (varconvertxml.inc.php).
  • [r2.15.0.457 - 16/01/2013] Cambios en la clase PHP Http (http.inc.php): nuevos métodos Http::statusLine() y Http::getStatusCodeReasonPhrase(); nuevas constantes Http::HTTP1_STATUS_*
  • [r2.15.0.456 - 16/01/2013] Nuevos métodos PHP: Formateo::entrecomilladoSimple() y Formateo::entrecomilladoDoble().
  • [r2.15.0.455 - 16/01/2013] Cambios en la clase PHP Json (json.inc.php):
    • Nuevo método Json::decodificar()
    • Nuevo parámetro $opciones en Json::codificar()
    • Json::codificar() ahora dispara una excepción si no puede codificar el valor dado.
  • [r2.15.0.454 - 16/01/2013] Nuevas funciones PHP: es_array_indexado_secuencial(), matrix_2d_transpose(), find_classes_in_dir(), xgap_convert_encoding(), xgap_convert_encoding_to_utf8(), xgap_convert_encoding_to_internal() (funciones.php).
  • [r2.15.0.451 - 15/01/2013] Nueva clase PHP: XgapGenericFactory (genericfactory.inc.php).
  • [r2.15.0.448 - 15/01/2013] Nueva clase PHP: Recursos (recursos.inc.php), que provee acceso a objetos globales.
  • [r2.15.0.447 - 15/01/2013] Nuevos métodos en la clase PHP FormFileUpload (upload.inc.php): FormFileUpload::contenido(), FormFileUpload::contenidoLineas().
  • [r2.15.0.446 - 14/01/2013] Nuevo parámetro en el método PHP Form::abrir_grupo (form.inc.php): $clase.
  • [r2.15.0.445 - 14/01/2013] Nuevos métodos en la clase PHP Componentes (componentes.inc.php): Componentes::separadorGrupoFormulario() y Componentes::comentarioCampoFormulario().
  • [r2.15.0.443 - 14/01/2013] Nuevos métodos para manejo de mensajes en la clase PHP ExcepcionXGAP (xgap.php): ExcepcionXGAP::getFullMessage(), ExcepcionXGAP::getFullDevMessage(), ExcepcionXGAP::prependToMessage(), ExcepcionXGAP::appendToMessage(), ExcepcionXGAP::prependToDevMessage(), ExcepcionXGAP::appendToDevMessage() y ExcepcionXGAP::__toString().
Versión 2.14.1 (21/09/2012)
  • [r2.14.1.434 - 02/08/2012] Se agrega un nuevo paso de generación que permite compilar los archivos PHP producidos. Requiere que esté instalada la extensión PECL bcompiler.
  • [r2.14.1.433 - 02/08/2012] Nuevos parámetros de configuración: id_usuario_en_sesion_base_nombre e id_usuario_en_sesion_base_var.
  • [r2.14.1.432 - 02/08/2012] Nuevos métodos PHP: Conexion_postgres8::cambiarParametroConfiguracion() y Conexion_postgres8::establecerVariableSesion().
  • [r2.14.1.421 - 09/06/2012] Nuevo parámetro en Conexion::ejecutarStoredProcedure() (conexion.inc.php): $registro_log. Permite indicar si se debe guardar la operación en el log del auditor.
Versión 2.14.0 (09/06/2012)
  • [r2.14.0.415 - 09/06/2012] (Ticket #44) Compatibilización con PHP 5.3.
  • [r2.14.0.411 - 10/04/2012] Nuevo método PHP: Formateo::ip4SinCerosIniciales().
  • [r2.14.0.404 - 29/03/2012] Nuevo método PHP: Html::idValido().
Versión 2.13.3 (20/11/2011)
  • [r2.13.3.394 - 20/11/2011] Nuevo elemento para separadores de campos en formularios: /formulario/campos//separador_grupo/@nombre.
  • [r2.13.3.392 - 09/11/2011] Nuevo atributo para campos seleccionables autocompletables en formularios (/formulario/campos//campo[@tipo="Seleccionable"]/texto-autocompletable y /formulario/campos//campo[@tipo="Seleccionable"]/seleccionar-autocompletable): @es-combo.
  • [r2.13.3.387 - 20/05/2011] (Ticket #73)
    • Nuevo parámetro en Javascript::codificarString(): $comillas_dobles.
    • Se pasa a tener la extensión XMLWriter como dependencia, si se usan menúes de details en masters.
  • [r2.13.3.384 - 10/06/2011] (Ticket #71)
    • Nueva clase PHP: SmtpEmail (email.inc.php).
    • Nuevos parámetros de configuración: XGAP_CONF_SMTP_HOST, XGAP_CONF_SMTP_PORT, XGAP_CONF_SMTP_USER, XGAP_CONF_SMTP_PASS, XGAP_CONF_SMTP_SECURITY.
    • El método Mensaje::mail() ahora envía el email via SMTP si la aplicación está configurada para usar este protocolo.
  • (Ticket #70) Formularios: Se agrega autocompletado opcional en campos de texto y seleccionables.
    • [r2.13.3.373 - 20/05/2011]
      • Nuevos elementos para campos en páginas de tipo formulario: /formulario/campos//campo/texto-autocompletable y /formulario/campos//campo/seleccionar-autocompletable, aplicables cuando campo[not(@tipo)] o campo[@tipo="Seleccionable"].
      • Nuevo método PHP: Form::autocompletable() (form.inc.php) y nueva función javascript XGAP_FORM.crearCampoAutocompletable() (formulario.js).
      • Nueva clase PHP: Json (json.inc.php).
    • [r2.13.3.374 - 20/05/2011] Nueva función javascript XGAP_FORM.moverFocoAPrimerCampo() (formulario.js).
  • [r2.13.3.371 - 20/05/2011] Nuevos métodos en la clase Conexion: Conexion::ejecutarConsultaSeguraSinMsg(), Conexion::ejecutarConsultaSeguraLimitOffsetSinMsg(), Conexion::expresionComparacionBinaria(), Conexion::operadoresBinariosComparacion(), Conexion::textoOperadorBinarioComparacion().
Versión 2.13.2 (19/05/2011)
  • [r2.13.2.361 - 16/05/2011] Cambio en masters: las filas de la tabla principal del master ahora se generan con id, igual al de las filas de formularios: id="{nombre del campo}_fila".
  • [r2.13.2.360 - 16/05/2011] Nuevo parámetro en Tabla::abrirFila() (tabla.inc.php): $nombre.
  • [r2.13.2.356 - 09/05/2011] Nuevas funciones PHP (funciones.php): unserialized_ok() y unserialize_with_exception(); nueva excepción PHP ExcepcionXGAPUnserialize.
  • [r2.13.2.352 - 09/05/2011]
    • Nueva clase singleton Pagina (pagina.inc.php)
    • Nuevas clases ObjetoMensaje y ListaMensajes (mensaje.inc.php)
    • Nuevos métodos Mensaje::mostrar() y Mensaje::mostrarLista() (mensaje.inc.php).

    Se agrega un modo para que el código personalizado tenga la posibilidad de mostrar mensajes en las páginas de una forma estandarizada.
    Ejemplo de uso:

    <formulario>
        ...
        <codigoExtra>
            ...
            <codigo ubicacion="despues_inicializacion" tipo="PHP">
                <![CDATA[
                ...
                Pagina::instancia()->mensajes()->agregar(ObjetoMensaje::nuevo(
                        'No se pudo realizar la comprobaci&oacute;n.',
                        Mensaje::TIPO_ALERTA));
                ...
                ]]>
            </codigo>
            ...
        </codigoextra>
        ...
    </formulario>

    Los mensajes almacenados en Pagina::instancia()->mensajes() se muestran automáticamente en páginas de tipo formulario, formulario_reporte, master, listado, seleccion y seleccion_m. Para mostrarlos en páginas de tipo contenido, se puede incluir código similar al siguiente dentro de /pagina/contenido:

    if (!Pagina::instancia()->mensajes()->isEmpty()) {
        Mensaje::mostrarLista(Pagina::instancia()->mensajes(), true, null, 'cont-msjs-pag');
    }
  • [r2.13.2.349 - 09/05/2011] Cambios en la clase Http:
    • Nuevos parámetros en Http::noCache(): $send_content_type, $media_type, $charset.
    • Http::headerContentType() ahora no envía charset si el parámetro $charset es vacío.
  • [r2.13.2.348 - 08/04/2011] Nuevo elemento para comandos en páginas de tipo contenido: /pagina/configuracion/comandos-genericos/comando/preparar.
  • [r2.13.2.346 - 21/03/2011] (Ticket #69) Se agrega la posibilidad de especificar condiciones en los elementos de menúes para indicar si deben mostrarse o no en tiempo de ejecución.
    Para ello se incorporan a la definición del menú los elementos carpeta/condicion, item/condicion y separador/condicion.
  • [r2.13.2.345 - 19/03/2011] Mejoras en la definición de menúes: Nuevos atributos carpeta/@id, carpeta/@clase, carpeta/@tip, item/@id, item/@clase, item/@tip.
  • [r2.13.2.339 - 15/03/2011] Cambios en la clase PHP Conexion (conexion.inc.php):
    • Nuevos métodos: Conexion.estaConectado() y Conexion.reconectar().
    • Cambios en los metadatos retornados por Conexion.metaDatos():
      • Se incluyen tres nuevos campos: 'gentype', 'size' y 'scale'. El campo 'gentype' puede tomar cualquiera de los valores definidos por las nuevas constantes Conexion::DATATYPE_*.
      • Se modifican los valores devueltos en los campos 'len' y 'clen', dado que eran inconsistentes: en algunos casos representaban la longitud del campo y en otros su tamaño; ahora corresponden siempre a la longitud y el campo 'size' al tamaño.
  • [r2.13.2.337 - 14/03/2011] Se agrega la posibilidad de cambiar la tecla rápida asociada a los comandos predeterminados en formularios:
    • Nuevos parámetros de configuración de la aplicación tecla_acceso_boton_agregar, tecla_acceso_boton_agregar_seguir, tecla_acceso_boton_borrar, tecla_acceso_boton_cancelar y tecla_acceso_boton_guardar.
    • Nuevos atributos /formulario/configuracion/boton-agregar/@teclaacceso, /formulario/configuracion/boton-agregar-seguir/@teclaacceso, /formulario/configuracion/boton-borrar/@teclaacceso, /formulario/configuracion/boton-cancelar/@teclaacceso y /formulario/configuracion/boton-guardar/@teclaacceso.
  • [r2.13.2.334 - 24/02/2011] Nuevo método PHP: DescriptorPaginas::tipoFormulario().
  • [r2.13.2.333 - 24/02/2011] Nuevos elementos para páginas de tipo reporte_odt: /odt/configuracion/antes-inicializacion y /odt/configuracion/salida.
  • [r2.13.2.332 - 23/02/2011] Nuevas funciones PHP (funciones.php): str_starts_with(), str_istarts_with(), str_ends_with(), str_iends_with().
  • [r2.13.2.330 - 23/02/2011] Nuevo atributo en el elemento raíz de todos los tipos de página: /*/@mantener-pagina-sesion-vencida, que permite evitar la redirección a la página de inicio cuando vence o no está creada la sesión del usuario. Se puede obtener el mismo efecto definiendo una constante PHP con nombre XGAP_CONF_MANTENER_PAGINA_SESION_VENCIDA y valor true, antes de la inicialización de XGAP en la página.
  • [r2.13.2.328 - 19/02/2011] Se elimina del motor la versión 4.92a de ADOdb (motores/ultimo/clases/terceros/adodb), por lo cual ya no se puede usar el parámetro de configuración version_adodb con valor vacío.
Versión 2.13.1 (19/02/2011)
  • [r2.13.1.326 - 01/02/2011] Nuevo parámetro de configuración para las aplicaciones: longitud_max_cols_text.
  • [r2.13.1.324 - 13/01/2011] Nuevo método en la clase PHP Conexion: Conexion::esBooleano().
  • Se modificaron varias de las páginas provistas por defecto para las aplicaciones, ubicadas en el directorio xml del motor. Los cambios no pasan automáticamente a las aplicaciones generadas, por lo cual es conveniente comparar estas páginas con las ya existentes en las aplicaciones y pasar manualmente las diferencias.
    • error_formulario_contenido.xml [r263]
    • error_contenido.xml [r263]
    • index_contenido.xml [r296]
    • login_contenido.xml [r298]
    • logout_contenido.xml [r298]
    • seguridad_contenido.xml [r321]
    • seleccionarrol_contenido.xml [r323]
  • [r2.13.1.304 - 03/01/2011] Nuevo atributo para acciones globales en listados: /listado/configuracion/acciones/accion/destino/@historial.
  • [r2.13.1.301 - 29/12/2010] Cambios en clase PHP Mensaje (mensaje.inc.php): Los métodos Mensaje::error(), Mensaje::alerta(), Mensaje::notificacion(), Mensaje::info() y Mensaje::generico() reciben un nuevo parámetro: $clase_extra.
  • [r2.13.1.300 - 29/12/2010] Nuevo método en clase PHP Conexion (conexion.inc.php): Conexion::concat().
  • [r2.13.1.297 - 22/12/2010] Nuevos parámetros en el método PHP AdministradorHistorial::actualizar() (historial.inc.php): $comandos e $ignorar_request.
  • [r2.13.1.295 - 22/12/2010] Cambios en clase PHP Flash (flash.inc.php):
    • Nuevo método Flash::instancia().
    • El método Flash::mantener() ahora mantiene también el tiempo de presentación actual; este comportamiento se puede controlar con el nuevo parámetro $mantener_tiempo_presentacion.
  • [r2.13.1.293 - 22/12/2010] Nuevos métodos en clase PHP Request (request.inc.php): Request::eliminar(), Request::eliminarGet(), Request::eliminarPost().
  • [r2.13.1.289 - 13/12/2010] Cambio en funciones javascript cambiarSeleccionSelect() y restaurarSeleccionSelect() (formulario.js): ahora disparan un evento change sobre el select que afectan.
  • [r2.13.1.287 - 09/12/2010] (Ticket #66)
    • Nuevo elemento para campos de formulario de tipo 'Lista' y 'ListaBD': /formulario//campos//campo/controles-seleccion-lista, que indica que se debe adjuntar a la lista una serie de controles para modificar la selección de sus elementos, los cuales permiten seleccionar y deseleccionar todos los elementos, y restaurar la selección inicial.
      Es posible especificar opciones para estos controles mediante elementos hijos de controles-seleccion-lista.
    • Nuevos parámetros para Form::select_multiple() (form.inc.php): $controles_seleccion y $opciones_controles_seleccion.
    • Nueva función javascript (formulario.js): restaurarSeleccionSelect().
  • [r2.13.1.286 - 09/12/2010] (Ticket #65) Nuevo atributo para el elemento titulo de campos de formulario de tipo 'CheckBox': /formulario/campos//campo[@tipo='CheckBox']/titulo/@posicion.
  • [r2.13.1.285 - 09/12/2010] (Ticket #64) Nuevo atributo para el elemento consulta-sm de campos de formulario (tipo 'SeleccionableMultiple', 'Lista' y 'ListaBD'): /formulario/campos//campo/consulta-sm/@realizar-en-alta.
  • [r2.13.1.284 - 09/12/2010] (Ticket #63) El atributo /formulario/campos//campo/@filas ahora permite el valor 0 para campos de tipo 'SeleccionableMultiple', 'Lista' y 'ListaBD', el cual indica que la lista generada debe tomar la altura que le asigna por defecto el navegador.
  • [r2.13.1.280 - 01/12/2010] (Ticket #62) Nuevo elemento para campos de formulario: /formulario/campos//campo[@tipo="SeleccionableMultiple"]/orderby.
  • [r2.13.1.275 - 29/11/2010] (Ticket #61) Cambio en listados, en columnas de acciones enviadas por POST (/listado/columnas/acciones/accion[tipo-request="POST"]): los parámetros se estaban enviando al destino como parte del URL; ahora se envían como parte del POST.
  • [r2.13.1.273 - 29/11/2010] (Ticket #60)
    • Cambios en la clase Flash: nuevos métodos Flash::tiempoPresentacionActual(), Flash::cambiarTiempoPresentacionActual(), Flash::tiempoPresentacionSiguiente() y Flash::cambiarTiempoPresentacionSiguiente(); nueva constante Flash::TIEMPO_PRESENTACION_INDETERMINADO.
    • Se elimina la constante Componentes::DURACION_MENSAJE_FLASH.
Versión 2.13.0 (28/11/2010)
  • [r2.13.0.269 - 17/11/2010]
    • Nuevos tipos de campo de formulario (/formulario/campos//campo/@tipo): Lista y ListaBD.
    • Nuevo elemento para campos de formulario de tipo Combo o Radio (/formulario/campos//campo[@tipo="Combo" or @tipo="Radio"]): select/options, alternativo al ya existente select/option.
  • [r2.13.0.266 - 17/11/2010]
    • Nuevos métodos PHP: Html::atributoTexto() y Html::atributoSimple().
    • Se escapa correctamente (a) la salida HTML generada por Html::abrirTag() y el parámetro $titulo de los métodos de la clase Form; (b) la salida javascript producida por la clase Tooltip; (c) el código PHP generado a partir de /formulario/campos//campo/tip, /formulario/campos//campo[@tipo='Link']/etiqueta, /formulario/campos//campo[@tipo='Link']/click y /formulario/campos//campo[@tipo='Link']/destino-link/parametros/parametro/@valor. Advertencia de compatibilidad: Esto provoca problemas en aplicaciones existentes que escapan el texto manualmente en los lugares mencionados, dado que se produce un doble escape.
  • [r2.13.0.262 - 09/11/2010] Nuevo elemento en páginas de contenido: /pagina/configuracion/comandos-genericos/comando/condicion.
  • [r2.13.0.261 - 09/11/2010] Cambios en /*/seguridad/validacionExtra, para todos los tipos de página:
    • Nuevo atributo: validacionExtra/@metodo-http.
    • El código PHP en validacionExtra/codigo tiene disponibles nuevos parámetros: &$mensaje_usuario, &$mensaje_debug y &$params_extra, que permiten pasar mensajes y parámetros arbitrarios a la página de error.
  • [r2.13.0.257 - 09/11/2010] Nuevos métodos en la clase HistorialNavegacion (historial.inc.php): HistorialNavegacion::siguienteA(), HistorialNavegacion::anteriorA() y HistorialNavegacion::primeroPorTipo().
  • [r2.13.0.255 - 09/11/2010] Http::redirigirAError() (configuracion.inc.php) ahora permite (1) indicar el método HTTP a usar para la redirección (GET o POST) y (2) pasar parámetros arbitrarios a la página destino.
  • [r2.13.0.253 - 09/11/2010] Nuevo método (configuracion.inc.php): Configuracion::paginaInterna().
  • [r2.13.0.249 - 09/11/2010] Nueva función PHP (funciones.php): urlCompletoPagina().
  • [r2.13.0.247 - 03/11/2010] Nuevo elemento para listados: columnas/columna/parametros-link.
Versión 2.12.10 (27-10-2010)
  • [r2.12.10.245 - 21/10/2010] Nueva ubicación de código extra para todos los tipos de página: xgap_cargado.
  • [r2.12.10.244 - 21/10/2010] Nuevo elemento para campos de formularios: /formulario/campos//campo/validacion-servidor.
  • [r2.12.10.243 - 20/10/2010] Nuevo elemento para campos de formularios y masters: /formulario/campos//campo/comentarios/comentario.
  • [r2.12.10.240 - 13/10/2010] Se agregan ubicaciones de código extra en páginas de contenido: 'despues_html', 'en_head', 'inicio_body', 'fin_body, 'despues_abrir_estructura', 'antes_cerrar_estructura'.
  • [r2.12.10.237 - 13/10/2010] (Ticket #57) Se definen nuevas constantes PHP:
    XGAP_VERSION_MOTOR
    Versión del motor en uso (disponible en tiempo de generación y de ejecución).
    XGAP_VERSION_MOTOR_GEN
    Versión del motor con que se generó la aplicación (disponible sólo en tiempo de ejecución).
    XGAP_TIMESTAMP_GEN
    Momento en que se generó la aplicación, en formato de timestamp de UNIX (disponible sólo en tiempo de ejecución).
  • [r2.12.10.225 - 15/09/2010] Cambios en clase Request:
    • Nuevo parámetro $ajustar_si_array en Request::obtener(), Request::obtenerPost() y Request::obtenerGet().
    • Nuevo parámetro $actualizar_request en Request::almacenarPost() y Request::almacenarGet().
  • [r2.12.10.221 - 10/09/2010] (Ticket #55)

    Se permite especificar una condición en cada acción global en listados (configuracion/acciones/accion), para determinar en tiempo de ejecución si debe estar habilitada o no; en caso de no estarlo, no se emite en la página el botón para invocarla.

    Para ello, se agrega el elemento configuracion/acciones/accion/condicion.

  • [r2.12.10.220 - 09/09/2010] (Ticket #3)

    Se brinda la posibilidad de ocultar cualquier columna en un listado, de acuerdo a una condición que se evalúa en tiempo de ejecución. Anteriormente esta funcionalidad sólo estaba disponible para columnas de acciones.

    Para ello, se permite el elemento condicion en cualquier tipo de columna: checkbox/condicion, combo/condicion y columna/condicion, además del ya existente acciones/condicion.

  • [r2.12.10.208 - 30/08/2010] (Ticket #54) Nuevo tipo de campo de formularios: Personalizado (/formulario/campos//campo/@tipo='Personalizado'). Para trabajar con este tipo de campo se agregan también el elemento campo/contenido y el atributo campo/@multilinea.
  • [r2.12.10.207 - 30/08/2010] (Ticket #53) Nuevo elemento para formularios: /formulario/campos//campo/preparar-valor.
  • [r2.12.10.200 - 23/08/2010] (Ticket #51)

    Nuevos parámetros de configuración: css_ie y css_ie8.

    En la clase Html se agregan las constantes Html::NAVEGADOR_IE y Html::NAVEGADOR_IE8, que se pueden utilizar en el parámetro $csss de Html::head().

  • [r2.12.10.199 - 23/08/2010] Cambio en funciones javascript chequear_multiple y chequear_multiple_valor (utilidades.js): ahora disparan el evento 'change' para cada uno de los checkboxes cuyo estado cambia.
  • [r2.12.10.196 - 06/08/2010] (Ticket #50) Nuevo método PHP (historial.inc.php): EntradaHistorial::eliminar_variables().
  • [r2.12.10.195 - 06/08/2010] (Ticket #49)
    • Nuevo atributo en acciones de listados: /listado/configuracion/acciones/accion/destino/@tipo-request.
    • Nuevo método PHP (http.inc.php): Http::redirigirPorPost().
    • Nueva constante PHP (html.inc.php): Html::DEFAULT_ENCODING.
  • [r2.12.10.194 - 06/08/2010] (Ticket #48) Nuevo elemento en listados: /listado/columnas/checkbox/valor, para modificar el valor que contienen los checkboxes. Actualmente define valor/incluir/columna-consulta, para indicar otras columnas a incluir.
  • [r2.12.10.187 - 29/07/2010] Nuevos elementos para configurar gráficos incorporados simples en listados: serie/color, serie/espesorLinea y serie/simbolo.
    De especial interés es que con esto ahora se puede generar diagramas de dispersión XY, como caso particular de un gráfico de línea donde se especifica un símbolo para sus puntos y que el trazo no tenga grosor.

    Ejemplo de uso:

    <graficoLinea>
        ...
        <datos>
            <serie>
                ...
                <espesorLinea>0</espesorLinea>
                <simbolo>rombo</simbolo>
            </serie>
        </datos>
    </graficoLinea>
  • [r2.12.10.184 - 27/07/2010] (Ticket #47) Nuevo atributo para acciones en columnas de listados: columnas/acciones/accion/@nombre.
    Se utiliza para definir el id del elemento que ejecuta la acción (link o botón). Si está presente, el id de cada elemento es "{@nombre}_{nro fila}"; por ejemplo, si @nombre="mostrar", el id del elemento en la cuarta fila resulta "mostrar_4". Si no está presente, el nombre por defecto es "accion_{ind columna acciones}_{ind accion}_{nro fila}"; por ejemplo, en una acción definida como segunda acción en la primera columna de acciones, la cuarta fila tiene nombre por defecto "accion_1_2_4".
  • [r2.12.10.174 - 20/07/2010] (Ticket #46) Se agregan los elementos columna/formato y columna/formato-variedad en listados y campo/formato en masters, que permiten definir el formato a aplicar a los valores.

    Se proveen tres formas distintas para definir el formato:

    simple
    Utiliza la función PHP sprintf() para aplicar formato al valor.
    funcion
    Realiza el formateo mediante el llamado a una función o método.
    codigo
    Formatea el valor mediante el código PHP dado.

    Ejemplos:

    <columna>...
        <formato>
            <codigo>
                <![CDATA[
                return strtoupper(preg_replace('/\d/', '#', $valor));
                ]]>
            </codigo>
        </formato>...
    </columna>
    <columna>...
        <formato>
            <simple formato="%08u"/>
        </formato>...
    </columna>
    <columna>...
        <formato-variedad>
            <funcion nombre="MyFormatter::htmlAddress"/>
            <aplicar-en>
                <normal/><seleccion/><seleccion_m/><master_inline/>
            </aplicar-en>
        </formato-variedad>
        <formato-variedad>
            <funcion nombre="MyFormatter::textAddress"/>
            <aplicar-en>
                <csv/><ods/><pdf/><rtf/><xls/>
            </aplicar-en>
        </formato-variedad>...
    </columna>
  • [r2.12.10.171 - 20/07/2010] Nuevos métodos PHP (validacion.inc.php): Validacion::esLatitud(), Validacion::esLongitud(), Validacion::esCoordUtm(), Validacion::esFechaValida(), Validacion::esFechaFutura(), Validacion::esFechaMayor().
  • [r2.12.10.170 - 20/07/2010] Nuevos métodos PHP (conexion.inc.php): Conexion::existeFila() y Conexion::existeFilaCond().
Versión 2.12.9 (14-07-2010)
  • [r2.12.9.166 - 06/07/2010] (Ticket #43)

    Nueva funcionalidad: Generación de gráficos incorporados en listados (/listado/configuracion/graficos).
    Permite agregar en forma sencilla un gráfico sobre los datos obtenidos de la misma consulta SQL que se utiliza en el listado y así ofrecer una presentación de los valores tanto en forma tabular como gráfica a la vez. Se soporta la creación de gráficos de linea y de barra, que se obtienen por AJAX al solicitarlo el usuario desde el listado.

    Ejemplo de uso:

    <listado>
        ...
        <generacion>
            <salidas>
                <normal/><pdf/><xls/><ods/><grafico_simple/>
            </salidas>
        </generacion>
        <configuracion>
            ...
            <graficos>
                <graficoLinea>
                    <ejeAbscisasTemporal>
                        <etiqueta>Fecha</etiqueta>
                    </ejeAbscisasTemporal>
                    <ejeOrdenadas>
                    <etiqueta>Temperatura [°C]</etiqueta>
                    </ejeOrdenadas>
                    <datos>
                        <serie>
                            <nombre>Mínima</nombre>
                            <clave>unixtimestamp</clave>
                            <valor>minval</valor>
                        </serie>
                        <serie>
                            <nombre>Promedio</nombre>
                            <clave>unixtimestamp</clave>
                            <valor>avgval</valor>
                        </serie>
                        <serie>
                            <nombre>Máxima</nombre>
                            <clave>unixtimestamp</clave>
                            <valor>maxval</valor>
                        </serie>
                    </datos>
                </graficoLinea>
            </graficos>
            ...
        </configuracion>
        ...
    </listado>
  • [r2.12.9.158 - 24/06/2010] Se agrega un nuevo tipo de campo para buscadores personalizados simples en listados: listacampos (/listado/configuracion/buscador/personalizado-simple/listacampos), formado por una lista de campos de los otros tipos disponibles.
  • [r2.12.9.156 - 17/06/2010] (Ticket #45)

    Nuevo método: iSeguridad::operacionHabilitada(), implementado en Seguridad::operacionHabilitada(); XGAP lo utiliza en las páginas generadas, para determinar si una operación debe estar disponible.
    La implementación provista devuelve siempre true. Queda a criterio de las aplicaciones definir una clase de seguridad personalizada, con una implementación diferente.
    De este modo, las aplicaciones pueden realizar un control genérico sobre el acceso a las operaciones en las páginas.
    Por el momento se aplica a las operaciones Agregar, Modificar y Eliminar (formularios).

    Para no crear un overhead en tiempo de ejecución en aplicaciones que no requieran la nueva funcionalidad, se agregó una nueva opción de configuración de generación en aplicacion.xml: /aplicacion/seguridad/@verificar-acceso-operaciones; si esta opción no está presente o tiene valor 'false', no se incluye la invocación a iSeguridad::operacionHabilitada() en los archivos PHP generados. Además, para permitir especificar este comportamiento en cada página, se agregó en todos los tipos de página la opción /*/seguridad/@verificar-acceso-operaciones, que tiene mayor prioridad que la opción global. Por otro lado, sólo se aplica si la página utiliza seguridad (/*/seguridad).

    Advertencia de compatibilidad: Las aplicaciones que utilicen una clase de seguridad personalizada (parámetro de configuración clase_seguridad) que no herede de la implementación provista por XGAP (clase Seguridad) deberán implementar este método.

  • [r2.12.9.155 - 17/06/2010] (Ticket #45) Nueva interfaz iOperacion, en interfaces/iOperacion.inc.php, y nuevas clases Operacion, OperacionAgregar, OperacionEditar y OperacionBorrar, en clases/operacion.inc.php.
  • [r2.12.9.154 - 17/06/2010] Nuevas funciones PHP (funciones.php): tipo_pagina(), empty2(), array_tiene_vacios() y array_vacio().
  • [r2.12.9.145 - 02/06/2010] (Ticket #42) Se crea el esquema XSD para páginas de tipo grafico: grafico.xsd.
  • [r2.12.9.142 - 02/06/2010] Se agregan ubicaciones de código extra a las páginas de gráfico (/grafico/codigoExtra/codigo/@ubicacion), que hasta el momento no tenían ninguna definida.
  • [r2.12.9.135 - 10/05/2010] Corregido bug en formularios: por una regresión introducida en el año 2008, el texto del comando Agregar y Seguir (configuracion/agregar-seguir) quedaba igual que el del comando Agregar y Volver (configuracion/agregar-volver), con lo cual el usuario no los podía distinguir.
    Para solucionarlo, se introdujeron:
    • un nuevo elemento para los formularios, en formulario.xsl: /formulario/configuracion/boton-agregar-seguir
    • un nuevo parámetro de configuración: texto_boton_agregar_seguir
    • un nuevo recurso: img_btn_agregar_seguir
  • [r2.12.9.131 - 06/05/2010] (Ticket #41) Nuevo método: iSeguridad::puedeVerPaginaParams(), implementado en Seguridad::puedeVerPaginaParams(), que se utiliza para comprobar si una página se puede visitar, de acuerdo a su dirección y los parámetros que va a recibir.
    Este método se aplica en cada lugar donde se puede navegar a otra página y deshabilita el medio de navegación (link o botón) si devuelve false, permitiendo a las aplicaciones tener un control fino de los permisos.
    La implementación provista devuelve siempre true. Queda a criterio de las aplicaciones definir una clase de seguridad personalizada, con una implementación diferente.
    Para no crear un overhead en tiempo de ejecución en aplicaciones que no requieran la nueva funcionalidad, se agregó una nueva opción de configuración de generación en aplicacion.xml: /aplicacion/seguridad/@verificar-acceso-destino-final; si esta opción no está presente o tiene valor 'false', no se incluye la invocación a iSeguridad::puedeVerPagina() en los archivos PHP generados. Además, para permitir especificar este comportamiento en cada página se agregó en todos los tipos de página la opción /*/seguridad/@verificar-acceso-destino-final, que tiene mayor prioridad que la opción global.

    Advertencia de compatibilidad: Las aplicaciones que utilicen una clase de seguridad personalizada (parámetro de configuración clase_seguridad) que no herede de la implementación provista por XGAP (clase Seguridad) deberán implementar este método.

  • [r2.12.9.130 - 06/05/2010] Se cambia la forma de presentación de acciones globales en listados (configuracion/acciones/accion) que quedan deshabilitadas: ahora no se genera el botón de ejecución de la acción, en lugar de mostrarlo deshabilitado, por consistencia con el comportamiento de los demás botones en la página.
  • [r2.12.9.125 - 04/05/2010] (Ticket #40) Nuevo tipo de imprimible "ods" (OpenDocument Spreadsheet) para exportación de listados.
    Para especificar tipo de dato numérico sobre una columna especificar /listado/columnas/columna/tipo como integer o real (si no por defecto se toma como texto).
  • [r2.12.9.118 - 03/05/2010] (Ticket #6) En las acciones globales de listados (configuracion/acciones/accion) que incluyen un destino explícito, ahora se comprueba si el usuario tiene permiso para ver el destino; en caso de no tenerlo se deshabilita el botón de ejecución.
  • [r2.12.9.114 - 30/04/2010] Se cambia de clase la implementación de dos métodos. Se mantienen los métodos originales, pero deprecados.
    • Form::agregar_imprimir() pasa a Componentes::parametrosDestinoImprimir() y Componentes::controlImprimir()
    • Form::agregar_boton_accion_listado() pasa a Componentes::controlAccionListado()
  • [r2.12.9.109 - 26/04/2010] Nueva constante PHP disponible en todas las páginas: XGAP_TIPO_PAGINA. Contiene el tipo de cada página en particular (el valor de /seguridad/pagina/@tipo en seguridad.xml correspondiente a la página).
  • [r2.12.9.108 - 26/04/2010] (Ticket #38) Se brinda la posibilidad de generar un descriptor de las páginas, con información que se puede usar en código personalizado. Por el momento incluye, para cada página, el tipo de página y una replicación de la estructura del XML origen.
    Para operar con los descriptores se agrega una nueva clase PHP: DescriptorPaginas.
    Para controlar si se genera o no este descriptor, se agrega también:
    • el elemento /aplicacion/generacion/descriptor-paginas en aplicacion.xml.
    • el elemento /*/configuracion/descriptor-pagina en todos los tipos de página, con mayor prioridad que el de aplicacion.xml.
Versión 2.12.8 (23-04-2010)
  • [r2.12.8.99 - 05/04/2010] Nuevas propiedades para listados inline en masters: /formulario/details/detail/@colapsable y /formulario/details/detail/@iniciar-colapsado (Ticket #36).
  • [r2.12.8.98 - 05/04/2010] En las páginas de tipo listado_master_inline se deshabilita el ordenamiento por columnas y se deja de generar hiddens con valores de parámetros y estado de la página, dado que generaban IDs repetidos cuando se usaba más de una dentro de un master (Ticket #37).
  • [r2.12.8.96 - 05/04/2010] Se agregan los parámetros $id y $clase a Componentes::tituloPagina().
  • [r2.12.8.91 - 26/03/2010] Nuevo elemento para listados: /listado/consulta/constructor.
    Permite personalizar la creación de la consulta SQL principal del listado, indicando la función o método que se debe encargar de hacerlo.
  • [r2.12.8.90 - 26/03/2010] Nuevos métodos iSeguridad::hayUsuarioLogueado() y iSeguridad::paginaUsaSeguridad(), implementados en Seguridad::hayUsuarioLogueado() y Seguridad::paginaUsaSeguridad().

    Advertencia de compatibilidad: Las aplicaciones que utilicen una clase de seguridad personalizada (parámetro de configuración clase_seguridad) que no herede de la implementación provista por XGAP (clase Seguridad) deberán implementar ests métodos.

  • [r2.12.8.89 - 26/03/2010] Nuevo parámetro de configuración de aplicaciones: inclusiones_extra.
  • [r2.12.8.85 - 22/03/2010] Nuevo parámetro de configuración: timezone.
  • [r2.12.8.81 - 22/03/2010] Nuevo método: Mensaje::generico().
  • [r2.12.8.69 - 08/01/2010] Nuevo atributo para columnas de listados: /listado/columnas/columna/@permiteOrdenar.
  • [r2.12.8.68 - 07/01/2010]
    • Nuevas clases PHP: Upload y FormFileUpload.
    • Cambios en el manejo de campos @tipo='Archivo' en formularios. Se usan las clases Upload y FormFileUpload y se aumentan las verificaciones realizadas en los archivos.
  • [r2.12.8.66 - 07/01/2010] Nueva función PHP: ruta_archivo().
  • [r2.12.8.65 - 06/01/2010] Nueva ubicación de código extra para formularios: antes_redirigir.
Versión 2.12.7 (06-01-2010)
  • [r2.12.7.61 - 22/12/2009] Cambios en clase Form:
    • Nuevo método: Form::file_simple().
    • Modificaciones en Form::file():
      • Se corrige el uso del parámetro $retornar: sólo se estaba teniendo en cuenta para el input file, pero no para el resto del HTML generado.
      • Se cambian las descripciones de los controles, de texto normal a labels.
      • Se modifica la estructura HTML generada, para permitir mayor control del estilo via CSS.
  • [r2.12.7.56 - 14/12/2009] Mejoras en la funcionalidad de campos de formulario @tipo='CheckBox':
    • Se genera usando un checkbox con hidden en vez de sólo un checkbox, para que siempre se envíe el valor.
    • Se agregaron nuevos elementos para definir el valor del campo cuando está chequeado y cuando no: campo/valores-checkbox/chequeado y campo/valores-checkbox/no-chequeado.
    • Para establecer el estado inicial del campo se usa campo/@chequeado si está especificado o el valor de campo/dato si no.
    Ejemplo:
    <campo tipo="CheckBox">
        <titulo>¿Habilitado?</titulo>
        <dato>habilitado</dato>
        <default>Conexion::sqlstr2php(XGAP_CONF_VALOR_VERDADERO_SQL)</default>
        <valores-checkbox>
            <chequeado>Conexion::sqlstr2php(XGAP_CONF_VALOR_VERDADERO_SQL)</chequeado>
            <no-chequeado>Conexion::sqlstr2php(XGAP_CONF_VALOR_FALSO_SQL)</no-chequeado>
        </valores-checkbox>
    </campo>
  • [r2.12.7.54 - 14/12/2009] Nuevo método: Conexion::sqlstr2php().
  • [r2.12.7.53 - 14/12/2009] Nuevo elemento para campos de formulario: /formulario/campos//campo/default.
  • [r2.12.7.51 - 11/12/2009] Cambios en la clase Form:
    • Nuevo parámetro en Form::checkbox(): $descripcion, que genera un label asociado al checkbox.
    • En Form::radio() se cambió la etiqueta generada por $descripcion, de un span a un label.
  • [r2.12.7.4 - 27/11/2009] Cambios en el buscador personalizado simple de listados:
    • Los campos de tipo "combo" y "combobd" se convierten automáticamente en combos mejorados, si el parámetro de configuración combo_simple == false.
    • Nuevo atributo @ancho en /listado/configuracion/buscador/personalizado-simple/combo y /listado/configuracion/buscador/personalizado-simple/combobd.
    • El parámetro $campos de BuscadorPersonalizadoSimple::generar() ahora acepta la clave 'ancho' cuando 'tipo' == 'combo' o 'tipo' == 'combobd'.
  • [r2.12.7.43 - 24/11/2009] Mejora en validator.js: nuevas propiedades f_pre_validation y f_pos_validation, que permiten indicar funciones a ejecutar antes y después del proceso normal de validación.
    Ejemplo de uso:
    <codigo tipo="JAVASCRIPT" ubicacion="fin_body">
        <![CDATA[
        // Después de la validación normal se comprueba que la fecha de inicio sea anterior a la de fin.
        v.f_pos_validation = function () {
            var fechainicio = obtener_elemento("fechainicio").value;
            var fechafin = obtener_elemento("fechafin").value;
            if (fechainicio != "" && fechafin != "" && comparacionFechas(fechainicio, fechafin) >= 0) {
                v.s_msg = "La fecha de habilitación debe ser anterior a la fecha de finalización.";
                return false;
            }
            return true;
        };
        ]]>
    </codigo>
  • [r2.12.7.35 - 09/11/2009] Cambios en masters: nuevo atributo /formulario/campos//campo/@permitir-html y nuevo elemento /formulario/campos//campo/elementos-html-permitidos.
  • [r2.12.7.34 - 09/11/2009] Cambios en clase Conexion:
    • Nuevo método: Conexion.obtenerTodos().
    • El método Conexion.cambiarModoObtencion() ahora retorna el valor anterior y no tiene efecto si el modo dado no es correcto.
Versión: 2.12.6 (19-10-2009)
  • [r2.12.6.31 - 19/10/2009] Nuevo método: Conexion.cambiarModoObtencion().
  • [r2.12.6.22 - 14/10/2009] Nueva forma de definición para combos en buscadores personalizados simples: /listado/configuracion/buscador/personalizado-simple/combo/variable.
    Permite pasar las opciones en un array PHP en vez de listarlas en el XML.
  • [r2.12.6.22 - 14/10/2009] Se agrega el control de selección para la columna de checkboxes en listados de selección múltiple (igual al que se usa en columnas de checkboxes en listados normales).
  • [r2.12.6.20 - 14/10/2009] Nuevos métodos: iSeguridadConexion.borrarPermisosDePaginaUnica() y iSeguridad.actualizarPermisosPorPagina(), implementados en SeguridadConexion.borrarPermisosDePaginaUnica() y Seguridad.actualizarPermisosPorPagina(), respectivamente.

    Advertencia de compatibilidad: Las aplicaciones que utilicen una clase de seguridad personalizada (parámetro de configuración clase_seguridad) que no herede de la implementación provista por XGAP (clase Seguridad) deberán implementar estos métodos.

  • [r2.12.6.6 - 06/10/2009] Migrado a SourceForge!
    XGAP ahora está en http://sourceforge.net/projects/xgap/.
  • Reporte ODT:
    • Se incorporó el tag odt dentro del tag template para permitir disponer de más de un template ODT a aplicar. El orden en que se especifican resulta en el orden en que se realiza la búsqueda, el primero en encontrarse es el que se aplica.
    • Dentro del XML se dispone del arreglo $odt_constantes que permite el acceso a las constantes definidas. Permite emplear el valor de las constantes dentro del XML que se nutre el template ODT.
  • Nueva clase PHP: Imagen.
  • Cambios en la clase Configuracion:
    • Se pueden obtener los valores por defecto de los parámetros de configuración mediante con los nuevos métodos recuperarDefaults(), recuperarDefaultParametro() y recuperarDefaultArray().
    • Nuevo método recuperarColor().
  • Nuevas funciones: color_rgb() y color_hexrgb().
  • Nuevos métodos de validación: Validacion::esColorHexValido() y Validacion::esColorDecValido().
  • Mejoras en el manejo de imágenes en listados.
    • Nueva página: imagen.php, que devuelve una imagen personalizable con varios parámetros del request. Esta página se copia automáticamente a las aplicaciones al generar.
    • Nuevos parámetros de configuración para controlar los valores por defecto de las imágenes generadas: imagen_ancho_def, imagen_alto_def, imagen_def, imagen_def_generada_texto, imagen_def_generada_color_frente, imagen_def_generada_color_fondo, imagen_def_generada_tam_fuente. Todos están dentro de una nueva sección: imagen.
    • Nuevo elemento para listados: /listado/columnas/columna/imagen, que permite definir varios aspectos de la presentación de una columna con imágenes.
      Cuando se usa este elemento, se ignoran los valores de @pagina_foto, @llevaALink y link, dado que está diseñado para reemplazarlos para este tipo de uso.
  • Agregado elemento a columnas de listados: columna/recortar.
  • Agregado elemento /*/seguridad/validacionExtra para todas las páginas.
  • Nuevos métodos en la clase Http: redirigir() y redirigirAError(). Además se habilita el acceso a esta clase para todas las páginas.
  • Nuevo método en la clase Formateo: mensaje(). Además se habilita el acceso a esta clase para todas las páginas.
  • Nuevo método en la clase Mensaje: mail(), para enviar mensajes por email.
  • Nueva clase PHP Validacion.
  • Cambio en código extra para listados: /formulario/codigoExtra/codigo[@tipo="PHP" and (@ubicacion="inicio_celda_datos" or @ubicacion="fin_celda_datos")] recibe un nuevo parámetro: array 'valores_fila', con los valores de todas las columnas en la fila.
  • Nuevos métodos en la clase Conexion: aBoolean() y aBooleanTF().
  • Nuevos parámetros en Request::obtener(), Request::obtenerPost() y Request::obtenerGet(): $trim y $stripslashes.
  • Mejoras en el manejo de acciones en listados.
    Nuevo elemento configuracion/acciones/accion/destino/parametros/columna, que permite indicar columnas de controles que se deben pasar como parámetro a la acción.
    Nuevo elemento configuracion/acciones/accion/reset, usado para indicar columnas de controles que se deben volver a su estado original luego de ejecutar la acción.
  • Creado esquema XML para reportes ODT: plantillas/reporte_odt.xsd.
  • Nuevos atributos para campos de formulario @tipo = 'HtmlArea': @htmlarea-config y @htmlarea-toolbars.
    Los valores predefinidos para @htmlarea-toolbars (si no se especifica @htmlarea-config) son: 'Default', 'Simple' y 'Basic'.
    Ejemplo de uso:
    En ?_formulario.xml
    ...
    <campo tipo="HtmlArea"
           htmlarea-config="scripts/fckappconfig.js"
           htmlarea-toolbars="SoloFormatoTexto">...</campo>
    <campo tipo="HtmlArea"
           htmlarea-toolbars="Basic">...</campo>
    ...
    En scripts/fckappconfig.js
    FCKConfig.ToolbarSets["SoloFormatoTexto"] = [
        ['Bold','Italic','Underline','StrikeThrough','-','Subscript','Superscript'],
        '/',
        ['TextColor','BGColor'],
        ['FontFormat','FontName','FontSize']
    ];
    FCKConfig.EnterMode = 'br';
  • Se actualiza la versión de FCKeditor a la 2.6.4.1. FCKeditor se usa en los controles de formulario de tipo HtmlArea.
Versión: 2.12.5 (20-08-2009)
  • Nuevo atributo para campos de formulario @tipo = 'Spin' o 'Tiempo': @spin-texto-solo-lectura (booleano). Indica que el campo de texto debe ser de sólo lectura, con lo cual sólo se puede modificar el valor usando los botones del spin.
  • Se agrega el parámetro $read_only a Form::tiempo() y Form::spin_rango().
  • El atributo /formulario/campos//campo/@solo-lectura ahora se puede aplicar también a campos @tipo = 'Spin', 'Tiempo' o 'Fecha'.
  • Nuevo atributo en definiciones de formularios: /formulario/campos/@solapa-activa.
    En caso que el formulario tenga solapas, se puede usar este atributo para indicar el índice de la solapa que debe estar activa inicialmente (la primera solapa tiene índice 1).
  • Nuevas funciones en funciones.php: preparar_array_salida() y esUTF8().
  • Cambio en código extra para formularios: /formulario/codigoExtra/codigo[@tipo="PHP" and @ubicacion="despues_inicializacion"] recibe un nuevo parámetro: 'sololectura' (por referencia).
  • Se actualizó la versión de Ext a la 3.0.0.
  • Los campos de texto en buscadores personalizados simples se pueden convertir a mayúsculas, igual que los campos de formulario.
    Se agrega el atributo /listado/configuracion/buscador/personalizado-simple/texto/@mayusculas y el correspondiente parámetro para campos de tipo texto en la clase PHP BuscadorPersonalizadoSimple.
    Por defecto usa el valor de XGAP_CONF_TEXTO_FORM_MAYUSCULAS.
  • Cambio en funciones obtener_listado_archivos() y obtener_listado_archivos_por_patron(): se agregó el parámetro $excluir, para excluir archivos del resultado por patrón del nombre.
  • El valor para campos de formulario de @tipo='Constante' ahora se puede definir con un llamado a función en vez de un valor literal o una variable, usando el elemento "funcion" en vez de "valor". Ejemplo:
    <campo tipo="Constante">
        <dato>iporigen</dato>
        <funcion>Request::ipOrigen()</funcion>
    </campo>
  • Se agregó la posibilidad de modularizar las definiciones de páginas usando XInclude (http://www.w3.org/TR/xinclude/). Esto permite, por ejemplo, extraer en un XML definiciones de columnas o campos que se usan en varias páginas y luego incluirlas en todas ellas.
    Los archivos que se usan para incluir deberían tener extensión .inc.xml, ya que de esa manera el motor no los intenta procesar como páginas durante la generación.
    Ejemplo:
    afiliado_listado.xml
    <listado
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:xi="http://www.w3.org/2001/XInclude"
            xsi:noNamespaceSchemaLocation="../../xsd/listado.xsd">
        ...
        <columnas>
                <columna>
                        <titulo>Codigo</titulo>
                        <dato>cafiliado</dato>
                </columna>
                ...
                <xi:include href="afiliado_listado-campos.inc.xml" xpointer="xpointer(/columnas/*)"/>
        </columnas>
    </listado>
    afiliado_listado-campos.inc.xml
    <columnas>
        <columna>
            <titulo>Tipo Doc.</titulo>
            <dato>dtipodocumento</dato>
        </columna>
        <columna>
            <titulo>Nro. Doc.</titulo>
            <dato>ndocumento</dato>
        </columna>
        <columna>
            <titulo>Fecha Nac.</titulo>
            <dato>ffechanac</dato>
        </columna>
        <columna>
            <titulo>Hab.</titulo>
            <tip>¿Habilitado?</tip>
            <dato>dhabilitado</dato>
        </columna>
    </columnas>
Versión: 2.12.4 (10-07-2009)
  • Nuevos métodos: Request::ipOrigen() y Request::trazaOrigen().
  • Nueva función es_ip_valido() en funciones.php.
  • Nuevo tipo de campo para buscadores personalizados simples: rangofechas. Genera dos calendarios para filtrar por un rango de fechas.
    Ejemplo PHP:
    $campos = array(...,
    	array(
    		'nombre' => 'pfperiodo',
    		'etiqueta' => 'Período',
    		'nombre_desde' => 'pfinicio',
    		'etiqueta_desde' => 'Inicio',
    		'valor_desde' => $pfinicio,
    		'nombre_hasta' => 'pffin',
    		'etiqueta_hasta' => 'Fin',
    		'valor_hasta' => $pffin,
    		'tipo' => 'rangofechas'
    	), ...);
    Componentes::buscadorPersonalizadoSimple($campos, true, $objeto_conexion);
    Ejemplo XML:
    <listado>
    	...
    	<configuracion>
    		...
    		<buscador>
    			<personalizado-simple incluir-navegador="true">
    				...
    				<rangofechas nombre="periodo" etiqueta="Período"
    					nombre-desde="pffechainicio" valor-desde="$pffechainicio" etiqueta-desde="Inicio"
    					nombre-hasta="pffechafin" valor-hasta="$pffechafin" etiqueta-hasta="Fin"/>
    				...
    			</personalizado-simple>
    		</buscador>
    		...
    	</configuracion>
    	...
    	<consulta>
    		...
    		<condiciones_de_parametros>
    			<and>
    				...
    				<lte>
    					<param>pffechainicio</param>
    					<col>ffechainicio</col>
    				</lte>
    				<gte>
    					<param>pffechafin</param>
    					<col>ffechafin</col>
    				</gte>
    				...
    			</and>
    		</condiciones_de_parametros>
    	</consulta>
    	...
    </listado>
  • Nuevo método en la interfaz iSeguridad: puedeVerPagina(). Implementado en la clase Seguridad.
  • Nuevas funciones en funciones.php: direccionAbsolutaPagina(), direccionSinConsulta(), esDireccionInterna(), es_array_indexado(), es_array_asociativo().
  • Nueva clase PHP: Javascript (clases/javascript.inc.php).
  • Cambio en el comportamiento de accesos a páginas de la aplicación: en links y botones que llevan a otras páginas, se verifica si el rol del usuario logueado le permite ver la página destino; si no tiene permiso, no se muestra el link/botón.
  • Agregado método Html::referenciaAnchor().
  • En formularios, los campos de @tipo='SeleccionableMultiple' que tienen el atributo @requerido='true' ahora comprueban que haya al menos un elemento seleccionado, (1) con javascript en el cliente para evitar el envío si no se cumple la condición y (2) nuevamente en el servidor por si de alguna forma pasa la primera comprobación.
  • Nuevas funciones en utilidades.js: fechaEnPeriodo(), periodosSolapan() y periodoSolapaPeriodos().
  • Corregido bug en Form::select() y Form::select_multiple(): se estaba ignorando el valor del parámetro $clase.
  • Cambiado valor por defecto del parámetro $clase en Form::select_multiple(), de 'Select' a 'Select Multiple'.
  • En formularios: cambiada la clase CSS del select generado para campos @tipo='SeleccionableMultiple', de 'Select' a 'Select Multiple' (en realidad la clase que se estaba generando en el XSL era 'ListSelect', pero por el bug indicado dos puntos antes, en la página quedaba la clase por defecto, 'Select').
Versión: 2.12.3 (23-03-2009)
  • Nuevo parámetro en Conexion.getTablas(): $mascara.
  • Nuevos métodos en la clase Conexion: getVistas(), referenciasEntrantes() y estaSiendoReferenciado().
  • En los formularios que permiten el borrado, se verifica que el registro se pueda borrar, por no estar siendo referenciado desde otra tabla, usando el método estaSiendoReferenciado() de la clase Conexion; si se encuentra al menos una clave extranjera que lo referencie, se deshabilita el botón "Borrar".
    Para dar la posibilidad de deshabilitar esta verificación, se agrega el atributo /formulario/configuracion/@borrado-incondicional.
  • Nuevo atributo en campos de formulario: /formulario/campos//campo/@solo-lectura. Si tiene valor 'true', el campo se presenta con edición deshabilitada.
    Puede ser útil, por ejemplo, para campos de texto que se llenan automáticamente de acuerdo a los valores de otros campos.
  • Se agrega la clase CSS 'sololectura' a los campos de texto y textarea que se generan con el atributo readonly.
  • Se agrega el atributo formulario/campos//campo/@ignorar-seleccionado, que se aplica cuando @tipo='Seleccionable'. Cuando es 'true', no se filtra el listado del seleccionable por el valor seleccionado.
  • Nuevo parámetro de configuración para el botón "Volver" en listados y páginas de contenido: /*/configuracion/volver/condicion, que permite indicar mediante código PHP si el botón debe incluirse en la página o no.
  • Nuevo método: Componentes::buscadorPersonalizadoSimple(), para generar un buscador personalizado simple para un listado.
  • Nuevo elemento en listados: /listado/configuracion/buscador/personalizado-simple, que permite definir fácilmente un buscador personalizado simple.
    Ejemplo:
    <listado>
        ...
        <configuracion>
            ...
            <buscador>
                <personalizado-simple>
                    <texto nombre="pafiliado" etiqueta="Afiliado" valor="$pafiliado" ancho="50"/>
                    <texto nombre="pusuario" etiqueta="Usuario" valor="$pusuario" ancho="20"/>
                    <calendario nombre="pfconsulta" etiqueta="Fecha de consulta" valor="$pfconsulta"/>
                    <calendario nombre="pfrespuesta" etiqueta="Fecha de respuesta" valor="$pfrespuesta"/>
                </personalizado-simple>
            </buscador>
            ...
        </configuracion>
        ...
    </listado>
  • Nuevo atributo en campos de sólo lectura de formularios: /formulario/campos//campo[@tipo='SoloLectura']/@ignorar-modificacion.
  • Nuevas funciones javascript en utilidades.js: comparacionTimestamps(), comparacionHoras(), comparacionFechas().
  • Nueva ubicación de código en listados: antes_consulta.
  • Agregados métodos a la clase Request para trabajar específicamente con $_GET o $_POST, en vez de con $_REQUEST.
  • Nuevo parámetro en Mensaje::errorAplicacion(): $pagina_simple.
  • Nuevo parámetro en crearDireccionPagina(): $convertir_booleanos.
  • Agregado atributo formulario/@pagina-simple, que se aplica a formularios normales y masters.
  • El parámetro de request 'xgap_pagina_simple' (constante PHP PARAMETRO_ESTRUCTURA_PAGINA_SIMPLE) se puede usar en formularios normales y masters.
  • Cambio en crearDireccionPagina(): si la página actual es simple, el url que genera incluye el parámetro para que la nueva página también lo sea.
  • Agregado parámetro de request xgap_req_sinvolver (booleano, constante PHP XGAP_REQUEST_SINVOLVER) en listados normales, páginas de contenido, formularios normales y masters, para forzar que aparezca o no el botón "Volver" ("Cancelar" en el caso de formularios).
  • Modificada la definición de /listado/configuracion/acciones/accion:
    • Agregado elemento accion/destino, para permitir acciones que envíen a otra página, en vez de procesarse en la misma.
    • Agregados atributos accion/@clase y accion/@imagen, para personalizar la presentación del botón de la acción.
    • Quitado accion/parametros, dado que no se estaba aplicando correctamente; movido a accion/destino/parametros. Es decir, ahora se utiliza cuando la acción es accion/destino, no cuando es accion/codigo.
  • Agregado tipo "request" a las expresiones de condiciones_de_parametros, para filtrar por variables del request. Por ejemplo:
    <condiciones_de_parametros>
        <equal>
            <request>nusuario</request>
            <col>nusuario</col>
        </equal>
    </condiciones_de_parametros>
  • Agregado parámetro 'recordset' a @ubicación='despues_inicializacion' en listados pdf, rtf, xls y csv.
Versión: 2.12.2 (9-1-2008)
  • Se agrega la posibilidad de definir columnas con acciones en los listados (/listado/columnas/acciones/accion).
  • Nuevo método: Conexion::obtenerFila().
  • Se agregan las constantes PHP XGAP_APP_TITULO y XGAP_APP_COPYRIGHT, con los valores de /aplicacion/titulo y /aplicacion/copyright en aplicacion.xml, disponibles en todas las páginas.
  • Se agregó validación de campos requeridos en el servidor: antes de realizar un INSERT o un UPDATE se verifica que todos los campos requeridos tengan valor; si no lo tienen, se cancela la operación y se presenta el mismo formulario con un mensaje de error. Esta validación es complementaria a la que se realiza en el cliente via javascript.
  • Nuevo div en páginas de contenido: #cont-cuerpo-pagina, que envuelve el contenido y la barra de comandos #cont-comandos.
  • Nuevo parámetro de configuración: codificacion_cliente, que permite indicar la codificación a usar en la parte cliente de las conexiones a la base de datos.
  • Nuevo atributo para formularios: /formulario/campos/@foco-inicial. Permite indicar el campo que debe tener el foco al cargar la página.
  • Se eliminó de los listados PDF la función prepararParametrosLogo(), que estaba embebida en el PHP generado, saliendo como código repetido, y se pasó a funciones/funciones.php como preparar_parametros_imagen(). Además se solucionó un bug en la función, que hacía que fallara si el nombre de la imagen tenía una 'x'.
  • Cambios en el motor de generación:
    • Definidas constantes MotorGeneracion::NOMBRE_DIRECTORIO_EXTRAS y MotorGeneracion::NOMBRE_DIRECTORIO_MENUES.
    • Agregados métodos MotorGeneracion::directorioOrigenAplicacion(), MotorGeneracion::directorioDestinoAplicacion() y $motorGeneracion->directorioMotor().
  • Correcciones en el motor de generación:
    • En generador_esquema.inc.php se corrigieron directorios, que se estaban asumiendo en una ubicación determinada dentro del motor, pero pueden estar en otros lugares.
    • En validador_definiciones.inc.php se agregó validación para las definiciones de menúes y se corrigió el proceso, que no funcionaba porque no se cargaban las inclusiones de .xsd.
  • Cambio en clase Form: al generar un botón, si está deshabilitado se le agrega la clase CSS 'deshab'; por ejemplo, un botón para agregar deshabilitado se genera con el atributo class='ButtonAgregar deshab'.
Versión: 2.12.1 (25-09-2008)
  • Nuevo tipo de campo de formulario: Link.
  • Nueva ubicación de código asociada al nuevo tipo de campo: antes_campo_link.
  • Se agrega el parámetro $onclick a Html::link().
  • Nuevo método Conexion::obtenerResultadoCompleto().
  • Agregado elemento tip a las definiciones de columnas de listados, para incluir tooltips en los encabezados de la tabla.
  • Se agrega la posibilidad de indicar si los listados normales, páginas de contenido o páginas de gráfico se deben mostrar con estructura simple (como los seleccionables) o completa, mediante un parámetro en el request: xgap_pagina_simple.
    • El valor puede ser cualquier cosa, pero se evalúa como un booleano usando param2boolean(). Cualquier valor que evalúe como true produce una página simple.
    • El nombre del parámetro está dado por la constante PHP PARAMETRO_ESTRUCTURA_PAGINA_SIMPLE, definida en estructura.inc.php.
    • Este parámetro tiene mayor prioridad que el atributo @pagina-simple en el XML.
    • Ejemplo: usuario_listado.php?xgap_historial=reset&xgap_pagina_simple=true
  • Agregada posibilidad de estructurar los details de un master en forma de menú.
  • Nuevo parámetro de configuración: css_menu_details. Se usa para indicar un CSS a cargar en un formulario master, cuando existe un menú de details.
  • Nueva función en funciones/funciones.php: nombre_archivo_saneado().
  • Se modificó la implementación de campos de formulario de tipo Archivo para que corrijan los nombres de los archivos subidos usando nombre_archivo_saneado().
  • Nuevo atributo en campos de tipo sesión de formularios: solo-alta. Indica que el valor se debe tomar de la sesión sólo durante el alta; durante la modificación se debe tomar de la base (como si fuera de tipo oculto).
Versión: 2.12.0 (28-08-2008)
  • Cambios en las clases PHP
    • Agregado tipo de campo de formulario "SeleccionableMultiple", para seleccionables que muestran el listado con una columna de checkboxes para seleccionar varios de una sola vez y guardan la selección en una lista.
    • En Mensaje: Agregado parámetro $mensaje_debug a los métodos mensajeHtml(), error(), alerta(), notificacion() e info(), para pasar un mensaje que se muestra solamente cuando el entorno no es de producción
    • En Form: agregado parámetro $propiedades_extra_opciones a select(); agregados parámetros $imagen y $onclick a agregar_boton_accion_listado()
    • En Html: agregados métodos saltoLinea(), arrayJavascript(), mapaJavascript() y arrayDeMapasJavascript()
  • Nueva constante PREFIJO_PARAMETRO_XGAP, que indica el prefijo para los parámetros del request que son propios de XGAP
  • Nuevas funciones PHP globales esParametroXgap() y existeParametroXgapEnRequest() (funciones.php)
  • Nuevas funciones javascript en scripts/utilidades.js: serialize_string_array(), establecerPropiedadesEnObjeto() y establecerPropiedadesEnObjetos()
Versión: 2.11.2 (06-08-2008)
  • Nueva ubicación de código extra: inicio_pagina.
  • Corregido un bug en seleccionables: al armar el valor a mostrar, cuando se usa datos_adicionales/correspondencia se tomaba @origen en vez de @destino como nombre de columna de la tabla relacionada.
  • Se agregaron estadísticas al paso "Generar aplicación" del motor.
  • Se modificó el paso "Generar aplicación" del motor para crear un nuevo archivo de salida, que contiene un índice de los archivos generados. El nombre de este archivo está dado por la constante NOMBRE_INDICE, definida en xgap.php.
  • En la página de resultados de la generación se incluye un warning si existen archivos que no tienen descripción de seguridad (/*/seguridad/descripcion), con una lista de dichos archivos.
  • La página "Permisos por Páginas" no muestra el combo de selección de aplicación si existe sólo una aplicación definida, con lo cual se ahorra un paso.
  • Corregido bug: Si en "Permisos por Páginas" se selecciona el tipo de página antes de seleccionar el rol, se produce un error. Para solucionarlo, sólo se muestra el combo "Tipo de Página" cuando hay un rol seleccionado.
  • Agregado método mensajesError(array) a la clase Componentes.
  • Durante la generación de la aplicación, se disminuyó la importancia de errores de cambio de permisos en archivos generados, de error a advertencia.
  • Se reestructuró parte del manejo y presentación de errores en la generación.
Versión: 2.11.1.126 (05-06-2008)
  • Reemplazado jQuery versión 1.2.1 por versión 1.2.6.
  • Nuevo método estático en la clase Html: comentarioCondicional().
  • Modificada función Html::head() para que permita indicar la versión de navegador a que se deben aplicar los CSSs.
  • Nuevos parámetros de configuración: css_ie6 y css_ie7, que permiten indicar archivos CSS que sólo se deben aplicar a Internet Explorer.
  • Creado menu.xsd, que define el contenido de los XMLs de menú.
  • Agregada la posibilidad de definir separadores entre items de menú, mediante el elemento <separador/>.
  • Se agrega el <meta name="robots" /> al head de todas las páginas para que los robots de los buscadores no indexen las aplicaciones.
  • Nuevo método estático en clase Configuracion: paginaInicio().
  • Nuevos parámetros de configuración: icono_aplicacion, pagina_copyright y pagina_about.
  • Se agregan algunos <link rel=.../> al head de las páginas.
  • Se agrega el parámetro $relativa_a a la función crearDireccionPagina().
  • Se agrega un elemento span dentro de div#titulo-pag, que encierra el texto del título:
    <div id="titulo-pag"><span>texto del titulo</span></div>
  • Se cambia la estructura del buscador en los listados, de una tabla con dos celdas a dos divs, uno para el buscador y otro para el navegador.
    Con este cambio se permite un mayor control de la presentación; además, la tabla provocaba problemas en IE.
    Se agregan tres nuevos divs con IDs 'c-buscador', 'c-navegador' y 'pie-buscador'; se elimina la tabla con ID 'tabla_buscador' y las celdas con clase 'BuscadorTD' y 'NavegadorTD'.
    Ejemplo de CSS para la nueva estructura:
    /* Contiene el buscador estándar */
    #c-buscador {
        float: left;
    }
    /* Contiene el navegador */
    #c-navegador {
        float: right;
        margin-left: 10px;
    }
    /* Permite cancelar el float de #c-buscador y #c-navegador */
    #pie-buscador {
        clear: both;
        height: 0;
        margin: 0;
        padding: 0;
        visibility: hidden;
    }
  • Correcciones en varios de los archivos que están en el directorio xml del motor de xgap.
  • Corrección en la página de inicio que se guarda en el historial de navegación.
  • Se agrega un div en los listados, con id 'cont-listado', que encierra los comandos, el buscador y la tabla. Es el equivalente a div#cont-formulario en los formularios.
Versión: 2.11.0.125 (02-06-2008)
  • Mejoras en la generación de Código (manejo de Excepciones).
  • Manejo de Recursos, archivo XMl con las imágenes para los botones y conf_recursos.inc.php para la definición de la ubicación de las mismas.
  • Manejo de SKINS
  • Atributo ancho-maximo para los campos de formularios de forma tal que sobreescriba el ancho maximo permitido por metadatos (ideal para vistas en postgres cuando no existe el ancho maximo por metadatos)
  • Para los formularios se agrega el atributo tipo=Fecha para poder forzar a que una columna sea de este tipo. Sirve para vistas cuando no hay metadatos o bien cuando la columna es inexistente en la tabla pero se incluye en el formulario
Versión: 2.10.1.124 (??-01-2008)
  • Wrapper de la libreria EZPDF en la clase que se encuentra en pdf.inc.php
  • Mejoras en la página de administración de Seguridad
Versión: 2.10.0.123 (02-01-2008)
  • Se agrego la posibilidad de crear un archivo de seguridad propio para redefinir el comportamiento de la aplicación en este punto. Para mayor informacion ver el documento seguridad_personalizada.doc en el directorio de documentacion.
  • Se reemplazo la version 2.0 RC1 de Ext JS por 2.0 final.
  • Creado seguridad/seguridad.xsd que define el XML de seguridad.
  • Se definen dos nuevas constantes PHP en todas las paginas con salida HTML: XGAP_PAGINA_SIMPLE y XGAP_INCLUYE_MENU.
Versión: 2.9.2.122 (11-12-2007)
  • Cambio de controles de dhtmlx por componentes EXT.
  • Se creó la clase PHP Tooltips. Para agregar un tooltip a un elemento html, se puede usar Tooltips::agregar().
  • Se completó la integración de los tooltips de Ext JS (Ext.QuickTips).
  • Se cambiaron las solapas por solapas de ext.
  • Se reemplazaron los tooltips de Overlib por los de Ext JS (Ext.QuickTips), en formularios.
  • Se limitó a 64 caracteres la longitud máxima y a alfanuméricos los caracteres permitidos en los nombres de archivos generados por plantillas de listado, debido a problemas con Internet Explorer.
Versión: 2.9.1.117 (04-12-2007)
  • Bug en la generacion del nombre del archivo de los reportes en PDF, XSL y CSV.
  • Agregado soporte para campos multiples (campos con el mismo nombre, que se reciben en el request como un array) en la clase Form, mediante la nueva clase MultipleFormField.
  • Las columnas de controles en listados se estaban generando con IDs repetidos. Solucionado haciendo uso de MultipleFormField.
  • Corregidos bugs en la generacion de los encabezados de columnas de controles en listados.
  • Se separo la definicion de los testeos de la configuracion de aplicacion. La definicion paso a estar en la carpeta testeo del motor.
    Mientras que en configuracion.xml del testeo de aplicacion se quitaron los atributos que los definen. Se crearon los esquemas xsd que definen ambos documentos.
  • Corregido codigo de tamaño de ventana en Html::link().
  • Corregidas definiciones de columnas de controles (check y combo) en listado.xsd.
  • Cambiados nombres de clases en chart.inc.php.
  • Ajustes en funciones mostrarPagina_iframe*(), en utilidades.js.
  • Arreglos en el código de especificacion de tamaño de seleccionables.
  • Incorporado uso de Ext.form.ComboBox a los listados.
  • Agregada funcion convertir_combo() a utilidades.js, para permitir a los programadores convertir combos normales en controles Ext.form.ComboBox, en buscadores personalizados y páginas de contenido.
  • Incorporada al motor la biblioteca javascript Ext JS (http://extjs.com/), versión 2.0 RC1.
  • Se tranforman los elementos <select> de los formularios en objetos Ext.form.ComboBox, si el parámetro de configuracion XGAP_CONF_COMBO_SIMPLE tiene valor falso.
  • Corregido bug: en condiciones_de_parametros con expresion de comparacion sw_mp, no se escapaban los wildcards SQL.
  • Agregado del parametro de configuracion "esquema", se utiliza en la generacion de metadatos y templates.
  • Se creo un indice de metadatos que se puede acceder una vez generados.
  • Se corrigio un bug en la generacion de la documentacion de los testeos en la plantilla master.
Versión: 2.9.0.116 (16-11-2007)
  • Se agrega el soporte para poder definir el tamaño de los seleccionables por archivo de configuración y en el mismo XML también.
  • Actualizada versión en uso de jQuery, de 1.1.3.1 a 1.2.1. De ser necesario, se puede usar el plugin jquery.compat-1.1 para mantener la compatibilidad con la versión anterior.
  • Se agrega en los listados la infraestructura necesaria para poder mostrar tooltips, si se usa un buscador personalizado. Agregada función agregar_tooltip() a utilidades.js, que permite agregar un tooltip a cualquier elemento.
  • Corregido problema en la definición de expresiones lógicas en listado.xsd.
  • Agregado elemento generacion/inclusiones a las definiciones XML, que permite definir archivos a incluir en el archivo generado, además de los requeridos por el motor. Se puede usar cuando en una página se debe usar un archivo javascript o css que no hacen falta en el resto de las páginas.
  • Se permite elegir las plantillas de generacion de los testeos del login y del menu. Para ello se agrego el elemento login en la configuracion del testeo dentro de generacion. Dentro de este y del elemento menu se agrego el atributo xsl. Este indica el nombre de la plantilla xsl a utilizar para generar el testeo. Estas deben estar dentro de la carpeta testeo/plantillas del motor.
  • Se eliminan los metadatos y los templates antes de regenerarlos.
  • Correccion de bug para que muestre la cantidad de tablas procesadas al generar templates.
  • Los test de títulos se homogeneizaron para que se apliquen expresiones regulares a las variables php dentro de los mismos.
  • Se toma en cuenta una variable de la configuracion del testeo para ver que menu se utiliza [configuracion.xml/propiedades/generacion/menu/@nombre]
  • El testeo toma en cuenta el elemento imprimibles y el atributo tipo de los elementos imprimir en los listados.
  • El testeo del menu oprime volver durante la navegación del mismo, teniendo en cuenta que una entrada puede llevar a cualquier tipo de formulario.
  • Ampliación del testeo del master para que por configuracion se puedan anular los details de forma individual, o redirigir si no se va a un listado o reemplazar el testeo por uno manual.
  • Agregados parametros a los bloques de codigo personalizados mediante codigoExtra/codigo[@tipo='PHP'], definidos por cada @ubicacion.
  • Agregado elemento /formulario/custom_delete para formularios.
  • Los campos clave contienen los valores de sesion y no del request (igualmente requieren que esten definidos en la seccion campos del formulario con tipo=Sesion).
  • Los valores de los campos de tipo sesion no estaban siendo tomados en forma correcta.
  • Los parametros de los filtros personalizados estaban siendo pasados a los formularios por el boton agregar. Esto hacia que se sobreescribieran valores del formulario cuando los nombres coincidian. Se elimina este inconveniente.
  • Corregido bug en Conexion.crearConsulta (conexion.inc.php)
  • Agregado soporte para codigo personalizado en diversos puntos de las paginas generadas, mediante el atributo @ubicacion de codigoExtra/codigo. Documentación en doc/ubicaciones_codigo.odt
  • Bug: en listado y listado_seleccion, el form "buscador" estaba saliendo duplicado.
  • Se agregan los webservices, consisten en 3 servicios que entregan datos de una tabla dada. El primero entrega los encabezados, el segundo los datos y el tercero la cantidad de filas.
    Para activarlos se debe poner en true la variable de configuracion "webservice" y se debe especificar el prefijo para las tablas que se publicaran, si este prefijo queda vacio se publican todas las tablas.
    Los webservices se acceden a traves de http://path/to/aplicacion/ws.php
  • Se agregaron metodos en las clases de conexion para el refinamiento de la generacion de metadatos.
  • Corregido bug en la generacion de campos file, en formulario-comun.xsl.
  • Movida definicion de elemento codigoExtra desde listado.xsd y formulario.xsd a comun.xsd.
  • Movidas definiciones de los tipos tipoCodigo y SiNo desde listado.xsd y formulario.xsd a tipos.xsd.
  • Agregada clase CSS al elemento body de las paginas generadas, que indica si es una pagina con estructura (clase 'con-estructura') o simple (clase 'sin-estructura').
  • Agregada funcion ajustarAlturaAVentana() a utilidades.js.
  • Agregado parametro $solo_si_actual a EntradaHistorial.guardar_variables() y modificadas las otras clases de historial para tenerlo en cuenta.
Versión: 2.8.1.115 (29-10-2007)
  • Se agregan funciones para decidir si se muestra o no un control (checkbox o combo) y funciones para determinar el estado inicial del checkbox (habilitado, true o no, false). Ejemplo de uso:
    <checkbox>
        <nombre>cpaciente_imprimir</nombre>
        <controlSeleccionTodos/>
        <funcion-habilita>
        <![CDATA[
            global $objeto_conexion,$rs,$j;
            if ($objeto_conexion->obtenerResultado($rs,$j,'chistclinica')!='004236732')
                return true;
            return false;
        ]]>
        </funcion-habilita>
        <funcion-estado-inicial>
        <![CDATA[
            global $j;
            if ($j%2==0)
                return true;
            return false;
        ]]>
        </funcion-estado-inicial>
    </checkbox>
    <combo>
        <nombre>cpaciente_sexo</nombre>
        <texto-para-nulo>No Procesar</texto-para-nulo>
        <consulta>
            <tabla>traduccion</tabla>
            <valor>cvalor</valor>
            <etiqueta>dvalortraducido</etiqueta>
            <where>cnombre='SEXO'</where>
        </consulta>
        <funcion-habilita>
        <![CDATA[
            global $objeto_conexion,$rs,$j;
            if ($objeto_conexion->obtenerResultado($rs,$j,'chistclinica')!='045393191')
                return true;
            return false;
        ]]>
        </funcion-habilita>
    </combo>
  • Se agregan los Combos a los listados
  • Las selecciones de los checkbox son recordadas entre las paginas de los listados
  • Bug Resuelto: Cuando un campo de formulario es de sólo lectura en edición, pero no en agregado, presenta el dato, en vez de hacer la consulta para presentar la etiqueta
  • Cuando expira la sesion se retorna a la pagina de inico que a su vez redireccion a la pagina de Login. Esto evita mensajes de error no deseados.
  • Modificado Componentes::estructuraSeleccionableInline() para ajustar la altura del iframe a la del contenedor (por problemas para ajustarla via CSS).
  • Corregido bug en autoselección después de agregar, en listado_seleccion.xsl.
  • Agregado elemento /formulario/campos/@columnas para definir la cantidad de columnas a presentar en un formulario master.
  • Unificada aplicación de elemento <codigo> (html, javascript, php) para todas las plantillas.
  • Se modificó procesador-definiciones para que aplique las plantillas de menu propias de la aplicación que se definen en aplicacion.xml.
  • Agregado elemento /pagina/configuracion/volver/codigo-destino a las páginas de contenido.
  • Corregido bug en Conexion_oci8.prepararFechas(): la fecha no se estaba devolviendo modificada.
  • Agregados parámetros de configuración "mostrar_mensajes_flash" y "duracion_mensajes_flash", y modificado Componentes::mensajeFlashEstandar() para que los use.
  • En AdministradorHistorial.actualizar(), se cambió uso de $_POST por $_REQUEST, para que los comandos también se puedan enviar por GET.
  • Se agregó la clase Flash.
  • Se agregó un objeto global $flash, instancia de esta clase, que se crea en configuracion.php.
  • Se integraron los mensajes predeterminados del flash con las páginas, para que se muestren automáticamente en listados, formularios y páginas de contenido. Para incorporarlos en páginas hechas a mano, se puede usar Componentes::mensajeFlashEstandar($flash).
  • Durante la generación, se estaba usando erróneamente el parámetro XGAP_CONF_VERSION_APLICACION para definir el nombre de la aplicación NOMBRE_APP. Se cambió a "XGAP_CONF_APLICACION-XGAP_CONF_VERSION_APLICACION".
  • Agregados /formulario/configuracion/agregar-volver y /formulario/configuracion/agregar-seguir a las definiciones de formulario.
  • Implementado botón de agregar en formularios que se mantiene en el formulario después de agregar.
  • Exportación a Excel y CSV, nueva plantilla. Para emplear simplemente hay que utilizar este tag: <imprimir tipo="csv" titulo="CSV"/> o bien <imprimir tipo="xls" titulo="Excel"/>
Versión: 2.7.8.108 (01-10-2007)
  • Condicion de solo lectura en el master para los listados inline: condicionSoloLectura. Lo retornado por esta función es true o false dependiendo si puede editarse un listado determinado
  • Validaciones personalizadas en el master. Se agrega un tag para poder especificar una funcion para evaluar cuando un detail es editable o no por un usuario determinado (de acuerdo, por ejemplo al establecimiento o UGL donde pertenece). <formulario><validaciones><validacion tipo='usuario'>
  • Cambios en los reportes PDF. Nuevas fuentes y colores. Los ResultSet pueden obtenerse a partir de objetos.
  • Refactorización de la clase de conexión.
  • Plantilla para generación de gráficos. De momento gráficos de Barra.
  • Se quita '/*' y '*/' de la consulta SQL en los comentarios PHPDoc de los listados, para evitar que se rompa el comentario.
  • Agregado atributo /formulario/details/detail/@sin-historial para los formularios master.
  • Generación de XMLs de ejemplo a partir del esquema y metadatos de la base de datos.
  • Los detail pueden generarse a partir de una nueva plantilla: listado_master_inline.xsl. El atributo tipo-listado del detail determina la forma de generación (ver formulario.xsd para mayor información).
  • Agregado de comandos-genericos a la plantilla de contenidos. Seran compatibilizados con las acciones definibles en el master para la proxima version.
  • Se reemplazan las grillas dhtmlx por unas realizadas con JQuery por problemas de licencia
  • Cambio de configuracion.ini a conf.inc.php para evitar problemas de seguridad
  • Se agrega en la clase Configuracion el metodo inicializarPagina que crea los objetos y variables necesarias para procesar el resto de la pagina. Se quita este codigo de configuracion.php.
  • Las paginas con contenido pueden especificar si requieren o no conexion a la base de datos por medio del atributo del elemento pagina con-conexion.
  • Compatibilizacion de testing con las versiones de unicen. TODO: Tener en cuenta los parametros de configuracion de la interfaz para poder guiar al selenium.
  • Se agrega la seccion /listado/borrado-logico a los listados, para permitir ocultar registros que estan marcados como borrados en la base de datos.
  • Bug, el url de retorno de un formulario de agregado de una entidad master quedaba incompleto si la clave era generada con una secuencia, en el custom_insert. Se movio la creacion del url despues de la ejecucion del custom_insert.
  • El titulo de los listados inline se toma de la definicion del listado, no de la descripción del detail. En este caso es responsabilidad del que escribe el master proveer las variables necesarias (si las hubiera) para poder mostrar el titulo en forma correcta.
  • Se permitio que los campos de formulario de tipo 'file' usen el atributo @ancho.
  • Se agregaron los parametros de configuracion "valor_verdadero" y "valor_falso" en la sección "conexion" de la configuracion.
  • El boton del navegador del listado para aceptar cambio de cantidad de elementos por pagina estaba saliendo siempre deshabilitado.
  • Bugs resueltos relacionados con los listados inline en los master
  • Agregado elemento /formulario/campos//campo/nombre, que permite indicar el nombre (ID) a utilizar para un campo de formulario. Esto permite evitar IDs duplicados cuando se define mas de un campo con el mismo dato.
  • Fondo de los seleccionables con div al estilo sourceforge
  • Generacion de Reportes para imprimir a partir de la plantilla reporte_pdf.xsl.
  • aplicacion.xml: se puede especificar que plantillas aplicar y cuales no en un nivel mas general, por ejemplo puede excluirse por completo la generacion de RTF de la aplicacion, en la seccion aplicacion/generacion/excluir
  • Reestructuracion de la generacion para que se ejecute por pasos. De esta forma pueden agregarse nuevos pasos sin un impacto tan grande en la generacion.
  • Se agrega Testing y Generacion de Metadatos.
  • Agregados parámetros de configuracion 'altura_minima_tabla_listado', 'altura_minima_formulario_normal' y 'altura_minima_formulario_master' y modificadas plantillas para usarlos.
  • Creado esquema XML tipos.xsd con definiciones de tipos y reestructurados los otros esquemas para usarlo.
  • Se aceptan los caracteres %, _ en los filtros de busqueda (de momento no en los personalizados)
  • En los filtros personalizados, ademas de aceptar parametros y columnas, se aceptan constantes, variables de sesion (contexto) y funciones SQL
  • Cambios multiples
Versión: 2.6.0.91 (06-06-2007)
  • Múltiples cambios a especificar
Versión: 2.5.2.90 (13-04-2007)
  • [r90] Barra de Scroll en las tablas y uso de tablas por javascript.
  • [r89] Se agrega un menu alternativo que carga desde XML en javascript.
  • [r88] Se crean los combos en DHTML, tanto los comunes como los combos de Base de Datos. Estos podrán operar con AJAX, en cascada y también a partir de XML.
    Solución a bug en el retorno a un master luego de agregar en el formulario.
    Solución a bug en los archivos index.php e index2.php del directorio paginas, en relación a la creación del Verificador de Versión.
    Se cargan los javascript del HTMLArea y de los combos sólo cuando es necesario.
    Se eliminan imagenes que no se precisan de los antiguos tips.
  • [r87] Corrección de Bugs.
  • [r87] Agregado atributo ID a los links de seleccionables, en el formulario.
  • [r87] En la clase Configuracion se cambió el uso de la extensión XML DOM de PHP 5 por uso de la biblioteca nativa lib.xml.inc.php, para evitar la dependencia de las bibliotecas XML del sistema operativo.
    La biblioteca lib.xml.inc.php fue modificada para adaptarla a algunos cambios de PHP 5.
  • [r87] Cambiada estructura de verificadorversion.inc.php y modificadas plantillas xsl como consecuencia.
    Ahora los archivos php personalizados deben cambiarse a:
    $verificador_version = VerificadorVersion::crearVerificadorVersion();
    $configuracion = $verificador_version->recuperarConfiguracion();
    $prefijo_directorio = $configuracion->recuperarParametro('prefijo_directorio');
    $prefijo_web = $configuracion->recuperarParametro('prefijo_web');
    //if (!file_exists("configuracion.ini"))
    //	die("index.php: no se encuentra el archivo de configuracion");
    //$params= $verificador_version->recuperar();
    //$_SESSION['path_configuracion'] = realpath("configuracion.ini");
    debajo de la línea: require_once("verificadorversion.inc.php");
  • [r87] Reestructuracion de verificadorversion.php y configuracion.php, y cambios en configuracion.inc.php para cargar el archivo .ini de la aplicación una sola vez. Luego, la configuración queda cargada en la sesión.
  • [r87] Agregado de parámetro de configuración 'en_produccion', para definir si la aplicación está en desarrollo o en producción.
  • [r87] La configuración de la aplicación se guarda en cache solamente si se está en producción; en desarrollo se vuelve a cargar en cada request.
Versión: 2.5.1.86 (26-03-2007)
  • [r86] Cuando se agrega una entidad en un formulario llamado desde un listado seleccionable, se retorna directamente el valor sin volver a pasar por el listado.
  • [r84] Se agrega el soporte de menu. Deberá crearse el archivo con sufijo _menu.xml bajo el directorio de desarrollo extras/menu. En la aplicacion de localidades se provee un ejemplo. En caso de que la aplicacion posea un index.php o index2.php propio (bajo el directorio extras), debera ser actualizado con lo que esta en motores/<nro_version>/paginas/.
  • [r82] Los reportes en PDF son abiertos en una nueva página. Esto evita que al no tener el botón "Volver" el usuario no pueda regresar al listado.
    Se agrega un nuevo parámetro de configuración: 'disposicion_contenido_imprimibles' cuyo contenido puede ser 'attachment' o 'inline' para que se le de la opción al usuario de guardar el archivo (en el primer caso) o bien que se muestre en una ventana del navegador (segundo caso y por defecto).
    Corrección de Bugs.
  • [r80] Al agregar un master se redirecciona la salida a la pagina master en lugar del listado.
Versión: 2.5.0.78 (14-03-2007)
  • [r78] Solución de múltiples bugs.
  • [r78] Concepto de Grupos para el layout en los formularios. (Ver XSD para la sintaxis)
  • [r78] Generación de Documentación PHPDoc en forma automática. Se incluye el archivo recursos/aplicacion.xml que deberá estar en el directorio extras.
  • [r78] Durante la generación se dispara una excepción si se detecta una falla en el procesamiento de los XML/XSL.
  • [r78] Generación selectiva de páginas, configurable en el archivo XML de entrada. Por ejemplo:
    <listado>
      <salidas>
        <normal />
        <seleccion />
      </salidas>
    </listado>
    <formulario>
      <salidas>
        <normal />
      </salidas>
    </formulario>
  • [r78] Optimización de la consulta con filtro de búsqueda.
Versión: 2.4.5.77 (28-02-2007)
  • [r77] Definición de campo de tipo 'Oculto'.
  • [r77] Apertura de la aplicación en una ventana aparte, sin toolbars ni menúes.
  • [r77] Posibilidad de definir las salidas para cada XML (sección /*/generacion/salidas). Actualización de los XSDs y reestructuración de procesar.php.
  • [r77] Mejoras en historial y seleccionable; falta terminar.
  • [r77] Multiples Bugs resueltos
  • [r76] Bugs múltiples.
  • [r71] Se agrega auditoria por archivo parametro log_por_aplicacion en configuracion.ini que contiene el archivo donde se guarda el log. Si el path no es absoluto se almacena en el mismo directorio de la aplicacion.
  • [r71] Se agrega un reloj javascript del cual se obtendra la hora para el calendario (ya que refleja la hora del servidor).
  • [r71] Se agrega campos//campo para futura separacion por grupos en los formularios
  • [r70] En los listados seleccionables sólo queda el link de la columna que tiene el atributo llevaAForm.
  • [r70] Se agrega el manejo del Historial de Navegación por medio de una clase almacenada en la sesión.
Versión: 2.4.2.69 (03-01-2007)
  • [r69] Se incorporan los valores por defecto de los metadatos al formulario
  • [r68] Bug: no se estaba mostrando información cuando listadoRequiereFiltro="true" y el filtro es personalizado.
  • [r67] Reestructuraciones de código. Validación de los XMLs de entrada antes de la generación, teniendo en cuenta el valor de 'Incremental'.
  • [r66] Se agrega soporte para el tipo de datos time y timestamp (con su correspondiente calendario). Selecciones de múltiples campos con listado seleccionable
  • [r64] Elección de la versión por Combo. Configuración por página.
Versión: 2.3.1.63 (11-12-2006)
  • [r63] Se agrega el botón de calendario como imagen
  • [r61] Nuevo calendario (para aceptar timestamp)
  • [r60] Agregada configuración del logo para los PDFs
  • [r60] Agregado indicador de campo requerido configurable desde archivo de configuración
  • [r60] Agregado nuevo tag en los XSDs, para definir documentación de la aplicacion
  • [r60] Cambios en la estructura de salida del formulario, para permitir un layout más flexible
  • [r60] Ejemplo de nuevas formas de validación a través del script ubicado en el ejemplo de localidades: validator_extras.js.
Versión: 2.3.0.58 (16-11-2006)
  • [r58] Soluciones a bugs.
  • [r57] Cambio en el Navegador. En el archivo configuracion.ini se agrega paginar_desde que indica el número de elementos mínimo del listado a partir del cual se muestra el paginador. Se agrega dentro de la sección [estructura] (de este mismo archivo), la posibilidad de ignorar una sección, mediante el valor ignorar, p.e. este=ignorar
  • [r56] Se agrega el directorio de documentacion.
  • [r55] Botón de Quitar Filtros en filtro de búsqueda.
  • [r54] Reestructuración para múltiples motores.
Versión: 2.2.2.53 (02-11-2006)
  • [r52] En el formulario pueden especificarse campos requeridos (atributo required en el tag campo, con valor true o false). Este atributo tiene mayor precedencia que el valor devuelto por los metadatos en la base; es decir, podría emplearse para requerir el ingreso de determinados campos que para la BD no son obligatorios. En caso de no especificarse "requerido", funciona como antes, es decir, en función lo que determinen los metadatos.
  • [r51] Iconos en los botones. Pagina de Logout (logout.php).
  • [r50] Resoluciones de bugs varias. Cambio de Estilo Visual, se tiende a mantener las pantallas uniformes. Se agregan también colores a los botones.
  • [r49] Modificaciones y resoluciones de bugs varias. Refactorización de Código. Cambio de hints. Puede especificarse un máximo en el listado y si se pasa dicho máximo no permite agregar elementos (atributo maximoPermitido de la entidad; el mismo establece el número máximo de elementos que puede tener la tabla).
  • [r48] Validación empleando el validator.js de SoftComplex. Se agrega un tag <validacion> debajo de <campo> (ver la aplicación de localidades de ejemplo) especificando el tipo posible (alpha,alphanum,unsigned,integer,real,email,phone,date,time). Se emplea también para los campos requeridos.
  • [r47] Coloreo de tablas en Firefox.
Versión: 2.2.1.46 (05-10-2006)
  • [r46] Búsqueda ignorando acentos (en los filtros). Templates de visualización con PHP para poder agregar contenido dinámico.
  • [r44] Seguridad vinculada al DBMS para poder identificar la forma de llamar a los procedimientos de seguridad. No se emplean métodos estáticos sino que se tiene ahora un objeto Seguridad instanciado
  • [r42] Esquema de Layouts de páginas (ver ejemplo de localidades)
  • [r41] Al editar un formulario, las claves deben ser requeridas y no tener un valor asociado, es decir, deben introducirse cada vez que se ingresa al formulario
  • [r40] Imagen para los links externos.
  • [r40] Atributo referencia para las dependencias cuando puede repetirse la misma columna con distinto nombre dentro de una tabla (en seleccionable y solo lectura).
    <depende>
        <campo referencia="codigo_pais">codigo_pais</campo>
    </depende>
  • [r39] Se agrega al campo SoloLectura del formulario los hidden. Modificaciones de emprolijamiento de código.
  • [r38] Se agrega el Limit Offset a la consulta relacionada con seguridad. Se elimina el uso de la regla de configuración para el iterador en el archivo configuracion.ini.
  • [r37] Se agregan los master de provincias y Localidades. Bugs múltiples.
  • [r36] BUG: == por === en el formulario cuando se arma el query para los metadatos (el === compara valor y tipo).
  • [r36] MEJORA: Armado de URLS por función.
  • [r36] BUG:Al filtrar por el buscador se vuelve a la primer página.
  • [r35] Bug del select count(*) cuando hay HAVING y GROUP BY. Bug cuando un campo de la clave tenía 0 (se tomaba como NULL). Master/Detail en el ejemplo de localidades.
Versión: 2.2.0.34 (30-08-2006)
  • [r34] Solución de pequeños bugs. Se agrega el atributo ancho="xx" al tag campo cuando tipo=Seleccionable
  • [r33] Cambios Múltiples. Solución de pequeños bugs.
  • [r32] Reducción de código en las plantillas de los listados. Se agrega el método a la clase conexión para crear la consulta
  • [r31] Bugs menores, uso de XSD en ejemplos y se elimina del XSL la generación del buscador (ahora en form.inc.php)
  • [r30] Cuestiones de Compatibilidad en ADODB, mayúsculas, minúsculas en nombres de campos, Metadatos, etc.
  • [r29] Se agregan atributos ID para controles y filas para poder deshabilitarlos con javascript.
    El siguiente bloque de código habilita o deshabilita la fila correspondiente a la selección de la provincia, una vez que es seleccionado el país.
    <codigo anterior="si" tipo="JAVASCRIPT">
    function controlarDependencias(){
        document.getElementById('codigo_provincia_fila').style.display = (document.formulario.codigo_pais.value!='') ? '' : 'none';
    }
    setInterval(controlarDependencias,50);
    </codigo>
  • [r28] Independencia de la BD:
    Limit Offset empleando ADODB. Método SelectLimit de la conexión)
    INSERT y UPDATES empleando ADODB. Método AutoExecute de la conexión, que forma y ejecuta el insert o UPDATE en función de un registro y el nombre de la tabla
    Metadatos empleando ADODB. Método MetaColumns de la conexión. Devuelve un array con FieldObjects con los metadatos de cada columna.
  • [r27] Solución de Bug para recuperar la descripción de tipo de Datos Seleccionable, no se tenía en cuenta el lo definido en <depende> para agregar al where
  • [r26] Se agregan los archivos XSD. Se elimina del repositorio el archivo configuracion.ini bajo el directorio dist/ext. Puede verse a modo de ejemplo el provisto con el ejemplo de localidades y archivos.
  • [r25] Puede configurarse la dirección de mail a la que se envían los errores de consulta a BD. Hay que especificar en el archivo configuracion.ini de cada aplicación el valor mail_administrador=direccion@de.mail en la sección [configuracion]
  • [r24] Formato de HTML y Tablas corregidos
  • [r23] Solución a Bugs múltiples
Versión: 2.1.0.22 (29-08-2006)
  • Archivo de proceso de XGAP independiente de la plataforma. Se definen constantes en xgap.php
  • Orden en los listados
  • Se soluciona el error que daba la generación por la ausencia de listado_javascript.xsl.
  • Upload de Archivos. En el formulario debe especificarse; <campo tipo="Archivo"> y en configuracion.ini: upload_dir=x en la sección [configuracion]. En el listado: esArchivo="si" en la columna que corresponda
  • Se elimina el uso de register_globals y de los parametros argc y argv
  • Se agrega soporte para muestra de fotos en los listados: se agrega el atributo "pagina_foto="imagen.php"" a la columna
  • Se soluciona el bug en el tipo Clave en los formularios
  • Se soluciona la edición del master cuando no es condicional (no aparecía)
  • Cuando el listado estaba en modo detail, no funcionaban los filtros personalizados
  • Se resaltan en el resultado de la búsqueda las palabras ingresadas en el filtro
Versión: 2.0.1.12 (15-08-2006)
  • Solución a problemas múltiples
  • Bugs de envío de Mensajes cuando se produce un error
  • Se eliminan los mensajes NOTICE y se avanza en el uso de register_globals=Off
  • Solución al problema de pasaje de parámetros entre páginas
  • Borrado de archivos innecesarios (de backup)
  • Reestructuración de código para compatibilizar con PHP 5.1.4
  • Solución a problemas múltiples
  • Compilación incremental, al detectar cambios en la fecha de modificación de los archivos (requiere permiso de escritura en el directorio de la aplicación)