2010-08-26 6 views
4

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

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

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

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

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

ответ

8

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

Для многих типов настраиваемых полей объекта OldValue, вероятно, просто строка. Но я не думаю, что это верно для каждого случая.

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 это имя customfield.

+1

Пожалуйста, объясните, почему *** это решение. Код сам по себе редко помогает. –