新規投稿
フォローする

チェックが付いたサブテーブルを同一アプリ内のサブテーブルにコピー

いつも大変お世話になっております。

現在アプリを作成しておりますが、上手くいかない所があるためご相談させて頂きました。

下記のようなサブテーブルを同一アプリ内に2つ作成しております。

①のサブテーブルに内容を入力し、『決定』にチェックが付いたものを②のサブテーブルにコピーさせたいのですが(決定のチェックは複数付くことがあります)、サブテーブルからサブテーブルへのコピーの仕方が分からず作成が止まっております。

お忙しいところ申し訳ございませんが、どなたかご教示頂けましたらと思います。

よろしくお願い致します。

0

11件のコメント

Avatar
y_jedi

具体的なイベント(保存時や値変更時など)がわからないため、明言はできないのですが、
以下の記事は参考になりますでしょうか?

https://developer.cybozu.io/hc/ja/articles/360022502911

テーブルは配列型式なので扱いが少し難しいですが、
行追加処理・行更新処理 の部分が処理の参考になるかと思います。

0
Avatar
Natsumi

y_jedi様

ご回答頂きありがとうございます。

①のサブテーブルのどれかの行の『決定』チェックボックスにチェックが付いた時点で、

同一アプリ内の②のサブテーブルにコピーがされるようにしたいと思っております。

自分でも色々な記事や他の方のコードを参考にし下記コードにて①のサブテーブルの1番下にコピー行を追加する事は出来たのですが、

②のサブテーブルにコピーする事がどうしても出来ませんでした。

もしよろしければご教示頂けますでしょうか?

お忙しいところ誠に申し訳ございませんが、よろしくお願い致します。

 

(function () {
    "use strict";

    const events = [
       'app.record.create.change.決定',
       'app.record.edit.change.決定',
    ];

    kintone.events.on(events, function(event) {
       if (event.changes.field.value.length !== 0) {
 
          var record = event.record.テーブル.value;
          var NO = event.changes.row.value.番号.value;
          var number = event.changes.row.value.品番.value;
          var name = event.changes.row.value.品名.value;
          var color = event.changes.row.value.色番.value;
          var cname = event.changes.row.value.色名.value;
          var Work = event.changes.row.value.仕入先.value;
 
          var newRow = {
             "value": {
                "決定"  : {"type": "CHECK_BOX", "value": []},
                "番号": {"type": "SINGLE_LINE_TEXT", "value": NO},
                "品番": {"type": "SINGLE_LINE_TEXT", "value": number},
                "品名": {"type": "SINGLE_LINE_TEXT", "value": name},
                "色番"    : {"type": "NUMBER", "value": color},
                "色名": {"type": "SINGLE_LINE_TEXT", "value": cname},
                "仕入先": {"type": "SINGLE_LINE_TEXT", "value": Work},
             }
          };

          record.push(newRow);

          return event;

       }
    });

 })();
0
Avatar
Taiki Tsujimoto

push先である変数recordが、テーブル①を指していないでしょうか。

テーブル②を指した変数を定義し、それに対してpushしてみてください。

0
Avatar
Natsumi

Taiki Tsujimoto様

ご連絡が遅くなり大変申し訳ございません。

またご回答頂きありがとうございました。

ご指摘いただきました通り変数レコードをテーブル②に変更したところ動作致しました。

しかし、コピーされる行がテーブル②の2行目からになってしまうのですが、

これを1行目からコピー出来るようにする事は可能でしょうか?

 

お忙しいところ大変申し訳ございませんが、再度ご教示頂けましたらと思います。

よろしくお願い致します。

0
Avatar
Taiki Tsujimoto

実行結果について、スクリーンショットを見せていただけないでしょうか。

0
Avatar
Natsumi

Taiki Tsujimoto様

いつも大変お世話になっております。

下記が実行結果になります。

ご確認のほどよろしくお願い致します。

()内はフィールドコードになります。

 

(function () {
    "use strict";

    const events = [
       'app.record.create.change.決定',
       'app.record.edit.change.決定',
    ];

    kintone.events.on(events, function(event) {
       if (event.changes.field.value.length !== 0) {

          var table = event.record.決定内容.value;
           var name = event.changes.row.value.品名.value;
          var urine = event.changes.row.value.売値.value;
 
          var newRow = {
             "value": {
                "決定品名": {"type": "SINGLE_LINE_TEXT", "value": name},
                "決定売値"    : {"type": "NUMBER", "value": urine},
             }
          };

          table.push(newRow);

          return event;

       }
    });

 })();
0
Avatar
Taiki Tsujimoto

すみません、ご連絡遅くなりました。

 

ソースコードの12行目の変数tableの中身を一度確認してみてください。

レコード追加画面で見てもわかる通り、サブテーブルは初期の段階で自動的に一行目が生成されていると思います。

eventの中身がこの空の一行目を含んだ形になってしまっているので例えば

・値がすべて空の行のオブジェクトはevent内から削除してからreturnする

・レコード保存前イベントで空の行を一括チェックして削除する

といった対策が必要になるかと思います。

 

https://developer.cybozu.io/hc/ja/community/posts/360055128511-%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E8%A1%8C%E5%89%8A%E9%99%A4%E3%81%A8%E7%A9%BA%E5%88%A4%E5%AE%9A%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

こちらなど参考にされてみてください。

0
Avatar
Natsumi

Taiki Tsujimoto様

