■背景・実現したいこと
レコードを新規・編集するときに、[ユーザーマスタ]アプリから[顧客管理]アプリにデータをコピーしたいと考えております。
[ユーザーマスタ]アプリ:転記元
・チーム名
・担当課
[顧客管理]アプリ:転記先
・チーム名
・担当課
実現したいこととしましては、
[顧客管理]アプリで「チーム名」を入力したら、レコード追加時または編集時に「担当課」を[ユーザーマスタ]アプリから取得して、[顧客管理]アプリの「担当課」に反映したい
と考えております。
デバッグで確認する限りでは、GETで取得できており、
kintone.app.record.set(event);
で「担当課」フィールドに値が反映されるのですが、最終的にエラーになってしまいます。
いろいろ調べてみたのですが、値を反映させた状態で完了させることができずにおります。
解決策について、ご教示いただけますと幸いです。
■エラー情報 (開発者ツールのコンソール)
Uncaught Error: USAGE: kintone.api(pathOrUrl, method, params, opt_callback, opt_errback)
■利用したソースコード
コードについては、下記投稿を参考にさせていただきました。
・GETで取得した値が反映されない
・別のアプリから取得できない
(function() {
'use strict';
kintone.events.on(['app.record.create.submit', 'app.record.edit.submit'], function(event) {
var record = event.record;
var team = record['チーム名'].value;
const query = 'チーム名= "' + team + '"';
var param = {
'app': 189,
'query': query
};
return kintone.api(kintone.api(
kintone.api.url('/k/v1/records', true),
'GET',
param
)
.then(function(resp) {
var apprecs = resp.records[0];
tanto = apprecs['担当課'].value;
record['担当課'].value = tanto;
kintone.app.record.set(event);
}));
});
})();
FUJI様
returnkintone.api(kintone.api(
kintone.api.url('/k/v1/records',true),
「kintone.api(」がひとつ多いかもしれません。
902343704226様
完全に見落としていましたので、ご指摘いただきありがとうございます!
下記のように修正いたしました。
return kintone.api(
kintone.api.url('/k/v1/records', true),
すると、今度は下記のエラーメッセージが24行目の
kintone.app.record.set(event);
で発生してしまい。。
私のコードではkintone.app.record.set(event);が使えないようなので、削除したところエラーはなくなりましたが結局値は反映されずでした。
(function() {
'use strict';
kintone.events.on(['app.record.create.submit','app.record.edit.submit'],function(event) {
varrecord = event.record;
varteam = record['チーム名'].value;
constquery ='チーム名= "'+ team +'"';
varparam = {
'app':189,
'query': query
};
returnkintone.api(
kintone.api.url('/k/v1/records',true),
'GET',
param
)
.then(function(resp) {
varapprecs = resp.records[0];
tanto = apprecs['担当課'].value;
record['担当課'].value = tanto;
});
});
})();
値がフィールドに反映されるようにするためには、他はどこを修正すれば良さそうでしょうか?
FUJI様
レコードの値をセットする
record.set()はイベントハンドラーの中では使えないのですが,
ボタンを置いてclickイベントにしたり,ちょっと工夫することで(コールバックの中でやるとか)使うことは可能です.
(今回の例ではコールバック関数が省略されているのでひっかかったのかな,と思います)
ただ,今回の例ではそんなことをしなくても,return eventで反映されるかと思います.
.then(function(resp) {
var apprecs = resp.records[0];
tanto = apprecs['担当課'].value;
record['担当課'].value = tanto;
return event;
});
下記を参照ください.
kintoneにおけるPromiseの書き方の基本
902343704226様
再度アドバイスいただきありがとうございます!
最後にreturn eventする処理を加えるだけで、反映されるようになりました。
昨日からkintone Javascript APIから触り始めたため、理解できていないことが多いですが、参照いただいたサイトや、下記アドバイスを参考にして、これから覚えていきたいと思います。
record.set()はイベントハンドラーの中では使えないのですが,
ボタンを置いてclickイベントにしたり,ちょっと工夫することで(コールバックの中でやるとか)使うことは可能です
system
(system)
クローズされました:
6
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。