NextDOB.jpg 今までと全く毛色の違う投稿ですが、、、
 情報処理なんて全く知らない私立文系人間にもわかるロータスノーツデータベース設計入門、というかメモ。
 その筋の人が見たら恐ろしく稚拙な内容でしょうが、、、
シンプルな設計にするため、下記のような設計にしました。

■データベースはひとつだけ
■フォームは3種類だけ
・稟議書フォーマット
・配信先マスタ(承認後のメール配信先を指定)
・承認ルートマスタ(申請者ごとにフローを設定)
■一つのフォームに全部格納する
・稟議書フォーマットに、現状の承認状況を全部格納します。
・非表示を最大限に活用しました。

■データベースの動きの概要

<承認関連フィールド>
・文書状態フィールド(未申請・申請中・非承認・承認)、第1〜第n承認者までの承認者名フィールド、第1〜第n申請者までの承認フィールド(未承認・非承認・承認)、この3種のフィールドが最低限の構成です。必要に応じて各々の日付やコメント欄も付加すれば良いでしょう。
・承認フィールドはすべて「編集可能」な状態で「稟議書フォーマット」内に格納されています(常に非表示になっている)。申請や承認/非承認といったアクションを起こすたびに、随時これらのフィールドが書き換えられてゆきます。

<承認権限者の判断>
・ユーザーが承認権限を保有しているか否かは、申請者をキーに承認ルートマスタを参照(@DbLookUp)して判断します。
・承認アクションは、フォーム内のボタンを押すことで行いますが、このボタンはあらかじめ全承認段階分用意されています。(例えば第1承認者〜第10承認者までの段階があれば10個の「承認」ボタンがある)
・当該段階の承認権限保有者以外がフォームを開いたときには、ボタンが非表示になります。
・承認ボタンを押したタイミングで、承認フィールドを書き換え、次の承認権限保有者へメールが飛びます。

<申請>
・申請後に稟議内容が書き換えられないように、表示用の計算結果を使用しました。
・申請者が「申請」ボタンを押したタイミングで、文書状態フィールドが「未申請(デフォルト)」から「申請中」に書き換えられ、第1承認権限保有者にメールが飛びます。
・文書状態フィールドが「未申請」以外の場合は、編集用フィールドは非表示になり、その代わりに表示用フィールドが表示されます。この表示用フィールドは、編集用フィールドの値を参照した「表示用の計算結果」フィールドです。
※この場合、主文はテキストでなければいけません。リッチテキストは参照できないためです。@Abstractを使用すれば文字の一部は参照できますが、あまりお勧めできません。

<承認後のコピー>
・以上のような方法を採った場合、最終承認された後に当該文書をコピーすると承認状況も引き継がれてしまいます。つまり、承認ルートを通っていないのに最初から「承認済み」の文書ができてしまうわけです。
・この解決には、エージェントを使用しました。タイミングを「文書が追加されたとき」にし、承認関連フィールドをすべてヌル値に変更するアクションを設定しました。

以上