4.1 关于审批流程监控

EasySQLMAIL企业微信管理工具中提供了企业微信审批流程监控功能。您可以利用此功能来监控审批流程,在审批结束时把审批数据保存到本地数据库中以便于查询和统计。

此外您还可以在审批结束时执行一个指定的任务,对审批数据进行进一步处理,例如向指定人员发送通知,告知审批已结束,或是根据已结束的流程自动发起另一个审批流程等。

在本文档中您将了解到审批流程监控功能的配置和使用方法。

4.2 准备工作

4.2.1 为企业微信应用添加审批API调用权限

在开始使用"审批流程监控"功能前,您需要在企业微信管理平台中为您的企业微信应用添加"审批接口API调用权限"。具体步骤如下:

(1) 在企业微信管理平台的"应用管理"中打开"审批"应用。

(2) 在"审批"应用中点击"API"图标,然后点击"可调用接口的应用"右侧的"修改"按钮。

(3) 在"设置可调用接口的应用"对话框中勾选您的应用,然后点击"确认"。

4.2.2 设置企业微信应用的可见范围

企业微信API只允许应用读取应用的可见范围内的成员提交的审批申请。为了确保系统能够监控您指定的审批模板的所有数据,建议把您的企业微信应用的可见范围设置为组织架构中的顶层部门(即全公司可见)。

此步骤不是必需的,您根据您的需要进行设置即可。

(1) 在企业微信管理平台的"应用管理"中打开您的应用,然后点击"编辑"。

(2) 点击"可见范围"右侧的"添加"按钮。

(3) 在"设置应用可见范围"对话框中选中顶层部门,然后点击"确认"。

4.2.3 查询要监控的审批模板的模板ID

审批模板ID 是企业微信为每个审批模板自动生成的一串唯一标识符。在后面的配置中需要用到这个标识符。

您可以在企业微信管理平台中查询到审批模板ID。具体步骤如下:

(1) 在企业微信管理平台的"应用管理"中打开"审批"应用。

(2) 在模板管理中找到并点击您要查询的审批模板。

(3) 点击模板名称即可看到"模板ID"。

4.3 配置审批流程监控

在启用"审批流程监控"前,您需要把要监控的审批模板ID添加到监控列表中,并选择用于监控这些模板的企业微信应用,设置监控的起始时间。

配置完成后,系统会每隔1分钟调用企业微信API,读取指定的审批模板的流程数据,并对这些流程进行监控。

4.3.1 打开"审批流程监控"配置界面

(1) 在任务管理器中点击"WXWAM_企业微信管理工具_系统管理",打开"企业微信管理工具"的管理界面。

(2) 在管理界面点击"审批流程监控"菜单,打开"审批流程监控"配置界面。

4.3.2 添加要监控的审批模板

(1) 在"审批流程监控"配置界面中点击"添加要监控的审批模板"按钮,打开"审批流程监控"配置对话框。

"审批流程监控"配置对话框

在这个对话框中:

所属企业

选择要监控的审批模板所属的企业。

使用此应用读取审批数据

选择用来读取这个模板的审批数据的企业微信应用。

审批模板ID

输入要监控的审批模板的ID。审批模板ID的查询方法参阅 4.2.3 查询要监控的审批模板的模板ID

审批模板名称

输入"审批模板ID"后,点击"审批模板名称"右侧的"读取模板名称"按钮,系统会调用企业微信API读取审批模板的配置数据,并把模板名称填写到这个文本框中。

查看审批模板内容

您可以点击这个按钮查看审批模板的配置内容(JSON格式)。

自动监控xxx以后发起的审批单

您需要在这里设置要监控的审批的起始时间。系统只读取这个时间以后发起的审批流程。

例如,当此字段设置为"2025-09-01 00:00:00"时,系统将只读取2025-09-01以后发起的审批流程的数据。

注意:为了防止漏读数据,系统会将您设置的监控起始时间向前移动约10分钟。例如您设置的监控起始时间是"2025-10-01 00:00:00",系统有可能读取"2025-09-30 23:50:00"以后的审批数据。

审批结束时触发任务

您可以在这里输入一个任务名称。当一个审批结束时(无论是通过还是未通过),系统都会启动您设置的这个任务。您可以在任务中对审批数据进行进一步处理,例如发送邮件通知,自动启动另一个流程等。

审批结束时把审批单数据转存到指定的数据源

