【问题标题】:Jira: How to obtain the previous value for a custom field in a custom IssueEventListenerJira:如何在自定义 IssueEventListener 中获取自定义字段的先前值
【发布时间】:2010-08-26 03:20:12
【问题描述】:

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

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

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

是扫描更改历史以查找最后一个已知值的最佳方法吗?

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

【问题讨论】:

    标签: event-handling jira custom-fields


    【解决方案1】:

    我假设原始海报正在使用 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 的一些可能的键值是:

    • 新价值
    • 旧字符串
    • 字段
    • 身份证
    • 字段类型
    • 新字符串
    • 旧值

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

    【讨论】:

      【解决方案2】:

      试试这个例子:

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

      【讨论】:

      • 请扩展您的答案以解释为什么这是一个解决方案。代码本身很少有帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-17
      • 1970-01-01
      相关资源
      最近更新 更多