2
1
0

JIRAのワークフローでtransitionした際

特定の数値フィールドに入力されている値を+1させることは可能でしょうか?


transitionするたびに

1 > 2 > 3

という様に何回transitionさせたかカウントしたいです

    Commentコメントを追加...

    2 回答

    1.  
      1
      0
      -1

      ご回答ありがとうございます

      JIRA標準では難しいのですよねやはり・・・


      ScriptRunnerは導入されていますが、scriptの書き方がわからないので


      >アドオンを使わない場合、
      作成した transition counter 用のフィールドを transition の画面に設定して
      以下の内容をフィールドの説明欄に記入すれば
      transition 画面が表示されるたびに +1 されるようにはできたかと思います。
      (フィールド自体は非表示にしています)


      こちらを利用してみようと思います


      作成したカスタムフィールドのディスクリプションに、共有頂いたScriptを記入するという理解でよいでしょうか?


      ちなみにScript内の

      customfield_10705

      は作成したカスタムフィールドのIDになりますでしょうか?

      1. Shuzaburo Doba

        はい、
        フィールドの説明欄に記入して動作させます。

        また "customfield_10705" はご認識の通りカスタムフィールドの ID です。

      2. Shuzaburo Doba

        ScriptRunner が導入されているとのことで、
        特にスクリプトを作成しなくても ScriptField を作成して
        トランジションの回数を取得できそうでしたが
        いかがでしょうか...?

      3. fantasista

        ご共有ありがとうございます

        弊社側はオンプレなのですが、画面の情報がだいぶ違うようです



        弊社のJIRAは現在JIRA Software 7.3.4なのですが

        バージョンの違いでしょうか?

      4. Shuzaburo Doba

        すみません、おそらく ScriptRunner のバージョンの差かと思われます。

        ScriptRunner 5.1 くらいからはできると思いますがいかがでしょうか...?

      5. fantasista

        5.0.4でした

        アップデートした際に確認してみます!!


        特定Fieldに+1する処理は共有頂いたScriptで実現できました!ありがとうございました!!

      6. 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 に置き換えてください。

      Commentコメントを追加...
    2.  
      1
      0
      -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 すべてにこのフィールドが含まれる画面を設定しないといけませんが...

      1. Shuzaburo Doba

        すみません、
        ScriptRunner でもわざわざ更新時の判定をしなくても transition の回数を表示するように
        Built-in のフィールドが作成できそうでした...

      2. 樋口晃

        それは、ScriptRunner の Built-in のフィールドですか?

      3. Shuzaburo Doba

        はい、
        ScriptRunner の Built-in で No. of Times In Status があるので、
        これで対象のステータスを選択すればトランジションの実行回数がわかるかと思いました。

      Commentコメントを追加...