Page 1 of 1

Bloqueo - Desbloqueo

PostPosted:Thu Jun 05, 2014 10:34 pm
by marcf36lp
Hola, he estado trabajando en un workflow pero me a surgido un problema con el bloqueo y desbloqueo de archivos, y no se que estoy haciendo mal, lo que ocurre es que tengo un usuario que debe editar un archivo el cual luego es actualizado en OpenKM, al iniciar la operación el archivo es bloqueado y al final es desbloqueado, para que luego otro usuario aga lo mismo, pero al llegarle el archivo al segundo usuario este aun permanece bloqueado.

Este es el código que estoy utilizando para bloquearlo:
Code: Select all
String revisionUuid = (String)context.getVariable("revision_uuid");
try {
	String revisionPath = OKMDocument.getInstance().getPath(null, revisionUuid);
	OKMDocument.getInstance().lock(null, revisionPath);
} catch (Exception e) { }
y este para desbloquearlo
Code: Select all
String revisionUuid = (String)context.getVariable("revision_uuid");
try {
	String revisionPath = OKMDocument.getInstance().getPath(null, revisionUuid);
	Boolean isLock = OKMDocument.getInstance().isLocked(null, revisionPath);
	if (isLock) {
			OKMDocument.getInstance().unlock(null, revisionPath);
			}
} catch (Exception e) { }
Ojala puedan ayudarme por que de verdad no se que esta mal, desde ya muchas gracias

Re: Bloqueo - Desbloqueo

PostPosted:Fri Jun 06, 2014 4:07 pm
by marcf36lp
Ahora todo se puso mas extraño, resulta que al terminar las modificaciones por el primer usuario el archivo si se desbloquea correctamente, pero en el siguiente nodo al seleccionar si quiere que el documento se le envíe o no al otro usuario, el documento se bloquea, y este nodo no tienen nada de código relacionado con el bloque del archivo, y tampoco tiene actions en las transiciones, de hecho he probado poniendo actions en esas transiciones que desbloqueen el archivo, pero nada.

por si sirve de algo estoy utilizando:

OpenKM: version comunity 6.3 (aunque he probado con otras)
Base de datos: PostgreSQL
Sistema operativo : ubuntu

Re: Bloqueo - Desbloqueo

PostPosted:Sun Jun 08, 2014 10:27 am
by jllort
Si el bloqueo y el desbloqueo lo haces desde el workflow, lo mejor seria que utilizases el systemtoken
Code: Select all
String systemToken = DbSessionManager.getInstance().getSystemToken();
al pasarle el token a null, estas utilizando la sesion del usuario y claro si el usuario A lo ha bloqueado el B no lo va a poder desbloquear porque no tiene privilegios ( a no ser que sea un super administrador ). Esto se soluciona utilizando el token de sistema ( del que no hay que abusar !!! )

Re: Bloqueo - Desbloqueo

PostPosted:Mon Jun 09, 2014 1:26 pm
by marcf36lp
Al final me di cuenta de que al terminar el proceso el primer usuario el archivo no queda bloqueado, sino que es el nodo del segundo usuario el que lo bloquea, lo cual deberia estar bien, pero al ver el archivo me dice que esta bloqueado por el usuario anterior, siendo que revise que al terminar la ejecución del nodo anterior el archivo no esta bloqueado, de todas formas puse el código que me diste al inicio del nodo del segundo usuario, el workflow me sigue generando el error de que el archivo esta bloqueado, con la diferencia de que ahora al revisar el archivo, veo que esta bloqueado por el mismo usuario que debe editar el archivo, lo cual debería estar bien ya que el usuario debe editarlo, pero aun asi me sigue generando el mismo error.

En resumidas cuentas el error tiene que estar en este codigo:
Code: Select all
package cl.ramtun.workflow.controller;


import org.jbpm.context.exe.ContextInstance;
import org.jbpm.graph.exe.Token;
import org.jbpm.taskmgmt.def.TaskControllerHandler;
import org.jbpm.taskmgmt.exe.TaskInstance;

import cl.ramtun.workflow.utils.Utils;

import com.openkm.api.OKMDocument;
import com.openkm.bean.form.Text;
import com.openkm.bean.form.Upload;

public class CorreccionRevisorSec implements TaskControllerHandler {

	
	private static final long serialVersionUID = 1L;

	@Override
	public void initializeTaskVariables(TaskInstance taskInstance, ContextInstance contextInstance, Token token) {
		String revisionUuid = (String)contextInstance.getVariable("revision_uuid");
		try {
			String revisionPath = OKMDocument.getInstance().getPath(null, revisionUuid);
			OKMDocument.getInstance().lock(null, revisionPath);
		} catch (Exception e) { }
		
		Upload uploadRev = new Upload();
		uploadRev.setName("data_cargar_revision_sec");
		uploadRev.setDocumentUuid(revisionUuid);
		uploadRev.setFolderUuid(revisionUuid);
		uploadRev.setType(Upload.TYPE_UPDATE);
		Text tituloUpText = Utils.getText("upload_titulo", "Cargue revision comentada (Opcional)");
		contextInstance.setVariable("data_cargar_revision_sec", uploadRev);
		contextInstance.setVariable("upload_titulo", tituloUpText);
	}

	@Override
	public void submitTaskVariables(TaskInstance taskInstance, ContextInstance contextInstance, Token token) {
		String revisionUuid = (String)contextInstance.getVariable("revision_uuid");
		try {
			String revisionPath = OKMDocument.getInstance().getPath(null, revisionUuid);
			Boolean isLock = OKMDocument.getInstance().isLocked(null, revisionPath);
			if (isLock) {
				OKMDocument.getInstance().unlock(null, revisionPath);
			}
		} catch (Exception e) { }
		
	}
	
}
Al dejar el codigo de esta forma (que según yo debería funcionar), el archivo me aparece bloqueado por el usuario anterior, aunque al abandonar el nodo del usuario anterior el archivo no se encuentra bloqueado, ojala me puedas ayudar, por que he intentado de varias formas, pero este nodo en particular me sigue dando problemas, de ante mano muchas gracias.

Re: Bloqueo - Desbloqueo

PostPosted:Wed Jun 11, 2014 7:04 am
by jllort
Tienes montado el entorno de desarrollo ? Porque esto lo mejor sería que lo debugases o como mínimo que le metas trazas para que aparezcan en el log.

Esto que haces con el submitTaskVariables no me demasiado y no sé exactamente si hace lo que estas suponiendo que hace. Ciertas cosas es mejor hacerlas en la Transaction entre una tarea, porque al final lo que quieres es que al finalizar una tarea antes de saltar a la siguiente ( o sea en la transición ) haga el bloqueo