何を実現したいのかを書きましょう
①このJSを設定するアプリでUSER(ユーザー選択)を行う
②選択されたユーザーと一致する値をもつアプリID:2のAccount(ユーザー選択)のレコードを検索
③一致するレコードのID(文字列)をコピーし、①のアプリのID(文字列複数)にカンマ区切りでコピー
(例えば、USERで2つアカウントを設定すると①のアプリのIDフィールドにID1,ID2のような形で入る)
発生した問題やエラーメッセージを具体的に書きましょう
新規レコード追加時には想定通りの挙動
編集保存時に[“MODIFIER型のフィールドに値を設定することはできません。”]のエラーが出る
原因はPUTする際に更新者フィールドの値をkintone側で自動でセットしてしまっていることと推測
更新者フィールド削除処理も試すも効果がなかった
実行したコードをコピー&ペーストしましょう
(function() {
“use strict”;
// レコードが追加または編集されたときのイベント
kintone.events.on(['app.record.create.submit', 'app.record.edit.submit'], function(event) {
// アプリID
var anotherAppId = 2; //
// ユーザ選択フィールドの値を取得
var userFieldValues = event.record['USER'].value;
// ユーザIDを取得して比較するための配列を作成
var selectedUserIds = userFieldValues.map(function(user) {
return user.code; // ユーザーIDを取得するためにはcodeプロパティを使用します
});
// 別のアプリからレコードを検索して条件に合致するレコードを取得
kintone.api(kintone.api.url('/k/v1/records', true), 'GET', {
"app": anotherAppId,
"query": 'Account in ("' + selectedUserIds.join('","') + '")',
"fields": ["ID"]
}, function(resp) {
if (resp.records.length > 0) {
// 別のアプリから取得したレコードのIDをカンマ区切りで結合して設定
var roomIds = resp.records.map(function(record) {
return record['ID'].value;
}).join(',');
event.record['ID'].value = roomIds.toString(); // 文字列に変換して設定
// レコードの内容を更新
kintone.app.record.set({record: event.record});
// レコードが新規作成か更新かを確認
var method = (event.type === 'app.record.create.submit') ? 'POST' : 'PUT';
// レコードIDを取得
var recordId = (event.type === 'app.record.edit.submit') ? event.recordId : null;
// レコードを保存
kintone.api(kintone.api.url('/k/v1/record', true), method, {
"app": kintone.app.getId(),
"record": event.record,
"id": recordId // 更新時にレコードIDを指定
}, function(saveResp) {
// レコードの保存が成功した場合の処理
console.log('レコードが正常に保存されました:', saveResp);
// 保存後の画面遷移
location.href = "/k/" + kintone.app.getId() + "/"; // レコード一覧に遷移
}, function(saveError) {
// レコードの保存が失敗した場合の処理
console.error('レコードの保存中にエラーが発生しました:', saveError);
alert("レコードの保存中にエラーが発生しました: " + saveError.message);
});
} else {
alert("別のアプリのレコードが見つかりませんでした。");
}
}, function(error) {
console.error(error);
alert("エラーが発生しました: " + error.message);
});
// イベントのデフォルトの動作を中止
return false;
});
})();