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 に答える