登録データの一時保存

最終更新日: 2020年3月14日
R8 | R9

ここでは2つのアカウントを用意して説明します。

アカウントプリンシパル説明
admin業務管理者データの一時保存を行う
user1一般ユーザデータの検索を行う
  1. adminでログオンします。図1の画面にて、一時保存ボタンを用意しています。新規登録時、一時保存ボタンを押してデータを保存します。
    図1 「一時保存ボタン」を押す
  2. 「保存状態」という項目は自動設定されます。ここでは "一時保存" となっています。
    図2 一時保存状態
  3. 検索条件の「保存状態」は "通常保存" されたデータを検索するようになっているため、ここではデータが見つかりません。
    図3 通常保存されたデータの検索
  4. 検索条件の「保存状態」を "一時保存" にするとデータが見つかります。 ただし、この場合は自分(ログオンユーザ)が一時保存したデータのみが対象となります。他ユーザーによる一時保存データは検索されません。
    図4 一時保存されたデータの検索
    ログオンアカウントを user1 に切り替えると、検索できないことがわかります。
    図5 別のアカウントでは検索されない
  5. 一時保存されたデータを更新します。今度は「保存」ボタンを押下します。
    図6 「保存」ボタンを押下する
  6. データは "通常保存" となります。
    図7 通常保存状態
  7. 通常の検索処理でデータが見つかるようになります。
    図8 通常保存されたデータの検索(2)
    別のアカウントからも検索できるようになります。
    図9 アカウントuser1からの検索

定義方法

本機能は複数の設定を組み合わせて実現します。
上で説明したサンプルは次の二つのモデルから実現されています。

図10 サンプルアプリケーションのモデル

一時保存フラグモデル

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

図11 保存状態を表すコード

一時保存テストモデル

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

図12 一時保存テストモデルの定義

「一時保存」ボタンを用意する

(1)「画面 > その他 > Javaソースコードの設定」を開きます。

(2)「カスタマイズ用のクラスを出力する」を有効にします。

(3) 新規登録画面と更新画面にそれぞれ「一時保存」ボタンを用意します。

図13 一時保存ボタンを用意する

ポイントは、イベント名 "TemplateSave" の横にある拡張指定 [@method=insert] および [@method=update] です。これによって本ボタンは(従来の)「保存」「更新」と同じ役割を担うようになります。

ボタン名は任意です。イベント名は "TemplateSave" としてください。 大文字小文字は区別されます。
ボタンの表示位置は固定です。追加したオリジナルボタンは、右側に配置されます。

「保存状態」項目

「保存状態」項目は、本機能を制御するために用意したものです。はじめに初期値を設定します。

図14 「保存状態」項目の初期値

登録時および更新時の初期値は次のとおりです。

IF(EXACT(EVENT(),"TemplateSave"),1,2)

EVENT 関数は、オリジナルボタンのイベントを受け取ることができます。一時保存ボタン押下時は "1" を、そうでない場合は "2" をセットしています。これは図11におけるコード "一時保存" "通常保存" に対応しています。

検索画面表示時の初期値は "通常保存" のコード "2" をセットしています。

2

また、この項目は入力時に隠し項目としています。

図15 隠し項目の設定
実際の運用では、表示時も隠し項目とするとよいでしょう。

「作成者」項目の設定

「作成者」項目もまた、本機能を制御するために用意したものです。はじめに初期値を設定します。

検索値を設定することで、本項目の検索条件は入力された値に関わらず、ここで指定された値が用いられるようになります。

図16 作成者項目の検索初期値の設定
IF(${template_flag#id}==1,USERNAME(),null)

この式は、検索条件項目である「保存状態」の ID が 1、すなわち一時保存の場合にのみ USERNAME 関数の値である「ログオンアカウント」を設定するようになっています。一時保存の場合、自動的に自分のログオンアカウントで検索条件が絞込まれるようになります。

データベースへの SQL 検索時、WHERE 句にログオンアカウント名が付与されます。

この設定により、本項目は利用者による検索条件入力が無視されます。よって、本項目は検索時に非表示とします。

図17 「作成者」項目は検索時に隠し項目とする

確認画面を利用する場合

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

図18 一時保存ボタン

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

図19 確認画面に遷移する

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

図20 一時保存状態となっている。

定義方法

確認画面の設定

「画面 > 新規登録」で「確認画面を表示する」を有効にします。

図21 「確認画面を表示する」を有効にする

隠し項目「イベント」を用意する

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

図22 隠し項目「イベント」

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

図23 入力制御>隠し項目の設定
図24 出力制御>隠し項目の設定

式の設定

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

IF(
  OR(
    EXACT(EVENT(),"TemplateSave"),
    EXACT(EVENT(),"Confirm")
  ),
  EVENT(),
  Me()
)
図25 隠し項目イベントの式

「保存状態」項目の初期値

図14の式を次のように修正します。押下ボタンによって発生したイベントが"TemplateSave"か、または隠し項目 event に保持されていたイベントが"TemplateSave"のいずれかを考慮するようにします。

IF(
  OR(
    EXACT(EVENT(),"TemplateSave"),
    EXACT(${event}, "TemplateSave")
  )
  ,1
  ,2
)
図26 「保存状態」項目の初期値を変更する

ワークフローとの関係

ワークフローを設定したモデルに本設定を適用すると、他ユーザーによる一時保存データは検索されなくなります。ワークフローの申請をグループとしていたとき、グループに所属する他ユーザーから検索されない限り、ワークフローの「申請」ボタンを押すことはできません。このため、一時保存したデータはワークフローを開始しないという運用を行うことができます。

一時保存されたデータも登録者(自ユーザー)は検索できるため、登録者がワークフローの申請を行うことはできます。

設計上の注意点

この一時保存機能は、データベースへの登録処理を伴います。(他者に閲覧できないという条件を組み込むことで、運用での一時保存を実現しています。)

そのため必須チェックを指定した項目は、一時保存であっても必須となります。必須チエックはデータの論理的整合性を担保するため、データベースのテーブルに NOT NULL 制約を適用するためです。