Как сохранить значение в пользовательское поле в JIRA программным способом?
Я потратил несколько дней, пытаясь узнать, как сохранить или обновить значение в CustomField программно и, наконец, узнал, как это делается. Поэтому я сделаю это вопросом, а затем отвечу на него так, как мне хотелось бы иметь этот вопрос и ответ.
существует противоречивая документация о том, как сохранить или обновить значение для настраиваемого поля в JIRA. Я использовал:
customField.setCustomFieldValue(CustomField, value);
Это не сохраняет значение в базе данных, но обновляет значение, насколько я могу сказать. Это полезно только в том случае, если вы используете CustomField ниже в переходе функции Post рабочего процесса, например.
Я использую Jira 4.3.2.
Как сохранить значение CustomFields в базе данных JIRA?
4 ответов
Ok, вот как я успешно обновляю и сохраняю значение CustomField в Jira db.
комментарии приветствуются...
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);
}
вот как я это делаю (для пользовательского поля я программно храню случайный 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
-объект.
здесь решение, которое работает для меня в 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);
У меня была такая же проблема и она была решена с помощью плагин, fyi=)