Name

global.ShadowTaskQueryHelper

Description

No description available

Script

var ShadowTaskQueryHelper = Class.create();
ShadowTaskQueryHelper.prototype = {
  initialize: function() {
  },

  type: 'ShadowTaskQueryHelper'
};

ShadowTaskQueryHelper.findIncomingRelationTo = function (sysId) { // sysId of shadowTask
  if(JSUtil.notNil(sysId)) {
      var gr = new GlideRecord("planned_task_rel_planned_task");
      gr.addQuery("child", sysId);
      gr.addNotNullQuery("orig_sys_id");
      gr.query();
      if(gr.next()) {
          PPMDebug.log("ShadowTaskQueryHelper.findIncomingRelationTo -> " + gr.getValue("sys_id"));
          return gr;
      }
  }
};

ShadowTaskQueryHelper.filterForNonShadowTask = function() {
  var func = function(task) {
      return JSUtil.nil(task.orig_sys_id);
  };
  return func;
};

ShadowTaskQueryHelper.filterForTaskHavingShadows = function() {
  var func = function(task) {
      var taskId = task.id || task.sys_id;
      var shadowCount = 0;
      var count = new GlideAggregate('planned_task');
      count.addAggregate('COUNT');
      count.addQuery('orig_sys_id', taskId);
      count.query();
      if (count.next()) 
         shadowCount = count.getAggregate('COUNT');
      return shadowCount > 0;
  };
  return func;
};

ShadowTaskQueryHelper.findShadowTasks = function(taskId) {
  var gr = new GlideRecord('planned_task');
  gr.addQuery('orig_sys_id', taskId);
  gr.query();
  return gr;
};

ShadowTaskQueryHelper.findUpstreamTaskOfShadowRelation = function (sysId) { // sysId of shadowRelation
  if(JSUtil.notNil(sysId)) {
      var gr = new GlideRecord("planned_task_rel_planned_task");
      if(gr.get(sysId)) {
          return gr.orig_sys_id.parent.getRefRecord(); 
      }
  }
};

ShadowTaskQueryHelper.findDownStreamTaskOfShadowRelation = function (sysId) { // sysId of shadowRelation
  if(JSUtil.notNil(sysId)) {
      var gr = new GlideRecord("planned_task_rel_planned_task");
      if(gr.get(sysId)) {
          var rel = new GlideRecord("planned_task_rel_planned_task");
          rel.addQuery("orig_sys_id", gr.getValue("orig_sys_id"));
          rel.addQuery("sys_id", "!=", sysId);
          rel.query();
          if(rel.next())
              return rel.parent.getRefRecord();
      }
  }
};

ShadowTaskQueryHelper.shouldProcessRelationImmediately = function(shadowRelationId) {
  var gr = ShadowTaskQueryHelper.findExternalRelation(shadowRelationId);
  if ( gr.getValue('inter_task_dependency_type') == 'hard' )
      return true;
  else
      return false;   
};

ShadowTaskQueryHelper.findExternalRelation = function (sysId) { // sysId of shadowRelation
  if(JSUtil.notNil(sysId)) {
      var gr = new GlideRecord("planned_task_rel_planned_task");
      if(gr.get(sysId)) {
          return gr.orig_sys_id.getRefRecord(); 
      }
  }
};

ShadowTaskQueryHelper.plannedTaskRecord = function (sysId) {
  if(JSUtil.notNil(sysId)) {
      var gr = new GlideRecord("planned_task");
      gr.get(sysId);
      PPMDebug.log("ShadowTaskQueryHelper.plannedTaskRecord -> " + gr.getValue("number"));
      return gr;
  }
};

ShadowTaskQueryHelper.projectTaskRecord = function (sysId) {
  if(JSUtil.notNil(sysId)) {
      var gr = new GlideRecord("pm_project_task");
      gr.get(sysId);
      PPMDebug.log("ShadowTaskQueryHelper.projectTaskRecord -> " + gr.getValue("number"));
      return gr;
  }
};

ShadowTaskQueryHelper.relationRecord = function (sysId) {
  if(JSUtil.notNil(sysId)) {
      var gr = new GlideRecord("planned_task_rel_planned_task");
      gr.get(sysId);
      PPMDebug.log("ShadowTaskQueryHelper.relationRecord -> " + gr.getValue("sys_id"));
      return gr;
  }
};

ShadowTaskQueryHelper.findUpstreamShadowRelation = function (relationSysId) {
  PPMDebug.log("ShadowTaskQueryHelper.findUpstreamShadowRelation -> " + relationSysId);
  if(JSUtil.notNil(relationSysId)) {
      var gr = new GlideRecord("planned_task_rel_planned_task");
      gr.get(relationSysId);
      var parentId = gr.getValue("parent");
      gr = new GlideRecord("planned_task_rel_planned_task");
      gr.addQuery("parent", parentId);
      gr.addQuery("orig_sys_id", relationSysId);
      gr.addQuery("external", "false").addOrCondition("external", "0");
      gr.query();
      if(gr.next()) {
          PPMDebug.log("ShadowTaskQueryHelper.findUpstreamShadowRelation upstreamShadowRelationId-> " + gr.getValue("sys_id"));
          return gr;
      }
  }
};

