Name

sn_itom_pde.PANPopulatePatternToSharedLibMapping

Description

This script populates the mapping between pattern and shared libraries placed inside them

Script


var PANPopulatePatternToSharedLibMapping = Class.create();
PANPopulatePatternToSharedLibMapping.prototype = {

  initialize: function() {
      this.pattern_table = 'sa_pattern';
      this.command_list_table = 'pd_command_list';
      this.pattern_to_shared_libraries_table = 'pd_pattern_to_shared_library_mapping';
  },

  start: function(rec) {

      var step = '';
      var ndl = '';

      var pattern = new GlideRecord(this.pattern_table);
      if (global.JSUtil.notNil(rec)) {
          pattern.addQuery('sys_id', rec);
      }
      pattern.addQuery('active', true);
      pattern.query();

      while (pattern.next()) {
          ndl = pattern.ndl;

          var lines = ndl.split('\n');
          var bracketCounter = 0;
          for (var i in lines) {
              var line = lines[i];
              this.parseSharedLibrariesRef(bracketCounter, line, pattern)
          }
      }
  },

  _insertOrUpdate: function(parentId, sysId) {
      var pattern2Lib1 = new GlideRecord('pd_pattern_to_shared_library_mapping');
      pattern2Lib1.addQuery('parent', parentId);
      pattern2Lib1.addQuery('pattern', sysId);
      pattern2Lib1.query();
      if (pattern2Lib1.next()) {
          pattern2Lib1.setValue('is_outdated', false);
          pattern2Lib1.update();
      } else {
          var pattern2Lib = new GlideRecord('pd_pattern_to_shared_library_mapping');
          pattern2Lib.setValue('parent', parentId);
          pattern2Lib.setValue('pattern', sysId);
          pattern2Lib.setValue('is_outdated', false);
          pattern2Lib.insert();
      }
  },

  parseSharedLibrariesRef: function(bracketCounter, line, pattern) {
      //line = line.trim();
      if (bracketCounter < 0)
          bracketCounter = 0;

      if (line.indexOf('{') > 0) {
          bracketCounter++;
      }

      if (line.indexOf('step') > 0) {
          step = 'in';
      }

      if (line.indexOf('}') >= 0) {
          --bracketCounter;
          if (bracketCounter == 1)
              step = 'out';
      }

      // Capturing shared libraries
      if (line.match(/ref {refid = ".*"/gi) && step == 'in') {
          gs.debug('Reference found: ' + line);
          var refStep = line.split('ref {refid = ');
          gs.debug('Reference Splitted: ' + refStep);
          var rightSide = refStep[1].trim();
          gs.debug('Reference Right Side: ' + rightSide);
          var sysId = rightSide.replace(/["}]/g, '');
          gs.debug('Reference sys_id: ' + sysId);
          var parentId = pattern.getUniqueValue();
          if (sysId)
              this._insertOrUpdate(parentId, sysId);
      }
  },

  type: 'PANPopulatePatternToSharedLibMapping'
};

Sys ID

930a026c471a51507cb2e977746d4377

Offical Documentation

Official Docs: