I write a groovy script in post-function to calculate the value of field "Effort Split" in Epic based on the Stories (Sum of all "Effort Split" values in Stories), and now i can get the sum value and show it in Epic issue. But these change cannot be updated in history of Epic issue.
Could you please give me some suggestions? If there is some groovy sentence can achieve this?
My code like below:
import com.atlassian.jira.issue.ModifiedValue
import com.atlassian.jira.issue.link.IssueLinkManager
import com.atlassian.jira.ComponentManager
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
ComponentManager componentManager = ComponentManager.getInstance()
CustomFieldManager customFieldManager = componentManager.getCustomFieldManager()
String issuekey=issue.toString()
IssueLinkManager issueLinkManager = componentManager.getIssueLinkManager()
List list = issueLinkManager.getOutwardLinks(componentManager.getIssueManager().getIssueByCurrentKey(issuekey).id)
Map<String, String> effortSplitMap = new HashMap<String, String>();
for(i=0;i<list.size();i++){
String effortSplit = list[i].destinationObject.getCustomFieldValue(customFieldManager.getCustomFieldObjectByName('Effort Split'))
List effortSplitList = new ArrayList()
effortSplitList = effortSplit.split("")
for(j=0;j<effortSplitList.size();j++){
if(effortSplitMap.get(effortSplitList[j].split("&")[0]))
{ effortSplitMap.put(effortSplitList[j].split("&")[0].trim(),(Integer.parseInt(effortSplitList[j].split("&")[1].trim()) + Integer.parseInt(effortSplitMap.get(effortSplitList[j].split("&")[0]))).toString()) }
else
{ effortSplitMap.put(effortSplitList[j].split("&")[0].trim(),(Integer.parseInt(effortSplitList[j].split("&")[1].trim())).toString()) }
}
}
StringBuffer stringBuffer = new StringBuffer()
stringBuffer.append("HLR_DEV")
stringBuffer.append("&")
stringBuffer.append(effortSplitMap.get("HLR_DEV"))
stringBuffer.append("")
stringBuffer.append("HSS_DEV")
stringBuffer.append("&")
stringBuffer.append(effortSplitMap.get("HSS_DEV"))
stringBuffer.append("")
stringBuffer.append("LTE_DEV")
stringBuffer.append("&")
stringBuffer.append(effortSplitMap.get("LTE_DEV"))
stringBuffer.append("")
stringBuffer.append("DB_DEV")
stringBuffer.append("&")
stringBuffer.append(effortSplitMap.get("DB_DEV"))
stringBuffer.append("")
stringBuffer.append("HLR_FT")
stringBuffer.append("&")
stringBuffer.append(effortSplitMap.get("HLR_FT"))
stringBuffer.append("")
stringBuffer.append("HSS_FT")
stringBuffer.append("&")
stringBuffer.append(effortSplitMap.get("HSS_FT"))
stringBuffer.append("")
stringBuffer.append("LTE_FT")
stringBuffer.append("&")
stringBuffer.append(effortSplitMap.get("LTE_FT"))
stringBuffer.append("")
stringBuffer.append("DB_FT")
stringBuffer.append("&")
stringBuffer.append(effortSplitMap.get("DB_FT"))
issue.setCustomFieldValue(customFieldManager.getCustomFieldObjectByName('Effort Split'),stringBuffer.toString())
DefaultIssueChangeHolder issueChangeHolder = new DefaultIssueChangeHolder();
def cf_object=customFieldManager.getCustomFieldObjectByName('Effort Split')
cf_object.updateValue(null, issue, new ModifiedValue(null, issue.getCustomFieldValue(cf_object)), issueChangeHolder);