前回の投稿から大分間が空いてしまいましたが、「ゼロからの Aras Innovator」の第14回をお届けしたいと思います。
今回はリレーションシップの設定方法についてです。
詳細画面の下半分にタブを設けるための方法と思って頂いて結構です。
なお、このリレーションシップですが、大別すると以下の3タイプを作ることが可能です。
- 参照先ありのリレーションシップ(通常のリレーションシップ)
- 参照先無しのリレーションシップ(NULLリレーションシップ)
- タブ内にフォームを表示するなど、タブ機能だけを使うために用意するダミーのリレーションシップ
今回はこの内、1) のみを取り扱います。
リレーションシップのデータ構造
例として、下図のようにリレーションシップタブ内に3行のデータがある場合を考えます。
これらは、Aras内では以下のようなデータ構造で管理されます。
ポイントは、
- 設定は「リレーションシップ タイプ 」と「リレーションシップ アイテムタイプ 」の2つで行う(前者を作ると後者が自動生成されます)。
- 「リレーションシップ アイテムタイプ 」は、言ってしまうと単なるアイテムタイプ(自動生成されるシステムプロパティが異なったりはしますが)。独自のプロパティやフォーム等を設定することも可能。
- 親子関係のデータは「リレーションシップ アイテムタイプ 」のアイテム(インスタンス)として管理される。
といったところです。
中でも、名前の紛らわしい「リレーションシップ タイプ 」と「リレーションシップ アイテムタイプ 」の2つで設定を行うという点にご注意ください。
リレーションシップ タイプ の設定
では、その名前の紛らわしい2つをどうやって作るのかについて見ていきたいと思います。
親のアイテムタイプが入口となります。
- 親にしたいアイテムタイプの画面を編集モードで開く。
- 「タブビュー設定」欄を設定。
- タブ表示(タブビュー): アイテム詳細画面を開いた際、画面の下部にタブ欄を表示
- タブ非表示(Tabs Off): 画面の下部にタブ欄は表示しない(= ユーザには見せない)
- タブ最大化(Tabs Max): タブ欄を最大化した状態で表示
- タブ最小化(Tabs Min): タブ欄を最小化した状態で表示
- 「リレーションシップタイプ」タブを選択する。
- タブ内で「新規リレーションシップ」アイコン(= 行追加アイコン)をクリックし、検索ダイアログで子にしたいアイテムタイプを検索して選択。
- リレーションシップ名称とタブラベルを入力。
- アイテムタイプを保存。
これだけで、親アイテムタイプのアイテム詳細画面を開いた際に、(ステップ 2) で「タブ表示」を選択していれば)画面下部にタブが表示されるようになります。
なお、ステップ 4) 及び 5) で追加・編集した行こそが、実は「リレーションシップ タイプ 」そのものとなります。この行を選択して右クリックし、「”リレーションシップタイプ” を表示」(ビュー “リレーションシップタイプ”)を選ぶと、ちゃんと「リレーションシップ タイプ 」の詳細画面が開くことからも、その点が確認できるのではないかと思います。
この「リレーションシップ タイプ 」では、主に親子関係の振る舞いに関する設定と、詳細画面上のタブに関する設定の2つを行います。
よくいじる項目は以下の通り、それほど多くはありません。
- チェックすると、このタブは表示されなくなります(= 裏データになります)。
- リレーションシップ数(= 行数)の許容最小値。
- リレーションシップ数(= 行数)の許容最大値。
- 参照先アイテムの世代が上がった際に、参照を最新世代の方に付け替えるかどうか。
- 参照先アイテムのプロパティを、リレーションシップグリッド上のどこに表示させるか。リレーションシップアイテムのプロパティと混在させるのか、左右どちらかに寄せるのか。
- 行追加の際、既存アイテムをピックアップする操作のみを許可。
- 行追加の際、既存アイテムのピックアップではなく、その場で参照先アイテムを新規登録する操作のみを許可。
- 行追加の際、既存アイテムのピックアップと、その場での参照先アイテムの新規登録、両方を許可。
- 参照先無しの行を禁止するかどうか。 通常はチェックを付けます。
- その場で参照先アイテムを新規登録する際に、ちゃんと詳細画面を開いて登録させるかどうか。チェックされていない場合は、グリッド上で入力していくことになります。
- タブ内に、通常のリレーションシップグリッドではなく、特定のフォームやWebページを表示するための設定を行う場所。これをうまく使うことで、親アイテムのプロパティを画面上部のフォームにすべて収めるのではなく、タブ内に小分けにすることも可能になります。
リレーションシップ アイテムタイプ の設定
「リレーションシップ タイプ 」を作成すると、自動的に同名の「リレーションシップ アイテムタイプ 」が作成されます。
この「リレーションシップ アイテムタイプ 」では、リレーションシップ アイテム のデータ構造や振る舞い(プロパティや画面、パーミッションなど)を設定します。
「リレーションシップ アイテムタイプ 」は単なるアイテムタイプですので、TOCの「アイテムタイプ」から検索してアクセスすることになります。
繰り返します。 単なるアイテムタイプです。
なので、やることは通常のアイテムタイプと同じです。プロパティやビュー(フォーム)などを設定します。ここからさらにリレーションシップを付けることもできたりします。
なお、通常のアイテムタイプとは異なる点として、「パーミッションの継承」があります。
これにチェックが付いている場合、リレーションシップアイテムのアクセス権として、親アイテムのそれが継承適用されます。言い換えると、親アイテムの詳細画面を開ける人は、リレーションシップグリッド内の各行も参照できるし、親アイテムを編集できる人は、グリッド内の各行(のリレーションシップアイテムのプロパティ)も編集できるということです。
チェックを外す場合は、通常のアイテムタイプと同様に新規登録権限やパーミッションの設定を行います。これにより、親アイテムの詳細画面は開けるけれどタブ内のグリッドには何も表示されない人や、画面上部のプロパティは編集できるけれどタブ内の編集はできない人などを生じさせることができます。
リレーションシップか、Item型プロパティか
親アイテムタイプ「A」と子アイテムタイプ「B」との間に「1:n」の関連を持たせたい場合、何も考えず「A」から「B」へのリレーションシップを設定しても悪くはないのですが、採り得る方法として実はもう一つあることは是非覚えておいてください。
その方法とは、「B」側に「A」を参照するような「Item型プロパティ」(= データタイプを「Item」とし、データソースに「A」を設定)を用意する、というものです。
以下のような違いがあります。
総じてリレーションシップの方が柔軟ではあるのですが、是非うまく使い分けて頂ければと思います。
久し振りでなかなか筆が進みませんでしたが、今回は以上です。
今回、「参照先のアイテムが世代アップした場合に、最新世代の方に参照を付け替えるのかどうか」 = リレーションシップの振る舞いについては説明しておりませんので、次回はこの辺りを詳しくご紹介したいと思います。是非ご期待ください。
それでは、また次回。
(アラスジャパン 宮内一也)