Jira:如何获取自定义IssueEventListener中自定义字段的先前值

mun*_*ger 4 jira event-handling custom-fields

那么如何在Jira IssueEventListener中获取自定义字段先前值?我正在为issueUpdated(IssueEvent)事件编写自定义处理程序,如果某个自定义字段已更改,我想更改处理程序的行为.要检测更改类型,我想比较先前和当前值.

(我不是在问如何获得它的当前值 - 我知道如何从相关问题中获得它)

我正在开发针对Windows上的Jira 4.0.2.

扫描最近已知值的更改历史记录的最佳方法是什么?

List changes = changeHistoryManager.getChangeHistoriesForUser(issue, user);
Run Code Online (Sandbox Code Playgroud)

小智 8

我假设原来的海报是用Java编写JIRA插件.我无法确定如何在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" );
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

changeItem的一些可能的键值是:

  • NEWVALUE
  • oldstring
  • 领域
  • ID
  • 字段类型
  • newstring
  • OLDVALUE

对于许多自定义字段类型,Object oldValue可能只是一个String.但我不认为每个案例都是如此.