4
3
2

JIRAで課題複製をするとフィールドは複製元の値を引き継ぎますが、特定のフィールドのみクリア状態(それ以外は複製元から引き継ぎ)にして複製することは可能でしょうか。

定例作業で課題複製するときに作業日フィールドだけクリアにする、というような使い方をしたいです。

    Commentコメントを追加...

    1 回答

    1.  
      4
      3
      2

      標準の課題複製機能では、そのような機能はないためアドオンを使うなどして実現方法を検討することになるかと思います。

      ちなみに、要望そのものを機能として持つアドオンとしては代表的なのは以下ですかね。


      上記アドオン以外での別の方法としては

      何らかの以下のようなワークフロー支援アドオンは必要になりますが

      一番シンプルには、Createトランジション(課題作成)で、特定のフィールド(今回でいう作業日)をクリアにすればよいかとは思います。

      但し、課題を複製した処理と課題作成したイベントは違いがないため(CloneのイベントはなくCreateしかありません。値をコピーした課題を新規に作成した形です)

      Createトランジションで一律クリアしてしまうと課題コピー操作ではなく通常の課題作成時にも特定のフィールドがクリア(例え課題作成画面で値を指定してたとしてもクリア)されてしまいます。

      その対策としては、課題作成画面には特定のフィールドは配置せず、編集画面、表示画面、特定のトランジション画面に配置する形すればよいかと思います。

      課題作成時には設定せずに、課題が開始するトランジションに作業日入力画面を表示して、作業日の入力を必須として入れるようにするなどですね。


      もし、課題作成画面でも特定のフィールドを配置したいとなると

      課題のコピー元にフラグ情報を持たせることが一つ方法としてあります。

      この方法の実現には以下スクリプトが記述できるアドオンが必要になりますが

      例えば ラベルに 「定例作業」を、ワークフローのCreateトランジションや特定のトランジションで自動的に設定するようにします。(Createトランジションの場合は、上記のフィールドクリアの後の処理で)

      そのうえで、ラベル を課題作成画面には配置せず、先ほどの特定フィールドクリアするロジックに条件を追加して、ラベルに「定例作業」が設定されていれば、一律クリアするスクリプトを記述します。

      if (lebel == 定例作業) 
       特定のフィールドをクリア

      課題作成画面には配置されてないため、ユーザーは値が作成画面から設定できませんが

      課題コピーの場合はデータを引き継ぐため、値が設定されている形でCreateトランジションに来ます。


      あとは、事後処理(post-function)で課題コピーする機能を持っているアドオンは多く

      その際のコピーするフィールドを限定できる機能も持っているアドオンもありますので

      「課題コピー」というトランジションを作成してしまうという方法も一つです。


      ほかの方法としては、ScriptRunner for Jira  を導入しているのであれば

      以下ドキュメントに説明がありますが、課題作成画面にコピー元課題のフィールド値を設定済みで開くというボタンを配置することもできますので、独自の課題コピーボタンを作るという手もあります。


      あとは定例作業であれば、課題を定期的にコピーするのも面倒かと思いますので、定期的に課題作成を自動化するアドオンとか仕組み(REST APIを使うなど)も実現方法としてはあるかもしれません。

      参考になりましたら幸いです。



      1. 篠原

        Kengo Ohsakiさん

        Suite Utilities for JIRAをインストール済みなので、Ohsakiさんがご紹介くださったcreateトランジションで作業日フィールドをクリアというのも検討したのですが、おっしゃる通り複製時だけでなく新規課題作成時にもクリアされてしまうのですよね…。

        課題作成画面には作業日フィールドを置いておきたいので、トランジション「課題コピー」を作成してしまうか、課題クローン用のアドオンで対応しようと思います。

        色々教えてくださりありがとうございます。


      2. 篠原

        Kengo Ohsakiさん

        すみませんが追加で質問させてください。

        ほかの方法としては、ScriptRunner for Jira  を導入しているのであれば

        以下ドキュメントに説明がありますが、課題作成画面にコピー元課題のフィールド値を設定済みで開くというボタンを配置することもできますので、独自の課題コピーボタンを作るという手もあります。

        この方法を試す場合、conditionに課題作成時の条件を書くと思うのですが、「作業日」フィールドをクリア状態にするという条件だとどのような書き方になるのでしょうか?

        フィールドに値を設定するのはできたのですが、空状態にするのがわからず…。

      3. Kengo Ohsaki

        篠原-san,

        この方法を試す場合、conditionに課題作成時の条件を書くと思うのですが、「作業日」フィールドをクリア状態にするという条件だとどのような書き方になるのでしょうか?

        いえ、conditionはそのボタンを表示する条件なので課題作成画面のフィールドにコピー元の値を設定するのは

        Behaviours Integrationの機能になりますね。

        import com.atlassian.jira.component.ComponentAccessor
        
        def issueManager = ComponentAccessor.getIssueManager()
        
        if (getBehaviourContextId() == "link-create-blocking") {
            getFieldById("project-field").setReadOnly(true)
            getFieldById("issuetype-field").setReadOnly(true)
        
            def contextIssue = issueManager.getIssueObject(getContextIssueId())
        
            getFieldById("summary").setFormValue("Issue created from ${contextIssue.key}").setReadOnly(true)
        }

        "link-create-blocking" はボタンのkey名と一致するようにして

        contextIssue がコピー元の課題オブジェクトですので

        一つ一つコピーしたい値を設定する形になります。

        getFieldById("カスタムフィールドID").setFormValue(contextIssue.getCustomFieldValue("カスタムフィールドオブジェクト"))

        この機能の利点は、Behaviours を使って課題コピー元の値を引き継がせている状態で課題作成画面を開けるので、課題作成前にフィールド値を修正できる点(課題コピーは作成してから課題編集することになるので)です。

        ただ設定が面倒なので、個人的にはトランジション「課題コピー」を作成してしまう のが良いかなとも思います。


      4. 篠原

        Kengo Ohsakiさん

        なるほどBehavioursのほうですね!クリアするフィールドじゃなく、コピーするフィールドを設定するんですね…

        トランジション「課題コピー」を追加する方が設定的にはやりやすそうですね。もうちょっと検討してみます。ありがとうございました。

      Commentコメントを追加...