※以下のTipsは jBPM Ver.6.0.1(コミュニティ版)で調査したものです
//このやり方で一応取得できるようですが、もっと簡単な方法がないのだろうか… public Map<String, Object> getTaskVariable(KieSession ksession, TaskService taskService, TaskSummary task) { Task t = taskService.getTaskById(task.getId()); TaskData td = t.getTaskData(); long contentId = td.getDocumentContentId(); Content content = taskService.getContentById(contentId); byte[] contBytes = content.getContent(); Environment env = ksession.getEnvironment(); @SuppressWarnings("unchecked") Map<String, Object> data = (Map<String, Object>) ContentMarshallerHelper.unmarshall(contBytes,env); return data; }
・ioSpecification ・dataInputAssociation ・dataOutputAssociation
public long getWorkItemIdFromTask(TaskService taskService, TaskSummary task) { Task t = taskService.getTaskById(task.getId()); TaskData td = t.getTaskData(); long wid = td.getWorkItemId(); return wid; }
@SuppressWarnings("restriction") private void dispHumanTaskWorkItem(ProcessInstance processInstance, long tid){ WorkflowProcessInstance wpi = (WorkflowProcessInstance) processInstance; NodeInstance ni = wpi.getNodeInstance(tid); if ( ni instanceof HumanTaskNodeInstance ) { HumanTaskNodeInstance htni = (HumanTaskNodeInstance) ni; WorkItem wi = htni.getWorkItem(); System.out.println("wi=" + wi.toString()); } else { System.out.println("Not Human Task error"); } }
@SuppressWarnings("restriction") private void dispHumanTaskParams(ProcessInstance processInstance) { System.out.println("WorkItemによるparameter表示開始"); WorkflowProcessInstance wpi = (WorkflowProcessInstance) processInstance; Collection<NodeInstance> ndis = wpi.getNodeInstances(); for( NodeInstance ni : ndis) { if ( ni instanceof HumanTaskNodeInstance ) { HumanTaskNodeInstance htni = (HumanTaskNodeInstance) ni; WorkItem wi = htni.getWorkItem(); Map<String,Object> prms = wi.getParameters(); for (String key : prms.keySet()) { System.out.println(key + " = " + prms.get(key)); } // 試しにこんなふうに パラメータ値をいじってもWorkItemの持っているハッシュ値が変わるだけであって、 // 実際にタスク定義している値には反映されない模様 WorkItemImpl wip = (WorkItemImpl)wi; wip.setParameter("GroupId", "admins"); // グループIDが変えられるかと思ったが、できず wip.setParameter("input1", "modified value"); // タスク変数の値を修正してみたが、反映されず //htni.setVariable("GroupId", "admins"); // これはKnowledgeRuntimeがnullで例外になります } } System.out.println("WorkItemによる表示終了"); }
package org.jbpm.services.task.internals.rule; import java.util.List; import org.kie.api.task.model.Group; import org.kie.api.task.model.OrganizationalEntity; import org.kie.api.task.model.Task; import org.kie.internal.task.api.TaskModelProvider; import org.kie.internal.task.api.model.InternalOrganizationalEntity; public class AssignmentService { public void assignTask(Task task) { List<OrganizationalEntity> potentialOwners = task.getPeopleAssignments().getPotentialOwners(); potentialOwners.clear(); Group group = TaskModelProvider.getFactory().newGroup(); ((InternalOrganizationalEntity) group).setId("Crusaders"); potentialOwners.add(group); } }
#{processVar}
SynchronizedTaskService>InternalTaskService>TaskService
at org.jbpm.services.task.internals.lifecycle. MVELLifeCycleManager.evalCommand(MVELLifeCycleManager.java:98) at org.jbpm.services.task.internals.lifecycle. MVELLifeCycleManager.taskOperation(MVELLifeCycleManager.java:322) at org.jbpm.services.task.identity. UserGroupLifeCycleManagerDecorator.taskOperation(UserGroupLifeCycleManagerDecorator.java:46) at org.jbpm.services.task.impl.TaskInstanceServiceImpl.claim(TaskInstanceServiceImpl.java:117) at org.jbpm.services.task.commands.ClaimTaskCommand.execute(ClaimTaskCommand.java:51) at org.jbpm.services.task.commands.ClaimTaskCommand.execute(ClaimTaskCommand.java:33) at org.jbpm.services.task.commands. TaskCommandExecutorImpl$SelfExecutionCommandService.execute(TaskCommandExecutorImpl.java:65) at org.drools.core.command.impl.AbstractInterceptor.executeNext(AbstractInterceptor.java:41) at org.jbpm.services.task.persistence.TaskTransactionInterceptor.execute(TaskTransactionInterceptor.java:54) at org.jbpm.services.task.commands. TaskCommandExecutorImpl.execute(TaskCommandExecutorImpl.java:40) at org.jbpm.services.task.impl.command.CommandBasedTaskService.claim(CommandBasedTaskService.java:136) at org.jbpm.runtime.manager.impl.task.SynchronizedTaskService.claim(SynchronizedTaskService.java:100) at com.sample.ProcessTest.testProcess(ProcessTest.java:97)
org.jbpm.services.task.exception.PermissionDeniedException: User '[UserImpl:'mary']' does not have permissions to execution operation 'Start' on task id 1