shibatax
(Kenji Shibata)
1
レコード詳細画面が表示された時に、ロジック内で自動計算された値をフィールドに保存したく、kintone.app.record.set(record) を使おうとしました。
しかし、エラーが発生して保存できないため、以下のドキュメントを読むと
kintone.events.on()
のイベントハンドラー内では実行できません。
このイベントハンドラー内で、レコードの値をセットするには、ハンドラーに渡さ> れる引数のイベントオブジェクトを return してください。
と書かれています。
困ったことに具体的なサンプルのコードが見つからず、解決方法をイメージできません。
どのような解決方法になるか、教えていただけますと幸いです。
よろしくお願いいたします。
@shibatax さん
こんにちは、少しお力になれそうだったので回答させていただきました。
そうですよね、そのようにしか書かれてないと わからないですよね
詳細画面では、event変数をreturnしても値もできないので、REST APIで値を更新する必要があります。
尚且つ、値を反映されたことを確認するためには値を変更後画面をリロードする必要もあります。
以下に簡単にフローとサンプルコード書いてみますね。
レコード詳細画面イベント発火
↓
event変数や計算したロジックの結果などの値を取得
↓
REST APIで値を更新
↓
画面を更新
簡単に書くとこんなフローになるかと思われます。
コードは、自社の社内共有用に作成してたコードを共有しますね。
(() => {
'use strict'
//フィールドコード test , test2 , test3 の文字列一行が作成されていることを想定。
//↓ awaitを使用するためasync関数にする。
kintone.events.on(['app.record.detail.show'], async (event) => {
const record = event.record;
//↓このように画面リロードしたかどうか判別する変数がなければ画面リロードが永遠ループする。
if (window.name !== "abc") {
const test = record.test.value + '(複製)';
//今表示しているレコードのappIDとレコード番号を指定。
const body = {
app: kintone.app.getId(),
id: kintone.app.record.getId(),
record: {
test2: {
value: test,
},
test3: {
value: test,
}
}
};
//↓ REST APIのPUTメソッドを使用して表示しているレコードを更新
await kintone.api(kintone.api.url('/k/v1/record.json', true), 'PUT', body).then(() => {
//↓ここで画面リロードする処理をおこなう。
if (window.name !== "abc") {
location.reload();
window.name = "abc";
} else {
window.name = "";
}
});
}
return event;
});
})();
ざっくり書きましたが、恐らく言われている事と類似しているんじゃないかなと勝手ながら考えております。
加えて参考URLを添付いたします。
「いいね!」 1
shibatax
(Kenji Shibata)
3
ご教授いただき、ありがとうございます!
なるほど、うすうす感じてはいたのですが、やはりREST APIを使うしかないのですね。
他のアプリとの連携で、REST APIによる値の変更はすでに動いているので、そのメソッドを利用すれば(自アプリに向ければ)よさそうです。
大変助かりました。
「いいね!」 1
system
(system)
クローズされました:
4
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。