function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
vibrationvibration 

How to insert process instance and processinstanceworkitem object in salesforce?

How to insert process instance and processinstanceworkitem object in salesforce?

 

plz send .

 

my sample code:

 

public void ApprovalRequest()    {             

           ProcessInstance tempProcessInstance = new          ProcessInstance(Status='Pending',TargetObjectId='800U0000000HXxoIAG');        

                 insert tempProcessInstance ;                                            

  }          

 

error:

Insert failed. First exception on row 0; first error: REQUIRED_FIELD_MISSING, Required fields are missing: [Process Definition, Current Node]: [Process Definition, Current Node] .

 

process instance object cant have a Process Definition and Current Node. 

Chrs85Chrs85

Hi Folks,

 

I'm also facing the same problem with insert ProcessInstanceWorkItem:

 

My sample code:

ProcessInstanceWorkItem newPiwi= new ProcessInstanceWorkItem();
newPiwi.ProcessInstanceId = oldPiwi.ProcessInstanceId;
newPiwi.OriginalActorId = oldPiwi.ActorId;
newPiwi.ActorId = myObject.DelegateId__c;

insert newPiwi;

 

 

error:

Required fields are missing: [Current Node, Reminders Sent]

 

Do anyone have any idea on this error? please kindly advise...

Thanks in advance.

 

Rishab Wali 3Rishab Wali 3

Hi vibration/Chrs85 ,

For process Instance work Item , you have to call the approval process manually by apex.

For example : 
Approval.ProcessSubmitRequest req = new Approval.ProcessSubmitRequest();
        req.setSkipEntryCriteria(false);
        req.setSubmitterId(User.Id); // Submitter User Id
        req.setObjectId(record.Id); // Object Id
        
        ProcessInstance processInstances = [SELECT Id,TargetObjectId,Status FROM ProcessInstance WHERE TargetObjectId = :record.id
                                            LIMIT 1];
        System.debug('Process Instance is -------' + processInstances);
                
        List<ProcessInstanceWorkitem> workItems = [SELECT Id,ProcessInstance.TargetObjectId,ProcessInstanceId FROM ProcessInstanceWorkitem 
                                                   WHERE ProcessInstance.TargetObjectId = :record.Id];
        
        System.debug('WorkItems are --------' + workItems);

This way you will get the process instance work items without inserting manually and you will not the error.

Please mark as the best answer if this solves the issue.

Thanks & Regards

Rishab Wali