本文由 发布,转载请注明出处,如有问题请联系我们! 发布时间: 2021-06-07工作流Activiti框架中表单的使用!详细解析内置表单和外置表单的渲染

加载中

工作流引擎Activiti架构中表格的应用!详尽分析内嵌表格和外接表格的3D渲染

Activiti中的表格

  • Activiti给予了一种便捷并且灵便的方法在工作流程中以手工制作方法加上表格
  • 对表格的适用有2种方法:
    • 根据表格特性对内嵌表格开展3D渲染
    • 根据表格特性对外开放置表格开展3D渲染

表格特性

  • 工作流程关联的全部信息内容:
    • 包括本身的步骤自变量
    • 根据步骤自变量的引入
  • Activiti适用储存繁杂的Java目标做为步骤自变量:
    • 实例化目标
    • Jpa实体线目标
    • 全部XML文本文档做为字符串数组
  • 客户是在运行一个步骤和进行客户每日任务时,与步骤开展互动
  • 表格必须某一UI技术性3D渲染以后才可以与客户开展互动
  • 为了更好地可以应用不一样UI技术性越来越非常容易,步骤界定包括一个对步骤自变量中繁杂的Java种类目标到一个propertiesMap<String,String> 种类的变换逻辑性
  • 应用Activiti API的方式查询公布的特性信息内容.随后,随意UI技术性都可以在这种特性上边搭建一个表格.该特性专业为步骤自变量给予了一个主视图. 表格所必须表明的特性能够传参FormData中获得:
StartFormData FormService.getStartFormData(String processDefinitionId)

或是

TaskFormdata FormService.getTaskFormData(String taskId)
  • 在默认设置状况下,内嵌的表格模块碰到这种自变量如同看待步骤自变量一样.假如每日任务表格特性和步骤自变量是一对一的关联,那麼每日任务表格特性就不用开展声明了:
<startEvent id="start" />
  • 当实行到逐渐事情时,全部的步骤自变量全是可以用的,可是
formService.getStartFormData(String processDefinitionId).getFormProperties()

会是一个空值,由于沒有界定一个实际的投射

  • 表格中全部被递交的特性都可能做为步骤自变量被储存在Activiti应用的数据库查询中. 这代表着在一个表格中澳加上一个简易的input键入字段名,也会做为一个新的自变量被储存
  • 特性来自于步骤自变量,可是不一定非得做为步骤自变量储存:
    • 一个步骤自变量可能是JPA实体线如类Address.在某类UI技术性中应用的表格特性StreetName很有可能会关系到一个关系式 #{address.street}
  • 客户递交的表格特性应当做为步骤自变量开展储存
  • 应用UEL值关系式将其做为步骤自变量的一个嵌入特性开展储存
  • 递交的表格特性默认设置的个人行为是做为步骤自变量开展储存,除非是一个 formProperty 声明了别的的标准
  • 数据转换还可以运用于表格数据信息和步骤自变量中间的解决:
<userTask id="task">
  <extensionElements>
    <activiti:formProperty id="room" />
    <activiti:formProperty id="duration" type="long"/>
    <activiti:formProperty id="speaker" variable="SpeakerName" writable="false" />
    <activiti:formProperty id="street" expression="#{address.street}" required="true" />
  </extensionElements>
</userTask>
  • 表格特性room可能被投射为String种类步骤自变量room
  • 表格特性duration可能被投射为java.lang.Long种类步骤自变量duration
  • 表格特性speaker可能被投射为步骤自变量SpeakerName:
    • writable="false" 只可以在TaskFormData目标中应用.假如特性speaker递交,可能抛出去一个ActivitiException的出现异常
    • readable="false" 该特性便会在FormData开展清除,可是在递交后依然会对其开展解决
  • 表格特性street可能投射为Java Bean address的特性street做为String种类的步骤自变量:
    • 当递交的表格特性并沒有给予而且required="true" 时,那麼便会抛出去一个出现异常
  • 表格数据信息还可以做为FormData的一部分给予种类数据库.该FormData能够从下列方式的传参中获得:
StartFormData FormService.getStartFormData(String processDefinitionId)
TaskFormdata FormService.getTaskFormData(String taskId)
  • 表格特性种类:
    • string: org.activiti.engine.impl.form.StringFormType
    • long: org.activiti.engine.impl.form.LongFormType
    • enum: org.activiti.engine.impl.form.EnumFormType
    • date: org.activiti.engine.impl.form.DateFormType
    • boolean: org.activiti.engine.impl.form.BooleanFormType
  • 针对申明每一个表格特性,FormProperty信息内容能够根据下列方法获得:
