新規投稿
フォローする

kintoneで他のアプリから取得した値の一部を利用したい

いつもたいへんお世話になっております。

 

初心者向けフォーラムでも質問させていただいたのですが

こちらにも投稿させていただきました。

 

単価表アプリに登録した単価一覧を他のアプリから取得し、

値を計算に使いたいと考えています。

単価表アプリの中身を取得するまではできたのですが、

値の一部を取り出す部分をどう書けばいいのか、ご教授願えませんでしょうか。

 

単価表アプリは以下のような構成になっています。

 10:00 18:00 2000円

 18:00 22:00 2500円 ……

 

(関数一覧js)

(function() {
"use strict";
function fetchRecords(opt_search) {
var allRecords = [];
var s_tanka = [];
var query = '(summary like "' + opt_search + '")order by レコード番号 asc limit 1';
var fields_id = [
"st_h_T1", "et_h_T1", "p_h_T1",
"st_h_T2", "et_h_T2", "p_h_T2",
"st_h_T3", "et_h_T3", "p_h_T3",
"st_h_T4", "et_h_T4", "p_h_T4",
"st_k_T1", "et_k_T1", "p_k_T1",
"st_k_T2", "et_k_T2", "p_k_T2",
"st_k_T3", "et_k_T3", "p_k_T3",
"st_k_T4", "et_k_T4", "p_k_T4"];
var params = {app: 21, query: query, fields: fields_id};
return kintone.api('/k/v1/records', 'GET', params).then(function(resp) {
allRecords = resp.records;
s_tanka = allRecords[0];
return s_tanka;
});
}
window.funcList = window.funcList|| {};
window.funcList.fetchRecords = fetchRecords;
})();

本体js

(function() {
"use strict";
var tanka = [];
var search = "¥2800(通常)"; // <- 将来的に可変とする予定です。
var edit_events = [
'app.record.detail.show'
];
kintone.events.on(edit_events, function(event) {
var tanka = window.funcList.fetchRecords(search);
console.log(tanka); // <- ここでフィールドコード(st_h_T1など)を指定して取り出せるようにしたいです。
return event;
});
})();

 

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

0

6件のコメント

Avatar
FM

var sthT1 = tanaka.st_h_T1.value;
等でフィールドの値を取れると思います。
見当違いの回答でしたらすみません。

0
Avatar
ito

FMさま

 

ご返信ありがとうございます。

本体jsの、

var tanka = window.funcList.fetchRecords(search);

の下を

var hoge = tanka.st_h_T1.value;
console.log(hoge);

としてみたところ、下記のようなエラーが出てしまいます。

関数一覧jsの、kintone.api(……の中でconsole.logを行う分には、その方法で取り出せるのですが

return kintone.api(……とした後で中を見ると下記のようになり、

これが配列でないから取り出せないのかと思うのですが、配列にする方法が分からず……。

(return Array.from(kintone.api('……を試してみましたが空の配列になってしまいます

0
Avatar
FM

失礼致しました。
Promiseオブジェクトを使用しているので変数に入れるとラップされて返っているようです。
変数に入れるのではなく、戻り値を使用します。

var tanka = window.funcList.fetchRecords(search);
console.log(tanka); // <- ここでフィールドコード(st_h_T1など)を指定して取り出せるようにしたいです。

// ↓上記部分を以下に書き換える

window.funcList.fetchRecords(search).then(data => {
console.log(data.st_h_T1.value); // data.フィールドコード.value で取り出せるようになります
});

 

0
Avatar
ito

FMさま

ありがとうございます! 確認できました!
全然取り出せずに困っていたので本当に助かりました。

 

そして、重ねての質問となり恐縮なのですが
この値を変数に文字列・数値・配列のどれかで入れる方法はないものでしょうか?

単価表を参照する箇所がたくさんあるので、
単価表をルックアップしている項目が変更された時だけ単価表を見に行くようにして、
計算に使う別の値が変更された時は参照しないようにしたほうが
動作が重くならないかな?と思っているのですが……。

仕様的に無理なようでしたら計算は全ていただいたコードの data => {} 内で行うようにします。

0
Avatar
FM

Promiseオブジェクト内の値は返り値を使用するしか無さそうです。

fetchRecordsの返り値を受け取ってdataという引数に渡しているので、
dataを使用する度にfetchRecordsが実行されている訳では無いです。
ので、data => {} 内でデータ量の多いGETやPOSTをしない限り動作速度の心配は無いと思います。

可読性を気にする場合は、.thenでメソッドチェーンを利用してネストを浅くする、計算等を関数で切り出す、などする必要があります。

0
Avatar
ito

FMさま

そうなのですね。お教えいただきありがとうございます。
実運用の際、var edit_eventsにたくさんイベントを入れることになると思うので
もしそれで動作速度に問題が出たら、また考えてみます。

ありがとうございました!

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