diff --git a/ayanova/src/api/errorhandler.js b/ayanova/src/api/errorhandler.js index e0f8b7fa..13ffb9f8 100644 --- a/ayanova/src/api/errorhandler.js +++ b/ayanova/src/api/errorhandler.js @@ -13,6 +13,9 @@ export default { developmentModeShowErrorsImmediately(showErrorsImmediately) { devModeShowErrors = showErrorsImmediately; }, + devMode() { + return devModeShowErrors; + }, handleGeneralError(message, source, lineno, colno, error) { var msg = "General error: \n" + message; if (source) { diff --git a/ayanova/src/api/gzvalidate.js b/ayanova/src/api/gzvalidate.js index d404e30f..0d6f8436 100644 --- a/ayanova/src/api/gzvalidate.js +++ b/ayanova/src/api/gzvalidate.js @@ -251,18 +251,72 @@ When the form is submitted all server errors cleared if any from previous submit //example error when submit when there are no roles set at all (blank) //{"error":{"code":"2200","details":[{"code":"2200","message":"","target":"roles","error":"VALIDATION_FAILED"}],"message":"Object did not pass validation"}} +Here are all the API level error codes that can be returned by the API server: + +| CODE | MEANING | +| ----- | ------------------------------ | +//THESE ARE ALL GENERAL FORM LEVEL ERRORS +| 2000 | API closed - Server is running but access to the API has been closed to all users | +| 2001 | API closed all non OPS routes - Server is running but access to the API has been restricted to only server maintenance operations related functionality | +| 2002 | Internal error from the API server, details in [server log](common-log.md) file | +| 2003 | Authentication failed, bad login or password, user not found | +| 2004 | Not authorized - current user is not authorized for operation attempted on the resource (insufficient rights) | +| 2005 | Object was changed by another user since retrieval (concurrency token mismatch) | +| 2010 | Object not found - API could not find the object requested | +| 2020 | PUT Id mismatch - object Id does not match route Id | +| 2030 | Invalid operation - operation could not be completed, not valid, details in message property | +| 2200 | Validation error - general top level indicating object was not valid, specifics in "details" property | + +//THESE HAVE FIELD NAMES IN AN ARRAY MAYBE +| 2201 | Validation error - Field is required but is empty or null | +| 2202 | Validation error - Field length exceeded | +| 2203 | Validation error - invalid value | + + "ErrorAPI2000":"The server is closed", + "ErrorAPI2001":"The server is closed for maintenance", + "ErrorAPI2002":"Internal server error", + "ErrorAPI2003":"Authentication failed", + "ErrorAPI2004":"Not authorized", + "ErrorAPI2005":"Object was recently changed by another user and can't be saved", + "ErrorAPI2010":"Object not found", + "ErrorAPI2020":"Route id doesn't match object id", + "ErrorAPI2030":"Invalid operation", + "ErrorAPI2200":"Validation error", + "ErrorAPI2201":"Required field", + "ErrorAPI2202":"Length exceeded", + "ErrorAPI2203":"Invalid value" */ - //debugger; - + var ret = []; + //check for errors if we have any errors - if (!v.$_.isEmpty(v.serverErrors)) { - if (ref == "roles") { - return ["Test error from GZVALIDATE::ServerErrors"]; + if (!v.$_.isEmpty(v.serverError)) { + debugger; + //First let's get the top level error code + if (!v.serverError.code) { + throw "gzvalidate::ServerErrors -> server returned error without code"; + } + var apiErrorCode = parseInt(v.serverError.code); + + + //General form errors? + if (ref == "apierrors" && apiErrorCode < 2201) { + //we have a general error, format for return + // "ErrorFieldValueNotInteger": "Value must be an integer" + var err = v.$gzlocale.get("ErrorAPI"+ apiErrorCode.toString()); + + + } else { + //Specific field errors + + //example + if (ref == "xroles") { + return ["Test error from GZVALIDATE::ServerErrors"]; + } } } //default if no error message to display - return []; + return ret; // var ctrl = getControl(v, ref); // if (typeof ctrl == "undefined") { diff --git a/ayanova/src/main.js b/ayanova/src/main.js index 692ec8c0..0083a310 100644 --- a/ayanova/src/main.js +++ b/ayanova/src/main.js @@ -30,6 +30,9 @@ Object.defineProperty(Vue.prototype, "$gzv", { value: gzvalidate }); Object.defineProperty(Vue.prototype, "$gzerror", { value: errorHandler.handleFormError }); +Object.defineProperty(Vue.prototype, "$gzdevmode", { + value: errorHandler.devMode +}); ///////////////////////////////////////////////////////////////// // FORM VALIDATION diff --git a/ayanova/src/views/inventory-widget-edit.vue b/ayanova/src/views/inventory-widget-edit.vue index 9faf0f18..8cdb68db 100644 --- a/ayanova/src/views/inventory-widget-edit.vue +++ b/ayanova/src/views/inventory-widget-edit.vue @@ -88,7 +88,7 @@ - Force validate + test 1 test2 @@ -150,11 +150,11 @@ export default { data() { return { obj: {}, - serverErrors: {}, + serverError: {}, formReady: false }; }, - methods: { + methods: { getDataFromApi() { var url = "Widget/" + this.$route.params.id; this.$gzapi.get(url).then(res => { @@ -175,13 +175,12 @@ export default { .then(res => { if (res.error) { //debugger; - //Set errors so form can pick them up for controls in canHasServerErrors - that.serverErrors = res.error; + //Set errors so form can pick them up for controls in canHasServerErrors + that.serverError = res.error; // that.$refs.form.resetValidation(); // that.$refs.form.validate(); //example error when submit when there are no roles set at all (blank) //{"error":{"code":"2200","details":[{"code":"2200","message":"","target":"roles","error":"VALIDATION_FAILED"}],"message":"Object did not pass validation"}} - } else { //Logic for detecting if a post or put: if id then it was a post, if no id then it was a put if (res.id) {