페이지 트리

이 문서는 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;
-->
  • 레이블 없음