核心邏輯:記錄上一次點擊的欄位名,若再次點擊同欄位則切換升/降序,否則預設升序。將排序欄位與方向傳至後端,拼接 SQL ORDER BY 子句完成排序。
<a href="javascript:setOrder('colName')">欄位名</a>sortCol、sortDir。// BIRT report 初始化腳本
dataSetName = "fundcatagoryseasontemplate";
sortCol = reportContext.getHttpServletRequest().getParameter("sortCol");
sortDir = reportContext.getHttpServletRequest().getParameter("sortDir");
currentURL = reportContext.getHttpServletRequest().getRequestURL() + "?" +
reportContext.getHttpServletRequest().getQueryString();
sortClause = "";
targetURL = "";
if (sortDir != null) {
sortDir = sortDir.indexOf("ASC") != -1 ? "DESC" : "ASC"; // 切換方向
} else {
sortDir = "ASC";
}
if (sortCol != null && sortCol.length() > 0) {
sortClause = " ORDER BY " + sortCol + " " + sortDir;
}
// 修改資料集 SQL
reportContext.getReportRunnable().getDesignInstance()
.getDataSet(dataSetName).queryText += sortClause;
// 重構 URL 保持排序狀態
if (currentURL.indexOf("__sorting=") != -1) {
targetURL = currentURL.substring(0, currentURL.indexOf("__sorting") - 1);
} else {
targetURL = currentURL;
}
targetURL += "&__sorting=true&sortDir=" + sortDir + "&sortCol=" + sortCol;
reportContext 取得 HTTP 參數與修改資料集 SQL。