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

WAGBY11 MANUAL / 04

参照を複数段たどって値を取得する

案件から顧客・会社・親組織へ参照をたどり、会社名や電話番号などを取得する方法を説明します。

最終更新日:

モデル間の関係と参照の小目次へ

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

顧客を選んだとき、その顧客の会社名・電話番号や、さらに先の親組織名を取得できます。多段の参照経路を指定することで、モデルごとに異なる参照キーへ切り替えながら値をたどります。

例えば、案件が顧客を参照し、その顧客が会社を、会社が親組織を参照している場合です。利用者は顧客を一度選ぶだけで、関連する会社や親組織の情報を確認できます。基本のルックアップはルックアップで名称や単価を取得するを参照してください。

2. Wagby11で実現できること

2.1 顧客の会社と親組織をたどる

この例では、案件に選んだ顧客から会社へ進み、会社の親組織へさらに進みます。会社と親組織は同じ「取引先組織」モデルに登録し、「親組織」という参照で結び付けます。

取得の順序たどる参照データの例
出発点案件の顧客顧客ID C001:みなと商事 営業窓口
会社へ進む顧客の会社組織ID ORG100:みなと商事
親組織へ進む会社の親組織組織ID ORG000:東都グループ

顧客IDをそのまま会社のIDとして使うのではなく、顧客が持つ会社の参照キーへ切り替えます。さらに親組織へ進む場合は、会社が持つ親組織の参照キーを使います。

2.2 顧客の選択に合わせて値を取得する

「多段参照 → 案件検索」から新規登録を開き、顧客を選びます。顧客名は直接の参照先から、会社名・会社電話番号は会社を経由して、親組織名はさらに親組織を経由して取得します。

顧客のみなと商事 営業窓口を選び、会社名・会社電話番号・親組織名を表示した案件登録画面
顧客を選び、会社名・会社電話番号と親組織名をまとめて確認します。

顧客を別の会社の窓口へ選び直すと、その顧客の参照経路で値を取り直します。会社が異なっていても同じ親組織に所属する場合は、会社名や電話番号は変わり、親組織名は同じになります。

顧客を青葉工業 調達窓口へ変更し、会社名と電話番号が切り替わった案件登録画面
顧客の変更に合わせて会社の情報を取得し直します。

2.3 保存後も現在の参照先の値を表示する

この例の顧客名・会社名・会社電話番号・親組織名は、DBへ保存しない表示用の項目です。案件には顧客の参照キーを保存し、詳細画面や一覧を表示するときに、その時点の経路で値を取得します。

保存した案件の詳細で顧客・会社名・会社電話番号・親組織名を確認した画面
保存後の詳細画面でも、顧客から会社・親組織をたどった値を確認できます。

2.4 経路・保存方法・権限を確認する

  • 経由する各項目は、その段のモデルにある単一参照(referenceまたはfk)です。通常の文字列や複数参照、DB非保存の参照キーは経由できません。
  • 途中の参照キーが空の場合、取得値は空になります。この例のようなDB非保存項目は、途中や最後のレコードが存在しない場合も空になります。
  • 登録・更新画面では、経由する各モデルの詳細情報を使います。各モデルへの参照権限と、中間のキー・取得項目を読み取れることを確認します。
  • 値をDBへ保存する構成では、標準処理は登録時と最初の顧客キーが変わったときに取得します。同じ顧客のまま会社や親組織の対応が変わっても、保存済みの値は自動更新しません。現在値を表示したいのか、取得時点の値を保存したいのかをAIへ伝えます。

AppSchemaでは参照経路をlookup.viaで指定します。これは詳細画面の関連一覧などで使うviaとは別の設定です。また、同じ参照キーで別モデルから値を取るlookup.entityと、空でないviaは併用しません。

取得した値そのものを保存する場合と、最終取得先のキーを保存して現在値を表示する場合の違いは、ルックアップの値保存とキー保存で説明します。

3. AIへの指示例

最小限の指示例

案件で顧客を選ぶと、その顧客の会社名・電話番号と、会社の親組織名を表示してください。

