Jira: How to get the previous value for a custom field in a custom IssueEventListener

So how to get the previous custom field value in Jira IssueEventListener? I am writing a custom issueUpdated event handler (IssueEvent), and I would like to change the behavior of the handler if a specific user field has changed. To determine the type of change, I would like to compare the previous and current values.

(I am not asking how to get its current value - I know how to get this from a related problem)

I am developing against Jira 4.0.2 on Windows.

What is the best way to scan change history for the last known value?

List changes = changeHistoryManager.getChangeHistoriesForUser(issue, user); 
+4
source share
2 answers

I assume the original poster is writing a JIRA plugin with Java. I can’t be sure how to accomplish this task in JIRA v4.0.2, but here is how I managed to do it with JIRA v5.0.2 (the solutions may be the same):

 public void workflowEvent( IssueEvent event ) { Long eventTypeId = event.getEventTypeId(); if( eventTypeId.equals( EventType.ISSUE_UPDATED_ID ) ) { List<GenericValue> changeItemList = null; try { changeItemList = event.getChangeLog().getRelated( "ChildChangeItem" ); } catch( GenericEntityException e ) { // Error or do what you need to do here. e.printStackTrace(); } if( changeItemList == null ) { // Same deal here. return; } Iterator<GenericValue> changeItemListIterator = changeItemList.iterator(); while( changeItemListIterator.hasNext() ) { GenericValue changeItem = ( GenericValue )changeItemListIterator.next(); String fieldName = changeItem.get( "field" ).toString(); if( fieldName.equals( customFieldName ) ) // Name of custom field. { Object oldValue = changeItem.get( "oldvalue" ); Object newValue = changeItem.get( "newvalue" ); } } } } 

Some possible key values ​​for the changeItem parameter:

  • New_value
  • oldstring
  • field
  • ID
  • Fieldtype
  • Newstring
  • Oldvalue
  • groups

For many custom field types, Object oldValue is probably just a string. But I do not think that this is true for every case.

+8
source

Try this example:

 String codeProjetOldValue= ""; List<GenericValue> changeItemList = issueEvent.getChangeLog().getRelated("ChildChangeItem"); for (GenericValue genericValue : changeItemList) { if(champCodeProjet.equals(genericValue.get("field"))){ codeProjetOldValue=genericValue.getString("oldstring"); break; } } 

Note: champCodeProjet is the name of the custom field.

0
source

All Articles