Blame | Last modification | View Log | RSS feed
<%@LANGUAGE="VBSCRIPT"%><%'=====================================================' view_by_files_json.asp'' Provide dataTable information for pages that search for files' 1) Global (no rtagId)' 2) Within a Release (With rtagId and envtab)'=====================================================%><%Option explicit' Some searches may take a whileServer.ScriptTimeout=400' Essential to get UTF through all the hoops. ie: VÄSTTRAFIK (VTK)Response.ContentType = "text/html"Response.AddHeader "Content-Type", "text/html;charset=UTF-8"Response.CodePage = 65001Response.CharSet = "UTF-8"%><!--#include file="common/conf.asp"--><!--#include file="common/globals.asp"--><!--#include file="common/qstr.asp"--><!--#include file="common/common_subs.asp"--><SCRIPT LANGUAGE="VBScript" RUNAT=SERVER SRC="class/classaspJSON.vbs"></SCRIPT><%'------------ Variable Definition -------------Dim result : result = -1Dim joinerDim SqlQryDim rsQryDim parRtagId, parEnvTab, parEnvTableparRtagId = Request("rtag_id")Dim parFileNameparFileName = Request.Form("columns[1][search][value]")If parFileName = "" ThenparFileName = Request("filename")End If' Calculate the table to be used when limiting search to a EnvTabIf parRtagId <> "" ThenparEnvTab = Request("envtab")Select Case parEnvTabCase "0" : parEnvTable = "work_in_progress"Case "1" : parEnvTable = "planned"Case "3" : parEnvTable = "environment_view"Case Else : parEnvTable = "release_content"End SelectEnd If' Init the output JSON class' Operations can add data' Default data will be added at the endDim oJSON :Set oJSON = New aspJSONDim newitem'On Error Resume Next'' Assist in debugoJSON.data("start") = CLng(Request.Form("start"))oJSON.data("length") = CLng(Request.Form("length"))'Dim vName'for each vName in Request.QueryString' oJSON.data("sReq_" & vName) = Request(vName)'next'For Each vName In Request.Form' oJSON.data("sFrm_" & vName) = Request(vName)'Next' Extract selected rangeresult = 0dim firstRow,lastRow,noBuildTimefirstRow = CLng(Request.Form("start"))lastRow = firstRow + CLng(Request.Form("length"))' Define array of colums to sort by' Must match user sort column requestDim sortCols: sortCols = Array ( _"pv.pv_id", _"UPPER(art.file_name)",_"UPPER(art.file_path)",_"UPPER(pkg.pkg_name)",_"UPPER(pv.pkg_version)",_"UPPER(art.crc_cksum)" )' Dim determine sorting options'On Error goto 0'Response.Write "<pre>"Dim sortStringDim sortJoin : sortJoin = " ORDER BY "If Request.Form("order[0][column]") <> "" ThenDim sortCol : sortCol = CInt(Request.Form("order[0][column]"))Dim sortDir : sortDir = " " & Request.Form("order[0][dir]")sortString = sortJoin & sortCols(sortCol)sortString = sortString & sortDirsortJoin = ","ElsesortString = sortJoin & sortCols(CInt(1)) & " asc"End If' Filter (search )' Support multicolumn filters'Dim searchString : searchString = ""Dim maxCols :maxCols = 5 ' 0 .. maxColsDim colIdx, colDataFor colIdx = 0 to maxColscolData = Request.Form("columns["&colIdx&"][search][value]")If colData <> "" ThensearchString = searchString + " AND " + sortCols(colIdx) + " LIKE UPPER('" + colData + "')"End IfNextIf searchString = "" ThensearchString = "AND UPPER (art.file_name) LIKE UPPER ('"&parFileName&"') "End IfDim BasicSql, FromSql, WhereSqlFromSql = " FROM RELEASE_COMPONENTS art, " &_" packages pkg, " &_" PACKAGE_VERSIONS pv "If parRtagId <> "" ThenFromSql = FromSql & "," & parEnvTable & " rc "End IfWhereSql = " WHERE pv.PKG_ID = pkg.PKG_ID " &_" AND art.pv_id = pv.pv_id " &_" AND art.file_name is not null "If parRtagId <> "" ThenWhereSql = WhereSql & " AND rc.rtag_id = "& parRtagId &" AND art.pv_id = rc.pv_id "End IfBasicSql = "SELECT pv.pv_id, "&_" art.file_name, " &_" art.file_path, " &_" pkg.pkg_name, " &_" pv.pkg_version, " &_" art.crc_cksum " &_FromSql &_WhereSql &_searchString &_sortStringSqlQry = "select * from ( "&_"select a.*, ROWNUM rnum from (" & BasicSql &_") a where ROWNUM <= " & lastRow &_") where rnum >= " & firstRow' Assist in debugoJSON.data("BasicSql") = BasicSqloJSON.data("SqlQry") = SqlQry' First query is to determine the overall size of the dataset'Dim SizeSqlDim MaxCount : MaxCount = 0SizeSql = "select count(*) as count " & FromSql & WhereSql & searchStringoJSON.data("iSql") = SizeSqlobjEH.ErrorRedirect = FALSEobjEH.TryORA ( OraSession )Set rsQry = OraDatabase.DbCreateDynaset( SizeSql, ORADYN_DEFAULT )objEH.CatchORA ( OraSession )If ((NOT rsQry.BOF) AND (NOT rsQry.EOF)) ThenMaxCount = rsQry("COUNT")End IfrsQry.CloseSet rsQry = Nothing' Basic Header' recordsTotal = total records without any filtering/limits' recordsFiltered = filtered result countoJSON.data("draw") = CLng(Request.Form("draw"))oJSON.data("recordsTotal") = CLng(MaxCount)oJSON.data("recordsFiltered") = CLng(MaxCount)' Perform the full database query with pagination supportSet oJSON.data("data") = oJSON.Collection()'On Error Resume NextobjEH.ErrorRedirect = FALSEobjEH.TryORA ( OraSession )Set rsQry = OraDatabase.DbCreateDynaset( SqlQry, ORADYN_DEFAULT )objEH.CatchORA ( OraSession )' Process each row and return required fields to the userIf objEH.Finally ThenWhile (NOT rsQry.BOF) AND (NOT rsQry.EOF)Set newitem = oJSON.AddToCollection(oJSON.data("data"))' Attempt to speed up access tot he data' Extract all fields for the row' Access fields by indexDim fieldsSet fields = rsQry.Fieldsnewitem(0) = fields(0) ' pvIdnewitem(1) = fields(1) ' fileNamenewitem(2) = fields(2) ' filePathnewitem(3) = fields(3) ' pkgNamenewitem(4) = fields(4) ' pkgVersionnewitem(5) = fields(5) ' chkSumSet fields = nothingrsQry.MoveNextWendEnd IFrsQry.CloseSet rsQry = Nothing'' SQL error detection and reportingIf objEH.LastOraFailed ThenoJSON.data("error") = 1oJSON.data("emsgSummary") = objEH.MessageSummaryoJSON.data("emsgDetails") = objEH.MessageDetailsoJSON.data("SqlQry") = SqlQryEnd If'Return the objectResponse.Write oJSON.JSONoutput()' CleanupSet oJSON = NothingCall Destroy_All_Objects%>