上司が、申請書類等(企画書類なども)を眺めて、良ければ承認、悪ければ承認を拒否して、全員承認されたら、次の作業に入るという、承認のワークフローについてのお話。
このワークフローの実装方法というのは、一般的(汎用的)に作成することが可能で、以下のように行います。
(1)ワークフローの流れを定義した、「承認フローテーブル」を作成します
ある人が、ある申請書を作成したら、何番目に誰が承認するということを記述した、「承認フローテーブル」を作成します。項目は、以下のとおり
申請者ID 承認者ID 申請書種別 順位 承認種別
承認種別とは、同順位の人が、1人でも承認すればOKなのか、全員承認しないといけないのか(ただし、承認順は、同順位内だったら、だれから承認してもOK)をしめします。
(2)申請書を作成したら、「承認フローテーブル」を検索し、
必要な承認者を、「申請承認者テーブル」にセットします
申請書が作成されたら、その申請書の申請書種別と、申請者を元に「承認フローテーブル」を検索し、承認が必要な人を割り出し、その結果を、「申請承認者テーブル」にセットします。「申請承認者テーブル」の項目は、以下のとおり。
申請者ID 承認者ID 申請書種別 申請書ID 順位 承認種別 承認状況 0:未承認、1:承認 2:拒否
このとき、順位-1で、承認者を申請者にしたレコードを追加しておくと、
承認拒否された場合、次の承認順位-1にすることで、申請者に戻ります。
(3)申請書にステータスという項目を追加、次の承認順位を入れます。
申請時は、次に承認してもらう人の承認順位は1なので、ステータスに1を入れます。
(4)承認・拒否したら、「申請承認者テーブル」を更新します。
その内容に応じて、ステータスに次の承認順位をセットします。
まず、承認したら、「申請承認者テーブル」の承認状況を1に、
拒否したら、承認状況を2にセットします。
次に、申請書のステータスについて、
拒否の場合は、申請者に戻るように、ステータスをー1にします。
承認の場合、承認種別をみて、
全員承認なのに、自分が承認してもまだ未承認の人がいれば
ステータスは、そのままで、抜けます
全員承認で、全員承認した場合、
あるいは、1人でも承認すればいい場合
ステータスを1上げます。
その1上げた状態で「申請承認者テーブル」を検索して、
該当者がいなければ、すべての承認が終わったことになるので、
ステータスを、承認終了のステータスにします。
承認終了のステータスは、0にしたり、99とか、ある特定の数字にしたり、イロイロあると思います。
(5)こうすると、今承認しなければいけない人は、
申請書のステータス=申請承認者テーブルの順位
でわかります。
終了していれば、承認終了のステータスになりますし、
承認拒否の場合、-1です。
なお、承認が拒否され、再登録する場合、「申請承認者テーブル」も、過去のものをクリアし、(2)からやり直すのが普通だと思います。