JIRA Plugins SDK:如何找出更改的数据?

JIRA Plugins SDK: How to find out changed data?

我正在使用 JIRA 插件 sdk 来处理已更改的问题。

我已经实现了一个 IssueListener,并且我可以访问 Issue 本身和 IssueEvent。

我如何知道我的 Issue 的哪个 属性(摘要、描述、估计...)已更改?

更改日志可能包含已更改的内容,并且 IssueEvent 对象上有一个方法可以获取此内容 (getChangeLog),它 returns 一个 GenericValue 对象。

This post on the Atlassian Answers site gives some code related to an Atlassian tutorial on how to write JIRA Event Listeners.

相关代码片段如下所示:

if (eventTypeId.equals(EventType.ISSUE_UPDATED_ID)) {
    List<GenericValue> changeItems = null;

    try {
        GenericValue changeLog = issueEvent.getChangeLog();
        changeItems = changeLog.internalDelegator.findByAnd("ChangeItem", EasyMap.build("group",changeLog.get("id")));
    } catch (GenericEntityException e){
        System.out.println(e.getMessage());
    }

    log.info("number of changes: {}",changeItems.size());
    for (Iterator<GenericValue> iterator = changeItems.iterator(); iterator.hasNext();){
        GenericValue changetemp = (GenericValue) iterator.next();
            String field = changetemp.getString("field");
            String oldstring = changetemp.getString("oldstring");
            String newstring = changetemp.getString("newstring");
            StringBuilder fullstring = new StringBuilder();
            fullstring.append("Issue ");
            fullstring.append(issue.getKey());
            fullstring.append(" field ");
            fullstring.append(field);
            fullstring.append(" has been updated from ");
            fullstring.append(oldstring);
            fullstring.append(" to ");
            fullstring.append(newstring);
            log.info("changes {}", fullstring.toString());

            /* Do something here if a particular field you are
               looking for has being changed.
            */
            if(field == "Component") changeAssignee(changetemp, issue, user);
    }
}