レコード保存時に他アプリから取得したデータを追加保存したい

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

アプリAのデータを編集保存した際に、フィルタリング用に作ったフィールドに別アプリBのデータを自動的に取得して追加保存したいと思っています。

実行してもputがうまくいかないようなのですが何か書き方を間違えていますでしょうか。

 

(function() {
“use strict”;
var submitEditEvents = [
‘app.record.edit.submit.success’,
‘app.record.index.edit.submit.success’
];

kintone.events.on(submitEditEvents, function(event) {
var needs = event.record;
var param = {
app: ‘21’,
id: needs[‘営業進捗レコード番号’].value
};

kintone.api(kintone.api.url(‘/k/v1/record’, true), ‘GET’, param, function(resp) {
needs[‘営業ステータス’] = resp.record.status;
needs[‘案件ステータス’] = resp.record.案件ステータス;
needs[‘買付日’] = resp.record.買付日;
needs[‘申込締結日’] = resp.record.申込締結日;
}, function(error) {
console.log(error);
});

var param = {
app: needs.app,
id: needs.$id,
record: {
‘営業ステータス’: {
‘value’: needs[‘営業ステータス’]
},
‘案件ステータス’: {
‘value’: needs[‘案件ステータス’]
},
‘買付日’: {
‘value’: needs[‘買付日’]
},
‘申込締結日’: {
‘value’: needs[‘申込締結日’]
},
}
};
kintone.api(‘/k/v1/record’, ‘PUT’, param, function(resp) {
location.reload(true);
});
return event;
});

})();

うまくいかない場合は、デバックしてみると解決方法が見つかると思います。

動かない?そんな時はデバッグをしてみよう!入門編

araiさんの載せてくださったコード、私もデバックしながら試してみました。

まず、1つ目に

kintone.events.on(submitEditEvents, function(event) {
var needs = event.record;
var param = {
app: '21',
id: needs['営業進捗レコード番号'].value
};

kintone.api(kintone.api.url('/k/v1/record', true), 'GET', param, function(resp) {
needs['営業ステータス'] = resp.record.status;
needs['案件ステータス'] = resp.record.案件ステータス;
needs['買付日'] = resp.record.買付日;
needs['申込締結日'] = resp.record.申込締結日;

部分ですが、この部分で別アプリBのデータを取得して、PUTする際のパラメータの値に使いたいのだと思います。

needsの中には、アプリAの情報が入っています。
デバックすると、アプリBに登録している「買付日」「申込締結日」には値が入っていないことが分かります。

var needs = event.record;で取得できる値は、そのイベントを実行しているアプリAの値です。

なので、

needs['営業ステータス'] = resp.record.status;

ではなく、

var sales_status = resp.record.status.value;

などと新しく変数を定義し、その中に取得した値をいれましょう。

また、respもデバックしてみると

respの中のrecordの中のstatusの中のvalueに、アプリBの「status」の値が入っていることが分かります。

なので、変数に入れる値は

resp.record.status;

ではなく、

resp.record.status.value;

になると思います。

2つ目、あとは、取得した値を更新する際にパラメータとして使いたいので、
PUTの処理をGETの

}, function(error) {

の前に丸ごと入れてあげればいいと思います。

パラメータの部分のneeds[‘営業ステータス’]部分等は書き換えが必要ですがうまくいくと思います!

拙い説明なので、分からない部分あれば遠慮なく聞いてください。

たけちょ様

 

大変わかりやすいご回答ありがとうございます。

仰る通りneedsでPUTする際のパラメータを指定できないかと思っておりました。

GETしたものを上書きするので取得したものに上書きするような形でPUTすれば良いのかと思っていたのですが、

横着せずに新しく変数を宣言してみたところうまくいきました。

 

他もvalueまで指定してなかった部分をちゃんとvalueまで指定することで無事に更新することができました。

 

デバッグも今一つうまく動かせていなかったのですが

実際の画面をつけていただいたおかげでデバッグの仕方もわかりやすく、今後にも生かせそうです。

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

 

参考のためうまく動いた方のコードを掲載させていただきます。

 

(function() {
“use strict”;
var submitEditEvents = [
‘app.record.edit.submit.success’,
‘app.record.index.edit.submit.success’
];

kintone.events.on(submitEditEvents, function(event) {
var needs = event.record;
var param = {
app: ‘21’,
id: needs[‘営業進捗レコード番号’].value
};

kintone.api(kintone.api.url(‘/k/v1/record’, true), ‘GET’, param, function(resp) {
var sales_status = resp.record.status.value;
var anken_status = resp.record.案件ステータス.value;
var buying_day = resp.record.買付日.value;
var contract_day = resp.record.申込締結日.value;

var body = {
app: ‘1039’,
id: needs.$id.value,
record: {
‘営業ステータス’: {
‘value’: sales_status
},
‘案件ステータス’: {
‘value’: anken_status
},
‘買付日’: {
‘value’: buying_day
},
‘申込締結日’: {
‘value’: contract_day
},
}
};

kintone.api(‘/k/v1/record’, ‘PUT’, body, function(resp) {
console.log(resp);
});
}, function(error) {
console.log(error);
});

return event;
});

})();

解決できたとのことで安心しました!

またコードもありがとうございます!
ちなみに、下の画像でコード表示が出来るので使ってみるといいかもしれません^^