該当レコードが1件の場合のみ、データが取得出来ず、API レスポンスが「resp」に格納されない

お世話になっております。kintone REST APIに関してご質問させて頂きます。ご指導いただけると幸いです。

現在、

・アプリA:報告書メール作成
・アプリB:報告書データ

の2つのアプリを開発中です。具体的には、

・アプリA側で新規レコード作成時 or 既存レコード編集時に、
・アプリBの報告書データをkintone.apiにてデータを取得
・アプリAのフィールドに格納する

という機能となります。

アプリB:報告書データですが、

・お客様Aの報告書データ:1件
・お客様Bの報告書データ:2件
・お客様Cの報告書データ:8件

というように、データが複数登録されており、アプリAからアプリBのデータをkintone.apiにて顧客IDをキーにデータを取得しているのですが、

・お客様Aの報告書データ:1件<==取得NG
・お客様Bの報告書データ:2件<==取得OK
・お客様Cの報告書データ:8件<==取得OK

というように、アプリB:報告書データ側の該当レコードが1件の場合のみ、データが取得出来ず、API レスポンスが「resp」に格納されない状態です。

なお、アプリA側では、アプリB側からの関連レコードを表示させていますが、APIでは取得できなかった、[お客様Aの報告書データ:1件]も無事表示されています。

詳しい方がいらっしゃいましたら、アドバイスいただけると幸いです。よろしくお願いいたします。

 

以下、ソースコードとなります。

(function() {
‘use strict’;

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

// 変数各種:関連レコードの絞り込みに利用するフィールドコード
const FIELD_A = ‘gk_wellness_club_id_lookup’; //ルックアップフィールドのフィールドコードを指定
const FIELD_B = ‘customer_id’; //利用者様IDのフィールドコードを指定

// 関連レコードの絞り込みに利用するフィールドコード
const Id = kintone.app.getRelatedRecordsTargetAppId(‘conference_relation_records_all’); //関連レコード表示フィールドのフィールドコードを指定
const offset = 0;
const limit = 10;
let CustomerIdValue = event.record[FIELD_A].value;
let opt_Field = FIELD_B + ‘=’ + ‘"’ + CustomerIdValue + ‘"’;
let params = {totalCount: true, app: Id, query: opt_Field + ’ order by レコード番号 desc limit ’ + limit + ’ offset ’ + offset};

// アプリからデータ取得する(thenを使うことで resp の中にデータが格納される)
kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘GET’, params).then(function(resp) {
let records_count = resp.records.length;
let conference_date_latests_count_mix_all =
" " + resp.records[1].conference_date.value + " " + resp.records[1].conference_hour.value + “” + " " + resp.records[0].conference_date.value + " " + resp.records[0].conference_hour.value + “”

  • “●ひと言” + “(” + resp.records[1].conference_date.value + “)” + “” + resp.records[1].message_from_nurse.value + “”
  • “●ひと言” + “(” + resp.records[0].conference_date.value + “)” + “” + resp.records[0].message_from_nurse.value ;

// デバッグログ
console.log(resp);
console.log(records_count);
console.log(conference_date_latests_count_mix_all);

// 報告アプリから取得した値を、報告書作成アプリのフィールドに代入して保存
if (records_count > 0) {

//フィールドを連結して「レコード」をセットする
let obj_all = kintone.app.record.get();
obj_all.record.conference_history_text_for_mail_all.value = conference_date_latests_count_mix_all;
kintone.app.record.set(obj_all);

} else {
let api_message = resp.message;
console.log(api_message);

}

return event;
}).catch(function(resp) {

// エラー表示をする
event.error = resp.message;
return event;
});

});

})();

