this本身不直接追加意见,而是通过其指向的上下文对象(如审批单据或流程实例)获取审批人、意见等信息,再结构化追加到日志链条,并需校验字段、注意执行时机与权限。

在工作流审批中,this 关键字本身并不直接“追加意见到日志链条”,它的作用是引用当前执行上下文中的对象(比如当前审批节点实例、当前处理的审批单据或当前用户操作的上下文)。能否用 this 实现意见追加,取决于你使用的开发平台或框架(如钉钉宜搭、泛微 e-cology、自研 Java/Spring 流程引擎、或低代码平台脚本环境)。关键不在于 this 本身,而在于它所指向的对象是否具备访问审批人、意见、日志链的能力。
确认 this 指向的上下文对象是否支持获取审批意见
多数流程引擎会在审批节点脚本中将当前审批实例作为 this 传入。例如:
- 若
this是一个审批单据实体(如ApprovalForm),通常有this.approver、this.comments、this.currentStep等属性; - 若
this是流程上下文(如Execution或DelegateExecution),可通过this.getVariable("approverComment")获取当前意见; - 若平台不暴露原生对象,
this可能只是空对象或仅含基础方法,此时需改用平台提供的全局 API(如context.getApprover())。
从 this 中提取当前审批人及意见内容
安全提取前务必校验字段是否存在,避免空指针:
-
检查审批人信息:
const approver = this.approver || this.currentUser || this.getApprover?.(); -
提取意见文本:
const comment = (this.comment || this.comments?.[this.comments.length - 1] || this.getComment?.())?.trim(); - 若意见为空,建议跳过追加或写入默认值(如“无意见”),避免日志链出现 null 条目。
将意见结构化后追加到全局日志链条
日志链条通常是数组(如 approvalLog),需以统一格式追加新条目:
- 构造标准日志项:
{ time: new Date().toISOString(), user: approver?.name, userId: approver?.id, comment: comment || "无意见", step: this.stepName || "未知环节" }; - 追加方式取决于存储位置:
- 若日志存于表单字段:
this.approvalLog = [...(this.approvalLog || []), logItem]; - 若日志存在流程变量:
this.setVariable("approvalLog", [...(this.getVariable("approvalLog") || []), logItem]); - 若调用后端服务记录:
api.post("/log/append", { formId: this.id, log: logItem });
- 若日志存于表单字段:
注意权限与执行时机
该逻辑必须在审批动作提交后、流程进入下一节点前执行,否则可能读不到最新意见:
- 在“审批通过/驳回”按钮绑定的脚本末尾执行,而非表单加载时;
- 确保当前脚本运行身份有写权限(例如不能用访客账号修改主表单字段);
- 避免在并行审批分支中重复追加——可加锁标识(如
this.isLogAppended = true)或依赖唯一 stepId 去重。











