Salesforce標準機能のひとつ、承認申請の履歴情報を取得できるSOQLクエリの実行方法についてです。
承認履歴の情報は以下のオブジェクトに格納されています。
このうち、ProcessInstanceWorkitemとProcessInstanceStepの項目はProcessInstanceHistoryでまとめて取得できるみたいです。
ProcessInstanceHistoryの情報はProcessInstanceオブジェクトのサブクエリでまとめて取得できます。
SELECT Id, (SELECT Id, StepStatus, Comments FROM StepsAndWorkitems) FROM ProcessInstance
ProcessInstanceNodeオブジェクトには日付情報などより詳細な情報が登録されています。このオブジェクトはサブクエリなどで取得できません。ProcessInstanceオブジェクトのIDなどを持っているのでそちらで紐付けます。
サンプルクエリです。
gist.github.com
これで一通りの必要な情報を取得できると思います。
ProcessInstanceHistoryの『OriginalActorId』は割当先、『ActorId』は承認者となっているみたいです。
ユーザIDがセットされていますが、クエリでユーザ名を紐つけることはできないみたいで、別にユーザ情報をMap変数か何かに準備して紐つける必要がありそうです。
システム管理者権限で強制的に再度承認申請を行ったりして次のようになっている場合は、ProcessInstanceレコードが2件存在している状態です。(確認していませんが却下→承認申請も同様だと思います。)
承認履歴とSOQLクエリの情報はこんな感じです。