Saltearse al contenido

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

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>

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

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

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>

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

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>

Este xml insertará en la tabla 1 el campo descripcion y nos devolverá el id que se generó en la base de datos

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>

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