Sam*_*Sam 7 triggers salesforce soql apex-code apex
下面的触发器用于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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在您的查询中,您将希望找到最新的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
Run Code Online (Sandbox Code Playgroud)
这里同样重要的是,为了触发此触发器,您需要对记录本身执行更新。默认情况下,如果没有字段更新操作,则仅对流程实例相关记录进行更改,而不对正在批准的记录进行更改。
如果您为希望触发触发器的每个步骤创建单独的复选框字段和相应的字段更新操作,则您应该在每个步骤后开始看到触发器触发。
每个步骤一个字段,默认为未选中:
每一步都会更新一个字段以选中复选框,以便触发器在相关对象上触发。如果批准过程可以多次发生,您还希望在初始提交时将复选框重置为未选中状态: