이 문서는 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;
-->