新規投稿
フォローする

複数のフィールド値を別条件のレコード取得結果で更新したい

いつもお世話になっております。
どうしてもkintone.api周りの動きがうまく行かないため、こちらで質問をさせて頂きたく思います。
Javascript、kintone共に経験が浅く恐縮ですが、よろしければお力添えをお願いいたします。


■やりたいこと
 アプリAにJavascriptを設定。
 条件1・2・3でアプリBのレコード数を取得し、
 それぞれをアプリAのフィールド1・2・3に反映したい。

■作成したソースの問題点
フィールド1・2・3に反映されるときとされないときがある。
(おそらくレコード取得のAPIの同期処理ができていないため?)


具体的な内容は下記添付のソース内に記述しました。
※kbns.forEach(function (kbn)を使用すると
 1件目の「kintone.api('/k/v1/records', 'GET'~」で処理が終わってしまうようなので使用しない処理にしています。

(※2021/1/18 functionの引数が間違っていたため修正しました)


(function () {
"use strict";

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

var record = event.record;

//アプリBのID
var appIdJi = 1;

//追加条件
var q0 = '企業 = "' + event.record.企業.value + '"';

//区分の条件定義
var kbns = [
{ c:1, nm: "フィールド名_1号", cd: "条件1" },
{ c:2, nm: "フィールド名_2号", cd: "条件2" },
{ c:3, nm: "フィールド名_3号", cd: "条件3" }
];


return new kintone.Promise(function(resolve, reject) {
var kbn = kbns[0];
console.log(condWKbn(q0, new Array(kbn.cd)));
var params0 = setParam(q0, kbn, appIdJi)

var kbn1 = kbns[1];
console.log(condWKbn(q0, new Array(kbn1.cd)));
var params1 = setParam(q0, kbn1, appIdJi)

var kbn2 = kbns[2];
console.log(condWKbn(q0, new Array(kbn2.cd)));
var params2 = setParam(q0, kbn2, appIdJi)


kintone.api('/k/v1/records', 'GET', params0, function (resp) {
record.フィールド名_1号.value = resp.totalCount;

resolve(event);
});
kintone.api('/k/v1/records', 'GET', params1, function (resp) {

record.フィールド名_2号.value = resp.totalCount;

resolve(event);
});
kintone.api('/k/v1/records', 'GET', params2, function (resp) {

record.フィールド名_3号.value = resp.totalCount;

resolve(event);
});


});

});

kintone.events.on([
'app.record.create.show',
'app.record.edit.show',
'app.record.index.edit.show'
], function (event) {

var record = event.record;
record.フィールド名_1号.disabled = true;
record.フィールド名_2号.disabled = true;
record.フィールド名_3号.disabled = true;
return event;
});

//抽出条件
function condWKbn(q0, kbns) {
(抽出条件を作成)
}

function setParam(q0, kbn, appIdJi) {
var params = {
"app": appIdJi,
"query": condWKbn(q0, new Array(kbn.cd)),
"totalCount": true
};
return params;
}

})();
0

2件のコメント

Avatar
mofuku

Yoshioka さん

こんにちは。

ブラウザの開発者ツールのコンソール等に何かエラーは出ていますでしょうか?
エラーの確認の仕方は以下の記事を参考にされるとよいかと思います。
動かない?そんな時はデバッグしてみよう!入門編
kintone カスタマイズの基本的なデバッグの流れを身につけよう

また、貼っているソースコードを確認するかぎり、kintone REST API の実行の部分がもしかすると違っているかもしれないです。
参考: kintone REST API リクエスト

kintone.api('/k/v1/records', 'GET', params0, function (resp) {
record.フィールド名_1号.value = resp.totalCount;

例えば、上記の部分ですが、kintone.api() で実行したい REST API のパス「'/k/v1/records'」の部分が短縮形になっています。
短縮した REST API のパスを記述して kintone.api() を実行する場合には、kintone.api.url() で URL を取得しなければいけません。
そのため、正しく書くなら、以下のようになるかと思います。

kintone.api(kintone.api.url('/k/v1/records', true), 'GET', params0, function (resp) {
record.フィールド名_1号.value = resp.totalCount;

修正してみると動くかもしれないです。参考にしていただければと思います。

0
Avatar
Yoshioka

mofuku様

コメントを頂きありがとうございます。
返答が遅くなり申し訳ございません。

ご教示頂いた内容を実施いたしましたが、解決せずにおります。
以下、実施結果詳細をお伝えします。

>ブラウザの開発者ツールのコンソール等に何かエラーは出ていますでしょうか?
 出ていないようです。

>REST API のパス「'/k/v1/records'」の部分の修正
 教えて頂いた「kintone.api(kintone.api.url('/k/v1/records', true),~」と
 「kintone.api('/k/v1/records', ~」の両方とも試しましたが
 動きは変わりませんでした。


 (「resolve(event);」をフィールド名_1号・フィールド名_2号・フィールド名_3号のうちどれか一つにして動かしてみたところ、
  3つの「kintone.api('/k/v1/records'~」の処理が終わった順に影響されてどのフィールドが更新されるか決まる
  (「resolve(event);」の記述のある箇所に到達した時点で更新される)ようです)

0
サインインしてコメントを残してください。