이 문서는 Jira Cloud에서 동적 필드를 구성하기 위해 ScriptRunner Behaviours 스크립트 예시를 공유하기 위해 작성되었습니다.




개요

Jira Cloud 버전에서는 기본적으로 동적 필드를 지원하고 있지 않습니다.

그렇기 때문에 필드를 특정 상태에 따라 화면에서 숨김 처리하거나 편집이 불가능하게 하기 위해서 ScriptRunner 애드온을 추가하여 사용합니다. 

따라서, 이 문서에서는 ScriptRunner Behaviours 애드온을 활용하여 필드 동작을 커스텀하는 예시 스크립트를 공유합니다.

ScriptRunner 지원 언어

ScriptRunner Jira Cloud 버전에서는 서버 및 DC 버전과 달리 Groovy 가 아닌 Javascript/Typescript 언어로 작성해야 합니다.

상태 별 필드 숨기기 또는 Read only 처리하기

의도한 동작 : 
이슈가 특정 상태 (예를 들어, 진행 중) 일 때, 사용자 정의 필드가 편집이 되지 않는 Read-only 상태 

const customField = getFieldById("customfield_10131") 			// 커스텀 필드 ID로 특정 커스텀 필드 가져오기
const issueStatus = getFieldById('status').getValue().name    	// 'status' 필드 객체에서 상태 명 가져오기

if (issueStatus=="진행 중") {
    customField.setReadOnly(true) 	// 상태가 "진행 중"이면 Read-Only 설정
} else {
    customField.setReadOnly(false) 	// 다른 상태에서는 수정 가능
}
  • getFieldById(fieldID) : 필드 ID로 특정 필드 객체를 가져올 수 있습니다.

    Jira Cloud REST API를 사용하여 요청을 보내 찾을 수 있습니다.
    예시) https://YOUR_ATLASSIAN_INSTANCE/rest/api/3/field

  • getValue() : 필드의 값을 반환합니다.
  • setReadOnly(boolean) : true이면 필드를 Read-only 상태로 설정합니다.

필드 값에 따라 화면에서 필드 숨기기

의도한 동작 : 
A 필드의 값이 A 이면 B 필드를 화면에서 숨김 처리

const field10131 = getFieldById("customfield_10131") // 10131번 필드 가져오기
const field10132 = getFieldById("customfield_10132") // 10132번 필드 가져오기

const value10131 = field10131.getValue()    // 10131번 필드의 값 가져오기

if (value10131.value == "Low") {
    field10132.setVisible(false) 	// "Low"이면 10132 필드 숨김
} else {
    field10132.setVisible(true) 	// 다른 값이면 다시 표시
}


  • setVisible(boolean) : false 이면 필드를 화면에서 보이지 않게 숨김 처리합니다.

이슈 유형에 따라 다중 선택 필드의 옵션 항목을 표시 여부 설정하기

의도한 동작 : 

이슈 유형이 특정 유형인 경우 다중 선택 필드(예를 들어, 우선 순위)의 옵션을 일부만 보이게 설정

const context = await getContext()					// 컨텍스트 가져오기
const issueType = context.extension.issueType.id	// 이슈 유형의 id 가져오기

if (issueType=="10045") {
	// 이슈 유형이 10045인 경우에는 "우선순위" 필드의 일부를 보이지 않게 처리
    getFieldById("priority").setOptionsVisibility(["3","4","5", "10001"], false)
}


  • getContext() : 컨텍스트를 반환합니다.
    { 
        localId: string, 
        cloudId: string, 
        enviroment: string, 
        moduleKey: string, 
        siteUrl: string, 
        accountId: string, 
        licence: string, 
        timeZone: string, 
        extension: { 
            viewType: string, 
            issueType: { 
                id: string, 
                name: string 
            }, 
            project: { 
                id: string, 
                key: string, 
                type: string
            }
        }
    }


  • setOptionsVisibility(Array<string>, boolean) : 두 번째 매개변수가 false이면 첫 번째 매개변수에 명시한 옵션 리스트를 안 보이게 설정합니다.



참고


  • 레이블 없음