レコード更新(PUT)の記述について

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

出町と申します。

 

AアプリからBアプリへコピーさせているのですが、

編集画面から更新したときBアプリのデータも更新させたいので、

別の方の質問回答などを参考にレコード更新(PUT)について勉強しています。

しかし、以下の内容がうまくできずにおります。

①レコードID指定で更新した場合にサブテーブルの更新だけができない。

②サブテーブル内にある「ユニークID」フィールドをupdateKeyにすると更新ができない。

 

(function() {
"use strict";
kintone.events.on('app.record.edit.submit.success', function(event) {
return kintone.api('/k/v1/record', 'PUT', {
"app": ***, //案件管理アプリAのアプリID
"updateKey": {
"field": "ユニークID",
"value": "ユニークID",
},
"record": {
"顧客番号": {
"value": event.record.顧客番号.value
}
}
}).then(function(){
return event;
});
});
})();

(※フィールドひとつひとつ上書きされるか試しているところです。)

 

ちなみに、レコード追加成功時は以下のコードでコピーさせています。

以前の投稿で色々教えていただき成功することができたものです。

ーコピーの内容ーーーーーーーーーーーーーーーー
Aアプリ
保存ボタンクリック

[ヘッダー情報(テーブル以外のフィールド) + テーブルデータ1行目]
[    テーブルデータ2行目]

Bアプリ
1レコード[ヘッダー情報(テーブル以外のフィールド) + テーブルデータ1行目]をコピー
1レコード[ヘッダー情報(テーブル以外のフィールド) + テーブルデータ2行目]をコピー
ーーーーーーーーーーーーーーーーー

(function () {
"use strict";

kintone.events.on([
'app.record.create.submit.success',
],function (event) {

//BアプリのID
var postApp = ***;

//サブテーブルのフィールドコード
var subTable = 'Table';

//コピーするサブテーブル外のフィールドのフィールドコード
var headers = [
'顧客番号',
];

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;
})
});
});
})();

もしかしたら、こちらのコードを元に更新させるためのupdatekeyを

記述するべきなのか??と色々考え壁にぶつかっているところです…

ど素人な質問をしてしまい大変申し訳ないのですが、

更新時にはどのように記述すれば良いのか、

どなたかご教示いただけないでしょうか。。

何卒よろしくお願いいたします。

 

こんにちは。

処理の内容について質問させてください。

1 レコード追加時

・Aアプリのテーブル1行とヘッダー情報 → Bアプリの1レコードのフィールドにコピーされる

・Bアプリにはテーブルは無い。

2 レコード更新時

・Aアプリのテーブル1行目を更新後に保存 →

 Bアプリの対象レコードのテーブルデータ1行目に相当するフィールドが更新される

 

このような仕様でしょうか?

吉田様

大変お世話になっております!!

 

1 レコード追加時

・Aアプリのテーブル1行とヘッダー情報 → Bアプリの1レコードのフィールドにコピーされる

・Bアプリにはテーブルは無い。

→吉田様のおっしゃる通りそのような仕様となっています!

 

2 レコード更新時

・Aアプリのテーブル1行目を更新後に保存 →

 Bアプリの対象レコードのテーブルデータ1行目に相当するフィールドが更新される

→こちらも吉田様のおっしゃる通りです!

また、テーブル行に限らずヘッダー情報の更新(変更)があることも想定しています。

その為、テーブル行に紐づける「ユニークID」フィールドを設定しました。

 

 

テーブルデータを別アプリのレコードに登録したい

こちらでコピーについて質問させていただき、

コピーまではできたのですが、更新の部分で苦戦しているところでした…

 

以上となります。何卒よろしくお願いいたします!

 

こんにちは。

試せて無いので申し訳ありません。

基本的な考え方です。

 

Aアプリ

・テーブルにBアプリと紐付けるユニークIDを持っている。

例えば、{“ユニークID” :“123ABC567”}

 

Bアプリ

・Aアプリのテーブルと紐付くユニークIDフィールドがある。

例えば、{“ユニークID” :“123ABC567”}

 

以上の前提で下記の様な処理になるかと思います。

 

1 Aアプリのテーブル1行の文字列(1行)フィールドを変更

2 Aアプリで保存ボタン押下

3 Aアプリの保存後イベントにて

4 Aアプリのテーブルの1行目のユニークIDフィールドの値をupdateKeyにして

Bアプリの文字列(1行)フィールドを更新

5 以下Aアプリのテーブル行数分繰り返し

 

Aアプリのテーブルを削除して追加など、色々変更すると処理が大変な気がしますね。

運用で何かしら制限をかける方が良い様な気がします。

吉田様

大変お世話になっております!!

 

試しにAアプリをサブテーブルだけにして更新を試してみました。

Aアプリ

 

Bアプリ

ちなみにコードは以下の通りです。※こちらを参考に作ってみました。

 

(function () {
"use strict";

kintone.events.on([
'app.record.edit.submit.success',
],function (event) {

var params = {
"app": *** ,
"updateKey": {
"field": "ユニークID",
"value": {"ユニークID":"16be3f8c8b626d"}
},
"record": {
"契約内容": { "value": "契約内容" },
}
};


// kintone REST API リクエスト ~ レコードの更新(PUT)
return kintone.api(
kintone.api.url('/k/v1/record', true), 'PUT', params).then(function(resp) {
return event;
}).catch(function(error){
console.log('put error', error);
return event;
});

});
})();

 

すると「2/k/v1/record.json:1 Failed to load resource: the server responded with a status of 400 (Bad Request)」というエラーが表示されました。

恐らく根本的なところで色々間違っているのだとは思いますが…

 

ご教示のほどよろしくお願いいたします。

 

 

こんにちは。

 

updateKey の valueは

“value”: “16be3f8c8b626d”

で良いかと思います。

 

https://developer.cybozu.io/hc/ja/articles/201941784#step1

吉田様

 

ご教示いただいた内容で動作しました!(感動です!)

(更新作業が大きな壁となっており何とか課題クリアまで行けそうです……)

誠にありがとうございます!!!

 

追加で質問させていただきます。。

サブテーブルが複数あった場合は、

上記のように値を固定させないで、行数分ループさせるという認識で間違いないでしょうか??

var params = {
"app": *** ,
"updateKey": {
"field":"ユニークID",
"value": {"ユニークID":"16be3f8c8b626d"}
},
"record": {
"契約内容": {"value":"契約内容"},
}
};

その場合の記述を教えていただけますでしょうか…

教えていただいたURLの内容を参考に試しているものの、

valueの箇所でエラーとなってしまい値をうまく設定?できていないようです。

 

また、ヘッダー情報を追加した場合は、

サブテーブル内に設定している「ユニークID」とは別に紐づけるためのIDを準備する必要があるのでしょうか。

 

お忙しいところ大変恐縮ですが何卒よろしくお願いいたします。