Как программно сохранить значение в настраиваемое поле в JIRA? - PullRequest
13 голосов
/ 24 ноября 2011

Я потратил несколько дней, пытаясь выяснить, как программно сохранить или обновить значение в CustomField, и, наконец, выяснил, как это делается.Поэтому я задам этот вопрос, а затем отвечу на него так, как хотел бы получить этот вопрос и ответ.

Существует противоречивая документация о том, как сохранить или обновить значение для настраиваемого поля в JIRA.Я использовал:

customField.setCustomFieldValue(CustomField, value);

Это не сохраняет значение в базу данных, но обновляет значение, насколько я могу судить.Это полезно только в том случае, если вы используете CustomField ниже при переходе функции Post Workflow, например.

Я использую Jira 4.3.2.

Как сохранить значение CustomFields вбаза данных JIRA?

Ответы [ 4 ]

17 голосов
/ 25 ноября 2011

Хорошо, вот как я успешно обновляю и сохраняю значение 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);
}
3 голосов
/ 28 августа 2012

Вот как я это делаю (для настраиваемого поля я программно сохраняю случайный 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 -объект.

0 голосов
/ 21 августа 2015

Вот решение, которое работает для меня в 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);
0 голосов
/ 03 июля 2012

У меня была такая же проблема, и она была решена с помощью этого плагина , fyi =)

...