Name

global.VAURLResourceHelper

Description

A helper class that retrieves the table name and sys id from the passed URL.

Script

var VAURLResourceHelper = Class.create();

VAURLResourceHelper.KEY_TABLE = 'table';
VAURLResourceHelper.KEY_SYS_ID = 'sys_id';

/**
* Returns a map that contains table name and sys_id
*/
VAURLResourceHelper.getResourceMap = function getDocumentInfoMap(url) {
  
  var result = {};
  
  var found = getHostAndPathFromURL(url);
  
  var host = found.host;
  var path = found.path;
  
  if(gs.nil(host) || gs.nil(path))
  	return result;
  
  var pathName = getPathNameFromPath(path);
  
  // get the query parmas
  var queryParams = getQueryParams(url);
  
  if (canBePortal(pathName) && handlePortalURL(url, queryParams, result)) {
  	//The url can be generated for a portal.
  	return result;
  }
  else if (path.indexOf('nav_to.do') != -1) {
  	
  	// the patter is https://<host>/nav_to.do?uri=.....
  	var token = 'uri=';
  	var index = path.indexOf(token);
  	var uri = path.substring(index + 4);
  	
  	// this uri is encoded. so need to decode it.
  	uri = decodeURIComponent(uri);
  	
  	// get the query params from uri
  	var uriParams = getQueryParams(uri);
  	
  	var sysId = uriParams['sys_id'];
  	if(!gs.nil(sysId))
  		result[VAURLResourceHelper.KEY_SYS_ID] = sysId;
  	
  	var table = getTableNameFromPath(uri);
  	if(!gs.nil(table))
  		result[VAURLResourceHelper.KEY_TABLE] = table;
  	
  	//special handling for KB if sysId is not found yet.
  	if( gs.nil(sysId) && !gs.nil(uriParams['sys_kb_id'] )) 
  		result[VAURLResourceHelper.KEY_SYS_ID] = uriParams['sys_kb_id'];	
  	
  }
  
  // the default url patter: https://<host>?<table_name>.do?sys_id=....
  
  if (path.indexOf(".do?") != -1 && !gs.nil(queryParams['sys_id'])) {
  	result[VAURLResourceHelper.KEY_SYS_ID] = queryParams['sys_id'];
  	result[VAURLResourceHelper.KEY_TABLE] = getTableNameFromPath(path);
  }
  
  return result;
};

function handlePortalURL(url, queryParams, collector) {

  var sysId = queryParams['sys_id'];
  var table = queryParams['table'];
  var id = queryParams['id'];
  
  // if sysId is not found, no need to proceed.
  if (sysId == null)
  	return false;
  
  collector[VAURLResourceHelper.KEY_SYS_ID] = sysId;
  
  if (table != null) {
  	// if table exists, no need to proceed. all done.
  	collector[VAURLResourceHelper.KEY_TABLE] = table;
  	return true;
  }
  
  // if sys_id found but table is missing, id can be used to obtain table.
  if (id == null)
  	return false;
  
  // get table by id..
  table = getTableNameById(id);
  
  // still not found? give up..
  if(gs.nil(table))
  	return false;
  
  collector[VAURLResourceHelper.KEY_TABLE] = table;
  return true;
}

function getPathNameFromPath(path) {
  var index = path.indexOf('?');
  var pathName = (index == -1)? path : path.substring(0,index);
  pathName = pathName.replace('/','');
  return pathName;
}

function getTableNameFromPath(path) {

  var tableName =null; 
  var tmp = path;
  
  if(path.startsWith('/'))
  	tmp = path.substring(1);
  
  var index = tmp.indexOf('.do?');
  if(index != -1)
  	tableName = tmp.substring(0,index); 
  
  // remove if '_list' is found
  if (tableName.indexOf('_list'))
  	tableName = tableName.replace('_list','');
  
  return tableName;
}	

function getTableNameById(id) {
  
  // this logic is hardcoded now. Will need to be replaced the logic with dynamic lookup
  if (id.indexOf("user_profile") != -1) {
  	return 'sys_user';
  }
  else if	(id.indexOf("kb_") != -1) {
  	return 'kb_knowledge';
  }
  return null;
}

function canBePortal(pathName) {
  return pathName.indexOf(".do?") == -1;
}

function getHostAndPathFromURL(url) {
  
  var obj = {};
  var urlParts = /^(?:\w+\:\/\/)?([^\/]+)(.*)$/.exec(url);
  
  if(gs.nil(urlParts) || urlParts.length<3)
  	return obj;
  
  var hostname = urlParts[1]; // www.example.com
  var path = urlParts[2]; // /path/to/somwhere
  
  obj.host = hostname;
  obj.path = path;
  
  return obj;
}

function isSameHost(host) {
  var instance = gs.getProperty("glide.servlet.uri");
  return instance.indexOf(host) != -1;
}

function getQueryParams(url) {
  
  var index = url.indexOf("?");
  
  if(index == -1)
  	return new {};

  var queryString = url.substring(index+1);
  var params = queryString.split("&");
  var map = {};

  for (var i=0; i<params.length; i++ ) {
  	var param = params[i];
  	var name = param.split("=")[0];  
  	var value = param.split("=")[1];  
  	map[name] = value;    
  }  
  return map;  
}

Sys ID

a1ae46d2533230105400ddeeff7b1245

Offical Documentation

Official Docs: