How do I save a value into a custom field in JIRA programmatically?

后端 未结 4 1195
粉色の甜心
粉色の甜心 2020-12-30 06:24

I\'ve spent days trying to find out how to save or update a value into a CustomField programmatically and finally found out how it\'s done. So I\'ll make this a question an

相关标签:
4条回答
  • 2020-12-30 07:00

    Ok, this is how I'm successfully updating and saving the CustomField value into the JIRA db.

    Comments welcome...

    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 讨论(0)
  • 2020-12-30 07:00

    Here a solution that works for me in JIRA 6.4.7 to update a custom field value. Actually Im updating a single select field, therefore I have to get the Option for it:

    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);
    
    0 讨论(0)
  • 2020-12-30 07:01

    Here is how I do it (for a custom field I programmatically store a random UUID in):

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

    More or less the same as you but with another way to get the ModifiedValue-Object.

    0 讨论(0)
  • 2020-12-30 07:02

    I had the same issue and had it resolved using this plugin, fyi=)

    0 讨论(0)
提交回复
热议问题