Forums

Articles
Create
cancel
Showing results for 
Search instead for 
Did you mean: 

Why do custom field types disappear from transition screens after validation failure?

Andrew Pane
Contributor
February 7, 2018

I have created my own custom field type (using this tutorial) which is a read-only calculated field and which I want to display on a JIRA transition screen.

It works as expected except that if the validation fails on the transition (in this case a checkbox is unchecked) then when the transition screen re-renders with the error, my custom field has disappeared.

Clues:

  • After some trial and error with the "edit" Velocity template I've found that the "#if($value)" is returning false after validation.
  • Some logging shows that my field is queried for its value after (or during?) the validation, it just isn't displayed on the screen.
  • When it transition screen first renders (properly) the call stack into my custom class looks like this:
ca.mrc.plugin.jira.customfield.AbstractCustomField.getValueFromIssue(AbstractCustomField.java:44)
com.atlassian.jira.issue.fields.ImmutableCustomField.getCustomFieldParamsFromIssue(ImmutableCustomField.java:1238)
com.atlassian.jira.issue.fields.ImmutableCustomField.populateFromIssue(ImmutableCustomField.java:595)
com.atlassian.jira.issue.fields.screen.FieldScreenRenderLayoutItemImpl.populateFromIssue(FieldScreenRenderLayoutItemImpl.java:80)
com.atlassian.jira.web.action.issue.CommentAssignIssue.doDefault(CommentAssignIssue.java:90)
...
  • When the transition screen renders (improperly) after validation failure the call stack into my custom class looks like this:
ca.mrc.plugin.jira.customfield.AbstractCustomField.getValueFromIssue(AbstractCustomField.java:44)
com.atlassian.jira.issue.fields.ImmutableCustomField.getValue(ImmutableCustomField.java:350)
com.atlassian.jira.issue.IssueImpl.getCustomFieldValue(IssueImpl.java:896)
com.atlassian.jira.issue.IssueImpl.setCustomFieldValue(IssueImpl.java:906)
com.atlassian.jira.issue.fields.ImmutableCustomField.updateIssue(ImmutableCustomField.java:1039)
com.atlassian.jira.bc.issue.DefaultIssueService.updateIssueFromFieldsWithScreenCheck(DefaultIssueService.java:819)
com.atlassian.jira.bc.issue.DefaultIssueService.updateIssueFromFields(DefaultIssueService.java:801)
com.atlassian.jira.bc.issue.DefaultIssueService.validateAndUpdateIssueFromFields(DefaultIssueService.java:684)
com.atlassian.jira.bc.issue.DefaultIssueService.validateTransition(DefaultIssueService.java:459)
com.atlassian.jira.bc.issue.DefaultIssueService.validateTransition(DefaultIssueService.java:417)
com.atlassian.jira.web.action.issue.CommentAssignIssue.doValidation(CommentAssignIssue.java:149)
...

So somehow CommentAssignIssue.doDefault() is querying my custom field and making it available to the Velocity template, but CommentAssignIssue.doValidation() is querying the field but not making it available to the Velocity template...?

(Using JIRA Core 7.3.6.)

Andrew

 

0 answers

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events