Jira: Как получить предыдущее значение для настраиваемого поля в настраиваемом IssueEventListener
Так как же получить предыдущее значение настраиваемого поля в Jira IssueEventListener? Я пишу пользовательский обработчик для события issueUpdated(IssueEvent), и я хотел бы изменить поведение обработчика, если определенное настраиваемое поле изменилось. Чтобы определить тип изменения, я хотел бы сравнить предыдущие и текущие значения.
(Я не спрашиваю о том, как получить его текущую стоимость - я знаю, как получить это из соответствующей проблемы)
Я разрабатываю против Jira 4.0.2 на Windows.
Это лучший способ отсканировать историю изменений для последнего известного значения?
List changes = changeHistoryManager.getChangeHistoriesForUser(issue, user);
2 ответа
Я предполагаю, что оригинальный постер пишет плагин 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
- поле
- Я бы
- FieldType
- NewString
- OldValue
- группа
Для многих типов пользовательских полей Object oldValue, вероятно, является просто строкой. Но я не думаю, что это правда для каждого случая.
Попробуйте этот пример:
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 - это имя настраиваемого поля.