14

プログラムで値をCustomFieldに保存または更新する方法を見つけるために何日も費やし、最終的にそれがどのように行われるかを見つけました。それで、私はこれを質問して、それから私がこの質問と答えを持っていたかったのでそれに答えます。

JIRAのカスタムフィールドの値を保存または更新する方法について、矛盾するドキュメントがあります。私が使用していたもの:

customField.setCustomFieldValue(CustomField, value);

これは値をデータベースに保存しませんが、私が知る限り値を更新します。これは、たとえばワークフローポスト関数遷移でCustomFieldをさらに下に使用している場合にのみ役立ちます。

Jira4.3.2を使用しています。

CustomFields値をJIRAデータベースに永続化するにはどうすればよいですか?

4

4 に答える 4

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);
}
于 2011-11-25T03:05:44.927 に答える
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-Objectを取得する別の方法があります。

于 2012-08-28T15:23:04.120 に答える
0

これは、JIRA6.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);
于 2015-08-21T15:31:16.260 に答える
-1

私は同じ問題を抱えていて、このプラグインを使用して解決しました、fyi =)

于 2012-07-03T09:55:19.163 に答える