2
1
0

ステータス変更時の画面を作成、「担当者」のフィールドを画面に配置し説明欄に「次はXXさんに割り当ててください」(「XX」にcustomfield_xxxに入っているユーザーが入る)みたいな使い方をしたいのですが…

フィールド説明欄にフィールドの値を表示させることは可能でしょうか。

    Commentコメントを追加...

    1 回答

    1.  
      3
      2
      1

      製品標準ではできないですが、技術的な方法としてはいくつか考えられると思います。

      例えば以下JavaScriptのような形で JavaScriptで REST APIを呼び出して

      カスタムフィールドの値を取得して「担当者」のフィールドを画面に配置し説明欄に追加するなど。

      <script>
      AJS.toInit(function () {
      	function func() {
      		if (AJS.$("form#issue-workflow-transition input[name='id']").size() === 0) {
      			return;
      		}
      
      		var issueid = AJS.$("form#issue-workflow-transition input[name='id']").val();
      		if (!issueid) {
      			return;
      		}
      		var url = AJS.contextPath() + "/rest/api/2/issue/" + encodeURIComponent(issueid);
      		AJS.$.ajax({
      			type : 'GET',
      			dataType : 'json',
      			contentType : 'application/json',
      			url : url,
      			cache : false,
      			success : function(updateData, textStatus, xhr) {
      				if (updateData.fields.customfield_10400.displayName) {
      					if (AJS.$('form#issue-workflow-transition div#custom_assignee_description').size() === 0) {
      						AJS.$("form#issue-workflow-transition select#assignee").after('<div id="custom_assignee_description" class="description">次は' + updateData.fields.customfield_10400.displayName + 'さんに割り当ててください</div>');
      					}
      					return;
      				}
      			},
      			error : function(XMLHttpRequest, textStatus, errorThrown) {
      				return;
      				}
      		});
      	}
      
      	func();
      	JIRA.bind(JIRA.Events.NEW_CONTENT_ADDED, function (e, context, reason) {
      		if (reason === JIRA.CONTENT_ADDED_REASON.dialogReady) {
      			func();
      		}
      	});
      });
      </script>

      (情報) customfield_10400 の部分は取得するカスタムフィールドの番号に読み替えてください。

      (情報) customfield_10400 は単独ユーザーピッカーフィールド想定です。

       

      ScriptRunner for JIRA をインストールしているなら Behaviours 機能を使って

      https://scriptrunner.adaptavist.com/5.2.4/jira/behaviours-overview.html

      import com.atlassian.jira.component.ComponentAccessor;
      import com.atlassian.jira.issue.CustomFieldManager;
      import com.atlassian.jira.issue.IssueManager;
      import com.atlassian.jira.issue.fields.CustomField;
      import com.atlassian.jira.issue.Issue;
      import com.atlassian.jira.user.ApplicationUser;
      
      def field = getFieldById("assignee");
      def nextUserName = null;
      def id = getFieldById("id");
      // 課題作成画面では課題作成のため課題IDが決まっていないため null となる。
      if (id != null && id.getValue() != null) {
        com.atlassian.jira.issue.IssueManager issueManager = ComponentAccessor.getIssueManager();
        CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager();
      
        Issue issue = issueManager.getIssueObject(Long.parseLong((String)id.getValue()));
        CustomField customField = customFieldManager.getCustomFieldObject(10400L);
        ApplicationUser user = (ApplicationUser)issue.getCustomFieldValue(customField);
        if (user != null) {
            nextUserName = user.getDisplayName();
        }
      }
      if (nextUserName != null) {
        field.setHelpText(String.format("次は%sさんに割り当ててください", nextUserName));
      }

      的なスクリプトでもできるかと思います。

      (情報) 10400 の部分は取得するカスタムフィールドの番号に読み替えてください。

      (情報) 10400 は単独ユーザーピッカーフィールド想定です。

       

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

      1. 篠原

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

        1つ目のJavascriptについてお聞きしたいのですが、「担当者」の説明欄ではなく、カスタムフィールド(1行テキスト)の説明欄に書く場合は、下記「assignee#custom_assignee_description'」部分を書き換えればいいのでしょうか。


        if (AJS.$('form#issue-workflow-transition div#custom_assignee_description').size() === 0) {
        AJS.$("form#issue-workflow-transition select#assignee").after('<div id="custom_assignee_description" class="description">次は' + updateData.fields.customfield_10400.displayName + 'さんに割り当ててください</div>');
        }
        return;

      2. Kengo Ohsaki

        篠原-san,

        「担当者」の説明欄ではなく、カスタムフィールド(1行テキスト)の説明欄に書く場合は

        AJS.$("form#issue-workflow-transition select#assignee").after が

        AJS.$("form#issue-workflow-transition input#customfield_10401").after 

        に変更ですかね。

        あと以下は任意ですが

        custom_assignee_description を custom_customfield_10401_description とかに変更したほうがわかりやすいかもしれません。

        id=custom_assignee_description については、単純に何度も同じ説明を書きこまないようにするための id ですので任意の名前で大丈夫です。

        (情報) customfield_10401 の部分は実際に説明欄を記載するカスタムフィールドの番号に読み替えてください。

      3. 篠原

        Kengo Ohsakiさん

        ありがとうございます!

        カスタムフィールドの説明欄にも表示することができました。

        select部分も変更しなければならないんですね…フィールド名部分だけ変更していました、勉強になりました。

        AJS.$("form#issue-workflow-transition select#assignee").after

        AJS.$("form#issue-workflow-transition input#customfield_10401").after

      4. Kengo Ohsaki

        篠原-san,

        参考になり良かったです!

        select部分も変更しなければならないんですね…

        はい、フィールドのタイプによって select や input タグだったりするのでhtmlの要素を確認しながら確認してみてください。

        ちなみにJavaScriptの話になりますがHTMLタグを指定せず

        以下でも良かったりしますが、タグ指定しているのは一応念のためです...

        AJS.$("form#issue-workflow-transition #customfield_10401").

         

      Commentコメントを追加...