페이지 트리

이 문서는 스크립트러너를 사용하여 HTML 링크 정보를 보여주는 커스텀필드(Custom Field)를 만드는 방법에 대해서 공유한다. 


1. 커스텀필드 생성

1-1. 앱관리 > ScriptRunner > Fields > Create Script Field를 선택한다. 


1-2. Create Script Field 화면에서 Custom Script Field를 선택한다. 


1-3. Template에서 HTML을 선택하고 아래처럼 Script 필드를 입력한다. 

def link = "<a href='http://www.google.co.kr' target='_blank'>링크 바로가기</a>"
return link

Add 버튼을 클릭하여 스크립트 필드를 완성한다. 


1-4. 아래 그림과 같이 원하는 스크린에 해당 필드를 삽입한다. 


1-5. 이슈에서 해당 링크 정보가 나타나는지를 확인한다. 


2. Transition 화면 표시

위에서 만든 script field는 transition 화면에는 표시되지 않기때문에 transition 화면에 표시하기 위한 방법을 가이드 한다.
transition 화면에 script field외에 일반 custom field 도 존재해야 한다.

참조 URL : https://scriptrunner.adaptavist.com/6.2.1/jira/scripted-fields.html#_displaying_script_fields_in_transition_screens


2-1. 관리자 화면의 이슈탭 → 사용자정의 필드에서 1에서 생성한 Script Field 의 이름과 Field Id를 확인한다.


2-2.  관리자 화면의 이슈탭 → 화면 에서 transtion screen에서 사용하는 "script field"를 제외한 필드중 하나를 확인 한다.


2-3. 프로젝트탭에서 transtion screen 수정할 프로젝트를 선택 한다.


2-4. 필드 구성에서 프로젝트에서 사용하는 필드 구성을 선택 한다.


2-5. "2-2"에서 확인한 "script field"가 아닌 필드를 찾은 후 편집을 선택 한다.


2-6. 설명에 아래 코드블럭에 있는 스크립트를 추가한 후 수정 한다.

        아래 스크립트에서 "MANDATORY CONFIG" 항목의 "fieldName", "fieldId"는 "2-1"에서 확인한대로 수정한다.


<script type="text/javascript">
(function ($) {

    // ---------------------------------- MANDATORY CONFIG ----------------------------------
    var fieldName = "링크정보" // display name - does not have to match the name of the field
    var fieldId = "customfield_10402" // field Id
    // ---------------------------------- END MANDATORY CONFIG ------------------------------

    function addCalculatedField(e, context) {
        var $context = $(context);

        // if you want you can limit this to certain actions by checking to see if this value is in a list of action IDs
        if (!$("input[name='action']").val()) {
            return;
        }

        // multiple handlers can be added if you do an action, then cancel repeatedly
        if ($context.find("#scriptedfield_" + fieldId).length > 0) {
            return;
        }

        var issueKey = $("meta[name='ajs-issue-key']").attr("content");
        if (!issueKey) {
            issueKey = $("#key-val").attr("rel"); // transition screens in full page mode
        }

        var paddingTop = AJS.$("meta[name='ajs-build-number']").attr("content") < 6000 ? "1" : "5";

        var fieldGroupHtml = '<div class="field-group">' +
            '<label for="' + fieldId + '">' + fieldName + '</label>' +
            '<div style="padding-top: ' + paddingTop + 'px" id="scriptedfield_' + fieldId + '"> ' +
            '<span class="aui-icon aui-icon-wait">Loading, please wait</span></div>' +
            '</div> ';

        // Modify this select if you want to change the positioning of the displayed field
        $context.find("div.field-group:first").before(fieldGroupHtml);

        $.ajax({
            type: "GET",
            "contentType": "application/json",
            url: AJS.params.baseURL + "/rest/api/2/issue/" + issueKey + "?expand=renderedFields&fields=" + fieldId,
            success: function (data) {
                if ("fields" in data && fieldId in data.fields) {
                    var fieldValue = data.fields[fieldId];
                    $context.find("#scriptedfield_" + fieldId).empty().append(fieldValue);
                }
                else {
                    $context.find("#scriptedfield_" + fieldId).empty().append("ERROR - bad field ID");
                }
            },
            error: function () {
                $context.find("#scriptedfield_" + fieldId).empty().append("ERROR");
            }
        });
    }

    JIRA.bind(JIRA.Events.NEW_CONTENT_ADDED, function (e, context) {
        addCalculatedField(e, context);
    });

})(AJS.$);
</script>


2-7. Transition 화면에서 "Script Field"가 표시되는것을 확인한다.






  • 레이블 없음