ポータル内の関連データの操作
関連データをポータルに表示する場合、関連レコードの値は、すべてユーザのアクセス権に応じて表示されます。これに対し、関連フィールドがポータルの形式で配置されていない場合は、最初の関連レコードの値のみが表示されます。
ポータルデータのソート
ポータル内の関連レコードをソートするには、[リレーションシップ編集] ダイアログボックスを使用します。リレーションシップの作成と変更を参照してください。[レコードのソート] が選択されており、ポータル内の関連フィールドのデータを変更した場合は、関連レコードが再評価されるたびにポータル内のレコードが再ソートされます。たとえば、レコードを検索して 1 つ前の画面に戻る、または照合フィールドの値を変更するたびにレコードが再ソートされます。(レコードをソートし直すタイミングを細かく制御するには、[ポータルの更新] スクリプトステップを使用します。)
[リレーションシップ編集] ダイアログボックスで指定したソート順よりも、[ポータル設定] ダイアログボックスで指定したソート順が優先されます。ポータルにもリレーションシップにもソート順を指定しない場合、関連レコードは作成順にポータルに表示されます。関連レコードを表示するためのポータルの作成を参照してください。
ポータル内のレコードのフィルタリング
レコードをフィルタリングすることにより、さまざまな関連レコードのセットをポータル内に表示できます。
- レイアウトモードで、ポータルをダブルクリックします。
- [ポータルレコードのフィルタ] を選択します。
- 表示するポータルレコードに対して真 (True) と評価される計算式を定義します。
たとえば、「請求書」レイアウトで、「品目」テーブルから「製品」レコードを表示するポータルを開いているとします。数量が 1 以上の製品だけを表示するには、「
If (品目::数量 < 1; 0; 1)
」という式を使用します。重要 集計フィールド、計算式、および検索条件の結果は、ポータル内のフィルタされたレコードだけではなく、関連レコード全体に基づきます。たとえば、フィルタされた一部のレコードを表示しているポータルで、ポータルの外にこれらのレコードを集計する「合計」集計フィールドがある場合は、集計フィールドは、表示されているレコードだけでなく、関連レコードすべての合計になります。フィルタされたポータルレコードのデータを集計フィールド、計算式、または検索条件に使用するには、ポータルレコードのフィルタリングに使用したのと同じ条件を使用する新しいリレーションシップを作成して、そのリレーションシップの関連フィールドを集計フィールド、計算式、または検索条件に使用します。
ポータル内のデータの集計
ポータルに表示される関連フィールドのデータを集計することができます。たとえば、すべての関連レコードの合計を取得できます。
そのためには、表示される関連レコードの元となるテーブル ([ポータル設定] ダイアログボックスに表示されるテーブル) に集計フィールドを配置します。それから、ポータルが含まれるレイアウト上に集計フィールドを配置します。
ポータルを使用してすべての売上を販売担当者別に表示するレイアウトに、売上総額を表示する集計フィールドを含める必要があるとします。
こうした簡単な例を使用してポータル内のデータを集計するには、次の操作を行います:
- 次のフィールドを持つ 2 つのテーブルを作成します:
- リレーションシップグラフで、2 つの「販売担当者 ID」フィールドの間にリレーションシップを作成します。
- レイアウトモードで、「販売」テーブルの 4 つのフィールドを「販売」レイアウトに追加します (自動的に追加されなかった場合)。「販売担当者」テーブルの 2 つのフィールドを「販売担当者」レイアウトに追加します。
- 「販売担当者」レイアウト上で、「販売」テーブルから関連レコードを表示するポータルを作成します。「販売」テーブルから関連フィールドである取引 ID、金額、売上総額をポータルに含めます。
「販売担当者」レイアウトの任意の場所に集計フィールド (売上::売上総額) を配置することもできます。レイアウト上のフィールドの配置と削除を参照してください。
- ブラウズモードに切り替えて、次のレコードを「販売」テーブルに追加します:
- 「販売担当者」レイアウトに切り替えて次のデータを追加します:
テーブル名 |
フィールド名 |
フィールドタイプ |
コメント |
販売 |
取引 ID |
テキスト |
主キー |
|
販売担当者 ID |
テキスト |
外部キー |
|
金額 |
数字 |
|
|
売上総額 |
集計 |
「金額」フィールドの合計を計算します。集計フィールドの定義を参照してください。 |
販売担当者 |
販売担当者 ID |
テキスト |
主キー |
|
名前 |
テキスト |
|
レコード番号 |
フィールド |
データ |
1 |
取引 ID |
T1 |
|
販売担当者 ID |
S1 |
|
金額 |
246.00 |
2 |
取引 ID |
T2 |
|
販売担当者 ID |
S2 |
|
金額 |
52.75 |
3 |
取引 ID |
T3 |
|
販売担当者 ID |
S1 |
|
金額 |
10.50 |
4 |
取引 ID |
T4 |
|
販売担当者 ID |
S2 |
|
金額 |
150.00 |
5 |
取引 ID |
T5 |
|
販売担当者 ID |
S1 |
|
金額 |
17.80 |
「売上総額」フィールドの値は自動的に入力されます。
レコード番号 |
フィールド |
データ |
1 |
販売担当者 ID |
S1 |
|
名前 |
斎藤 一朗 |
2 |
販売担当者 ID |
S2 |
|
名前 |
伊集院 肇 |
「販売」テーブルから関連する値が自動的にポータルの行に入力されて、販売担当者のすべての売上の合計が「売上総額」集計フィールドで計算されます。
メモ
- [ポータル設定] ダイアログボックスのポータルフィルタリングオプションとソートオプションは、現在のテーブルのレコードを表示するポータルには使用できません。一覧/詳細レイアウトのポータルの作成を参照してください。
- 1 つのリレーションシップのデータを同じページの複数のポータルに表示して、各ポータルに対して異なるソート順を使用することができます。
- レコードのフィルタは、セキュリティ上の理由ではなく、表示目的のみに使用されます。
- ポータルのフィルタ計算式の結果は関連テーブルの計算フィールドの結果と同じになります。
- ポータルレコードのフィールドはデータが変更されるたびに更新されますが、ポータルのフィルタはレコードがロードされるときにしか評価されません。レコードがロードされた後でポータルのフィルタリングを更新するには、[ポータルの更新] スクリプトステップを使用します。
- より複雑な集計に関しては、計算フィールドを使用して式を定義してください。計算フィールドの定義を参照してください。