Name

global.WorkspacePostOperation

Description

No description available

Script

var WorkspacePostOperation = Class.create();
WorkspacePostOperation.prototype = {
  initialize: function () { },
  execute: function (inputs) {
      if (gs.getCallerScopeName() === "sn_workspace_sta_0" || gs.getCallerScopeName() === "rhino.global") {
          var ux_app_record = new GlideRecord("sys_ux_page_registry");
          ux_app_record.addQuery("sys_package", inputs['app_sys_id']);
          ux_app_record.addQuery("title", inputs['ux_experience_name']);
          ux_app_record.query();
          while (ux_app_record.next()) {
              this.updateMacro(ux_app_record, inputs);
              this.updatePageProperties(ux_app_record, inputs);
              this.updateAcl(inputs);
              this.updateUIBConfig(ux_app_record);
          }
      }
  },
  updateMacro: function (ux_app_record, inputs) {
      var decendentOfTask = false;
      var primary_tables_hierarchy = new TableUtils(inputs['primary_table']).getTables().indexOf("task");
      if (primary_tables_hierarchy >= 0 ) decendentOfTask = true;

      var admin_panel = ux_app_record.admin_panel;
      var screenRecord = new GlideRecord("sys_ux_screen");
      screenRecord.addEncodedQuery("name=Home Default^app_config=" + admin_panel.sys_id);
      screenRecord.query();
      while (screenRecord.next()) {
          var macroponent = new GlideRecord("sys_ux_macroponent");
          macroponent.addQuery("sys_id", screenRecord.getValue("macroponent"));
          macroponent.query();
          while (macroponent.next()) {

              var composition = JSON.parse(macroponent.composition);

              // Modifiying the composition
              // based on the primary table selection
              var dashBoard1 = JSON.parse(composition[0].overrides.composition[0].propertyValues.dataConfigurations.value);
              dashBoard1[0].source_id = inputs.primary_table;

              if (decendentOfTask) {
                  composition[0].overrides.composition[0].propertyValues.dataConfigurations.value = JSON.stringify(dashBoard1);
                  var dashBoard2 = JSON.parse(composition[0].overrides.composition[1].propertyValues.dataConfigurations.value);
                  dashBoard2[0].source_id = inputs.primary_table;
                  composition[0].overrides.composition[1].propertyValues.dataConfigurations.value = JSON.stringify(dashBoard2);

                  var dashBoard3 = JSON.parse(composition[0].overrides.composition[2].propertyValues.dataConfigurations.value);
                  dashBoard3[0].source_id = inputs.primary_table;
                  composition[0].overrides.composition[2].propertyValues.dataConfigurations.value = JSON.stringify(dashBoard3);

              } else {
                  dashBoard1[0].filter_query = "";
                  composition[0].overrides.composition[0].propertyValues.dataConfigurations.value = JSON.stringify(dashBoard1);
                  composition[0].overrides.composition = [composition[0].overrides.composition[0]];
                  composition[1].overrides.composition[0].overrides.composition[0].propertyValues.columns = "";
                  composition[1].overrides.composition[0].overrides.composition[0].propertyValues.query = "";
              }

              composition[1].overrides.composition[0].overrides.composition[0].propertyValues.table = inputs.primary_table;

              macroponent.composition = JSON.stringify(composition);
              gs.info("workspace-json" + macroponent.update());
          }
      }
  },
  updatePageProperties: function (ux_app_record, inputs) {

      var menu_config = new GlideRecord("sys_ux_list_menu_config");
      menu_config.name = inputs.ux_experience_name + "_menu_config";
      menu_config.active = true;
      var menu_config_sys_id = menu_config.insert();

      function createCategory(tableName) {
          var list_category = new GlideRecord("sys_ux_list_category");
          var table_gr = new GlideRecord(tableName);
          list_category.title = table_gr.getLabel();
          list_category.order = 100;
          list_category.active = true;
          list_category.configuration = menu_config_sys_id;
          var list_category_sys_id = list_category.insert();

          function createList(tableName, title, order, condition) {
              var glideList = new GlideSysList(tableName);
              var list = new GlideRecord("sys_ux_list");
              list.title = title;
              list.order = order;
              list.active = true;
              list.category = list_category_sys_id;
              list.configuration = menu_config_sys_id;
              list.table = tableName;
              var columns = glideList.getListColumnsForView(tableName, "workspace", null, null);
              var str = columns.toString().replace("[", "").replace("]", "");
  			gs.addInfoMessage(str);
              list.columns = str;
              if (condition) {
                  list.condition = condition;
              }
              list.insert();
          }

          createList(tableName, "All", 50);
          var decendentOfTask = false;
          var primary_tables_hierarchy = new TableUtils(tableName).getTables().indexOf("task");
          if (primary_tables_hierarchy >= 0 || tableName === "task") decendentOfTask = true;
          if (decendentOfTask) {
              createList(tableName, "Open", 10, "active=true^EQ");
              createList(tableName, "Unassigned", 30, "active=true^assigned_toISEMPTY^EQ");
              createList(tableName, "Closed", 40, "active=false^EQ");
          }
      }
      createCategory(inputs.primary_table);

      inputs.secondary_tables.forEach(function (second_table) {
          if (second_table)
              createCategory(second_table);
      });

      var page_property = new GlideRecord("sys_ux_page_property");
      page_property.addEncodedQuery("page=" + ux_app_record.sys_id + "^name=listConfigId");
      page_property.query();
      page_property.next();
      page_property.value = menu_config_sys_id;
      page_property.update();
  },
  updateAcl: function (inputs) {

      var urlVar = inputs["ux_experience_url"];

      var splitParts = urlVar.split("/");
      var acl_route_name = "";
      if (splitParts.length > 0) {
          var exclusions = ["/", "", null, undefined];
          var splitUrlItems = splitParts.filter(function (item) {
              return exclusions.indexOf(item) == -1;
          });
          acl_route_name = splitUrlItems.join(".");
      } else {
          acl_route_name = urlVar;
      }
      var companyCode = gs.getProperty("glide.appcreator.company.code", "now");
      if (companyCode == "snc")
          companyCode = "now";
      var routeAclName = companyCode + "." + acl_route_name + ".*";

      var aclGR = new GlideRecord("sys_security_acl");
      aclGR.addQuery("name", "now.starter.workspace.*");
      aclGR.addQuery("sys_scope", inputs["app_sys_id"]);
      aclGR.orderBy("created");
      aclGR.query();
      aclGR.next();
      gs.error(aclGR.sys_id);
      aclGR.name = routeAclName;

      var acl_sys_id = aclGR.update();
      if (inputs["selected_roles"]) {
          
          inputs["selected_roles"].forEach(function (item) {
              var userRoleGR = new GlideRecord("sys_user_role");
              userRoleGR.get(item);
              var roleId = userRoleGR.getUniqueValue();

              var aclRoleGR = new GlideRecord("sys_security_acl_role");
              aclRoleGR.setValue("sys_security_acl", acl_sys_id);
              aclRoleGR.setValue("sys_user_role", roleId);
              aclRoleGR.insert();
          });
      }
  },
  updateUIBConfig: function (ux_app_record, inputs) {
      var uxAppConfigId = ux_app_record.admin_panel.sys_id;
      var templateRegistryId = "6b3293e80f0210107d20409dc4767e91";

      var gr = new GlideRecord("sys_ux_page_property");
      gr.addQuery("page", ux_app_record.sys_id);
      gr.addQuery("name", "chrome_header");
      gr.addQuery("route", "");
      gr.query();

      var genericHeaderProperty;
      while (gr.next()) {
          var jsonValue = gr.getValue("value");
          if (jsonValue.contains(templateRegistryId)) {
              genericHeaderProperty = gr;
          }
      }

      if (genericHeaderProperty) {
          var propertyId = genericHeaderProperty.getUniqueValue();
          var jsonValue = genericHeaderProperty.getValue("value");
          var newJsonValue = jsonValue.replace(templateRegistryId, uxAppConfigId);

          var ppGr = new GlideRecord('sys_ux_page_property');
          ppGr.get(propertyId);
          ppGr.setValue('value', newJsonValue);
          ppGr.update();
      }

  },
  type: 'WorkspacePostOperation'
};

Sys ID

da0f742b731020104cb09434c4f6a767

Offical Documentation

Official Docs: