It's not the same without you

Join the community to find out what other Atlassian users are discussing, debating and creating.

Atlassian Community Hero Image Collage

Custom field update is not working using Jira API

Mani Chellamuthu Jun 17, 2013

I have a date picker customfield and used below code to create/update it is value,

CustomField customField1 = customFieldManager.getCustomFieldObject("customfield_13961");
FieldLayoutItem fieldLayoutItem = ComponentManager.getInstance().getFieldLayoutManager().getFieldLayout(issue).getFieldLayoutItem(customField1);
DefaultIssueChangeHolder issueChangeHolder = new DefaultIssueChangeHolder();
customField1.updateValue(fieldLayoutItem, issue, new ModifiedValue(issue.getCustomFieldValue(customField1),date), issueChangeHolder);

I update the custom field in Issue resolve screen. The value is not updated. ChangeItem has the entered value in OldValue, not in NewValue. No records in CustomFieldValue table.

But when I reopen it, it is updated(the same logic is called again) and displayed in issue screen.

Any ideas?

3 answers

0 votes
Bhushan Nagaraj Jun 17, 2013

Hi Mani,

Here are the general steps again. You have most of it but you are missing the field.store() . Give it another try

@Override
    public Map<String, Object> getVelocityParameters(final Issue issue,final CustomField field,final FieldLayoutItem fieldLayoutItem) {
        final Map<String, Object> map = super.getVelocityParameters(issue, field, fieldLayoutItem);

        if (issue == null) {
            return map;
        }
        
        DefaultIssueChangeHolder issueChangeHolder = new DefaultIssueChangeHolder();
        
        FieldConfig fieldConfig = field.getRelevantConfig(issue);
        try
            {                                
                field.updateValue(fieldLayoutItem, issue, new ModifiedValue(field.getValue(issue), "My new value"), issueChangeHolder);
                field.store();
            }
            catch(Exception exc)
            {
                //Log error
            }
        return map;
    }

Cheers

Bhushan

Mani Chellamuthu Jun 17, 2013

Bhushan, thanks for your answer. I tried below code as suggested,

CustomField customField1 = customFieldManager.getCustomFieldObject("customfield_13961");
FieldLayoutItem fieldLayoutItem = ComponentManager.getInstance().getFieldLayoutManager().getFieldLayout(issue).getFieldLayoutItem(customField1);
FieldConfig fieldConfig = customField1.getRelevantConfig(issue);

DefaultIssueChangeHolder issueChangeHolder = new DefaultIssueChangeHolder();
customField1.updateValue(fieldLayoutItem, issue, new ModifiedValue(issue.getCustomFieldValue(customField1),date), issueChangeHolder);
customField1.store();

But it didn't get updated. Do I miss anything?

Mani Chellamuthu Jun 18, 2013

Any updates would be helpful.

Bhushan Nagaraj Jun 19, 2013

Can you post the full code?

Mani Chellamuthu Jun 20, 2013

Sure, I will post the code.

Mani Chellamuthu Jun 21, 2013

Hi Bhushan,

Please find the full code. I excute this code while resolving an issue (CommentAssignIssue.java),

//Get fix version's release date
VersionManager versionManager1 = ComponentManager.getComponent(VersionManager.class);
Version version = versionManager1.getVersion(fixVersions);
Date fixReleaseDate = null;
if (null != version.getReleaseDate()){
fixReleaseDate=version.getReleaseDate();
}
//Get Custom field where fix release date will be set
CustomField customField1 = customFieldManager.getCustomFieldObject("customfield_13961");
FieldLayoutItem fieldLayoutItem = ComponentManager.getInstance().getFieldLayoutManager().getFieldLayout(issue).getFieldLayoutItem(customField1);
FieldConfig fieldConfig = customField1.getRelevantConfig(issue);
DefaultIssueChangeHolder issueChangeHolder = new DefaultIssueChangeHolder();
customField1.updateValue(fieldLayoutItem, issue, new ModifiedValue(issue.getCustomFieldValue(customField1),fixReleaseDate), issueChangeHolder);
customField1.store();
//customFieldManager.updateCustomField(customField1);

0 votes
Rambanam Prasad Jun 19, 2013

