自定义表单
自定义 Jmix 表单
如需在 启动流程 或 我的任务 视图中渲染自定义表单,请实现 ProcessFormViewCreator 接口,并将其注册到 custom 表单类型。
我们来看一个实现 ProcessFormViewCreator 的 MyCustomProcessFormViewCreator 示例:
@Component("MyCustomProcessFormViewCreator")
@Order(1) (1)
public class MyCustomProcessFormViewCreator implements ProcessFormViewCreator {
@Autowired
private DialogWindows dialogWindows;
@Override
public String isApplicableFor() {
return "custom";
}
@Override
public DialogWindow<?> createStartProcessView(CreationContext creationContext) { (2)
FormData formData = creationContext.getFormData();
View origin = creationContext.getOrigin();
String viewId = formData.getScreenId();
DialogWindow dialog = dialogWindows
.view(origin, viewId)
.open();
if (dialog.getView() instanceof AcceptsProcessDefinition) { (3)
((AcceptsProcessDefinition) dialog.getView())
.setProcessDefinition(creationContext.getProcessDefinition());
}
return dialog;
}
@Override
public DialogWindow<?> createUserTaskView(CreationContext creationContext) { (4)
FormData formData = creationContext.getFormData();
View origin = creationContext.getOrigin();
String viewId = formData.getScreenId();
DialogWindow dialog = dialogWindows
.view(origin, viewId)
.build();
if (dialog.getView() instanceof AcceptsTask) { (5)
((AcceptsTask) dialog.getView())
.setTask(creationContext.getTask());
}
return dialog;
}
}
| 1 | @Order 注解使该实现成为框架的首选。 |
| 2 | 重写用于创建启动流程表单的方法。 |
| 3 | 检查视图是否实现了 AcceptsProcessDefinition。此时,需要为视图设置 ProcessDefiniton。 |
| 4 | 重写用于创建任务流程表单的方法。 |
| 5 | 检查视图是否实现了 AcceptsTask。此时,需要为视图设置 Task。 |
上面的代码使用了两个辅助接口。辅助接口 AcceptsProcessDefinition 的示例:
public interface AcceptsProcessDefinition {
void setProcessDefinition(ProcessDefinition processDefinition);
}
辅助接口 AcceptsTask:
public interface AcceptsTask {
void setTask(Task task);
}
这些接口必须由自定义的启动和任务表单实现。
自定义启动表单
示例中的自定义启动表单仅带有一个 Start process 按钮:
<view xmlns="http://jmix.io/schema/flowui/view"
title="msg://customStartForm.title">
<layout>
<button id="startProcessBtn" text="msg://startProcessBtn.caption"/>
</layout>
</view>
自定义启动表单的视图控制器:
@ViewController(id = "CustomStartForm")
@ViewDescriptor(path = "custom-start-form.xml")
public class CustomStartForm extends StandardView implements AcceptsProcessDefinition {
private ProcessDefinition processDefinition;
@Autowired
private RuntimeService runtimeService;
@Override
public void setProcessDefinition(ProcessDefinition processDefinition) {
this.processDefinition = processDefinition;
}
@Subscribe(id = "startProcessBtn", subject = "clickListener")
public void onStartProcessBtnClick(final ClickEvent<JmixButton> event) {
runtimeService.startProcessInstanceByKey(processDefinition.getKey());
closeWithDefaultAction();
}
}
自定义任务表单
示例中的自定义任务表单仅带有一个 Task complete 按钮:
<view xmlns="http://jmix.io/schema/flowui/view"
title="msg://com.company.bpmex1.view.forms/customTaskForm.title">
<layout>
<button id="completeTaskBtn" text="msg://com.company.bpmex1.view.forms/completeTaskBtn.text"/>
</layout>
</view>
自定义任务表单的视图控制器:
@ViewController("CustomTaskForm")
@ViewDescriptor("custom-task-form.xml")
public class CustomTaskForm extends StandardView implements AcceptsTask {
private Task task;
@Autowired
private TaskService taskService;
@Subscribe("completeTaskBtn")
public void onCompleteTaskBtnClick(ClickEvent<JmixButton> event) {
taskService.complete(task.getId());
closeWithDefaultAction();
}
@Override
public void setTask(Task task) {
this.task = task;
}
}
使用其他的 UI 技术
可以使用其他 UI 技术(例如 React)创建表单,通过 REST 与 Jmix BPM 通信。使用 Flowable 的 FormService 可以从引擎获取表单信息,该服务提供以下方法:
-
StartFormData getStartFormData (String processDefinitionId) -
TaskFormData getTaskFormData (String taskId)
或者,使用 Jmix 中的 ProcessFormDataExtractor 暴露表单元数据。示例请参见 获取流程表单数据 部分。
本页是否有帮助?
感谢您的反馈