// アプリからデータ取得する(thenを使うことで resp の中にデータが格納される)
kintone.api(kintone.api.url('/k/v1/records', true), 'GET', params).then(
function(resp) {
console.log(resp)
debugger

respにはデータは来ていました。

console.logとdebuggerを入れて確認しました。

" " + resp.records[1].conference_date.value + " " + resp.records[
1].conference_hour.value + "" + " " + resp.records[0].conference_date
.value + " " + resp.records[0].conference_hour.value + "" +
"●ひと言" + "(" + resp.records[1].conference_date.value + ")" +
"" + resp.records[1].message_from_nurse.value + "" +
"●ひと言" + "(" + resp.records[0].conference_date.value + ")" +
"" + resp.records[0].message_from_nurse.value;

原因は、resp.records[1].conference_date.value のような 指定が原因のようです。

1件のときは[0]には値が入るが[1]はデータがないのでエラーを吐かず落ちているようです。

例えば

  let conference_date_latests_count_mix_all = resp.records[0].conference_date.value

にしたら、

// デバッグログ
console.log(resp);
console.log(records_count);
console.log(conference_date_latests_count_mix_all);

が表示されるようになりました。

「テンプレートリテラル」を利用されると複数行で改行がある文字列を組み立てやすいとおもいます。

harada様

お世話になっております。無事、機能を実装することが出来ました。ご指導ありがとうございました。

#debugger、テンプレートリテラル、初めて知りました。引き続き、格闘いたします。

以下、改良後のソースコードとなります。

-------------------ここから---------------------------

(function() {
‘use strict’;

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

// 変数各種:関連レコードの絞り込みに利用するフィールドコード
const FIELD_A = ‘gk_wellness_club_id_lookup’; //ルックアップフィールドのフィールドコードを指定
const FIELD_B = ‘customer_id’; //利用者様IDのフィールドコードを指定
const FIELD_C = ‘conference_date’;//面談実施日が格納されているフィールドコードを指定

// 関連レコードの絞り込みに利用するフィールドコード
const Id = kintone.app.getRelatedRecordsTargetAppId(‘conference_relation_records_all’); //関連レコードのフィールドコードを指定
const offset = 0;
const limit = 10;
let CustomerIdValue = event.record[FIELD_A].value;
let opt_Fields_01 = FIELD_B + ‘=’ + ‘"’ + CustomerIdValue + ‘"’; //利用者様IDを指定
let opt_Fields_02 = " and " + FIELD_C + " >= " + “LAST_MONTH()”; //日付で絞り込み
let params_mix = {totalCount: true, app: Id, query: opt_Fields_01 + opt_Fields_02 + ’ order by レコード番号 desc limit ’ + limit + ’ offset ’ + offset};

// アプリからデータ取得する(thenを使って resp の中にデータを格納する)
kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘GET’, params_mix).then(function(resp) {
let records_count = resp.records.length;

// デバッグログ
console.log(resp);
console.log(records_count);
console.log(params_mix);

// 報告アプリから取得した値をこのアプリのフィールドに代入して保存
if (records_count === 0) {

let conference_date_latests_count_mix_all = “●お知らせ:” + “” + “直近、1ヶ月間のご利用がございませんでした。” + “” ;

//「内容」フィールドに連結した「レコード」をセットする
let obj_all = kintone.app.record.get();
obj_all.record.conference_history_text_for_mail_all.value = conference_date_latests_count_mix_all;
kintone.app.record.set(obj_all);
console.log(conference_date_latests_count_mix_all);

} else if (records_count === 1) {

let conference_date_latests_count_mix_all = resp.records[0].conference_date.value + " " + resp.records[0].conference_hour.value + “”

  • “●ひと言” + “(” + resp.records[0].conference_date.value + “)” + “” + resp.records[0].message_from_nurse.value + “” ;

//「内容」フィールドに連結した「レコード」をセットする
let obj_all = kintone.app.record.get();
obj_all.record.conference_history_text_for_mail_all.value = conference_date_latests_count_mix_all;
kintone.app.record.set(obj_all);
console.log(conference_date_latests_count_mix_all);

} else {

let conference_date_latests_count_mix_all =
" " + resp.records[1].conference_date.value + " " + resp.records[1].conference_hour.value + “” + " " + resp.records[0].conference_date.value + " " + resp.records[0].conference_hour.value + “”

  • “●ひと言” + “(” + resp.records[1].conference_date.value + “)” + “” + resp.records[1].message_from_nurse.value + “”
  • “●ひと言” + “(” + resp.records[0].conference_date.value + “)” + “” + resp.records[0].message_from_nurse.value + “” ;

//「内容」フィールドに連結した「レコード」をセットする
let obj_all = kintone.app.record.get();
obj_all.record.conference_history_text_for_mail_all.value = conference_date_latests_count_mix_all;
kintone.app.record.set(obj_all);
console.log(conference_date_latests_count_mix_all);

}

return event;
}).catch(function(resp) {

// エラー表示をする
event.error = resp.message;
return event;
});

});

})();

-------------------ここまで---------------------------

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。