ご連絡が遅くなり大変申し訳ございません。

ご回答頂きありがとうございました。

添付頂きましたURL内を参考に下記にて希望通りの動きをさせることが出来ました。

この度は何度もご回答頂き誠にありがとうございます。大変助かりました!

また何かございましたらよろしくお願い致します。

 

(function () {
    "use strict";

    const events = [
       'app.record.create.change.決定',
       'app.record.edit.change.決定',
    ];

    kintone.events.on(events, function(event) {
       if (event.changes.field.value.length !== 0) {

          var table = event.record.決定内容.value;
           var name = event.changes.row.value.品名.value;
          var urine = event.changes.row.value.売値.value;
       
           var newRow = {
             "value": {
                "決定品名": {"type": "SINGLE_LINE_TEXT", "value": name},
                "決定売値"    : {"type": "NUMBER", "value": urine},
             }
          };

          table.push(newRow);

          for(var i = 0 ; i < table.length ; i ++){
                   
            if(table[i].value['決定品名']['value'] === undefined,
              table[i].value['決定売値']['value'] === undefined)
                    
          table.splice(i,1);
                    
          }

          return event;

       }
    });

 })();
1
Avatar
青山昌司

お世話になります。

参考にさせていただいております。

テーブル①:テーブル

テーブル②:決定内容

 

テーブル①で追加した、行数分をテーブル②で追加しないとコピーはできませんでしょうか?

例えば、上記図でテーブル①で4行目を追加し品名4、売値4を追加したとします。

この際に決定を押せばテーブル②で行が追加されコピーさせることも可能なのでしょうか?

ご教授の程よろしくお願いいたします。

 

 

 

青山昌司により編集されました
0
Avatar
Natsumi

青山 昌司様

 

いつも大変お世話になっております。

お問い合わせ頂きました件ですが、以前より少し項目を増やしておりますが、

現在コピー元テーブルに追加した行の中で『決定』のチェックボックスにチェックが入ったものだけ

「決定内容」のテーブルにコピーされます。

コピーされる順番はチェックが付いた順番になります。

(function () {
    "use strict";

    const events = [
       'mobile.app.record.create.change.決定',
       'mobile.app.record.edit.change.決定',
    ];

    kintone.events.on(events, function(event) {
       if (event.changes.field.value.length !== 0) {

          var table = event.record.決定内容.value;
           var name = event.changes.row.value.品名.value;
          var urine = event.changes.row.value.売値.value;
          var number = event.changes.row.value.品番2.value;
          var color = event.changes.row.value.色番.value;
          var cname = event.changes.row.value.色名.value;
          var Work = event.changes.row.value.仕入先.value;

      
           var newRow = {
             "value": {
                "決定品名": {"type": "SINGLE_LINE_TEXT", "value": name},
                "決定売値"    : {"type": "NUMBER", "value": urine},
                "決定品番"    : {"type": "SINGLE_LINE_TEXT", "value": number},
                "決定色番"    : {"type": "NUMBER", "value": color},
                "決定色名"    : {"type": "SINGLE_LINE_TEXT", "value": cname},
                "決定仕入先"    : {"type": "SINGLE_LINE_TEXT", "value": Work},

             }
          };

          table.push(newRow);
   
          for(var i = 0 ; i < table.length ; i ++){
                   
            if(table[i].value['決定品名']['value'] === undefined,
              table[i].value['決定売値']['value'] === undefined,
            table[i].value['決定品番']['value'] === undefined,
              table[i].value['決定色番']['value'] === undefined,
            table[i].value['決定色名']['value'] === undefined,
              table[i].value['決定仕入先']['value'] === undefined,
 
                    
          table.splice(i,1);
          
          }     
       
          return event;

       }
    });

 })();
 
ご参考になれば幸いです。よろしくお願い致します。
0
Avatar
青山昌司

Natsumi様

 

お世話になっております。

ご返信ありがとうございます。

 

参考にさせていただきテーブルA⇒テーブルBへはコピーができるようになっていますが

テーブルBへ事前にテーブルを必要数追加しておかないと

テーブルBの1行目に上書きしてしまいます。

 

Natsumi様のテーブルでは決定をクリックしたときに、テーブル下段(【決定内容】)の

行が追加されていきますでしょうか?

 

 

(function () {

    "use strict";

    const events = [

       'app.record.create.change.copy',

       'app.record.edit.change.copy',

    ];

    kintone.events.on(events, function(event) {

       if (event.changes.field.value.length !== 0) {

          var table = event.record.Table_0.value;

          var titlle = event.changes.row.value.titlle.value;

          var num = event.changes.row.value.num.value;

          var price = event.changes.row.value.price.value;

      

           var newRow = {

             "value": {

                "titlle4": {"type": "SINGLE_LINE_TEXT", "value": titlle},

                "price4"    : {"type": "SINGLE_LINE_TEXT", "value": price},

                "num4"    : {"type": "NUMBER", "value": num},

                

             }

          };

          table.push(newRow);

   

          for(var i = 0 ; i < table.length ; i ++){

                   

            if(table[i].value['titlle4']['value'] === undefined,

            table[i].value['price4']['value'] === undefined,

            table[i].value['num4']['value'] === undefined    )

                      




                    

          table.splice(i,1);

          

          }     

       

          return event;

       }

    });

 })();
青山昌司により編集されました
0
サインインしてコメントを残してください。