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

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

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

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

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

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

Ответы [ 2 ]

8 голосов
/ 26 июня 2012

Я предполагаю, что оригинальный постер пишет плагин 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
  • поле * * +1011
  • ID
  • FieldType
  • NewString
  • OldValue
  • группа

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

0 голосов
/ 26 июля 2017

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

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 - это имя настраиваемого поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...