Name

global.VariableQueryParser

Description

Used to parse the query and then evaluate the values of the variables starting with javascript . Values are evaluated within the sandbox environment and doesn t throw an error in case of an exception.

Script

var VariableQueryParser = Class.create();
VariableQueryParser.prototype = Object.extendsObject(QueryParseAjax, {
  process: function() {
      QueryParseAjax.prototype.process.call(this);
      function getRecordFromRecordCache(tableName, id) {
          var gr = GlideRecordCache.get(tableName, id);
          if (!gr || !gr.isValidRecord()) {
              gr = new GlideRecord(tableName);
              if (!gr.get(id))
                  return null;
              GlideRecordCache.put(gr);
          }
          return gr;
      }
      var elements = this.getRootElement().childNodes;
      for (var i = 0; i < elements.length; i++) {
          var field = elements.item(i).getAttribute("field");
          var value = elements.item(i).getAttribute("value");
          var question;
          if (field)
              question = GlideappQuestion.getQuestion(field.substring(3));
              
          // We donot check read permission on a question inside the MRVS
          if (question) {
              var setId = question.getVSetID();
              if (GlideStringUtil.isEligibleSysID(setId) && question.getVSetType() == 'one_to_many') {
                  var setGr = getRecordFromRecordCache('item_option_new_set', setId);
                  if (setGr == null || !gs.hasRole(setGr.getValue('read_roles')))
                      return;
              } else {
                  if (!gs.hasRole(question.getReadRoles()))
                      return;
              }
          }
          if (field && value.startsWith("javascript:")) {
              var sBoxEvalObj = new GlideScriptEvaluator();
              sBoxEvalObj.setEnforceSecurity(true);
              value = sBoxEvalObj.evaluateString(value, false);
              if (question.getType() == 9 || question.getType() == 10) {
                  question.setDisplayValue(value);
                  value = question.getDisplayValue();
              }
              else {
                  question.setValue(value);
                  value = question.getValue();
              }
              elements.item(i).setAttribute("value", value);
          } else
              elements.item(i).setAttribute("value", value.replace('^^', '^'));
              //  Query separator(^) is escaped via StringUtil::escapeQueryTermSeparator
          if (question && question.getType() == 21 && value) {
              question.setValue(elements.item(i).getAttribute("value"));
              elements.item(i).setAttribute("value", question.getValue());
              elements.item(i).setAttribute("display_value", question.getDisplayValue());
          }
      }
  },
  type: "VariableQueryParser"
});

Sys ID

dadc4af05fa023008e6b1f9f2f731340

Offical Documentation

Official Docs: