responses.Reload
概要¶
サーバスクリプトで指定した項目の再読み込みを行うメソッドです。
構文¶
パラメータ¶
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
| type | string | ○ | 再読み込みを行う項目の領域を指定します。 |
| id | string | ○ | 再読み込みを行う項目を指定します。 |
使用例¶
以下の例では、サイトID: 123456の記録テーブルのレコードを取得し、そのレコード情報(レコードID、分類A)をもとに一覧画面のフィルタにある分類Jの選択肢一覧を作成して再読み込みします。
JavaScript¶
if (context.Action === 'index') {
const records = items.Get(123456);
for (let record of records) {
columns.ClassJ.AddChoiceHash(record.ResultId, record.ClassA);
}
responses.Reload('Filter', 'ClassJ');
}
サンプルコード¶
Note
コード内の【 ... 】は適宜修正してください。
1. 地域のフィルタを選ぶと、取引先のフィルタの選択肢をその地域の取引先にする
案件管理の一覧で、地域のフィルタを選ぶと、取引先のフィルタの選択肢を、取引先マスタにあるその地域の取引先に絞ります。地域を外すと、全件に戻ります。
実務での使いどころ¶
取引先や担当者のように選択肢が多い項目でフィルタするとき、先に地域や部署で絞ってから選べます。選択肢一覧の項目連携(ColumnFilterExpressions)は編集画面の選択肢を絞る機能で、一覧のフィルタでは連動しません。JSON形式でリンクした項目は、フィルタに選択肢が表示されません。
事前準備¶
1:「取引先マスタ」テーブル(記録テーブル)で、以下の項目を有効化してください。
| 項目コード | 内容 |
|---|---|
| タイトル(Title) | 取引先名 |
| 分類A(ClassA) | 地域。選択肢一覧に「関東」「関西」など |
2:「案件管理」テーブル(期限付きテーブル)で、以下の項目を設定し、「フィルタ」タブで地域と取引先をフィルタに表示してください。
| 項目コード | 内容 |
|---|---|
| 分類A(ClassA) | 地域。選択肢一覧は取引先マスタの地域と同じにする |
| 分類B(ClassB) | 取引先。選択肢一覧に[[取引先マスタのサイトID]]を設定 |
3:「案件管理」テーブルにサーバスクリプトを登録します。
3-1:「テーブルの管理 > サーバスクリプト」タブで「新規作成」を選択する。
3-2:タイトル: 任意の名前(例:narrowCustomerFilterByArea)
3-3:スクリプト: 下記サンプルコードを貼り付け
3-4:条件: 「画面表示の前」にチェック
JavaScript¶
// 取引先マスタのサイトID
const CUSTOMER_SITE_ID = 【取引先マスタのサイトID】;
// 案件管理の地域(フィルタで選ぶ)と取引先(フィルタの選択肢を絞る)の項目
const AREA_COLUMN = 'ClassA';
const CUSTOMER_COLUMN = 'ClassB';
// 取引先マスタの地域の項目
const MASTER_AREA_COLUMN = 'ClassA';
// 地域のフィルタで選んだ地域の取引先を、取引先マスタから取得する(地域を選んでいなければ null)
function customersInSelectedAreas() {
// フィルタの値は '["関東","関西"]' のような JSON の文字列で入る
const areas = JSON.parse(view.Filters[AREA_COLUMN] || '[]');
if (areas.length === 0) {
return null;
}
// 分類項目の絞り込みは、配列形式+ExactMatchMultipleでないと完全一致にならない
const masterView = {
View: {
ColumnFilterHash: { [MASTER_AREA_COLUMN]: JSON.stringify(areas) },
ColumnFilterSearchTypes: { [MASTER_AREA_COLUMN]: 'ExactMatchMultiple' },
},
};
const customers = Array.from(items.Get(CUSTOMER_SITE_ID, JSON.stringify(masterView)));
// いま取引先のフィルタで選んでいる取引先は、選んだ地域に無くても選択肢に残す
// (残さないと、欄では見えないのにフィルタは効いたままになり、チェックを外せない)
const ids = customers.map((customer) => String(customer.ResultId));
JSON.parse(view.Filters[CUSTOMER_COLUMN] || '[]')
.filter((id) => !ids.includes(id))
.forEach((id) => customers.push(...Array.from(items.Get(Number(id)))));
return customers;
}
// 一覧で、取引先のフィルタの選択肢を、地域のフィルタで選んだ地域の取引先にする
if (context.Action === 'index') {
const customers = customersInSelectedAreas();
if (customers) {
// 1回目の AddChoiceHash で、もとの選択肢(取引先マスタの全件)は消える
customers.forEach((customer) => columns[CUSTOMER_COLUMN].AddChoiceHash(customer.ResultId, customer.Title));
}
// 地域のフィルタを変えたときは、欄を描き直さないと選択肢が変わらない(地域を外したときは全件に戻る)
responses.Reload('Filter', CUSTOMER_COLUMN);
}
注記¶
- フィルタを変えると、一覧を描き直すときに「画面表示の前」が動きます。
responses.Reloadを呼ばないと、取引先のフィルタの欄は描き直されず、選択肢は変わりません。 view.Filtersの地域の値は、'["関東","関西"]'のようなJSONの文字列で入ります。- 取引先を選んだまま地域を変えると、その取引先も選択肢に残します(チェックが付いたまま見えるため、外せます)。一覧は、その取引先と地域の両方で絞り込まれます。
- 取引先の項目で「検索機能を使う」を有効にしている場合、
AddChoiceHashは選択肢に反映されません。
