他アプリのテーブルをそのまま表示させたい

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

アプリAで作成したテーブルを、アプリBで表示させたいのですが、よくわからないので質問させてください。

アプリA、Bに全く同じようにテーブルを作成しており、フィールドコードもそろえております。

アプリA・・・アプリID:73

  テーブルのフィールドコード : table

単純に表(メニュー表的なもので、表の内容はかわらないもの)を貼り付けたかったのですが、添付ファイルフィールドで画像にした表を貼り付けると大きさやバランスが悪くなったので、他のアプリで表を作成してそれを常に表示させるようにしようと思い、このプログラムを作成しようと考えました。

もし他に良いアイデア等ありましたら、ぜひご教授いただければ幸いです。

(サンプルコード等を探し回って自分なりに加工してみたソースコードはあるのですが、おかしな点ばかりだと思うので、あえて貼らないでおきます。。申し訳ありません。)

APIで毎回レコード取ってくるなら↓のようなコードでいけますね!

あと、私は試してないのですが、https://qiita.com/will-yama/items/a5a4bc0204df310e46a3

こちらの10番目のやつとか使えるんじゃないかなと思ってます!

(function() {
"use strict";

kintone.events.on("app.record.create.show", function(event) {

const url = kintone.api.url("/k/v1/records", true);
const app = 73;
const body = {
app: app,
query: "order by $id desc limit 1",
fields: ["table"]
};

kintone.api(url, "GET", body).then(function(resp) {
const record = kintone.app.record.get();
const rec = record.record;
rec.table.value = resp.records[0].table.value;
kintone.app.record.set(record);
}).catch(function(error) {
console.log(error);
});
});
})();

TK様

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

コメントとソースコードをご丁寧にご教授いただきありがとうございます。

返信が遅くなりまして申し訳ありません。

今試してみましたところ、思っていた通りの動きをしてくれました。

本当にありがとうございます。

実力以上のことをしようとしていたようで、わからないことが多々ありますので、一つ一つ調べていき身につけていきたいと思います。

 

また、URLもありがとうございます。

目からうろこのアイデアがありとても勉強になりました。

いろいろ調べていましたが、このサイトには行きつきませんでした。

試してみたいと思います!!

連日の初歩的な質問にご丁寧にお答えいただき本当に感謝しかありません。

今後ともどうぞよろしくお願いいたします。

TK様

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

先日ご教授いただきました10番の方法、とても上手くいきました。

ありがとうございます。

 

お教えいただきましたコードで何が起こっているのか理解しようと努めているのですが、APIに関しましてはド初心者のためわからないことが詰め込まれており苦戦しております。。。

実はこの表なのですが、あと二つほど同じアプリから引っ張ってきたいので、変数名とサブテーブルのフィールドコード(fuka,sonota)を変えて試しているのですが、思うように動いておりません。

そこで、特になにが起こっているかわからない下記のコードについてお教えいただけませんでしょうか><

(ここを読めといったサイトの情報等でももちろん充分です)

kintone.api(url, “GET”, body).then(function(resp) { //APIの実行
const record = kintone.app.record.get(); //record変数に現在のレコードデータを代入
const rec = record.record; //?????????
rec.table.value = resp.records[0].table.value; //?????????
kintone.app.record.set(record); //今開いているレコードに値をセットする(?)
}).catch(function(error) { //例外処理
console.log(error);                                                            //例外処理
});

図々しくて恐縮ではございますが、どうぞよろしくお願いいたします。

 

うまくいったみたいでよかったです!

 

> const rec = record.record; //?????????

まず前提として、kintone.app.record.get() で取得したデータが const で定義した record に入ってます。

そして、record の中の record というデータ(プロパティ)を const で定義した rec に代入しています。

record.record だとややこしいので rec に代入して見やすくした、と考えてください!

const record = kintone.app.record.get();        
const rec = record.record;              
rec.table.value = resp.records[0].table.value;     
kintone.app.record.set(record);

// ↑と同じ動作をします。

const record = kintone.app.record.get();
record.record.table.value = resp.records[0].table.value;
kintone.app.record.set(record);

 

> rec.table.value = resp.records[0].table.value; //?????????

こちらはAPIで取ってきたレコードの table のデータを、今開いているレコードの table に代入しています!

あとは認識の通りで合っています!

 

 

>実はこの表なのですが、あと二つほど同じアプリから引っ張ってきたいので、変数名とサブテーブルのフィールドコード(fuka,sonota)を変えて試して>いるのですが、思うように動いておりません。

 

あとこちらですが、まとめると同じアプリから3つのレコードを取得して

3つのテーブルにコピーしたい、ということでしょうか?

 

TK様

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

ご丁寧に回答いただき本当にありがとうございます!!

とてもわかりやすいですT_T

 

 

仰る通りです!

先日教えていただいたコードさえ理解できればフィールドコードしかかわらないので、

自分でコードを複製するだけのようなものなはずだから

きっとできるだろうと思っていたら思いの外難しくて苦戦しておりました(苦笑)

 

でしたらPromise.allでやったほうがいいと思います!↓こんな感じです。

クエリは指定してないので適当なものを入れてもらえれば動くと思います!

(function () {
  "use strict";
  kintone.events.on("app.record.create.show", function (event) {
    const url = kintone.api.url("/k/v1/records", true);
    const app = 73;

    const body = {
      app: app,
      query: "order by $id desc limit 1",
      fields: ["table"]
    };

    const body_fuka = {
      app: app,
      query: "適当なクエリ",
      fields: ["fuka"]
    };

    const body_sonota = {
      app: app,
      query: "適当なクエリ",
      fields: ["sonota"]
    };

    const promiseArr = [kintone.api(url, "GET", body), kintone.api(url, "GET", body_fuka), kintone.api(url, "GET", body_sonota)];

    Promise.all(promiseArr).then(function(resp) {

      const resp_table  = resp[0].records[0];
      const resp_fuka   = resp[1].records[0];
      const resp_sonota = resp[2].records[0];

      const record = kintone.app.record.get();
      const rec = record.record;

      rec.table.value = resp_table.table.value;
      rec.fuka.value = resp_fuka.fuka.value;
      rec.sonota.value = resp_sonota.sonota.value;
      
      kintone.app.record.set(record);

    }).catch(function(error) {
      console.log(error);
    });
  });
})();

TK様

 

おはようございます。

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

 

またご丁寧にコードを教えていただきありがとうございます:bangbang:(T_T)

コピペをさせていただき実行してみましたら、思っていた通りの動きをしました。

凄いです…!!

Promise.all、調べていると何度か見かけていましたが、よくわからずあまり深く見ないようにしていましたが、使えるととても便利なものなのですね。

よく調べてみたい思います!

 

またご質問をさせていただくことがあると思いますが、ぜひよろしくお願いいたします。

ありがとうございました。