123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543 |
- var SORT_ERROR_NO_SELECTIONS = 1;
- var SORT_ERROR_TOO_MANY_SELECTIONS = 2;
- var SORT_ERROR_NO_SUM_ON_MEASURE = 3;
- var SORT_ERROR_INVALID_SELECTION = 4;
- var SORT_ERROR_SELECTION_NOT_ALLOWED = 5;
- function CSort()
- {
- this.m_sOpType = "";
- this.m_sSortOrder = "";
- this.m_bDoSummFilter = false;
- this.m_sSummExpression = "";
- this.m_aColsToSort = new Array();
- this.m_sColId = "";
- this.m_sGroupName = new Array();
- this.m_bIsCrosstab = false;
-
-
- this.m_bColIsString = false;
- this.m_bColIsMeasure = false;
- this.m_bColIsSummarized = false;
- this.m_sColLabel = "";
- };
- CSort.prototype = new AFeatureObject();
- CSort.prototype.processErrorState = function ()
- {
- if (this.m_iErrorState === FEATURE_OBJECT_NO_ERROR)
- {
- return false;
- }
- else if (this.m_iErrorState === SORT_ERROR_NO_SELECTIONS)
- {
- dlgShowMessage("SORT_TITLE", "", "SORT_NO_SELECTION");
- return true;
- }
- else if (this.m_iErrorState === SORT_ERROR_TOO_MANY_SELECTIONS)
- {
- dlgShowMessage("SORT_TITLE", "", "SORT_TOO_MANY_SELECTIONS");
- return true;
- }
- else if (this.m_iErrorState === SORT_ERROR_NO_SUM_ON_MEASURE)
- {
- dlgShowMessage("SORT_TITLE", "", "SORT_MEASURE_HAS_NO_SUM");
- return true;
- }
- else if (this.m_iErrorState === SORT_ERROR_INVALID_SELECTION)
- {
- dlgShowMessage("SORT_TITLE", "", "SORT_INVALID_SELECTION");
- return true;
- }
- else if (this.m_iErrorState === SORT_ERROR_SELECTION_NOT_ALLOWED)
- {
- return true;
- }
- };
- CSort.prototype.proceedWithoutDialog = function ()
- {
- return this.execute(new Array(this.m_sSortOrder, this.m_bDoSummFilter, this.m_sSummExpression));
- };
- CSort.prototype.getNextSortOrder = function (sSortOrder)
- {
- if (typeof sSortOrder != "string")
- {
- sSortOrder = "A";
- }
- else if (sSortOrder.toUpperCase() == "A")
- {
- sSortOrder = "D";
- }
- else if (sSortOrder.toUpperCase() == "D")
- {
- sSortOrder = "N";
- }
- else
- {
- sSortOrder = "A";
- }
- return sSortOrder;
- };
- CSort.prototype.setup = function (aFeatureParams)
- {
- this.m_aParams = new Array();
- this.m_bRequiresDialog = true;
- this.m_iErrorState = FEATURE_OBJECT_NO_ERROR;
- this.m_sGroupName = new Array();
- this.m_bIsCrosstab = false;
- var oSelController = goApplicationManager.getSelectionController();
- var aSelColIds = oSelController.getSelectedColumnIds();
- var oMQMgr = goApplicationManager.getMiniQueryManager();
-
-
- if (aFeatureParams instanceof Array && aFeatureParams.length > 0 && aFeatureParams[0].indexOf("SETUP_FROM_TREE") >= 0)
- {
- this.setupFromMetadataTree(aFeatureParams);
- }
- else if (aFeatureParams instanceof Array && aFeatureParams.length > 0 && aFeatureParams[0].indexOf("CONTEXTDELETE") >= 0)
- {
- this.m_bRequiresDialog = false;
- this.m_sSortOrder = "N";
- this.m_bDoSummFilter = false;
- this.m_sSummExpression = "";
- if (aFeatureParams[0].indexOf("CONTEXTDELETEALL") >= 0)
- {
- this.m_aColsToSort = new Array();
- var aMQCols = oMQMgr.getElementsByAttribute("sort");
- for (var idxMQCols = 0; idxMQCols < aMQCols.length; idxMQCols++)
- {
- this.m_aColsToSort[this.m_aColsToSort.length] = aMQCols[idxMQCols].getAttribute("id");
- }
- }
- else
- {
- this.m_aColsToSort = new Array();
- this.m_aColsToSort[0] = cfgGet("contextMenuId");
- }
- cfgRemove("contextMenuType");
- cfgRemove("contextMenuId");
- return;
- }
- else if ((aFeatureParams instanceof Array && aFeatureParams.length > 0 && aFeatureParams[0] == "CONTEXTEDIT") || (typeof aFeatureParams == "object" && aFeatureParams[0] == "INCOMMINGVALUE"))
- {
- if (aFeatureParams[0] == "INCOMMINGVALUE")
- {
- this.m_sColId = aFeatureParams[1];
- }
- else
- {
- this.m_sColId = cfgGet("contextMenuId");
- }
- cfgRemove("contextMenuType");
- cfgRemove("contextMenuId");
- }
- else
- {
- var iNumSelCols = aSelColIds.length;
- if (iNumSelCols === 1)
- {
- this.m_sColId = aSelColIds[0];
- }
- else if (iNumSelCols < 1)
- {
- this.m_iErrorState = SORT_ERROR_NO_SELECTIONS;
- return;
- }
- else if (iNumSelCols > 1)
- {
- this.m_iErrorState = SORT_ERROR_TOO_MANY_SELECTIONS;
- return;
- }
-
- if (oMQMgr.hasPivottedColumns() && !oMQMgr.isSummarised(this.m_sColId) && oMQMgr.isMeasure(this.m_sColId))
- {
- this.m_iErrorState = SORT_ERROR_NO_SUM_ON_MEASURE;
- return;
- }
- else if (oMQMgr.isReportExpression(this.m_sColId))
- {
- this.m_iErrorState = SORT_ERROR_INVALID_SELECTION;
- return;
- }
- else if (!checkForValidSelection(false))
- {
- this.m_iErrorState = SORT_ERROR_SELECTION_NOT_ALLOWED;
- return;
- }
- }
- this.m_aColsToSort = new Array();
- this.m_aColsToSort[0] = this.m_sColId;
- if (aFeatureParams instanceof Array && aFeatureParams.length > 0 && aFeatureParams[0] == "skipDialog")
- {
- var sSortOrder = this.getNextSortOrder(oMQMgr.getColumnById(this.m_sColId).getAttribute("sort"));
- if (sSortOrder == "N")
- {
- this.m_bRequiresDialog = false;
- this.m_sSortOrder = sSortOrder;
- this.m_bDoSummFilter = false;
- this.m_sSummExpression = "";
- }
- else if (sSortOrder == "D")
- {
- this.m_bRequiresDialog = false;
- this.m_sSortOrder = sSortOrder;
- var oColumn = oMQMgr.getColFromExpression(oMQMgr.getColumnById(this.m_sColId).getAttribute("sortBy"));
- if (oColumn === MINI_QUERY_NO_COLUMN_FOUND)
- {
- this.m_bDoSummFilter = false;
- this.m_sSummExpression = "";
- }
- else
- {
- this.m_bDoSummFilter = true;
- this.m_sSummExpression = oMQMgr.getColumnById(this.m_sColId).getAttribute("sortBy");
- }
- }
- else
- {
- var bSumSortPossible = false;
- if (oMQMgr.isSummarised(this.m_sColId))
- {
- var aCols = oMQMgr.getAllColumns();
- for (var idxCols = 0; idxCols < aCols.length; idxCols++)
- {
- var sColRole = oMQMgr.getColumnRole(aCols[idxCols]);
- if ((sColRole == MINI_QUERY_GROUP_LIST || sColRole == MINI_QUERY_GROUP_SECTION) && (aCols[idxCols].getAttribute("id") != this.m_sColId))
- {
- bSumSortPossible = true;
- break;
- }
- }
- }
- if (oMQMgr.hasPivottedColumns())
- {
- if (oMQMgr.isMeasure(this.m_sColId))
- {
- this.setupDialogParams();
- }
- else
- {
- this.m_bRequiresDialog = false;
- this.m_sSortOrder = sSortOrder;
- this.m_bDoSummFilter = false;
- this.m_sSummExpression = "";
- }
- }
- else
- {
- if (bSumSortPossible)
- {
- this.setupDialogParams();
- }
- else
- {
- this.m_bRequiresDialog = false;
- this.m_sSortOrder = sSortOrder;
- this.m_bDoSummFilter = false;
- this.m_sSummExpression = "";
- }
- }
- }
- }
- else
- {
- cfgSet("LAST_DIALOG", "sort");
- this.setupDialogParams();
- }
- };
- CSort.prototype.setupDialogParams = function ()
- {
- var oMQMgr = goApplicationManager.getMiniQueryManager();
- var oColumn = oMQMgr.getColumnById(this.m_sColId);
-
-
- if (oColumn !== MINI_QUERY_NO_COLUMN_FOUND)
- {
- this.m_bColIsString = oMQMgr.isString(this.m_sColId);
- this.m_bColIsMeasure = oMQMgr.isMeasure(this.m_sColId);
- this.m_bColIsSummarized = oMQMgr.isSummarised(this.m_sColId);
- this.m_sColLabel = oMQMgr.getColumnLabel(this.m_sColId)
- }
- if (this.m_bColIsString)
- {
- this.m_sOpType = "alpha";
- }
- else
- {
- this.m_sOpType = "numeric";
- }
- var aCols = new Array();
- var idxCols;
- if (oMQMgr.hasPivottedColumns())
- {
- if (this.m_bColIsMeasure && this.m_bColIsSummarized)
- {
- this.setGroupNames();
- }
- this.m_bIsCrosstab = true;
- }
- else
- {
- if (this.m_bColIsSummarized)
- {
- this.setGroupNames();
- }
- this.m_bIsCrosstab = false;
- }
-
-
-
- var sCurrentSortOrder = "";
- if (oColumn !== MINI_QUERY_NO_COLUMN_FOUND)
- {
- var sSortBy = oColumn.getAttribute("sortBy");
- var sSortByAll = oColumn.getAttribute("sortByAll");
- if (sSortByAll === "true")
- {
-
- this.m_aParams["currentSortByIndex"] = -1;
- }
- else if (sSortBy !== null && sSortBy.length)
- {
-
- var oSortByColumn = oMQMgr.getColFromExpression(sSortBy);
- var iSortByIndex = oMQMgr.getColumnIndexByAttribute("id", oSortByColumn.getAttribute("id"));
- if (iSortByIndex !== MINI_QUERY_INVALID_INDEX)
- {
- this.m_aParams["currentSortByIndex"] = iSortByIndex;
- }
- }
-
-
- var sSortAttribute = oColumn.getAttribute("sort");
- if (sSortAttribute !== null && typeof sSortAttribute !== "undefined")
- {
- sCurrentSortOrder = sSortAttribute;
- }
- }
- this.m_aParams["currentSortOrder"] = sCurrentSortOrder;
- this.m_aParams["xxColName"] = encodeURIComponent(this.m_sColLabel);
- this.m_aParams["m"] = "/" + qs_dir + "/sort.xts";
- };
- CSort.prototype.execute = function (aParameters)
- {
- try
- {
- var oMQMgr = goApplicationManager.getMiniQueryManager();
- var sSortOrder = aParameters[0];
- var bDoSummFilter = aParameters[1];
- var iSummIndex = aParameters[2];
- var sCommand = "";
- var aCommandArray = new Array();
-
- if (this.m_aColsToSort.length > 1)
- {
- for (var idxCols = 0; idxCols < this.m_aColsToSort.length; idxCols++)
- {
- aCommandArray[0] = escapeParam(this.m_aColsToSort[idxCols]);
- if (sCommand !== "")
- {
- sCommand += ";";
- }
- sCommand += createCommand("S", sSortOrder, aCommandArray);
- }
- }
- else if (this.m_aColsToSort.length == 1)
- {
- aCommandArray[0] = escapeParam(this.m_aColsToSort[0]);
- if (bDoSummFilter && sSortOrder != 'N')
- {
-
- var iIndex = parseInt(iSummIndex, 10);
-
- if (iIndex === -1)
- {
- aCommandArray[1] = "sortByAll=true";
- }
- else
- {
- var oColumn = oMQMgr.getColumnFromIndex(iIndex);
- if (oColumn !== MINI_QUERY_NO_COLUMN_FOUND)
- {
- aCommandArray[1] = "sortBy=" + escapeParam(oMQMgr.getExpression(oColumn));
- }
- }
- }
- sCommand = createCommand("S", sSortOrder, aCommandArray);
-
-
-
-
-
- if (sSortOrder != 'N')
- {
- sCommand = wrapCmdWithCreateColumnBasedonMetadataItem(sCommand, this.m_aColsToSort[0]);
- }
- }
- addColumnsForReselection();
- if (sCommand.length > 0)
- {
- sendCmd(sCommand, "", true);
- }
- goApplicationManager.getWindowManager().hideDialogFrame();
- }
- catch (e)
- {
- }
- };
- CSort.prototype.setGroupNames = function()
- {
- var oMQMgr = goApplicationManager.getMiniQueryManager();
- if (typeof oMQMgr === "undefined")
- {
- return null;
- }
-
- this.m_sGroupName = new Array();
- this.m_aParams["includeAllOption"] = false;
-
- var aCols = oMQMgr.getAllColumns();
- if (oMQMgr.hasPivottedColumns())
- {
- for (idxCols = 0; idxCols < aCols.length; idxCols++)
- {
- if (!oMQMgr.isMeasure(aCols[idxCols]))
- {
- this.m_sGroupName[this.m_sGroupName.length] = new Array(oMQMgr.getColumnLabel(aCols[idxCols]), idxCols);
- }
- }
- }
- else
- {
- for (idxCols = 0; idxCols < aCols.length; idxCols++)
- {
- if ((oMQMgr.getColumnRole(aCols[idxCols]) == "list"
- || oMQMgr.getColumnRole(aCols[idxCols]) == "header")
- && (aCols[idxCols].getAttribute("id") != this.m_sColId))
- {
- this.m_sGroupName[this.m_sGroupName.length] = new Array(oMQMgr.getColumnLabel(aCols[idxCols]), idxCols);
- }
- }
-
-
-
-
-
- if (this.m_sGroupName && this.m_sGroupName.length > 0)
- {
- this.m_aParams["includeAllOption"] = true;
- }
- }
- return null;
- };
- CSort.prototype.setupFromMetadataTree = function (aFeatureParams)
- {
- this.m_aParams = new Array();
- this.m_bRequiresDialog = true;
- this.m_iErrorState = FEATURE_OBJECT_NO_ERROR;
- cfgSet("LAST_DIALOG", "sort");
-
- if (typeof metadataTree === "undefined"
- || typeof cf === "undefined")
- {
- return;
- }
-
-
- if (window && window.getSelection && window.getSelection().removeAllRanges)
- {
- window.getSelection().removeAllRanges();
- }
- var aNodes = metadataTree.getSelectionOrder();
- if (aNodes && aNodes.length > 0)
- {
- var oSelectedLeaf = aNodes[0];
- var oNode = allMetadataObjects[oSelectedLeaf.getValue()];
- if (oSelectedLeaf.hierarchyPath && oSelectedLeaf.hierarchyName)
- {
-
- oNode = new mdQueryItem(oSelectedLeaf.hierarchyName, gsMETADATA_EMPTY, oSelectedLeaf.hierarchyPath, 60, 7, 0, 0, 0, 0, gsMETADATA_EMPTY, gsMETADATA_EMPTY, gsMETADATA_EMPTY, gsMETADATA_EMPTY, gsMETADATA_EMPTY, gsMETADATA_EMPTY, gsMETADATA_EMPTY);
- oNode.isHierarchy = true;
- }
- var sNodeType = getNodeObjectType(oNode);
- if (oNode && !(sNodeType == 'FILTER' || sNodeType == 'CALCULATION' || sNodeType == 'FOLDER') )
- {
-
-
- this.m_aParams["m"] = "/" + cf.qs_dir + "/sort.xts";
-
- var oFilterFromTree = new CFilterFromTree();
- var oData = oFilterFromTree.getMetadataDATA(oNode, oSelectedLeaf);
-
-
-
- if (oData && typeof oData["MQColumn"] === "object")
- {
-
- this.m_sColId = oData["MQColumn"].getAttribute("id");
- }
- else
- {
-
-
-
- cfgSet("_META_" + oData["columnId"], oData);
-
-
-
- var iDataType = determineDataType(parseInt(oNode.datatype));
- this.m_bColIsString = (iDataType === DATA_TYPE_STRING ? true : false);
- this.m_bColIsMeasure = (iDataType === DATA_TYPE_NUMERIC ? true : false);
- this.m_bColIsSummarized = (oNode.regularAggregate > 0);
- this.m_sColLabel = oNode.name;
- this.m_sColId = oData["columnId"];
- }
- }
- }
- };
|