<%@LANGUAGE="VBSCRIPT"%> <% '===================================================== ' NEW VERSION ' --- PROCESS FORM --- '===================================================== %> <% Option explicit ' Good idea to set when using redirect Response.Expires = 0 ' always load the page, dont store %> <% ' Set rfile parameter. This is a return page after Login Call objPMod.StoreParameter ( "rfile", "dependencies.asp" ) '------------ ACCESS CONTROL ------------------ %> <% '------------ Variable Definition ------------- Dim parOLDpv_id Dim parFRnewver Dim NEWpv_id Dim parSetToPv_id Dim parSync_rtags Dim toTouch Dim parNewPackage Dim parFRpkgName Dim parChangeType Dim parBase_view_id Dim parPersonal_view_id Dim parBuildType Dim newPkgPv_id Dim errMessage '------------ Constants Declaration ----------- '------------ Variable Init ------------------- parOLDpv_id = QStrPar("OLDpv_id") parFRnewver = QStrPar("FRnewver") parSetToPv_id = QStrPar("pv_id") parSync_rtags = Request("sync_rtags") parNewPackage = Request("newPackage") parFRpkgName = Request("FRpkgName") parChangeType = Request("change_type") parBase_view_id = Request("base_view_id") parPersonal_view_id = Request("personal_view_id") parBuildType = Request("build_type") '---------------------------------------------- %> <% Sub New_Version ( SSnewver, NNorig_pv_id, NNSetToPv_id, NNrtag_id, sSyncRtags, retNEWpv_id ) Dim cAlterReleaseWhileRestrictive, rsQry Dim Original_SSnewver Original_SSnewver = SSnewver On Error Resume Next objEH.ErrorRedirect = TRUE If parBuildType = "A" Then SSnewver = "" End If OraDatabase.Parameters.Add "ORIG_PV_ID", NNorig_pv_id, ORAPARM_INPUT, ORATYPE_NUMBER If parBuildType = "M" Then ' Manual build OraDatabase.Parameters.Add "PKG_VERSION", SSnewver, ORAPARM_INPUT, ORATYPE_VARCHAR2 parChangeType = "F" Else ' Automated Build OraDatabase.Parameters.Add "PKG_VERSION", Request("v_ext"), ORAPARM_INPUT, ORATYPE_VARCHAR2 End If ' Access Control - Allow release change while release is in restrictive mode cAlterReleaseWhileRestrictive = "N" If objAccessControl.IsActive("AlterReleaseContentsInRestrictiveMode") Then cAlterReleaseWhileRestrictive = "Y" OraDatabase.Parameters.Add "BUILD_TYPE", parBuildType, ORAPARM_INPUT, ORATYPE_CHAR OraDatabase.Parameters.Add "ALTER_RELEASE", cAlterReleaseWhileRestrictive, ORAPARM_INPUT, ORATYPE_CHAR OraDatabase.Parameters.Add "SET_TO_PV_ID", NNSetToPv_id, ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "RTAG_ID", NNrtag_id, ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "USER_ID", objAccessControl.UserId, ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "enumISSUES_STATE_IMPORTED", enumISSUES_STATE_IMPORTED, ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "RETPV_ID", 0, ORAPARM_OUTPUT,ORATYPE_NUMBER objEH.TryORA ( OraSession ) Set rsQry = OraDatabase.DbCreateDynaset("SELECT * FROM RELEASE_CONTENT WHERE RTAG_ID ="& Request("rtag_id") &" AND PV_ID = "& NNorig_pv_id &"", cint(0)) If (NOT IsNull(rsQry("pkg_id"))) AND rsQry("pkg_state") = 6 Then Dim rsPv_id If (SSnewver) <> "" Then Set rsPv_id = OraDatabase.DbCreateDynaset("SELECT * FROM PACKAGE_VERSIONS WHERE PKG_VERSION ='"& SSnewver &"' AND PKG_ID = "& rsQry("pkg_id") &"", cint(0)) retNEWpv_id = rsPv_id("pv_id") rsPv_id.Close() Set rsPv_id = nothing Else retNEWpv_id = NNSetToPv_id End If If NOT IsNull(retNewpv_id) Then OraDatabase.ExecuteSQL _ "BEGIN "&_ " UPDATE RELEASE_CONTENT SET PV_ID ="& retNEWpv_id &" WHERE RTAG_ID ="& Request("rtag_id") &" AND PV_ID ="& parOLDpv_id &"; "&_ "END;" Else OraDatabase.ExecuteSQL _ "BEGIN "&_ " PK_PACKAGE.NEW_VERSION ( :ORIG_PV_ID, "&_ " :PKG_VERSION,"&_ " :BUILD_TYPE,"&_ " :SET_TO_PV_ID,"&_ " :RTAG_ID,"&_ " :USER_ID,"&_ " :enumISSUES_STATE_IMPORTED,"&_ " :RETPV_ID ); "&_ " PK_RELEASE.CAN_USER_WRITE_TO_RELEASE ( :RTAG_ID, :RETPV_ID, :ALTER_RELEASE ); "&_ " PK_ENVIRONMENT.REPLACE_PACKAGE ( :RETPV_ID, :ORIG_PV_ID, :RTAG_ID, :USER_ID ); "&_ "END;" retNEWpv_id = OraDatabase.Parameters("RETPV_ID").Value End If Else OraDatabase.ExecuteSQL _ "BEGIN "&_ " PK_PACKAGE.NEW_VERSION ( :ORIG_PV_ID, "&_ " :PKG_VERSION,"&_ " :BUILD_TYPE,"&_ " :SET_TO_PV_ID,"&_ " :RTAG_ID,"&_ " :USER_ID,"&_ " :enumISSUES_STATE_IMPORTED,"&_ " :RETPV_ID ); "&_ " PK_RELEASE.CAN_USER_WRITE_TO_RELEASE ( :RTAG_ID, :RETPV_ID, :ALTER_RELEASE ); "&_ " PK_ENVIRONMENT.REPLACE_PACKAGE ( :RETPV_ID, :ORIG_PV_ID, :RTAG_ID, :USER_ID ); "&_ "END;" retNEWpv_id = OraDatabase.Parameters("RETPV_ID").Value End If objEH.CatchORA ( OraSession ) If objEH.LastOraFailed = FALSE Then Call UpdateChangeType (retNEWpv_id, parChangeType ) Call UpdateReasonForVersion (retNEWpv_id, Request("FRreason")) End If rsQry.Close() Set rsQry = nothing OraDatabase.Parameters.Remove "ORIG_PV_ID" OraDatabase.Parameters.Remove "ALTER_RELEASE" OraDatabase.Parameters.Remove "PKG_VERSION" OraDatabase.Parameters.Remove "BUILD_TYPE" OraDatabase.Parameters.Remove "SET_TO_PV_ID" OraDatabase.Parameters.Remove "RTAG_ID" OraDatabase.Parameters.Remove "USER_ID" OraDatabase.Parameters.Remove "enumISSUES_STATE_IMPORTED" OraDatabase.Parameters.Remove "RETPV_ID" End Sub '--------------------------------------------------------------- Function SanityCheck ( newVersion ) SanityCheck = False Dim objRegEx, objRegEx2 Set objRegEx = New RegExp Set objRegEx2 = New RegExp objRegEx.IgnoreCase = True objRegEx.Pattern = "^[0-9]+\.[0-9]+\.[0-9]+\.[a-zA-Z0-9]+$" objRegEx2.Pattern = "\.(cots)|(tool)$" If Len(newVersion) <= 50 Then If objRegEx.Test( newVersion ) OR objRegEx2.Test( newVersion ) Then SanityCheck = True End If End If If parBuildType = "A" Then SanityCheck = True End If Set objRegEx = Nothing Set objRegEx2 = Nothing End Function '----------------------------------------------------------------------------------- ' Seed the Database ' Create proto package-version to be used later ' Sub Seed_DB ( retPV_ID ) Dim QueryString On Error Resume Next OraDatabase.Parameters.Add "retPV_ID", 0, ORAPARM_OUTPUT, ORATYPE_NUMBER QueryString = "BEGIN Seed_Package_Names_Versions ("&_ " '" & parFRpkgName & "'"&_ ",'" & parFRnewver & "'" &_ ",:USER_ID" &_ ",:retPV_ID" &_ ",NULL" &_ ",'"& parBuildType & "'" &_ ",'"& parChangeType & "'" &_ "); END;" OraDatabase.ExecuteSQL QueryString retPV_ID = OraDatabase.Parameters("retPV_ID").Value OraDatabase.Parameters.Remove "retPV_ID" End Sub '----------------------------------------------------------------------------------- ' Add Package to a Release Sub AddPackage ( sPvId ) Dim rsQry, AssocMASS On Error Resume Next Set rsQry = OraDatabase.DbCreateDynaset( "SELECT * FROM RELEASE_TAGS RT, PACKAGE_VERSIONS PV WHERE RT.RTAG_ID ="&parRtag_id&" AND PV.PV_ID IN ("&sPvId&")", cint(0)) AssocMASS = rsQry("ASSOC_MASS_REF") If ( IsNull(AssocMASS) ) OR (AssocMASS <> "" AND (rsQry("v_ext") <> ".cr" AND rsQry("v_ext") <> ".mas" )) Then OraDatabase.Parameters.Add "PV_ID_LIST", sPvId, ORAPARM_OUTPUT, ORATYPE_VARCHAR2 OraDatabase.ExecuteSQL "BEGIN PK_ENVIRONMENT.ADD_PACKAGE ( :PV_ID_LIST, :BASE_VIEW_ID, :RTAG_ID, :USER_ID ); END;" OraDatabase.Parameters.Remove "PV_ID_LIST" Else Err.Raise 8, "Cannot ADD a CORE/MASS package into a MASS_REF Reference Release!" End If End Sub '----------------------------------------------------------------------------------- Sub Add_Packages_To_View_Definition ( NNpkg_list ) If OraDatabase.Parameters("PERSONAL_VIEW_ID").Value = "" Then Exit Sub OraDatabase.ExecuteSQL _ " INSERT INTO view_def"&_ " SELECT TO_NUMBER( :PERSONAL_VIEW_ID ) AS view_id, pkg.pkg_id"&_ " FROM packages pkg"&_ " WHERE pkg.pkg_id IN ( "& NNpkg_list &" )"&_ " MINUS "&_ " SELECT vd.view_id, vd.pkg_id"&_ " FROM view_def vd"&_ " WHERE vd.view_id = :PERSONAL_VIEW_ID " End Sub '----------------------------------------------------------------------------------- %> <% '----------------------- MAIN LINE --------------------------- Dim rsQry, Query_String, Record_Count Dim versionToSanityCheck 'Response.Write "
------------
" 'Dim Item 'For Each Item In Request.Form ' Response.Write "User Data: " &Item & ": " & Request.Form(Item) & "
" 'Next 'Response.Write "------------
" '--- Process submission --- If ((parNewPackage <> "") AND parNewPackage) Then ' ' Creating a new package and its first version ' Appears to work for others too Dim reResult Dim pkgFound ' Ensure that the named package does not exist ' Can't create it if it already exists ' pkgFound = "" Query_String = "SELECT pkg.*" &_ " FROM packages pkg"&_ " WHERE pkg.pkg_id != 0"&_ " AND UPPER(pkg.pkg_name) = UPPER('"& Trim(parFRpkgName) & "')" Set rsQry = OraDatabase.DbCreateDynaset( Query_String, ORADYN_DEFAULT ) If ((NOT rsQry.BOF) AND (NOT rsQry.EOF)) Then pkgFound = rsQry("pkg_id") End If rsQry.Close Set rsQry = Nothing ' ' Don't need to create the package ' It will spring into existance if it does not exist ' On Error Resume Next Dim bAdded: bAdded = False 'Response.Write "
------------
" 'Dim Item 'For Each Item In Request.Form ' Response.Write "User Data: " &Item & ": " & Request.Form(Item) & "
" 'Next 'Response.Write "------------
" If ( parFRpkgName <> "" and parFRnewver <> "") Then ' Determine the state of the Release ' Can only add packages to a release that is in Open Mode(N) or Restricted Mode(R) Set rsQry = OraDatabase.DbCreateDynaset( "SELECT OFFICIAL FROM RELEASE_TAGS WHERE RTAG_ID ="&parRtag_id, cint(0)) objEH.Try If rsQry("official") = "N" OR rsQry("official") = "R" Then OraSession.BeginTrans '---- SQL parameters ---- OraDatabase.Parameters.Add "RTAG_ID", parRtag_id, ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "USER_ID", objAccessControl.UserId, ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "BASE_VIEW_ID", parBase_view_id, ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "PERSONAL_VIEW_ID", parPersonal_view_id, ORAPARM_INPUT, ORATYPE_NUMBER '---- Create Version and Add to Release ---- Call Seed_DB ( newPkgPv_id ) If Err.Number = 0 Then Call AddPackage ( newPkgPv_id ) If Err.Number = 0 Then If NOT IsNull(parPersonal_view_id) Then Call Add_Packages_To_View_Definition ( newPkgPv_id ) End If End If End If OraDatabase.Parameters.Remove "RTAG_ID" OraDatabase.Parameters.Remove "USER_ID" OraDatabase.Parameters.Remove "BASE_VIEW_ID" OraDatabase.Parameters.Remove "PERSONAL_VIEW_ID" '---- Insert additional information If Err.Number = 0 Then Call UpdateReasonForVersion (newPkgPv_id, Request("FRreason")) End If '---- Commit or Rollback the transaction If Err.number <> 0 Then OraSession.RollBack Call RaiseMsg ( enum_MSG_ERROR, Err.description ) Else OraSession.CommitTrans bAdded = True End If '---- Run Release Changed scripts on archive server '---- This is a new package so it should not be needed ' 'If bAdded Then ' Dim objRC: Set objRC = New ReleaseChanged ' Call objRC.Run_ReleaseChanged_List(parRtag_id,newPkgPv_id,enumRELEASE_CHANGE_MODE_PKG_ADDED) ' Set objRC = Nothing 'End If '--- Direct user the package-version that we have just added '--- Goto the page with the release notes as more info will need to be added Response.Redirect("fixed_issues.asp?rtag_id="& parRtag_id & "&pv_id=" & newPkgPv_id ) Else Err.Raise 8, "Cannot ADD a package in a CLOSED or CCB Release Mode" End If rsQry.Close Set rsQry = nothing objEH.Catch Else Response.write "Some mandatory parameters are missing!. Need parNewPackage and parFRnewver" & "
" 'TODO Response.write QSTR_All End If ' Not Creating a new package ElseIf (parOLDpv_id <> "") AND ( (parFRnewver <> "") OR (parSetToPv_id <> "") ) AND (parRtag_id <> "") Then ' All mandatory parameters FOUND If ( (parSetToPv_id <> "") OR SanityCheck(parFRnewver) ) Then Record_Count = 0 If parBuildType = "M" Then Query_string = " SELECT pv.pv_id, pv.is_patch, pv.dlocked"&_ " FROM package_versions pv"&_ " WHERE pv.pkg_version = '"& parFRnewver &"'"&_ " AND pv.pkg_id IN (SELECT DISTINCT origpv.pkg_id"&_ " FROM package_versions origpv"&_ " WHERE origpv.pv_id = "& parOLDpv_id &")" Set rsQry = OraDatabase.DbCreateDynaset(Query_String, cint(0)) Record_Count = rsQry.RecordCount rsQry.Close() Set rsQry = Nothing End If If Record_Count > 0 And parBuildType = "M" Then Call RaiseMsg ( enum_MSG_PACKAGE_VERSION_EXISTS&"?rtag_id="& parRtag_id &"&pv_id="& parOLDpv_id &"", parFRnewver ) Else Call New_Version ( parFRnewver, parOLDpv_id, parSetToPv_id, parRtag_id, parSync_rtags, NEWpv_id ) If objEH.Finally Then Response.Redirect("dependencies.asp?rtag_id="& parRtag_id &"&pv_id="& NEWpv_id ) End If End If Else Call RaiseMsg( enum_MSG_PACKAGE_VERSION_INVALID&"?rtag_id="& parRtag_id &"&pv_id="& parOLDpv_id &"", parFRnewver ) End If Else Response.write "Some mandatory parameters are missing!" & "
" 'TODO Response.write QSTR_All End If ' If (parOLDpv_id <> "") AND ( (parFRnewver <> "") OR (parSetToPv_id <> "") ) AND (parRtag_id <> "") Then %>