勾选此选项后,当一个审批结束时,系统会把审批数据转存到您指定的数据源上的指定的表中。

配置转存选项

勾选了"审批结束时把审批单数据转存到指定的数据源"选项后,点击这个按钮配置数据转存的选项,例如目标数据源、目标表名称、字段映射关系等。

模板信息输入完成后,点击"确定"保存。这时系统每隔1分钟调用企业微信API读取这个审批模板的流程数据,并在审批流程结束时进行相应的处理。

注意:

(1) 同一个企业的同一个审模板只允许添加一次。如果要恢复被删除的模板,可以点击"显示已删除的配置"按钮,然后找到要恢复的记录,点击记录右侧的"撤消删除"即可。

(2) 如果"企业微信配置"中对应的企业被停用或删除,或是企业微信应用被停用或删除,系统将停止对此模板的监控。

(3) 当一个审批流程结束(无论是否审批通过),系统会读取这个审批流程数据,并把数据保存在EasySQLMAIL的"默认数据源"(PostgreSQL数据库)的user01.wxsp_sp_data表中。您可以在这个表中查询到对应的审批数据。

(4) 目前系统不会下载审批流程的附件文件。如果您需要下载附件文件并进行处理,请与我们联系,由我们根据您的需求为您配置相应的功能。

4.4 把审批数据转存到您的数据库

EasySQLMAIL企业微信管理工具能够把已结束的审批的流程数据转存到您指定的数据库中,以便于您统计和查询。

4.4.1 在目标数据库中创建转存数据表

启用数据转存功能前,您需要先在目标数据库中创建一个数据表用于存放转存的审批数据。例如:

--创建数据表,必须有一个名为sp_unique_id的列。数据列的数据类型必须是varchar类型,且预留出足够的长度
CREATE TABLE t_metting
  (
     sp_unique_id       VARCHAR(200),      --表中必须有sp_unique_id列,用于存放审批数据的唯一ID(企业ID+审批编号)
     审批编号       VARCHAR(200),--存放审批数据。可选
     申请时间       VARCHAR(4000),--存放审批数据。可选
     完成时间       VARCHAR(4000),--存放审批数据。可选
     审批结果       VARCHAR(4000),--存放审批数据。可选
     预定的会议室 VARCHAR(4000),--存放审批数据。可选
     预定时间       VARCHAR(4000),--存放审批数据。可选
     会议主题       VARCHAR(4000),--存放审批数据。可选
     参与人          VARCHAR(4000)--存放审批数据。可选
  );
--为sp_unique_id创建索引
CREATE INDEX idx_t_metting_sp_unique_id  ON t_metting(sp_unique_id); 

注意:

(1) 目标表名和字段名中不能出现 除字母、数字、下划线 以外的其它符号。

(2) 目标表中必须有一个名为 "sp_unique_id" 的列,系统会把审批流程的唯一ID保存到这个列中,并通过这个字段判断一个审批流程是否已转存过,以防止重复转存。

(3) 建议为sp_unique_id列创建索引,以加快处理速度。

(4) 表中用于存放审批数据的列(包括 sp_unique_id )的数据类型必须是 "varchar" 或 "text" ,且要预留足够的长度,例如varchar(4000)。

4.4.2 配置审批数据转存功能

(1) 在"审批流程监控"配置对话框中勾选"审批结束时把审批单数据转存到指定的数据源"选项,然后点击"配置转存选项"按钮打开"审批单数据转存"对话框。

"审批单数据转存"对话框

在这个对话框中:

目标数据源

选择数据转存的目标数据库。您可以在EasySQLMAIL的"数据源管理"中配置要连接的数据库信息。

目标表

点击右侧的按钮输入目标表的名称。注意目标表的名称中不能包含除字母、数字、下划线以外的其它符号。

字段列表

您可以在字段列表中点击"目标表字段"设置每个字段对应的目标表字段。系统会按您的配置把审批数据保存到目标表的对应字段中。

4.4.3 关于"源字段"的说明

在转存审批数据到其它数据库时,有两种源字段类型。

基础字段: 代表审批单的基本信息,由系统自动生成。例如审批模板ID、审批编号、申请时间等。

审批模板字段: 代表审批模板的一个字段,由申请人在发起审批时填写。

系统可以提供以下 "基础字段":

审批编号

审批单的编号,则企业微信平台自动生成。例如 "202510180001"。

