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.
Online forums and learning are now in one easy-to-use experience.
By continuing, you accept the updated Community Terms of Use and acknowledge the Privacy Policy. Your public name, photo, and achievements may be publicly visible and available in search engines.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.