基本環境
Pleasanter1.4.20.0
やりたいこと
テーブルAのステータスが変化したら、テーブルBにデータを新規作成する
その時、テーブルAからデータを転記する
また、指定した数だけ複数新規作成する
準備
テーブルA
テーブルB
共通する項目を設定 Title、ClassAなど
状況項目を設定
転記する項目を設定 DescriptionA、NumBなど
テーブルBで作成するデータ数を設定する数値項目を設定 NumAなど
新規作成スクリプト
テーブルの管理>サーバースクリプト>新規作成
let data = {
Keys: ["ClassA"], // 参照するデータを指定する
Status: 200, // 新規作成時の状況を設定
Title: model.Title // テーブルAのTitleの値をテーブルBのTitleへ転記
ClassHash: {
ClassA: model.ClassB、// テーブルAのClassBの値をテーブルBのClassAへ転記
ClassC: model.ClassD // テーブルAのClassDの値をテーブルBのClassCへ転記
},
DescriptionHash: {
DescriptionA: model.DescriptionB,
DescriptionC: model.DescriptionD
},
NumHash: {
NumB: model.NumC,
NumD: model.NumE
}
};
items.Upsert(190, JSON.stringify(data)); // 転記先サイトIDを指定
context.AddResponse('Href','_blank','/items/190/index'); // テーブル190一覧を開く
条件:作成後、更新後
指定した数の複数データを新規作成するスクリプト
const Quantity = model.NumA; // テーブルAのNumAの値(文字列)を取得
const QuantityNum = Number(Quantity); // NumAの値を数値に変換
for (let i = 0; i < QuantityNum; i++) { // NumAの数だけループを繰り返す
}
上記の新規作成スクリプトをはめ込む
const Quantity = model.NumA; // テーブルAのNumAの値(文字列)を取得
const QuantityNum = Number(Quantity); // NumAの値を数値に変換
for (let i = 0; i < QuantityNum; i++) { // NumAの数だけループを繰り返す
let data = {
Keys: ["ClassA"], // 参照するデータを指定する
Status: 200, // 新規作成時の状況を設定
Title: model.Title // テーブルAのTitleの値をテーブルBのTitleへ転記
ClassHash: {
ClassA: model.ClassB、// テーブルAのClassBの値をテーブルBのClassAへ転記
ClassC: model.ClassD // テーブルAのClassDの値をテーブルBのClassCへ転記
},
DescriptionHash: {
DescriptionA: model.DescriptionB,
DescriptionC: model.DescriptionD
},
NumHash: {
NumB: model.NumC,
NumD: model.NumE
}
};
items.Upsert(190, JSON.stringify(data)); // 転記先サイトIDを指定
}
context.AddResponse('Href','_blank','/items/190/index'); // テーブル190一覧を開く指定はループの外に
テーブル190一覧を開く指定はループの外に
転記データに子データID採番する
let IdNum = i + 1; // 一回ループするたびに1増加
ClassHash: {
ClassA: model.ClassB + "-Child" + IdNum // ClassAのデータに"-Child1"という子データIDを採番して追記
},
ClassAのデータに"-Child1"という子データIDを採番して追記
状況ステータスをトリガーに
if(model.Status === 900) {
}
状況が900になったら{}内の動作をする
完成スクリプト
if(model.Status === 900) {
const Quantity = model.NumB;
const QuantityNum = Number(Quantity);
for (let i = 0; i < QuantityNum; i++) { // NumAの数だけループを繰り返す
let IdNum = i + 1; // 一回ループするたびに1増加
let data = {
Keys: ["ClassA"], // 参照するデータを指定する
Status: 200, // 新規作成時の状況を設定
Title: model.Title // テーブルAのTitleの値をテーブルBのTitleへ転記
ClassHash: {
ClassA: model.ClassB + "-Child" + IdNum // ClassAのデータに"-Child1"という子データIDを採番して追記
ClassC: model.ClassD // テーブルAのClassDの値をテーブルBのClassCへ転記
},
DescriptionHash: {
DescriptionA: model.DescriptionB,
DescriptionC: model.DescriptionD
},
NumHash: {
NumB: model.NumC,
NumD: model.NumE
}
};
items.Upsert(190, JSON.stringify(data)); // 転記先サイトIDを指定
}
context.AddResponse('Href','_blank','/items/190/index'); // テーブル190一覧を開く指定はループの外に
}
参考記事
https://pleasanter.org/ja/manual/server-script-items-upsert
https://qiita.com/shisshi_engineer/items/d17f4f2c8663dd0bb805#for%E3%83%AB%E3%83%BC%E3%83%97