4
3
2

JiraServiceDeskでリクエストを作成した後、共有リンクから共有先のユーザを追加できますが、
リクエスト作成時に所定ユーザを自動で共有に追加する方法はありませんか?
共有で追加したユーザに公開コメント追加などのイベント通知をしたいです。

2 回答

  1.  
    4
    3
    2

    残念ながら製品標準では現時点ではできません。製品要望は以下ですね。

    JSDSERVER-1530 Add customers as request participants automatically

    JSDSERVER-4661 Auto Add Reporter's Organization


    JSDSERVER-1530 の回避策に以下ナレッジベースが紹介されています。

    How to Automatically Add Request Participants when Creating an Issue - Atlassian Documentation

    ScriptRunner for Jira (ティック) 有償 で事後操作のスクリプトを設定する方法(スクリプトまで載っているのは珍しい気がします…)。

    Automation Lite for Jira (警告) 無償 または Automation for Jira (ティック) 有償  を使って

    Request Participants(リクエスト参加者)のカスタムフィールドに設定する方法が紹介されています。


    ちなみに ScriptRunner for Jira ではScript ListenerでOrganization(組織)を自動追加する方法が

    以下公式ドキュメント内に紹介されています。

    https://scriptrunner.adaptavist.com/latest/jira/blog/GettingMoreOutOfJsd.html#_adding_organizations_when_a_service_desk_issue_gets_created


    さらに別解では、 Actions for Jira Service Desk (ティック) 有償 アドオンを導入すると

    Jira Service Deskの自動化のアクション処理に共有(リクエスト参加者・組織)の機能が増えます。

    https://intenso.atlassian.net/wiki/spaces/AFJSD/pages/69795890/Automation+Rules


    標準ではできないものの色々方法がありますね。


    細かな動作確認してませんが…

    How to Automatically Add Request Participants when Creating an Issue - Atlassian Documentation

    のスクリプトをちょっと変えてみて

    課題の報告者が所属しているグループ全員(アカウントが有効な状態)に共有であれば以下とか

    import java.util.Collection;
    import java.util.List;
    import java.util.ArrayList;
    import com.atlassian.jira.component.ComponentAccessor;
    import com.atlassian.jira.user.ApplicationUser;
    import com.atlassian.jira.issue.MutableIssue;
    import com.atlassian.jira.issue.CustomFieldManager;
    import com.atlassian.jira.issue.fields.CustomField;
    import com.atlassian.jira.security.groups.GroupManager;
    import com.atlassian.crowd.embedded.api.Group;
    
    CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager();
    GroupManager groupManager = ComponentAccessor.getGroupManager();
    
    // リクエスト参加者フィールドオブジェクト取得
    CustomField requestParticipantsField = customFieldManager.getCustomFieldObject("customfield_10001");
    
    MutableIssue mutableIssue = issue;
    
    // 課題の報告者の所属するグループ全員に共有する
    List<ApplicationUser> requestParticipants = new ArrayList<ApplicationUser>();
    ApplicationUser reporter = issue.getReporter();
    if (reporter != null) {
    	Collection<Group> groups = groupManager.getGroupsForUser(reporter);
    	for (Group group : groups) {
    		for (ApplicationUser user : groupManager.getUsersInGroup(group)) {
    			requestParticipants.add(user);
    		}
    	}
    }
    if (requestParticipantsField != null && requestParticipants.size() > 0) {
    	mutableIssue.setCustomFieldValue(requestParticipantsField, requestParticipants);
    }

    (警告) customfield_10001 の部分は、Participants(リクエスト参加者)のフィールドIDです。環境ごとに違うので読み替えて設置してください。


    任意のプロジェクトロールに所属しているユーザーに共有するであれば以下とか

    import java.util.Set;
    import java.util.List;
    import java.util.ArrayList;
    import com.atlassian.jira.component.ComponentAccessor;
    import com.atlassian.jira.user.ApplicationUser;
    import com.atlassian.jira.issue.MutableIssue;
    import com.atlassian.jira.issue.CustomFieldManager;
    import com.atlassian.jira.issue.fields.CustomField;
    import com.atlassian.jira.security.roles.ProjectRoleManager;
    import com.atlassian.jira.security.roles.ProjectRoleActors;
    
    CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager();
    GroupManager groupManager = ComponentAccessor.getGroupManager();
    ProjectRoleManager projectRoleManager = ComponentAccessor.getComponent(ProjectRoleManager.class);
    
    // リクエスト参加者フィールドオブジェクト取得
    CustomField requestParticipantsField = customFieldManager.getCustomFieldObject("customfield_10001");
    
    MutableIssue mutableIssue = issue;
    
    ProjectRoleActors projectRoleActors = projectRoleManager.getProjectRoleActors(projectRoleManager.getProjectRole("<ロール名>"), issue.getProjectObject());
    Set<ApplicationUser> projectRoleUsers = projectRoleActors.getApplicationUsers();
    List<ApplicationUser> requestParticipants = new ArrayList<ApplicationUser>(projectRoleUsers);
    
    if (requestParticipantsField != null && requestParticipants.size() > 0) {
    	mutableIssue.setCustomFieldValue(requestParticipantsField, requestParticipants);
    }
    
    
    

    (警告) customfield_10001 の部分は、Participants(リクエスト参加者)のフィールドIDです。環境ごとに違うので読み替えて設置してください。

    (警告) <ロール名>を適切な名前に変更をしてください。


    ScriptRunner for Jira だとスクリプトで記述できるため柔軟な反面、JiraのJava APIを知っている必要もあり難易度高めです。


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

      Autmation for JIRA の設定も試してみました。
      以下の内容であれば、Automation Lite for Jira (警告) 無償で設定できます。

      課題の作成をトリガとして、課題の編集を実行する。

      フィールド編集の記述例

      {
          "fields": {
              "customfield_10101": [
                  { "name":"tmori" },
                  { "name":"tohtsuka" }
              ]
          }
      }

      (警告) customfield_10101 の部分は、Participants(リクエスト参加者)のフィールドIDです。環境ごとに違うので読み替えて設置してください。

      (警告) 編集項目は名称(ex リクエスト参加者 or Participants)を指定することもできますが、
      言語設定を変更すると正常に動作しない場合があるので、フィールドIDの利用を推奨します。

      Group、Role、Organizationからユーザを取得してParticipantsにセットするような記述ができないため、ユーザを決め打ちで指定する必要があります。
      ちなみに組織に所属するユーザの一括取得については、改善要望が挙がっていますが、対応されるかは未定です…

      Automation for jiraを利用する場合、課題作成後にParticipantsを設定するため、Participantsには課題作成通知メールが送信されません。
      リクエストの最初の共有手段として、「リクエストへの参加者」通知を使うか、Automation for jiraのメール通知機能を利用する必要があります。
      メール通知機能を使うには、Automation Lite Jira 警告 (ティック) 有償が必要となります。

        Commentコメントを追加...