ShadowTaskQueryHelper.findDownstreamShadowRelation = function (relationSysId) {
  PPMDebug.log("ShadowTaskQueryHelper.findDownstreamShadowRelation -> " + relationSysId);
  if(JSUtil.notNil(relationSysId)) {
      var gr = new GlideRecord("planned_task_rel_planned_task");
      gr.get(relationSysId);
      var childId = gr.getValue("child");
      gr = new GlideRecord("planned_task_rel_planned_task");
      gr.addQuery("child", childId);
      gr.addQuery("orig_sys_id", relationSysId);
      gr.query();
      if(gr.next()) {
          PPMDebug.log("ShadowTaskQueryHelper.findUpstreamShadowRelation upstreamShadowRelationId-> " + gr.getValue("sys_id"));
          return gr;
      }
  }
};

ShadowTaskQueryHelper.findDownstreamTasksAndRelations = function(externalRelationSysIds, ignoreRelationSysIds) {
  PPMDebug.log("ShadowTaskQueryHelper.findDownstreamTasksAndRelations -> " + externalRelationSysIds.join(","));
  var downstreamTasks = [], downstreamRelations = [];
  var gr = new GlideRecord("planned_task_rel_planned_task");
  gr.addQuery("orig_sys_id", "IN", externalRelationSysIds);
  if(JSUtil.notNil(ignoreRelationSysIds) && ignoreRelationSysIds.length > 0)
      gr.addQuery("sys_id", "NOT IN", ignoreRelationSysIds);
  gr.query();
  PPMDebug.log("findDownstreamTasksAndRelations -> " + gr.getRowCount() + " | " + gr.getEncodedQuery());
  while(gr.next()) {
      downstreamRelations.push(gr.getValue("sys_id"));
      var childRecord = gr.child.getRefRecord();
      if(JSUtil.notNil(childRecord.getValue("orig_sys_id"))) {
          downstreamTasks.push(gr.getValue("child"));
      } else {
          downstreamTasks.push(gr.getValue("parent"));
      }
  }
  return {tasks: downstreamTasks, relations: downstreamRelations};
};

ShadowTaskQueryHelper.topTaskIds = function(taskSysIds) {
  PPMDebug.log("ShadowTaskQueryHelper.topTaskIds -> " + taskSysIds.join(","));
  var topTaskIds = [];
  if(JSUtil.notNil(taskSysIds) && taskSysIds.length > 0) {
      var ga = new GlideAggregate("planned_task");
      ga.addAggregate("COUNT", "top_task");
      ga.addQuery("sys_id", "IN", taskSysIds);
      ga.query();
      while(ga.next()) {
          topTaskIds.push(ga.getValue("top_task"));
      }
  }
  return topTaskIds;
};

ShadowTaskQueryHelper.findIncomingRelationsTo = function (sysId) { // sysId of shadowTask
  if(JSUtil.notNil(sysId)) {
      var gr = new GlideRecord("planned_task_rel_planned_task");
      gr.addQuery("child", sysId);
      gr.addNotNullQuery("orig_sys_id");
      gr.query();
      PPMDebug.log("Into ShadowTaskQueryHelper.findIncomingRelationsTo -> " + gr.getRowCount() + " | " + gr.getEncodedQuery());
      return gr;
  }
};

ShadowTaskQueryHelper.isShadowTaskSuccessor = function(sysId) { //sysId of ShadowTask
  var gr = ShadowTaskQueryHelper.findIncomingRelationsTo(sysId);
  if ( JSUtil.nil(gr) )
      return false;
  if ( gr.getRowCount() > 0 )
      return true;
  else
      return false;
};

ShadowTaskQueryHelper.isSuccessorTaskInARelation = function (sysId) { // sysId of shadowTask
  if(JSUtil.notNil(sysId)) {
      var gr = ShadowTaskQueryHelper.findIncomingRelationsTo(sysId);
      if(gr.getRowCount() > 0)
          return true;
  }
  return false;
};

ShadowTaskQueryHelper.findShadowSuccessorTasks = function (relationSysIds) { // sysId of shadowTask
  var taskIds = [];
  if(JSUtil.notNil(relationSysIds) && relationSysIds.length > 0) {
      var gr = new GlideRecord("planned_task_rel_planned_task");
      gr.addQuery("sys_id", "IN", relationSysIds.join(","));
      gr.addNotNullQuery("orig_sys_id");
      gr.query();
      PPMDebug.log("Into ShadowTaskQueryHelper.findShadowSuccessorTasks -> " + gr.getRowCount() + " | " + gr.getEncodedQuery());
      while(gr.next()) {
          var child = gr.child.getRefRecord();
          if(JSUtil.notNil(child.getValue("orig_sys_id"))) {
              taskIds.push(gr.getValue("child"));
          } else {
              taskIds.push(gr.getValue("parent"));
          }
      }
  }
  return false;
};

ShadowTaskQueryHelper.findAllIncomingRelationsTo = function (sysId, excludeRelationIds) { // sysId of shadowTask
  if(JSUtil.notNil(sysId)) {
      var gr = new GlideRecord("planned_task_rel_planned_task");
      gr.addQuery("child", sysId);
      gr.addQuery("external", 0).addOrCondition("external", "false");
      if(JSUtil.notNil(excludeRelationIds))
          gr.addQuery("sys_id", "NOT IN", excludeRelationIds);
      gr.query();
      PPMDebug.log("Into ShadowTaskQueryHelper.findAllIncomingRelationsTo -> " + gr.getRowCount() + " | " + gr.getEncodedQuery());
      return gr;
  }
};

Sys ID

8e00fead9f622200598a5bb0657fcff2

Offical Documentation

Official Docs: