// *****************************************
// (function(){実行コード})() は JavaSript
// におけるブロックの実行
// *****************************************
(function() {
"use strict";
var target = null;
// レコード一覧画面で更新した場合のイベント
kintone.events.on('app.record.index.edit.submit', function(event) {
console.log("レコード一覧画面の event オブジェクト");
console.dir( event );
// ルックアップを実装している対象 appid
var appid = 23;
// 今回更新したルックアップが参照している値
// ※ 一般フィールドの場合、要重複不可設定
var target = event.record.レコード番号R.value;
var manager = new KintoneRecordManager;
manager.getRecords(appid, target, function(records) {
console.log("レコードの取得後のイベント");
// 取得した全レコードの表示
console.dir(records);
// レコード取得後の処理
updateLookup(appid, createPutRecords(records));
// 空にしておかないと、次の UI での処理で残ってしまう
KintoneRecordManager.prototype.records = [];
KintoneRecordManager.prototype.offset = 0;
});
});
// レコード編集画面
kintone.events.on('app.record.edit.submit', function(event) {
console.log("レコード編集画面の event オブジェクト");
console.dir( event );
// ルックアップを実装している対象 appid
var appid = 23;
// 今回更新したルックアップが参照している値
// ※ 一般フィールドの場合、要重複不可設定
var target = event.record.レコード番号R.value;
var manager = new KintoneRecordManager;
manager.getRecords(appid, target, function(records) {
console.log("レコードの取得後のイベント");
// 取得した全レコードの表示
console.dir(records);
// レコード取得後の処理
updateLookup(appid, createPutRecords(records));
// 空にしておかないと、次の UI での処理で残ってしまう
KintoneRecordManager.prototype.records = [];
KintoneRecordManager.prototype.offset = 0;
});
});
// *****************************************
// kintoneと通信を行うクラス
// *****************************************
var KintoneRecordManager = (function() {
// これがこの中で作成される KintoneRecordManager
function KintoneRecordManager() {
}
// プロパティの定義
KintoneRecordManager.prototype.records = []; // 取得したレコード
KintoneRecordManager.prototype.limit = 2; // 一回あたりの最大取得件数
KintoneRecordManager.prototype.offset = 0; // オフセット
// すべてのレコード取得する メソッドの定義
KintoneRecordManager.prototype.getRecords = function(appid, target, callback) {
console.log("appid : " + appid);
console.log("target : " + target);
// kintone.api (REST APIリクエストを送信)
kintone.api(
// kintone REST APIのパス または kintone.api.urlで取得したURL
kintone.api.url('/k/v1/records', true),
// 使用するHTTPメソッド
'GET',
// APIに渡すパラメータ
{
app: appid,
// 参照条件
// ※ ここではフィールドコードを固定で定義するようにしています
query: 'LUP_参照コード = "'+ target + '" ' + (' limit ' + this.limit + ' offset ' + this.offset)
},
// APIの呼び出しが成功したら実行されるコールバック関数
// ※ function を return しているので、この中がコールバック処理です
(function(_this) {
return function(res) {
console.log("kintone.api の callback が呼び出されました:" + appid + ":" + target);
// ここからがコールバック処理
var len;
// KintoneRecordManager のプロパティに新しいレコードを追加
Array.prototype.push.apply(_this.records, res.records);
// 今回取得したレコード数
len = res.records.length;
console.log("今回取得したレコード数:" + len);
// KintoneRecordManager のプロパティ全レコード数をセット
_this.offset += len;
// 読み込み件数制限付きで、全件読む方法
if (len < _this.limit) { // まだレコードがあるか?
// 全件読み込んだので、callback を呼び出す
if (callback !== null) {
callback(_this.records); // レコード取得後のcallback
}
}
else {
// まだレコードが残っているので、offset 以降を再度呼び出して処理する
_this.getRecords(appid, target, callback); // 自分自身をコール
}
};
// this は KintoneRecordManager なので、処理内の _this が KintoneRecordManager
})(this)
);
};
// この処理の中で作成した KintoneRecordManager 関数を外の KintoneRecordManager 変数に設定する事になります
return KintoneRecordManager;
})();
// *****************************************
// 更新用オブジェクトの配列を作成するメソッド
// *****************************************
function createPutRecords(records) {
var putRecords = [];
for (var i = 0, l = records.length; i < l; i++) {
var record = records[i];
putRecords[i] = {
id: record['$id'].value,
record: {
"LUP_参照コード" : {
value: record.LUP_参照コード.value
}
}
};
}
// 更新用オブジェクトの配列
console.dir("putRecords:" + putRecords);
return putRecords;
}
// *****************************************
// 更新用 API を呼び出すメソッド
// *****************************************
function updateLookup(appId, records) {
// KintoneRecordManager.prototype.limit で割り切れるレコード数の場合
// 最後に records.length == 0 で呼ばれる
if ( records.length != 0 ) {
kintone.api(
// kintone REST APIのパス または kintone.api.urlで取得したURL
kintone.api.url('/k/v1/records', true),
// 使用するHTTPメソッド
'PUT',
// APIに渡すパラメータ
{
app: appId,
records: records
},
function(resp) {
// 更新完了時の処理
}
);
}
}
})();