Problemas Frecuentes
Algunos ejemplos de XML de histrix
A continuación presentaremos algunos ejemplos de funcionalidades de los xml de histrix
Caso nº1
Necesitamos crear una API común para hacer un CRUD
Para esto podemos hacer el siguiente xml:
<?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>Este xml tipo crud nos permite hacer un CRUD completo de una tabla de la base de datos, para esto es necesario que la tabla tenga una clave primaria y que el campo sea autoincremental Histrix por debajo se encargará detectar si tiene que hacer un insert, un update o un delete dependiendo del método http que se utilice (POST, DELETE, PUT, GET)
Caso nº2
Necesitamos hacer un XML que funcione como API para realizar un PATCH
para este ejemplo tendremos la siguiente estructura de carpetas
Directoryman/
- 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>lo que hace este XML es llamar al otro xml, en este caso inserta_campo_ins.xml por cada objeto dentro del array que nosotros mandemos a la petición
Directoryman/
- 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>Aqui creamos el xml que se encargara de insertar los datos en la base de datos para completar el PATCH completando la transacción
Caso nº3
Necesitamos crear un HistrixApp que tenga una ficha para dar de alta un empleado
Para esto podemos hacer el siguiente 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>Este xml nos permite crear una visual para una ficha que permite dar de alta un empleados. Para empezar debemos setear el tipo a fichaing. dentro de la tabla, debemos setear cada uno de los campos que necesitemos fijando el tipo y el label a mostrar. En caso de que este campo sea un combo desplegable (un select), debemos agregar un helper de tipo combo y setear el xml que contiene las opciones que queremos mostrar.
Ademas debemos crear el movimiento para que los campos se guarden en la base de datos, para esto debemos crear el 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>Dando como resultado la siguiente escructura de carpetas
Directoryman/
- empleados_ing.xml
- empleados_ins.xml
Caso nº4
Necesitamos crear un xml que tenga 2 movimientos, es decir, que haga transaccionalmente 2 insert en distintas tablas para este caso
para esto generaremos la siguiente estructura
Directoryman/
- ficha_ejemplo_ing.xml
- insert1.xml
- insert2.xml
transaccionalmente tenemos primero que insertar en la tabla1 y luego en la tabla2 el id que nos devuelve el insert de la tabla 1 de modo que la forma correcta de hacerlo es la siguiente
<?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>En este XML padre se declaran los movimientos y los datos a mostrar y rellenar por el usuario para su posterior inserción en la base de datos
<?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>Este xml insertará en la tabla 1 el campo descripcion y nos devolverá el id que se generó en la base de datos
<?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>Este xml insertará en la tabla 2 el campo descripcion y el campo otro, pero el campo id lo tomará del xml insert1.xml, de modo que el id que se insertará en la tabla 2 será el mismo que devolvió la inserción en la tabla 1