Rev 6886 | Rev 7261 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<%@LANGUAGE="VBSCRIPT"%><%'=====================================================' build_release_log_json.asp'=====================================================%><%Option explicit' 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 : parRtagId = Request.Form("rtag_id")Dim parReason : parReason = Request.Form("fReason")Dim parResult : parResult = Request.Form("fResult")' Init the output JSON class' Operations can add data' Default data will be added at the endDim oJSON :Set oJSON = New aspJSONDim newitem' Filter Results and ReasonDim sResult : sResult = ""If parResult <> "" Thenjoiner = ""If InStr(parResult, "C") <> 0 Then sResult = sResult & "'C'" : joiner = ","If InStr(parResult, "E") <> 0 Then sResult = sResult & joiner & "'E'" : joiner = ","If InStr(parResult, "O") <> 0 Then sResult = sResult & joiner & "'B'," & "'S'"If sResult <> "" ThensResult = " AND bi.state in (" & sResult & ")"End IfEnd IfDim sReason : sReason = ""If parReason <> "" Thenjoiner = ""If InStr(parReason, "N") <> 0 Then sReason = sReason & joiner & "'N'" : joiner = ","If InStr(parReason, "R") <> 0 Then sReason = sReason & joiner & "'R'" : joiner = ","If InStr(parReason, "T") <> 0 Then sReason = sReason & joiner & "'T'" : joiner = ","If InStr(parReason, "P") <> 0 Then sReason = sReason & joiner & "'P'" : joiner = ","If InStr(parReason, "F") <> 0 Then sReason = sReason & joiner & "'F'" : joiner = ","If sReason <> "" ThensReason = " AND bi.reason in (" & sReason & ")"End IfEnd If'' Determine the size of the record set' Gives bad results when searchingDim MaxCount : MaxCount = 0SqlQry = "select count(*) as count from BUILD_INSTANCES bi WHERE bi.state is not null " & sResult & sReasonIf parRtagId <> "" ThenSqlQry = SqlQry + " AND rtag_id = " & parRtagIdEnd IfOn Error Resume NextobjEH.ErrorRedirect = FALSEobjEH.TryORA ( OraSession )Set rsQry = OraDatabase.DbCreateDynaset( SqlQry, 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)' Assist in debugoJSON.data("start") = CLng(Request.Form("start"))oJSON.data("length") = CLng(Request.Form("length"))oJSON.data("iSql") = SqlQry'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 ( _"UPPER(pj.PROJ_NAME)",_"UPPER(rt.RTAG_NAME),build_id",_"UPPER(p.PKG_NAME),build_id",_"UPPER(p.PKG_NAME),UPPER(pv.PKG_VERSION)",_"bi.BUILD_ID",_"UPPER(bi.reason),build_id",_"build_time,build_id,NOBUILDTIME",_"UPPER(bi.state),build_id",_"build_id" )' Dim determine sorting options'On Error goto 0'Response.Write "<pre>"Dim sortStringIf Request.Form("order[0][column]") <> "" ThenDim sortCol : sortCol = CInt(Request.Form("order[0][column]"))Dim sortDir : sortDir = " " & Request.Form("order[0][dir]")Dim splitArg: splitArg = Split( sortCols(sortCol), "," )Dim splitItemjoiner = ""for each splitItem in splitArgIf splitItem = "NOBUILDTIME" ThennoBuildTime = " AND PV.BUILD_TIME is not null"ElsesortString = sortString & joiner & splitItem & " " & sortDirjoiner = ","End IfnextsortString = " ORDER BY " & sortStringEnd If' Filter (search )Dim searchStringIf Request.Form("search[value]") <> "" ThensearchString = " AND upper(p.PKG_NAME) LIKE upper('%" & Request.Form("search[value]") & "%')"End IfDim whereStringIf parRtagId <> "" ThenwhereString = " AND bi.rtag_id = " & parRtagIdEnd IfDim BasicSqlBasicSql = "SELECT bi.PV_ID, " &_" bi.RTAG_ID, " &_" pv.pkg_id, " &_" pj.PROJ_NAME, " &_" pj.PROJ_ID, " &_" RTAG_NAME, " &_" p.PKG_NAME, " &_" NVL(pv.V_EXT, '') AS V_EXT, " &_" TO_CHAR(bi.TIMESTAMP, 'Dy DD-Mon-YYYY HH24:MI:SS') AS TIMESTAMPTXT, " &_" DECODE(bi.reason, 'N', 'New Version', 'R', 'Ripple', 'T', 'Test', 'P', 'Restored', 'F', 'ForcedRipple', 'Unknown') AS REASON, " &_" DECODE(bi.state, 'B', 'Buiding', 'C', 'Complete', 'E', 'Error', 'S', 'SysErr', 'Unknown') AS STATE, " &_" bi.build_id " &_"FROM BUILD_INSTANCES bi, " &_" projects pj, " &_" RELEASE_TAGS rt, " &_" packages p, " &_" PACKAGE_VERSIONS pv " &_"WHERE bi.PV_ID = pv.pv_id " &_"AND pv.PKG_ID = p.PKG_ID " &_"AND bi.RTAG_ID = rt.RTAG_ID " &_"AND rt.proj_id = pj.proj_id " &_sResult & sReason &_noBuildTime &_whereString &_searchString &_sortStringSqlQry = "Select z.*," &_"(SELECT COUNT(*) FROM TEST_RUN tr WHERE tr.build_id = z.build_id ) AS test_count, " &_"(SELECT PKG_VERSION FROM PACKAGE_VERSIONS pv1 WHERE pv1.pv_id = z.pv_id ) AS PKG_VERSION, " &_"(SELECT PV_DESCRIPTION FROM PACKAGE_VERSIONS pv1 WHERE pv1.pv_id = z.pv_id ) AS PV_DESCRIPTION, " &_"(SELECT COMMENTS FROM PACKAGE_VERSIONS pv1 WHERE pv1.pv_id = z.pv_id ) AS COMMENTS, " &_"(SELECT BUILD_TIME FROM PACKAGE_VERSIONS pv1 WHERE pv1.pv_id = z.pv_id ) AS BUILD_TIME" &_" from (select * from ( "&_"select /*+ FIRST_ROWS("& lastRow &") */ a.*, ROWNUM rnum from (" & BasicSql &_") a where ROWNUM <= " & lastRow &_") where rnum >= " & firstRow & ") z"' Assist in debugoJSON.data("BasicSql") = BasicSqloJSON.data("SqlQry") = SqlQryoJSON.data("sqlFilter") = sResult & sReason' Perform the database querySet 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.FieldsDim pv_id : pv_id = fields(0)Dim rtag_id : rtag_id = fields(1)Dim pkg_id : pkg_id = fields(2)Dim proj_name : proj_name = fields(3)Dim proj_id : proj_id = fields(4)Dim rtag_name : rtag_name = fields(5)Dim pkg_name : pkg_name = fields(6)Dim v_ext : v_ext = fields(7)Dim timestamp : timestamp = fields(8)Dim reason : reason = fields(9)Dim state : state = fields(10)Dim buildId : buildId = fields(11)Dim tcount : tcount = fields(13)Dim pkg_version : pkg_version = fields(14)Dim description : description = CleanUp(Server.HTMLEncode(fields(15)))Dim comments : comments = CleanUp(Server.HTMLEncode(fields(16)))Dim buildTime : buildTime = Server.HTMLEncode(fields(17))Set fields = nothingIf buildTime <= 0 Then buildTime = ""If tcount <= 0 Then tcount = ""newitem(0) = "<a href='rtree.asp?proj_id=" & proj_id & "'>" & proj_name &"</a>"newitem(1) = "<a href='dependencies.asp?rtag_id=" & rtag_id & "'>" & rtag_name & "</a>"newitem(2) = "<a href=view_by_version.asp?pkg_id=" & pkg_id & "&fpkgversion=*" & v_ext & " title='" & description & "'>" & pkg_name & "</a>"newitem(3) = "<a href='dependencies.asp?pv_id=" & pv_id & "&rtag_id=" & rtag_id &"' title='" & comments & "'>" & pkg_version & "</a>"newitem(4) = timestampnewitem(5) = reasonnewitem(6) = buildTimenewitem(7) = "<a href='unit_test_log.asp?rtag_id=" & rtag_id & "&pv_id=" & pv_id & "'>" & state & "</a>"newitem(8) = tcountrsQry.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()Set oJSON = NothingCall Destroy_All_Objects' Quick and ugly code to attempt to remove nasty characters from strings' In particular some unicode characters that mess with the json decoderFunction CleanUp (input)Dim objRegExp, outputStrSet objRegExp = New RegexpobjRegExp.IgnoreCase = TrueobjRegExp.Global = TrueobjRegExp.Pattern = "((?![\[\]\(\)\{\}\$-_?/""';:.,a-zA-Z0-9]).)+"outputStr = objRegExp.Replace(input, " ")CleanUp = outputStrEnd Function%>