我花了几天时间试图找出如何以编程方式将值保存或更新到CustomField中,并最终了解它是如何完成的。所以我会把这个问题作为一个问题然后回答,因为我很乐意回答这个问题。
有关如何在JIRA中保存或更新自定义字段值的文档存在冲突。我正在使用:
customField.setCustomFieldValue(CustomField, value);
这不会将值保存到数据库中,但它会根据我的意思更新值。例如,如果您在工作流后期函数转换中进一步使用CustomField,它将非常有用。
我正在使用Jira 4.3.2。
如何将CustomFields值保存到JIRA数据库?
答案 0 :(得分:17)
好的,这就是我成功更新并将CustomField值保存到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);
}
答案 1 :(得分:3)
我是这样做的(对于我以编程方式存储随机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);
...
或多或少与您相同,但使用另一种方式获取ModifiedValue
- 对象。
答案 2 :(得分:0)
这是一个适用于JIRA 6.4.7的解决方案,用于更新自定义字段值。实际上我正在更新一个选择字段,因此我必须得到它Option
:
MutableIssue issue = issueManager.getIssueByCurrentKey(issueKey);
FieldConfig relevantConfig = customField.getRelevantConfig(issue);
// if you use a text field use String. or double for numeric
Option optionForValue = optionsManager.getOptions(relevantConfig).getOptionForValue(option, null);
issue.setCustomFieldValue(customField,optionForValue);
Map<String, ModifiedValue> modifiedFields = issue.getModifiedFields();
FieldLayoutItem fieldLayoutItem =
fieldLayoutManager.getFieldLayout(issue).getFieldLayoutItem(customField);
DefaultIssueChangeHolder issueChangeHolder = new DefaultIssueChangeHolder();
final ModifiedValue modifiedValue = modifiedFields.get(customField.getId());
customField.updateValue(fieldLayoutItem, issue, modifiedValue, issueChangeHolder);
答案 3 :(得分:-1)
我遇到了同样的问题,并使用this plugin,fyi =)
解决了问题