2011-11-24 10 views
12

Ho passato giorni a cercare di scoprire come salvare o aggiornare un valore in un campo personalizzato a livello di codice e finalmente ho scoperto come è stato fatto. Quindi farò una domanda e poi risponderò come mi sarebbe piaciuto avere questa domanda e risposta.Come si salva un valore in un campo personalizzato in JIRA a livello di programmazione?

C'è una documentazione in conflitto su come salvare o aggiornare un valore per un campo personalizzato in JIRA. Stavo usando:

customField.setCustomFieldValue(CustomField, value); 

Questo non salva il valore nel database ma aggiorna il valore per quanto ne so. È utile solo se si utilizza il campo personalizzato più avanti in una transizione di funzione Post-Workflow, ad esempio.

Sto usando Jira 4.3.2.

Come mantenere il valore di Campi personalizzati nel database JIRA?

risposta

16

Ok, questo è il modo in cui sto aggiornando e salvando correttamente il valore di CustomField nel db JIRA.

Commenti Benvenuti ...

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

farei il setCustomFieldValue di fuori del metodo, in modo che non c'è bisogno di appuntare valueToSave a stringa. – lilalinux

+0

Grazie, mi ha davvero aiutato .... :) – Amrita

+0

grazie ... fratello ... mi hai salvato la vita ... – Arvind

-1

ho avuto lo stesso problema e lo aveva risolto utilizzando this plugin, FYI =)

+0

Il collegamento è interrotto ma l'add-on esiste ancora come JIRA Suite Utilities comunemente utilizzata – mdoar

3

Ecco come lo faccio (per un campo personalizzato I programmazione memorizzare un UUID casuale):

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

Più o meno lo stesso di voi, ma con un altro modo per ottenere il ModifiedValue -Oggetto.

+0

Cosa fare se è necessario compilare un campo personalizzato di selezione elenco e il nuovo valore non è presente nell'elenco di selezione? –

+0

Quindi, l'argomento 'fieldLayoutItem' di' updateValue' può essere solo nullo? Mi chiedo, cosa significa - e perché non c'è nessuna forma di 'updateValue' senza quell'argomento ... –

+0

Il' fieldLayoutItem' è usato per determinare il renderer - nel caso in cui sia null, fallback al renderer di testo . – LukeSolar

0

Ecco una soluzione che funziona per me in JIRA 6.4.7 per aggiornare un valore di campo personalizzato. In realtà Im aggiornamento di un singolo campo di selezione, quindi devo ottenere il Option per esso:

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