4

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

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

我正在 Windows 上针对 Jira 4.0.2 进行开发。

扫描更改历史以获取最后一个已知值的最佳方法是什么?

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

2 回答 2

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

changeItem 的一些可能的关键值是:

  • 新价值
  • 旧弦
  • 场地
  • ID
  • 字段类型
  • 新字符串
  • 旧值
  • 团体

对于许多自定义字段类型,Object oldValue 可能只是一个字符串。但我不认为这适用于所有情况。

于 2012-06-26T17:29:36.157 回答
0

试试这个例子:

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 是自定义字段的名称。

于 2017-07-26T13:50:12.077 回答