2 回答
- 10-1
ご回答ありがとうございます
JIRA標準では難しいのですよねやはり・・・
ScriptRunnerは導入されていますが、scriptの書き方がわからないので
>アドオンを使わない場合、
作成した transition counter 用のフィールドを transition の画面に設定して
以下の内容をフィールドの説明欄に記入すれば
transition 画面が表示されるたびに +1 されるようにはできたかと思います。
(フィールド自体は非表示にしています)こちらを利用してみようと思います
作成したカスタムフィールドのディスクリプションに、共有頂いたScriptを記入するという理解でよいでしょうか?
ちなみにScript内の
customfield_10705
は作成したカスタムフィールドのIDになりますでしょうか?
- Shuzaburo Doba
はい、
フィールドの説明欄に記入して動作させます。また "customfield_10705" はご認識の通りカスタムフィールドの ID です。
- Shuzaburo Doba
ScriptRunner が導入されているとのことで、
特にスクリプトを作成しなくても ScriptField を作成して
トランジションの回数を取得できそうでしたが
いかがでしょうか...? - fantasista
ご共有ありがとうございます
弊社側はオンプレなのですが、画面の情報がだいぶ違うようです
弊社のJIRAは現在JIRA Software 7.3.4なのですが
バージョンの違いでしょうか?
- Shuzaburo Doba
すみません、おそらく ScriptRunner のバージョンの差かと思われます。
ScriptRunner 5.1 くらいからはできると思いますがいかがでしょうか...?
- fantasista
5.0.4でした
アップデートした際に確認してみます!!
特定Fieldに+1する処理は共有頂いたScriptで実現できました!ありがとうございました!!
- Shuzaburo Doba
ありがとうございます!よかったです!!
ちなみに ScriptRunner をお持ちなら ScriptListener でもできるので以下を作成してみました。
import com.atlassian.jira.component.ComponentAccessor; import com.atlassian.jira.issue.CustomFieldManager; import com.atlassian.jira.issue.fields.CustomField; import com.atlassian.jira.issue.changehistory.ChangeHistoryManager; import com.atlassian.jira.issue.IssueManager; import com.atlassian.jira.issue.Issue; import org.ofbiz.core.entity.GenericValue; import com.atlassian.jira.issue.changehistory.ChangeHistory; import com.atlassian.jira.issue.history.ChangeItemBean; import com.atlassian.jira.user.ApplicationUser; import com.atlassian.jira.event.type.EventDispatchOption; Long CUSTOM_FIELD_ID = 12306L; CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager(); ChangeHistoryManager changeHistoryManager = ComponentAccessor.getChangeHistoryManager(); IssueManager issueManager = ComponentAccessor.getIssueManager(); Issue issue = issueManager.getIssueObject(event.getIssue().getId()); CustomField counterField = customFieldManager.getCustomFieldObject(CUSTOM_FIELD_ID); Double value = (Double) counterField.getValue(issue); // プロジェクトリーダーが更新したことにする ApplicationUser updateUser = issue.getProjectObject().getProjectLead(); GenericValue changeLog = event.getChangeLog(); if(changeLog){ ChangeHistory changeHistory = changeHistoryManager.getChangeHistoryById(changeLog.getLong("id")); List<ChangeItemBean> changeItemBeans = changeHistory.getChangeItemBeans(); for(ChangeItemBean changeItemBean : changeItemBeans){ if(changeItemBean.getField() == "status"){ Double setValue; if(value){ setValue = ++value; }else{ setValue = 1; } issue.setCustomFieldValue(counterField, setValue); issueManager.updateIssue(updateUser, issue, EventDispatchOption.DO_NOT_DISPATCH, false); } } }
トランジション時はデフォルトでは GenericEvent が発生するかと思うのですが、
トランジションによっては変更することもできるので
とりあえず AllIssueEvent でこちら突っ込めば動作するように見受けられました。"CUSTOM_FIELD_ID = 12306L" の部分はカスタムフィールド ID に置き換えてください。
コメントを追加... - 10-1
Jira の標準では難しそうですね...
Enhancer Plugin for Jira アドオンで transition counter のフィールドを作成できるようです。
transition の事後操作でカスタムフィールド値を更新するアドオンはあるかと思いますが、
ScriptRunner for Jira を使えば事後操作一つひとつに設定しなくても
課題更新時に更新がステータスだったかを判定してフィールドの値を +1 するようにできるかと思いました。アドオンを使わない場合、
作成した transition counter 用のフィールドを transition の画面に設定して
以下の内容をフィールドの説明欄に記入すれば
transition 画面が表示されるたびに +1 されるようにはできたかと思います。
(フィールド自体は非表示にしています)<script> AJS.toInit(function() { var countField = document.getElementById('customfield_10705'); if (countField) { countField.parentElement.style.display = 'none'; var val = countField.value; if (val) { countField.value = Number(val) + 1; } else { countField.value = 1; } } }); </script>
transition すべてにこのフィールドが含まれる画面を設定しないといけませんが...
- Shuzaburo Doba
すみません、
ScriptRunner でもわざわざ更新時の判定をしなくても transition の回数を表示するように
Built-in のフィールドが作成できそうでした... - 樋口晃
それは、ScriptRunner の Built-in のフィールドですか?
- Shuzaburo Doba
はい、
ScriptRunner の Built-in で No. of Times In Status があるので、
これで対象のステータスを選択すればトランジションの実行回数がわかるかと思いました。
コメントを追加...
JIRAのワークフローでtransitionした際
特定の数値フィールドに入力されている値を+1させることは可能でしょうか?
transitionするたびに
1 > 2 > 3
という様に何回transitionさせたかカウントしたいです