List<FormProperty> formService.getStartFormData(String processDefinitionId).getFormProperties()

或是

List<FormProperty> formService.getTaskFormData(String taskId).getFormProperties()

public interface FormProperty {
  /**

  the key used to submit the property in {@link FormService#submitStartFormData(String, java.util.Map)}
   * or {@link FormService#submitTaskFormData(String, java.util.Map)} */
  String getId();
  /** the display label */
  String getName();
  /** one of the types defined in this interface like e.g. {@link #TYPE_STRING} */
  FormType getType();
  /** optional value that should be used to display in this property */
  String getValue();
  /** is this property read to be displayed in the form and made accessible with the methods
   * {@link FormService#getStartFormData(String)} and {@link FormService#getTaskFormData(String)}. */
  boolean isReadable();
  /** is this property expected when a user submits the form? */
  boolean isWritable();
  /** is this property a required input field */
  boolean isRequired();
}
  • 实例:
<startEvent id="start">
  <extensionElements>
    <activiti:formProperty id="speaker"
      name="Speaker"
      variable="SpeakerName"
      type="string" />

    <activiti:formProperty id="start"
      type="date"
      datePattern="dd-MMM-yyyy" />

    <activiti:formProperty id="direction" type="enum">
      <activiti:value id="left" name="Go Left" />
      <activiti:value id="right" name="Go Right" />
      <activiti:value id="up" name="Go Up" />
      <activiti:value id="down" name="Go Down" />
    </activiti:formProperty>

  </extensionElements>
</startEvent>
  • 全部的表格特性的信息内容全是能够根据API开展浏览的:
    • formProperty.getType().getName(): 获得种类的名字
    • formProperty.getType().getInformation("datePattern"): 获得日期的配对方法
    • formProperty.getType().getInformation("values"): 能够获得到枚举值
  • Activiti控制面板适用表格特性而且能够依据表格界定对表格开展3D渲染:
<startEvent ... >
  <extensionElements>
    <activiti:formProperty id="numberOfDays" name="Number of days" value="${numberOfDays}" type="long" required="true"/>
    <activiti:formProperty id="startDate" name="First day of holiday (dd-MM-yyy)" value="${startDate}" datePattern="dd-MM-yyyy hh:mm" type="date" required="true" />
    <activiti:formProperty id="vacationMotivation" name="Motivation" value="${vacationMotivation}" type="string" />
  </extensionElements>
</userTask>

当应用Activiti控制面板时,会被3D渲染成步骤的运行表格

外接表格的3D渲染

  • Activiti中的API容许实行Activiti流程引擎以外的方法3D渲染每日任务表格,可以用自定方法对每日任务表格开展3D渲染
  • 全部必须3D渲染的表格特性开展安装的服务项目方式有二种:
    • StartFormData FormService.getStartFormData(String processDefinitionId)
    • TaskFormdata FormService.getTaskFormData(String taskId)
  • 表格特性递交的二种方法:
    • ProcessInstance FormService.submitStartFormData(String processDefinitionId, Map<String,String> properties)
    • void FormService.submitStartFormData(String taskId, Map<String,String> properties)
  • 能够将一切表格免费模板資源放入要布署的业务流程文本文档当中(假如要想依照步骤的版本号开展储存).可能在布署中做为一种可以用的資源
  • 获得布署表格免费模板的方法有二种:
    • String ProcessDefinition.getDeploymentId()
    • InputStream RepositoryService.getResourceAsStream(String deploymentId, String resourceName)
    • 那样就可以获得表格免费模板界定文档,就可以在运用中3D渲染或是表明表格
  • 还可以应用该作用获得每日任务表格以外的别的的布署資源用以别的的目地
  • 特性 <userTask activiti:formKey="..." 曝露方法API:
    • String FormService.getStartFormData(String processDefinitionId).getFormKey()
    • String FormService.getTaskFormData(String taskId).getFormKey()
  • 能够应用这一储存布署的免费模板中的全称(比如org/activiti/example/form/my-custom-form.xml) 可是这并并不是务必的:
    • 能够在表格特性中储存一个通用性的key,随后应用一种优化算法或是换转到获得你具体应用的免费模板
    • 当必须根据不一样UI技术性3D渲染不一样的表格会更为便捷:
      • 应用一切正常屏幕大小的web应用程序流程的表格
      • 移动电话小显示屏的表格
      • IM表格
      • email表格免费模板

评论(0条)

刀客源码 游客评论