hey! try with the following code

CustomField customField1 = customFieldManager.getCustomFieldObject("customfield_13961");
 FieldLayoutManager fieldLayoutManager = ComponentManager.getInstance().getFieldLayoutManager();
FieldLayout layout = fieldLayoutManager.getFieldLayout(issue.getProjectObject(), issue.getIssueTypeObject().getId());
if (layout.getId() == null) {
     layout = fieldLayoutManager.getEditableDefaultFieldLayout();
}
FieldLayoutItem fieldLayoutItem =layout.getFieldLayoutItem(customField1.getId());
DefaultIssueChangeHolder issueChangeHolder = new DefaultIssueChangeHolder();
issue.setCustomFieldValue(customField1, newValue);
customField1.updateValue(fieldLayoutItem, issue, new ModifiedValue(issue.getCustomFieldValue(customField1),date), issueChangeHolder);

Mani Chellamuthu Jun 20, 2013

Thanks for your help. I will test it and let you know.

Mani Chellamuthu Jun 21, 2013

Hi Rambanam,

The code you suggested didn't work.

MutableIssue mIssue = (MutableIssue)issue;
CustomField customField1 = customFieldManager.getCustomFieldObject("customfield_13961");
FieldLayoutManager fieldLayoutManager = ComponentManager.getInstance().getFieldLayoutManager();
FieldLayout layout = fieldLayoutManager.getFieldLayout(issue.getProjectObject(), issue.getIssueTypeObject().getId());
if (layout.getId() == null) {
layout = fieldLayoutManager.getEditableDefaultFieldLayout();
}
FieldLayoutItem fieldLayoutItem =layout.getFieldLayoutItem(customField1.getId());
DefaultIssueChangeHolder issueChangeHolder = new DefaultIssueChangeHolder();
mIssue.setCustomFieldValue(customField1, date);

customField1.updateValue(fieldLayoutItem, issue, new ModifiedValue(mIssue.getCustomFieldValue(customField1),date), issueChangeHolder);

}

Please let me know if you have any other approaches.

Mani Chellamuthu Jun 26, 2013

It would be very helpful, if anyone could guide me right direction.

Mani Chellamuthu Jul 01, 2013

I couldn't figure it out. Is there anything to resolve it?

Rambanam Prasad Jul 01, 2013

what type of Custom field you are trying to update and what is the error message you are getting/showing on log

Mani Chellamuthu Jul 01, 2013

Custom field type is Date Picker. There is no error raised. But above code does not create an entry in database.

0 votes
Rambanam Prasad Jul 02, 2013
try with the following code, it is working for me

CustomField customField1 = customFieldManager.getCustomFieldObject("customfield_13961"); FieldLayoutManager fieldLayoutManager = ComponentManager.getInstance().getFieldLayoutManager(); FieldLayout layout = fieldLayoutManager.getFieldLayout(issue.getProjectObject(), issue.getIssueTypeObject().getId()); if (layout.getId() == null) { layout = fieldLayoutManager.getEditableDefaultFieldLayout(); } FieldLayoutItem fieldLayoutItem =layout.getFieldLayoutItem(customField1.getId()); DefaultIssueChangeHolder issueChangeHolder = new DefaultIssueChangeHolder(); Calendar calendar = Calendar.getInstance(); Date today = new java.sql.Timestamp(calendar.getTime().getTime()); issue.setCustomFieldValue(customField1, today); customField1.updateValue(fieldLayoutItem, issue, new ModifiedValue(today,today), issueChangeHolder);

Suggest an answer

Log in or Sign up to answer
This widget could not be displayed.
This widget could not be displayed.
Community showcase
Published in Next-gen

Introducing subtasks for breaking down work in next-gen projects

Teams break work down in order to help simplify complex tasks. This is often done iteratively, with tasks being broken down into smaller tasks and so on until the work is accurately captured in well-...

11,111 views 54 53
Read article

Community Events

Connect with like-minded Atlassian users at free events near you!

Find an event

Connect with like-minded Atlassian users at free events near you!

Unfortunately there are no Community Events near you at the moment.

Host an event

You're one step closer to meeting fellow Atlassian users at your local event. Learn more about Community Events

Events near you