Name

sn_app_eng_studio.ApplicationsDataModel

Description

Builds a model object of application-related data for App Engine Studio projects

Script

var ApplicationsDataModel = (function() {

  return {
      generate: function(
          applicationSysId /*object of key/value pairs representing an app*/ ,
          appLastOpenedDatesByUser /*object of key/value pairs of appSysId and date last opened by user in AES*/
      ) {
          var applicationRecord = new GlideRecord("sys_scope");

          if (!applicationRecord.get(applicationSysId))
              return;

          appLastOpenedDatesByUser = appLastOpenedDatesByUser || new ApplicationService().getUserAppsLastOpened();
          var lastOpenedByUserInAES = appLastOpenedDatesByUser && appLastOpenedDatesByUser[applicationSysId];
          var lastOpenedByUserInAESDispVal = lastOpenedByUserInAES &&
              new GlideDateTime(lastOpenedByUserInAES).getDisplayValue(); //uses current user session time zone
          var templates = new GlideRecord('sys_app_template');
          templates.addQuery('create_app', 'true');
          templates.addQuery('sys_scope', applicationRecord.getUniqueValue());
          templates.query();
          var sourceAppsForCreateFromScratch = new GlideRecord('sys_app_info');
          var isSourceApp = this._getIsSourceApp(applicationRecord.getUniqueValue());
          var templateId = null;

          if (isSourceApp) {
              var templateGR = new GlideRecord('sys_app_template');
              var hasTemplate = templateGR.get('source_id', applicationRecord.getUniqueValue());
              templateId = hasTemplate && templateGR.getUniqueValue();
          }

          var appData = {
              "sys_id": applicationSysId,
              "source_app": templates.hasNext() || isSourceApp,
              "template_id": templateId,
              "class_name": applicationRecord.getValue("sys_class_name"),
              "name": ValueDisplayValueModel(applicationRecord, "name"),
              "description": ValueDisplayValueModel(applicationRecord, "short_description"),
              "version": applicationRecord.getValue("version") || "",
              "scope_name": applicationRecord.getValue("scope") || "",
              "created": ValueDisplayValueModel(applicationRecord, "sys_created_on"),
              "created_by": ValueDisplayValueModel(applicationRecord, "sys_created_by"),
              "updated_by": ValueDisplayValueModel(applicationRecord, "sys_updated_by"),
              "type": {
                  "value": "Application",
                  "display_value": gs.getMessage("Application")
              },
              "icon": applicationRecord.getValue("icon") || "configuration-item-outline",
              "illustration": this._getIllustration(applicationRecord.getDisplayValue("logo")),

              "last_opened_in_aes": {
                  value: lastOpenedByUserInAES,
                  display_value: lastOpenedByUserInAESDispVal
              },

              "isPublishable": this._getAppPublishable(applicationSysId, applicationRecord)

          };

          return appData;
      },

      _getIllustration: function(logoAttachmentFile) {
          // logo url stored in Appliction record
          if (!gs.nil(logoAttachmentFile))
              return "/" + logoAttachmentFile;

          return "";
      },

      _getAppPublishable: function(applicationSysId, applicationRecord) {
          var isPublishable = false;
          var className = applicationRecord.getRecordClassName();

          var gr = new GlideRecord(className);
          var record = gr.get('sys_id', applicationSysId);

          if (record && className == 'sys_app') {
              isPublishable = true;
          }

          if (record && className == 'sys_store_app') {
              isPublishable = sn_app_customization.AppCustomizationAPI.isAppCustomizationCapableById(applicationSysId);
          }

          return isPublishable;
      },

      _getIsSourceApp: function(applicationSysId) {
          var sourceAppsForCreateFromScratch = new GlideRecord('sys_app_info');
          var isSourceApp = sourceAppsForCreateFromScratch.get('sys_scope', applicationSysId);

          if (isSourceApp) {
              var properties = sourceAppsForCreateFromScratch.getValue('properties');
              var propertiesObj = JSON.parse(properties);
              isSourceApp = propertiesObj && propertiesObj.hasOwnProperty("origin") && propertiesObj["origin"] === "create_from_scratch";
          }
          return isSourceApp;
      }
  };
})();

Sys ID

e829f7c6b723330001fb99adde11a932

Offical Documentation

Official Docs: