React 工作流 bpmn.js 从入门到实战:自定义属性栏更新业务属性
2023-08-14 06:47:54
利用 bpmn.js 和 React 构建自定义属性栏
在流程图应用的开发过程中,赋予用户在节点上添加和更新业务属性的能力至关重要。本文将深入探讨如何利用 bpmn.js 和 React 框架构建一个自定义的属性栏,满足这一需求。
第一步:设置环境
首先,我们需要安装必需的依赖项。使用 npm 包管理工具安装 bpmn-js、react 和 react-dom:
npm install --save bpmn-js react react-dom
第二步:创建 React 组件
接下来,我们创建一个 React 组件,负责显示属性栏。该组件名为 PropertyPanel,它接受 modeler 和 selectedElement 作为属性,其中 modeler 表示 bpmn.js 模型器,而 selectedElement 表示当前选中的流程图元素。
import React from 'react';
const PropertyPanel = (props) => {
const { modeler, selectedElement } = props;
return (
<div>
{selectedElement && (
<div>
<label>名称:</label>
<input type="text" value={selectedElement.businessObject.name} onChange={(e) => {
const newBusinessObject = { ...selectedElement.businessObject, name: e.target.value };
modeler.updateBusinessObject(selectedElement, newBusinessObject);
}} />
</div>
)}
</div>
);
};
export default PropertyPanel;
第三步:集成到 bpmn.js
现在,我们需要将 PropertyPanel 组件集成到 bpmn.js 模型器中。为此,我们在创建模型器时指定 propertiesPanel 选项,并将其 parent 和 component 设置为相应的属性栏容器和 React 组件:
import PropertyPanel from './PropertyPanel';
const bpmnModeler = new BpmnModeler({
container: '#bpmn-canvas',
propertiesPanel: {
parent: '#properties-panel',
component: PropertyPanel
}
});
第四步:运行应用程序
最后,通过运行 npm start 命令启动应用程序,属性栏将集成到流程图编辑器中,允许用户修改选中节点的名称等业务属性。
代码示例
以下是完整的代码示例,展示了如何设置和使用自定义属性栏:
HTML
<div id="bpmn-canvas"></div>
<div id="properties-panel"></div>
JavaScript
import BpmnModeler from 'bpmn-js/lib/Modeler';
import PropertyPanel from './PropertyPanel';
const bpmnModeler = new BpmnModeler({
container: '#bpmn-canvas',
propertiesPanel: {
parent: '#properties-panel',
component: PropertyPanel
}
});
bpmnModeler.importXML({ xml: '<bpmn2:process id="my-process"></bpmn2:process>' });
常见问题解答
-
Q:如何更新其他业务属性?
-
A: PropertyPanel 组件可根据需要进行扩展,以支持其他业务属性。只需将它们添加到组件 state 中并更新 UI 和业务对象更新逻辑。
-
Q:我可以控制属性栏的位置吗?
-
A: 是的,可以通过在 propertiesPanel 选项中设置 position 属性来控制属性栏的位置。
-
Q:如何从属性栏删除属性?
-
A: 删除属性的 best practice 是通过扩展 BpmnJS 架构,创建自定义属性提供程序并将其添加到模型器中。
-
Q:如何处理复杂的业务属性?
-
A: 对于复杂的业务属性,可以使用第三方库,例如 react-json-schema-form,它提供了一个高级 UI 组件来编辑 JSON 模式定义的属性。
-
Q:属性栏是否支持所有流程图元素类型?
-
A: 属性栏支持 bpmn-js 默认支持的元素类型。但是,您可以通过创建自定义元素扩展进行扩展。
结论
通过遵循本教程,您已经成功构建了一个使用 bpmn.js 和 React 的自定义属性栏,可用于更新流程图节点的业务属性。这个属性栏提供了直观的用户体验,增强了流程图编辑功能,使您可以更轻松地创建和修改业务流程模型。