登録データの一時保存
最終更新日: 2020年3月14日
R8 | R9
例
ここでは2つのアカウントを用意して説明します。
アカウント | プリンシパル | 説明 |
---|---|---|
admin | 業務管理者 | データの一時保存を行う |
user1 | 一般ユーザ | データの検索を行う |
- adminでログオンします。図1の画面にて、一時保存ボタンを用意しています。新規登録時、一時保存ボタンを押してデータを保存します。
図1 「一時保存ボタン」を押す - 「保存状態」という項目は自動設定されます。ここでは "一時保存" となっています。
図2 一時保存状態 - 検索条件の「保存状態」は "通常保存" されたデータを検索するようになっているため、ここではデータが見つかりません。
図3 通常保存されたデータの検索 - 検索条件の「保存状態」を "一時保存" にするとデータが見つかります。
ただし、この場合は自分(ログオンユーザ)が一時保存したデータのみが対象となります。他ユーザーによる一時保存データは検索されません。
図4 一時保存されたデータの検索 図5 別のアカウントでは検索されない - 一時保存されたデータを更新します。今度は「保存」ボタンを押下します。
図6 「保存」ボタンを押下する - データは "通常保存" となります。
図7 通常保存状態 - 通常の検索処理でデータが見つかるようになります。
図8 通常保存されたデータの検索(2) 図9 アカウントuser1からの検索
定義方法
本機能は複数の設定を組み合わせて実現します。
上で説明したサンプルは次の二つのモデルから実現されています。

一時保存フラグモデル
「一時保存フラグ」モデルは、状態を示す選択肢モデルです。ここでは図11のように "一時保存" と "通常保存" を用意します。

一時保存テストモデル
テストで用いたモデルを図12に示します。「保存状態」項目は、図11の一時保存フラグモデルを参照します。

「一時保存」ボタンを用意する
(1)「画面 > その他 > Javaソースコードの設定」を開きます。
(2)「カスタマイズ用のクラスを出力する」を有効にします。
(3) 新規登録画面と更新画面にそれぞれ「一時保存」ボタンを用意します。

ポイントは、イベント名 "TemplateSave" の横にある拡張指定 [@method=insert] および [@method=update] です。これによって本ボタンは(従来の)「保存」「更新」と同じ役割を担うようになります。
「保存状態」項目
「保存状態」項目は、本機能を制御するために用意したものです。はじめに初期値を設定します。

登録時および更新時の初期値は次のとおりです。
IF(EXACT(EVENT(),"TemplateSave"),1,2)
EVENT 関数は、オリジナルボタンのイベントを受け取ることができます。一時保存ボタン押下時は "1" を、そうでない場合は "2" をセットしています。これは図11におけるコード "一時保存" "通常保存" に対応しています。
検索画面表示時の初期値は "通常保存" のコード "2" をセットしています。
2
また、この項目は入力時に隠し項目としています。

「作成者」項目の設定
「作成者」項目もまた、本機能を制御するために用意したものです。はじめに初期値を設定します。
検索値を設定することで、本項目の検索条件は入力された値に関わらず、ここで指定された値が用いられるようになります。

IF(${template_flag#id}==1,USERNAME(),null)
この式は、検索条件項目である「保存状態」の ID が 1、すなわち一時保存の場合にのみ USERNAME 関数の値である「ログオンアカウント」を設定するようになっています。一時保存の場合、自動的に自分のログオンアカウントで検索条件が絞込まれるようになります。
この設定により、本項目は利用者による検索条件入力が無視されます。よって、本項目は検索時に非表示とします。

確認画面を利用する場合
例
登録確認画面を用意した例を紹介します。「一時保存」ボタンを押下します。

確認画面に遷移します。ここで「登録する」ボタンを押下します。

保存状態が "一時保存" となっていることがわかります。

定義方法
確認画面の設定
「画面 > 新規登録」で「確認画面を表示する」を有効にします。

隠し項目「イベント」を用意する
ボタンのイベントを保持する隠し項目「イベント」を用意します。確認画面を経由した場合、その前のボタンで「一時保存」ボタンを押したかどうかを記録することが目的です。

この項目は入力時、出力時それぞれ隠し項目とします。(図23,図24)


式の設定
ボタン押下により発生したイベントが「一時保存」("TemplateSave") または「確認」("Confirm") のいずれかであればそれを保持します。それ以外の場合は、現在保存している値を保持するために Me() を使います。
IF(
OR(
EXACT(EVENT(),"TemplateSave"),
EXACT(EVENT(),"Confirm")
),
EVENT(),
Me()
)

「保存状態」項目の初期値
図14の式を次のように修正します。押下ボタンによって発生したイベントが"TemplateSave"か、または隠し項目 event に保持されていたイベントが"TemplateSave"のいずれかを考慮するようにします。
IF(
OR(
EXACT(EVENT(),"TemplateSave"),
EXACT(${event}, "TemplateSave")
)
,1
,2
)

ワークフローとの関係
ワークフローを設定したモデルに本設定を適用すると、他ユーザーによる一時保存データは検索されなくなります。ワークフローの申請をグループとしていたとき、グループに所属する他ユーザーから検索されない限り、ワークフローの「申請」ボタンを押すことはできません。このため、一時保存したデータはワークフローを開始しないという運用を行うことができます。
設計上の注意点
この一時保存機能は、データベースへの登録処理を伴います。(他者に閲覧できないという条件を組み込むことで、運用での一時保存を実現しています。)
そのため必須チェックを指定した項目は、一時保存であっても必須となります。必須チエックはデータの論理的整合性を担保するため、データベースのテーブルに NOT NULL 制約を適用するためです。