テーブルに組み込んだidも別アプリに反映させたい

お世話になります。

以前リンクにてご相談させていただいた件で、うまくいったのですが、
初回登録時のidは登録時に反映されていないことに今さらながら気づきました。

登録時
ヘッダー含めテーブルを別アプリにPUT
完了後、idをテーブル行に保存。
となるためで、修正等の編集後は別アプリでもidが確認できることを確認済みです。

この初回登録時にidも別アプリに持っていくことは可能なのでしょうか?
どのようにコードを更新すべきかご教授頂きたく、お願いします。

元のコード:

(function() {
"use strict";

kintone.events.on("app.record.create.submit.success", function(event) {
var postApp = 348; // 別アプリのID
var recId = event.recordId; // テーブルを登録したレコードを更新するためのID
var subTable = 'table1'; //サブテーブルのフィールドコード
var headers = [ //コピーするサブテーブル外のフィールドのフィールドコード
'From', 'To',
];

var record = event.record;

// レコードを更新するための値
var table = event.record.table1.value;
var array = [];

return kintone.api(kintone.api.url('/k/v1/records', true), 'POST', {
app: postApp,
records: event.record[subTable].value.map(function (row) {
headers.forEach(function (header) {
row.value[header] = event.record[header];
});
return row.value;
})
}).then(function(resp) {
// ↓↓↓↓↓↓↓↓↓↓↓↓登録が成功したレコードID をテーブルに登録するための処理
console.log(resp);
for (var i = 0; i < table.length; i++) {
array.push({
"id":table[i].id,
"value":{
"id": {
"value": resp.ids[i]
}
}
});
}

var body = {
"app": kintone.app.getId(),
"id": recId,
"record" :{
"table1":{
"value": array
}
}
};

return kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', body).then(function(resp) {
// success
console.log(resp);

}, function(error) {
// error
console.log(error);
});
});
});

(function() {
"use strict";

kintone.events.on("app.record.create.submit.success", function(event) {
var postApp = 348; // 別アプリのID
var recId = event.recordId; // テーブルを登録したレコードを更新するためのID
var subTable = 'table1'; //サブテーブルのフィールドコード
var headers = [ //コピーするサブテーブル外のフィールドのフィールドコード
'From', 'To',
];

var record = event.record;

// レコードを更新するための値
var table = event.record.table1.value;
var array = [];

return kintone.api(kintone.api.url('/k/v1/records', true), 'POST', {
app: postApp,
records: event.record[subTable].value.map(function (row) {
headers.forEach(function (header) {
row.value[header] = event.record[header];
});
return row.value;
})
}).then(function(resp) {
// ↓↓↓↓↓↓↓↓↓↓↓↓登録が成功したレコードID をテーブルに登録するための処理
console.log(resp);
for (var i = 0; i < table.length; i++) {
array.push({
"id":table[i].id,
"value":{
"id": {
"value": resp.ids[i]
}
}
});
}

var body = {
"app": kintone.app.getId(),
"id": recId,
"record" :{
"table1":{
"value": array
}
}
};

return kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', body).then(function(resp) {
// success
console.log(resp);

}, function(error) {
// error
console.log(error);
});
});
});

こんにちは!

同じようなコードが2つ書かれていますが、前後の違いは何でしょうか?

今のコードが動かないということでしたら、
どういう風に動かないか?
どうしたいのか?(ゴールのイメージ)
などを詳細に書いてくださると、回答しやすいかと思います。
(アプリの様子を想像するのが難しいです。詳細が書かれていてもわからない可能性はありますが:pray::sweat_drops:

・前後のコードの違いは何か?
・エラーが出る場合はエラーの内容
・どんなテーブルにどのアプリのどの値を入れたいのか
・更新したいテーブルの構造(レコードIDだけ入れるためのテーブルでしょうか?)

などいただけると回答しやすいかと思います!

juridonさん

こんにちは
コードが2つコピーされていることに今さらながら気づきました。

やりたいことは、
ヘッダー情報+テーブル情報
を別アプリにコピーする、というものです。
その際テーブルを1行ずつ分けて登録する、というものです。
コピー先はテーブルではない予定です。

これまでの登録では保存時にidを振っていたので、別アプリには
idが更新時にのみ登録されていました。
そこを何とかできないか?と考えています。

なるほどです、テーブルの内容を1行ずつ別のアプリにPOST、PUTしたいという感じですね:eyes:
idというのはレコードIDのことですね!

別アプリに複数レコードを一括POSTしたあと、IDが複数返ってくると思います。
どの行とどのIDが結びつくかはちょっとわからないので(基本的に順番通りなのかもしれないですが:sweat_drops:

IDが返ってきたら一旦その別アプリからGETして、その内容で自アプリをPUTで更新すると良さそうですね。
コードを読んだ感じ流れは良いと思います(細かいところは読めてないですが:sweat_drops:)。

すると、多分ですが、テーブルの構造どおりに、bodyを正しく作れたらうまくいくかと思います。
例えば↓のarrayはテーブルの行だと思うのですが、valueの他にtypeというプロパティも必要です。

array.push({
"id":table[i].id,
"value":{
"id": {
"value": resp.ids[i]
}
}
});
}

 

このテーブルの構造のあたりは
はじめようJavaScript第16回 kintone JavaScriptカスタマイズのプログラム実例を学ぼう④(テーブル操作)
レコード更新におけるテーブル操作のテクニック

あたりが参考になると思います。

juridonさん

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

for (var i = 0; i < table.length; i++) {
array.push({
"id":table[i].id,
"type": "SINGLE_LINE_TEXT",
"value":{
"id": {
"value": resp.ids[i]
}
}
});
}

にする形ですね。
idは既存のレコード含め通し番号となります。

return kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', body).then(function(resp) {
// success
console.log(resp);
//ここに記載する感じでしょうか?

}, function(error) {
// error
console.log(error);
});

上記に単純にvar recId = event.recordId;の部分をPUTもしくはPOSTする
感じにはならないのでしょうか?

再度よろしくお願いいたします。

↓typeを追加されていますが、そこではないです:sweat_drops:

array.push({
 "id":table[i].id,
 "type": "SINGLE_LINE_TEXT",
 "value":{
   "id": {
    "value": resp.ids[i]
   }
  }
});

>上記に単純にvar recId = event.recordId;の部分をPUTもしくはPOSTする
>感じにはならないのでしょうか?

この行自体が、自分のアプリのレコードをPUT(更新)する行で、bodyの内容が正しければ、更新されるはずです。

return kintone.api(kintone.api.url('/k/v1/record',true),'PUT', body).then(function(resp) {

なのですが、なかなか説明も難しいので、

一旦、このアプリを触るのは置いておいて、新しく別にアプリを作るなどして
↓是非こちらを試してテーブルの行追加や更新の練習されてみませんか??オススメです。
kintoneにおけるテーブル操作の基本(行の追加・更新・削除)

juridon様

助言いただいたもの、試したことあります。
今回困っているのは、登録用のAアプリでの内容が確認用のBアプリに
反映されていることは確認済み。
その後Aアプリでidについても登録されていることは確認しておりますので、
その点は問題有りません。

問題になっているのは、Bアプリではidが保存されず、更新時にのみ
反映される点です。
恐らく、レコード作成時、登録データにはid情報が含まれておらず、
POST後にidが割り振られるのかなぁという感じなのですが…

AのテーブルのIdって、Bのレコード番号という認識だったのですが違うのですね:sweat_drops:
すみません。