2011-11-24 25 views
12

Bir değeri programlı olarak CustomField'a nasıl kaydedeceğinizi veya güncelleştirmeyi bulmaya çalışarak geçirdim ve sonunda nasıl yapıldığını öğrendim. Bu yüzden bunu bir soru haline getireceğim ve sonra bu soruyu ve cevabı almak için sevdiğim gibi cevaplayacağım.JIRA'da bir değeri programlı olarak özel bir alana nasıl kaydederim?

JIRA'daki Özel Alan için bir değerin nasıl kaydedileceği veya güncelleneceği konusunda çelişen belgeler var.

customField.setCustomFieldValue(CustomField, value); 

Bu veritabanına değeri kaydetmez ama bildiğim kadarıyla söyleyebilirim değerini güncellemek yapar: Ben kullanıyordum. Örneğin, yalnızca bir Workflow Post Function geçişinde CustomField'ı kullanıyorsanız yararlıdır.

Jira 4.3.2 kullanıyorum.

CustomFields değerini JIRA veritabanında nasıl tutarım?

cevap

16

Tamam, bu yüzden CustomField değerini JIRA db'ye başarıyla güncelleyip kaydediyorum. karşılama

Yorumlar ...

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

Ben, yöntemin dışında setCustomFieldValue yapardım. – lilalinux

+0

Teşekkürler, bu gerçekten bana yardımcı oldu .... :) – Amrita

+0

teşekkürler ... kardeşim ... hayatımı kurtardınız ... – Arvind

-1

Ben

İşte
+0

Bağlantı bozuk ama eklenti hala yaygın olarak kullanılan JIRA Suite Utilities – mdoar

3

ben programlı bir depolamak bir özel alan için (böyle yaparız) = aynı sorunu vardı ve bilginize, this plugin ıle çözümlenebilir vardı rastgele 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); 
... 

Daha yada senin kadar ancak ModifiedValue -Nesne almak için başka bir yol ile aşağı yukarı aynı.

+0

olarak var. Seçim listesi özel alanını doldurmak ve seçim listesinde yeni değer yoksa ne olur? –

+0

Yani, "updateValue" nin "fieldLayoutItem" argümanı null olabilir? Merak ediyorum, ne anlama geliyor - ve neden bu argüman olmadan "updateValue" diye bir şey yok ... –

+0

"fieldLayoutItem", oluşturucuyu belirlemek için kullanılır - boş olması durumunda metin oluşturucuya geri döner . – LukeSolar

0

Burada, JIRA 6.4.7'deki özel bir alan değerini güncellemek için çalışan bir çözüm. Aslında Im nedenle bunun için Option almak zorunda, tek seçme alanını güncelleme: Eğer String valueToSave pin zorunda kalmamak için

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); 
İlgili konular