プロセス管理の設定を、「次のユーザから作業者を選択」としています。
ステータス変更時、デフォルトで最上位のラジオボタンが必ず選択されているため、作業者の選択を怠ると最上位に表示されている方で登録されてしまいます。
そのため、最上位に「選択してください」をダミーで作成し、そのまま実行された場合は、エラーとし「作業者を選択してください」にさせたいと思います。
以下のように記述しましたが、チェックが掛かりません。お分かりになる方、ご教授をいただけると幸いです。
kintone.events.on([‘app.record.detail.process.proceed’], function (event){
var record = event.record;
// 作業者の選択チェック
if (record[‘作業者’][‘value’]) == ‘選択してください’{
record[‘作業者’].error = ‘作業者を選択してください。’;
}
else {
// window.alert(‘作業者が入力されました。’);
}
return event;
Hiroshiさん、こんにちは。
プロジェクト・アスノートの松田です。
app.record.detail.process.proceed イベントのオブジェクト:recordは、
ステータスが移行する前(アクションボタンを押した時点)のレコード内容なので、
移行後のステータスの作業者ではありません。
参考: https://developer.cybozu.io/hc/ja/articles/201941974#step3
対応方法ですが、
フォーム内に作業者を指定するためのユーザー選択フィールドを設置して、そこを事前に選択するようにすれば、
このイベントでも内容をチェックすることができます。
または、ステータスの設定内容にもよりますが、ユーザー選択フィールドを必須にするか、
プロセス管理のアクションの実行条件に設定してもいいのかもしれませんね。
松田様
回答いただき、ありがとうございます。
フォーム内に、「作業者選択」フィールドを付加し、そのフィールドをプロセス管理の「アクション実行前のステータス」に追加したので
以下のように表示されるようになりました。(名前は、伏せました)
が、以前としてチェックは掛からないようです。
Hiroshiさん
わたしの紹介した方法は、JavaScriptでチェックするのではなく、標準機能での対応法となります。
プロセス管理のアクションボタンを押したときの作業者選択は、選択し忘れることがあると思いますので、
レコード記入者が編集するときに、そのユーザー選択フィールドから、次の作業者を選択してもらい、
それからステータスを進める、という使い方ですね。
必ず選択してもらうために、ユーザー選択フィールドを必須項目にしておくというやり方もあると思います。
どうしてもカスタマイズでチェックさせたいということでしたら、
アクションボタンを押した時点のレコード情報がイベントオブジェクトで取れますので、そのユーザー選択フィールドの
値に対してチェックしてあげればいい、ということになりますね。
ちなみに、フィールド形式 にあるように、ユーザー選択フィールドは配列形式となっています。
値チェック時は考慮する必要があります。
松田様
お手数おかけし、申し訳ございません。
手順としては、ご認識いただいている通りです。
また、カスタマイズには拘っていません。
上のダミーはやめ、ログインユーザを初期値に設定しましたが上手くいかないようです。
Hiroshiさん
>上のダミーはやめ、ログインユーザを初期値に設定しましたが上手くいかないようです。
ということですが、新規レコード追加・保存時に次のステータスの作業者を設定してもらいたいのであれば、
初期値設定は外しておいた方が良いと思います。
フィールドを必須項目にしても、初期値が設定されていたら、意思入れしなくても必須条件を満たしていることになります。
新規レコード追加・保存時にまだ作業者がわからない、という業務プロセスでしたら、上記の方法は使えませんね。
Hiroshiさん
プロセス管理のアクションイベントについては、
event.errorに設定する必要があるかと思います。
event.error = “作業者を選択してください。”;とすれば宜しいかと思います。
もしくは、return false;でもキャンセルされますので、標準以外のアラート等を出したい場合はこちらになります。
非同期処理を行う場合はrejectでキャンセルとなります。
松田様
度々、お手数おかけします。
そもそもの業務プロセスですが、案件のスタータス管理を「プロセス管理」で行っております。
案件データは別システムから夜間バッチにてKintoneに自動で取り込まれます。翌朝、マネージャーが作業者を割り振ります。
という流れのため、結論としては使えないということですね。
なるほど。
そういうことでしたら、作業者フィールドの必須項目設定はNGですね。
この設定は外しておき、マネージャーが作業者を割り振るときにここを更新してもらう、という運用がよろしいかと思います。
(作業者=案件の担当者がレコードのデータとして明示的に残るというメリットもありますね)
そのうえで、必ず選択するようチェックをかける必要があるかどうか、ということになると思いますが、
プロセス管理のアクション実行条件で「ユーザー選択が何か選択されていること」という条件は残念ながら設定できないので、
運用でカバーできなければ、カスタマイズでチェックするということになりますね。
その場合は、プロセス管理のアクションイベント発生時に、
変更後のステータス(event.nextStatus)が目的のステータスであれば、
作業者フィールド(ユーザー選択フィールド)が何か選ばれていればOK
選ばれていない(配列長がゼロ等)ときは、堀越さんのご指摘にもあったように、event.errorにエラーを設定してreturnすることで、
エラーを表示させて、アクションをキャンセルすることができます。
サンプル:
(function() {
"use strict";
kintone.events.on("app.record.detail.process.proceed", function(event) {
var record = event.record;
if (event.nextStatus.value = "作業者割当") {
if (record['ユーザー選択']['value'].length === 0) {
event.error = 'レコードを編集して作業者を選択してください';
return event;
}
}
});
})();
松田様、堀越様
ご助言いただきありがとうございます。
作業者の選択時、先頭行以外が選択されているかという条件判定はできますでしょうか?
よろしくお願いします。