如何以编程方式将值保存到 JIRA 中的自定义字段中?

我花了几天时间试图找出如何以编程方式将值保存或更新到自定义字段中,并最终找出了它是如何完成的。所以我会把这个问题变成一个问题,然后回答它,因为我很想有这个问题和答案。

关于如何在 JIRA 中保存或更新自定义字段的值,存在相互冲突的文档。我正在使用:

customField.setCustomFieldValue(CustomField, value);

这不会将值保存到数据库中,但据我所知,它确实会更新该值。例如,仅当您在工作流后期函数转换中进一步使用自定义字段时,它才有用。

我使用的是 Jira 4.3.2。

如何将自定义字段值保存到 JIRA 数据库中?


答案 1

好的,这就是我成功更新自定义字段值并将其保存到JIRA数据库的方式。

欢迎评论...

private void saveValue(MutableIssue issue, String valueToSave, CustomField
        customField) throws FieldLayoutStorageException {

    issue.setCustomFieldValue(customField, valueToSave);

    Map<String, ModifiedValue> modifiedFields = issue.getModifiedFields();

    FieldLayoutItem fieldLayoutItem =
    ComponentManager.getInstance().getFieldLayoutManager().getFieldLayout(issue).getFieldLayoutItem(
            customField);

    DefaultIssueChangeHolder issueChangeHolder = new DefaultIssueChangeHolder();

    final ModifiedValue modifiedValue = (ModifiedValue) modifiedFields.get(customField.getId());

    customField.updateValue(fieldLayoutItem, issue, modifiedValue, issueChangeHolder);
}

答案 2

以下是我的做法(对于自定义字段,我以编程方式存储随机 UUID):

CustomField cfHash = customFieldManager.getCustomFieldObjectByName(...);
IssueChangeHolder changeHolder = new DefaultIssueChangeHolder();
try {
    Object newHashValue = java.util.UUID.randomUUID().toString();
    Object oldHashValue = issue.getCustomFieldValue(cfHash);

    issue.setCustomFieldValue(cfHash, newHashValue);
    cfHash.updateValue(null, issue, new ModifiedValue(oldHashValue, newHashValue), changeHolder);
...

或多或少与您相同,但使用另一种方式获取 -Object。ModifiedValue


推荐