Name
global.PortalBoardWidget
Description
Decorator on Portal Board widget
Script
var PortalBoardWidget = Class.create();
PortalBoardWidget.prototype = {
initialize: function(id) {
this.gr = new GlideRecord('planned_task_custom_console_widget');
if(!JSUtil.nil(id))
this.gr.get(id);
this.ppmConfigHelper = new PPMConfigHelper();
},
demandFilter: function() {
return this.gr.getValue('demand_filter');
},
projectFilter: function() {
return this.gr.getValue('project_filter');
},
name: function() {
return this.gr.getDisplayValue('name');
},
color: function() {
return this.gr.getValue('color');
},
scripted: function() {
if(JSUtil.nil(this.gr.getValue('scripted')))
return false;
else if(this.gr.getValue('scripted')=='0')
return false;
else
return true;
},
script: function() {
return this.gr.getValue('script');
},
active: function() {
if(JSUtil.nil(this.gr.getValue('active')))
return false;
else if(this.gr.getValue('active')=='0')
return false;
else
return true;
},
order: function() {
return parseInt(this.gr.getValue('order'));
},
displayOnBoard: function() {
if(JSUtil.nil(this.gr.getValue('display_on_board')))
return false;
else if(this.gr.getValue('actdisplay_on_boardive')=='0')
return false;
else
return true;
},
aggregateType: function() {
return this.gr.getValue('aggregate_type');
},
projectAggregateColumn: function() {
return this.gr.getValue('project_aggregate_column');
},
demandAggregateColumn: function() {
return this.gr.getValue('demand_aggregate_column');
},
formatterRequired: function() {
return this.gr.getValue('formatter_required');
},
tableInstanceOf: function(table) {
var gr = new GlideRecord(this.table());
return gr.instanceOf(table);
},
getTables: function(table){
return this.ppmConfigHelper.getProjectTables(table);
},
getWidgetValue: function(consoleId) {
var retObj = {};
try{
if(this.scripted())
retObj = this.getScriptedWidgetValue(consoleId);
else
retObj = this.getFilterWidgetValue(consoleId);
}catch(e){
retObj["value"] = "";
gs.error("PortalBoardWidget:getWidgetValue:"+JSON.stringify(e));
}
retObj['name'] = this.name();
retObj['color'] = this.color();
retObj['order'] = this.order();
retObj['sys_id'] = this.id();
retObj['parent'] = this.getParent();
retObj['show_label'] = this.getShowLabel();
retObj['short_description'] = this.getShortDescription();
retObj['children'] = [];
retObj['visible'] = true;
retObj['fullFetch'] = true;
return retObj;
},
getScriptedWidgetValue: function(consoleId) {
var retObj={};
var ptc = new PortalBoard(consoleId);
var params = {
projectFilter: ptc.filter(),
demandFilter: ptc.table2Filter(),
projectClass: ptc.table(),
demandClass: ptc.table2(),
boardSysId: consoleId
};
var evaluator = new GlideScopedEvaluator();
var val = evaluator.evaluateScript(this.gr, 'script', params);
retObj['value'] = val+'';
return retObj;
},
addDurations: function(prjDuration, dmnDuration){
var prjDur = new GlideDuration(prjDuration);
prjDur.add(dmnDuration);
return prjDur;
},
getFilterWidgetValue: function(consoleId) {
var ptc = new PortalBoard(consoleId);
var retObj={};
var prjAggre='';
var dmnAggre='';
var prjAggColumn='sys_id';
var dmnAggColumn='sys_id';
var dmnColumnType='string';
var prjColumnType='string';
if(this.aggregateType()!='COUNT'){
prjAggColumn=this.projectAggregateColumn();
dmnAggColumn=this.demandAggregateColumn();
}
if(!JSUtil.nil(ptc.filter())) {
var prjGa = new GlideAggregate(ptc.table());
prjColumnType=prjGa.getElement(prjAggColumn).getED().getInternalType();
prjGa.addAggregate(this.aggregateType(),prjAggColumn);
if(JSUtil.notNil(this.projectFilter()))
prjGa.addEncodedQuery(this.projectFilter());
prjGa.addEncodedQuery(ptc.filter());
//To avoid teamspace project/demand records
prjGa.addEncodedQuery('sys_class_nameIN'+this.getTables(ptc.table()));
prjGa.setGroup(false);
prjGa.query();
if(prjGa.next())
prjAggre = prjGa.getAggregate(this.aggregateType(),prjAggColumn);
else
prjAggre = '';
if(JSUtil.has(prjAggre) && prjAggre!='' && prjAggColumn!='glide_duration')
prjAggre=parseFloat(prjAggre);
else if (prjColumnType!='glide_duration')
prjAggre = 0;
}
if(!JSUtil.nil(ptc.table2Filter())) {
var dmnGa = new GlideAggregate(ptc.table2());
dmnColumnType=dmnGa.getElement(dmnAggColumn).getED().getInternalType();
dmnGa.addAggregate(this.aggregateType(),dmnAggColumn);
if(JSUtil.notNil(this.demandFilter()))
dmnGa.addEncodedQuery(this.demandFilter());
dmnGa.addEncodedQuery(ptc.table2Filter());
dmnGa.addQuery('sys_class_name', ptc.table2());//To avoid teamspace project/demand records
dmnGa.setGroup(false);
dmnGa.query();
if(dmnGa.next())
dmnAggre = dmnGa.getAggregate(this.aggregateType(),dmnAggColumn);
else
dmnAggre = '';
if(JSUtil.has(dmnAggre) && dmnAggre!='' && dmnColumnType!='glide_duration')
dmnAggre=parseFloat(dmnAggre);
else if (dmnColumnType!='glide_duration')
dmnAggre = 0;
}
if(this.aggregateType()=='SUM' || this.aggregateType()=='COUNT' && (dmnColumnType!='glide_duration' && prjColumnType!='glide_duration'))
retObj['value']=prjAggre+dmnAggre;
else if (dmnColumnType=='glide_duration' && prjColumnType=='glide_duration')
retObj['value']=this.addDurations(prjAggre,dmnAggre);
else
retObj['value']=0;
if(this.aggregateType()=='MIN') {
if(!JSUtil.notNil(prjAggre))
retObj['value']= dmnAggre;
if(!JSUtil.notNil(dmnAggre))
retObj['value']= prjAggre;
if(dmnAggre<prjAggre)
retObj['value']= dmnAggre;
else
retObj['value']= prjAggre;
}
if(this.aggregateType()=='MAX') {
if(!JSUtil.notNil(prjAggre))
retObj['value']= dmnAggre;
if(!JSUtil.notNil(dmnAggre))
retObj['value']= prjAggre;
if(dmnAggre>prjAggre)
retObj['value']= dmnAggre;
else
retObj['value']= prjAggre;
}
return retObj;
},
id: function() {
return this.gr.getValue('sys_id');
},
isValid: function() {
return this.gr.isValidRecord();
},
getParent:function(){
return this.gr.getValue('parent');
},
getShowLabel:function(){
return this.gr.getValue('show_label');
},
getShortDescription:function(){
return this.gr.getValue('short_description');
},
//used in the form
widgetParentFilter: function (widgetSysId) {
var filter = "^parentISEMPTY";
if(widgetSysId != -1){
filter += "^sys_id!=" + widgetSysId;
}
return filter;
},
getPartialWidgetValue: function() {
//partial values for widget in case of hidden values.
var retObj = {};
retObj['name'] = this.name();
retObj['order'] = this.order();
retObj['sys_id'] = this.id();
retObj['parent'] = this.getParent();
retObj['visible'] = false;
retObj['fullFetch'] = false;
retObj['children'] = [];
return retObj;
},
type: 'PortalBoardWidget'
};
Sys ID
dd6d96f75f13030056976e303e46661e