Jira: Как получить предыдущее значение для настраиваемого поля в настраиваемом IssueEventListener

Так как же получить предыдущее значение настраиваемого поля в Jira IssueEventListener? Я пишу пользовательский обработчик для события issueUpdated(IssueEvent), и я хотел бы изменить поведение обработчика, если определенное настраиваемое поле изменилось. Чтобы определить тип изменения, я хотел бы сравнить предыдущие и текущие значения.

(Я не спрашиваю о том, как получить его текущую стоимость - я знаю, как получить это из соответствующей проблемы)

Я разрабатываю против Jira 4.0.2 на Windows.

Это лучший способ отсканировать историю изменений для последнего известного значения?

List changes = changeHistoryManager.getChangeHistoriesForUser(issue, user);

2 ответа

Я предполагаю, что оригинальный постер пишет плагин JIRA с Java. Я не могу быть уверен в том, как выполнить эту задачу в JIRA v4.0.2, но вот как мне удалось сделать это с JIRA v5.0.2 (решения вполне могут быть одинаковыми):

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" );
      }
    }
  }
}

Некоторые возможные значения ключа для changeItem:

  • Новое_значение
  • oldstring
  • поле
  • Я бы
  • FieldType
  • NewString
  • OldValue
  • группа

Для многих типов пользовательских полей Object oldValue, вероятно, является просто строкой. Но я не думаю, что это правда для каждого случая.

Попробуйте этот пример:

String codeProjetOldValue= "";

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

Обратите внимание, что: champCodeProjet - это имя настраиваемого поля.

Другие вопросы по тегам