お世話になっております。
日々こちらを参照しまして、kintoneのカスタマイズを行っておりますが、どうしても対応ができない部分がございまして、投稿させていただきました。
下記コードは2つのアプリをAとBにおいて、Aアプリでフィールド「serviceName」をBアプリのルックアップ先として、紐づけているフィールド2か所をAアプリが更新された場合にBアプリのルックアップ先も更新をしたいために、Aアプリに設定しているものになります。
【Aアプリ】を下記のように更新した場合に、
- サービス名 : 自転車
- 担当者①:1さん ⇒ 2さん
- 担当者②:3さん ⇒ 4さん
【Bアプリ】も同じように担当者①と担当者②を更新したい。
- サービス名 : 自転車(ルックアップ)
- 担当者①:1さん ⇒ 2さん(フィールドコピー)
- 担当者②:3さん ⇒ 4さん(フィールドコピー)
更新自体はレコードのサービス名を上書きすることで実施しております。
同期処理を加えていないためなのかがわからないのですが、一覧画面・詳細画面ともにsubmit.successの場合に動作しているにも関わらず、フィールドが更新されない場合あります。
この場合の解決方法に関してご教示いただけますと幸いです。
(function() {
‘use strict’;
kintone.events.on([‘app.record.edit.submit.success’, ‘app.record.index.edit.submit.success’], function(event) {
// 更新レコードからサービス名を取得
var serviceName = event[‘record’][‘serviceName’][‘value’];
// 「サービス名」を引渡して検索処理関数を実行
fetchRecords(serviceName);
});
function fetchRecords(serviceName) {
var appId = JINJI_APPID;
// 抽出条件 ⇒ 該当サービス名かつ在籍状況が「入社前または在籍」のレコード
var query = “ルックアップ_0 = "” + serviceName + “" and ラジオボタン in ("入社前","在籍") order by Record_number asc”;
// 抽出情報 ⇒ レコード番号, サービス名
var fields = [“$id”, “ルックアップ_0”];
// 検索条件
var params = {
‘app’ : appId
,‘query’ : query
,‘fields’ : fields
};
// 検索処理実行
kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘GET’, params, function(resp) {
// success
console.log(resp);
// 検索結果が1レコード以上ある場合、更新情報生成処理を実行
if(resp.records.length > 0) {
createUpdateRecords(appId, resp.records);
};
}, function(error) {
// error
console.log(error);
});
};
function createUpdateRecords(appId, records) {
// 更新用のレコード格納用配列
var afterRecords = [];
// 検索結果のレコード数分処理を実施
for (var i = 0; i < records.length; i++) {
// レコード情報を変数にセット
var newRecord = records[i];
// 更新対象のレコードのレコード番号とサービス名を配列に格納
afterRecords[i] = {
‘id’ : newRecord[‘$id’][‘value’]
,‘record’ : {
‘ルックアップ_0’ : {
value : newRecord[‘ルックアップ_0’][‘value’]
}
}
};
};
// アプリIDとレコード情報を引き渡し用のパラメータにセット
var params = {
‘app’ : appId
,‘records’ : afterRecords
};
// 更新対象が1レコード以上あれば更新処理を実施
if(afterRecords.length > 0) {
updateExecution(params);
};
};
/* 更新処理実行
* @param params 更新用のアプリIDとレコード情報
*/
function updateExecution(params) {
kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘PUT’, params, function(resp) {
// success
console.log(resp);
}, function(error) {
// error
console.log(error);
});
};
})();