이제 JIRA 관리자든 일반 사용자든 접근 가능한 상단 네비게이션 화면에 플러그인 관련 링크를 노출하는 방법을 소개한다.
화면으로 보면 이해가 좀 더 빠를 것 같다. 바로 이 부분.
여기에 플러그인 관련 링크를 노출시키고 빠른 접근성을 확보하기 위해 해야하는 절차들을 소개한다.
Web Section과 Web Item
이것 역시 Web Section과 Web Item과 연관이 있다.
그리고 아무튼 JIRA Plugin 개발은 무조건 다 Add-on Descriptor (atlassian-plugin.xml)에 리소스를 등록해야 한다.
그래서 우선 첫번째 단계는 아래와 같이 Web Item을 등록하는 것이다.
<web-item key="topNavKapproval" name="Link on My Links Main Section" section="system.top.navigation.bar" weight="150">
<condition class="com.atlassian.jira.plugin.webfragment.conditions.UserLoggedInCondition" />
<label key="K-Approval"></label>
<link linkId="topNavKapproval"></link>
</web-item>
<web-section name="K-Approval Request Approval Section" i18n-name-key="section.kapproval.request.approval.name" key="kapprovalRequestSection" location="topNavKapproval" weight="10">
<label key="section.kapproval.request.approval.label"></label>
</web-section>
이 Web Item의 section attribute는 `system.top.navigation.bar`라는 미리 정해져 있는 값이다.
그리고 지금껏 보지 못했던 내용이 하나 추가됐는데 바로 `condition` 태그이다. 이 컨디션 태그는 뭐냐면 어떤 특정 조건에 만족할 경우에만 이 상단 네비게이션 바에 버튼(링크)가 보여지게 하는 방법이다.
그리고 이 컨디션은 또한 클래스가 이미 다 정해져있다. 그 중 하나가 바로 `com.atlassian.jira.plugin.webfragment.conditions.UserLoggedInCondition`이다.
클래스 이름만 봐도 유저가 로그인 된 상태인 조건이라고 짐작할 수 있다. 이 조건은 어떻게 알까? 다음 링크를 참고하자.
참고로 컨디션을 사용하려면 그냥 태그만 추가해서는 안된다. 이 컨디션의 클래스는 말 그대로 클래스를 가져오는 것이고 클래스를 가져온다는 것은 모듈(라이브러리)가 프로젝트에 포함된 상태여야 한다. 그리고 그건 프로젝트의 pom.xml 파일에서 추가한다.
pom.xml
<build>
<plugins>
<plugin>
<groupId>com.atlassian.maven.plugins</groupId>
<artifactId>jira-maven-plugin</artifactId>
<version>${amps.version}</version>
<extensions>true</extensions>
<configuration>
<productVersion>${jira.version}</productVersion>
<productDataVersion>${jira.version}</productDataVersion>
<enableQuickReload>true</enableQuickReload>
<instructions>
<Atlassian-Plugin-Key>${atlassian.plugin.key}</Atlassian-Plugin-Key>
<!-- Add package to export here -->
<!-- Add package import here -->
<Import-Package>
com.atlassian.jira.plugin.webfragment.conditions,
org.eclipse.gemini.blueprint.*;resolution:="optional",
*
</Import-Package>
<!-- Ensure plugin is spring powered -->
<Spring-Context>*</Spring-Context>
</instructions>
<log4jProperties>src/main/resources/log4j.properties</log4jProperties>
</configuration>
</plugin>
...
</plugins>
</build>
이 build 태그 안에 plugins 태그 안에 plugin 중 `com.atlassian.maven.plugins` 안에 자세히 보면 <Import-Package> 라는 태그가 있다. 이 안에 `com.atlassian.jira.plugin.webfragment.conditions`를 추가해줘야 한다. 그러면 아래 라이브러리 안에 구현된 컨디션들을 확인해 볼 수 있을 것이다.
다시 돌아와서, 이제 컨디션까지 확인을 해봤고 label은 말 그대로 화면에 보여지는 Label을 의미한다.
그리고 그 다음에 Web Section이 나오는데 Web Section은 그 상단 네비게이션 바에서 버튼을 클릭하면 하단에 나오는 드롭다운 메뉴에서 섹션을 구분할 수가 있다. 그 구분 섹션을 의미한다. 다음 사진을 보자.
이렇게 빨간 박스로 구분된 섹션들을 말한다. 그리고 이 location 중요한데, 이 location은 상단 네비게이션 바 Item의 key가 되어야 한다. 그래야 그 상단 네비게이션 바에 섹션들이 들어가겠지?라는 합리적인 발상이 가능해진다. 그리고 label 태그는 i18n 리소스를 사용했다.
그 다음, 섹션이 있으면 그 섹션에 각 링크들이 달릴것이다. 그래서 그 링크(버튼)들을 만들어야 한다.
<web-item key="menuKapprovalRequestApproval" i18n-name-key="menu.kapproval.request.approval.name" name="kapprovalRequestApproval" section="topNavKapproval/kapprovalRequestSection" weight="10">
<label key="menu.kapproval.request.approval.label" ></label>
<link linkId="menuKapprovalRequestApproval">/issues/?jql=issuekey in kapprovalRequestApproval()</link>
</web-item>
이 Web Item은 방금 본 Web Section 하단에 달릴 링크(버튼)이다.
여기서도 역시 중요한건 section이다. 여기에 보면 `topNavKapproval/kapprovalRequestSection`으로 되어 있는데 `topNavKapproval`은 상단 네비게이션 바를 가리키는 Web Item의 Key이다. 그리고 `kapprovalRequestSection`은 그 상단 네비게이션 바에 달리는 섹션의 Key이다.
전체 코드로 보면 아래와 같다.
<web-item key="topNavKapproval" name="Link on My Links Main Section" section="system.top.navigation.bar" weight="150">
<condition class="com.atlassian.jira.plugin.webfragment.conditions.UserLoggedInCondition" />
<label key="K-Approval"></label>
<link linkId="topNavKapproval"></link>
</web-item>
<web-section name="K-Approval Request Approval Section" i18n-name-key="section.kapproval.request.approval.name" key="kapprovalRequestSection" location="topNavKapproval" weight="10">
<label key="section.kapproval.request.approval.label"></label>
</web-section>
<web-item key="menuKapprovalRequestApproval" i18n-name-key="menu.kapproval.request.approval.name" name="kapprovalRequestApproval" section="topNavKapproval/kapprovalRequestSection" weight="10">
<label key="menu.kapproval.request.approval.label" ></label>
<link linkId="menuKapprovalRequestApproval">/issues/?jql=issuekey in kapprovalRequestApproval()</link>
</web-item>
그리고, 그 실질적으로 클릭 가능한 버튼인 `menuKapprovalRequestApproval`이라는 키를 가진 Web Item은 의미있는 링크를 가지고 있다. 그 링크는 특정 JQL을 실행하는 링크이고 이 JQL 함수는 내가 따로 만든 JQL이다. 이건 이후에 설명하겠다. 아무튼 이 버튼을 클릭하면? 지정된 JQL을 실행하는 화면으로 이동한다.
그래서 아래 사진이 완성된 화면이다.
이렇게 상단 네비게이션 바에 플러그인의 링크를 노출시킬 수 있다. 그리고 그 각 버튼은 의미있는 화면으로의 이동이 되면 된다. 나같은 경우는 내가 만든 커스텀 JQL 함수를 실행하는 화면으로 이동시키게 만든 것이고 말 나온김에 다음 포스팅은 커스텀 JQL 함수를 만드는 방법을 포스팅 해보겠다.
참고로, 섹션을 또 추가하고 싶으면 위 방식대로 Web Section 추가하고 그 섹션 하위에 Web Item들을 위 방식 그대로 똑같이 추가해주면 된다.
'Jira & ScriptRunner' 카테고리의 다른 글
Jira DC 플러그인 개발 Part.7 서블릿 필터 만들기 (Java에서 하던것과 똑같다) (0) | 2024.07.23 |
---|---|
Jira DC 플러그인 개발 Part.6 - JQL Function 만들기 (0) | 2024.07.16 |
Jira DC 플러그인 개발 Part.4 - ActiveObjects ORM (0) | 2024.07.15 |
Jira DC 플러그인 개발 Part.3 관리자 화면 메뉴 섹션 (0) | 2024.07.15 |
Jira DC 플러그인 개발 Part.2 - 프로젝트 구조 (0) | 2024.07.13 |