需要集成 泛微OA工作流的模块, 必须依赖 weaver 和 sun_base 这2个模块, Weaver模块实现了工作流数据组装, 发送, 以及工作流审批结果回调接口, 而 sun_base 实现了 组织架构元素在 泛微系统的内码ID查询功能.
1, 流程定义
在 泛微工作流模块 维护工作流 基本信息
需要 准备的资料, 包括
字段 | 显示名称 | 说明 |
workflowName | 流程名称 | 流程名称 |
workflowId | 流程ID | 泛微工作流流程ID, 泛微指定的 |
model_id | 模型 | 发起 工作流流程的odoo业务模型, |
callback_method | 回调方法名 | odoo业务模型实现的回调方法, 默认为 callback_method. |
factory_id | 工厂 | 流程适用的 工厂 |
company_id | 公司 | 流程适用公司, 自动跟随工厂纠正 |
流程定义, 也可以用data 文件进行准备
2, 在业务 发送 工作流请求
第一步, 继承 weaver.workflow.request 模型, 扩展 源单据 字段, 将 业务模型加入进去, 例如
class WeaverWorkflowRequest(models.Model):
_inherit = 'weaver.workflow.request'
document_id = fields.Reference(
selection_add=[
('quality.disposal', u'不良处置'),
]
)
第二步, 建立 weaver.workflow.request.info 对象, 此对象为 工作流请求的基本数据
此对象的 数据 包括
字段 | 显示名称 | 说明 |
creator | 创建人 | 创建人, odoo用户 |
creatorId | 创建人id | 创建人在泛微系统的 内码ID [ 可以通过 employee.get_employee_weaver_id() 得到 ] |
requestLevel | 紧急程度 | 流程的紧急程度 [ 0,1,2 依次优先级递增] |
requestName | 流程名称 | 流程的名称, 按照 泛微给出的要求拼装 |
workflowBaseInfo | 流程基础信息 | 流程的基本信息, 即 流程定义阶段 建立的 泛微工作流流程, 可以 使用 company_id.workflow_ids.filtered( lambda x: x.model_id.model == '业务魔模型名' ) 获取 |
例如
workflow_request_info = self.env['weaver.workflow.request.info'].create(
{
"creator": self.create_uid.id,
"creatorId": employee.get_employee_weaver_id(),
"requestLevel": '0',
"requestName": requestName,
"workflowBaseInfo": workflow_base_info.id,
}
)
第三步, 建立 weaver.workflow.request 对象
此对象在创建时, 主要提供以下 数据
字段 | 显示名称 | 说明 |
request_info | 流程信息 | 第二步 建立的 对象 |
document_id | 业务源单据对象 | 业务单据, 按 fileds.Reference 格式组装 |
例如
workflow_request = self.env['weaver.workflow.request'].create(
{
"request_info": workflow_request_info.id,
"document_id": '%s,%s' % (self._name, self.id)
}
)
第四步, 调用 weaver.workflow.request 对象的方法create_workflow_request( ) 将封装好的业务数据作为 参数 发送 工作流请求
工作流的内容 为 "业务表单", 通常, 表单 分为2个部分, 表头, 表体, 因此, create_workflow_request( ) 需要传递的 参数以 json 格式封装, 它包含 2部分, 一部分是 表头, key 为 workflowMainTableInfo, 另外一部分是 表体, 它的内容应该是 list, key为 workflowDetailTableInfos
例如
data = {
'workflowMainTableInfo': order_data,
'workflowDetailTableInfos': order_line_data
}
每一项数据的 拼装, 请遵照 具体泛微工作流表单的要求
create_workflow_request( ) 创建工作流成功时, 将会把 "泛微工作流实例ID" 保存到 weaver.workflow.request 对象, 并 返回 True , 否则返回 False
3, 在业务单据实现 工作流 回调 方法
在 Weaver模块实现了 统一的回调http 接口, 网址是 http://odoo.url/weaver/notify, 泛微工作流处理完成的时候, 调用此接口, 将流程数据按以下格式以POST方法提交.
POST数据结构如下:
{
'workflow_instance_id' : 泛微工作流流程实例ID
'data': {
}
}
泛微与业务功能开发者约定的业务数据, 封装在 data部分
业务功能实现者, 必须在 自己的业务模块实现 流程定义里面约定的 callback_method 方法. 如果不存在此方法, 则抛出异常消息 [例如, 业务单据" 不良处置 "没有实现callback_method()方法! ], callback_method方法将对 泛微回传的 data 进行处理.
4, 问题排查
每一个工作流请求, 都可以 在 泛微工作流请求列表查看
状态条, 显示了 工作流请求的状态
状态 | 说明 |
draft | 工作流请求创建成功, 尚未发送给泛微 |
pending | 工作流在泛微创建成功, 流程进行中 |
done | 工作流在泛微创中已完成, 流程已结束 |
error | 工作流请求创建成功, 发送泛微失败 |
canceled | 工作流请求取消 |