UNPKG

maximo-dev-tools

Version:

Tools used with the development of Maximo projects

758 lines (637 loc) 34.7 kB
/* eslint-disable no-undef */ /* eslint-disable no-unused-vars */ // @ts-nocheck RuntimeException = Java.type("java.lang.RuntimeException"); System = Java.type("java.lang.System"); Base64 = Java.type("java.util.Base64"); HashMap = Java.type("java.util.HashMap"); URLDecoder = Java.type("java.net.URLDecoder"); StandardCharsets = Java.type("java.nio.charset.StandardCharsets"); DBShortcut = Java.type("psdi.mbo.DBShortcut"); SqlFormat = Java.type("psdi.mbo.SqlFormat"); MXServer = Java.type("psdi.server.MXServer"); MXException = Java.type("psdi.util.MXException"); MXAccessException = Java.type("psdi.util.MXAccessException"); MXApplicationException = Java.type("psdi.util.MXApplicationException"); MXLoggerFactory = Java.type("psdi.util.logging.MXLoggerFactory"); Version = Java.type("psdi.util.Version"); System = Java.type("java.lang.System"); var logger = MXLoggerFactory.getLogger("maximo.script." + service.getScriptName()); main(); function main() { if (typeof httpMethod !== "undefined") { var response = {}; try { checkPermissions("SHARPTREE_UTILS", "DEPLOYSCRIPT"); if (httpMethod.toLowerCase() === "get") { var formId = getInspectionFormId(); if (typeof formId === "undefined" || formId === null || !formId) { var formNames = []; // If nothing is requested then return a list of all screens. var inspectionFormSet; try { inspectionFormSet = MXServer.getMXServer().getMboSet("INSPECTIONFORM", userInfo); inspectionFormSet.setOrderBy("inspformnum, revision desc"); var sqlf = new SqlFormat("status != :1"); sqlf.setObject(1, "INSPECTIONFORM", "STATUS", "REVISED"); inspectionFormSet.setWhere(sqlf.format()); var inspectionForms = []; var inspectionForm = inspectionFormSet.getMbo(0); while (inspectionForm) { if (formNames.indexOf(inspectionForm.getString("INSPFORMNUM")) < 0) { var form = { inspformnum: inspectionForm.getString("INSPFORMNUM"), name: inspectionForm.getString("NAME"), status: inspectionForm.getString("STATUS"), id: inspectionForm.getUniqueIDValue() }; inspectionForms.push(form); formNames.push(inspectionForm.getString("INSPFORMNUM")); } inspectionFormSet.remove(0); inspectionForm = inspectionFormSet.getMbo(0); } response.status = "success"; response.inspectionForms = inspectionForms; responseBody = JSON.stringify(response); } finally { _close(inspectionFormSet); } } else { response.status = "success"; response.form = extractForm(formId); responseBody = JSON.stringify(response); } return; } else if (httpMethod.toLowerCase() === "post" && typeof requestBody !== "undefined") { var formData = JSON.parse(requestBody); importForm(formData); response.status = "success"; responseBody = JSON.stringify(response); } else if (httpMethod.toLowerCase() === "post" && request.getQueryParam("fix")) { // Because Maximo demo data is poor, inspection forms are shipped with missing YORN values that need to be fixed. var db = new DBShortcut(); try { db.connect(userInfo.getConnectionKey()); db.execute(DBShortcut.UPDATE, new SqlFormat("update inspectionform set readconfirmation = 0 where readconfirmation is null")); db.execute(DBShortcut.UPDATE, new SqlFormat("update inspectionform set audioguided = 0 where audioguided is null")); db.execute(DBShortcut.UPDATE, new SqlFormat("update inspfield set visible = 1 where visible is null")); db.execute(DBShortcut.UPDATE, new SqlFormat("update inspfieldoption set requireaction = 0 where requireaction is null")); db.commit(); } finally { db.close(); } } else { throw new FormError("only_get_supported", "Only the HTTP GET method is supported when extracting automation scripts."); } } catch (error) { response.status = "error"; // ensure the error is logged to the Maximo logs Java.type("java.lang.System").out.println(error); if (error instanceof FormError) { response.message = error.message; response.reason = error.reason; } else if (error instanceof SyntaxError) { response.reason = "syntax_error"; response.message = error.message; } else if (error instanceof Error) { response.message = error.message; } else if (error instanceof MXException) { response.reason = error.getErrorGroup() + "_" + error.getErrorKey(); response.message = error.getMessage(); } else if (error instanceof RuntimeException) { if (error.getCause() instanceof MXException) { response.reason = error.getCause().getErrorGroup() + "_" + error.getCause().getErrorKey(); response.message = error.getCause().getMessage(); } else { response.reason = "runtime_exception"; response.message = error.getMessage(); } } else { response.cause = error; } if (typeof httpMethod !== "undefined") { responseBody = JSON.stringify(response); } logger.error(error); return; } } } function importForm(form) { // Make sure the inspection doc types are set up before importing. fixInspectionAppDocTypes(); var inspectionFormSet; try { inspectionFormSet = MXServer.getMXServer().getMboSet("INSPECTIONFORM", userInfo); var sqlf = new SqlFormat("name = :1 and hasrevision = :no and (status = :2 or status = :3) "); sqlf.setObject(1, "INSPECTIONFORM", "NAME", form.name); sqlf.setObject(2, "INSPECTIONFORM", "STATUS", "ACTIVE"); sqlf.setObject(3, "INSPECTIONFORM", "STATUS", "INACTIVE"); inspectionFormSet.setWhere(sqlf.format()); var inspectionForm; if (inspectionFormSet.isEmpty()) { sqlf.setObject(2, "INSPECTIONFORM", "STATUS", "PNDREV"); sqlf.setObject(3, "INSPECTIONFORM", "STATUS", "DRAFT"); inspectionFormSet.setWhere(sqlf.format()); inspectionFormSet.reset(); if (inspectionFormSet.isEmpty()) { inspectionForm = inspectionFormSet.add(); inspectionForm.setValue("NAME", form.name); } else { inspectionForm = inspectionFormSet.moveFirst(); inspectionForm.setValue("REASON", form.reason); } } else { var sourceInspectionForm = inspectionFormSet.moveFirst(); sourceInspectionForm.setValue("HASREVISION", true); inspectionForm = sourceInspectionForm.initRevision(); inspectionForm.setValue("REASON", form.reason); } setValueIfDefined(inspectionForm, "TYPE", form.type); setValueIfDefined(inspectionForm, "DESCRIPTION_LONGDESCRIPTION", form.instructions); setValueIfDefined(inspectionForm, "AUDIOGUIDED", form.audioguided); setValueIfDefined(inspectionForm, "READCONFIRMATION", form.readconfirmation); var formNum = inspectionForm.getString("INSPFORMNUM"); var revision = inspectionForm.getInt("REVISION"); var inspQuestionSet = inspectionForm.getMboSet("INSPQUESTION"); inspQuestionSet.deleteAll(); if (typeof form.questions !== "undefined") { form.questions.forEach(function (question) { var inspQuestion = inspQuestionSet.add(); question.newinspquestionnum = inspQuestion.getString("INSPQUESTIONNUM"); inspQuestion.setValue("INSPFORMNUM", formNum); inspQuestion.setValue("REVISION", revision); setValueIfDefined(inspQuestion, "DESCRIPTION", question.description); setValueIfDefined(inspQuestion, "DESCRIPTION_LONGDESCRIPTION", question.information); setValueIfDefined(inspQuestion, "GROUPID", question.groupid); setValueIfDefined(inspQuestion, "SEQUENCE", question.sequence); setValueIfDefined(inspQuestion, "GROUPSEQ", question.groupseq); inspQuestion.setValue("REQUIRED", typeof question.required !== "undefined" ? question.required : false); try { if (hasAttribute("INSPQUESTION", "AUDIOCACHEQUESTION")) { if (typeof question.audiocachequestion !== "undefined") { inspQuestion.setValue("AUDIOCACHEQUESTION", Base64.getDecoder().decode(question.audiocachequestion)); } } } catch (ignored) { /* ignored */ } if (typeof question.fields !== "undefined") { var inspFieldSet = inspQuestion.getMboSet("INSPFIELD"); question.fields.forEach(function (field) { var inspField = inspFieldSet.add(); field.newinspfieldnum = inspField.getString("INSPFIELDNUM"); inspField.setValue("INSPFORMNUM", formNum); inspField.setValue("REVISION", revision); inspField.setValue("INSPQUESTIONNUM", inspQuestion.getString("INSPQUESTIONNUM")); setValueIfDefined(inspField, "SEQUENCE", field.sequence); setValueIfDefined(inspField, "FIELDTYPE", field.fieldtype); setValueIfDefined(inspField, "DESCRIPTION", field.description); setValueIfDefined(inspField, "REQUIRED", field.required); setValueIfDefined(inspField, "INITIALLABEL", field.initiallabel); setValueIfDefined(inspField, "ENDLABEL", field.endlabel); setValueIfDefined(inspField, "STEPS", field.steps); setValueIfDefined(inspField, "INITIALVALUE", field.initialvalue); setValueIfDefined(inspField, "ENDVALUE", field.endvalue); setValueIfDefined(inspField, "METERNAME", field.metername); setValueIfDefined(inspField, "METERTYPE", field.metertype); setValueIfDefined(inspField, "SHOWDATE", field.showdate); setValueIfDefined(inspField, "SHOWTIME", field.showtime); setValueIfDefined(inspField, "DOCTYPE", field.doctype); setValueIfDefined(inspField, "VISIBLE", field.visible); setValueIfDefined(inspField, "DESCRIPTION_LONGDESCRIPTION", field.information); if (hasAttribute("INSPFIELD", "DOMAINID")) { setValueIfDefined(inspField, "DOMAINID", field.domainid); } if (hasAttribute("INSPFIELD", "DOMAINTYPE")) { setValueIfDefined(inspField, "DOMAINTYPE", field.domaintype); } if (typeof field.options !== "undefined") { var inspFieldOptionSet = inspField.getMboSet("INSPFIELDOPTION"); field.options.forEach(function (option) { var inspFieldOption = inspFieldOptionSet.add(); inspFieldOption.setValue("INSPFIELDNUM", inspField.getString("INSPFIELDNUM")); inspFieldOption.setValue("INSPQUESTIONNUM", inspQuestion.getString("INSPQUESTIONNUM")); inspFieldOption.setValue("INSPFORMNUM", formNum); inspFieldOption.setValue("REVISION", revision); setValueIfDefined(inspFieldOption, "DESCRIPTION", option.description); setValueIfDefined(inspFieldOption, "SEQUENCE", option.sequence); setValueIfDefined(inspFieldOption, "INSPECTORFEEDBACK", option.inspectorfeedback); setValueIfDefined(inspFieldOption, "REQUIREACTION", option.requireaction); setValueIfDefined(inspFieldOption, "COLOR", option.color); setValueIfDefined(inspFieldOption, "ICON", option.icon); try { if (hasAttribute("INSPFIELDOPTION", "AUDIOCACHEFBACK")) { if (typeof option.audiocachefback !== "undefined") { inspQuestion.setValue("AUDIOCACHEFBACK", Base64.getDecoder().decode(option.audiocachefback)); } } } catch (ignored) { /* ignored */ } }); } }); } }); // After all the questions have been processed, apply any cascade options. if (typeof form.cascadeoptions !== "undefined") { var inspCascadeOptionSet = inspectionForm.getMboSet("$inspcascadeoption", "INSPCASCADEOPTION", "1!=1"); form.cascadeoptions.forEach(function (option) { var srcquestion = findNewQuestionNumber(option.srcquestion, form); var tgtquestion = findNewQuestionNumber(option.tgtquestion, form); var srcfield = findNewFieldNumber(option.srcfield, form); var tgtfield = findNewFieldNumber(option.tgtfield, form); if (srcquestion && tgtquestion && srcfield && tgtfield) { var inspCascadeOption = inspCascadeOptionSet.add(); inspCascadeOption.setValue("INSPFORMNUM", formNum); inspCascadeOption.setValue("REVISION", revision); inspCascadeOption.setValue("SRCQUESTION", srcquestion); inspCascadeOption.setValue("SRCFIELD", srcfield); inspCascadeOption.setValue("TGTQUESTION", tgtquestion); inspCascadeOption.setValue("TGTFIELD", tgtfield); inspCascadeOption.setValue("SRCTXTRESPONSE", option.srctxtresponse); inspCascadeOption.setValue("VISIBLE", option.visible); inspCascadeOption.setValue("REQUIRED", option.required); inspCascadeOption.setValue("INSPECTORFEEDBACK", option.inspectorfeedback); inspCascadeOption.setValue("SHOWMESSAGE", option.showmessage); inspCascadeOption.setValue("OPERATOR1", option.operator1); inspCascadeOption.setValue("OPERATOR2", option.operator2); inspCascadeOption.setValue("NUMBER1", option.number1); inspCascadeOption.setValue("NUMBER2", option.number2); inspCascadeOption.setValue("REQUIREACTION", option.requireaction); } }); } var inspFormScriptSet = inspectionForm.getMboSet("INSPFORMSCRIPT"); inspFormScriptSet.deleteAll(); if (typeof form.scripts !== "undefined") { form.scripts.forEach(function (script) { var inspFormScript = inspFormScriptSet.add(); inspFormScript.setValue("INSPFORMNUM", formNum); inspFormScript.setValue("REVISION", revision); inspFormScript.setValue("AUTOSCRIPT", script.autoscript); inspFormScript.setValue("SEQUENCE", String(script.sequence)); inspFormScript.setValue("SITEID", userInfo.getInsertSite()); }); } } if (typeof form.activateOnDeploy !== "undefined" && form.activateOnDeploy) { var id = inspectionForm.getUniqueIDValue(); inspectionFormSet.save(); _close(inspectionFormSet); inspectionFormSet = MXServer.getMXServer().getMboSet("INSPECTIONFORM", userInfo); inspectionForm = inspectionFormSet.getMboForUniqueId(id); inspectionForm.changeFormStatus("ACTIVE"); inspectionFormSet.save(); } else { inspectionFormSet.save(); } } finally { _close(inspectionFormSet); } } function findNewQuestionNumber(questionNum, form) { if (typeof form !== "undefined" && typeof form.questions !== "undefined") { var i = 0; while (i < form.questions.length) { var question = form.questions[i]; if (question.inspquestionnum == questionNum) { return question.newinspquestionnum; } i++; } } return null; } function findNewFieldNumber(fieldNum, form) { if (typeof form !== "undefined" && typeof form.questions !== "undefined") { var i = 0; while (i < form.questions.length) { var question = form.questions[i]; if (typeof question.fields !== "undefined") { var j = 0; while (j < question.fields.length) { var field = question.fields[j]; if (fieldNum == field.inspfieldnum) { return field.newinspfieldnum; } j++; } } i++; } } return null; } function setValueIfDefined(mbo, attribute, value) { if (typeof value !== "undefined") { mbo.setValue(attribute, value); } } function extractForm(formId) { var inspectionFormSet; try { inspectionFormSet = MXServer.getMXServer().getMboSet("INSPECTIONFORM", userInfo); var inspectionForm = inspectionFormSet.getMboForUniqueId(formId); if (inspectionForm) { var result = {}; result.sourceVersion = Version.getProductVersion(); result.activateOnDeploy = false; result.inspformnum = inspectionForm.getString("INSPFORMNUM"); result.revision = inspectionForm.getInt("REVISION"); result.name = inspectionForm.getString("NAME"); result.instructions = inspectionForm.getString("DESCRIPTION_LONGDESCRIPTION"); result.reason = inspectionForm.getString("REASON"); result.type = inspectionForm.getString("TYPE"); result.readconfirmation = inspectionForm.getBoolean("READCONFIRMATION"); result.audioguided = inspectionForm.getBoolean("AUDIOGUIDED"); try { if (hasAttribute("INSPQUESTION", "AUDIOCACHEFORM")) { if (!inspectionForm.isNull("AUDIOCACHEFORM")) { result.audiocacheform = Base64.getEncoder().encode(inspectionForm.getBytes("AUDIOCACHEFORM")); } } } catch (ignored) { /* ignored */ } var inspQuestionSet = inspectionForm.getMboSet("INSPQUESTION"); var inspQuestion = inspQuestionSet.moveFirst(); var questions = []; var cascadeoptions = []; while (inspQuestion) { var question = {}; question.inspquestionnum = inspQuestion.getString("INSPQUESTIONNUM"); question.inspformnum = inspQuestion.getString("INSPFORMNUM"); question.description = inspQuestion.getString("DESCRIPTION"); question.information = inspQuestion.getString("DESCRIPTION_LONGDESCRIPTION"); if (!inspQuestion.isNull("GROUPID")) { question.groupid = inspQuestion.getInt("GROUPID"); } question.sequence = inspQuestion.getInt("SEQUENCE"); question.groupseq = inspQuestion.getDouble("GROUPSEQ"); question.required = inspQuestion.getBoolean("REQUIRED"); try { if (!inspQuestion.isNull("AUDIOCACHEQUESTION")) { question.audiocachequestion = Base64.getEncoder().encode(inspQuestion.getBytes("AUDIOCACHEQUESTION")); } } catch (ignored) { /* ignored */ } var inspFieldSet = inspQuestion.getMboSet("INSPFIELD"); var inspField = inspFieldSet.moveFirst(); var fields = []; while (inspField) { var field = {}; field.inspfieldnum = inspField.getString("INSPFIELDNUM"); field.inspquestionnum = inspField.getString("INSPQUESTIONNUM"); field.inspformnum = inspField.getString("INSPFORMNUM"); field.fieldtype = inspField.getString("FIELDTYPE"); field.description = inspField.getString("DESCRIPTION"); field.sequence = inspField.getInt("SEQUENCE"); field.required = inspField.getBoolean("REQUIRED"); field.initiallabel = inspField.getString("INITIALLABEL"); field.endlabel = inspField.getString("ENDLABEL"); if (!inspField.isNull("STEPS")) { field.steps = inspField.getInt("STEPS"); } if (!inspField.isNull("INITIALVALUE")) { field.initialvalue = inspField.getInt("INITIALVALUE"); } if (!inspField.isNull("ENDVALUE")) { field.endvalue = inspField.getInt("ENDVALUE"); } field.metername = inspField.getString("METERNAME"); field.metertype = inspField.getString("METERTYPE"); field.showdate = inspField.getBoolean("SHOWDATE"); field.showtime = inspField.getBoolean("SHOWTIME"); field.doctype = inspField.getString("DOCTYPE"); field.visible = inspField.getBoolean("VISIBLE"); if (hasAttribute("INSPFIELD", "DOMAINID")) { field.domainid = inspField.getString("DOMAINID"); } if (hasAttribute("INSPFIELD", "DOMAINTYPE")) { field.domaintype = inspField.getString("DOMAINTYPE"); } if (!inspField.isNull("DESCRIPTION_LONGDESCRIPTION")) { field.information = inspField.getString("DESCRIPTION_LONGDESCRIPTION"); } if (!inspField.isNull("AUDIOCACHEFIELD")) { question.audiocachefield = Base64.getEncoder().encode(inspField.getBytes("AUDIOCACHEFIELD")); } if (!inspField.isNull("AUDIOCACHEOPTION")) { question.audiocacheoption = Base64.getEncoder().encode(inspField.getBytes("AUDIOCACHEOPTION")); } var inspFieldOptionSet = inspField.getMboSet("INSPFIELDOPTION"); var inspFieldOption = inspFieldOptionSet.moveFirst(); var fieldOptions = []; while (inspFieldOption) { var option = {}; option.inspfieldnum = inspFieldOption.getString("INSPFIELDNUM"); option.inspquestionnum = inspFieldOption.getString("INSPQUESTIONNUM"); option.inspformnum = inspFieldOption.getString("INSPFORMNUM"); option.description = inspFieldOption.getString("DESCRIPTION"); option.sequence = inspFieldOption.getInt("SEQUENCE"); option.inspectorfeedback = inspFieldOption.getString("INSPECTORFEEDBACK"); option.requireaction = inspFieldOption.getBoolean("REQUIREACTION"); option.color = inspFieldOption.getString("COLOR"); option.icon = inspFieldOption.getString("ICON"); try { if (hasAttribute("INSPFIELDOPTION", "AUDIOCACHEFBACK")) { if (!inspFieldOption.isNull("AUDIOCACHEFBACK")) { question.audiocachefback = Base64.getEncoder().encode(inspField.getBytes("AUDIOCACHEFBACK")); } } } catch (ignored) { /* ignored */ } fieldOptions.push(option); inspFieldOption = inspFieldOptionSet.moveNext(); } field.options = fieldOptions; var inspCascadeOptionSet = inspField.getMboSet("INSPCASCADEOPTIONSRC"); var inspCascadeOption = inspCascadeOptionSet.moveFirst(); while (inspCascadeOption) { var cascadeOption = {}; cascadeOption.inspcascadeoptionnum = inspCascadeOption.getString("INSPCASCADEOPTIONNUM"); cascadeOption.inspformnum = inspCascadeOption.getString("INSPFORMNUM"); cascadeOption.srcquestion = inspCascadeOption.getString("SRCQUESTION"); cascadeOption.srcfield = inspCascadeOption.getString("SRCFIELD"); cascadeOption.srctxtresponse = inspCascadeOption.getString("SRCTXTRESPONSE"); cascadeOption.tgtquestion = inspCascadeOption.getString("TGTQUESTION"); cascadeOption.tgtfield = inspCascadeOption.getString("TGTFIELD"); cascadeOption.visible = inspCascadeOption.getBoolean("VISIBLE"); cascadeOption.required = inspCascadeOption.getBoolean("REQUIRED"); cascadeOption.inspectorfeedback = inspCascadeOption.getString("INSPECTORFEEDBACK"); cascadeOption.showmessage = inspCascadeOption.getBoolean("SHOWMESSAGE"); cascadeOption.operator1 = inspCascadeOption.getString("OPERATOR1"); cascadeOption.operator2 = inspCascadeOption.getString("OPERATOR2"); cascadeOption.number1 = inspCascadeOption.getDouble("NUMBER1"); cascadeOption.number2 = inspCascadeOption.getDouble("NUMBER2"); cascadeOption.requireaction = inspCascadeOption.getBoolean("REQUIREACTION"); cascadeoptions.push(cascadeOption); inspCascadeOption = inspCascadeOptionSet.moveNext(); } fields.push(field); inspField = inspFieldSet.moveNext(); } question.fields = fields; questions.push(question); inspQuestion = inspQuestionSet.moveNext(); } result.questions = questions; result.cascadeoptions = cascadeoptions; var inspFormScriptSet = inspectionForm.getMboSet("INSPFORMSCRIPT"); var inspFormScript = inspFormScriptSet.moveFirst(); var scripts = []; if (inspFormScript) { var script = {}; script.inspformnum = inspFormScript.getString("INSPFORMNUM"); script.autoscript = inspFormScript.getString("AUTOSCRIPT"); script.sequence = inspFormScript.getInt("SEQUENCE"); scripts.push(script); inspFormScript = inspFormScriptSet.moveNext(); } result.scripts = scripts; return result; } else { return null; } } finally { _close(inspectionFormSet); } } function hasAttribute(objectName, attributeName) { return MXServer.getMXServer().getMaximoDD().getMboSetInfo(objectName).getAttribute(attributeName) != null; } function getInspectionFormId() { var httpRequest = request.getHttpServletRequest(); var requestURI = httpRequest.getRequestURI(); var contextPath = httpRequest.getContextPath(); var resourceReq = requestURI; if (contextPath && contextPath !== "") { resourceReq = requestURI.substring(contextPath.length()); } if (!resourceReq.startsWith("/")) { resourceReq = "/" + resourceReq; } var isOSLC = true; if (!resourceReq.toLowerCase().startsWith("/oslc/script/" + service.scriptName.toLowerCase())) { if (!resourceReq.toLowerCase().startsWith("/api/script/" + service.scriptName.toLowerCase())) { return null; } else { osOSLC = false; } } var baseReqPath = isOSLC ? "/oslc/script/" + service.scriptName : "/api/script/" + service.scriptName; var action = resourceReq.substring(baseReqPath.length); if (action.startsWith("/")) { action = action.substring(1); } if (!action || action.trim() === "") { return null; } return URLDecoder.decode(action.toLowerCase(), StandardCharsets.UTF_8.name()); } function fixInspectionAppDocTypes() { var docTypesSet; var appsSet; var allApplications = ["INSPECTOR", "INSPECTORSUP", "INSPECTION"]; try { var applications = []; appsSet = MXServer.getMXServer().getMboSet("MAXAPPS", userInfo); allApplications.forEach(function (application) { var sqlfCheck = new SqlFormat("app = :1"); sqlfCheck.setObject(1, "MAXAPPS", "APP", application); appsSet.setWhere(sqlfCheck.format()); System.out.println(sqlfCheck.format()); appsSet.reset(); if (!appsSet.isEmpty()) { applications.push(application); } }); docTypesSet = MXServer.getMXServer().getMboSet("DOCTYPES", userInfo); for (index in applications) { var application = applications[index]; var sqlf = new SqlFormat("doctype not in (select doctype from appdoctype where app = :1)"); sqlf.setObject(1, "APPDOCTYPE", "APP", application); docTypesSet.setWhere(sqlf.format()); docTypesSet.reset(); var docTypes = docTypesSet.moveFirst(); while (docTypes) { var appDocType = docTypes.getMboSet("APPDOCTYPE").add(); appDocType.setValue("APP", application); appDocType.setValue("DOCTYPE", docTypes.getString("DOCTYPE")); docTypes = docTypesSet.moveNext(); } docTypesSet.save(); } } finally { _close(appsSet); _close(docTypesSet); } } function checkPermissions(app, optionName) { if (!userInfo) { throw new FormError("no_user_info", "The userInfo global variable has not been set, therefore the user permissions cannot be verified."); } if (!MXServer.getMXServer().lookup("SECURITY").getProfile(userInfo).hasAppOption(app, optionName) && !isInAdminGroup()) { throw new FormError( "no_permission", "The user " + userInfo.getUserName() + " does not have access to the " + optionName + " option in the " + app + " object structure." ); } } // Determines if the current user is in the administrator group, returns true if the user is, false otherwise. function isInAdminGroup() { var user = userInfo.getUserName(); service.log_info("Determining if the user " + user + " is in the administrator group."); var groupUserSet; try { groupUserSet = MXServer.getMXServer().getMboSet("GROUPUSER", MXServer.getMXServer().getSystemUserInfo()); // Get the ADMINGROUP MAXVAR value. var adminGroup = MXServer.getMXServer().lookup("MAXVARS").getString("ADMINGROUP", null); // Query for the current user and the found admin group. // The current user is determined by the implicity `user` variable. sqlFormat = new SqlFormat("userid = :1 and groupname = :2"); sqlFormat.setObject(1, "GROUPUSER", "USERID", user); sqlFormat.setObject(2, "GROUPUSER", "GROUPNAME", adminGroup); groupUserSet.setWhere(sqlFormat.format()); if (!groupUserSet.isEmpty()) { service.log_info("The user " + user + " is in the administrator group " + adminGroup + "."); return true; } else { service.log_info("The user " + user + " is not in the administrator group " + adminGroup + "."); return false; } } finally { _close(groupUserSet); } } // Cleans up the MboSet connections and closes the set. function _close(set) { if (set) { try { set.cleanup(); set.close(); // eslint-disable-next-line no-empty } catch (ignored) {} } } function FormError(reason, message) { Error.call(this, message); this.reason = reason; this.message = message; } // ConfigurationError derives from Error FormError.prototype = Object.create(Error.prototype); FormError.prototype.constructor = FormError; FormError.prototype.element; var scriptConfig = { autoscript: "SHARPTREE.AUTOSCRIPT.FORM", description: "Export Inspection Form", version: "1.0.0", active: true, logLevel: "ERROR" };