Note: This release is in preview. Features described here don’t become generally available until the latest general availability date that Salesforce announces for this release. Before then, and where features are noted as beta, pilot, or developer preview, we can’t guarantee general availability within any particular time frame or at all. Make your purchase decisions only on the basis of generally available products and features.
Apex Approval Processing Example
The following sample code initially submits a record for approval, then approves the request. This example assumes that a pre-existing approval process on Account exists and is valid for the Account record created.
1public class TestApproval {
2 void submitAndProcessApprovalRequest() {
3 // Insert an account
4 Account a = new Account(Name='Test',annualRevenue=100.0);
5 insert a;
6
7 User user1 = [SELECT Id FROM User WHERE Alias='SomeStandardUser'];
8
9 // Create an approval request for the account
10 Approval.ProcessSubmitRequest req1 =
11 new Approval.ProcessSubmitRequest();
12 req1.setComments('Submitting request for approval.');
13 req1.setObjectId(a.id);
14
15 // Submit on behalf of a specific submitter
16 req1.setSubmitterId(user1.Id);
17
18 // Submit the record to the existing process named PTO_Request_Process
19 req1.setProcessDefinitionNameOrId('PTO_Request_Process');
20
21 // Skip the criteria evaluation for the specified process
22 req1.setSkipEntryCriteria(true);
23
24 // Submit the approval request for the account
25 Approval.ProcessResult result = Approval.process(req1);
26
27 // Verify the result
28 System.assert(result.isSuccess());
29
30 System.assertEquals(
31 'Pending', result.getInstanceStatus(),
32 'Instance Status'+result.getInstanceStatus());
33
34 // Approve the submitted request
35 // First, get the ID of the newly created item
36 List<Id> newWorkItemIds = result.getNewWorkitemIds();
37
38 // Instantiate the new ProcessWorkitemRequest object and populate it
39 Approval.ProcessWorkitemRequest req2 =
40 new Approval.ProcessWorkitemRequest();
41 req2.setComments('Approving request.');
42 req2.setAction('Approve');
43 req2.setNextApproverIds(new Id[] {UserInfo.getUserId()});
44
45 // Use the ID from the newly created item to specify the item to be worked
46 req2.setWorkitemId(newWorkItemIds.get(0));
47
48 // Submit the request for approval
49 Approval.ProcessResult result2 = Approval.process(req2);
50
51 // Verify the results
52 System.assert(result2.isSuccess(), 'Result Status:'+result2.isSuccess());
53
54 System.assertEquals(
55 'Approved', result2.getInstanceStatus(),
56 'Instance Status'+result2.getInstanceStatus());
57 }
58}