AIは顧客と会社の関係、親組織への参照、項目名、保存するか表示用にするかなどを、既存の定義と業務の説明から類推して補います。現在の情報を表示したい場合や、取得時点の値を残したい場合は具体的に伝えます。この短い指示だけで、次の詳細例と同じモデル構成・保存方法になるとは限りません。

より詳細な指示例

Wagby11のguideと必要なreferenceを確認し、多段の参照を使う案件管理を追加してください。
・取引先組織LookupOrganizationは、組織ID・組織名・電話番号と、同じモデルを参照する親組織を持たせてください。
・取引先顧客LookupCustomerは、顧客ID・顧客名と、取引先組織を参照する会社を持たせてください。
・多段参照案件LookupProjectは、案件ID・件名と、取引先顧客を参照する顧客を持たせてください。
・案件の顧客から会社の参照キーをたどり、会社名と会社電話番号を表示してください。会社の親組織をさらにたどって親組織名も表示してください。
・これらの取得項目はDB非保存の表示用とし、途中の会社名をDB保存しなくても経路をたどれる構成にしてください。
・会社名・会社電話番号はlookup.via: [companyId]、親組織名はlookup.via: [companyId, parentId]で取得してください。
・案件の登録・更新画面では、顧客を選び直すと取得値が切り替わるようにしてください。
・G_ADMINに必要な操作を許可し、「多段参照」メニューから案件・顧客・組織を開けるようにしてください。
・既存モデルやデータを保持し、同名の定義がある場合は上書きせずに対応を確認してください。
設計情報の検証・コード生成・必要なビルド後、REST APIとWeb UIを再起動してください。
親組織、会社、顧客の順で確認用データを用意し、顧客の選択・選び直し・案件保存後の詳細と一覧で取得値を確認してください。
操作マニュアルも用意し、変更したファイルと確認結果を説明してください。

4. 編集されるAppSchemaの例

利用者は、どの参照をたどって何を取得したいかをAIへ伝えられます。以下は今回のモデル定義からの抜粋です。主キー、固定ID、権限、検索・一覧、画面やメニューなど、モデル全体の設定は省略しています。

会社が親組織を参照する

designer/repository/appschema/LookupOrganization.yamlの項目です。

entity:
  name: 取引先組織
  name_en: LookupOrganization
  type: M
  attributes:
    - { name: 組織ID, name_en: organizationId, type: string, length: 20, pk: true }
    - { name: 組織名, name_en: organizationName, type: string, length: 100 }
    - { name: 電話番号, name_en: phone, type: string, length: 30 }
    - name: 親組織
      name_en: parentId
      type: reference
      fk: { entity: LookupOrganization, field: organizationId }

顧客が会社を参照する

designer/repository/appschema/LookupCustomer.yamlの抜粋です。顧客の会社名はDB非保存です。

- name: 会社
  name_en: companyId
  type: reference
  fk: { entity: LookupOrganization, field: organizationId }
- name: 会社名
  name_en: companyName
  type: reference-lookup
  lookup: { source: companyId, field: organizationName }
  transient: true

案件から参照キーを切り替えてたどる

designer/repository/appschema/LookupProject.yamlの抜粋です。

- name: 顧客
  name_en: customerId
  type: reference
  fk: { entity: LookupCustomer, field: customerId }
- name: 会社名
  name_en: companyName
  type: reference-lookup
  lookup: { source: customerId, via: [companyId], field: organizationName }
  transient: true
- name: 会社電話番号
  name_en: companyPhone
  type: reference-lookup
  lookup: { source: customerId, via: [companyId], field: phone }
  transient: true
- name: 親組織名
  name_en: parentOrganizationName
  type: reference-lookup
  lookup: { source: customerId, via: [companyId, parentId], field: organizationName }
  transient: true

sourceは案件内の出発点、viaは経由する参照項目の配列、fieldは最後に取得するDB保存項目です。viaはモデル名や表示用の会社名ではなく、次のモデルへ進む参照項目名を順番に指定します。

5. 参考資料

guide:ルックアップ
designer/docs/appschema/html/guide/08-rules/06-reference-lookup.html
guide:エンティティ属性タイプ
designer/docs/appschema/html/guide/03-model/02-fields.html
reference:entity
designer/docs/appschema/html/reference/06-entity.html