Ejemplos
Esta página reúne casos concretos y el XML que los resuelve.
CRUD completo expuesto por API
Sección titulada «CRUD completo expuesto por API»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).
PATCH transaccional
Sección titulada «PATCH transaccional»Para procesar un lote de registros en una sola transacción, con la estructura:
Directorioman/
- 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
<?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.
Ficha de alta
Sección titulada «Ficha de alta»Una ficha para dar de alta un empleado, con un combo de opciones:
<?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:
<?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 movimientos encadenados
Sección titulada «Dos movimientos encadenados»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.
<?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.
<?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.
<?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.