企业ID

审批模板所属的企业的ID。例如"wx6dd201d695ac2df6"。

审批模板ID

审批数据的模板的ID,例如"3WN6T1f8KeFPp5AyBL2YAGPRgq4NvRcXWetznmbR"。

审批模板名称

审批数据的模板的名称,例如"会议申请流程"。

申请时间

发起审批流程的时间。即审批数据中的 "apply_time"字段。

完成时间

审批流程的完成时间。取审批流程的最后一个环节的处理时间。

审批结果

审批流程的结果。即审批数据中的 "sp_status"字段。

根据企业微信API文档的解释,"sp_status"的具体含义如下:

1-审批中;2-已通过;3-已驳回;4-已撤销;6-通过后撤销;7-已删除;10-已支付

申请人ID

审批申请人的企业微信用户ID。例如 "heyang"。

申请人ID

审批申请人的部门ID。例如 "100"。

审批单原始数据

申请单的原始数据(JSON格式)。系统可以把审批单的数据导出到您指定的表中,您可以使用数据库的JSON功能解析这些数据。

JSON数据的格式说明请参见企业微信API文档 https://developer.work.weixin.qq.com/document/path/91983

系统在导出 "审批模板字段"的数据时,根据字段控件类型的不同,可能会导出原始数据中不同的内容。以下是具体的说明:

控件类型

导出原始数据中的字段

导出后的数据示例

文本(单行和多行)

导出 "value"->"text"字段中的内容。

这是一个单行文本

日期时间

导出 "value"->"date"->"s_timestamp"字段中的内容,系统会把内容转换为日期时间格式字符串。

2025-10-19 20:11:08

数字

导出 "value"->"new_number"字段中的内容。

1806.12

数字

导出 "value"->"new_money"字段中的内容。

999.81

单选框

导出 "value"->"selector"->"options"[0]->"value"字段中的内容(字符集为zh_CN)。

单选项1

多选框

导出 "value"->"selector"->"options"->"value"字段中的内容(字符集为zh_CN)。多个选项的值会被组合一个JSON数组。

["单选项1","单选项2","单选项3"]

成员控件

导出 "value"->"members"字段中的内容。数据的详细说明请参考企业微信API文档 https://developer.work.weixin.qq.com/document/path/91983#附6-成员控件(control参数为contact,且value参数为members)

[{"name": "系统管理员", "userid": "heyang"},{"name": "员工A", "userid": "staff1"}]

部门控件

导出 "value"->"departments"字段中的内容。数据的详细说明请参考企业微信API文档 https://developer.work.weixin.qq.com/document/path/91983#附7-部门控件(control参数为contact,且value参数为departments)

[{"name": "销售部", "openapi_id": "2"}, {"name": "生产部", "openapi_id": "3"}]

时长组件

导出 "value"->"date_range"字段中的内容。数据的详细说明请参考企业微信API文档 https://developer.work.weixin.qq.com/document/path/91983#附14-时长组件(control参数为daterange)

{"type": "halfday", "new_end": 1570593600, "new_begin": 1570550400, "new_duration": 86400, "timezone_info": {"zone_desc": "UTC+9", "zone_offset": "-9"}, "perday_duration": 86400}

附件控件

导出 "value"->"files"字段中的内容。数据的详细说明请参考企业微信API文档 https://developer.work.weixin.qq.com/document/path/91983#附9-附件控件(control参数为file)

[{"file_id": "xxx"}, {"file_id": "xxx"}]

明细控件

导出 "value"->"children"字段中的内容。数据的详细说明请参考企业微信API文档 https://developer.work.weixin.qq.com/document/path/91983#附10-明细控件(control参数为table)

[{"list": [{"id": "Text-15111111111", "title": [{"lang": "zh_CN", "text": "明细内文本控件"}], "value": {"text": "明细文本"}, "control": "Text"}]}]

假勤组件

导出 "value"->"vacation"字段中的内容。数据的详细说明请参考企业微信API文档 https://developer.work.weixin.qq.com/document/path/91983#附11-假勤组件-请假组件(control参数为vacation)

{"selector": {"type": "single", "options": [{"key": "3", "value": [{"lang": "zh_CN", "text": "病假"}]}], "exp_type": 0}, "attendance": {"type": 1, "date_range": {"type": "hour", "new_end": 1568368800, "new_begin": 1568077200, "new_duration": 291600}}}

