<%@LANGUAGE="VBSCRIPT"%> <% '===================================================== ' Update Package Version ' _json_updateVersion.asp ' Designed to be called via AJAX and to return ' JSON formatted data to dynamic page ' Ajax support for operaions on a package-version: ' ' updateVer ' setDeployable ' '===================================================== %> <% Option explicit ' Good idea to set when using redirect Response.Expires = 0 ' always load the page, dont store %> <% '------------ Variable Definition ------------- Dim parOpr Dim result Dim SqlQry Dim rsQry parOpr = QStrPar("Opr") result = -1 ' Init the output JSON class ' Operations can add data ' Default data will be added at the end Dim oJSON Set oJSON = New aspJSON Dim newitem If NOT objAccessControl.UserLogedIn Then oJSON.data("error") = 1 oJSON.data("emsgSummary") = "User no longer logged in" oJSON.data("emsgDetails") = oJSON.data("emsgSummary") ElseIf (parOpr = "updateVer") Then updateVersion ElseIf (parOpr = "setDeployable") Then setDeployable ElseIf (parOpr = "clearAllDeployable") Then clearAllDeployable ElseIf (parOpr = "setInManifest") Then setInManifest ElseIf (parOpr = "clearAllInManifest") Then clearAllInManifest Else oJSON.data("error") = 1 oJSON.data("emsgSummary") = "Unknown JSON Operation" oJSON.data("emsgDetails") = "The Requested JSON operation is not supported: " & parOpr End If ' SQL error detection and reporting If objEH.LastOraFailed Then oJSON.data("error") = 1 result = -1 oJSON.data("emsgSummary") = objEH.MessageSummary oJSON.data("emsgDetails") = objEH.MessageDetails oJSON.data("SqlQry") = SqlQry ' ' Detect program errors ElseIf Err.number <> 0 Then result = -3 oJSON.data("error") = 2 oJSON.data("errnum") = Err.number oJSON.data("errtxt") = Err.description oJSON.data("errsrc") = Err.source oJSON.data("emsgSummary") = "Internal VBScript Error:" & Err.number & ":" & Err.description End If On error goto 0 'Write single value oJSON.data("result") = result 'function Sleep(seconds) ' dim oshell, cmd ' set oShell = CreateObject("Wscript.Shell") ' cmd = "cmd.exe /c timeout " & seconds & " /nobreak" ' oShell.Run cmd,0,1 'End function ' 'Sleep(2) ' DEBUG: A Hash of the user provided requests 'Return the object Response.Write oJSON.JSONoutput() Set oJSON = Nothing Call Destroy_All_Objects %> <% Sub ReportError (sSummary, sDetails) oJSON.data("error") = 1 oJSON.data("emsgSummary") = sSummary oJSON.data("emsgDetails") = sDetails End Sub '------------------------------------------------- ' Function: updateVersion ' Description: Update version information ' Sub updateVersion Dim buildType, changeType, pvId, rtagId, version, vExt, errMessage, modeType, packageName ' ' Ensure we have all the required parameters ' buildType = QStrPar("buildType") changeType = QStrPar("changeType") pvId = QStrPar("pvId") rtagId = QStrPar("rtagId") version = QStrPar("Version") vExt = QStrPar("vExt") modeType = QStrPar("Mode") packageName = QStrPar("packageName") ' ' If Manual then force change type to 'F' ' If Auto then ensure that the version number is of the correct form if buildType = "M" then changeType = "F" end if If changeType <> "F" Then version=vExt End If ' ' Get existing data ' Test for package existence ' Check for changes ' SqlQry = "SELECT p.pkg_name, pv.pkg_id, pv.pv_id, pv.pkg_version, pv.v_ext, pv.change_type, pv.build_type"&_ " FROM package_versions pv, packages p"&_ " WHERE pv.pv_id = :NNpv_id" &_ " AND p.pkg_id = pv.pkg_id" OraDatabase.Parameters.Add "NNpv_id", pvId, ORAPARM_INPUT, ORATYPE_NUMBER objEH.ErrorRedirect = FALSE objEH.TryORA ( OraSession ) On Error Resume Next Set rsQry = OraDatabase.DbCreateDynaset( SqlQry, ORADYN_DEFAULT ) objEH.CatchORA ( OraSession ) errMessage = OraDatabase.Parameters("errMessage").Value OraDatabase.Parameters.Remove "NNpv_id" On Error GoTo 0 If NOT objEH.LastOraFailed Then Dim changed changed = 0 If ((rsQry.BOF) OR (rsQry.EOF)) Then oJSON.data("emsgDetails") = "Package not found" oJSON.data("error") = 1 End If ' Detect changes ' version can only be tested if a Manually Versioned ' If changeType = "F" AND rsQry("pkg_version") <> version Then changed = 1 If rsQry("build_type") <> buildType Then changed = changed + 2 If rsQry("v_ext") <> vExt Then changed = changed + 4 If rsQry("change_type") <> changeType Then changed = changed + 8 If changed Then ' ' Setup for the database access OraDatabase.Parameters.Add "RTAG_ID", rtagId, ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "NNpv_id", pvId, ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "SSpkg_version", version, ORAPARM_INPUT, ORATYPE_VARCHAR2 OraDatabase.Parameters.Add "BUILD_TYPE", buildType, ORAPARM_INPUT, ORATYPE_CHAR OraDatabase.Parameters.Add "CHANGE_TYPE", changeType, ORAPARM_INPUT, ORATYPE_CHAR OraDatabase.Parameters.Add "NNuser_id", objAccessControl.UserId, ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "errMessage", 0, ORAPARM_OUTPUT, ORATYPE_VARCHAR2 SqlQry = "BEGIN Rename_Package_Version (:NNpv_id,:SSpkg_version,:BUILD_TYPE,:CHANGE_TYPE,:NNuser_id,:errMessage ); END;" objEH.ErrorRedirect = FALSE objEH.TryORA ( OraSession ) On Error Resume Next OraDatabase.ExecuteSQL SqlQry objEH.CatchORA ( OraSession ) errMessage = OraDatabase.Parameters("errMessage").Value On Error GoTo 0 OraDatabase.Parameters.Remove "RTAG_ID" OraDatabase.Parameters.Remove "NNpv_id" OraDatabase.Parameters.Remove "SSpkg_version" OraDatabase.Parameters.Remove "NNuser_id" OraDatabase.Parameters.Remove "errMessage" OraDatabase.Parameters.Remove "BUILD_TYPE" OraDatabase.Parameters.Remove "CHANGE_TYPE" result = 0 End If If modeType = 1 Then ' Rename the package - possibly If rsQry("pkg_name") <> packageName Then changed = changed + 16 Dim rsQry1, count OraDatabase.Parameters.Add "PKG_ID", rsQry("pkg_id"), ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "PKG_NAME", packageName, ORAPARM_INPUT, ORATYPE_VARCHAR2 SqlQry = "select count(*) as count from package_versions where pkg_id = :PKG_ID" objEH.ErrorRedirect = FALSE objEH.TryORA ( OraSession ) On Error Resume Next Set rsQry1 = OraDatabase.DbCreateDynaset( SqlQry, ORADYN_DEFAULT ) objEH.CatchORA ( OraSession ) errMessage = OraDatabase.Parameters("errMessage").Value On Error GoTo 0 If NOT objEH.LastOraFailed Then If ((NOT rsQry1.BOF) AND (NOT rsQry1.EOF)) Then count = rsQry1.Fields("count") End If rsQry1.Close If count = 1 Then SqlQry = "update packages set pkg_name = :PKG_NAME where pkg_id = :PKG_ID" objEH.ErrorRedirect = FALSE objEH.TryORA ( OraSession ) On Error Resume Next OraDatabase.ExecuteSQL SqlQry objEH.CatchORA ( OraSession ) errMessage = OraDatabase.Parameters("errMessage").Value On Error GoTo 0 If NOT objEH.LastOraFailed Then result = 0 End If Else ReportError "Package name has been used","The Package name cannot be renamed as it is in use by multiple versions" End If End If OraDatabase.Parameters.Remove "PKG_ID" OraDatabase.Parameters.Remove "PKG_NAME" rsQry1.Close Set rsQry1 = Nothing End If End If ' Report - no changes If changed = 0 Then ReportError "No change detected", "No changes detected" End If rsQry.Close Set rsQry = Nothing End If End Sub '------------------------------------------------- ' Function: setDeployable ' Description: Set the state of the is_deployable flag ' Request Parameters ' pv_id ' deployment_state ' Sub setDeployable OraDatabase.Parameters.Add "PV_ID", QStrPar("pv_id"), ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "DEPLOYABLE_STATE", QStrPar("deployment_state"), ORAPARM_INPUT, ORATYPE_CHAR ' Set/Reset IS_DEPLOYABLE flag SqlQry = _ "UPDATE PACKAGE_VERSIONS " &_ " SET IS_DEPLOYABLE = DECODE(:DEPLOYABLE_STATE, 'Y', 'Y', NULL)" &_ " WHERE PV_ID = :PV_ID" objEH.ErrorRedirect = FALSE objEH.TryORA ( OraSession ) On Error Resume Next OraDatabase.ExecuteSQL SqlQry objEH.CatchORA ( OraSession ) On Error GoTo 0 result = 0 OraDatabase.Parameters.Remove "PV_ID" OraDatabase.Parameters.Remove "DEPLOYABLE_STATE" End Sub '------------------------------------------------- ' Function: clearAllDeployable ' Description: Clear the is_deployable flag on all packages in the Release ' Request Parameters ' rtag_id ' Sub clearAllDeployable OraDatabase.Parameters.Add "RTAG_ID", QStrPar("rtag_id"), ORAPARM_INPUT, ORATYPE_NUMBER ' Reset IS_DEPLOYABLE flag SqlQry = _ "update package_versions pv " &_ " set pv.IS_DEPLOYABLE = null" &_ " Where pv.pv_id in ( SELECT pv.pv_id" &_ " FROM package_versions pv," &_ " RELEASE_CONTENT rc" &_ " WHERE rc.rtag_id = :RTAG_ID" &_ " AND rc.pv_id = pv.pv_id" &_ " AND pv.IS_DEPLOYABLE is not null )" objEH.ErrorRedirect = FALSE objEH.TryORA ( OraSession ) On Error Resume Next OraDatabase.ExecuteSQL SqlQry objEH.CatchORA ( OraSession ) On Error GoTo 0 result = 0 OraDatabase.Parameters.Remove "RTAG_ID" End Sub '------------------------------------------------- ' Function: setInManifest ' Description: Set the state of the InManifest flag ' Request Parameters ' rtag_id ' pv_id ' mfState ' Sub setInManifest Dim sComments sComments = "Set: " & IIF (QStrPar("mfState") = "Y" , "Y", "N") OraDatabase.Parameters.Add "RTAG_ID", QStrPar("rtag_id"), ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "PV_ID", QStrPar("pv_id"), ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "MFSTATE", QStrPar("mfState"), ORAPARM_INPUT, ORATYPE_CHAR ' Set/Reset IS_DEPLOYABLE flag SqlQry = _ "UPDATE RELEASE_CONTENT " &_ " SET IN_MANIFEST = DECODE(:MFSTATE, 'Y', 'Y', NULL)" &_ " WHERE PV_ID = :PV_ID AND RTAG_ID = :RTAG_ID" objEH.ErrorRedirect = FALSE objEH.TryORA ( OraSession ) On Error Resume Next OraDatabase.ExecuteSQL SqlQry objEH.CatchORA ( OraSession ) If NOT objEH.LastOraFailed Then objEH.TryORA ( OraSession ) OraDatabase.ExecuteSQL ("BEGIN PK_RELEASE.SET_RELEASE_MODIFIED(:RTAG_ID); END; ") objEH.CatchORA ( OraSession ) call Log_Action ( QStrPar("pv_id"), "inManifest", sComments ) End If On Error GoTo 0 result = 0 OraDatabase.Parameters.Remove "RTAG_ID" OraDatabase.Parameters.Remove "PV_ID" OraDatabase.Parameters.Remove "MFSTATE" End Sub '------------------------------------------------- ' Function: clearAllInManifest ' Description: Clear the InManifest flag on all packages in the Release ' Request Parameters ' rtag_id ' Sub clearAllInManifest OraDatabase.Parameters.Add "RTAG_ID", QStrPar("rtag_id"), ORAPARM_INPUT, ORATYPE_NUMBER ' Reset InManifest flag SqlQry = _ "update release_content rc " &_ " set rc.IN_MANIFEST = null" &_ " WHERE rc.rtag_id = :RTAG_ID" &_ " AND rc.IN_MANIFEST is not null" objEH.ErrorRedirect = FALSE objEH.TryORA ( OraSession ) On Error Resume Next OraDatabase.ExecuteSQL SqlQry objEH.CatchORA ( OraSession ) If NOT objEH.LastOraFailed Then objEH.TryORA ( OraSession ) OraDatabase.ExecuteSQL ("BEGIN PK_RELEASE.SET_RELEASE_MODIFIED(:RTAG_ID); END; ") objEH.CatchORA ( OraSession ) ' Action is not logged - yet End If On Error GoTo 0 result = 0 OraDatabase.Parameters.Remove "RTAG_ID" End Sub %>