salesforce 제로 기초 개발 입문 학습 (9) 승인 프로 세 스 소개

이 글 을 읽 기 전에 한 선배 가 정리 한 Approval Process 에 관 한 조작 을 참고 할 수 있다.다음은 참고 링크 입 니 다.
http://www.cnblogs.com/mingmingruyuedlut/p/3765777.html
Approval Process 는 프로 세 스 승인 에 사 용 됩 니 다. Apex 는 주로 Approval 네 임 스페이스 와 System 네 임 스페이스 의 Approval 클래스 와 관련 됩 니 다.
그 중에서 Approval 네 임 스페이스 의 주요 유형 은 다음 과 같다.
  • ProcessRequest
  • ProcessSubmitRequest
  • ProcessWorkitemRequest
  • ProcessResult

  • 다음은 이러한 종류의 역할 과 사용 방식 을 코드 를 통 해 소개 합 니 다. 이 코드 는 공식 PDF 문서 의 sample 에 복사 되 어 있 습 니 다.
     1 public class TestApproval { 
     2     void submitAndProcessApprovalRequest() { 
     3         // Insert an account 
     4         Account a = new Account(Name='Test',annualRevenue=100.0); 
     5         insert a; 
     6         User user1 = [SELECT Id FROM User WHERE Alias='SomeStandardUser']; 
     7         // Create an approval request for the account 
     8         Approval.ProcessSubmitRequest req1 = new Approval.ProcessSubmitRequest(); 
     9         req1.setComments('Submitting request for approval.'); 
    10         req1.setObjectId(a.id); 
    11         // Submit on behalf of a specific submitter 
    12         req1.setSubmitterId(user1.Id); 
    13         // Submit the record to specific process and skip the criteria evaluation 
    14         req1.setProcessDefinitionNameOrId('PTO_Request_Process'); 
    15         req1.setSkipEntryCriteria(true); // Submit the approval request for the account 
    16         Approval.ProcessResult result = Approval.process(req1); // Verify the result 
    17         System.assert(result.isSuccess()); 
    18         System.assertEquals( 'Pending', result.getInstanceStatus(), 'Instance Status'+result.getInstanceStatus()); 
    19         // Approve the submitted request 
    20         // First, get the ID of the newly created item 
    21         List<Id> newWorkItemIds = result.getNewWorkitemIds(); 
    22         // Instantiate the new ProcessWorkitemRequest object and populate it 
    23         Approval.ProcessWorkitemRequest req2 = new Approval.ProcessWorkitemRequest(); 
    24         req2.setComments('Approving request.'); 
    25         req2.setAction('Approve'); 
    26         req2.setNextApproverIds(new Id[] {UserInfo.getUserId()}); 
    27         // Use the ID from the newly created item to specify the item to be worked
    28         req2.setWorkitemId(newWorkItemIds.get(0)); 
    29         // Submit the request for approval 
    30         Approval.ProcessResult result2 = Approval.process(req2); 
    31         // Verify the results 
    32         System.assert(result2.isSuccess(), 'Result Status:'+result2.isSuccess()); 
    33         System.assertEquals( 'Approved', result2.getInstanceStatus(), 'Instance Status'+result2.getInstanceStatus());
    34     }
    35 }

     주: 이 코드 는 직접 실행 할 수 없습니다. 이 코드 를 실행 하려 면 위의 링크 를 참조 하여 Account 표 로 'PTO' 라 고 설정 하 십시오.Request_Process 의 심사 비준 절차.
    상기 코드 를 통 해 다음 과 같은 종류의 사용 을 더욱 잘 이해 할 수 있다.
    1) 프로 세 스 요청
    ProcessRequest 클래스 는 ProcessSubmitRequest 와 ProcessWorkitem Request 클래스 의 부모 클래스 로 서 네 가지 내장 방법 을 제공 합 니 다.
  • setComments (comments): 이 방법 은 심사 비준 제출 시의 심사 의견 을 설정 하 는 데 사 용 됩 니 다.
  • setNextApproverIds (ID [] nextApproverIds): 이 방법 은 절차 승인 의 다음 단계 승인 자 에 게 사 용 됩 니 다.
  • getComments (): 이 방법 은 심사 비준 의견 을 얻 는 데 사 용 됩 니 다.
  • getNextApproverIds (): 승인 자로 서 의 사용자 ID 목록 을 되 돌려 줍 니 다.

  • ProcessRequest 패 키 징 방법 은 가장 기본 적 인 절차 승인 방법 이 며, 이 방법 들 은 모두 실례 화 방법 입 니 다.일반적으로 새 절차 의 심사 비준 유형 은 이러한 것 을 예화 하 는 것 이 아니 라 그 가 대응 하 는 두 가지 유형 을 예화 하 는 것 이다.
    2) 프로 세 스 제출 요청
    이 를 통 해 프로 세 스 승인 에 기록 하 는 방법 을 제출 합 니 다. ProcessRequest 류 를 계승 하 는 방법 을 제외 하고 다음 과 같은 방법 입 니 다.
  • setObjectId (recordId): 지정 한 sObject 의 기록 ID 를 프로 세 스 승인 에 설정 합 니 다.상기 sample 에서 insert 하나의 Account 는 Account 를 심사 절차 에 제출 할 수 있 습 니 다. 예 를 들 어 annualRevenue 필드 가 몇 개 를 초과 하 는 경우 절차 심사
  • 를 수행 할 수 있 습 니 다.
  • setProcessDefinitionNameOrId (nameOrId): 프로 세 스 가 정의 하 는 이름 이나 번 호 를 설정 하고 특정한 심사 절차 에 제출 합 니 다.salesforce 에서 setup - > Create - > Workflow & Approvals - > Approval Processes 를 통 해 지정 한 심사 절 차 를 설정 할 수 있 습 니 다. null 로 설정 하면 표준 절차 에 따라 기본 값 은 null 입 니 다.
  • setSkipEntry Criteria (skipEntry Criteria): skipEntry Criterial 이 true 로 설정 되면 제출 을 요청 하면 setProcessDefinitionNameOrId 프로 세 스 설정 에서 의 검증 을 건 너 뛰 고 nameOrId 가 지정 되 지 않 으 면 이 인 자 를 자동 으로 무시 하고 표준 흐름 순서에 따라 갑 니 다.false 로 설정 하거나 이 방법 을 사용 하지 않 으 면 검사 건 너 뛰 지 않 습 니 다.
  • set Submitted Id (userId): 프로 세 스 승인 에 제출 해 야 할 기록 을 설정 하 는 사용자 ID 입 니 다. 이 사용 자 는 프로 세 스 정의 설정 에서 프로 세 스 를 제출 할 수 있 는 사용자 여야 합 니 다. 설정 하지 않 으 면 현재 사용 자 를 기본 으로 합 니 다.
  • 상응하는 get 방법.

  • 이런 방법 으로 설명 을 통 해 알 수 있 듯 이 이런 것 은 주로 하나의 데 이 터 를 절차 심사 비준 에 제출 할 때 사용 하 는 것 이다.
    3) ProcessWorkitem 요청
    이 는 하나의 기록 이 절차 승인 에 제출 된 후에 하나의 절차 승인 요 구 를 처리 하 는 데 사 용 됩 니 다. 처리 상 태 는 Approve, Reject, Removed 세 가지 상황 으로 나 눌 수 있 습 니 다.ProcessRequest 클래스 를 계승 하 는 방법 을 제외 하고 다음 과 같은 방법 을 사용 합 니 다.
  • setAction (actionType): action 형식 을 설정 하여 프로 세 스 승인 요청 을 처리 합 니 다. 그 중에서 actionType 은 다음 값 으로 할 수 있 습 니 다. Approve, Reject, Removed. 그 중에서 시스템 관리자 만 Removed 를 지정 할 수 있 습 니 다.
  • setWorkitemId (id): 승인 되 거나 거부 되 거나 제거 되 는 승인 요청 번 호 를 설정 합 니 다. 이 번 호 는 ProcessInstanceWorkitem 표 에서 가 져 올 수 있 습 니 다. 이 표 는 salesforce 자체 가 봉 인 된 표 입 니 다.
  • 상응하는 get 방법.

  • 이런 방법 을 통 해 알 수 있 듯 이 이런 것 은 절차 에 제출 된 심사 비준 기록 을 심사 처리 할 때 사용 하 는 유형 이다.
    4) 프로 세 스 결과
    절차 심사 비준 에 기록 을 제출 한 후, 이러한 절 차 를 통 해 심사 비준 의 결과 상 태 를 처리 할 수 있다.
    이러한 방법 은 다음 과 같다.
  • getEntityId (): 프로 세 스 승인 에 제출 된 기록 의 번 호 를 가 져 옵 니 다. ProcessInstanceWorkitem 표 에서 볼 수 있 습 니 다. 이 표 에 대응 하 는 필드 TargetObjectId 값 입 니 다.
  • getErrors (): 오류 가 발생 하면 데이터베이스 대상 의 오류 코드 와 설명 을 포함 한 배열 을 되 돌려 줍 니 다.
  • getInstanceId (): 프로 세 스 승인 번 호 를 가 져 옵 니 다. ProcessInstanceWorkitem 표 에서 볼 수 있 습 니 다. 이 표 에 대응 하 는 필드 Id 값 입 니 다.
  • getInstanceStatus (): 절차 승인 을 받 은 상 태 는 주로 다음 과 같은 몇 가지 가 있 습 니 다. Approved, Reject, Removed, Pending;
  • getNewWorkitemIds (): 프로 세 스 승인 에 제출 된 새 항목 의 ID 를 가 져 오 면 0 개 또는 1 개의 프로 세 스 승인 이 가능 합 니 다.ProcessInstanceWorkitem 표 에서 이 표 에 대응 하 는 Id 필드 값 을 볼 수 있 습 니 다.
  • isSuccess (): 승인 절차 가 정상적으로 제출 되면 true 로 돌아 가 고 그렇지 않 으 면 false 로 돌아 갑 니 다.

  • 5) 승인
    Approval 은 System 네 임 스페이스 에 위치 하고 상기 1 - 4 는 모두 Approval 네 임 스페이스 에 있 습 니 다.
    Approval 류 는 여러 가지 방법 을 포함 하고 있 습 니 다. 여 기 는 주로 process () 방법 을 소개 합 니 다. 다른 방법 은 공식 PDF 문 서 를 직접 보 세 요.이 방법 은 새로운 요청 을 제출 하거나 이미 존재 하 는 승인 기록 을 통과 하거나 거부 하 는 역할 을 합 니 다.이 방법 은 ProcessRequest 라 는 항목 이 있 습 니 다. ProcessSubmitRequest 나 ProcessWorkitemRequest 류 를 매개 변수 로 지정 하여 다양한 기능 을 수행 할 수 있 습 니 다. 이 방법 은 Approval. ProcessResult 대상 으로 되 돌아 갑 니 다.승인 절차 에 기록 되 어 있 는 프로 세 스 인 스 턴 스 워 크 아 이 템 표 와 프로 세 스 인 스 턴 스 표를 정확하게 제출 하면 이 기록 에 대한 정보 기록 이 추 가 됩 니 다.
    요약: ProcessRequest 는 승인 요청 의 부모 클래스 로 서 두 가지 중요 한 방법 을 봉 인 했 습 니 다. 확 장 된 두 개의 하위 클래스 는 각각 다른 기능 을 실 현 했 습 니 다. ProcessSubmitRequest 는 하나의 기록 을 승인 절차 에 전달 하고 ProcessWorkitem Request 는 승인 절차 에 이미 존재 하 는 기록 을 실 현 했 습 니 다.
    상기 예 를 조정 하여 선배 의 그런 방식 (위 에 링크) 을 통 해 조작 하지 않도록 한다.
    위 에서 소개 한 바 와 같이 setProcessDefinitionNameOrId () 방법 파 라미 터 를 null 로 설정 하거나 이 방법 을 호출 하지 않 을 때 상기 방법 을 실행 하지 않 을 수 있 습 니 다. 부모 클래스 의 setNextApproverIds () 방법 을 정의 하여 승인 사용자 번 호 를 설정 하면 승인 흐름 을 통과 할 수 있 습 니 다. 따라서 상기 코드 는 다음 과 같은 변형 을 해서 바로 통과 할 수 있 습 니 다.
     1 public class TestApproval { 
     2     public void submitAndProcessApprovalRequest() { 
     3         // Insert an account 
     4         Account a = new Account(Name='Test',annualRevenue=100.0); 
     5         insert a; 
     6         User user1 = [SELECT Id FROM User WHERE Alias='zero']; 
     7         // Create an approval request for the account 
     8         Approval.ProcessSubmitRequest req1 = new Approval.ProcessSubmitRequest(); 
     9         req1.setComments('Submitting request for approval.'); 
    10         req1.setObjectId(a.id); 
    11         // Submit on behalf of a specific submitter 
    12         req1.setSubmitterId(user1.Id);
    13         ID[] ids = new ID[]{user1.Id}; 
    14         req1.setNextApproverIds(ids);
    15         // Submit the record to specific process and skip the criteria evaluation 
    16         //req1.setProcessDefinitionNameOrId('PTO_Request_Process'); 
    17         req1.setSkipEntryCriteria(true); // Submit the approval request for the account 
    18         Approval.ProcessResult result = Approval.process(req1); // Verify the result 
    19         System.assert(result.isSuccess()); 
    20         System.assertEquals( 'Pending', result.getInstanceStatus(), 'Instance Status'+result.getInstanceStatus()); 
    21         // Approve the submitted request 
    22         // First, get the ID of the newly created item 
    23         List<Id> newWorkItemIds = result.getNewWorkitemIds(); 
    24         // Instantiate the new ProcessWorkitemRequest object and populate it 
    25         Approval.ProcessWorkitemRequest req2 = new Approval.ProcessWorkitemRequest(); 
    26         req2.setComments('Approving request.'); 
    27         req2.setAction('Approve'); 
    28         req2.setNextApproverIds(new Id[] {UserInfo.getUserId()}); 
    29         // Use the ID from the newly created item to specify the item to be worked
    30         req2.setWorkitemId(newWorkItemIds.get(0)); 
    31         // Submit the request for approval 
    32         Approval.ProcessResult result2 = Approval.process(req2); 
    33         // Verify the results 
    34         System.assert(result2.isSuccess(), 'Result Status:'+result2.isSuccess()); 
    35         System.assertEquals( 'Approved', result2.getInstanceStatus(), 'Instance Status'+result2.getInstanceStatus());
    36     }
    37 }

    setup - > Create - > Workflow & Approvals - > Approval Processes 에서 사용자 정의 승인 절 차 를 새로 만 드 는 것 이 좋 습 니 다. 프로그램 에서 다음 승인 자 를 동적 으로 설정 하 는 것 이 좋 습 니 다. 구체 적 인 프로젝트 요 구 를 보 세 요.두 가지 차이 점 에 대해 저 는 깊이 이해 하지 못 했 습 니 다. 더 잘 알 고 싶 은 것 은 관련 포럼 이나 공식 문 서 를 조회 할 수 있 습 니 다.내용 에 잘못된 부분 이 있 으 면 비판 하고 지적 해 주세요. 모 르 는 부분 이 있 으 면 댓 글로 연락 주세요.

    좋은 웹페이지 즐겨찾기