0

此触发器从 Process Instance 对象中提取值,将它们存储在列表中,并更新自定义对象上的字段。问题是为了查看值,用户必须更新并保存记录。通常我会在流程实例对象上添加一个“更新后”触发器,但 Salesforce 不允许这样做。

任何帮助或建议将不胜感激。

在 Service_Request__c 上触发 update_Provisioner(更新前){

for(Service_Request__c sr:Trigger.new){

List <ProcessInstance> pi = [SELECT Id, CreatedDate from ProcessInstance where TargetObjectId = :sr.Id ORDER BY CreatedDate DESC limit 1];
List <ProcessInstanceStep> op = [SELECT Id, StepStatus, ActorId, OriginalActorId, CreatedDate FROM ProcessInstanceStep where ProcessInstanceId = :pi[0].Id ORDER BY CreatedDate DESC limit 1];


        if(op.size()>0){

        //System.debug('Hello'+sr.Provisioner__c+' '+op[0].StepStatus + ' '+ op[0].ActorId + ' ' +op[0].OriginalActorId + ' '+ op[0].CreatedDate);
        sr.Provisioner__c = op[0].ActorId;

          }       

}

}

4

1 回答 1

0

将 update_Provisioner 触发器更改为 After Update 事件。再次更新 trigger.new 列表,并通过静态标志停止循环。

像这样的东西:

trigger update_Provisioner on Service_Request__c (after update) {
    if(flag)
      return;
    flag=true;
    for(Service_Request__c sr:Trigger.new){

List <ProcessInstance> pi = [SELECT Id, CreatedDate from ProcessInstance where TargetObjectId = :sr.Id ORDER BY CreatedDate DESC limit 1];
List <ProcessInstanceStep> op = [SELECT Id, StepStatus, ActorId, OriginalActorId, CreatedDate FROM ProcessInstanceStep where ProcessInstanceId = :pi[0].Id ORDER BY CreatedDate DESC limit 1];


        if(op.size()>0){

        //System.debug('Hello'+sr.Provisioner__c+' '+op[0].StepStatus + ' '+ op[0].ActorId + ' ' +op[0].OriginalActorId + ' '+ op[0].CreatedDate);
        sr.Provisioner__c = op[0].ActorId;

          }       

}
update trigger.new;
}
于 2013-09-17T04:43:25.023 回答