Name

sn_csm_workspace.RelatedListItemCandidateFilter

Description

Implements extension point global.RelatedListItemCandidateFilter

Script

var RelatedListItemCandidateFilter = Class.create();
RelatedListItemCandidateFilter.prototype = {
  initialize: function(tableName, parentFieldName, parentRecordSysId, referencedFieldName) {
  	this.tableName = tableName;
  	this.parentFieldName = parentFieldName;
  	this.parentRecordSysId = parentRecordSysId;
  	this.referencedFieldName = referencedFieldName;
  },

  getFilterQuery: function() {
      var caseGr = new GlideRecord("sn_customerservice_case");
      caseGr.get(this.parentRecordSysId);
      var installBaseFilter = {};
      installBaseFilter['account'] = caseGr.getValue('account');
      installBaseFilter['consumer'] = caseGr.getValue('consumer');
      installBaseFilter['service_organization'] = caseGr.getValue('service_organization');
      installBaseFilter['selectedIBs'] = this.getSelectedIBIds(this.parentRecordSysId);
      installBaseFilter['soldProductId'] = caseGr.getValue('sold_product');
      installBaseFilter['soldProductIbs'] = this.getIBForSoldItem(this.parentRecordSysId, installBaseFilter['selectedIBs'],
      installBaseFilter['soldProductId']);
      return this.getQueryHelper(installBaseFilter);
  },

  getSelectedIBIds: function(caseId) {
      var affectedIB = new GlideRecord('sn_install_base_m2m_affected_install_base');
      affectedIB.addQuery('csm_case', caseId);
      affectedIB.query();
      var result = [];
      while (affectedIB.next()) {
          result.push(affectedIB.getValue('install_base_item'));
      }

      return result;

  },

  getIBForSoldItem: function(caseId, selectedIBIds, soldProductId) {
      if (!soldProductId)
          return;
      var installedProductGr = new GlideRecord('sn_install_base_m2m_installed_product');
      var caseGr = installedProductGr.addJoinQuery('sn_customerservice_case', 'sold_product', 'sold_product');
      installedProductGr.addQuery('install_base_item', 'NOT IN', selectedIBIds.join(','));
      caseGr.addCondition('sys_id', caseId + '');
      caseGr.addCondition('sold_product', soldProductId);
      installedProductGr.query();
      var result = [];
      while (installedProductGr.next()) {
          result.push(installedProductGr.getValue('install_base_item'));
      }
      return result;
  },

  getQueryHelper: function(installBaseFilter) {
      var query = '';
      if (installBaseFilter['soldProductId'])
          return "sys_id IN" + installBaseFilter['soldProductIbs'].join(",");

      if (installBaseFilter['account'])
          query = "account=" + installBaseFilter["account"];

      if (installBaseFilter['consumer'])
          query = "consumer=" + installBaseFilter["consumer"];

  	if (installBaseFilter['service_organization'])
  		query = "service_organization=" + installBaseFilter["service_organization"];

      if (installBaseFilter['selectedIBs'].length) {
          if (query)
              query = query + "^sys_idNOT IN" + installBaseFilter['selectedIBs'].join();
          else
              query = "sys_idNOT IN" + installBaseFilter['selectedIBs'].join();
      }

      return query;

  },

  handles: function(extensioPointType) {
      return extensioPointType == "AFFECTED_INSTALL_BASE_FILTER";
  },

  type: 'RelatedListItemCandidateFilter'
};

Sys ID

9f34d2de773b3300d7159b71a9106108

Offical Documentation

Official Docs: