-
Bug
-
Resolution: Obsolete
-
Medium
-
None
-
3.15.1
-
3
-
Severity 2 - Major
-
7
-
Summary
When using a third party app (e.g. JMWE) for adding comment validator in a JSD workflow with transition screen, the customer input error message is not displayed in the transition screen unlike non JSD projects. This is a regression from earlier JSD versions, which, since 3.0.0, were correctly displaying the error message.
Steps to reproduce
- Spawn Jira 7.12.1 and JSD 3.15.1 (the latest)
- On a Jira Service Desk workflow, on a transition that has a transition screen, add a "Comment Required Validator" from JMWE (for example - a similar Validator from another app will have the same problem)
- Trigger the transition, don't input a comment and hit "Submit"
- No error message is displayed but the form remains open
If you do the same on a non-JSD workflow, the error message is displayed correctly below the comment field
Investigation Notes
- Initially both screens does not have the div.error element to populate the error message
- Difference between Non JSD and JSD projects:
- both calls the _submitForm function in FormDialog.js:
FormDialog.js
_submitForm: function _submitForm(e) { this.cancelled = false; this.xhr = null; this.redirected = false; this.serverIsDone = false; var instance = this; var defaultRequestOptions = jQuery.extend(true, {}, this.options.submitAjaxOptions); var requestOptions = jQuery.extend(true, defaultRequestOptions, { url: this._getPath(this.$form.attr("action")), data: this._getFormDataAsObject(), complete: function complete(xhr, textStatus, smartAjaxResult) { instance.hideFooterLoadingIndicator(); if (!instance.cancelled) { instance._showMessagesFromXhrResponse(xhr); if (smartAjaxResult.successful) { instance.$form.trigger("fakesubmit"); instance._handleServerSuccess(smartAjaxResult.data, xhr, textStatus, smartAjaxResult); // // if we have already been redirected then the page is asynchronously unloading and going elsewhere // and hence we should not do the complete processing since its pointless and could only do harm // if (!instance.redirected) { instance._handleSubmitResponse(smartAjaxResult.data, xhr, smartAjaxResult); } } else { instance._handleServerError(xhr, textStatus, smartAjaxResult.errorThrown, smartAjaxResult); } } //The form may have changed. Lets just make sure there us no 'submitting' class to be extra sure. instance.$form.removeClass("submitting"); } }); // and since we're a dialog, and since web actions don't offer responses tailored to the accepts header, we should always set these request options: requestOptions.data.decorator = "dialog"; requestOptions.data.inline = true; this.showFooterLoadingIndicator(); this.xhr = SmartAjax.makeRequest(requestOptions); e.preventDefault(); },
- However, smartAjaxResult.data passed to the requestOptions callback from non JSD contains the error message which is replaced as a content in instance._handleServerSuccess(smartAjaxResult.data, xhr, textStatus, smartAjaxResult) :
FormDialog.js
_handleServerSuccess: function _handleServerSuccess(data, xhr, textStatus, smartAjaxResult) { var msgInstructions = this._detectMsgInstructions(xhr); if (msgInstructions) { Messages.showMsgOnReload(msgInstructions.msg, { type: msgInstructions.type, closeable: msgInstructions.closeable, target: msgInstructions.target }); } // // Check the status of the X-Atlassian-Dialog-Control header to see if we are done // var instructions = this._detectRedirectInstructions(xhr); this.serverIsDone = instructions.serverIsDone; if (instructions.redirectUrl) { if (this.options.onSuccessfulSubmit) { this.options.onSuccessfulSubmit.call(this, data, xhr, textStatus, smartAjaxResult); } this._performRedirect(instructions.redirectUrl); } else if (!this.serverIsDone) { this.setSubmitResponseContent(data); } },
- Non JSD smartAjaxResult.data value contains user input error message: "<div class="error">Anne - Non JSD Comment required!</div>":
" <div class="jira-dialog-content"> <div class="dialog-title hidden">Start Progress [PROJ-1]</div> <form action="/jira/secure/CommentAssignIssue.jspa?atl_token=BWP3-NZB2-6EDY-6C7K_70517b4464110e3b3d3983abaad5880372d16c43_lin" class="aui dnd-attachment-support" enctype="multipart/form-data" id="issue-workflow-transition" method="post"> <div class="form-body"> <h2 class="dialog-title"> Start Progress </h2> <div class="hidden"> <input name="action" type="hidden" value="11" /> </div> <div class="hidden"> <input name="id" type="hidden" value="10002" /> </div> <div class="hidden"> <input name="viewIssueKey" type="hidden" value="" /> </div> <div class="hidden"> <input name="formToken" type="hidden" value="e2f45e34e0e56241a89d304a7ce5092ce8c271e5" /> </div> <div class="field-group aui-field-wikiedit comment-input"> <label for="comment">Comment</label> <div class="jira-wikifield" field-id="comment" renderer-type="atlassian-wiki-renderer" issue-key="PROJ-1"> <div class="wiki-edit"> <div id="comment-wiki-edit" class="wiki-edit-content"> <textarea class="textarea long-field wiki-textfield mentionable" cols="60" id="comment" name="comment" rows="10" wrap="virtual" data-projectkey="PROJ" data-issuekey="PROJ-1"></textarea> <div class="rte-container"> <rich-editor contenteditable="true" data-issue-key="PROJ-1" data-content-present="true" tabindex="-1"></rich-editor> </div> <div class="content-inner"> </div> </div> </div> <div class="field-tools"> <dl id="wiki-prefs" class="wiki-js-prefs" style="display:none"> <dt>trigger</dt> <dd>comment-preview_link</dd> <dt>fieldId</dt> <dd>comment</dd> <dt>fieldName</dt> <dd>Comment</dd> <dt>rendererType</dt> <dd>atlassian-wiki-renderer</dd> <dt>issueKey</dt> <dd>PROJ-1</dd> </dl> <button class="jira-icon-button fullscreen wiki-preview" id="comment-preview_link" type="button"> <span class="aui-icon wiki-renderer-icon">Preview comment</span> </button> <a class="help-lnk" id="viewHelp" href="/jira/secure/WikiRendererHelpAction.jspa?section=texteffects" title="Get local help about wiki markup help" data-helplink="local"><span class="aui-icon aui-icon-small aui-iconfont-help"></span></a> </div> </div> <div class="save-options wiki-button-bar"> <div class="security-level"> <fieldset class="hidden parameters"> <input type="hidden" title="securityLevelViewableByAll" value="Viewable by All Users"> <input type="hidden" title="securityLevelViewableRestrictedTo" value="Restricted to <span class='redText'>{0}</span>"> </fieldset> <a class="drop" href="#"> <span class="security-level-drop-icon aui-icon aui-icon-small aui-iconfont-unlocked"> This comment will be Viewable by All Users </span> <span class="icon drop-menu"></span> </a> <select name="commentLevel" id="commentLevel" data-enable-default="true"> <option value="">All Users</option> <optgroup label="Project Roles"> <option value="role:10002">Administrators</option> </optgroup> </select> <span class="current-level">Viewable by All Users</span> <span class="default-comment-level" data-project-id="10000"></span> </div> <span class="security-level-inline-error"></span> </div> <div class="error">Anne - Non JSD Comment required!</div> </div> <!-- more code here... --> </form> <!-- // .aui.dnd-attachment-support #issue-workflow-transition --> </div> "
- JSD returned smartAjaxResult.data value does not contain the error:
" <div class="jira-dialog-content"> <div class="dialog-title hidden">In progress [BS-2]</div> <form action="/jira/secure/CommentAssignIssue.jspa?atl_token=BWP3-NZB2-6EDY-6C7K_70517b4464110e3b3d3983abaad5880372d16c43_lin" class="aui dnd-attachment-support" enctype="multipart/form-data" id="issue-workflow-transition" method="post"> <div class="form-body"> <h2 class="dialog-title"> In progress </h2> <div class="hidden"> <input name="action" type="hidden" value="891" /> </div> <div class="hidden"> <input name="id" type="hidden" value="10001" /> </div> <div class="hidden"> <input name="viewIssueKey" type="hidden" value="" /> </div> <div class="hidden"> <input name="formToken" type="hidden" value="d4fa0340cfb2e7648e721bd28688f66850e18675" /> </div> <div class="sd-comment-field-edit-root" data-payload="{"issueId":10001,"issueKey":"BS-2","reporterDisplayName":"admin","comment":"","userKey":"admin","userName":"admin","agentDisplayName":"admin","avatarUrl":"https://www.gravatar.com/avatar/64e1b8d34f425d19e1ee2ea7236d3028?d\u003dmm\u0026s\u003d48","isAgent":true,"isExternalMode":true,"isEdit":false,"isBulkEdit":false,"isRteEnabled":true,"modifierKey":"Ctrl+Alt","errors":[],"isSecurityLevelAvailable":false}"></div> <div class="hidden"> <input name="atl_token" type="hidden" value="BWP3-NZB2-6EDY-6C7K_70517b4464110e3b3d3983abaad5880372d16c43_lin" /> </div> </div> <div class="buttons-container form-footer"> <div class="buttons"> <input accesskey="s" class="aui-button" id="issue-workflow-transition-submit" name="Transition" title="Press Ctrl+Alt+s to submit this form" type="submit" value="In progress" /> <a accesskey="`" class="aui-button aui-button-link cancel" href="/jira/browse/BS-2" id="issue-workflow-transition-cancel" title="Press Ctrl+Alt+` to cancel">Cancel</a> </div> </div> </form> <!-- // .aui.dnd-attachment-support #issue-workflow-transition --> </div> "
- And the _handleServerSuccess sets the content to the data in: this.setSubmitResponseContent(data);
_handleServerSuccess: function _handleServerSuccess(data, xhr, textStatus, smartAjaxResult) { var msgInstructions = this._detectMsgInstructions(xhr); if (msgInstructions) { Messages.showMsgOnReload(msgInstructions.msg, { type: msgInstructions.type, closeable: msgInstructions.closeable, target: msgInstructions.target }); } // // Check the status of the X-Atlassian-Dialog-Control header to see if we are done // var instructions = this._detectRedirectInstructions(xhr); this.serverIsDone = instructions.serverIsDone; if (instructions.redirectUrl) { if (this.options.onSuccessfulSubmit) { this.options.onSuccessfulSubmit.call(this, data, xhr, textStatus, smartAjaxResult); } this._performRedirect(instructions.redirectUrl); } else if (!this.serverIsDone) { this.setSubmitResponseContent(data); } },
- both calls the _submitForm function in FormDialog.js:
Workaround
None
Related tickets
- is a regression of
-
JSDSERVER-3647 Unspecific message shown in Portal when a validation in "Create Issue" transition fails
-
- Closed
-
- relates to
-
JSDSERVER-1485 id attribute missing on comment field -> 3rd party validator not working properly
-
- Closed
-
-
JSDSERVER-2361 Comment Require Validator from third party plugin (JIRA MISC Workflow Exntension) did not promp customize error message
-
- Closed
-
-
DEVHELP-1733 Failed to load
- links to
Form Name |
---|
This regression is causing confusion among agents. They click to submit the form and the form does not dismiss but there is no error message, so they are not sure how to proceed and need to reach out for assistance.
Please address this as quickly as possible.