My goal:
Copy the value of aggregate original estimate to a custom field at a specific place in the workflow. My intention is to use groovyrunner plugin's "Script Post Function" ability to obtain and copy the value into my custom field called Locked Estimate (cf[10214]). Looking at the API at http://docs.atlassian.com/software/jira/docs/api/latest/, I see this is how I obtain aggregate original estimate:
My question:
I've never written javascript. Will any kind souls feel pity on me to help me craft such a script?
Final Thoughts:
I wish I didn't have to restort to JS to solve this problem, but I found out from Atlassian that getting the data from aggregate original estimate was more involved than a copy from one cell to another via a post function.
In Atlassian's words:
I am sorry but the Original Estimate field does not simply store a numeric value and thus can not be copied out. I would recommend that you just ask your users to enter it twice. If you would like a cleaner solution than you may need a custom plugin to accomplish this. You can look into our API at: https://confluence.atlassian.com/display/JIRA/API+Documentation or you can get in touch with an Atlassian Expert: http://www.atlassian.com/resources/experts/ that may be able to assist you. Unfortunetly, custom plugins are outside of the Atlassian Support Offerings (http://www.atlassian.com/resources/experts/) and we can not assist you with developing this.
i took a few hours to dust off the programming skills. i'm sorely out of practice, and this undoubtedly could be optimized. nonetheless, it does the trick.
import com.atlassian.jira.ComponentManager
import com.atlassian.jira.security.JiraAuthenticationContextImpl
import com.atlassian.velocity.VelocityManager
import com.atlassian.jira.config.properties.ApplicationPropertiesImpl
import com.atlassian.jira.issue.fields.AggregateOriginalEstimateSystemField
import com.atlassian.jira.issue.search.SearchProviderFactoryImpl
import com.atlassian.jira.project.DefaultProjectFactory
import com.atlassian.jira.permission.DefaultPermissionContextFactory
import com.atlassian.jira.permission.PermissionTypeManager
import com.atlassian.jira.permission.WorkflowPermissionFactory
import com.atlassian.jira.security.ThreadLocalCachingPermissionManager
import com.atlassian.jira.issue.util.AggregateTimeTrackingCalculatorFactoryImpl
import com.atlassian.jira.issue.util.AggregateTimeTrackingBean
import com.atlassian.jira.issue.util.IssueImplAggregateTimeTrackingCalculator
import com.atlassian.jira.issue.fields.CustomFieldImpl
import com.atlassian.jira.issue.managers.DefaultCustomFieldManager
import com.atlassian.jira.issue.fields.CustomFieldImpl
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
import com.atlassian.jira.issue.fields.layout.field.DefaultFieldLayoutManager
import com.atlassian.jira.issue.fields.layout.field.FieldLayoutItem
import com.atlassian.jira.issue.ModifiedValue
// constructing objects for getting AOE value
ComponentManager componentManager = ComponentManager.getInstance()
JiraAuthenticationContextImpl jac = componentManager.getJiraAuthenticationContext()
AggregateTimeTrackingCalculatorFactoryImpl attcfi =
new AggregateTimeTrackingCalculatorFactoryImpl
(jac,new SearchProviderFactoryImpl(),new ThreadLocalCachingPermissionManager
(new WorkflowPermissionFactory(),componentManager.getPermissionContextFactory(),
componentManager.getProjectFactory()))
IssueImplAggregateTimeTrackingCalculator iiattc = new IssueImplAggregateTimeTrackingCalculator
(jac,componentManager.getPermissionManager())
AggregateTimeTrackingBean bean = iiattc.getAggregates(issue)
AggregateOriginalEstimateSystemField aoesf = new AggregateOriginalEstimateSystemField
(componentManager.getVelocityManager(),componentManager.getApplicationProperties(),
jac,attcfi)
// constructing objects for getting/setting custom field Locked Estimate
CustomFieldImpl lockedEstimate = componentManager.getCustomFieldManager().
getCustomFieldObject(10214)
// finally calculating the answer
Long summedEstimate = aoesf.getAggregateDuration(bean)
summedEstimate == null ? summedEstimate = 0 : summedEstimate
lockedEstimate
.updateValue (componentManager.getFieldLayoutManager().getFieldLayout(issue).getFieldLayoutItem(lockedEstimate),
issue,new ModifiedValue(lockedEstimate.getValue(issue),summedEstimate as Double),
new DefaultIssueChangeHolder())
return true
You need the com.atlassian.jira.issue.util.AggregateTimeTrackingBean IIRC... I have done this before but can't find sample code. Probably best to look at the jira source.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.