技术文章
在o2oa中,内容管理是发布信息及数据的应用,流程是流转审批的应用。我们经常会有这样的需求:一条信息需要审批通过后才能发布。对于这类需求,O2OA平台在关联配置、表单共用和启动界面等方面进行设计,提供了完善的解决方案。
在o2oa 7.2版本之前,我们在流程中可以使用“服务调用”来进行文档审批后的发布,但是通过这种方式需要编写脚本,不是很直观。(文档见:https://www.yuque.com/o2oa/course/tanwk3,本文不再描述这种方式)。
从o2oa 7.2版本开始,我们提供了流程节点“数据发布”进行信息的发布。“数据发布”节点可以指定需要发布的内容管理分类,并对发布细节进行了可视化配置。配置以后流程流转至“数据发布”节点时,平台会根据配置在指定的内容管理分类中生成一份文档。
在本文中,我们将以以下设计为样例:
内容管理栏目“部门信息”,有两个分类“部门通知公告”和“部门规章制度”,均需要关联流程应用“信息发布”中的流程“部门信息发布流程”。
(创建流程设计请查看文章:https://www.yuque.com/o2oa/course/hgfalk)
我们可以在流程的“数据发布”节点中直接选择内容管理分类,如下图的流程设计中选择了分类“部门通知公告”。这种情况下,这个流程只对应一个内容管理分类。
通过上面的配置,用户可以在流程启动界面中发起审批流程“部门信息发布流程”,如下图。流程流转至“数据发布”节点后,系统会发送文档到内容管理中。
当多个内容管理分类使用的审批流程是一样,我们不需要为每个分类创建流程。只需要两个步骤的配置即可实现。
步骤一:在内容管理分类中指定审批流程
步骤二:在审批流程中创建“数据发布”节点
选择内容管理分类为“数据路径”。
内容管理分类数据路径设置为:“cmsDocument.categoryId”。
系统在启动流程实例或内容管理的时候,在前台会判断当前文档关联了流程,如果是,则为发起的流程传入如下数据,当流转至数据发布节点时会取数据中的“cmsDocument.categoryId”为内容管理分类id:
"cmsDocument": { "appId": "95c74aaa-fe7c-42d8-8a2b-c236e312b58d", //内容管理栏目id "categoryAlias": "部门信息-部门公告通知", //内容管理别名 "categoryId": "f74e92d7-200c-41ce-bd27-7a248152954d", //内容管理id "categoryName": "部门公告通知", //内容管理名称 "createTime": "2022-08-10 18:16:15", //创建时间 "creatorIdentity": "张三@kfb_zhangsan@I", //创建身份 "docStatus": "draft", //文档状态为草稿 "identity": "张三@kfb_zhangsan@I", //创建者身份 "isNewDocument": true, //新文档标志 "title": "无标题" //文档标题 }
通过上面的配置,系统会在内容管理和流程的启动界面中均加入关联了流程的内容管理分类。
以下为内容管理的发起界面:
以下为流程管理的启动界面:
这时,去启动流程本身,由于不会传入“cmsDocument”数据,将不能正常发布。因此要将流程在启动界面中去除。在“部门信息发布流程”流程设计的属性中,将“启动终端”中设置为“无”即可。
流程工作和内容管理文档展现依托于各自的表单。如果需要一个字段在流程工作和内容管理文档都要展现出来,那么在各自的表单都需要加入这个字段,如标题字段"subject",在两个表单中都要拖入“文本字段”,并命名为"subject"。
由于业务特性的不同,流程工作和内容管理表单存在一些差异,如内容管理中有“发布”功能,而流程中需要选择“决策”、填写意见并且选择处理人后提交。另外,两种表单也存在组件上的差异,如下表。
流程管理专有组件 | 内容管理专有组件 |
意见框 | |
侧边操作条 | |
流程记录 | |
阅读记录(已阅记录) | |
流程监控 | |
读者 | |
作者 | |
阅读记录(浏览记录) | |
评论 |
为了避免在流程管理和内容管理中重复设计表单,o2oa平台中提供下面几种方案。
在流程平台和内容管理表单的新建界面中,我们都提供了信息发布表单模板,两个表单的组件大致是一样的。我们可以分别选择模板进行创建,然后在流程和分类中关联表单即可。
1、在内容管理配置界面,点击表单新建按钮,如下图:
2、选择“发布类编辑表单”
表单界面如下:
1、在流程管理配置界面,点击表单新建按钮,如下图:
2、点击“发布类审批表单”,如下:
表单界面如下:
如果根据需求使用的不是发布类表单,那么必须要在内容管理或者流程管理中创建一个表单,然后拷贝到另外一个应用。在V7.0版本后,表单是允许在内容管理和流程管理之间相互拷贝的。
1、在内容管理中配置表单。
2、在内容管理配置界面中,打开表单配置,在界面右侧的表单列表中点击图标(下图红框处),可以按Ctrl+C复制表单。
3、然后到流程管理的表单配置处,点击Ctrl+V即可黏贴表单。
4、打开表单,把“读者”、“作者”字段替换成“人员组织”组件。删除“阅读记录”和“评论”组件。其他组件会正常显示,如下图:
5、如果表单的脚本中有内容管理专用上下文(如this.documentContext
下的api),需要根据实际情况进行修改。
1、在流程管理中配置表单。
2、在流程管理配置界面中,打开表单配置,在界面右侧的表单列表中点击图标(下图红框处),可以按Ctrl+C复制表单。
3、然后到内容管理的表单配置处,点击Ctrl+V即可黏贴表单。
4、打开表单,删除“意见框”、“侧边操作条”、“流程记录”、“阅读记录”和“流程监控”组件及多余的Tab分页。删除表单的“操作条”组件,然后从左侧重新拖拽“操作条”组件到表单中。其他组件会正常显示,如下图:
5、如果表单的脚本中有流程管理专用上下文(如this.workContext
下的api),需要根据实际情况进行修改。
在V7.2版本开始,我们可以使用流程管理的表单来打开内容管理文档。
1、在流程管理中配置表单。
2、在流程配置的“数据发布”节点中设置“使用流程表单”,如下图:
3、在脚本中,可以根据 this.appType
来判断当前运行的环境,如下:
var title; //标题 if( this.appType === "cms" ){ title = this.documentContext.getDocument().title; }else if( this.appType === "process" ){ title = this.workContext.getWork().title; }
4、在文档发布以后,打开内容管理文档使用的就是流程表单。
审批表单如下:
内容管理表单如下: