0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pleasanter 指定した数の複数データをワンクリックで別テーブルで新規作成する

Posted at

基本環境

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?