Name

sn_ppt_export.PPTGenTableUtil

Description

No description available

Script

var PPTGenTableUtil = Class.create();
PPTGenTableUtil.prototype = {
  initialize: function(directChildTable, slideDataTracker) {
      this.directChildTable = directChildTable;
      this.slideDataTracker = slideDataTracker;
  },

  runFinalStageForTable: function(shapeObject, slide, i, data, stepSlideObject) {
      var orderByColumnName = '';
      var orderByDesc = false;
      var directChildOrderByColumnName = '';
      var directChildOrderByDesc = false;
      var tableObject = JSON.parse(shapeObject["map"]["tableObject"]);
      tableObject["slideNumber"] = slide["slideNumber"];
      var finalTableObject = JSON.parse(JSON.stringify(tableObject));
      var cells = tableObject["cells"];
      var tableGlideRecordSysId = '';
      var thirdLevelGlideRecordSysId = '';
      for (cellCount in cells) {
          var cell = cells[cellCount];
          if (cell.hasOwnProperty("tokens")) {
              var tokens = cell["tokens"];
              flag = false;
              maxRowToAdd = 0;
              for (tokenNumber in tokens) {
                  var token = tokens[tokenNumber];
                  var hrefMap = GeneratePPTProcessorHelper.pptGeneratorUtil.getMapFromHyperlink(token["href"]);
                  if (hrefMap["distinctionFlag"] === "related" && hrefMap["relatedTo"] === "base" && !hrefMap.hasOwnProperty("repeaterTable")) {
                      if (hrefMap.hasOwnProperty("orderByColumnName") && hrefMap["orderByColumnName"] != '' && cell["column"] === 0) {
                          orderByColumnName = hrefMap["orderByColumnName"];
                      }
                      if (hrefMap.hasOwnProperty("orderByDesc") && hrefMap["orderByDesc"] != 'false' && cell["column"] === 0) {
                          orderByDesc = true;
                      }
                      if (!gs.nil(tableGlideRecordSysId)) {
                          //check before performing explicit glide query - in case of remote table
                          var tableGlideRecord = new GlideRecord(hrefMap["childTable"]);
                          if (!GeneratePPTProcessorHelper.pptGeneratorUtil.isRemoteTable(hrefMap["childTable"]))
                              tableGlideRecord.addQuery('sys_id', tableGlideRecordSysId);
                          else {
  							var remoteTableQueryObj = GeneratePPTProcessorHelper.pptGeneratorUtil.getRemoteTableCachedQuery(tableGlideRecordSysId);
                              tableGlideRecord = GeneratePPTProcessorHelper.pptGeneratorUtil.getRelatedListGlideRecord(remoteTableQueryObj["parentTable"],remoteTableQueryObj["childTable"],remoteTableQueryObj["parentRecordSysID"],remoteTableQueryObj["encodedFilter"],remoteTableQueryObj["orderByObj"]);
  						}
                          tableGlideRecord.query();
                      } else {
                          var tableGlideRecord = GeneratePPTProcessorHelper.pptGeneratorUtil.getRelatedListGlideRecord(GeneratePPTProcessorHelper.BASE_TABLE, hrefMap["childTable"], GeneratePPTProcessorHelper.BASE_RECORD_SYS_ID, hrefMap["filterQuery"], {
                              'orderByColumnName': orderByColumnName,
                              'orderByDesc': orderByDesc
                          });
                      }
                      limit = tableGlideRecord.getRowCount();
                      maxRowToAdd = hrefMap["maximumRows"] > limit ? limit : hrefMap["maximumRows"];
                      maxRowToAdd--; //one row is already present
                      if (maxRowToAdd < 0)
                          maxRowToAdd = 0;
                      if (maxRowToAdd !== 0)
                          flag = true;
                      for (key in finalTableObject["cells"][cellCount]["tokens"][tokenNumber]["map"]) {
                          if (tableGlideRecord.hasNext()) {
                              tableGlideRecord.next();
                              tableGlideRecordSysId = tableGlideRecord.getValue('sys_id');
                              finalTableObject["cells"][cellCount]["tokens"][tokenNumber]["map"][key] = GeneratePPTProcessorHelper.pptGeneratorUtil.getFieldValue(tableGlideRecord, key.split(".")[1]);
                              if (GeneratePPTProcessorHelper.pptGeneratorUtil.formatters[tableGlideRecord.getTableName()] && GeneratePPTProcessorHelper.pptGeneratorUtil.formatters[tableGlideRecord.getTableName()][key.split(".")[1]]) {
                                  var cellFormatter = GeneratePPTProcessorHelper.pptGeneratorUtil.getMatchedCellFormatter(tableGlideRecord.getTableName(), key.split(".")[1], tableGlideRecord.getValue("sys_id"));
                                  if (cellFormatter && Object.keys(cellFormatter).length > 0) {
                                      var styleObject = JSON.parse(cellFormatter["style"]);
                                      finalTableObject["cells"][cellCount]["tokens"][tokenNumber]["color"] = styleObject["color"] ? styleObject["color"] : '';
                                      finalTableObject["cells"][cellCount]["tokens"][tokenNumber]["shape"] = styleObject["shape"] ? styleObject["shape"] : '';
                                      finalTableObject["cells"][cellCount]["tokens"][tokenNumber]["backgroundColor"] = styleObject["backgroundColor"] ? styleObject["backgroundColor"] : '';
                                  }
                              }
                          } else
                              finalTableObject["cells"][cellCount]["tokens"][tokenNumber]["map"][key] = '';
                      }
                  } else if (hrefMap["distinctionFlag"] === "related" && hrefMap["relatedTo"] === "base" && hrefMap.hasOwnProperty("repeaterTable") && hrefMap["repeaterTable"] === "true") {
                      for (key in finalTableObject["cells"][cellCount]["tokens"][tokenNumber]["map"])
                          var repeaterTableOrderByObj = {
                              'orderByColumnName': this.directChildTable[slide["slideNumber"]]['repeaterTableOrderBy'],
                              'orderByDesc': this.directChildTable[slide["slideNumber"]]['repeaterTableOrderByDesc']
                          };
                      finalTableObject["cells"][cellCount]["tokens"][tokenNumber]["map"][key] = GeneratePPTProcessorHelper.pptGeneratorUtil.getRelatedListData(GeneratePPTProcessorHelper.BASE_TABLE, key.split(".")[0], GeneratePPTProcessorHelper.BASE_RECORD_SYS_ID, key.split(".")[1], this.slideDataTracker[slide["slideNumber"]], '', repeaterTableOrderByObj);
                      var relatedTableRecord = GeneratePPTProcessorHelper.pptGeneratorUtil.getRelatedRecordForRelatedList(GeneratePPTProcessorHelper.BASE_TABLE, key.split(".")[0], GeneratePPTProcessorHelper.BASE_RECORD_SYS_ID, key.split(".")[1], this.slideDataTracker[slide["slideNumber"]], '', repeaterTableOrderByObj);
                      if (relatedTableRecord.next()) {
                          if (GeneratePPTProcessorHelper.pptGeneratorUtil.formatters[relatedTableRecord.getTableName()] && GeneratePPTProcessorHelper.pptGeneratorUtil.formatters[relatedTableRecord.getTableName()][key.split(".")[1]]) {
                              var cellFormatter = GeneratePPTProcessorHelper.pptGeneratorUtil.getMatchedCellFormatter(relatedTableRecord.getTableName(), key.split(".")[1], relatedTableRecord.getValue("sys_id"));
                              if (cellFormatter && Object.keys(cellFormatter).length > 0) {
                                  var styleObject = JSON.parse(cellFormatter["style"]);
                                  finalTableObject["cells"][cellCount]["tokens"][tokenNumber]["color"] = styleObject["color"] ? styleObject["color"] : '';
                                  finalTableObject["cells"][cellCount]["tokens"][tokenNumber]["shape"] = styleObject["shape"] ? styleObject["shape"] : '';
                                  finalTableObject["cells"][cellCount]["tokens"][tokenNumber]["backgroundColor"] = styleObject["backgroundColor"] ? styleObject["backgroundColor"] : '';
                              }
                          }
                      }
                  } else if (hrefMap["distinctionFlag"] === "related" && hrefMap["relatedTo"] === "direct_child") {
                      if (hrefMap.hasOwnProperty("orderByColumnName") && hrefMap["orderByColumnName"] != '' && cell["column"] === 0) {
                          directChildOrderByColumnName = hrefMap["orderByColumnName"];
                      }
                      if (hrefMap.hasOwnProperty("orderByDesc") && hrefMap["orderByDesc"] != '' && cell["column"] === 0) {
                          directChildOrderByDesc = true;
                      }
                      if (!gs.nil(thirdLevelGlideRecordSysId)) {
                          //check before performing explicit glide query - in case of remote table
                          var thirdLevelGlideRecord = new GlideRecord(hrefMap["childTable"]);    
  						if (!GeneratePPTProcessorHelper.pptGeneratorUtil.isRemoteTable(hrefMap["childTable"]))
                              thirdLevelGlideRecord.addQuery('sys_id', thirdLevelGlideRecordSysId);
                          else {
  							var remoteTableQueryObj = GeneratePPTProcessorHelper.pptGeneratorUtil.getRemoteTableCachedQuery(thirdLevelGlideRecordSysId);
                              thirdLevelGlideRecord = GeneratePPTProcessorHelper.pptGeneratorUtil.getRelatedListGlideRecord(remoteTableQueryObj["parentTable"],remoteTableQueryObj["childTable"],remoteTableQueryObj["parentRecordSysID"],remoteTableQueryObj["encodedFilter"],remoteTableQueryObj["orderByObj"]);
  						}
  						thirdLevelGlideRecord.query();
                      } else {
                          var thirdLevelGlideRecord = GeneratePPTProcessorHelper.pptGeneratorUtil.getRelatedListGlideRecord(this.directChildTable[slide["slideNumber"]]['tableName'], hrefMap["childTable"], this.directChildTable[slide["slideNumber"]]['sysID'], hrefMap["filterQuery"], {
                              'orderByColumnName': directChildOrderByColumnName,
                              'orderByDesc': directChildOrderByDesc
                          });
                      }
                      limit = thirdLevelGlideRecord.getRowCount();
                      maxRowToAdd = hrefMap["maximumRows"] > limit ? limit : hrefMap["maximumRows"];
                      maxRowToAdd--; //one row is already present
                      if (maxRowToAdd < 0)
                          maxRowToAdd = 0;
                      if (maxRowToAdd !== 0)
                          flag = true;
                      for (key in finalTableObject["cells"][cellCount]["tokens"][tokenNumber]["map"]) {
                          if (thirdLevelGlideRecord.hasNext()) {
                              thirdLevelGlideRecord.next();
                              thirdLevelGlideRecordSysId = thirdLevelGlideRecord.getValue('sys_id');
                              finalTableObject["cells"][cellCount]["tokens"][tokenNumber]["map"][key] = GeneratePPTProcessorHelper.pptGeneratorUtil.getFieldValue(thirdLevelGlideRecord, key.split(".")[1]);
                              if (GeneratePPTProcessorHelper.pptGeneratorUtil.formatters[thirdLevelGlideRecord.getTableName()] && GeneratePPTProcessorHelper.pptGeneratorUtil.formatters[thirdLevelGlideRecord.getTableName()][key.split(".")[1]]) {
                                  var cellFormatter = GeneratePPTProcessorHelper.pptGeneratorUtil.getMatchedCellFormatter(thirdLevelGlideRecord.getTableName(), key.split(".")[1], thirdLevelGlideRecord.getValue("sys_id"));
                                  if (cellFormatter && Object.keys(cellFormatter).length > 0) {
                                      var styleObject = JSON.parse(cellFormatter["style"]);
                                      finalTableObject["cells"][cellCount]["tokens"][tokenNumber]["color"] = styleObject["color"] ? styleObject["color"] : '';
                                      finalTableObject["cells"][cellCount]["tokens"][tokenNumber]["shape"] = styleObject["shape"] ? styleObject["shape"] : '';
                                      finalTableObject["cells"][cellCount]["tokens"][tokenNumber]["backgroundColor"] = styleObject["backgroundColor"] ? styleObject["backgroundColor"] : '';
                                  }
                              }
                          } else
                              finalTableObject["cells"][cellCount]["tokens"][tokenNumber]["map"][key] = '';
                      }
                  } else if (hrefMap["distinctionFlag"] === "base") {
                      for (key in finalTableObject["cells"][cellCount]["tokens"][tokenNumber]["map"]) {
                          var field = (key.split(".").length > 2) ? key.substring(key.indexOf(".") + 1, key.length) : key.split(".")[1];
                          finalTableObject["cells"][cellCount]["tokens"][tokenNumber]["map"][key] = GeneratePPTProcessorHelper.pptGeneratorUtil.getBaseRecordData(GeneratePPTProcessorHelper.BASE_TABLE, GeneratePPTProcessorHelper.BASE_RECORD_SYS_ID, field, 1);
                          if (GeneratePPTProcessorHelper.pptGeneratorUtil.formatters[GeneratePPTProcessorHelper.BASE_TABLE] && GeneratePPTProcessorHelper.pptGeneratorUtil.formatters[GeneratePPTProcessorHelper.BASE_TABLE][field]) {
                              var cellFormatter = GeneratePPTProcessorHelper.pptGeneratorUtil.getMatchedCellFormatter(GeneratePPTProcessorHelper.BASE_TABLE, field, GeneratePPTProcessorHelper.BASE_RECORD_SYS_ID);
                              if (cellFormatter && Object.keys(cellFormatter).length > 0) {
                                  var styleObject = JSON.parse(cellFormatter["style"]);
                                  finalTableObject["cells"][cellCount]["tokens"][tokenNumber]["color"] = styleObject["color"] ? styleObject["color"] : '';
                                  finalTableObject["cells"][cellCount]["tokens"][tokenNumber]["shape"] = styleObject["shape"] ? styleObject["shape"] : '';
                                  finalTableObject["cells"][cellCount]["tokens"][tokenNumber]["backgroundColor"] = styleObject["backgroundColor"] ? styleObject["backgroundColor"] : '';
                              }
                          }
                      }
                  }
              }
              if (cell["column"] === 0 && flag) {
                  this.fillTable(finalTableObject, maxRowToAdd, hrefMap, tableGlideRecord, thirdLevelGlideRecord, cells, cell);
                  stepActionObject = {
                      'actionName': 'table',
                      'methodCalls': []
                  };
                  stepMethodCallObject = {
                      'methodName': 'addTable',
                      'parameterJSON': JSON.stringify(finalTableObject)
                  };
                  stepActionObject['methodCalls'].push(stepMethodCallObject);
                  stepSlideObject["actions"].push(stepActionObject);
              }
          }
      }
      data["pptJson"]["slideObjectArray"][i]["shapeObjectArray"][j]["map"]["tableObject"] = JSON.stringify(finalTableObject);
  },

  fillTable: function(finalTableObject, maxRowToAdd, hrefMap, tableGlideRecord, thirdLevelGlideRecord, cells, cell) {
      finalTableObject["totalRowCount"] = finalTableObject["totalRowCount"] + maxRowToAdd;
      finalTableObject["rowsToAddCount"] = maxRowToAdd;
      finalTableObject["columnsToAddCount"] = finalTableObject["totalColumnCount"];
      var rowOrder = 1;
      for (var u = cell["row"] + 1; u < finalTableObject["totalRowCount"]; u++) {
          rowOrder++;
          if (hrefMap["distinctionFlag"] === "related" && hrefMap["relatedTo"] === "base")
              tableGlideRecord.next();
          else if (hrefMap["distinctionFlag"] === "related" && hrefMap["relatedTo"] === "direct_child")
              thirdLevelGlideRecord.next();
          for (var v = 0; v < finalTableObject["totalColumnCount"]; v++) {
              var cellObject = JSON.parse(JSON.stringify(cells[(finalTableObject["columnsToAddCount"] * cell["row"]) + (v)]));
              cellObject["row"] = u;
              cellObject["column"] = v;
              cellObject["copyFromCell"] = cell["row"] + "#" + v;
              cellObject["editCell"] = false;
              if (cellObject.hasOwnProperty("tokens")) {
                  for (tokenNumber in cellObject["tokens"]) {
                      hrefMap = GeneratePPTProcessorHelper.pptGeneratorUtil.getMapFromHyperlink(cellObject["tokens"][tokenNumber]["href"]);
                      if (hrefMap["distinctionFlag"] === "related" && hrefMap["relatedTo"] === "base") {
                          for (key in cellObject["tokens"][tokenNumber]["map"]) {
                              cellObject["tokens"][tokenNumber]["map"][key] = GeneratePPTProcessorHelper.pptGeneratorUtil.getFieldValue(tableGlideRecord, key.split(".")[1]);
                              if (GeneratePPTProcessorHelper.pptGeneratorUtil.formatters[tableGlideRecord.getTableName()] && GeneratePPTProcessorHelper.pptGeneratorUtil.formatters[tableGlideRecord.getTableName()][key.split(".")[1]]) {
                                  var cellFormatter = GeneratePPTProcessorHelper.pptGeneratorUtil.getMatchedCellFormatter(tableGlideRecord.getTableName(), key.split(".")[1], tableGlideRecord.getValue("sys_id"));
                                  if (cellFormatter && Object.keys(cellFormatter).length > 0) {
                                      var styleObject = JSON.parse(cellFormatter["style"]);
                                      cellObject["tokens"][tokenNumber]["color"] = styleObject["color"] ? styleObject["color"] : '';
                                      cellObject["tokens"][tokenNumber]["shape"] = styleObject["shape"] ? styleObject["shape"] : '';
                                      cellObject["tokens"][tokenNumber]["backgroundColor"] = styleObject["backgroundColor"] ? styleObject["backgroundColor"] : '';
                                  }
                              }
                          }

                      } else if (hrefMap["distinctionFlag"] === "related" && hrefMap["relatedTo"] === "direct_child") {
                          for (key in cellObject["tokens"][tokenNumber]["map"]) {
                              cellObject["tokens"][tokenNumber]["map"][key] = GeneratePPTProcessorHelper.pptGeneratorUtil.getFieldValue(thirdLevelGlideRecord, key.split(".")[1]);
                              if (GeneratePPTProcessorHelper.pptGeneratorUtil.formatters[thirdLevelGlideRecord.getTableName()] && GeneratePPTProcessorHelper.pptGeneratorUtil.formatters[thirdLevelGlideRecord.getTableName()][key.split(".")[1]]) {
                                  var cellFormatter = GeneratePPTProcessorHelper.pptGeneratorUtil.getMatchedCellFormatter(thirdLevelGlideRecord.getTableName(), key.split(".")[1], thirdLevelGlideRecord.getValue("sys_id"));
                                  if (cellFormatter && Object.keys(cellFormatter).length > 0) {
                                      var styleObject = JSON.parse(cellFormatter["style"]);
                                      cellObject["tokens"][tokenNumber]["color"] = styleObject["color"] ? styleObject["color"] : '';
                                      cellObject["tokens"][tokenNumber]["shape"] = styleObject["shape"] ? styleObject["shape"] : '';
                                      cellObject["tokens"][tokenNumber]["backgroundColor"] = styleObject["backgroundColor"] ? styleObject["backgroundColor"] : '';
                                  }
                              }
                          }

                      } else if (hrefMap["distinctionFlag"] === "base") {
                          for (key in cellObject["tokens"][tokenNumber]["map"]) {
                              var field = (key.split(".").length > 2) ? key.substring(key.indexOf(".") + 1, key.length) : key.split(".")[1];
                              cellObject["tokens"][tokenNumber]["map"][key] = GeneratePPTProcessorHelper.pptGeneratorUtil.getBaseRecordData(GeneratePPTProcessorHelper.BASE_TABLE, GeneratePPTProcessorHelper.BASE_RECORD_SYS_ID, field, 1);
                              if (GeneratePPTProcessorHelper.pptGeneratorUtil.formatters[GeneratePPTProcessorHelper.BASE_TABLE] && GeneratePPTProcessorHelper.pptGeneratorUtil.formatters[GeneratePPTProcessorHelper.BASE_TABLE][field]) {
                                  var cellFormatter = GeneratePPTProcessorHelper.pptGeneratorUtil.getMatchedCellFormatter(GeneratePPTProcessorHelper.BASE_TABLE, field, GeneratePPTProcessorHelper.BASE_RECORD_SYS_ID);
                                  if (cellFormatter && Object.keys(cellFormatter).length > 0) {
                                      var styleObject = JSON.parse(cellFormatter["style"]);
                                      cellObject["tokens"][tokenNumber]["color"] = styleObject["color"] ? styleObject["color"] : '';
                                      cellObject["tokens"][tokenNumber]["shape"] = styleObject["shape"] ? styleObject["shape"] : '';
                                      cellObject["tokens"][tokenNumber]["backgroundColor"] = styleObject["backgroundColor"] ? styleObject["backgroundColor"] : '';
                                  }
                              }
                          }
                      }
                  }
              }
              finalTableObject["cells"].push(cellObject);
          }
      }
  },

  type: 'PPTGenTableUtil'
};

Sys ID

e598e0cc77821110ffca78847a5a9950

Offical Documentation

Official Docs: