2 回答
- 321
こちらは実現可能でしょうか。
また、エラー時の文言等は設定できるのでしょうか。
はい、どちらもできます。
Script Validator [ScriptRunner] を選択すると、4パターンぐらいValidatorがあり
Simple Scripted Validator が一番シンプルで以下サンプルの通りスクリプトから true,false のどちらかを return することでfalseの時に指定したエラーメッセージが表示できるようになります。
今回のケースだと以下のようなスクリプトになりますかね。
import com.atlassian.jira.component.ComponentAccessor; import com.atlassian.jira.issue.CustomFieldManager; import com.atlassian.jira.issue.fields.CustomField; import com.atlassian.jira.issue.Issue; import com.opensymphony.workflow.InvalidInputException; import java.util.Date;; import java.sql.Timestamp; import org.apache.commons.lang.time.DateUtils; CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager(); CustomField customField = customFieldManager.getCustomFieldObject(10400L); // フィールドに値が入っている場合 if (issue.getCustomFieldValue(customField) != null) { Date customFieldDate = new Date((issue.getCustomFieldValue(customField) as Timestamp).getTime() as Long); // 現在時刻から3日後 Date checkDate = DateUtils.addDays(new Date(), 3); // 日付のみで比較(時刻は比較しない) if (DateUtils.truncatedCompareTo(checkDate, customFieldDate, Calendar.DAY_OF_MONTH) > 0) { // 設定したエラーメッセージ表示 return false; } } // エラーメッセージなし return true;
スクリプト内の 10400 は御社の特定項目のカスタムフィールドIDに変更してください。
Jira標準の日付処理関数でもできますが、楽するためライブラリ使っています。
もう少し柔軟にエラーメッセージを処理したい場合は Custom script validator を選択して
以下のように InvalidInputException を発生させる必要があります。
https://scriptrunner.adaptavist.com/latest/jira/custom-workflow-functions.html
今回のケースだと以下のようなスクリプトになりますかね。
import com.atlassian.jira.component.ComponentAccessor; import com.atlassian.jira.issue.CustomFieldManager; import com.atlassian.jira.issue.fields.CustomField; import com.atlassian.jira.issue.Issue; import com.opensymphony.workflow.InvalidInputException; import java.util.Date;; import java.sql.Timestamp; import org.apache.commons.lang.time.DateUtils; CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager(); CustomField customField = customFieldManager.getCustomFieldObject(10400L); // フィールドに値が入っている場合 if (issue.getCustomFieldValue(customField) != null) { Date customFieldDate = new Date((issue.getCustomFieldValue(customField) as Timestamp).getTime() as Long); // 現在時刻から3日後 Date checkDate = DateUtils.addDays(new Date(), 3); // 日付のみで比較(時刻は比較しない) if (DateUtils.truncatedCompareTo(checkDate, customFieldDate, Calendar.DAY_OF_MONTH) > 0) { throw new InvalidInputException(customField.getId(), String.format("現在日付+3日(%s) <= フィールドの値(%s) になるように設定してください", checkDate, customFieldDate)); } } // エラーメッセージなし
スクリプト内の 10400 は御社の特定項目のカスタムフィールドIDに変更してください。
Jira標準の日付処理関数でもできますが、楽するためライブラリ使っています。
のスクリプトとかも参考になると思います。
コメントを追加... - 10-1
ありがとうございます。
大変助かりました。
- せるおん
すいません、もう1点だけよろしいでしょうか。
バリデータにて、報告者本人以外はトランジションできるが、
報告者のみトランジションできないようにはできるでしょうか。
お手数をお掛けいたしますが、よろしくお願い致します。
- Kengo Ohsaki
せるおん-san,
バリデータにて、報告者本人以外はトランジションできるが、
報告者のみトランジションできないようにはできるでしょうか。
はい、できます。
Simple Scripted Validator だと以下のようなスクリプトになるかと思います。
import com.atlassian.jira.component.ComponentAccessor; // 報告者が設定されている かつ 報告者が現在ログインしている人以外であればトランジションOK if (issue.getReporter() != null && issue.getReporter().equals(ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()) == false) { return true; } return false;
- せるおん
大変助かりました。
ありがとうございました。
コメントを追加...
ワークフロー遷移時に、ある特定日付項目のバリデータを設けたく、
Script Validator [ScriptRunner]にて、特定項目に入っている日付の値が「現在日付+3日<=特定項目」
となるように設定したい思っております。
こちらは実現可能でしょうか。
また、エラー時の文言等は設定できるのでしょうか。