別のアプリから条件に合うレコード集を取得したい

kintone,javascriptを勉強し始めの初心者です。以下ご教授お願いいたします。

あるアプリ(以下アプリA)に日付フィールド、担当者フィールド、金額フィールドがあります。

別の集計用アプリ(以下アプリB)に集計開始日フィールドと集計終了日フィールド及び、担当者フィールドが入力してあります。上記の条件でアプリAから抽出したレコード件数をアプリBの担当件数フィールドに格納したいと思っております。

javascriptの本やこのサイトの色々な投稿を閲覧しましたが、よくわかりません。会社から1週間でアプリの作成を命じられ困っております。

何を勉強したらよいかや、サンプルプログラムなどありましたら、是非ご教授をお願い申し上げます。

 

タイトルが間違ってました。

「レコード集」ではなく、「レコード数」です。すみません。

坂本秀治さん
cstapの瀧ヶ平です。

REST APIのレコード一括取得に関してはこちらのTipsこちらのドキュメントを参考に実装すると良いかと思います。

具体的な流れとしては、

  1. レコードの作成/編集画面の表示時イベントでレコードの必要な情報を変数に格納する
  2. kintone.apiメソッドでレコードの一括取得を行う。この際、totalCountパラメータをtrueに、queryパラメータを “{{集計開始日}} <= 日付 and {{集計終了日}} >= 日付 and 担当者 = {{担当者}}” となるようにする(波括弧でくくってある部分はアプリBのフィールドの実際の値にする)
  3. レスポンスが返ってきたときのコールバック処理で件数を取得(response.totalCount)してレコードに格納する

という流れになります。
また、こちらにあるように、レコードの変更に関しては、kintone.apiメソッドが返すKintone Promiseオブジェクトをイベントリスナーの返り値にすることで、kintone.api().then(function(res){…})内の非同期処理を待ってからレコードを変更する必要があります。

以下にサンプルのコードを書いてみたので、参考にしていただければ幸いです。

 

(function() {
"use strict";
kintone.events.on(["app.record.edit.show", "app.record.create.show"], function(event) {
var end, record, start, appId, staff;
appId = 000;
record = event.record;
start = record["集計開始日"].value;
end = record["集計終了日"].value;
staff = record["担当者"].value;
return kintone.api(kintone.api('/k/v1/records', true), "GET", {
app: appId,
totalCount: true,
query: start + " <= 日付 and " + end + " >= 日付 and 担当者 = " + staff
}).then(function(res) {
record["担当件数"].value = res.totalCount;
return event;
});
});
})();

 

 

瀧ヶ平さん、ご教授ありがとうございます。

一行ずつ理解しながら、試行してみます。ありがとうございます。

瀧ヶ平さんが書いてくださっているサンプル、お気づきかと思いますが、・・・現状でkintone.Promiseオブジェクトが返せるのはsubmitとproceedイベントだけなので、「show」のところは「submit」で、kintone.api()の第1引数は、パスかURLということで、「‘/k/v1/records’」か「kintone.api.url(‘/k/v1/records’, true)」ですね。あと、クエリも値の方をダブルクウォテーションで括らないとエラーになるものが多いので括っておくのが良いですね。

(function() {
"use strict";
kintone.events.on(["app.record.edit.submit", "app.record.create.submit"], function(event) {
var end, record, start, appId, staff;
appId = 000;
record = event.record;
start = record["集計開始日"].value;
end = record["集計終了日"].value;
staff = record["担当者"].value;
return kintone.api(kintone.api.url('/k/v1/records', true), "GET", {
app: appId,
totalCount: true,
query: '"' + start + '" <= 日付 and "' + end + '" >= 日付 and 担当者 = "' + staff + '"'
}).then(function(res) {
record["担当件数"].value = res.totalCount;
return event;
});
});
})();