我希望能够将用户列表作为任务的候选者传递.用户从数据列表中检索,不作为组提供.Activiti:candidateUsers似乎是正确的方法.
假设已经在变量ipw_reviwers中获取并设置了用户.
<serviceTask id="alfrescoScripttask1" name="Alfresco Script Task" activiti:class="org.alfresco.repo.workflow.activiti.script.AlfrescoScriptDelegate">
<extensionElements>
<activiti:field name="script">
<activiti:string>logger.log("IPW - setup task");
execution.setVariable('ipw_reviwers', "tom, dick, harry");</activiti:string>
</activiti:field>
</extensionElements>
</serviceTask>
Run Code Online (Sandbox Code Playgroud)
以下使用变量ipw_reviewers
<userTask id="adhocTask" name="Adhoc Task" activiti:candidateUsers="${ipw_reviewers}" activiti:formKey="wf:activitiReviewTask">
<extensionElements>
<activiti:taskListener event="create" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
<activiti:field name="script">
<activiti:string>logger.log("IPW - create task");
if (typeof bpm_workflowDueDate != 'undefined') task.setVariableLocal('bpm_dueDate', bpm_workflowDueDate);
if (typeof bpm_workflowPriority != 'undefined') task.priority = bpm_workflowPriority;</activiti:string>
</activiti:field>
</activiti:taskListener>
</extensionElements>
</userTask>
Run Code Online (Sandbox Code Playgroud)
没有人能够看到或宣称这项任务.如果列表中只有一个用户,则该用户可以声明该任务.
如果activiti:candidateUsers被声明为
activiti:candidateUsers="tom, dick, harry"
Run Code Online (Sandbox Code Playgroud)
然后所有三个用户都能够声明任务.
可以在用户的列表被传递到Activiti的:candidateUsers在一个变量或应采用不同的方法来使用?
我是Alfresco/Activiti的新手.
我们公司正在使用Skelta BPM.NET(与我们自己开发的RMS集成),现在我们想了解其他BPM软件.
我最后几天发现了如何使用Eclipse创建新的工作流程并将它们导入到Activiti的独立安装中.
现在我想将此工作流程发布到Alfresco共享中.有没有简单的方法呢?我一整天都在Google上搜索,但没有找到任何有用的东西.
关于安装的另一个问题:是否可以在同一个tomcat上安装Activiti及其所有的webapps,alfresco正在运行?Apache Ant只能构建独立安装.这两个应用程序可以合并吗?
感谢您的信息,Anze
我必须在activiti中创建进程,这需要以下用例.
1.表单有一个人物搜索字段2.当有人完成表单并使用填充了名称的人员搜索字段完成任务时,我需要将下一个分配了名称/名称的任务设置为可以对其执行操作的用户下一个任务.
我怎样才能实现使用activiti引擎apis.
对此有任何帮助表示赞赏.
提前致谢.
对于一个我开始质疑甚至可能的过程来说,这似乎是一个相当简单的要求.
下图显示了我当前的流程.我想要实现两件事:
用户创建用于添加注释的初始用户任务,他们应该能够根据需要添加任意数量的注释,每个注释一个用户任务
为用户创建的每个新笔记(用户任务)生成一个新的子流程.
上述过程存在以下问题:
应该为每个任务生成一个子流程,但它们似乎互相覆盖
我不确定子流程是否需要为每个生成的新子流程提供唯一的ID
目前,我正在研究扩展BPMN的方法.我想创建一个新任务类型,其属性少于任务,还有一些非BPMN属性和一种新类型的池.
到目前为止,我看到人们提到了两种方式,使用扩展点和使用外部模式.不幸的是,在互联网上,我找不到很多资源来广泛理解这些方法.
我从这些方法中理解了什么:
扩展点: BPMN引擎供应商提供了一些标准扩展点(Aktiviti,jBPM等).例如在Activiti中有一个自定义服务任务,可以使用用户期望的属性进行扩展,但是如果可以在Aktiviti工作流引擎上部署这个新创建的扩展任务,我找不到任何资源,并且看到新的BPMN也会很高兴此扩展的架构.
使用外部模式:在外部模式中定义所需的属性,并从Semantic.xsd引用此模式.在这种情况下,我们还需要调整我们的工作流引擎,但它比我之前提到的方法更灵活,或者我错过了什么?
唯一不明确的是这个方法不直接扩展任务定义,所以这些属性可以被BPMN中的每个元素使用?
示例外部模式是:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema elementFormDefault="qualified" attributeFormDefault="unqualified"
xmlns="http://myproject.org//bpmn/extensions/NEWTask"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:exvar="http://myproject.org/externalDefs"
targetNamespace="http://myproject.org//bpmn/extensions/NEWTask"
>
<xsd:import namespace="http://www.omg.org/spec/BPMN/20100524/MODEL" schemaLocation="BPMN20.xsd"/>
<xsd:import schemaLocation="externalDefs.xsd" namespace="http://myproject.org/externalDefs" />
<xsd:complexType name="tProperty1" abstract="false">
<xsd:sequence>
<xsd:any namespace="##any" processContents="lax" minOccurs="0" />
</xsd:sequence>
</xsd:complexType>
<xsd:group id="tNEWTask" name="tNEWTask">
<xsd:sequence>
<xsd:element name="Property2" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="Property1" type="tProperty1" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="Property2" type="exvar:Varaible1" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:group>
</xsd:schema>
Run Code Online (Sandbox Code Playgroud)
是否有任何其他方法可以扩展BPMN或您可以指向我的任何资源,以便我可以更好地了解此主题?
任何帮助将不胜感激,提前感谢!
我有一个webapp,它具有用户/组功能,以及现有的用户/组数据.
我想使用Activiti流程引擎,但似乎Activiti管理用户/组信息本身.
我是不是该:
RepositoryService,IdentityService等等,并重新编译?似乎RepositionServiceImpl在Activiti来源中硬编码,并且没有setRepositionService()方法ProcessEngine.我无法重命名现有的db表,因为还有一些其他应用程序使用它们.
我已阅读用户指南,但我没有找到有关如何将Activiti与现有应用程序集成的任何信息.
很多时候我都听说过这两个概念.
如"windows工作流基础"和Activiti和jBPM等项目是"业务流程管理引擎".
这两个名词("工作流引擎"和"业务流程管理引擎")是一回事吗?
我有一个针对某些业务流程的Activiti项目.
问题在于迁移.现有流程有一些未完成的任务.我想通过添加新步骤来修改现有流程.
现在,当我创建一个新任务时,将根据更新的过程处理这个新任务.未完成的任务将根据旧流程进行处理.
我们来看以下示例:https://spring.io/blog/2015/03/08/getting-started-with-activiti-and-spring-boot
在此示例中,请考虑以下行:
taskVariables.put("telephoneInterviewOutcome", true);
Run Code Online (Sandbox Code Playgroud)
假设我有一些业务逻辑代码,我检查这个变量的值,如:
if (taskVariables.get("telephoneInterviewOutcome") == true) {...}
Run Code Online (Sandbox Code Playgroud)
现在假设,我想将此变量从Boolean修改为Enum.现在,我还需要更新我的业务逻辑:
if (taskVariables.get("telephoneInterviewOutcome") == SOMEENUM) {...}
Run Code Online (Sandbox Code Playgroud)
现在,我的业务逻辑代码需要根据手头任务的进程版本进行分支.如果任务属于进程的版本1,那么我将使用第一个语句,否则第二个类似于:
if (getProcessVersion(task) == 1) {
if (taskVariables.get("telephoneInterviewOutcome") == true) {...}
} else {
if (taskVariables.get("telephoneInterviewOutcome") == SOMEENUM) {...}
}
Run Code Online (Sandbox Code Playgroud)
这种方法的问题在于业务逻辑代码将随着流程的更新而增长.这会在生产过程中造成很多错误.
这个问题还有其他解决办法吗?如何在不更改业务逻辑代码的情况下解决此问题?
我使用Spring状态机和一些基本的Spring MVC应用程序.我必须承认,配置和使用非常简单.
但它也有许多局限性,主要是因为它处于发展的早期阶段.
我还遇到了一些像Activiti这样的工作流引擎,它是一个用Java编写的开源工作流引擎和一个轻量级Java状态机stateless4j.它们看起来更加精致和精致.
我想知道这些和Spring State Machine之间有什么区别(优点或缺点).
目前我有一个使用 fork/join 机制来创建并行流的子流程。以免假设有两个流:A, B。每个流都将复杂对象CONTEXT作为输入变量。此外,每个流程都会进行一些计算并更新内部的CONTEXT。作为输出,每个流都返回更新的CONTEXT。这里的问题是在加入点,CONTEXT 的最后一个结果覆盖了前一个。让我们假设流程A填充首先以结果CONTEXT_1完成,流程B将返回CONTEXT_2。所以最终结果将是CONTEXT_2并且流A 的所有更改都将丢失。
更新: 根据我的观察,从 SuperProcess 到 SubProcess 的传递变量 (CONTEXT) 被复制 (CONTEXT'),并且在 subProcess 完成后,传递变量 (CONTEXT') 的新值将取代原始 (CONTEXT)。
在下面的示例中,我的意思是所有传递的变量都具有相同的名称。
例子:
SubProcess P2 (Variable: CONTEXT' ) 创建两个并行流(Tasks)A , B(变量通过副本传递);
一个任务(变量:CONTEXT_1)更新变量的值,完成执行并返回变量;
3.1. CONTEXT_1代替了变量CONTEXT',因此P2只能看到这个新值,因为该变量的名称相同;
同时B任务(变量: …
activiti ×10
bpmn ×5
alfresco ×4
workflow ×4
business-process-management ×2
java ×2
groovy ×1
integration ×1
jbpm ×1
spring ×1