Spring'16で追加されたSystem.ApprovalクラスのisLockedを試してみました。Apex内でレコードがロックされているか判定することができます。
public Boolean checkRecordLocked(Id recordId) { if (String.isNotEmpty(recordId)) { if (System.Approval.isLocked(recordId)) { return true; } } return false; }
レコードのロックとは承認申請中のこの状態です。
isLocked判定を利用すれば登録処理前にロックされているか判定したりできます。
isLocked判定の注意点として、プロセスの自動化設定で「Apex でのレコードのロックおよびロック解除を有効化」にチェックをつけておく必要があります。
これがないとisLocked判定実行時に『Apex approval lock/unlock api preference not enabled.』エラーが発生してしまいます。
System.ApprovalのisLockedはこんな感じです。
ちなみにisLockedの引数がNULLの場合はExceptionエラーになりました。
事前にIDの存在判定を入れておいた方が良さそうでした。