假勤组件-出差/外出/加班组件

导出 "value"->"attendance"字段中的内容。数据的详细说明请参考企业微信API文档 https://developer.work.weixin.qq.com/document/path/91983#附12-假勤组件-出差外出加班组件(control参数为attendance)

{"type": 4, "date_range": {"type": "halfday", "new_end": 1599667199, "new_begin": 1599494400, "new_duration": 172800}, "slice_info": {"state": 1, "duration": 172800, "day_items": [{"daytime": 1599494400, "duration": 86400}, {"daytime": 1599580800, "duration": 86400}]}}

补卡组件

导出 "value"->"punch_correction"字段中的内容。数据的详细说明请参考企业微信API文档 https://developer.work.weixin.qq.com/document/path/91983#附13-补卡组件(control参数为punchcorrection)

{"time": 1699146000, "state": "上班-未打卡", "version": 1, "daymonthyear": 1699113600}

位置控件

导出 "value"->"location"字段中的内容。数据的详细说明请参考企业微信API文档 https://developer.work.weixin.qq.com/document/path/91983#附15-位置控件(control参数为location)

{"time": 1605690460, "title": "XX公司", "address": "成都高新区天府五街", "latitude": "30.547239", "longitude": "104.063291"}

关联审批单控件

导出 "value"->"related_approval"字段中的内容。数据的详细说明请参考企业微信API文档 https://developer.work.weixin.qq.com/document/path/91983#附16-关联审批单控件(control参数为relatedapproval)

[{"name": "小明", "sp_no": "202011180001", "sp_status": 1, "create_time": 1605690437, "template_names": [{"lang": "zh_CN", "text": "模板A"}, {"lang": "en", "text": ""}]}]

公式控件

导出 "value"->"formula"字段中的内容。数据的详细说明请参考企业微信API文档 https://developer.work.weixin.qq.com/document/path/91983#附17-公式控件(control参数为formula)

{"value": "5.0"}

说明文字控件

导出 "value"->"new_tips"字段中的内容。

{"tips_content": [{"lang": "zh_CN", "text": {"sub_text": [{"type": 1, "content": {"plain_text": {"content": "***温馨提示***"}}}]}}]}

除以上类型外的其它控件

导出整个"value"字段的内容。

4.4.4 查询审批数据的转存状态

您可以在"审批流程监控"查看审批数据的转存状态。

(1) 在"审批流程监控"中点击要查询的审批模板右侧的"浏览数据"按钮。

(2) 系统会在列表中显示审批数据的转存状态。

(3) 如果要重新转存审批数据,请先在目标数据源上删除已转存的数据,然后在上面的列表中勾选要重新转存的审批单,点击"重新转存选定的审批单"按钮即可。

4.5 在审批结束时执行指定的任务

EasySQLMAIL企业微信管理工具 可以在一个审批结束时执行您指定的任务。您可以在任务中对审批数据进行进一步处理,例如发送邮件通知、对审批数据进行分解和应用。

这里以"会议室"审批为例,在审批通过时,调用"发送会议通知给物业公司"任务向物业公司发送一个邮件,通知物业公司提前准备会议室。

(1) 在EasySQLMAIL中配置一个邮件任务,任务名称为"发送会议通知给物业公司"。

配置任务时注意要为任务添加一个名为 "spno_rec_id" 的变量,并且勾选变量的"允许从外部接口表中传入变量值"选项。

为任务添加一个名为 "spno_rec_id" 的变量

勾选变量的"允许从外部接口表中传入变量值"选项

(2) 为任务添加一个先决条件,确保只为"审批通过"(sp_status=2)的流程发送通知。

(3) 设置任务的正文模板。您可以在SQL语句中使用"get_wxsp_field_value_by_name"函数取得审批单中的基础字段或控件的内容。例如:

