2
1
0

現在ユーザーグループごとにフィルターを作成しているのですが、メンテナンスをしやすくするためにログインしているユーザーによって動的に課題表示するフィルターを作成したいです。

以下のような条件のフィルターは作成可能でしょうか?

・現在のユーザーがユーザーグループABCに属しているとき、ABCの課題を表示する

(担当者がABCメンバーのうちの誰かになっている課題を表示する)

    Commentコメントを追加...

    2 回答

    1.  
      2
      1
      0

      関連QA

      今は membersOf()  のJQL関数でグループごとにフィルターを作成しているが

      (例:assignee in membersOf("ABC") )

      membersOf に指定するグループごとに必要でメンテナンスが大変である。

      ログインしている時のユーザーのグループを取得して

      assignee in membersOf(currentUser()) 的なことをしたいイメージですかね。


      標準ではmembersOf以外はないので、アドオンとなりますが

      現在のユーザーが所属しているグループは、場合によって結構多くなる場合もあるので

      ご認識の通り、ユーザーが所属しているグループをどこまで参照するかを限定する必要があります。

      例えば、Jiraをログインするために 皆がjira-users のようなグループに所属しているとすると

      担当者が jira-users のうちの誰かになっている課題を表示すること=プロジェクトの課題を閲覧できる全員となり目的を達成でないかと思います。


      そのため、どのグループを対象とするか条件を絞る必要があるかと思いますが

      そのようなJQLアドオンみたいことがないので、アドオン自作するとかになりそうです。

      currentUserGroupsOfMembersIn("ABC", "XYZ"....)

      的な

      篠原-san の環境は ScriptRunner for Jira をインストールしているかと思いますのでアドオンで以下の通りJQL関数を作ることも可能です…。


      JQLアドオンを作るとなると結構面倒なので

      別の方法として、担当グループとかの名前でグループピッカーフィールドとかを用意して

      関連QAで紹介している Groups and Organizations JQL Functions アドオンの機能を使って

      ログインしているユーザーの所属しているグループが担当グループフィールドに指定されている課題を検索するとかどうでしょうか?

      "担当グループ" in groupsOfCurrentUser()


      担当グループには、課題作成時などに自動的に設定するようにしておけば比較的楽かと。

      さらに 篠原-san の環境は ScriptRunner for Jira をインストールしているので

      担当グループフィールドは ScriptFields で現在の担当者フィールドから担当者が所属しているグループを取得して(一部は除外)返却するようなフィールドを作れば目的は達成できそうですかね。

      ScriptFieldsとしては動作確認していないですが以下のようなスクリプトですかね。

      /* 除外するグループ名 */
      List<String> excludeGroupNames = new ArrayList<String>();
      exclude.add('jira-users');
      
      List<com.atlassian.crowd.embedded.api.Group> result = new ArrayList<com.atlassian.crowd.embedded.api.Group>();
      // 担当者が決まっている場合
      if (issue.getAssigneeUser() != null) {
      	// 担当者のグループを取得
      	for (com.atlassian.crowd.embedded.api.Group group : com.atlassian.jira.component.ComponentAccessor.getGroupManager().getGroupsForUser(issue.getAssigneeUser())) {
      		// 除外するグループの場合はスキップ
      		if (excludeGroupNames.contains(group.getName())) {
      			continue;
      		}
      		result.add(group);
      	}
      }
      return result;




        Commentコメントを追加...
      1.  
        3
        2
        1

        Kengo Ohsakiさん

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

        今は membersOf()  のJQL関数でグループごとにフィルターを作成しているが

        (例:assignee in membersOf("ABC") )

        membersOf に指定するグループごとに必要でメンテナンスが大変である。

        ログインしている時のユーザーのグループを取得して

        assignee in membersOf(currentUser()) 的なことをしたいイメージですかね。

        はい、その通りです。currentuser()を上手く使えばできそうな気がしたのですが、やはり標準機能だとできないんですね…。

        さすがにJQLアドオン自作は難易度が高そうなので、教えてくださったscriptrunnerの方法で検証してみます。

        ScriptFieldsは使ったことがないのですがこれを機会に使ってみようと思います。毎回丁寧にご説明くださりありがとうございます!

          Commentコメントを追加...