2011-11-24 3 views
12

私は、プログラムでカスタムフィールドに値を保存または更新する方法を見つけようと数日を費やしていました。だから私はこれを質問にして、私はこの質問と答えを持っていたと思っていました。JIRAのカスタムフィールドに値をプログラムで保存するにはどうすればよいですか?

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

customField.setCustomFieldValue(CustomField, value); 

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

私はJira 4.3.2を使用しています。

CustomFieldsの値をJIRAデータベースに永続化する方法を教えてください。

答えて

16

これで、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); 
} 
+0

あなたはStringにvalueToSaveを固定する必要がないように、私は、メソッドの外setCustomFieldValueにしてください。 – lilalinux

+0

ありがとう、それは本当に私を助けました.... :) – Amrita

+0

おかげで...兄弟...私の人生を救った... – Arvind

-1

私は同じ問題を持っていたし、それがthis pluginを使用して解決していた、FYI =ここ)

+0

リンクが壊れていますが、アドオン既存のJIRA Suiteユーティリティとしてまだ存在しています – mdoar

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を取得するための別の方法で。

+0

選択リストのカスタムフィールドに値を設定し、新しい値が選択リストにない場合はどうなりますか? –

+0

したがって、 'updateValue'の' fieldLayoutItem' - 引数はnullでもかまいませんか?私はそれが何を意味しているのだろうか?また、その引数を持たない 'updateValue'の形式がない理由は... –

+0

' fieldLayoutItem'はレンダラーを決定するために使用されます。ヌルの場合はテキストレンダラーにフォールバックします。 – LukeSolar

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);