Un foro de discusión para nuestra comunidad de hispano hablante
By andrewtwo
#786858
Hola
La idea es guardar 2 registros usando el mismo flujo es decir si viene registro 1, guardar esa información , pero si registro 1 no cumple condiciones ingreso registro 2 esto reinicia el flujo es decir lo devuelve al principio para volver a empezar, la duda es como puedo recuperar los datos de registros 1 y registro 2 es decir, como puedo mostrar los formularios que ambos registros ingresaron en el paso del flujo



Muchas gracias por la ayuda que me puedan brindar
Saludos
User avatar
By amosbatto
#786936
Puedes crear copias de las variables y mostrar un formulario con dos columnas para mostrar ambos. En un trigger:
@@nombre2 = @@nombre;
@@direccion2 = @@direccion;

Y en el formulario:
Code: Select all
Registro 1              Registro 2
Nombre  [...]           Nombre [.....]
Dirección [....]        Direccion [......]
By andrewtwo
#786944
Hola pero no podría hacerlo asi porque los formularios son muy greandes, pregunto algo hay una de recuperar los formularios de las base de datos ? se que los formularios se recuperan por el UID del formulario sin importar que registro llame el siempre me va mostrar el ultimo que paso por el flujo al llamar el formulario, existe alguna forma de que puedo llamarlo desde la base de datos y armar la consulta del formulario según el UID del formulario, el app_number y el documento de identidad del regtistro en especifico que deseo consultar.

Cuando yo paso entre tareas el formulario guarda de forma automática los datos de cada formulario, sabes en que tablas se guardan estos formularios ?? de esta manera yo podría mostrar la información del registro que desee consultar, aunque si tengo que pasar el parámetro UID del formulario creo que así me seguirá mostrando los mismos datos, es necesario el parámetro UID del formulario ??

Muchas gracias
Saludos
User avatar
By amosbatto
#786949
Si estas en el mismo caso, las variables seran sobreescritas. Lo que puedes hacer es crear otras variables y copiar las variables. Otra posibilidad es crear un trigger para exportar las variables a una tabla. Todos los cambios en las variables estan guardados en en APP_HISTORY, pero es complicado utilizarlos:
If you want to use the information in the APP_HISTORY.HISTORY_DATA field, you need to use PHP's unserialize() function to turn it into an associative array and then you can place this information into a grid in an output document or DynaForm.

I have prepared a sample process to show you how to display the history for DynaForms. See the attachment:
(40.82 KiB) Downloaded 350 times
By andrewtwo
#786958
Hola, gracias por la aclaración como me lo explicas podría guardar el historial de variables por codeudor aunque usen el mismo caso del flujo y luego recuperarlo desde de un trigger por algún filtro especifico, pero para mostrar los formularios del codeudor A o B como podría ser ? pues esos formularios están asignados en tareas y ya no aplica el uso de steps, como venia haciendo era mostrar el formulario en una ventana externa y me mostraba todo lo que venia en el flujo pero de esta forma no carga triggers, solo me faltaría identificar la manera de mostrar el historial de variables en los formularios, la idea inicial era desde una grid a través de un enlace.

Por ejemplo ingreso con el deudor A que tiene 2 codeudores en su historial de variables en esta tarea del deduor el sistema carga la grid que le indica que hay 2 codeudores asociados y desde allí podría consultar los formularios de ambos codeudores desde una lista donde pensaba agregar los IUD de cada formulario del flujo, pero haciendo una idea del tema no encuentro la forma de vincular los formularios desde la grid

Muchas gracias por la ayuda que me puedas brindar
Saludos
User avatar
By amosbatto
#786963
Creo que debes crear un PM Table "PMT_HISTORY" con los campos:
APP_UID, DEL_INDEX, USR_UID, USR_USERNAME, DATETIME, APP_DATA

Y utilizar este trigger para guardar los datos en varios puntos del caso:
Code: Select all
$c = new Cases();
$aCase = $c->LoadCase(@@APPLICATION, @#INDEX);
$caseId = @@APPLICATION;
$index = @#INDEX;
$taskId = @@TASK;
$userId = @@USER_LOGGED;
$username = @@USR_USERNAME;
$caseData = serialize($aCase['APP_DATA'];
$datetime = date("Y-m-d H:i:s");

$sql="INSERT INTO PMT_HISTORY (APP_UID, DEL_INDEX, TAS_UID, USR_UID, USR_USERNAME, DATETIME, APP_DATA)
   VALUES('$caseId', $index, '$taskId', '$userId', '$username', '$datetime', '$casedata')";
@@result = executeQuery($sql);
Este trigger no debe ser ejecutado despues de un dynaform porque los datos del caso todavia no son guardados. Debe ser antes del proximo paso en la tarea o antes del enrutamiento si el dynaform es el ultimo paso en la tarea.

Luego puedes recuperar los datos con otro trigger:
Code: Select all
$caseId = @@APPLICATION;
$taskId = 'XXXXXXXXXXXXXX'; //puedes buscar para varias cosas, dependiendo de tu proceso
$sql = "SELECT * FROM PMT_HISTORY WHERE APP_UID='$caseId' AND TAS_UID='$taskId' ";
$aHistory = executeQuery($sql);
if (!isset($aHistory) or !is_array($aHistory) or count($aHistory) == 0)
    die("Error: No puede ubicar el caso en PMT_HISTORY: $sql");

$aCaseVars = unserialize($aHistory[1]['APP_DATA']);
//depende de tus variables
@@nombre2 = $aCaseVars['nombre'];  
@@direccion2 = $aCaseVars['direccion'];
//ahora puedes mostrar un DynaForm que tiene campos asociados con las variables "nombre2" y "direccion2"
By andrewtwo
#786971
Hola amosbatto gracias por la pronta respuesta, pero hay un inconveniente con la propuesta, esa información debo verla desde un flujo que esta en proceso, ejemplo soy deudor y entraron 2 codeudores al deudor, cuando vuelvan a ingresar el deudor, este podrá ver los codeudores que tiene asociado por ejemplo desde una grid y desde allí consultar cada formulario, entonces estoy consultando los formularios de codeudor 1 y codeudor 2 desde el proceso deudor así que no puedo cargar sobre el flujo que estoy las variables recuperadas porque estoy sobre el flujo deudor y el debe ver los formularios de codeudor 1 y codeudor 2 que ya hicieron el flujo todo en el mismo caso, entonces como hago para generar un formulario desde el flujo de deudor para mostrar los datos de codeudor 1 y codeudor 2 ????

Digamos que en este punto hemos resuelto que los datos de los formularios de las tareas que tien el flujo de codeudor se deben guardar en una tabla "PMT_HISTORY" alli ingreso todas la tareas por las cuales vaya pasando, peor no seria mejor crear una tabla por formulario porque el flujo consta de 11 tareas hasta el momento entonces no se que tanto vaya a crecer la tabla "PMT_HISTORY" .
Pero bueno ya tenemos el almacenamiento de los datos resuelto, como hago para mostrar en "formularios independientes del proceso en cual estoy" los datos del codeudor 1 y codeudor 2

La idea colocar sobre el flujo de deudor una grid que liste los codeudores ingresados y desde esa grid se puedan consultar los formularios de codeudor 1 y codeudor 2, el caso es que no se como generar estos formularios si ya estoy sobre un flujo, esta es la segunda parte que necesito resolver, porque la primera parte se puede resolver como me la propones en el ultimo post


Muchas gracias por la colaboración y la ayuda
Saludos
User avatar
By amosbatto
#786977
Si no quieres que los datos sean editables, puedes generar archivos de un Output Document con los datos insertados. Puedes usar PMFGenerateOutput() en un trigger para generar los archivos depues de cada codeudor que llena un formulario. Puedes incluir enlaces en la grilla para cada archivo de un Output Document.

Ver estos dos ejemplos:
http://wiki.processmaker.com/3.0/File_c ... es_in_grid
http://wiki.processmaker.com/3.0/Output ... _DynaForms
By andrewtwo
#786979
Hola amosbatto es eso mismo pero no descargando los formularios en archivos sino mostrándolos en el formulario de su respectiva tarea, antes me habías explicado que existe algo que se llama steps que usa para saltar entre formularios entonces había pensado lo siguiente: si estoy en el proceso de deudor y se agregaron 2 codeudores, y estoy en la tarea 1 de deudor, yo podría meter en esa tarea 1 del deudor todos los formularios del flujo de codeudor y de esa manera yo podría saltar a cada formulario del codeudor desde el flujo de deudor y desde un trigger cargar los datos que se encuentran almacenados previamente durante paso por el flujo de codeudor en la tabla "History".

Muchas gracias
Saludos
User avatar
By amosbatto
#787044
Lo que propones puede funcionar. Solo tienes que usar condiciones en los DynaForms (cuando estas asignandolos como pasos en la tarea) para no mostrarlos normalmente en la tarea. Por ejemplo, esta condicion:
Code: Select all
(!isset(@=saltar) or @=saltar != true)
Y setea @=saltar el trigger despues del formulario con la grilla:
Code: Select all
@=saltar = true;
Asi el usuario tiene que ser redirigido por un enlace en la grilla para llegar al formulario llenado con datos de la tabla PMT_HISTORY.

To convert MBOX to PST, start by downloading and i[…]

My Assignment Services stands out as one of the be[…]

Erectile Dysfunction, commonly known as impotence,[…]

Want to create your own meme coin?

In the world of cryptocurrencies, a unique and exc[…]