本文へ移動
Wagby11
マニュアルのグループを選ぶ

WAGBY11 MANUAL / 09

式で初期値を求める

同じモデルの初期値を参照し、日付の加算・条件分岐・文字列連結を行う方法を説明します。

最終更新日:

初期値の小目次へ

1. このページで伝える機能

単に決まった値を入れるだけでなく、貸出区分に応じた返却予定日や、利用者名を含むメモを初期表示できます。業務上よく使う候補をまとめて用意できます。

2. Wagby11で実現できること

貸出区分がNORMALなら貸出日から7日後、EXPRESSなら3日後を返却予定日にします。登録画面のNORMALでは、貸出日から7日後が入っています。

貸出日の初期値を使って返却予定日を求めた画面。
貸出日の初期値を使って返却予定日を求めた画面。

受付メモは「受付:」と受付利用者名をつないだ値で始めます。利用者名も式で得た初期値なので、関連する項目の評価順に従って組み立てられます。

受付利用者名の初期値から受付メモを組み立てた画面。
受付利用者名の初期値から受付メモを組み立てた画面。

これらは画面を開いたときの候補です。表示後に貸出日や貸出区分を変更しても、返却予定日は自動で再計算しません。図では貸出日だけを変更したため、返却予定日は元の候補のままです。変更した値を保存時・表示時に計算し直したい場合は、計算・導出項目として別に指示します。

貸出日を変更しても、初期表示済みの返却予定日はそのままです。
貸出日を変更しても、初期表示済みの返却予定日はそのままです。

2.1 初期値で使える式と関数

初期値は、計算・導出項目と共通の式の文法と関数を使います。四則演算、比較、and・or・!、条件 ? 値1 : 値2による分岐を組み合わせられます。関数名は#で始め、項目は同じモデルのname_enを使います。関数名と項目名の大文字・小文字は区別します。

初期値に使う目的式の例動作
数値・丸め#round(unitPrice * quantity, 2)数量と単価から、小数第2位まで四捨五入した初期候補を求めます。
日付・日時#moveDay(#today(), 7)フォームを初期化した日の7日後を求めます。
文字列#concatenate("受付:", requesterName)利用者名などを含む初期メモを組み立てます。
利用者情報#userId()、#userName()、#userEmail()ログオン利用者のID・名前・メールを取得します。
未設定値#nvl(subject, "件名未入力")未設定なら代わりの値を使います。
休日・営業日#workday(#today(), 3)休日サービスを構成した環境で、3営業日後を求めます。

上記は代表例です。全関数の引数・結果・丸め・nullの規則は関数と式の仕様:使える関数の一覧、演算子や型の扱いは式の書き方で説明します。整数同士の割り算は整数になり、小数桁を指定する場合は#divideを使います。

2.2 初期値の用途ごとの制約と評価順序

用途参照できる値と評価順序
新規登録・更新の初期値同じモデルの利用可能なスカラー項目・単一参照キーを参照できます。固定初期値を先に設定し、式は依存先から順に評価します。
コピー登録の初期値コピー後の値のスナップショットを参照します。別のコピー初期値の計算結果や固定値の適用結果は読みません。
検索条件の初期値ほかの項目は参照できません。#today()や#userId()など、ほかの項目を使わずに求める式を指定します。休日関数も利用できます。

自己参照・循環参照や、customer.nameのように他モデルへたどる記法、複数参照・関連データなどは使えません。URLパラメータから引き継ぐ親キーなどは初期値の評価後に設定されるため、初期値式からその引き継ぎ値は参照できません。

式はサーバーでフォームを初期化するときに評価し、利用者が入力を変えても再評価しません。登録API・アップロード・バッチを含むすべての保存経路に必要な計算は保存時に計算するで設定します。共通の上限と使用できない記法は式に書けないことと上限を参照してください。

3. AIへの指示例

最小限の指示例

通常の貸出は7日後、短期の貸出は3日後を返却予定日にしてください。

AIは貸出区分の値、日付の起点、初期表示だけにするか入力変更へ連動させるかを類推して補います。どの日から何日後か、後から入力を変えたときの動作も伝えると曖昧さが減ります。

より詳細な指示例

EquipmentLoan.loanTypeは登録初期値NORMAL、loanDateは#today()にしてください。returnDateの登録初期値は、loanTypeがEXPRESSならloanDateから3日後、それ以外は7日後を求める式にします。requesterNameの初期値を使い、receptionMemoには「受付:」と名前を連結してください。今回は画面初期表示時だけ求め、入力変更には連動させません。初期表示と、貸出日を変えても返却予定日が変わらないことを確認してください。
既存のモデル・項目・主キー・データ・権限を保持し、Wagby11のguide・referenceを確認してください。新規モデルには自動採番の主キーと予約属性version、必要なG_ADMINのCRUD権限を用意します。メニューと一般利用者向け操作マニュアルを更新し、設計情報の検証・コード生成・起動後に画面と保存結果を確認してください。

4. 編集されるAppSchemaの例

以下は関連する定義の抜粋です。構文を覚えなくても、どのタイミングで何を初期表示したいかをAIへ伝えられます。

ui:
  fields:
    - name_en: loanType
      initial:
        create: { value: NORMAL }
    - name_en: loanDate
      initial:
        create: { expression: '#today()' }
    - name_en: returnDate
      initial:
        create:
          expression: 'loanType == "EXPRESS" ? #moveDay(loanDate, 3) : #moveDay(loanDate, 7)'
          description: 貸出区分に応じた返却予定日の候補。
    - name_en: requesterName
      initial:
        create: { expression: '#userName()' }
    - name_en: receptionMemo
      initial:
        create:
          expression: '#concatenate("受付:", requesterName)'

登録・更新の初期値では同じモデルの項目を参照できます。固定値を先に設定し、式は参照の依存順に評価します。自己参照・循環参照は使えません。検索初期値で他の検索項目を参照する指定はできません。

5. 参考資料

guide:初期値
designer/docs/appschema/html/guide/05-input-control/01-initial-value.html
reference:ui(画面初期値)
designer/docs/appschema/html/reference/10-ui.html
reference:式言語
designer/docs/appschema/html/reference/16-expression-language.html
reference:利用できる関数
designer/docs/appschema/html/reference/17-expression-functions.html