【问题标题】:After Update Trigger pending Approval request OriginalActorId更新后触发待批准请求 OriginalActorId
【发布时间】:2018-07-14 23:10:49
【问题描述】:

下面的触发器用于从审批流程列表中提取最新的“分配给”用户(或OriginalActorId),Approval_started__c 字段被检查为来自特定审批流程的初始提交操作。

我遇到的问题是,下面的 system.debug 语句没有显示在最后一个待处理的批准请求中分配给​​用户的最新请求,而是显示在用户单击提交以待批准之前分配给用户的最新请求,所以它跳过用户单击提交以供批准时所做的“批准请求提交步骤”和等待批准/拒绝的初始提交操作待处理步骤(用户选择批准者)并返回旧请求就在这 2 个之前。

我的目标是提取“分配给”用户或OriginalActorId 值的最新待处理请求。

有什么想法吗?谢谢。

这是批准流程列表的屏幕截图,黑色是我在调试日志行中使用此触发器获取的值,蓝色是预期值。

trigger Assigned2testTrigger on LLC_BI__Product_Package__c(after update) {

    list < LLC_BI__Product_Package__c > listpp = new list < LLC_BI__Product_Package__c > ();
    for (LLC_BI__Product_Package__c pp: trigger.new) {
        If(!checkRecursive.SetOfIDs.contains(pp.Id)) {


            if (pp.Approval_started__c == true) {


            system.debug('---------> My ProcessInstance           ' + string.valueof([Select Id, (Select TargetObjectId, SystemModstamp, StepStatus, RemindersSent, ProcessInstanceId, OriginalActorId, IsPending, IsDeleted, Id, CreatedDate, CreatedById, Comments, ActorId From ProcessSteps order by SystemModstamp desc) from LLC_BI__Product_Package__c where Id =: pp.id].ProcessSteps[0].OriginalActorId));
            }
            checkRecursive.SetOfIDs.add(pp.Id);
        }
    }
}

【问题讨论】:

    标签: triggers salesforce apex-code apex soql


    【解决方案1】:

    在您的查询中,您将要查找最新的ProcessInstance,然后是最新的关联ProcessInstanceStep。您的查询将如下所示:

    SELECT Id
         , SystemModStamp
         , Status
         , (SELECT SystemModstamp
                 , StepStatus
                 , ProcessInstanceId
                 , OriginalActorId
                 , Id
                 , CreatedDate
                 , CreatedById
                 , Comments
                 , ActorId
            From Steps
            ORDER BY SystemModstamp DESC)
    FROM ProcessInstance
    WHERE TargetObjectId = :pp.Id
    ORDER BY SystemModStamp DESC
    

    这里同样重要的是,为了触发此触发器,您需要对记录本身执行更新。默认情况下,如果没有字段更新操作,则仅对流程实例相关记录进行更改,而不是对正在批准的记录进行更改。

    如果您为希望触发触发器的每个步骤创建单独的复选框字段和相应的字段更新操作,您应该开始看到触发器在每个步骤后触发。


    每一步一个字段,默认不勾选:


    为每个步骤更新一个字段以选中复选框,以便触发器在相关对象上触发。如果批准过程可能发生多次,您还希望初始提交将复选框重置为未选中:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-13
      • 2022-01-23
      • 1970-01-01
      • 2020-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多