I have created a Jelly Sript to update a custom file (Group Picker)..
the sript works fine however the filter used to identify the issues which should be updated does not "see" the new values .. it still has the old values even the field is updated..
here my test script (Sorry for the debug and commented areas)
<JiraJelly xmlns:jira="jelly:com.atlassian.jira.jelly.enterprise.JiraTagLib" xmlns:core="jelly:core" xmlns:log="jelly:log" >
<jira:Login username="user" password="pwd">
<log:info>Reset Support Group</log:info>
<!-- Set the SearchRequestFilter for all Teams -->
<core:set var="filterWebTeam" value="11000" />
<core:set var="filterEMEATeam" value="11001" />
<core:set var="filterNATeam" value="11002" />
<core:set var="filterOpsTeam" value="11003" />
<core:set var="filterQADTeam" value="11004" />
<core:set var="filterAPTeam" value="11005" />
<core:new var="changeHolder" className="com.atlassian.jira.issue.util.DefaultIssueChangeHolder"/>
<!-- Get an instance of ComponentManager -->
<core:invokeStatic className="com.atlassian.jira.ComponentManager" method="getInstance" var="componentManager"/>
<!-- Get Custom FieldManager from ComponentManager -->
<core:invoke on="${componentManager}" method="getCustomFieldManager" var="customFieldManager" />
<!-- Get the IssueManager from ComponentManager -->
<core:invoke on="${componentManager}" method="getIssueManager" var="issueManager" />
<!-- FIRST RUN THROUGH THE WEB TEAM FILTER -->
<jira:RunSearchRequest filterid="${filterWebTeam}" var="issues" />
<core:forEach var="issue" items="${issues}">
<!-- Grab an instance of ComponentManager -->
<core:invokeStatic className="com.atlassian.jira.ComponentManager" method="getInstance" var="componentManager"/>
<core:invokeStatic className="com.atlassian.jira.component.ComponentAccessor" method="getIssueService" var="issueService"/>
<!-- Get CustomField object from customFieldManager -->
<core:invoke on="${customFieldManager}" method="getCustomFieldObjectByName" var="customFieldObj">
<core:arg type="java.lang.String" value="Support Group"/>
</core:invoke>
<core:invoke on="${componentManager}" method="getIssueUpdater" var="issueUpdater"/>
<!-- Get the Issue from IssueManager current to be changed Issues -->
<core:invoke on="${issueManager}" method="getIssueObject" var="issueKey">
<core:arg type="java.lang.String" value="${issue.key}"/>
</core:invoke>
<!-- Get the Issue from IssueManager default Issue for Web team -->
<core:invoke on="${issueManager}" method="getIssueObject" var="issueKey2">
<core:arg type="java.lang.String" value="TEST-171"/>
</core:invoke>
<!-- Get Custom Field Value -->
<core:invoke on="${customFieldObj}" method="getValue" var="myFieldValue">
<core:arg type="com.atlassian.jira.issue.IssueImpl" value="${issueKey}"/>
</core:invoke>
<core:set var="issueBean" value="${issueKey},${issueKey},IssueEventType.ISSUE_UPDATED,${username}" />
<!-- Get Custom Field Value SLA AP ERP -->
<core:invoke on="${customFieldObj}" method="getValue" var="myFieldValueNew">
<core:arg type="com.atlassian.jira.issue.IssueImpl" value="${issueKey2}"/>
</core:invoke>
<log:warn>OLD VALUE [${myFieldValue}] - NEW VALUE[${myFieldValueNew}]</log:warn>
<core:new var="modifiedValue" className="com.atlassian.jira.issue.ModifiedValue">
<core:arg type="java.lang.Object" value="${myFieldValue}" />
<core:arg type="java.lang.Object" value="${myFieldValueNew}" />
</core:new>
<core:invoke on="${customFieldObj}" method="updateValue" var="assignedgroup">
<core:arg type="com.atlassian.jira.issue.fields.layout.field.FieldLayoutItemImpl" value="${null}"/>
<core:arg type="com.atlassian.jira.issue.IssueImpl" value="${issueKey}"/>
<core:arg type="com.atlassian.jira.issue.ModifiedValue" value="${modifiedValue}"/>
<core:arg type="com.atlassian.jira.issue.util.DefaultIssueChangeHolder" value="${changeHolder}"/>
</core:invoke>
<!-- save issue -->
<!--
<core:invoke on="${issueUpdater}" method="doUpdate" var="updatePri">
<core:arg type="java.lang.String" value="${issueBean}, true"/>
</core:invoke>
-->
<core:getStatic
className="com.atlassian.jira.event.type.EventDispatchOption"
field="ISSUE_UPDATED"
var="dispatchOption" />
<core:invoke on="${issueKey}" method="store" />
<core:invoke on="${issueManager}" method="updateIssue">
<core:arg type="com.atlassian.crowd.embedded.api.User" value="${jira.user}" />
<core:arg type="com.atlassian.jira.issue.MutableIssue" value="${issueKey}" />
<core:arg type="com.atlassian.jira.event.type.EventDispatchOption" value="${dispatchOption}" />
<core:arg type="boolean" value="false" />
</core:invoke>
<core:invoke on="${issueKey}" method="store" />
</core:forEach>
<!-- Second QAD Team -->
<jira:RunSearchRequest filterid="${filterQADTeam}" var="issues" />
<core:forEach var="issue" items="${issues}">
<!-- Grab an instance of ComponentManager -->
<core:invokeStatic className="com.atlassian.jira.ComponentManager" method="getInstance" var="componentManager"/>
<core:invokeStatic className="com.atlassian.jira.component.ComponentAccessor" method="getIssueService" var="issueService"/>
<!-- Get CustomField object from customFieldManager -->
<core:invoke on="${customFieldManager}" method="getCustomFieldObjectByName" var="customFieldObj">
<core:arg type="java.lang.String" value="Support Group"/>
</core:invoke>
<core:invoke on="${componentManager}" method="getIssueUpdater" var="issueUpdater"/>
<!-- Get the Issue from IssueManager current to be changed Issues -->
<core:invoke on="${issueManager}" method="getIssueObject" var="issueKey">
<core:arg type="java.lang.String" value="${issue.key}"/>
</core:invoke>
<!-- Get the Issue from IssueManager default Issue for QADteam -->
<core:invoke on="${issueManager}" method="getIssueObject" var="issueKey2">
<core:arg type="java.lang.String" value="TEST-176"/>
</core:invoke>
<!-- Get Custom Field Value -->
<core:invoke on="${customFieldObj}" method="getValue" var="myFieldValue">
<core:arg type="com.atlassian.jira.issue.IssueImpl" value="${issueKey}"/>
</core:invoke>
<!-- Get Custom Field Value SLA AP ERP -->
<core:invoke on="${customFieldObj}" method="getValue" var="myFieldValueNew">
<core:arg type="com.atlassian.jira.issue.IssueImpl" value="${issueKey2}"/>
</core:invoke>
<core:set var="issueBean" value="${issueKey},${issueKey},IssueEventType.ISSUE_UPDATED,${username}" />
<log:warn>OLD VALUE [${myFieldValue}] - NEW VALUE[${myFieldValueNew}]</log:warn>
<core:new var="modifiedValue" className="com.atlassian.jira.issue.ModifiedValue">
<core:arg type="java.lang.Object" value="${myFieldValue}" />
<core:arg type="java.lang.Object" value="${myFieldValueNew}" />
</core:new>
<core:invoke on="${customFieldObj}" method="updateValue" var="assignedgroup">
<core:arg type="com.atlassian.jira.issue.fields.layout.field.FieldLayoutItemImpl" value="${null}"/>
<core:arg type="com.atlassian.jira.issue.IssueImpl" value="${issueKey}"/>
<core:arg type="com.atlassian.jira.issue.ModifiedValue" value="${modifiedValue}"/>
<core:arg type="com.atlassian.jira.issue.util.DefaultIssueChangeHolder" value="${changeHolder}"/>
</core:invoke>
<!-- save issue -->
<!-- save issue and fire an event -->
<!--
<core:invoke on="${issueUpdater}" method="doUpdate" var="updatePri">
<core:arg type="java.lang.String" value="${issueBean}, true"/>
</core:invoke>
<core:invoke on="${issueKey}" method="store" />
-->
<core:getStatic
className="com.atlassian.jira.event.type.EventDispatchOption"
field="ISSUE_UPDATED"
var="dispatchOption" />
<core:invoke on="${issueKey}" method="store" />
<core:invoke on="${issueManager}" method="updateIssue">
<core:arg type="com.atlassian.crowd.embedded.api.User" value="${jira.user}" />
<core:arg type="com.atlassian.jira.issue.MutableIssue" value="${issueKey}" />
<core:arg type="com.atlassian.jira.event.type.EventDispatchOption" value="${dispatchOption}" />
<core:arg type="boolean" value="true" />
</core:invoke>
<core:invoke on="${issueKey}" method="store" />
<!--
<core:invoke on="${issueService}" method="update" var="updateValidationResult">
<core:arg value="${jira.user}"/>
<core:arg value="${issueKey}"/>
<core:arg type="com.atlassian.jira.event.type.EventDispatchOption" value="${dispatchOption}" />
<core:arg type="boolean" value="false" />
</core:invoke>
-->
</core:forEach>
</jira:Login>
</JiraJelly>
you have to do the reindex after updating issue, i am not sure how to do it using Jelly Script
Thanks I have added.. see below.. it actually works
however this means that everytime I ran this I have to reindex.. isnt there an easer way
<core:invokeon="${componentManager}"method="getIndexManager" var="indexManager" />
<core:invokeon="${indexManager}"method="reIndexAll"var="millis" />
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Glad to hear it worked!!
when you update issue you have to reindex that issue, i think this is the easyest way insted of reindex entaire instance
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Thanks !!
here the code to only reindex current updated issue
<core:invoke on="${componentManager}" method="getIndexManager" var="indexManager" />
<core:invoke on="${indexManager}" method="reIndex" var="millis" >
<core:arg type="com.atlassian.jira.issue.MutableIssue" value="${issueKey}" />
</core:invoke>
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.