Page 1 of 2

ayuda con process handlers

PostPosted:Wed Aug 10, 2011 5:21 pm
by xcgb
buen dia

Necesito hacer un Workflow que haga lo siguiente: cuando entre un documento nuevo se capturen algunos datos como la fecha de entrada, asunto y observaciones, con estos datos llenar (un template para llevar un registro o mandarlos a)
una tabla de BD para generar por otra parte un reporte, renombrar el documento nuevo y mandar el documento a otro usuario y notificarle via mail.

Ya he revisado la documentacion y los ejemplos ya tengo parte del Process definition
Code: Select all
<?xml version="1.0" encoding="UTF-8"?>
<process-definition  xmlns="urn:jbpm.org:jpdl-3.2"  name="entrada">
	<start-state name="inicio">
		<transition to="entrada de documentos"></transition>
	</start-state>
	<task-node name="entrada de documentos">
		<task name="Recepcion de Documentos">
			<assignment actor-id="portero"></assignment>
		</task>
		<transition to="enviar notificacion"></transition>
	</task-node>

	<mail-node name="enviar notificacion" to="">
		<transition to="fin"></transition>
	</mail-node>

	<end-state name="fin"></end-state>
</process-definition>
y la form definiton
Code: Select all
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE workflow-forms PUBLIC "-//OpenKM//DTD Workflow Forms 1.0//EN"
"http://www.openkm.com/dtd/workflow-forms-2.0.dtd">

<workflow-forms>    
    <workflow-form task="Recepcion de Documentos"> 
	<separator label="REGISTRO DE ENTRADA" name="grp_entrada"/>
	<input label="No." name="reg"/>
	<input label="Fecha" name="fecha"/>
	<select label="Medio" name="medio" type="simple">
		<option label="Correo" value="correo" selected="true"/>
		<option label="Email" value="email" />
		<option label="Fax" value="fax" />
		<option label="Mensajeria" value="mensajeria" />
	</select>
	<separator label="OBSERVACIONES" name="grp_obs"/>
	<textarea label="Observaciones" name="observaciones" value=""/>
	<button label="Aceptar" name="aceptar"/>
    </workflow-form>
</workflow-forms>
mi problema es que estoy atorado en crear el Process handlers, que librerias emplear.

Re: ayuda con process handlers

PostPosted:Thu Aug 11, 2011 7:03 am
by jllort
1- Lo primero tienes que tener un template, con metadatos ( que es lo que se utilizará ) para generar este documento ( esto es la fase 1 ). Cuando desde la UI de OpenKM ya consigas que se haya generado bien el documento a partir de los valores que te pedirá, entonces puedes pensar en lo segundo.

2- Fíjate en la clase DocumentServlet.java ahí hay un método que te interesa createFromTemplate ( este es muy completo por que tiene en cuenta muchos casos, una simplificación de esto ya te valdrá ).

Ve por etapas no abordes el problema de golpe ( primero que cree el documento en un path fijo )

Re: ayuda con process handlers

PostPosted:Thu Aug 11, 2011 5:29 pm
by xcgb
gracias por la pronta respuesta

ya he empezado a crear un template desde openoffice lo he agregado a carpeta de plantillas pero no me sale la pestaña para llenar el formulario como se
muestra en la docuemntacion, hay que configurar para que se pueda trabajar con plantillas??? estoy con openkm 5.1.7 en centos 5

te adjunto la plantilla.

la clase DocumentServlet.java se encuentra dentro de la OpenKM o hay que descargarla desde el codigo fuente??

Re: ayuda con process handlers

PostPosted:Fri Aug 12, 2011 6:41 am
by jllort
Mejor descargarse el código fuente.
Al documento , que debe estar dentro de templates, le has añadido metadatos ? tienes que añadirle un property group - como mínimo - que mapeará los campos del formulario.

Re: ayuda con process handlers

PostPosted:Thu Aug 18, 2011 4:18 pm
by xcgb
gracias por la respuesta

ya tengo la plantilla con los metadatos pero analizando el problema no necesito crear una plantilla, lo que requiero es agregar los datos a una base de datos y generar un reporte.

ya tengo la BD postgres con la tabla entrada como podria enlazar los datos introducidos en la workflow-form a la tabla??

Re: ayuda con process handlers

PostPosted:Sat Aug 20, 2011 9:58 am
by pavila
Tendrías que crear un ActionHandler que recoja esos datos y los guarde en BD. Hay un par de libros que están bastante bien sobre JBPM que te recomendaría leer. Para el tema de guardar los datos en BD te recomiendo que veas http://wiki.openkm.com/index.php/Database_Metadata. Y como siempre, existe la posibilidad de contactar con nosotros (http://www.openkm.com/Contact/) donde te podremos dar soporte profesional, incluida la creación de workflows.

