返回

Salesforce终审时 - 校验字段/Comments必填Solution

后端

Salesforce审批流程是自动化和简化业务流程的重要工具。然而,在某些情况下,确保审批过程的完整性和问责制至关重要。一个常见的挑战是确保终审人在拒审或批准时填写审批意见。本文将提供两种解决方案:基于校验规则的解决方案和基于Apex触发器的解决方案,以强制执行此要求。

基于校验规则的解决方案

此解决方案使用校验规则来验证终审人是否在拒绝或批准时填写了审批意见。要创建校验规则,请执行以下步骤:

  1. 在“设置”中,导航到“对象和字段”选项卡。
  2. 选择“审批过程”对象。
  3. 单击“校验规则”选项卡。
  4. 单击“新建”。
  5. 为校验规则命名并提供。
  6. 在“条件表达式”字段中,输入以下公式:
NOT(
    ISBLANK(Status)
    && (
        Prior_Status = 'Approved'
        || Prior_Status = 'Rejected'
    )
    && ISBLANK(Comments)
)

此公式检查以下条件:

  • 审批状态 不为空(即终审人已做出决定)。
  • 之前的审批状态 为“已批准”或“已拒绝”。
  • 审批意见 为空(即终审人未填写意见)。

如果所有条件都为真,则校验规则失败,并且终审人将被阻止提交审批。

基于Apex触发器的解决方案

此解决方案使用Apex触发器在终审人提交审批时执行自定义逻辑。要创建Apex触发器,请执行以下步骤:

  1. 在“设置”中,导航到“开发”选项卡。
  2. 单击“触发器”选项卡。
  3. 单击“新建”。
  4. 为触发器命名并选择“审批过程”对象。
  5. 在“事件类型”字段中,选择“before update”。
  6. 在“Apex 代码”字段中,输入以下代码:
trigger ValidateCommentsOnFinalApproval on Approval_Process (before update) {

    // 获取所有即将更新的审批记录
    Set<Id> approvalIds = new Set<Id>();
    for (Approval_Process__c approval : Trigger.new) {
        approvalIds.add(approval.Id);
    }

    // 查询即将更新的审批记录的之前的状态
    Map<Id, Approval_Process__c> priorApprovals = new Map<Id, Approval_Process__c>();
    for (Approval_Process__c priorApproval : [SELECT Id, Status, Prior_Status FROM Approval_Process__c WHERE Id IN :approvalIds]) {
        priorApprovals.put(priorApproval.Id, priorApproval);
    }

    // 遍历即将更新的审批记录
    for (Approval_Process__c approval : Trigger.new) {

        // 检查终审人是否拒绝或批准了审批
        if (approval.Prior_Status != null && (approval.Prior_Status == 'Approved' || approval.Prior_Status == 'Rejected')) {

            // 检查终审人是否填写了审批意见
            if (approval.Comments == null || approval.Comments == '') {

                // 抛出异常以阻止提交审批
                approval.addError('终审人必须填写审批意见才能拒绝或批准审批。');
            }
        }
    }
}

此Apex触发器执行以下操作:

  • 获取所有即将更新的审批记录。
  • 查询这些记录的之前的审批状态。
  • 遍历这些记录,并检查终审人是否拒绝或批准了审批以及是否填写了审批意见。
  • 如果终审人未填写审批意见,则抛出异常以阻止提交审批。

这两种解决方案都有其优点和缺点。基于校验规则的解决方案简单易用,但它依赖于Salesforce的校验规则引擎,该引擎有时可能会出现性能问题。基于Apex触发器的解决方案更灵活且功能更强大,但它需要Apex编程知识,并且在更新时可能会影响性能。

最终,选择哪种解决方案取决于您的特定要求和技术能力。无论您选择哪种解决方案,都可以在Salesforce审批流程中强制要求终审人填写审批意见,从而确保审批过程的完整性和问责制。