こんにちは。
初めて質問させていいただきます。
プロセスを有効にしたアプリを作成したのですが、プロセスの変更と同時にドロップダウンリストで作成したフィールドのレコードも連携して変更させたいです。
Javascriptプログラムで可能でしょうか。
もし可能であれば、サンプルプログラムなど提供していただけませんでしょうか。
厚かましいお願いですが、よろしくお願いします。
甲斐 美幸様
はじめまして、cstapの落合です。
kintoneには、プロセス管理のアクション実行イベントというイベントがあります。
このイベントのcallbackで、レコードの更新のREST APIのリクエストを行うことでご要望の機能を実現できるかと思います。
以下、プロセスのステータスをドロップダウンのフィールドに連動させるサンプルになります。
/**
* ステータス
* フィールド名:ステータス
* フィールドタイプ:ドロップダウン
* フィールドコード:status
*
* @author Yuichi Ochiai <ochiai@cstap.com>
*/
(function() {
"use strict";
// レコード一覧画面
kintone.events.on('app.record.detail.process.proceed', function(event) {
var record = event.record;
record.status.value = event.nextStatus.value;
// レコードの更新
kintone.api(
kintone.api.url('/k/v1/record', true),
'PUT',
{
app: kintone.app.getId(),
id: kintone.app.record.getId(),
record: record
}
);
return event;
});
})();
以上、参考になりますでしょうか?
落合さん
さっそくご回答いただきどうもありがとうございます。
プログラマではないのですが、実装にチャレンジしたいと思います。
甲斐 美幸様
わからない点がありましたら、またご質問ください。
落合さん
ラジカルブリッジの斎藤です。
ちょうど私も同じようなことをしようとしていて、リファレンスを見ていたのですが、
ここの補足に
・eventオブジェクトを return することでレコード情報を更新できます。
とあるので、落合さんが書かれたコードの内、
// レコードの更新
以下の部分は無くても期待通りの動きになるのではないかと思います。
私が以前作ったアプリでも、プロセス管理のアクション実行イベントの際に、任意のフィールドに値をセットして return event; するだけで値が更新されました。
(function() {
“use strict”;
// レコード一覧画面
kintone.events.on(‘app.record.detail.process.proceed’, function(event) {
var record = event.record;
record.status.value = event.nextStatus.value;
return event;
});
})();
尚、私が今はまっているのは、このイベントの中でテーブルの行を動的に増やしてテーブル内フィールドに値をセットして return event; しても、うまく更新ができない?というところです。
色々試す中で、落合さんが書かれたkintone.api()による更新も試してみましたが、return event;によりプロセス管理のステータスが変わる際も内部的にはレコードが更新され、revisionが上がるようで、タイミングによるのですが、kintone.api()の方が先に成功すると revisionの不一致でステータスが変わらないケースが時折ありました。
以上、ご参考まで