http://blog.flect.co.jp/salesforce/2010/09/apex-d1a3.html
http://vaindespair.blogspot.jp/2011/04/blog-post_1451.html
http://www.terrasky.co.jp/blog/2015/150218_001402.php
//ワークフロー更新
private boolean updateProcess(){
try{
// プロセスの作成
Approval.ProcessSubmitRequest psr = new Approval.ProcessSubmitRequest();
// 申請するオブジェクトの設定
psr.setObjectId(app.id);
//次の承認者の設定(自動割当の場合はnull)
psr.setNextApproverIds(new Id[] {UserInfo.getUserId()});
// プロセス実行
Approval.ProcessResult submitResult = Approval.process(psr);
system.debug(submitResult.getInstanceStatus() +'submitResult.isSuccess()'+submitResult.isSuccess());
if(!submitResult.isSuccess()){
string message ='';
for(DataBase.Error item : submitResult.getErrors()){
message = message + item + ' ';
}
ApexPages.addMessage(new ApexPages.message(ApexPages.severity.Warning, message));
return false;
}
// (承認申請すると、ProcessInstanceWorkitemオブジェクトに
// レコードが作成される)
List<id> newWorkItemIds = submitResult.getNewWorkitemIds();
// プロセスの作成
Approval.ProcessWorkitemRequest request = new Approval.ProcessWorkitemRequest();
// 承認するProcessInstanceWorkitemオブジェクトのIDの設定
request.setAction('Approve');
request.setNextApproverIds(new Id[]{UserInfo.getUserId()});
request.setWorkitemId(newWorkItemIds.get(0));
Approval.ProcessResult result = Approval.process(request);
if(result.isSuccess()) {
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.CONFIRM, '承認に成功しました.'));
} else {
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, '承認に失敗しました.'));
}
return true;
}catch(Exception e){
ApexPages.addMessage(
new ApexPages.Message(ApexPages.Severity.ERROR, '承認プロセスが存在しないため、申請できません。'));
system.debug(e);
return false;
}
}