<%@LANGUAGE="VBSCRIPT"%> <% '===================================================== '| | '| wSyncProducts | '| | '===================================================== %> <% Option explicit Response.Expires = 0 %> <% 'To enable the script timeout to 10 mins Server.ScriptTimeout=360 %> <% '------------ ACCESS CONTROL ------------------ %> <% '------------ VARIABLE DEFINITION ------------- Dim rsQry Dim aProducts Dim numOfRows Dim rowNum Dim objFormCollector Dim currPkg_id Dim Query_String Dim errorMessage Dim objList Dim objHideList Dim key '------------ CONSTANTS DECLARATION ----------- '------------ VARIABLE INIT ------------------- parBom_id = Request("bom_id") Set objFormCollector = CreateObject("Scripting.Dictionary") Set objList = CreateObject("Scripting.Dictionary") Set objHideList = CreateObject("Scripting.Dictionary") '------------ CONDITIONS ---------------------- '---------------------------------------------- %> <% '---------------------------------------------------------------------------------------------------------------------------------- ' Get some basic information required by the form ' Sub GetFormDetails ( nBom_id, ByRef outobjDetails ) Dim rsQry, query OraDatabase.Parameters.Add "BOM_ID", nBom_id, ORAPARM_INPUT, ORATYPE_NUMBER query = _ " SELECT rt.RTAG_ID, "&_ " rt.RTAG_NAME, "&_ " rt.PRODUCT_STATE_USED "&_ " FROM RELEASE_TAGS rt,"&_ " BOMS bo"&_ " WHERE bo.RTAG_ID_FK = rt.RTAG_ID"&_ " AND bo.BOM_ID = :BOM_ID" Set rsQry = OraDatabase.DbCreateDynaset( query, ORADYN_DEFAULT ) If (NOT rsQry.BOF) AND (NOT rsQry.EOF)Then outobjDetails.Item ("rtag_id_fk") = rsQry("rtag_id") outobjDetails.Item ("rtag_name") = rsQry("rtag_name") outobjDetails.Item ("product_state_used") = rsQry("product_state_used") End If OraDatabase.Parameters.Remove "BOM_ID" rsQry.Close Set rsQry = Nothing End Sub '---------------------------------------------------------------------------------------------------------------------------------- Sub UpdateProducts() Dim aDiffList, numOfRows, rowNum, OraParameter Const os_id_column = 2 Const old_prod_id_column = 1 '/* Get Latest From Release Manager */ OraDatabase.Parameters.Add "BOM_ID", parBom_id, ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "RTAG_ID", objFormCollector.Item("rtag_id_fk"), ORAPARM_INPUT, ORATYPE_NUMBER Query_String = ReadFile( rootPath & "queries\CompareBomWithLatestFromRM.sql" ) If objFormCollector.Item ("product_state_used") = "Y" Then Query_String = Replace( Query_String, "/* AND rc.PRODUCT_STATE = 3 */", " AND rc.PRODUCT_STATE = 3") End If Set rsQry = OraDatabase.DbCreateDynaset( Query_String, ORADYN_DEFAULT ) OraDatabase.Parameters.Remove "BOM_ID" OraDatabase.Parameters.Remove "RTAG_ID" '-- Get Rows If rsQry.RecordCount > 0 Then aDiffList = rsQry.GetRows() Else '-- No differencses with Release Manager, hence exit Exit Sub End If ' Get the project id so we can filter out PopulateSBOMField() for SSW later. Dim rsProjId, proj_id Set rsProjId = OraDatabase.DbCreateDynaset("SELECT proj_id FROM branches br, boms b WHERE br.branch_id = b.branch_id AND b.bom_id = " & parBom_id, cint(0)) proj_id = rsProjId("proj_id") rsProjId.Close() Set rsProjId = nothing '/* Update Versions */ OraDatabase.Parameters.Add "BOM_ID", parBom_id, ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "OLD_PROD_ID", 0, ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "NEW_PROD_ID", 0, ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "OS_ID", 0, ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "USER_ID", objAccessControl.UserId, ORAPARM_INPUT, ORATYPE_NUMBER Set OraParameter = OraDatabase.Parameters ' Try the database operations ' Must have On Error Resume Next in effect in order for the objEH.CatchORA to operate ' objEH.TryORA ( OraSession ) On Error Resume Next numOfRows = UBound( aDiffList, 2 ) For rowNum = 0 To numOfRows If Request("update_"& aDiffList( os_id_column, rowNum ) &"_"& aDiffList( old_prod_id_column, rowNum ) ) <> "" Then OraParameter("OLD_PROD_ID").Value = aDiffList( old_prod_id_column, rowNum ) OraParameter("NEW_PROD_ID").Value = Request("update_" & aDiffList( os_id_column, rowNum ) &"_"& aDiffList( old_prod_id_column, rowNum ) ) OraParameter("OS_ID").Value = aDiffList( os_id_column, rowNum ) '****************************************************************************** ' This is causing problems for SSW, VTK and SEA and they don't use it, so it ' has been disabled for those projects until a fix is found. '****************************************************************************** If proj_id <> 421 AND proj_id <> 361 AND proj_id <> 122 AND proj_id <> 164 AND proj_id <> 581 Then ' Needs :BOM_ID, but not for any good reason that I can see Call PopulateSBOMField(parBom_id, Request("update_"& aDiffList( os_id_column, rowNum ) &"_"& aDiffList( old_prod_id_column, rowNum ) ), NULL, NULL ) End If 'Response.Write("") OraDatabase.ExecuteSQL "BEGIN pk_Product.Replace_Product ( :OLD_PROD_ID, :NEW_PROD_ID, :OS_ID, :USER_ID ); END;" End If Next '--- Log Action --- 'objEH.LogAction _ 'objAccessControl.UserId, _ 'enumAT_EVENT_COMMENT, _ '"Sub UpdateProducts for OS list="& Request("spos_id_list"), _ 'SCRIPT_NAME, _ '"Updated Products with new versions.", _ 'OraDatabase OraDatabase.Parameters.Remove "BOM_ID" OraDatabase.Parameters.Remove "OLD_PROD_ID" OraDatabase.Parameters.Remove "NEW_PROD_ID" OraDatabase.Parameters.Remove "OS_ID" OraDatabase.Parameters.Remove "USER_ID" objEH.CatchORA ( OraSession ) End Sub '---------------------------------------------------------------------------------------------------------------------------------- Sub AddPatches() Dim aDiffList, numOfRows, rowNum, OraParameter Const os_id_column = 2 Const prod_id_column = 1 '/* Get Lates Release Manager */ OraDatabase.Parameters.Add "BOM_ID", parBom_id, ORAPARM_INPUT, ORATYPE_NUMBER Set rsQry = OraDatabase.DbCreateDynaset( GetQuery ("NewPatches.sql"), ORADYN_DEFAULT ) OraDatabase.Parameters.Remove "BOM_ID" '-- Get Rows If rsQry.RecordCount > 0 Then aDiffList = rsQry.GetRows() Else '-- No differences with Release Manager, hence exit Exit Sub End If '/* Update Versions */ OraDatabase.Parameters.Add "NEW_PROD_ID", 0, ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "OS_ID", 0, ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "USER_ID", objAccessControl.UserId, ORAPARM_INPUT, ORATYPE_NUMBER Set OraParameter = OraDatabase.Parameters objEH.TryORA ( OraSession ) On Error Resume Next numOfRows = UBound( aDiffList, 2 ) For rowNum = 0 To numOfRows If Request("add_"& aDiffList( os_id_column, rowNum ) &"_"& aDiffList( prod_id_column, rowNum ) ) <> "" Then OraParameter("NEW_PROD_ID").Value = Request("add_"& aDiffList( os_id_column, rowNum ) &"_"& aDiffList( prod_id_column, rowNum ) ) OraParameter("OS_ID").Value = aDiffList( os_id_column, rowNum ) OraDatabase.ExecuteSQL "BEGIN pk_Product.Add_Product ( :NEW_PROD_ID, :OS_ID, :USER_ID ); END;" End If Next OraDatabase.Parameters.Remove "NEW_PROD_ID" OraDatabase.Parameters.Remove "OS_ID" OraDatabase.Parameters.Remove "USER_ID" objEH.CatchORA ( OraSession ) End Sub '---------------------------------------------------------------------------------------------------------------------------------- Sub HideProducts() Dim aDiffList, numOfRows, rowNum, OraParameter Const os_id_column = 2 Const old_prod_id_column = 1 '/* Get Latest from Release Manager */ OraDatabase.Parameters.Add "BOM_ID", parBom_id, ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "RTAG_ID", objFormCollector.Item("rtag_id_fk"), ORAPARM_INPUT, ORATYPE_NUMBER Query_String = ReadFile( rootPath & "queries\CompareBomWithLatestFromRM.sql" ) If objFormCollector.Item ("product_state_used") = "Y" Then Query_String = Replace( Query_String, "/* AND rc.PRODUCT_STATE IN (3, 5) */", " AND rc.PRODUCT_STATE IN (3, 5)") End If Set rsQry = OraDatabase.DbCreateDynaset( Query_String, ORADYN_DEFAULT ) OraDatabase.Parameters.Remove "BOM_ID" OraDatabase.Parameters.Remove "RTAG_ID" '-- Get Rows If rsQry.RecordCount > 0 Then aDiffList = rsQry.GetRows() Else '-- No differences with Release Manager, hence exit Exit Sub End If '/* Hide Versions */ OraDatabase.Parameters.Add "NEW_PROD_ID", 0, ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "OS_ID", 0, ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "USER_ID", objAccessControl.UserId, ORAPARM_INPUT, ORATYPE_NUMBER Set OraParameter = OraDatabase.Parameters On Error Resume Next objEH.TryORA ( OraSession ) numOfRows = UBound( aDiffList, 2 ) For rowNum = 0 To numOfRows If Request("hide_"& aDiffList( os_id_column, rowNum ) &"_"& aDiffList( old_prod_id_column, rowNum ) ) <> "" Then OraParameter("NEW_PROD_ID").Value = Request("hide_"& aDiffList( os_id_column, rowNum ) &"_"& aDiffList( old_prod_id_column, rowNum ) ) OraParameter("OS_ID").Value = aDiffList( os_id_column, rowNum ) OraDatabase.ExecuteSQL "BEGIN pk_Product.Hide_Product ( :NEW_PROD_ID, :OS_ID, :USER_ID ); END;" End If Next '--- Log Action --- 'objEH.LogAction _ 'objAccessControl.UserId, _ 'enumAT_EVENT_COMMENT, _ '"Sub UpdateProducts for OS list="& Request("spos_id_list"), _ 'SCRIPT_NAME, _ '"Updated Products with new versions.", _ 'OraDatabase OraDatabase.Parameters.Remove "NEW_PROD_ID" OraDatabase.Parameters.Remove "OS_ID" OraDatabase.Parameters.Remove "USER_ID" objEH.CatchORA ( OraSession ) End Sub '---------------------------------------------------------------------------------------------------------------------------------- Sub HidePatches() Dim aDiffList, numOfRows, rowNum, OraParameter Const os_id_column = 2 Const prod_id_column = 1 '/* Get Latest from Release Manager */ OraDatabase.Parameters.Add "BOM_ID", parBom_id, ORAPARM_INPUT, ORATYPE_NUMBER Set rsQry = OraDatabase.DbCreateDynaset( GetQuery ("NewPatches.sql"), ORADYN_DEFAULT ) OraDatabase.Parameters.Remove "BOM_ID" '-- Get Rows If rsQry.RecordCount > 0 Then aDiffList = rsQry.GetRows() Else '-- No differencses with Release Manager, hence exit Exit Sub End If '/* Hide Versions */ OraDatabase.Parameters.Add "NEW_PROD_ID", 0, ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "OS_ID", 0, ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "USER_ID", objAccessControl.UserId, ORAPARM_INPUT, ORATYPE_NUMBER Set OraParameter = OraDatabase.Parameters objEH.TryORA ( OraSession ) On Error Resume Next numOfRows = UBound( aDiffList, 2 ) For rowNum = 0 To numOfRows If Request("hide_"& aDiffList( os_id_column, rowNum ) &"_"& aDiffList( prod_id_column, rowNum ) ) <> "" Then OraParameter("NEW_PROD_ID").Value = Request("hide_"& aDiffList( os_id_column, rowNum ) &"_"& aDiffList( prod_id_column, rowNum ) ) OraParameter("OS_ID").Value = aDiffList( os_id_column, rowNum ) OraDatabase.ExecuteSQL "BEGIN pk_Product.Hide_Product ( :NEW_PROD_ID, :OS_ID, :USER_ID ); END;" End If Next OraDatabase.Parameters.Remove "NEW_PROD_ID" OraDatabase.Parameters.Remove "OS_ID" OraDatabase.Parameters.Remove "USER_ID" objEH.CatchORA ( OraSession ) End Sub '---------------------------------------------------------------------------------------------------------------------------------- %> <% '------------ RUN BEFORE PAGE RENDER ---------- Call GetFormDetails ( parBom_id, objFormCollector ) If Request("action") <> "" Then ' -- Need to provide some level of validation ' Cannot handle multiple updates to the same package ' These can be detected by examining all the Update requests that have badly formed values Dim Item For Each Item In Request.Form If InStr(1, Item, "update_" , 1) = 1 Then If InStr( 1, Request.Form(Item), ",", 1) <> 0 Then errorMessage = "The selected set of packages to be updated is incorrect
" &_ "The selection attempts to update a target package with more than one version of a package" Exit For End If End If Next ' --- Form is Valid --- If isEmpty(errorMessage) Then Call UpdateProducts() Call AddPatches() Call HideProducts() Call HidePatches() If objEH.Finally Then Call OpenInParentWindow ("Bom_Home.asp?UPDATED=OK"& objPMod.ComposeURLWithout("rfile") ) Call CloseWindow() End If Else Response.Write ("WTF") End If End If '---------------------------------------------- %> Deployment Manager <% '-- FROM START -------------------------------------------------------------------------------------------------------------- objFormComponent.FormName = "FormName" objFormComponent.Action = SCRIPT_NAME objFormComponent.OnSubmit = "ShowProgress();" Call objFormComponent.FormStart() %> <%=objPMod.ComposeHiddenTags()%> <% Call objFormComponent.FormEnd() '-- FROM END ---------------------------------------------------------------------------------------------------------------- %>
 Update Products
