转自:https://www.cnblogs.com/liuqing576598117/p/9814953.html

1.获取
//通过流程定义ID获取表单字段集合
StartFormData startFormData = formService.getStartFormData(processDefinitionId);

TaskFormData taskFormData = formService.getTaskFormData(taskId);//内置表单(直接在流程中定义)
Object renderedTaskForm = formService.getRenderedTaskForm(taskId);//这个方法是返回一个纯文本的(外置表单(一个.form结尾的文件,),可以是一个div标签)
外置表单判断:
流程启动时:boolean hasStartFormKey = processDefinition.hasStartFormKey();
流程中:TaskFormData taskFormData = formService.getTaskFormData(taskId);
boolean key = taskFormData.getFormKey()

2.任务签收
taskService.claim(taskId, userId);

//数据展示

TaskFormData taskFormData = formService.getTaskFormData(taskId);//内置表单(直接在流程中定义)
if (taskFormData.getFormKey() != null) {
  Object renderedTaskForm = formService.getRenderedTaskForm(taskId);//这个方法是返回一个纯文本的(外置表单(一个.form结尾的文件,),可以是一个div标签)
  Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
  mav.addObject("task", task);
  mav.addObject("taskFormData", renderedTaskForm);
  mav.addObject("hasFormKey", true);
} else {
  mav.addObject("taskFormData", taskFormData);
}

3.自定义表单引擎

/**
* Javascript表单字段
*
*/
public class JavascriptFormType extends AbstractFormType { @Override
public String getName() {
return "javascript";
} @Override
public Object convertFormValueToModelValue(String propertyValue) {
return propertyValue;
} @Override
public String convertModelValueToFormValue(Object modelValue) {
return (String) modelValue;
}
}
/**
* 自定义表单引擎
*
*/
public class MyFormEngine implements FormEngine { @Override
public String getName() {
return "myformengine";
} @Override
public Object renderStartForm(StartFormData startForm) {
javax.swing.JButton jButton = new javax.swing.JButton();
jButton.setName("My Start Form Button");
return jButton;
} @Override
public Object renderTaskForm(TaskFormData taskForm) {
javax.swing.JButton jButton = new javax.swing.JButton();
jButton.setName("My Task Form Button");
return jButton;
}

自定义表单引擎 : public class MyFormEngine implements FormEngine (供C/S架构使用,eg:Swing,AWT,SWT)
Javascript表单字段: public class JavascriptFormType extends AbstractFormType

<!-- 流程引擎配置的bean -->
<bean id="processEngineConfiguration"
class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/act" />
<property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
<property name="jdbcUsername" value="root" />
<property name="jdbcPassword" value="123456" />
<property name="databaseSchemaUpdate" value="true" /> <property name="jobExecutorActivate" value="false" /> <!-- 自定义表单字段类型 -->
<property name="customFormTypes">
<list>
  <bean class="me.kafeitu.activiti.chapter6.form.JavascriptFormType" />
</list>
</property> <!-- 自定义表单引擎 -->
<property name="customFormEngines">
<list>
  <bean class="me.kafeitu.activiti.chapter6.form.MyFormEngine" />
</list>
</property>
</bean>

5. 提交表单字段并启动一个新的流程实例

//从请求中获取表单数据,然后启动流程
Map<String, String> formValues = new HashMap<String, String>();
if (hasStartFormKey) { // formkey表单
  Map<String, String[]> parameterMap = request.getParameterMap();
  Set<Entry<String, String[]>> entrySet = parameterMap.entrySet();
  for (Entry<String, String[]> entry : entrySet) {
    String key = entry.getKey();
    formValues.put(key, entry.getValue()[0]);
  }
} else { // 动态表单
  // 先读取表单字段在根据表单字段的ID读取请求参数值
  StartFormData formData = formService.getStartFormData(pdid);   // 从请求中获取表单字段的值
  List<FormProperty> formProperties = formData.getFormProperties();
  for (FormProperty formProperty : formProperties) {
    String value = request.getParameter(formProperty.getId());
    formValues.put(formProperty.getId(), value);
  }
}
ProcessInstance processInstance = formService.submitStartFormData(pdid, formValues

最新文章

  1. 多线程下HashMap的死循环问题
  2. vs2013 控制台程序exe图标
  3. 11g SQL Monitor
  4. Apache-Commons包作用说明
  5. 升级了win10后开启wifi热点出现iphone&amp;macbook连接断线的问题(win7也一样)
  6. HDU 5033 Building --离线+单调栈
  7. STL&amp;quot;源码&amp;quot;剖析-重点知识总结
  8. Compiling Xen-4.4 From Source And Installing It On Ubuntu Server (Amd-64)
  9. css table表格无法调整宽度问题分析
  10. 李洪强iOS开发之keychain的使用
  11. (hdu 7.1.8)Quoit Design(最低点——在n一个点,发现两点之间的最小距离)
  12. hdu 4109 dfs+剪枝优化
  13. 浅谈MVC模式与MVVM模式的区别
  14. ruby配合gem使用sass
  15. C# FTP操作类的代码
  16. Ubuntu下安装Snap
  17. ERP完善合同起草(二十八)
  18. 软考------(抽象类、接口) 策略设计模式(strategy) 应用
  19. python学习笔记02-编码
  20. MyBatis.3.CRUD

热门文章

  1. 搭建apache2.4+php7+mysql+phpmyadmin
  2. SpringCloud Eureka 配置
  3. SIP协议参数详解
  4. nexus 匿名用户的问题。
  5. 提高前端开发效率的N种方法
  6. 关于Vue中页面(父组件)下拉,页面中的子组件加载更多数据的实现方法
  7. K2 BPM_携手捷普:让流程立于云端,臻于至上_全球领先的工作流引擎
  8. FlowPortal BPM流程中调用封装好的API如何调试
  9. 【vue开发】vue导出Excel表格教程&amp;demo
  10. selenium网页截图和截图定位(带界面)