2013-09-16 34 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;」由於記錄是隻讀的,因此會引發錯誤。 –

相關問題