更新后触发待处理的批准请求OriginalActorId

时间:2018-07-14 23:10:49

标签: triggers salesforce apex-code apex soql

以下触发器的构建是为了从批准流程列表中拉出最新的“分配给”用户(或OriginalActorId),Approval_started__c字段作为特定批准的初始提交操作被检查过程。

我遇到的问题是,以下system.debug语句未显示在上一个未决的批准请求中分配给​​用户的最新请求,而是显示了在用户单击提交以供批准之前分配给用户的最新请求,因此它跳过用户在单击“提交以进行批准”时单击“批准”和“初始提交操作未完成”步骤(由用户选择批准者)(待批准/拒绝)时用户执行的“批准请求已提交步骤”,并返回之前的旧请求。就在这些2之前。

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

有什么想法吗?谢谢。

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

Approval process List

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);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

在查询中,您将要查找最新的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 。您的查询看起来像这样:

error_t foo(int a,void ** bar)

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

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


每个步骤一个字段,默认为未选中:

enter image description here


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

enter image description here