Rev 6924 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<%@LANGUAGE="VBSCRIPT"%><%'=====================================================' NEW VERSION' --- PROCESS FORM ---'=====================================================%><%Option explicit' Good idea to set when using redirectResponse.Expires = 0 ' always load the page, dont store%><!--#include file="common/conf.asp"--><!--#include file="common/globals.asp"--><!--#include file="common/formating.asp"--><!--#include file="common/qstr.asp"--><!--#include file="common/common_subs.asp"--><!--#include file="common/common_dbedit.asp"--><!--#include file="common/release_changed.asp"--><%' Set rfile parameter. This is a return page after LoginCall objPMod.StoreParameter ( "rfile", "dependencies.asp" )'------------ ACCESS CONTROL ------------------%><!--#include file="_access_control_login.asp"--><!--#include file="_access_control_general.asp"--><!--#include file="_access_control_project.asp"--><%'------------ Variable Definition -------------Dim parOLDpv_idDim parFRnewverDim NEWpv_idDim parSetToPv_idDim toTouchDim parNewPackageDim parFRpkgNameDim parChangeTypeDim parBase_view_idDim parPersonal_view_idDim parBuildTypeDim bImodeDim newPkgPv_idDim errMessage'------------ Constants Declaration -----------'------------ Variable Init -------------------parOLDpv_id = QStrPar("OLDpv_id")parFRnewver = QStrPar("FRnewver")parSetToPv_id = QStrPar("pv_id")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")bImode = (Request("iMode") = "pending")'----------------------------------------------%><%'----------------------------------------------' Appears to be a 'Replace Version'' Args: SSnewver - New Version String (may be empty)' NNorig_pv_id - original PVID' NNSetToPv_id - New PVID' NNrtag_id - Release Identifier' bImode - True: Insert into pending' retNEWpv_id - Return the PVID of the (replaced) package'Sub New_Version ( SSnewver, NNorig_pv_id, NNSetToPv_id, NNrtag_id, bImode, retNEWpv_id )Dim cAlterReleaseWhileRestrictiveDim newPkgVersionOn Error Resume NextobjEH.ErrorRedirect = TRUE' Manually built package' Force change type of 'Fixed'If parBuildType = "M" ThenparChangeType = "F"End If' If automatically assigned version number' Reset the version stringIf parChangeType = "F" ThennewPkgVersion = SSnewverElsenewPkgVersion = Request("v_ext")SSnewver = ""End IfOraDatabase.Parameters.Add "ORIG_PV_ID", NNorig_pv_id, ORAPARM_INPUT, ORATYPE_NUMBEROraDatabase.Parameters.Add "PKG_VERSION", newPkgVersion, ORAPARM_INPUT, ORATYPE_VARCHAR2' Access Control - Allow release change while release is in restrictive modecAlterReleaseWhileRestrictive = "N"If canActionControlInProject("AlterReleaseContentsInRestrictiveMode") Then cAlterReleaseWhileRestrictive = "Y"OraDatabase.Parameters.Add "BUILD_TYPE", parBuildType, ORAPARM_INPUT, ORATYPE_CHAROraDatabase.Parameters.Add "CHANGE_TYPE", parChangeType, ORAPARM_INPUT, ORATYPE_CHAROraDatabase.Parameters.Add "ALTER_RELEASE", cAlterReleaseWhileRestrictive, ORAPARM_INPUT, ORATYPE_CHAROraDatabase.Parameters.Add "SET_TO_PV_ID", NNSetToPv_id, ORAPARM_INPUT, ORATYPE_NUMBEROraDatabase.Parameters.Add "RTAG_ID", NNrtag_id, ORAPARM_INPUT, ORATYPE_NUMBEROraDatabase.Parameters.Add "USER_ID", objAccessControl.UserId, ORAPARM_INPUT, ORATYPE_NUMBEROraDatabase.Parameters.Add "enumISSUES_STATE_IMPORTED", enumISSUES_STATE_IMPORTED, ORAPARM_INPUT, ORATYPE_NUMBEROraDatabase.Parameters.Add "RETPV_ID", 0, ORAPARM_OUTPUT,ORATYPE_NUMBERobjEH.TryORA ( OraSession )' Create a new version of the package (if it does not exist)' Check that we can update the release' Replace package in the release'if bImode ThenOraDatabase.ExecuteSQL _"BEGIN "&_" PK_PACKAGE.NEW_VERSION ( :ORIG_PV_ID, "&_" :PKG_VERSION,"&_" :BUILD_TYPE,"&_" :CHANGE_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_PLANNED.MERGE_PACKAGE (:RETPV_ID, PK_ENVIRONMENT.GET_VIEW_LOCATION (:ORIG_PV_ID, :RTAG_ID), :RTAG_ID, :USER_ID, 'A'); "&_"END;"ElseOraDatabase.ExecuteSQL _"BEGIN "&_" PK_PACKAGE.NEW_VERSION ( :ORIG_PV_ID, "&_" :PKG_VERSION,"&_" :BUILD_TYPE,"&_" :CHANGE_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;"End IfretNEWpv_id = OraDatabase.Parameters("RETPV_ID").ValueobjEH.CatchORA ( OraSession )If objEH.LastOraFailed = FALSE and not bImode ThenCall UpdateChangeType (retNEWpv_id, parChangeType )Call UpdateReasonForVersion (retNEWpv_id, Request("FRreason"))End IfOraDatabase.Parameters.Remove "ORIG_PV_ID"OraDatabase.Parameters.Remove "ALTER_RELEASE"OraDatabase.Parameters.Remove "PKG_VERSION"OraDatabase.Parameters.Remove "CHANGE_TYPE"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 = FalseDim objRegEx, objRegEx2Set objRegEx = New RegExpSet objRegEx2 = New RegExpobjRegEx.IgnoreCase = TrueobjRegEx.Pattern = "^[0-9]+\.[0-9]+\.[0-9]+\.[a-zA-Z0-9]+$"objRegEx2.Pattern = "\.(cots)|(tool)$"If Len(newVersion) <= 50 ThenIf objRegEx.Test( newVersion ) OR objRegEx2.Test( newVersion ) ThenSanityCheck = TrueEnd IfEnd IfIf parBuildType = "A" ThenSanityCheck = TrueEnd IfSet objRegEx = NothingSet objRegEx2 = NothingEnd Function'-----------------------------------------------------------------------------------' Seed the Database' Create proto package-version to be used later'Sub Seed_DB ( retPV_ID )Dim QueryStringOn Error Resume NextOraDatabase.Parameters.Add "retPV_ID", 0, ORAPARM_OUTPUT, ORATYPE_NUMBERQueryString = "BEGIN Seed_Package_Names_Versions ("&_" '" & parFRpkgName & "'"&_",'" & parFRnewver & "'" &_",:USER_ID" &_",:retPV_ID" &_",NULL" &_",'"& parBuildType & "'" &_",'"& parChangeType & "'" &_"); END;"OraDatabase.ExecuteSQL QueryStringretPV_ID = OraDatabase.Parameters("retPV_ID").ValueOraDatabase.Parameters.Remove "retPV_ID"End Sub'-----------------------------------------------------------------------------------' Add Package to a ReleaseSub AddPackage ( sPvId )Dim rsQry, AssocMASSOn Error Resume NextSet 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" )) ThenOraDatabase.Parameters.Add "PV_ID_LIST", sPvId, ORAPARM_OUTPUT, ORATYPE_VARCHAR2OraDatabase.ExecuteSQL "BEGIN PK_ENVIRONMENT.ADD_PACKAGE ( :PV_ID_LIST, :BASE_VIEW_ID, :RTAG_ID, :USER_ID ); END;"OraDatabase.Parameters.Remove "PV_ID_LIST"ElseErr.Raise 8, "Cannot ADD a CORE/MASS package into a MASS_REF Reference Release!"End IfEnd Sub'-----------------------------------------------------------------------------------Sub Add_Packages_To_View_Definition ( NNpkg_list )If OraDatabase.Parameters("PERSONAL_VIEW_ID").Value = "" Then Exit SubOraDatabase.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_CountDim versionToSanityCheck'Response.Write "<pre>------------<br>"'Dim Item'For Each Item In Request.Form' Response.Write "User Data: " &Item & ": " & Request.Form(Item) & "<br>"'Next'Response.Write "------------<br></pre>"'Call Destroy_All_Objects'Response.End'--- Process submission ---If ((parNewPackage <> "") AND parNewPackage) Then'' Creating a new package and its first version' Appears to work for others tooDim reResultDim 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)) ThenpkgFound = rsQry("pkg_id")End IfrsQry.CloseSet rsQry = Nothing'' Don't need to create the package' It will spring into existance if it does not exist'On Error Resume NextDim bAdded: bAdded = False'Response.Write "<pre>------------<br>"'Dim Item'For Each Item In Request.Form' Response.Write "User Data: " &Item & ": " & Request.Form(Item) & "<br>"'Next'Response.Write "------------<br></pre>"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.TryIf releaseIsWritable(rsQry("official")) ThenOraSession.BeginTrans'---- SQL parameters ----OraDatabase.Parameters.Add "RTAG_ID", parRtag_id, ORAPARM_INPUT, ORATYPE_NUMBEROraDatabase.Parameters.Add "USER_ID", objAccessControl.UserId, ORAPARM_INPUT, ORATYPE_NUMBEROraDatabase.Parameters.Add "BASE_VIEW_ID", parBase_view_id, ORAPARM_INPUT, ORATYPE_NUMBEROraDatabase.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 ThenCall AddPackage ( newPkgPv_id )If Err.Number = 0 ThenIf NOT IsNull(parPersonal_view_id) ThenCall Add_Packages_To_View_Definition ( newPkgPv_id )End IfEnd IfEnd IfOraDatabase.Parameters.Remove "RTAG_ID"OraDatabase.Parameters.Remove "USER_ID"OraDatabase.Parameters.Remove "BASE_VIEW_ID"OraDatabase.Parameters.Remove "PERSONAL_VIEW_ID"'---- Insert additional informationIf Err.Number = 0 ThenCall UpdateReasonForVersion (newPkgPv_id, Request("FRreason"))End If'---- Insert Package Licence infoIf Err.Number = 0 ThenCall UpdateLicenceInfo (newPkgPv_id, Request("licence_id"))End If'---- Commit or Rollback the transactionIf Err.number <> 0 ThenOraSession.RollBackCall RaiseMsg ( enum_MSG_ERROR, Err.description )ElseOraSession.CommitTransbAdded = TrueEnd 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 addedCall Destroy_All_ObjectsResponse.Redirect("fixed_issues.asp?rtag_id="& parRtag_id & "&pv_id=" & newPkgPv_id )ElseErr.Raise 8, "Cannot ADD a package in a CLOSED or CCB Release Mode"End IfrsQry.CloseSet rsQry = nothingobjEH.CatchElseResponse.write "Some mandatory parameters are missing!. Need parNewPackage and parFRnewver" & "<br>" 'TODOResponse.write QSTR_FullQueryEnd If' Not Creating a new packageElseIf (parOLDpv_id <> "") AND ( (parFRnewver <> "") OR (parSetToPv_id <> "") ) AND (parRtag_id <> "") Then' All mandatory parameters FOUNDIf ( (parSetToPv_id <> "") OR SanityCheck(parFRnewver) ) ThenRecord_Count = 0If parBuildType = "M" ThenQuery_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.RecordCountrsQry.Close()Set rsQry = NothingEnd IfIf Record_Count > 0 And parBuildType = "M" ThenCall RaiseMsg ( enum_MSG_PACKAGE_VERSION_EXISTS&"?rtag_id="& parRtag_id &"&pv_id="& parOLDpv_id &"", parFRnewver )ElseCall New_Version ( parFRnewver, parOLDpv_id, parSetToPv_id, parRtag_id, bImode, NEWpv_id )If not bImode Then'' Direct insert ( not pending )' Report change to Release archive server so that it can be synced' But only if the package has been added to the release and not simply created as a WIP'' Could do this better, but then this entire page would need to be split into' One for a New package-versions' One for Replacing a package in a release' One for adding a package to a release'Dim newDlockStateQuery_string = " SELECT pv.dlocked"&_" FROM package_versions pv"&_" WHERE pv.pv_id = "& NEWpv_idSet rsQry = OraDatabase.DbCreateDynaset(Query_String, cint(0))newDlockState = rsQry("dlocked")Record_Count = rsQry.RecordCountrsQry.Close()Set rsQry = NothingIf newDlockState = "Y" ThenDim objRC: Set objRC = New ReleaseChangedCall objRC.Run_ReleaseChanged(parRtag_id,NEWpv_id,enumRELEASE_CHANGE_MODE_PKG_ADDED, true)Call objRC.Run_ReleaseChanged(parRtag_id,parOLDpv_id,enumRELEASE_CHANGE_MODE_PKG_REMOVED, true)Set objRC = NothingEnd IfEnd IfIf objEH.Finally ThenCall Destroy_All_ObjectsResponse.Redirect("fixed_issues.asp?rtag_id="& parRtag_id &"&pv_id="& NEWpv_id )End IfEnd IfElseCall RaiseMsg( enum_MSG_PACKAGE_VERSION_INVALID&"?rtag_id="& parRtag_id &"&pv_id="& parOLDpv_id &"", parFRnewver )End IfElseResponse.write "Some mandatory parameters are missing!" & "<br>" 'TODOResponse.write QSTR_FullQueryEnd If ' If (parOLDpv_id <> "") AND ( (parFRnewver <> "") OR (parSetToPv_id <> "") ) AND (parRtag_id <> "") Then%><!-- DESTRUCTOR -------><!--#include file="common/destructor.asp"-->