Subversion Repositories DevTools

Rev

Rev 6122 | Rev 7395 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

<%@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
%>
<!--#include file="common/conf.asp"-->
<!--#include file="common/globals.asp"-->
<!--#include file="common/qstr.asp"-->
<!--#include file="common/common_subs.asp"-->
<!--#include file="common/common_dbedit.asp"-->
<SCRIPT LANGUAGE="VBScript" RUNAT=SERVER SRC="class/classaspJSON.vbs"></SCRIPT> 
<%
'------------ 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

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
<!--oJSON.data("QueryString") = Request.QueryString       -->
<!--                                                      -->
<!--Dim requestSet : Set requestSet = oJSON.Collection()  -->
<!--Set oJSON.data("Request") = requestSet                -->
<!--Dim variableName                                      -->
<!--for each variableName in Request.QueryString          -->
<!--    requestSet.add variableName, Request(variableName)-->
<!--next                                                  -->
<!--for each variableName in Request.Form                 -->
<!--    requestSet.add variableName, Request(variableName)-->
<!--next                                                  -->


'Return the object
Response.Write oJSON.JSONoutput()
Set oJSON = Nothing
Call Destroy_All_Objects
%>
<%
'-------------------------------------------------
' Function:    updateVersion
' Description: Update version information
'
Sub updateVersion
    Dim buildType, changeType, pvId, rtagId, version, vExt, errMessage
    ' 
    ' 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")

    '
    ' 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 pv.pv_id, pv.pkg_version, pv.v_ext, pv.change_type, pv.build_type"&_
             " FROM package_versions pv"&_
             " WHERE pv.pv_id = :NNpv_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

    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

%>