Name

global.AssessmentUtilsAJAX

Description

Assessment Engine core AJAX utilities

Script

var AssessmentUtilsAJAX = Class.create();
AssessmentUtilsAJAX.prototype = Object.extendsObject(AbstractAjaxProcessor, {

  getAssessment: function() {
      var surveyId = this.getParameter('sysparm_surveyId');
      if (!this.canReadMetricType(surveyId))
          return;
      var surveyInfo = new AssessmentUtils().getAssessment(surveyId);
      return surveyInfo;
  },

  getCustomMetricDatatype: function() {
      var customMetric = this.getParameter('sysparm_custom_metric');
      var customMetricGr = new GlideRecordSecure("asmt_custom_metric");
      if (!customMetricGr.get(customMetric))
          return;
      var result = this.newItem("result");
      result.setAttribute("datatype", customMetricGr.getValue("result_type"));
  },

  getTemplateMinMax: function() {
      var template = this.getParameter('sysparm_template');
      var gr = new GlideRecordSecure("asmt_template_definition");
      gr.addQuery("template", template);
      gr.query();
      if (!gr.next())
          return;
      var templateMinMax = new AssessmentUtils().getTemplateMinMax(template);
      var result = this.newItem("result");
      result.setAttribute("min", templateMinMax.min);
      result.setAttribute("max", templateMinMax.max);
  },

  getFilterTables: function() {
      var table = this.getParameter('sysparm_table');
      var parentTables = (new TableUtils(table)).getTables();

      var value = [];
      var label = [];
      var labelsAndValues = [];
      var labelsSeen = {};

      var dd = new GlideRecordSecure('sys_dictionary');
      var qc = dd.addQuery('name', table);
      for (var i = 1; i < parentTables.size(); i++) {
          qc.addOrCondition('name', parentTables.get(i));
      }
      var qc2 = dd.addQuery('internal_type', 'glide_list');
      qc2.addOrCondition('internal_type', 'reference');

      dd.query();

      var tableLabelRecord = new GlideRecordSecure(table);
      var tableLabel = tableLabelRecord.getLabel();
      var tableDisValue = tableLabel + ' [' + table + ']';
      labelsAndValues.push({
          'label': tableDisValue,
          'value': table
      });
      labelsSeen[tableDisValue] = true;

      while (dd.next()) {
          var actValue = '';
          if (dd.internal_type == 'glide_list' || dd.internal_type == 'reference')
              actValue = dd.reference + '';

          var tab = new GlideRecordSecure("sys_db_object");
          tab.get("name", actValue);

          var disValue = tab.label + " [" + actValue + "]";
          if (!labelsSeen[disValue]) {
              labelsAndValues.push({
                  'label': disValue,
                  'value': actValue
              });
              labelsSeen[disValue] = true;
          }
      }

      // sort by label
      labelsAndValues.sort(function(objA, objB) {
          if (objA.label < objB.label)
              return -1;
          else if (objA.label == objB.label)
              return 0;
          else
              return 1;
      });

      for (var j = 0; j < labelsAndValues.length; j++) {
          label.push(labelsAndValues[j].label);
          value.push(labelsAndValues[j].value);
      }
      var result = this.newItem("result");
      result.setAttribute("value", value);
      result.setAttribute("label", label);
  },

  getReferenceFields: function() {
      var table = this.getParameter('sysparm_table');
      var parentTables = (new TableUtils(table)).getTables();

      var filter_table = this.getParameter('sysparm_filter_table');

      var value = [];
      var label = [];
      var dd = new GlideRecordSecure('sys_dictionary');
      var qc = dd.addQuery('name', table);
      for (var i = 1; i < parentTables.size(); i++) {
          qc.addOrCondition('name', parentTables.get(i));
      }
      dd.addQuery('reference', filter_table);
      dd.orderBy('name');
      dd.query();

      while (dd.next()) {
          label.push(dd.column_label + '');
          value.push(dd.element + '');
      }
      var result = this.newItem("result");
      result.setAttribute("value", value);
      result.setAttribute("label", label);
  },

  getTableFields: function() {
      var sortCombos = function(o1, o2, fields) {
          var field = fields.pop();
          if (o1[field] < o2[field])
              return -1;
          else if (o1[field] > o2[field])
              return 1;
          else if (fields.length == 0)
              return 0;
          else {
              return sortCombos(o1, o2, fields);
          }
      };

      var filter_table = this.getParameter('sysparm_filter_table');

      if (!filter_table)
          return;

      var dd = new GlideRecordSecure(filter_table);
      dd.initialize();
      var fields = dd.getFields();
      var combos = [];
      for (var i = 0; i < fields.size(); i++) {
          var field = fields.get(i);
          var descriptor = field.getED();
          var combo = {
              value: field.getName(),
              label: field.getLabel(),
              display: descriptor.isDisplay(),
              reference: descriptor.getReference(),
              referenceKey: descriptor.getReferenceKey()
          };
          combos.push(combo);
      }
      combos.sort(function(a, b) {
          return sortCombos(a, b, ['display', 'value', 'label']);
      });

      var fieldsProcessed = {};
      for (var j = 0; j < combos.length; j++) {
          if (!combos[j].value || fieldsProcessed[combos[j].value])
              continue;
          var result = this.newItem('result');
          result.setAttribute('value', combos[j].value);
          result.setAttribute('label', combos[j].label);
          result.setAttribute('display', combos[j].display);
          result.setAttribute('referenceKey', combos[j].referenceKey);
          result.setAttribute('reference', combos[j].reference);
          fieldsProcessed[combos[j].value] = true;
      }
  },

  getMetricTypeTable: function() {
      var metricType = this.getParameter('sysparm_metric_type');
      var gr = new GlideRecordSecure('asmt_metric_type');
      if (gr.get(metricType))
          return String(gr.table);
      else
          return '';
  },

  isFieldCompatible: function(field, metricTypeTable, metricTypeTables) {
      var fieldTable = field.getReference();
      var fieldTables = GlideDBObjectManager.getTables(fieldTable);
      return fieldTables.contains(metricTypeTable) || metricTypeTables.contains(fieldTable);
  },

  getCompatibleFields: function() {
      var table = this.getParameter('sysparm_table');
      var tableDescriptor = GlideTableDescriptor.get(table);
      var fields = tableDescriptor.getActiveFieldNames();
      var value = '';
      var current = new GlideRecordSecure('asmt_condition');
      if (current.get(this.getParameter('sysparm_id')))
          value = current.assessment_record_field;

      var metricTypeTable = this.getMetricTypeTable();
      var metricTypeTables = GlideDBObjectManager.getTables(metricTypeTable);
      for (var i = 0; i < fields.size(); ++i) {
          var fieldName = fields.get(i);
          var field = tableDescriptor.getElementDescriptor(fieldName);
          if (field.getInternalType() == "reference" && this
              .isFieldCompatible(field, metricTypeTable, metricTypeTables)) {
              var item = this.newItem('field');
              item.setAttribute('name', fieldName);
              item.setAttribute('label', field.getLabel());
              item.setAttribute('value', fieldName == value);
          }
      }
  },

  getFilters: function() {
      var id = this.getParameter('sysparm_id');

      var table = this.getParameter('sysparm_base_table');
      var groupField = this.getParameter('sysparm_group_field');
      var condition = this.getParameter('sysparm_condition');

      var filterTable = this.getParameter('sysparm_filter_table');
      var filterCondition = this.getParameter('sysparm_filter_condition');
      var showAllGroups = this.getParameter('sysparm_show_all_groups');

      if (!this.canReadMetricType(id))
          return;

      var allOptions = (new AssessmentUtils())
          .getFilters(id, table, groupField, condition, filterTable, filterCondition, showAllGroups);
      var maxChoiceValues = GlideProperties.getInt("com.snc.assessment.decision_matrix_filter_max_entries", allOptions.length);
      maxChoiceValues = maxChoiceValues <= allOptions.length ? maxChoiceValues : allOptions.length;
      for (var i = 0; i < maxChoiceValues; i++) {
          var item = this.newItem('group');
          item.setAttribute('display', allOptions[i].display);
          item.setAttribute('value', allOptions[i].value);
      }
  },

  createPreview: function() {
      try {

          if (!this.canReadMetricType(this.getParameter('sysparm_surveyid')))
              return;
          var metricType = new AssessmentUtils().createAssessment(this.getParameter('sysparm_info'), this
              .getParameter('sysparm_method'), 'draft', this.getParameter('sysparm_surveyid'));
          var instance = new SNC.AssessmentCreation().createPreview(metricType, gs.getUserID());

          var item = this.newItem('preview');
          item.setAttribute('previewTypeId', metricType);
          item.setAttribute('instanceId', instance);
      } catch (e) {
          gs.log('AssessmentUtilsAjax:createSurvey: exception: ' + e);
      }
  },

  removePreview: function() {
      try {
          var type = this.getParameter('sysparm_type');
          var ac = new SNC.AssessmentCreation();

          var instances = new GlideRecordSecure('asmt_assessment_instance');
          instances.addQuery('metric_type', type);
          instances.query();
          while (instances.next())
              ac.removePreview(instances.getUniqueValue());

          if (!this.canReadMetricType(type))
              return;

          new AssessmentUtils().removeAssessment(type);
      } catch (e) {
          gs.log('AssessmentUtilsAjax:removePreview: exception: ' + e);
      }
  },

  checkAttachmentQuestions: function() {
      var result = {};
      var assessmentId = this.getParameter('sysparm_assessment_id');
      var question = new GlideRecordSecure('asmt_assessment_instance_question');
      question.addQuery('instance', assessmentId);
      question.addQuery('metric.datatype', 'attachment');
      question.addQuery('metric.mandatory', true);
      question.query();
      while (question.next()) {
          var attachment = new GlideRecordSecure('sys_attachment');
          attachment.addQuery('table_name', 'asmt_assessment_instance_question');
          attachment.addQuery('table_sys_id', question.sys_id + '');
          attachment.setLimit(1);
          attachment.query();
          result[question.sys_id + ''] = attachment.hasNext();
      }
      var item = this.newItem("result");
      item.setAttribute("value", new JSON().encode(result));
  },

  checkAllowImage: function() {
      var template = this.getParameter('templateID');
      var gr = new GlideRecordSecure('asmt_template');
      gr.get('sys_id', template);
      var allowed = gr.getValue('allow_image');
      return allowed;
  },

  iterateAssessmentInstance: function() {
      var query = this.getParameter('sysparm_query');
      var row = this.getParameter('sysparm_row');
      var value = this.getParameter('sysparm_value').toString();
      var totalRows = this.getParameter('sysparm_totalr');
      var view = this.getParameter('sysparm_view');
      var currentRow;
      var instance = new GlideRecordSecure('asmt_assessment_instance');
      instance.addEncodedQuery(query);
      if (value == 'sysverb_record_next') {
          instance.chooseWindow(row, row + 1);
          currentRow = parseInt(row) + parseInt("1");
      } else {
          instance.chooseWindow(row - 2, row - 1);
          currentRow = row - 1;
      }
      instance.query();
      instance.next();
      var url = 'assessment_take2.do?sys_id=' + instance.getValue('sys_id') + '&sysparm_assessable_sysid=' + instance.getValue('sys_id') + '&sysparm_assessable_type=' + instance.getValue("metric_type") + '&sysparm_reader_view=true&sysparm_record_list=' + query + '&sysparm_record_row=' + currentRow + '&sysparm_record_rows=' + totalRows + '&sysparm_record_target=asmt_assessment_instance&sysparm_view=' + view + '&sysparm_instance=true';
      gs.setRedirect(url);
  },

  backToAssessmentList: function() {
      var query = this.getParameter('sysparm_query');
      var view = this.getParameter('sysparm_view');
      answer = "asmt_assessment_instance_list.do?sysparm_query=" + query + "&sysparm_view=" + view + "&sysparm_list=true";
      gs.setRedirect(answer);
  },

  processBankAction: function() {
      var item = this.newItem("result");
      var action = this.getParameter("sysparm_action");
      var add_dependent_questions = this.getParameter("sysparm_add_dependent_questions");
      var from_list = (this.getParameter("sysparm_from_list_id") + '').split(',');
      var to_record = this.getParameter("sysparm_to_record_id") ? this.getParameter("sysparm_to_record_id") : '';

      if (!this.canReadMetricType(to_record))
          return;
      var resultObj = new global.AssessmentUtils().processBankAction(action, from_list, to_record, add_dependent_questions);
      if (resultObj) {
          item.setAttribute("success", resultObj.success);
          item.setAttribute("message", resultObj.msg);
      }
  },

  canReadMetricType: function(metricId) {
      var metricType = new GlideRecordSecure('asmt_metric_type');
      return metricType.get(metricId) || metricType.canRead();
  },

  type: 'AssessmentUtilsAJAX'
});

Sys ID

c0cd3b63d7010100fceaa6859e6103fd

Offical Documentation

Official Docs: