Name

sn_dependentclient.PluginDependency

Description

No description available

Script

            var PluginDependency = Class.create();
          PluginDependency.prototype = {
              initialize: function () {
  				this._appstoreIntegration = new AppstoreIntegration();
                  this._json = new global.JSON();
              },

              /* Returns all the appstore applications dependent on the plugins given
               * Input: a list of all the plugins for which dependent apps are required
               * Eg. : PluginList - ["com.service.a","com.glide.b"]
               *
               * Output: a dictionary containing list of dependent apps based on each plugin
               * Sample Output: DependentApps - { "com.service.a" :{[title: app1, version: 1.0.0, .....], [title: app2, version: 1.5.0, .....] },
               *                                  "com.glide.b"   :{[title: app2, version: 1.0.0, .....], [title: app3, version: 1.2.0, .....] }
               *                                }
               */
              getDependentApps: function (pluginList) {
                  if (gs.nil(pluginList) || pluginList.length == 0) {
                      return {
                          "error": "Parameter pluginList is missing/empty"
                      };
                  }

                  gs.eventQueue('sn_dependentclient.check.dependent_apps', null, pluginList.join(","));
                  return this.fetchDependencyData(pluginList);
              },

              updatePluginData: function(plugins) {
                  var missingOrOldPluginRecords = this.getMissingOrOldPluginData(plugins);
                  if (missingOrOldPluginRecords.length > 0)
                      this._appstoreIntegration.getPluginDependency(missingOrOldPluginRecords);
              },

              getMissingOrOldPluginData: function(pluginList) {
                  var result = [];
                  if (pluginList)
                      result = pluginList.split(",");
                  var query = "sys_updated_onRELATIVEGT@hour@ago@24^plugin_idIN" + pluginList;
                  var dependentRecords = new GlideAggregate("sn_dependentclient_app_plugin_map");
                  dependentRecords.addEncodedQuery(query);
                  dependentRecords.groupBy("plugin_id");
                  dependentRecords.query();

                  while(dependentRecords.next()) {
                      var index = result.indexOf(dependentRecords.plugin_id.toString());
                      if(index > -1)
                          result.splice(index, 1);
                  }

                  return result;
              },

              fetchDependencyData: function(pluginList) {
                  var dependentApps = {};
                  var gr = new GlideRecord("sn_dependentclient_app_plugin_map");
                  gr.setWorkflow(false);
                  var grOR = gr.addQuery("plugin_id", pluginList[0]);
                  for (var i = 1; i < pluginList.length; i++) {
                      grOR.addOrCondition("plugin_id", pluginList[i]);
                  }
                  gr.query();
                  while (gr.next()) {
                      var application = {};
                      application.source_app_id = gr.application.source_app_id.toString();
                      application.version = gr.application.version.toString();
                      application.title = gr.application.title.toString();
                      application.scope = gr.application.scope.toString();
                      application.compatibility = gr.application.compatibility.toString();
                      application.vendor_name = gr.application.vendor_name.toString();
                      application.tagline = gr.application.tagline.toString();
                      application.description = gr.application.description.toString();
                      application.price_type = gr.application.price_type.toString();
                      application.app_type = gr.application.app_type.toString();
                      application.trial_available = gr.application.trial_available.toString();
                      application.logo = gr.application.logo.toString();
                      application.featured_icon = gr.application.featured_icon.toString();
                      application.appstore_link = gr.application.appstore_link.toString();
                      application.demo_available = gr.application.demo_available.toString();
                      application.categories = gr.application.categories.toString().split("|");
                      application.is_installed = this._appstoreIntegration.is_installed(application.source_app_id, application.scope, application.version);
                      application.can_install_update = this._appstoreIntegration.can_install_update(application.source_app_id).toString();
                      application.artifacts = gs.nil(gr.application.artifacts) ? [] : this._json.decode(gr.application.artifacts);
                      application.description_html = gr.application.description_html.toString();
                      if (gs.nil(dependentApps[gr.plugin_id.toString()])) {
                          dependentApps[gr.plugin_id.toString()] = [];
                      }
                      dependentApps[gr.plugin_id.toString()].push(application);
                  }

                  return dependentApps;
              },

              //call this to get a fresh data of app plugin dependency from Appstore
              refreshDependentApps: function() {
                  this._appstoreIntegration.getPluginDependency();
              },

              type: 'PluginDependency'
          };
          

Sys ID

0fd60b2e0b500300894181a037673ad6

Offical Documentation

Official Docs: