이 문서는 Calculated Custom Field 애드온에서 커스텀 필드 합계를 계산하는 Groovy Script 예제를 공유하기 위해 작성되었다.
Sum of Sub-task, linked issues field
- Sub-task의 linkTypeId: 10100
<!-- @@Formula: import com.atlassian.jira.component.ComponentAccessor; import com.atlassian.jira.ComponentManager; import com.atlassian.jira.issue.Issue; import com.atlassian.jira.issue.fields.CustomField; import com.atlassian.jira.issue.CustomFieldManager; import com.atlassian.jira.issue.link.IssueLink; import com.atlassian.jira.issue.link.IssueLinkManager; import com.atlassian.jira.issue.link.IssueLinkTypeManager; import com.atlassian.jira.issue.customfields.manager.OptionsManager; import com.atlassian.jira.issue.customfields.option.Option; //import com.atlassian.jira.issue.status. double sumCustomFieldValues( Issue issue, customFieldId, linkTypeId ) { double sum = 0; int statusCondition = 0; CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager(); CustomField customField = customFieldManager.getCustomFieldObject(customFieldId); CustomField customFieldDeliveryMaterial = customFieldManager.getCustomFieldObject(10315); IssueLinkManager issueLinkManager = ComponentAccessor.getIssueLinkManager(); for (IssueLink issueLink : issueLinkManager.getOutwardLinks(issue.getId())) { //log.warn("in here 1, linkTypeId:" + issueLink.getIssueLinkType().getId()); statusCondition = 0; if( issueLink.getIssueLinkType().getId() == linkTypeId ){ Issue subTask = (Issue) issueLink.getDestinationObject(); if (subTask != null ) { String status = subTask.getStatus().getName(); //log.warn("Issue status:" + status); if (status != null) { if (status.toUpperCase().equals("DONE")) { statusCondition = 1; } } Option deliveryMaterialValue = (Option) subTask.getCustomFieldValue(customFieldDeliveryMaterial); if ((deliveryMaterialValue != null) && (statusCondition == 1)) { String deliveryMaterialString = (String) deliveryMaterialValue.getValue(); if (deliveryMaterialString != null) { if( !deliveryMaterialString.isEmpty() && deliveryMaterialString.equals("YES") ) { Double customFieldValue = issueLink.getDestinationObject().getCustomFieldValue(customField); sum += (customFieldValue == null) ? 0 : customFieldValue; } } } } } } return sum; } sumCustomFieldValues(issueObject, 10314, 10100); -->
Issue 내의 custom field (Single Selection) value 얻기
- issue object: calculated custom field add-on에서 제공하는 issue object
- issueObject: Jira에서 제공하는 issue object
자동 계산 (견적금액 + 부가세) <!--@@Formula: import com.atlassian.jira.component.ComponentAccessor; import com.atlassian.jira.ComponentManager; import com.atlassian.jira.issue.Issue; import com.atlassian.jira.issue.fields.CustomField; import com.atlassian.jira.issue.CustomFieldManager; import com.atlassian.jira.issue.link.IssueLink; import com.atlassian.jira.issue.link.IssueLinkManager; import com.atlassian.jira.issue.link.IssueLinkTypeManager; import com.atlassian.jira.issue.customfields.manager.OptionsManager; import com.atlassian.jira.issue.customfields.option.Option; CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager(); CustomField customFieldWithoutVAT = customFieldManager.getCustomFieldObject(10808); double revenue = 0; double quote = 0; if (issue.get("customfield_10201") != null) { quote = issue.get("customfield_10201"); revenue = quote + quote*0.1; Option fieldWithoutVATValue = (Option)(issueObject.getCustomFieldValue(customFieldWithoutVAT)); if (fieldWithoutVATValue != null) { String fieldWithoutVATValueString = (String) fieldWithoutVATValue.getValue(); if (fieldWithoutVATValueString != null) { if( !fieldWithoutVATValueString.isEmpty() && fieldWithoutVATValueString.equals("YES") ) { revenue = quote; } } } } return revenue; -->