Update Custom Field Value works, however the Filter does not see the new value

Goran Rasic September 16, 2013

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>

2 answers

1 accepted

1 vote
Answer accepted
RambanamP
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
September 16, 2013

you have to do the reindex after updating issue, i am not sure how to do it using Jelly Script

Goran Rasic September 16, 2013

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" />

RambanamP
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
September 16, 2013

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

2 votes
Goran Rasic September 16, 2013

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>

Suggest an answer

Log in or Sign up to answer