Update Products, selecting the latest from "Release Manager".
<%=ProgressBar()%>  
<% If objFormCollector.Item("rtag_id_fk") = "" Then Call Messenger ( "This BOM does not have Release Manager Reference release.
Please edit BOM properties first.
", 1, "100%" ) End If If NOT isEmpty(errorMessage) Then Call Messenger ( errorMessage, 1, "100%" ) End If %> Select Products and click Update. <% OraDatabase.Parameters.Add "BOM_ID", parBom_id, ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "RTAG_ID", objFormCollector.Item("rtag_id_fk"), ORAPARM_INPUT, ORATYPE_NUMBER Query_String = ReadFile( rootPath & "queries\CompareBomWithLatestFromRM.sql" ) If objFormCollector.Item ("product_state_used") = "Y" Then Query_String = Replace( Query_String, "/* AND rc.PRODUCT_STATE = 3 */", " AND rc.PRODUCT_STATE = 3") End If Set rsQry = OraDatabase.DbCreateDynaset( Query_String, ORADYN_DEFAULT ) Dim rsTemp Dim hideResult() Dim numHiddenProducts Dim len_hideResult Dim i_hideResult ' Evaluate hidden status of products ' Create a hask of 'keys' to assist in identifying packages with multiple updates numHiddenProducts = 0 len_hideResult = 0 While (NOT rsQry.BOF) AND (NOT rsQry.EOF) key = rsQry("os_id") & "_" & rsQry("prod_id") objList.Item(key) = objList.Item(key) + 1 Set rsTemp = OraDatabase.DbCreateDynaset( "SELECT * FROM HIDE_PRODUCTS WHERE OS_ID="& rsQry("os_id") &" AND PROD_ID="& rsQry("prod_id"), ORADYN_DEFAULT ) len_hideResult = len_hideResult + 1 ReDim Preserve hideResult(len_hideResult) If rsTemp.RecordCount = 0 Then hideResult(len_hideResult - 1) = False Else hideResult(len_hideResult - 1) = True numHiddenProducts = numHiddenProducts + 1 End If rsTemp.Close() Set rsTemp = nothing rsQry.MoveNext Wend If (rsQry.RecordCount = numHiddenProducts) Then %> <%ElseIf (rsQry.RecordCount < 1) Then%> <%End If ' Now render the product rows themselves ' Have a hask of products with issues currPkg_id = 0 rsQry.MoveFirst i_hideResult = 0 While (NOT rsQry.BOF) AND (NOT rsQry.EOF) key = rsQry("os_id") & "_" & rsQry("prod_id") If hideResult(i_hideResult) = False Then If currPkg_id <> rsQry("pkg_id") Then %> <% currPkg_id = rsQry("pkg_id") End If %> <% End If rsQry.MoveNext i_hideResult = i_hideResult + 1 Wend %> <% Dim strAdd, rsAdd, strHide Set rsQry = OraDatabase.DbCreateDynaset( GetQuery ("NewPatches.sql"), ORADYN_DEFAULT ) Set rsAdd = OraDatabase.DbCreateDynaset( GetQuery ("NewPatches.sql"), ORADYN_DEFAULT ) currPkg_id = 0 If rsQry.RecordCount > 0 Then While (NOT rsAdd.BOF) AND (NOT rsAdd.EOF) Set rsTemp = OraDatabase.DbCreateDynaset( "SELECT * FROM HIDE_PRODUCTS WHERE OS_ID="& rsAdd("os_id") &" AND PROD_ID="& rsAdd("prod_id"), ORADYN_DEFAULT ) If rsTemp.RecordCount = 0 Then strAdd = strAdd + "'add_"&rsAdd("os_id") &"_"& rsAdd("prod_id")&"'," strHide = strHide + "'hide_"&rsAdd("os_id") &"_"& rsAdd("prod_id")&"'," End If rsAdd.MoveNext Wend rsAdd.Close() rsTemp.Close() Set rsAdd = nothing Set rsTemp = nothing If NOT IsEmpty(strAdd) Then strAdd = Mid(strAdd, 1, Len(strAdd)-1) + ", 'checkalladd'" End If If NOT IsEmpty(strHide) Then strHide = Mid(strHide, 1, Len(strHide)-1) + ", 'checkallhide'" End If %> <%If NOT IsEmpty(strAdd) Then%> <% End If While (NOT rsQry.BOF) AND (NOT rsQry.EOF) Set rsTemp = OraDatabase.DbCreateDynaset( "SELECT * FROM HIDE_PRODUCTS WHERE OS_ID="& rsQry("os_id") &" AND PROD_ID="& rsQry("prod_id"), ORADYN_DEFAULT ) If rsTemp.RecordCount = 0 Then If currPkg_id <> rsQry("pkg_id") Then %> <% currPkg_id = rsQry("pkg_id") End If %> <% End If rsTemp.Close() Set rsTemp = nothing rsQry.MoveNext Wend End If %>
Update
Location
Version
Hide
Latest
No Products to Update (some products are hidden and status of those has not been shown)
No Products to Update.
<%=rsQry("prod_name")%>
" value="<%=rsQry("latest_prod_id")%>"> <%If objList.Item(key) > 1 Then%> <%End If%> " align="absmiddle" border="0"><%=rsQry("prod_location")%> <%=rsQry("prod_version")%> <%If NOT objHideList.Exists(key) Then%> " value="<%=rsQry("prod_id")%>"> <%End If%> <%objHideList.Item(key) = 1%> <%=rsQry("rm_latest_version")%>
Add  
Location
Version
Hide
Comments
       
<%=rsQry("prod_name")%>
 
" value="<%=rsQry("prod_id")%>"> " align="absmiddle" border="0"><%=rsQry("prod_location")%> <%=rsQry("prod_version")%> " value="<%=rsQry("prod_id")%>"> <%=rsQry("comments")%>
<% OraDatabase.Parameters.Remove "RTAG_ID" OraDatabase.Parameters.Remove "BOM_ID" rsQry.Close Set rsQry = Nothing %>