--从wxsp_sp_data中查询审批结果
SELECT Get_wxsp_field_value_by_name(
       --#[SPNO_REC_ID]#::int8表示以传递给任务的SPNO_REC_ID变量的值作为查询参数
       # [spno_rec_id] #:: int8,
       --要获取的基础字段或审批单控件的名称。
       '[std]sp_no',
       --要获取的值的语言类型,默认为zh_CN
       '') AS "审批编号",
       Get_wxsp_field_value_by_name(
       --#[SPNO_REC_ID]#::int8表示以传递给任务的SPNO_REC_ID变量的值作为查询参数
       # [spno_rec_id] #:: int8,
       --要获取的基础字段或审批单控件的名称。
       '会议主题',
       --要获取的值的语言类型,默认为zh_CN
       '') AS "会议主题",
       Get_wxsp_field_value_by_name(
       --#[SPNO_REC_ID]#::int8表示以传递给任务的SPNO_REC_ID变量的值作为查询参数
       # [spno_rec_id] #:: int8,
       --要获取的基础字段或审批单控件的名称。
       '预定的会议室',
       --要获取的值的语言类型,默认为zh_CN
       '') AS "预定的会议室",
       Get_wxsp_field_value_by_name(
       --#[SPNO_REC_ID]#::int8表示以传递给任务的SPNO_REC_ID变量的值作为查询参数
       # [spno_rec_id] #:: int8,
       --要获取的基础字段或审批单控件的名称。
       '预定时间',
       --要获取的值的语言类型,默认为zh_CN
       '') AS "预定时间",
       Get_wxsp_field_value_by_name(
       --#[SPNO_REC_ID]#::int8表示以传递给任务的SPNO_REC_ID变量的值作为查询参数
       # [spno_rec_id] #:: int8,
       --要获取的基础字段或审批单控件的名称。
       '参会人数',
       --要获取的值的语言类型,默认为zh_CN
       '') AS "参会人数"; 

任务的正文模板

(2) 在 EasySQLMAIL企业微信管理工具 的 "审批流程监控"配置界面中点击对应的审批模板,打开"审批流程监控配置"对话框,并在"审批结束时触发任务"文本框中输入配置好的任务的名称,然后点击"确定"。

(3) 配置保存后,以后此审批的流程结束时,系统将启动这个任务,向指定的邮箱发送邮件通知。

关于 get_wxsp_field_value_by_name 函数的说明

您可以在SQL查询中调用get_wxsp_field_value_by_name获得审批单的某个字段的内容。

此函数的参数说明如下:

spnoRecId: 要查询的审批数据的ID。

fieldName: 要查询的审批单字段或控件的名称。fieldName可以是一个审批控件的名称,例如"参会人数",也可以是一个基础字段的名称。

当fieldName是一个审批控件的名称时,函数返回此审批单中此控件的值。每种控件的返回内容不相同。具体返回内容请参见 获取审批控件的值

当fieldName是基础字段时,字段名称必须以"[std]"开头,且全部是小写。

lang: 获取多语种字段的值的时候,要获取哪种语言的内容。默认为"zh_CN"。

以下是一些调用get_wxsp_field_value_by_name函数的例子:

--获取审批单的"会议时间"控件的值
SELECT Get_wxsp_field_value_by_name(21, '会议时间', ''); 

--获取审批单的"申请时间"
SELECT Get_wxsp_field_value_by_name(21, '[std]apply_time', ''); 

--获取审批单的"完成时间"
SELECT Get_wxsp_field_value_by_name(21, '[std]approval_time', ''); 

以下是 基础字段 的名称及含义:

[std]sp_no

获得审批编号。

[std]corp_id

获得审批模板所属的企业ID。

[std]template_id

获得审批模板的模板ID。

[std]template_name

获得审批模板的名称。

[std]apply_time

获得审批流程的申请时间。

[std]approval_time

获得审批流程的完成时间。

[std]sp_status

获得审批流程的审批结果,即审批数据中的 "sp_status"字段。

根据企业微信API文档的解释,"sp_status"的具体含义如下:

1-审批中;2-已通过;3-已驳回;4-已撤销;6-通过后撤销;7-已删除;10-已支付

[std]applicant_user_id

获得审批申请人的企业微信用户ID。例如 "heyang"。

[std]applicant_party_id

获得审批申请人的部门ID。例如 "100"。

[std]sp_data

获得申请单的原始数据(JSON格式)。JSON数据的格式说明请参见企业微信API文档 https://developer.work.weixin.qq.com/document/path/91983

提示: EasySQLMAIL的"默认数据源"连接到EasySQLMAIL自带的PostgreSQL数据库。您可以在这个数据源上使用PostgreSQL的JSON函数查询审批数据。关于PostgreSQL的JSON函数的详细信息请访问PostgreSQL数据库的官方文档 https://www.postgresql.org/docs/14/functions-json.html