Как программно сохранить значение в настраиваемое поле в JIRA?

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

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

customField.setCustomFieldValue(CustomField, value);

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

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

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


person enormace    schedule 24.11.2011    source источник


Ответы (4)


Хорошо, вот как я успешно обновляю и сохраняю значение 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);
}
person enormace    schedule 25.11.2011
comment
Я бы сделал setCustomFieldValue вне метода, чтобы вам не нужно было привязывать valueToSave к String. - person lilalinux; 26.09.2012
comment
Я задаю один вопрос здесь сам, так как я не хочу создавать дубликат. Используя приведенное выше решение, я могу сохранить данные настраиваемого поля в базе данных, но значение настраиваемого поля не отображается на странице просмотра проблемы при создании проблемы? Но это отображается при обновлении страницы !! Я уверен, почему это дополнительное обновление требуется? Можете ли вы выделить некоторые из них? - person Sukane; 18.11.2013
comment
У меня есть один вопрос. что, если я не хочу менять значение проблемы, а хочу обновить только параметры одного настраиваемого поля. Я имею в виду выбор значения из одного настраиваемого поля и обновление до другого? - person Mohammad Adnan; 05.04.2014
comment
Я не думаю, что это больше работает, и эта строка содержит устаревшие методы: ComponentManager.getInstance().getFieldLayoutManager().getFieldLayout(issue).getFieldLayoutItem( customField); - person JBaczuk; 04.03.2015
comment
docs.atlassian.com/ software/jira/docs/api/7.6.1/ ComponentManager заменяется на ComponentAccessor docs.atlassian.com/software/jira/docs/api/7.6.1/com/atlassian/ так: ComponentAccessor.getFieldLayoutManager( ).getFieldLayout(выпуск).getFieldLayoutItem(customField); - person yan; 25.06.2018

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

person Hermann Schwärzler    schedule 28.08.2012
comment
Что делать, если вам нужно заполнить настраиваемое поле списка выбора, а новое значение отсутствует в списке выбора? - person Mohammad Adnan; 05.04.2014
comment
Итак, fieldLayoutItem-аргумент updateValue может просто быть нулевым? Интересно, что это значит -- и почему вообще нет формы updateValue без этого аргумента... - person Mikhail T.; 02.04.2015
comment
fieldLayoutItem используется для определения рендерера — если он нулевой, он будет отступать к текстовому рендереру. - person LukeSolar; 21.08.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);
person LukeSolar    schedule 21.08.2015

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

person Shihwei    schedule 03.07.2012
comment
Ссылка не работает, но надстройка все еще существует как часто используемые утилиты JIRA Suite. - person mdoar; 10.03.2016