Ir al contenido

Ejemplos

Esta página reúne casos concretos y el XML que los resuelve.

Un XML de tipo crud cubre las cuatro operaciones sobre una tabla:

<?xml version="1.0" encoding="UTF-8" ?>
<histrix tipo="crud">
<title>Titulo</title>
<obs/>
<form>
<table id="TABLA">
<field id="id" autoinc="true" esClave="true"/>
<field id="descripcion"/>
<!--Aca van los otros fields-->
</table>
</form>
</histrix>

Requisitos: la tabla tiene que tener clave primaria y el campo declararse como autoincremental. El motor decide si corresponde un insert, un update o un delete según el método HTTP de la request (POST, PUT, DELETE, GET).

Para procesar un lote de registros en una sola transacción, con la estructura:

  • Directorioman/
    • ejemplo_ing.xml
ejemplo_ing.xml
<?xml version="1.0" encoding="UTF-8" ?>
<histrix tipo="fichaing" process="true">
<title>Titulo</title>
<obs/>
<form>
<table id="TABLA">
<movimientos>
<relacion id="inserta_campo_ins.xml" />
</movimientos>
<field id="id"/>
<field id="descripcion"/>
<!--Aca van los otros fields-->
</table>
</form>
</histrix>

El XML padre llama a inserta_campo_ins.xml una vez por cada objeto del arreglo que recibe en la request.

  • Directorioman/
    • ejemplo_ing.xml
    • inserta_campo_ins.xml
inserta_campo_ins.xml
<?xml version="1.0" encoding="UTF-8" ?>
<histrix tipo="insert">
<title>Titulo</title>
<obs/>
<form>
<table id="TABLA">
<field id="id" autoinc="true" esClave="true"/>
<field id="descripcion" id_temp="descripcion"/>
<!--Aca van los otros fields-->
</table>
</form>
</histrix>

Este segundo XML es el que efectivamente inserta en la base y cierra la transacción.

Una ficha para dar de alta un empleado, con un combo de opciones:

empleados_ing.xml
<?xml version="1.0" encoding="UTF-8" ?>
<histrix tipo="fichaing">
<title>Titulo</title>
<obs/>
<form>
<table id="TABLA">
<movimientos>
<relacion id="empleados_ins.xml" />
</movimientos>
<field id="id" autoinc="true" esClave="true" noshow="true"/>
<field id="nombre">
<label>Nombre</label>
<tipo>varchar</tipo>
</field>
<field id="apellido">
<label>Apellido</label>
<tipo>varchar</tipo>
</field>
<field id="fecha_nacimiento">
<label>Fecha de Nacimiento</label>
<tipo>date</tipo>
</field>
<field id="tipo_usuario">
<label>Tipo</label>
<helper type="combo" xml="ruta_al_xml_de_opciones" />
</field>
</table>
</form>
</histrix>

El tipo fichaing genera el formulario de alta. Cada campo declara su tipo y su etiqueta; para los desplegables se agrega un helper de tipo combo apuntando al XML que provee las opciones.

La grabación se define aparte, en el movimiento empleados_ins.xml:

empleados_ins.xml
<?xml version="1.0" encoding="UTF-8" ?>
<histrix tipo="insert">
<title>Titulo</title>
<obs/>
<form>
<table id="TABLA">
<field id="id" autoinc="true" esClave="true"/>
<field id="nombre" id_temp="nombre"/>
<field id="apellido" id_temp="apellido"/>
<field id="fecha_nacimiento" id_temp="fecha_nacimiento"/>
<field id="tipo_usuario" id_temp="tipo_usuario"/>
</table>
</form>
</histrix>

La estructura resultante:

  • Directorioman/
    • empleados_ing.xml
    • empleados_ins.xml

Dos inserciones en tablas distintas dentro de la misma transacción, donde la segunda necesita el id que generó la primera:

  • Directorioman/
    • ficha_ejemplo_ing.xml
    • insert1.xml
    • insert2.xml

El orden importa: primero se inserta en TABLA1 y después en TABLA2, usando el id devuelto por la primera inserción.

ficha_ejemplo_ing.xml
<?xml version="1.0" encoding="UTF-8" ?>
<histrix tipo="fichaing">
<title>Titulo</title>
<obs/>
<form>
<table id="TABLA">
<movimientos>
<relacion id="insert1.xml" />
<relacion id="insert2.xml" />
</movimientos>
<field id="id" autoinc="true" esClave="true" noshow="true"/>
<field id="descripcion">
<label>Descripcion</label>
<tipo>varchar</tipo>
</field>
<field id="otro_campo">
<label>Otro</label>
<tipo>int</tipo>
</field>
</table>
</form>
</histrix>

El XML padre declara los movimientos y los campos que completa el usuario.

insert1.xml
<?xml version="1.0" encoding="UTF-8" ?>
<histrix tipo="insert">
<title>Titulo</title>
<obs/>
<form>
<table id="TABLA1">
<field id="id" autoinc="true" esClave="true"/>
<field id="descripcion" id_temp="descripcion"/>
</table>
</form>
</histrix>

El primer movimiento inserta en TABLA1 y deja disponible el id generado.

insert2.xml
<?xml version="1.0" encoding="UTF-8" ?>
<histrix tipo="insert">
<title>Titulo</title>
<obs/>
<form>
<table id="TABLA2">
<field id="id" autoinc="true" esClave="true" lastID="insert1.xml"/>
<field id="descripcion" id_temp="descripcion"/>
<field id="otro" id_temp="otro"/>
</table>
</form>
</histrix>

El segundo movimiento inserta descripcion y otro, y toma el id del movimiento anterior mediante lastID="insert1.xml": la fila de TABLA2 queda ligada a la de TABLA1.