2013-09-16 37 views
0

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

      }  

} 

}

+0

而不是触发这样做,你尝试过直接在多数民众赞成发起这个批准过程添加字段更新? –

回答

0

变化update_Provisioner触发更新事件之后。 再次更新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; 
} 
+0

当我更改触发器“AfterUpdate”时,我将无法修改调用对象的字段,即第14行“sr.Provisioner__c = op [0] .ActorId;”由于记录是只读的,因此会引发错误。 –

相关问题