apiModel.Update
概要¶
既存レコードを更新します。
構文¶
戻り値¶
レコードを更新できたらtrue、更新できなかったらfalseを返却します。
使用例¶
下記の例では、レコードIDが 123 のレコード情報を取得し、状況項目を 完了(900) に更新します。
JavaScript¶
let records = items.Get(123);
if (records.Length === 1) {
let record = records[0];
record.Status = 900;
record.Update();
}
サンプルコード¶
コード内の【 ... 】 は適宜修正してください。¶
1. 任意の条件でレコードを取得し一括で任意の項目を更新する
状況が’100’のレコードを取得し、'200'に更新する。
コードの途中で return を使っているため、サーバスクリプトの「関数化」を有効にしてください。
JavaScript¶
// 状況が未着手(100)のデータを抽出対象とする
const targetStatus = '100';
// 実施中(200)に更新する
const updateStatus = '200';
// 処理対象のサイト名を指定
const siteName = '【サイト名】';
// サイト情報を取得
const site = items.GetClosestSite(siteName);
if (!site) {
logs.LogInfo(`${siteName} サイト情報取得失敗`);
return false;
}
const data = {
View: {
ColumnFilterHash: {
Status: `[\"${targetStatus}\"]`,
},
},
};
const results = Array.from(items.Get(site.SiteId, JSON.stringify(data)));
// 抽出した結果に対し状況を更新
for (const item of results) {
item.Status = updateStatus;
const result = item.Update();
if (result) {
logs.LogInfo(`更新成功:Id=${item.ResultId}`);
} else {
logs.LogUserError(`更新失敗:Id=${item.ResultId}`);
}
}
実行結果¶
2. 作業明細がすべて完了になったら、親の案件を完了にする
作業明細を完了にして更新したとき、同じ案件にリンクしている明細がすべて完了であれば、親の案件の状況を完了に更新します。items.Getで取得した親の案件の状況を変え、apiModel.Updateで保存します。
実務での使いどころ¶
案件・工事・受注を作業明細に分けて進めるとき、最後の明細が終わったのに案件が「実施中」のまま残る漏れを防げます。サマリで未完了の明細の件数は親に入れられますが、サマリが書き込めるのは数値項目のため、案件の状況は自動では変わりません。
事前準備¶
1:「案件」テーブル(期限付きテーブル)と、「作業明細」テーブル(期限付きテーブル)を用意してください。
2:「作業明細」テーブルで、以下の項目を有効化してください。
| 項目コード | 内容 |
|---|---|
| 分類A(ClassA) | 案件。選択肢一覧に[[「案件」テーブルのサイトID]]を設定し、リンクにする |
3:「作業明細」テーブルにスクリプトを登録します。
3-1:「テーブルの管理 > サーバスクリプト」タブで「新規作成」を選択する。
3-2:タイトル: 任意の名前(例:completeParentWhenAllDone)
3-3:スクリプト: 下記サンプルコードを貼り付け
3-4:条件: 「更新後」にチェック
JavaScript¶
条件:更新後
注記¶
- 明細を完了以外に戻しても、案件の状況は元に戻りません。
- 「案件」テーブルにも「更新前」「更新後」のサーバスクリプトがあれば、
apiModel.Updateで案件を更新したときに実行されます。
注意事項¶
こちらはサーバスクリプトで使用するメソッドです。スクリプトでは使用できません。
