プリザンター(Pleasanter)を使用している際に、サーバスクリプトで苦労した部分のコードをコメントつきで公開します(自分用備忘録です)。特に、JSONデータレイアウト: ViewのColumnFilterHashでClassを設定する際には配列で指定する必要であること、サイトIDの取得方法、 条件に合致するレコード数のカウント(items.Count)、**テーブルの更新(items.Update。サーバスクリプトが係れているテーブル以外も作成・更新可能)**に関する部分でつまずいたポイントを詳しく解説します。
完成したサーバスクリプト
(function () {
// let 貸出案件ID = model.ClassC; として定義するとString型として認識されるため不可
let 貸出案件ID = [model.ClassC]; // viewのColumnFilterHashのClassC設定時に配列が必要なた配列として定義
if (!貸出案件ID || 貸出案件ID.length === 0) {
return;
}
// 貸出明細テーブルのサイトIDを定義
let siteId = model.SiteId; // Number型
// 貸出明細テーブルの「item.Count(siteId, view)」による検索条件を指定
let view = {
"View": {
"ColumnFilterHash": {
"CheckA": true, // 「貸出中?」カラム。貸出中の場合はTrue
// 貸出案件IDはStringでなくarrayでなければいけない。
// 貸出案件IDをarrayにしても"ClassC": 貸出案件IDとするだけではエラーが出る。
// 以下が正解
"ClassC": JSON.stringify(貸出案件ID) // 配列をJSON文字列に変換
},
// 完全一致検索のための記載
"ColumnFilterSearchTypes": {
"ClassC": "ExactMatch"
}
}
};
context.Log("view: " + view);
// items.Countで条件に合致するレコードの件数を集計できる
let 貸出明細未返却件数 = items.Count(siteId, JSON.stringify(view));
// 貸出案件テーブルのCheckA(「返却済?」カラム)の更新
if (貸出明細未返却件数 == 0) {
let 貸出案件返却済更新 = {
CheckHash: {
CheckA: true
}
};
items.Update(貸出案件ID, JSON.stringify(貸出案件返却済更新));
context.Log("すべて返却されています");
} else if (貸出明細未返却件数 != 0) {
let 貸出案件返却済更新 = {
CheckHash: {
CheckA: false
}
};
// items.Updateの第1引数で他のサイトIDを指定すると、他のサイトID(テーブル)のレコードも作成・更新可能
items.Update(貸出案件ID, JSON.stringify(貸出案件返却済更新));
context.Log("あと" + 貸出明細未返却件数 + "件の明細分が未返却です");
} else {
return false;
}
})();