Name

sn_hr_core.HRMLUtilsSNC

Description

No description available

Script

function HRMLUtilsSNC() {}

HRMLUtilsSNC.prototype = {
  initialize: function() {},
  getPredictions: function(glideRecord, solutionDefinition, topN) {
      if (gs.nil(topN))
          topN = 1;
      if (!(new GlidePluginManager().isActive('com.glide.platform_ml')))
          return;
      try {
          var mlSolution = sn_ml.ClassificationSolutionStore.get(solutionDefinition.solution_name.toString());
          var options = {};
          options.top_n = topN;
          options.mluc = "MLUC-HR-00002";
          options.apply_threshold = true;
          mlSolution.getActiveVersion().predict(glideRecord, options);
      } catch (err) {
          var logError = function(err) {
              gs.error(err);
          };
          gs.getMessage('Error while predicting: {0}', err.toString(), logError);
      }
  },

  getHRPredictions: function(hrCaseGr) {
      var hrService = this.predict(hrCaseGr);
      if (gs.nil(hrService))
          return;
      var gr = new GlideRecord('sn_hr_core_service');
      if (gr.get(hrService)) {
          if (gr.getValue('active') == 1) {
              var coe_display = gr.getValue('service_table');

              var service = gr.getValue('name');
              var service_id = gr.getUniqueValue();

              var predictions = {
                  coe_display: coe_display,
                  service_display: service,
                  service_id: service_id
              };
              return predictions;
          }
      }
      gr = new GlideRecord('sn_hr_core_service');
      gr.addQuery('value', 'general_inquiry');
      gr.query();
      if (gr.next()) {
          var coe_display_error = gr.getDisplayValue('service_table');
          var service_error = gr.getDisplayValue('name');
          var service_id_error = gr.getUniqueValue();

          var predictions_error = {
              coe_display: coe_display_error,
              service_display: service_error,
              service_id: service_id_error
          };
          return predictions_error;
      }
      return;

  },

  predict: function(hrCaseGr) {
      if (!(new GlidePluginManager().isActive('com.glide.platform_ml')))
          return;
      var gr = new GlideRecord('sn_hr_core_ai_configuration'); //configuration table
      gr.addQuery('use_case', 'email_categorization');
      gr.addQuery('sys_domain', hrCaseGr.sys_domain);
      gr.addActiveQuery();
      gr.query();

      if (!gr.next()) {
          gr = new GlideRecord('sn_hr_core_ai_configuration');
          gr.addQuery('use_case', 'email_categorization');
          gr.addQuery('sys_domain', 'global');
          gr.addActiveQuery();
          gr.query();
          if (!gr.next())
              return;
      }
      var name = gr.solution_capability_definition.solution_name.toString(); //Get solution name from configuration
      if (this._isMLPredictorResultPresent(name, hrCaseGr.sys_id))
          return;
      try {
          var mlSolution = sn_ml.ClassificationSolutionStore.get(name);
          if (gs.nil(mlSolution))
              return;
          var options = {};
          options.mluc = "MLUC-HR-00004";
          options.top_n = 1;
          options.apply_threshold = true;
          var result = mlSolution.getActiveVersion().predict(hrCaseGr, options);
          if (result === null) {
              //instead of returning null returning empty array
              return [];
          }
          var resultObj = JSON.parse(result);
          var keys = Object.keys(resultObj);
          if (gs.nil(keys)||resultObj[keys[0]].length===0) {
              return;
          }
          var hrServiceSysId = resultObj[keys[0]][0]["predictedSysId"];
          return hrServiceSysId;
      } catch (err) {
          var logError = function(err) {
              gs.error(err);
          };
          gs.getMessage('Error while predicting: {0}', err.toString(), logError);
      }
  },

  _isMLPredictorResultPresent: function(solutionName, caseID) {
      // fetch the solution from solution id 
      var sol = new GlideRecord('ml_solution');
      sol.addQuery('active', true);
      sol.addQuery('solution_name', solutionName);
      sol.query();
      if (!sol.next())
          return false;

      // Check if predicted result is persent
      var predictorResult = new GlideRecord('ml_predictor_results');
      predictorResult.addQuery('source_sys_id', caseID);
      predictorResult.addQuery('solution', sol.sys_id);
      predictorResult.query();
      if (predictorResult.next())
          return true;

      return false;

  },


  type: 'HRMLUtilsSNC'
};

Sys ID

45104154536300105354ddeeff7b1252

Offical Documentation

Official Docs: