以下触发器的构建是为了从批准流程列表中拉出最新的“分配给”用户(或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);
}
}
}
答案 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)
这里重要的是,为了触发此触发器,您需要对记录本身进行更新。默认情况下,如果没有字段更新操作,则仅对与流程实例相关的记录进行更改,而不对正在批准的记录进行更改。
如果您为希望触发触发器的每个步骤创建了单独的复选框字段,并且相应的字段更新了操作,则应该在每个步骤之后开始查看触发触发器。
每个步骤一个字段,默认为未选中:
每个步骤都会更新一个字段,以选中该复选框,以便触发器在相关对象上触发。如果批准过程可以多次进行,那么您还希望初始提交将复选框重置为未选中: