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