Re: ayuda con process handlers

PostPosted:Tue Aug 30, 2011 2:48 pm
by xcgb
buen dia,
ya les mande un mensaje por el contacto, no se si no les llego porque no he recibido
respuesta, continuando con los process handlers, ya he podido hacer uno pero tengo el siguiente problema:

Quiero pasar un dato a un Input de la forma (para ser mas precisos quiero pasarle la fecha del sistema
sin que tenga que escogerla desde el calendario). Como puedo pasarle el dato desde el handlers????
la variable Input se llama "ent_fecha"
Code: Select all
Calendar calendar = getCalendar();
Date date = calendar.getTime();
context.getContextInstance().setVariable("ent_fecha", date);
asi como esta me marca un error de rango
hice una prueba pasandole una cadena, ya no me marco error, pero no lo pasa al Input de la forma
Code: Select all
context.getContextInstance().setVariable("ent_fecha", "30/08/2011");
verifique que la cadena se encuentre en el value de la variable ent_fecha
en el Process Variable, me faltaria que la despliege en el input de la forma

Re: ayuda con process handlers

PostPosted:Wed Aug 31, 2011 3:37 pm
by jllort
En el input del tipo date le tienes que indicar que variable ( data = nombre de la variable ) debe utilizar, para cargar un determinado valor ( estamos hablando del workflow verdad ? )
Otro detalle te sugiero que te mires la clase ISO8601 por que es el formato en el que estamos almacenando las fechas. ( Puedes utilizar la clase com.openkm.util.ISO8601 para llevar a cabo la conversión ).

Re: ayuda con process handlers

PostPosted:Fri Sep 02, 2011 1:54 pm
by xcgb
si es para el workflow, ya he vuelto a revisar la documentacion y en el
ejemplo de Purchase hacen la asignacion del valor a un Input de la forma
Code: Select all
<input label="Purchase price" name="price" data="price" readonly="true" />
ya lo he puesto igual
Code: Select all
<input label="Fecha" name="ent_fecha" data="ent_fecha" readonly="true"/>
pero sigue sin pasarle el valor, por lo que he visto en el administrador en el
ejemplo de Purchase el valor se lo pasan de la form "run_config" a la form "evaluate price"
y la variable es de tipo Input, tiene algo que ver eso????, ya que yo se lo estoy
pasando desde el process handlers por medio de la funcion setVariable
Code: Select all
context.getContextInstance().setVariable("ent_fecha", "2011");
y si la mando a desplegar desde un script,
Code: Select all
<event type="node-enter">
	<script>
		print(" ent_fecha.value ")
	</script>
</event>
si se muestra en el workflow en la parte de DATOS,
pero sigue sin desplegarlo en el input de la form.

la action (process handlers) esta antes de llamar
a la task (workflow-form) y el script.

Re: ayuda con process handlers

PostPosted:Mon Sep 05, 2011 12:38 pm
by pavila
Necesitaría que adjuntaras el workflow para poder probarlo, así como los fuentes del mismo para hacer pruebas.

Re: ayuda con process handlers

PostPosted:Mon Sep 05, 2011 4:54 pm
by xcgb
ya agrege el codigo del workflow,
esta asociado al actor "guardia"
Code: Select all
<?xml version="1.0" encoding="UTF-8"?>

<process-definition  xmlns="urn:jbpm.org:jpdl-3.2"  name="process">


	<start-state name="inicio">
		<transition to="entrada de documentos">
			<action class="getFecha"></action>
		</transition>
	</start-state>


	<task-node name="entrada de documentos">
		<task name="Recepcion de Documentos">
			<assignment actor-id="guardia"></assignment>
		</task>
		<event type="node-enter">
			<script>
				print(" ent_fecha ")
			</script>
		</event>
		<transition to="enviar notificacion">
			<action class=""></action>
		</transition>
	</task-node>

	<mail-node name="enviar notificacion">
		<transition to="fin"></transition>
	</mail-node>


	<end-state name="fin"></end-state>


</process-definition>
Code: Select all
import org.jbpm.graph.def.ActionHandler;
import org.jbpm.graph.exe.ExecutionContext;

public class getFecha implements ActionHandler {

	private static final long serialVersionUID = 1L;


	public void execute(ExecutionContext context) throws Exception {
		//ADD CUSTOM ACTION CODE HERE
		context.getContextInstance().setVariable("ent_fecha", "2011"); //date.toString());
	}
}

Code: Select all
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE workflow-forms PUBLIC "-//OpenKM//DTD Workflow Forms 1.0//EN"
"http://www.openkm.com/dtd/workflow-forms-2.0.dtd">

<workflow-forms>    
    <workflow-form task="Recepcion de Documentos"> 
	<separator label="REGISTRO DE ENTRADA" name="sep_grp_entrada"/>
	<input label="No." name="ent_id"/>
	<input label="Fecha" name="ent_fecha" data="ent_fecha.value" readonly="true"/>
	<select label="Medio" name="ent_medio" type="simple">
		<option label="Correo" value="correo" selected="true"/>
		<option label="Email" value="email" />
		<option label="Fax" value="fax" />
		<option label="Mensajeria" value="mensajeria" />
		<option label="Propia Mano" value="propia mano" />
	</select>
	<separator label="DOCUMENTO" name="sep_doc"/>      
	<input label="No." name="ent_no_doc"/>
	<input label="Fecha" name="ent_fecha_doc" type="date"></input>
	<textarea label="Asunto" name="ent_asunto" value=""/>
	<separator label="OBSERVACIONES" name="sep_obs"/>
	<textarea label="Observaciones" name="ent_obs" value=""/>
        <input label="Capturo" name="ent_capturo"></input>
	<button label="Aceptar" name="ent_aceptar"/>
    </workflow-form>
</workflow-forms>

Re: ayuda con process handlers

PostPosted:Wed Sep 07, 2011 12:00 pm
by pavila
El artributo "data" del input fecha debe ser igual al nombre del FormElement que uses para almacenar la fecha, no al fe.value. Además, en el handler debes crear un FormElement input de tipo fecha, asignarle el valor, y luego hacer lo del:
Code: Select all
context.getContextInstance().setVariable("ent_fecha", myInput);
O sea, que debería ser:
Code: Select all
Input myFecha = new Input();
myFecha.setType("date");
myFecha.setValue(ISO8601.format(Calendar.getInstance()));
context.getContextInstance().setVariable("ent_fecha", myFecha);

Re: ayuda con process handlers

PostPosted:Wed Sep 07, 2011 7:26 pm
by xcgb
gracias por la respuesta
ya me muestra el valor de la fecha en el Input de la forma,
pero en el workflow-form y en el handler el tipo del Input debe ser "text"
ya he probado ponerlo de tipo "date" y no se muestra.

Me imagino que como se le pasa como text el formato que se desplega es
el de ISO8601, faltaria ponerlo con el formato dd/mm/aaaa, aunque es problema menor .

tambien quiero tomar el valor de la Option seleccionada de un Select
Code: Select all
Select Str_medio = (Select) context.getContextInstance().getVariable("recepcion_medio");
String medio =Str_medio.getOptions().get(0).getValue();
pero me regresa el primer elemento del Select.
Como podria obtener el valor de opcion seleccionada????

Re: ayuda con process handlers

PostPosted:Fri Sep 09, 2011 2:18 pm
by pavila
Si, lo del tipo date lo hemos corregido recientemente. Puede probarlo bajando el OpenKM 5.1.8-SNAPSHOT nightbuild desde http://integration.openkm.com/5.1.x/ .

Re: ayuda con process handlers

PostPosted:Mon Sep 12, 2011 8:07 pm
by xcgb
Gracias por su valiosa ayuda, pues aun sigo aprendiendo el uso de esta valiosa herramienta
por lo que han surguido otras dudas ademas de la creacion del del workflow, no se si abrir otro
topic o en este mismo porque tiene relacion con el flujo que quiero implementar.

1.- Para resolver lo del date tendria que actualizar OpenKM a la version 5.1.8??

2.- Perdon por la insistencia, pero aun tengo problemas para obtener el valor de la opcion seleccionada de un Select
de un WorkFlow-Form, como puedo obtenerlo?

3.- Para el manejo de los datos en una base de datos segui el ejemplo de la documentacion ttp://wiki.openkm.com/index.php/Database_Metadata
ejecute desde Database Query:
Code: Select all
INSERT INTO OKM_DB_METADATA_TYPE (DMT_TABLE, DMT_REAL_COLUMN, DMT_TYPE, DMT_VIRTUAL_COLUMN) VALUES ('entrada', 'col00', 'text', 'ent_id');
INSERT INTO OKM_DB_METADATA_TYPE (DMT_TABLE, DMT_REAL_COLUMN, DMT_TYPE, DMT_VIRTUAL_COLUMN) VALUES ('entrada', 'col01', 'text', 'ent_fecha');
INSERT INTO OKM_DB_METADATA_TYPE (DMT_TABLE, DMT_REAL_COLUMN, DMT_TYPE, DMT_VIRTUAL_COLUMN) VALUES ('entrada', 'col02', 'text', 'ent_medio');
me manda los siguientes errores
usando Metadata

Class: com.openkm.core.DatabaseException
Message: Error in metadata sentence parameters

usando JDBD:

Class: org.postgresql.util.PSQLException
Message: ERROR: el valor null para la columna «dmt_id» viola la restricción not null

Tengo configurado OpenKM con PostgreSQL