| Line 1... |
Line 1... |
| 1 |
<%@LANGUAGE="VBSCRIPT"%>
|
1 |
<%@LANGUAGE="VBSCRIPT"%>
|
| 2 |
<%
|
2 |
<%
|
| 3 |
'=====================================================
|
3 |
'=====================================================
|
| 4 |
'| |
|
4 |
'| |
|
| 5 |
'| ADMIN Page |
|
5 |
'| ADMIN Page |
|
| 6 |
'| Daemon Instructions |
|
6 |
'| Daemon Instructions |
|
| 7 |
'| |
|
7 |
'| |
|
| 8 |
'=====================================================
|
8 |
'=====================================================
|
| 9 |
%>
|
9 |
%>
|
| 10 |
<%
|
10 |
<%
|
| 11 |
Option explicit
|
11 |
Option explicit
|
| 12 |
' Good idea to set when using redirect
|
12 |
' Good idea to set when using redirect
|
| 13 |
Response.Expires = 0 ' always load the page, dont store
|
13 |
Response.Expires = 0 ' always load the page, dont store
|
| 14 |
%>
|
14 |
%>
|
| 15 |
<!--#include file="common/conf.asp"-->
|
15 |
<!--#include file="common/conf.asp"-->
|
| 16 |
<!--#include file="common/globals.asp"-->
|
16 |
<!--#include file="common/globals.asp"-->
|
| 17 |
<!--#include file="common/formating.asp"-->
|
17 |
<!--#include file="common/formating.asp"-->
|
| 18 |
<!--#include file="common/qstr.asp"-->
|
18 |
<!--#include file="common/qstr.asp"-->
|
| 19 |
<!--#include file="common/common_subs.asp"-->
|
19 |
<!--#include file="common/common_subs.asp"-->
|
| 20 |
<!--#include file="sec/Crypt.asp"-->
|
20 |
<!--#include file="sec/Crypt.asp"-->
|
| 21 |
<!--#include file="common/_form_window_common.asp"-->
|
21 |
<!--#include file="common/_form_window_common.asp"-->
|
| 22 |
<!--#include file="_action_buttons.asp"-->
|
22 |
<!--#include file="_action_buttons.asp"-->
|
| 23 |
|
23 |
|
| 24 |
<!--#include file="class/classActionButtonControl.asp"-->
|
24 |
<!--#include file="class/classActionButtonControl.asp"-->
|
| 25 |
<!--#include file="common/daemon_instructions.asp"-->
|
25 |
<!--#include file="common/daemon_instructions.asp"-->
|
| 26 |
|
26 |
|
| 27 |
<%
|
27 |
<%
|
| 28 |
'------------ ACCESS CONTROL ------------------
|
28 |
'------------ ACCESS CONTROL ------------------
|
| 29 |
%>
|
29 |
%>
|
| 30 |
<!--#include file="_access_control_general.asp"-->
|
30 |
<!--#include file="_access_control_general.asp"-->
|
| 31 |
<!--#include file="_access_control_login.asp"-->
|
31 |
<!--#include file="_access_control_login.asp"-->
|
| 32 |
<%
|
32 |
<%
|
| 33 |
'------------ Variable Definition -------------
|
33 |
'------------ Variable Definition -------------
|
| 34 |
Dim objBtnControl
|
34 |
Dim objBtnControl
|
| 35 |
Dim parSortOrder
|
35 |
Dim parSortOrder
|
| 36 |
'------------ Constants Declaration -----------
|
36 |
'------------ Constants Declaration -----------
|
| 37 |
'------------ Variable Init -------------------
|
37 |
'------------ Variable Init -------------------
|
| 38 |
Set objBtnControl = New ActionButtonControl
|
38 |
Set objBtnControl = New ActionButtonControl
|
| 39 |
parSortOrder = Request("sort")
|
39 |
parSortOrder = Request("sort")
|
| 40 |
If IsNull(parSortOrder) OR parSortOrder = "" Then
|
40 |
If IsNull(parSortOrder) OR parSortOrder = "" Then
|
| 41 |
parSortOrder = "0"
|
41 |
parSortOrder = "0"
|
| 42 |
End If
|
42 |
End If
|
| 43 |
'----------------------------------------------
|
43 |
'----------------------------------------------
|
| 44 |
%>
|
44 |
%>
|
| 45 |
<%
|
45 |
<%
|
| 46 |
'--------------------------------------------------------------------------------------------
|
46 |
'--------------------------------------------------------------------------------------------
|
| 47 |
' Cleans up the daemon instructions table to remove old data that might have become stranded
|
47 |
' Cleans up the daemon instructions table to remove old data that might have become stranded
|
| 48 |
' due to crashed daemons or failing build machines.
|
48 |
' due to crashed daemons or failing build machines.
|
| 49 |
'--------------------------------------------------------------------------------------------
|
49 |
'--------------------------------------------------------------------------------------------
|
| 50 |
Sub CleanupOldData()
|
50 |
Sub CleanupOldData()
|
| 51 |
On Error Resume Next
|
51 |
On Error Resume Next
|
| 52 |
objEH.TryORA ( OraSession )
|
52 |
objEH.TryORA ( OraSession )
|
| 53 |
OraDatabase.ExecuteSQL _
|
53 |
OraDatabase.ExecuteSQL _
|
| 54 |
"BEGIN PK_BUILDAPI.cleanup_stranded_daemon_insts; END;"
|
54 |
"BEGIN PK_BUILDAPI.cleanup_stranded_daemon_insts; END;"
|
| 55 |
objEH.CatchORA ( OraSession )
|
55 |
objEH.CatchORA ( OraSession )
|
| 56 |
End Sub
|
56 |
End Sub
|
| 57 |
|
57 |
|
| 58 |
|
58 |
|
| 59 |
%>
|
59 |
%>
|
| 60 |
|
60 |
|
| 61 |
<%
|
61 |
<%
|
| 62 |
' Clean up old data
|
62 |
' Clean up old data
|
| 63 |
CleanupOldData
|
63 |
CleanupOldData
|
| 64 |
|
64 |
|
| 65 |
' Page Access Condition
|
65 |
' Page Access Condition
|
| 66 |
%>
|
66 |
%>
|
| 67 |
<script language="JavaScript" type="text/javascript">
|
67 |
<script language="JavaScript" type="text/javascript">
|
| 68 |
<!--
|
68 |
<!--
|
| 69 |
|
69 |
|
| 70 |
// This function is designed to be called when a user resets the in-progress value from YES back to NO
|
70 |
// This function is designed to be called when a user resets the in-progress value from YES back to NO
|
| 71 |
function reset_in_progress(instId)
|
71 |
function reset_in_progress(instId)
|
| 72 |
{
|
72 |
{
|
| 73 |
var proceed = false;
|
73 |
var proceed = false;
|
| 74 |
var s;
|
74 |
var s;
|
| 75 |
s = '_ResetDaemonInstruction.asp';
|
75 |
s = '_ResetDaemonInstruction.asp';
|
| 76 |
s += '?inst_id=' + instId;
|
76 |
s += '?inst_id=' + instId;
|
| 77 |
|
77 |
|
| 78 |
proceed = confirm('Are you sure you want to reset this instructions in-progress flag?\n\n' +
|
78 |
proceed = confirm('Are you sure you want to reset this instructions in-progress flag?\n\n' +
|
| 79 |
'You should ensure that the daemons are not operating upon this instruction first.\n\n' +
|
79 |
'You should ensure that the daemons are not operating upon this instruction first.\n\n' +
|
| 80 |
'Check the scheduled date/time. Does it appear so far in the past that it is unlikely\n' +
|
80 |
'Check the scheduled date/time. Does it appear so far in the past that it is unlikely\n' +
|
| 81 |
'a daemon is still undertaking the work for the instruction?\n\n' +
|
81 |
'a daemon is still undertaking the work for the instruction?\n\n' +
|
| 82 |
'Press OK to reset, otherwise press CANCEL\n\n' );
|
82 |
'Press OK to reset, otherwise press CANCEL\n\n' );
|
| 83 |
|
83 |
|
| 84 |
if (proceed == true) {
|
84 |
if (proceed == true) {
|
| 85 |
document.location = s;
|
85 |
document.location = s;
|
| 86 |
}
|
86 |
}
|
| 87 |
}
|
87 |
}
|
| 88 |
//-->
|
88 |
//-->
|
| 89 |
</script>
|
89 |
</script>
|
| 90 |
|
90 |
|
| 91 |
<html>
|
91 |
<html>
|
| 92 |
<head>
|
92 |
<head>
|
| 93 |
<title>Daemon Instructions Administration</title>
|
93 |
<title>Daemon Instructions Administration</title>
|
| 94 |
<meta HTTP-EQUIV="Pragma" CONTENT="no-cache">
|
94 |
<link rel="shortcut icon" href="<%=FavIcon%>"/>
|
| 95 |
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
95 |
<meta HTTP-EQUIV="Pragma" CONTENT="no-cache">
|
| 96 |
<link rel="stylesheet" href="images/release_manager_style.css" type="text/css">
|
96 |
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
| 97 |
<link rel="stylesheet" href="images/navigation.css" type="text/css">
|
97 |
<link rel="stylesheet" href="images/release_manager_style.css" type="text/css">
|
| 98 |
<script language="JavaScript" src="images/common.js"></script>
|
98 |
<link rel="stylesheet" href="images/navigation.css" type="text/css">
|
| 99 |
<!--#include file="_jquery_includes.asp"-->
|
99 |
<script language="JavaScript" src="images/common.js"></script>
|
| 100 |
<!-- DROPDOWN MENUS -->
|
100 |
<!--#include file="_jquery_includes.asp"-->
|
| 101 |
<!--#include file="_menu_def.asp"-->
|
101 |
<!-- DROPDOWN MENUS -->
|
| 102 |
<script language="JavaScript1.2" src="images/popup_menu.js"></script>
|
102 |
<!--#include file="_menu_def.asp"-->
|
| 103 |
</head>
|
103 |
<script language="JavaScript1.2" src="images/popup_menu.js"></script>
|
| 104 |
<body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="0" >
|
104 |
</head>
|
| 105 |
<!-- MENU LAYERS -------------------------------------->
|
105 |
<body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="0" >
|
| 106 |
<div id="popmenu" class="menuskin" onMouseover="clearhidemenu();highlightmenu(event,'on')" onMouseout="highlightmenu(event,'off');dynamichide(event)">
|
106 |
<!-- MENU LAYERS -------------------------------------->
|
| 107 |
</div>
|
107 |
<div id="popmenu" class="menuskin" onMouseover="clearhidemenu();highlightmenu(event,'on')" onMouseout="highlightmenu(event,'off');dynamichide(event)">
|
| 108 |
<!-- TIPS LAYERS -------------------------------------->
|
108 |
</div>
|
| 109 |
<div id="formTipsLayer" style="position: absolute; z-index: 1000; visibility: hidden; left:0; top: 0; width: 10"> </div>
|
109 |
<!-- TIPS LAYERS -------------------------------------->
|
| 110 |
<!-- HEADER -->
|
110 |
<div id="formTipsLayer" style="position: absolute; z-index: 1000; visibility: hidden; left:0; top: 0; width: 10"> </div>
|
| 111 |
<!--#include file="_header.asp"-->
|
111 |
<!-- HEADER -->
|
| 112 |
|
112 |
<!--#include file="_header.asp"-->
|
| 113 |
<%
|
113 |
|
| 114 |
'-- FROM START ---------------------------------------------------------------------------------------------------------
|
114 |
<%
|
| 115 |
objFormComponent.FormName = "DAEMON_INSTRUCTIONS"
|
115 |
'-- FROM START ---------------------------------------------------------------------------------------------------------
|
| 116 |
objFormComponent.Action = ScriptName
|
116 |
objFormComponent.FormName = "DAEMON_INSTRUCTIONS"
|
| 117 |
objFormComponent.OnSubmit = "ShowProgress();"
|
117 |
objFormComponent.Action = ScriptName
|
| 118 |
Call objFormComponent.FormStart()
|
118 |
objFormComponent.OnSubmit = "ShowProgress();"
|
| 119 |
%>
|
119 |
Call objFormComponent.FormStart()
|
| 120 |
<table width="100%" border="0" cellspacing="3" cellpadding="0" >
|
120 |
%>
|
| 121 |
|
121 |
<table width="100%" border="0" cellspacing="3" cellpadding="0" >
|
| 122 |
<div align="left" class=" body_col">
|
122 |
|
| 123 |
<br>Current List of DAEMON INSTRUCTIONS
|
123 |
<div align="left" class=" body_col">
|
| 124 |
</div>
|
124 |
<br>Current List of DAEMON INSTRUCTIONS
|
| 125 |
<tr></tr>
|
125 |
</div>
|
| 126 |
<tr>
|
126 |
<tr></tr>
|
| 127 |
<td></td>
|
127 |
<tr>
|
| 128 |
<!-- DAEMON INSTRUCTION DETAILS +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
|
128 |
<td></td>
|
| 129 |
<td align="left" nowrap background="images/bg_table_col.gif" class="body_col">
|
129 |
<!-- DAEMON INSTRUCTION DETAILS +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
|
| 130 |
<%If parSortOrder = "1" Then%>
|
130 |
<td align="left" nowrap background="images/bg_table_col.gif" class="body_col">
|
| 131 |
<a href='admin_daemon_instructions.asp?sort=1a'>
|
131 |
<%If parSortOrder = "1" Then%>
|
| 132 |
<%ElseIf parSortOrder = "1a" Then%>
|
132 |
<a href='admin_daemon_instructions.asp?sort=1a'>
|
| 133 |
<a href='admin_daemon_instructions.asp?sort=1b'>
|
133 |
<%ElseIf parSortOrder = "1a" Then%>
|
| 134 |
<%ElseIf parSortOrder = "1b" Then%>
|
134 |
<a href='admin_daemon_instructions.asp?sort=1b'>
|
| 135 |
<a href='admin_daemon_instructions.asp?sort=1c'>
|
135 |
<%ElseIf parSortOrder = "1b" Then%>
|
| 136 |
<%Else%>
|
136 |
<a href='admin_daemon_instructions.asp?sort=1c'>
|
| 137 |
<a href='admin_daemon_instructions.asp?sort=1'>
|
137 |
<%Else%>
|
| 138 |
<%End If%>
|
138 |
<a href='admin_daemon_instructions.asp?sort=1'>
|
| 139 |
OPERATION
|
139 |
<%End If%>
|
| 140 |
</td>
|
140 |
OPERATION
|
| 141 |
<td align="left" nowrap background="images/bg_table_col.gif" class="body_col">
|
141 |
</td>
|
| 142 |
<%If parSortOrder = "2" Then%>
|
142 |
<td align="left" nowrap background="images/bg_table_col.gif" class="body_col">
|
| 143 |
<a href='admin_daemon_instructions.asp?sort=2a'>
|
143 |
<%If parSortOrder = "2" Then%>
|
| 144 |
<%ElseIf parSortOrder = "2a" Then%>
|
144 |
<a href='admin_daemon_instructions.asp?sort=2a'>
|
| 145 |
<a href='admin_daemon_instructions.asp?sort=2b'>
|
145 |
<%ElseIf parSortOrder = "2a" Then%>
|
| 146 |
<%Else%>
|
146 |
<a href='admin_daemon_instructions.asp?sort=2b'>
|
| 147 |
<a href='admin_daemon_instructions.asp?sort=2'>
|
147 |
<%Else%>
|
| 148 |
<%End If%>
|
148 |
<a href='admin_daemon_instructions.asp?sort=2'>
|
| 149 |
PROJECT
|
149 |
<%End If%>
|
| 150 |
</td>
|
150 |
PROJECT
|
| 151 |
<td align="left" nowrap background="images/bg_table_col.gif" class="body_col">
|
151 |
</td>
|
| 152 |
<%If parSortOrder = "3" Then%>
|
152 |
<td align="left" nowrap background="images/bg_table_col.gif" class="body_col">
|
| 153 |
<a href='admin_daemon_instructions.asp?sort=3a'>
|
153 |
<%If parSortOrder = "3" Then%>
|
| 154 |
<%Else%>
|
154 |
<a href='admin_daemon_instructions.asp?sort=3a'>
|
| 155 |
<a href='admin_daemon_instructions.asp?sort=3'>
|
155 |
<%Else%>
|
| 156 |
<%End If%>
|
156 |
<a href='admin_daemon_instructions.asp?sort=3'>
|
| 157 |
RELEASE
|
157 |
<%End If%>
|
| 158 |
</td>
|
158 |
RELEASE
|
| 159 |
<td align="left" nowrap background="images/bg_table_col.gif" class="body_col">MODE</td>
|
159 |
</td>
|
| 160 |
<td align="left" nowrap background="images/bg_table_col.gif" class="body_col">
|
160 |
<td align="left" nowrap background="images/bg_table_col.gif" class="body_col">MODE</td>
|
| 161 |
<a href='admin_daemon_instructions.asp?sort=4'>PACKAGE
|
161 |
<td align="left" nowrap background="images/bg_table_col.gif" class="body_col">
|
| 162 |
</td>
|
162 |
<a href='admin_daemon_instructions.asp?sort=4'>PACKAGE
|
| 163 |
<td align="left" nowrap background="images/bg_table_col.gif" class="body_col">VERSION</td>
|
163 |
</td>
|
| 164 |
<td align="left" nowrap background="images/bg_table_col.gif" class="body_col">
|
164 |
<td align="left" nowrap background="images/bg_table_col.gif" class="body_col">VERSION</td>
|
| 165 |
<a href='admin_daemon_instructions.asp?sort=0'>SCHEDULED TIME<br>(<SPAN style=color:Red>Red</SPAN> = overdue)<br>(<SPAN style=color:Green>Green</SPAN> = ready)</td>
|
165 |
<td align="left" nowrap background="images/bg_table_col.gif" class="body_col">
|
| 166 |
<td align="left" nowrap background="images/bg_table_col.gif" class="body_col">REPEAT</td>
|
166 |
<a href='admin_daemon_instructions.asp?sort=0'>SCHEDULED TIME<br>(<SPAN style=color:Red>Red</SPAN> = overdue)<br>(<SPAN style=color:Green>Green</SPAN> = ready)</td>
|
| 167 |
<td align="left" nowrap background="images/bg_table_col.gif" class="body_col">
|
167 |
<td align="left" nowrap background="images/bg_table_col.gif" class="body_col">REPEAT</td>
|
| 168 |
<a href='admin_daemon_instructions.asp?sort=5'>ADDED BY
|
168 |
<td align="left" nowrap background="images/bg_table_col.gif" class="body_col">
|
| 169 |
</td>
|
169 |
<a href='admin_daemon_instructions.asp?sort=5'>ADDED BY
|
| 170 |
<td align="left" nowrap background="images/bg_table_col.gif" class="body_col">LAST<br>UPDATED</td>
|
170 |
</td>
|
| 171 |
<td align="left" nowrap background="images/bg_table_col.gif" class="body_col">
|
171 |
<td align="left" nowrap background="images/bg_table_col.gif" class="body_col">LAST<br>UPDATED</td>
|
| 172 |
<a href='admin_daemon_instructions.asp?sort=6'>IN<br>PROGRESS
|
172 |
<td align="left" nowrap background="images/bg_table_col.gif" class="body_col">
|
| 173 |
</td>
|
173 |
<a href='admin_daemon_instructions.asp?sort=6'>IN<br>PROGRESS
|
| 174 |
<td align="left" nowrap background="images/bg_table_col.gif" class="body_col">EDIT/DELETE</td>
|
174 |
</td>
|
| 175 |
</tr>
|
175 |
<td align="left" nowrap background="images/bg_table_col.gif" class="body_col">EDIT/DELETE</td>
|
| 176 |
<tr>
|
176 |
</tr>
|
| 177 |
<td colspan="13" background="images/bg_table_border.gif"><img src="images/spacer.gif" width="1" height="1"></td>
|
177 |
<tr>
|
| 178 |
</tr>
|
178 |
<td colspan="13" background="images/bg_table_border.gif"><img src="images/spacer.gif" width="1" height="1"></td>
|
| 179 |
|
179 |
</tr>
|
| 180 |
<%
|
180 |
|
| 181 |
' Load some action buttons
|
181 |
<%
|
| 182 |
Call objBtnControl.LoadActionButtons ( Array("btnEditDaemonInst", "btnDeleteDaemonInst"), OraDatabase )
|
182 |
' Load some action buttons
|
| 183 |
objBtnControl.ButtonSpacer = 1
|
183 |
Call objBtnControl.LoadActionButtons ( Array("btnEditDaemonInst", "btnDeleteDaemonInst"), OraDatabase )
|
| 184 |
|
184 |
objBtnControl.ButtonSpacer = 1
|
| 185 |
Dim rsQry
|
185 |
|
| 186 |
Dim bInProgress
|
186 |
Dim rsQry
|
| 187 |
Dim bIsReady
|
187 |
Dim bInProgress
|
| 188 |
Dim bIsOverdue
|
188 |
Dim bIsReady
|
| 189 |
Dim daemonInstId ' This variable is needed to support the action buttons to Edit/Delete
|
189 |
Dim bIsOverdue
|
| 190 |
Dim bResetInProgressEnabled
|
190 |
Dim daemonInstId ' This variable is needed to support the action buttons to Edit/Delete
|
| 191 |
Dim sortClause
|
191 |
Dim bResetInProgressEnabled
|
| 192 |
Dim sortText
|
192 |
Dim sortClause
|
| 193 |
|
193 |
Dim sortText
|
| 194 |
' determine if user can reset the in-progress state of a daemon instruction
|
194 |
|
| 195 |
bResetInProgressEnabled = UserAllowedToResetInProgress()
|
195 |
' determine if user can reset the in-progress state of a daemon instruction
|
| 196 |
|
196 |
bResetInProgressEnabled = UserAllowedToResetInProgress()
|
| 197 |
' query the daemon_instructions table and also create an indication of an overdue instruction,
|
197 |
|
| 198 |
' which is defined as being one that was scheduled for action
|
198 |
' query the daemon_instructions table and also create an indication of an overdue instruction,
|
| 199 |
Select Case (parSortOrder)
|
199 |
' which is defined as being one that was scheduled for action
|
| 200 |
Case "1"
|
200 |
Select Case (parSortOrder)
|
| 201 |
sortClause = " ORDER BY op_code, scheduled_datetime"
|
201 |
Case "1"
|
| 202 |
sortText = "Data sorted by Operation, Scheduled time"
|
202 |
sortClause = " ORDER BY op_code, scheduled_datetime"
|
| 203 |
Case "1a"
|
203 |
sortText = "Data sorted by Operation, Scheduled time"
|
| 204 |
sortClause = " ORDER BY op_code, proj_name, scheduled_datetime"
|
204 |
Case "1a"
|
| 205 |
sortText = "Data sorted by Operation, Project, Scheduled time"
|
205 |
sortClause = " ORDER BY op_code, proj_name, scheduled_datetime"
|
| 206 |
Case "1b"
|
206 |
sortText = "Data sorted by Operation, Project, Scheduled time"
|
| 207 |
sortClause = " ORDER BY op_code, proj_name, rtag_name, scheduled_datetime"
|
207 |
Case "1b"
|
| 208 |
sortText = "Data sorted by Operation, Project, Release, Scheduled time"
|
208 |
sortClause = " ORDER BY op_code, proj_name, rtag_name, scheduled_datetime"
|
| 209 |
Case "1c"
|
209 |
sortText = "Data sorted by Operation, Project, Release, Scheduled time"
|
| 210 |
sortClause = " ORDER BY op_code, proj_name, rtag_name, pkg_name, scheduled_datetime"
|
210 |
Case "1c"
|
| 211 |
sortText = "Data sorted by Operation, Project, Release, Package, Scheduled time"
|
211 |
sortClause = " ORDER BY op_code, proj_name, rtag_name, pkg_name, scheduled_datetime"
|
| 212 |
Case "2"
|
212 |
sortText = "Data sorted by Operation, Project, Release, Package, Scheduled time"
|
| 213 |
sortClause = " ORDER BY proj_name, scheduled_datetime"
|
213 |
Case "2"
|
| 214 |
sortText = "Data sorted by Project, Scheduled time"
|
214 |
sortClause = " ORDER BY proj_name, scheduled_datetime"
|
| 215 |
Case "2a"
|
215 |
sortText = "Data sorted by Project, Scheduled time"
|
| 216 |
sortClause = " ORDER BY proj_name, rtag_name, scheduled_datetime"
|
216 |
Case "2a"
|
| 217 |
sortText = "Data sorted by Project, Release, Scheduled time"
|
217 |
sortClause = " ORDER BY proj_name, rtag_name, scheduled_datetime"
|
| 218 |
Case "2b"
|
218 |
sortText = "Data sorted by Project, Release, Scheduled time"
|
| 219 |
sortClause = " ORDER BY proj_name, rtag_name, pkg_name, scheduled_datetime"
|
219 |
Case "2b"
|
| 220 |
sortText = "Data sorted by Project, Release, Package, Scheduled time"
|
220 |
sortClause = " ORDER BY proj_name, rtag_name, pkg_name, scheduled_datetime"
|
| 221 |
Case "3"
|
221 |
sortText = "Data sorted by Project, Release, Package, Scheduled time"
|
| 222 |
sortClause = " ORDER BY rtag_name, scheduled_datetime"
|
222 |
Case "3"
|
| 223 |
sortText = "Data sorted by Release, Scheduled time"
|
223 |
sortClause = " ORDER BY rtag_name, scheduled_datetime"
|
| 224 |
Case "3a"
|
224 |
sortText = "Data sorted by Release, Scheduled time"
|
| 225 |
sortClause = " ORDER BY rtag_name, pkg_name, scheduled_datetime"
|
225 |
Case "3a"
|
| 226 |
sortText = "Data sorted by Release, Package, Scheduled time"
|
226 |
sortClause = " ORDER BY rtag_name, pkg_name, scheduled_datetime"
|
| 227 |
Case "4"
|
227 |
sortText = "Data sorted by Release, Package, Scheduled time"
|
| 228 |
sortClause = " ORDER BY pkg_name, scheduled_datetime"
|
228 |
Case "4"
|
| 229 |
sortText = "Data sorted by Package, Scheduled time"
|
229 |
sortClause = " ORDER BY pkg_name, scheduled_datetime"
|
| 230 |
Case "5"
|
230 |
sortText = "Data sorted by Package, Scheduled time"
|
| 231 |
sortClause = " ORDER BY full_name, scheduled_datetime"
|
231 |
Case "5"
|
| 232 |
sortText = "Data sorted by Added By, Scheduled time"
|
232 |
sortClause = " ORDER BY full_name, scheduled_datetime"
|
| 233 |
Case "6"
|
233 |
sortText = "Data sorted by Added By, Scheduled time"
|
| 234 |
sortClause = " ORDER BY in_progress, scheduled_datetime"
|
234 |
Case "6"
|
| 235 |
sortText = "Data sorted by Progress State, Scheduled time"
|
235 |
sortClause = " ORDER BY in_progress, scheduled_datetime"
|
| 236 |
Case Else
|
236 |
sortText = "Data sorted by Progress State, Scheduled time"
|
| 237 |
sortClause = " ORDER BY scheduled_datetime, proj_name, rtag_name, pkg_name"
|
237 |
Case Else
|
| 238 |
sortText = "Data sorted by Scheduled time"
|
238 |
sortClause = " ORDER BY scheduled_datetime, proj_name, rtag_name, pkg_name"
|
| 239 |
End Select
|
239 |
sortText = "Data sorted by Scheduled time"
|
| 240 |
|
240 |
End Select
|
| 241 |
Set rsQry = OraDatabase.DbCreateDynaset("SELECT DAEMON_INSTRUCTIONS_ID,"&_
|
241 |
|
| 242 |
" proj_id,"&_
|
242 |
Set rsQry = OraDatabase.DbCreateDynaset("SELECT DAEMON_INSTRUCTIONS_ID,"&_
|
| 243 |
" proj_name,"&_
|
243 |
" proj_id,"&_
|
| 244 |
" official,"&_
|
244 |
" proj_name,"&_
|
| 245 |
" rtag_id,"&_
|
245 |
" official,"&_
|
| 246 |
" rtag_name,"&_
|
246 |
" rtag_id,"&_
|
| 247 |
" OP_CODE,"&_
|
247 |
" rtag_name,"&_
|
| 248 |
" pkg_id,"&_
|
248 |
" OP_CODE,"&_
|
| 249 |
" (CASE WHEN NVL2(pv_id,pv_id,0) = 0 THEN 'N/A' ELSE pkg_name END) AS pkg_name,"&_
|
249 |
" pkg_id,"&_
|
| 250 |
" (CASE WHEN NVL2(pv_id,pv_id,0) = 0 THEN 'N/A' ELSE pkg_version END) AS pkg_version,"&_
|
250 |
" (CASE WHEN NVL2(pv_id,pv_id,0) = 0 THEN 'N/A' ELSE pkg_name END) AS pkg_name,"&_
|
| 251 |
" PV_ID,"&_
|
251 |
" (CASE WHEN NVL2(pv_id,pv_id,0) = 0 THEN 'N/A' ELSE pkg_version END) AS pkg_version,"&_
|
| 252 |
" SCHEDULED_DATETIME,"&_
|
252 |
" PV_ID,"&_
|
| 253 |
" REPEAT_SECS,"&_
|
253 |
" SCHEDULED_DATETIME,"&_
|
| 254 |
" ADDED_DATETIME,"&_
|
254 |
" REPEAT_SECS,"&_
|
| 255 |
" USER_ID,"&_
|
255 |
" ADDED_DATETIME,"&_
|
| 256 |
" IN_PROGRESS,"&_
|
256 |
" USER_ID,"&_
|
| 257 |
" (CASE WHEN SCHEDULED_DATETIME <= SYSDATE THEN 1 ELSE 0 END) AS READY,"&_
|
257 |
" IN_PROGRESS,"&_
|
| 258 |
" (CASE WHEN (SCHEDULED_DATETIME + (1/144)) < SYSDATE THEN 1 ELSE 0 END) AS OVERDUE,"&_
|
258 |
" (CASE WHEN SCHEDULED_DATETIME <= SYSDATE THEN 1 ELSE 0 END) AS READY,"&_
|
| 259 |
" full_name,"&_
|
259 |
" (CASE WHEN (SCHEDULED_DATETIME + (1/144)) < SYSDATE THEN 1 ELSE 0 END) AS OVERDUE,"&_
|
| 260 |
" user_email"&_
|
260 |
" full_name,"&_
|
| 261 |
" FROM"&_
|
261 |
" user_email"&_
|
| 262 |
" daemon_instructions"&_
|
262 |
" FROM"&_
|
| 263 |
" LEFT JOIN package_versions USING (pv_id)"&_
|
263 |
" daemon_instructions"&_
|
| 264 |
" LEFT JOIN release_tags USING (rtag_id)"&_
|
264 |
" LEFT JOIN package_versions USING (pv_id)"&_
|
| 265 |
" LEFT JOIN projects USING (proj_id)"&_
|
265 |
" LEFT JOIN release_tags USING (rtag_id)"&_
|
| 266 |
" LEFT JOIN packages USING (pkg_id)"&_
|
266 |
" LEFT JOIN projects USING (proj_id)"&_
|
| 267 |
" LEFT JOIN users USING (user_id)"&_
|
267 |
" LEFT JOIN packages USING (pkg_id)"&_
|
| 268 |
sortClause, ORADYN_DEFAULT )
|
268 |
" LEFT JOIN users USING (user_id)"&_
|
| 269 |
|
269 |
sortClause, ORADYN_DEFAULT )
|
| 270 |
While (NOT rsQry.BOF) AND (NOT rsQry.EOF)
|
270 |
|
| 271 |
|
271 |
While (NOT rsQry.BOF) AND (NOT rsQry.EOF)
|
| 272 |
daemonInstId = rsQry("DAEMON_INSTRUCTIONS_ID")
|
272 |
|
| 273 |
|
273 |
daemonInstId = rsQry("DAEMON_INSTRUCTIONS_ID")
|
| 274 |
If IsNull(rsQry("IN_PROGRESS")) OR rsQry("IN_PROGRESS") = "0" Then
|
274 |
|
| 275 |
bInProgress = False
|
275 |
If IsNull(rsQry("IN_PROGRESS")) OR rsQry("IN_PROGRESS") = "0" Then
|
| 276 |
Else
|
276 |
bInProgress = False
|
| 277 |
bInProgress = True
|
277 |
Else
|
| 278 |
End If
|
278 |
bInProgress = True
|
| 279 |
|
279 |
End If
|
| 280 |
' only flag as overdue if time threshold has been met but the daemon has not marked the instruction as being in progress.
|
280 |
|
| 281 |
If rsQry("OVERDUE") AND NOT bInProgress Then
|
281 |
' only flag as overdue if time threshold has been met but the daemon has not marked the instruction as being in progress.
|
| 282 |
bIsOverdue = True
|
282 |
If rsQry("OVERDUE") AND NOT bInProgress Then
|
| 283 |
Else
|
283 |
bIsOverdue = True
|
| 284 |
bIsOverdue = False
|
284 |
Else
|
| 285 |
End If
|
285 |
bIsOverdue = False
|
| 286 |
|
286 |
End If
|
| 287 |
If rsQry("READY") Then
|
287 |
|
| 288 |
bIsReady = True
|
288 |
If rsQry("READY") Then
|
| 289 |
Else
|
289 |
bIsReady = True
|
| 290 |
bIsReady = False
|
290 |
Else
|
| 291 |
End If
|
291 |
bIsReady = False
|
| 292 |
|
292 |
End If
|
| 293 |
|
293 |
|
| 294 |
%>
|
294 |
|
| 295 |
<tr>
|
295 |
%>
|
| 296 |
<input type="hidden" name="DAEMON_INSTRUCTIONS_ID_" & daemonInstId value=daemonInstId>
|
296 |
<tr>
|
| 297 |
|
297 |
<input type="hidden" name="DAEMON_INSTRUCTIONS_ID_" & daemonInstId value=daemonInstId>
|
| 298 |
<td></td>
|
298 |
|
| 299 |
|
299 |
<td></td>
|
| 300 |
<td align="left" valign="top" class="body_txt">
|
300 |
|
| 301 |
<%=DaemonInstructionOperationName(rsQry("OP_CODE"))%>
|
301 |
<td align="left" valign="top" class="body_txt">
|
| 302 |
</td>
|
302 |
<%=DaemonInstructionOperationName(rsQry("OP_CODE"))%>
|
| 303 |
|
303 |
</td>
|
| 304 |
<td align="left" valign="top" class="body_txt">
|
304 |
|
| 305 |
<%If rsQry("proj_id") <> "" Then%>
|
305 |
<td align="left" valign="top" class="body_txt">
|
| 306 |
<a href='rtree.asp?proj_id=<%=rsQry("proj_id")%>'><%=rsQry("proj_name")%>
|
306 |
<%If rsQry("proj_id") <> "" Then%>
|
| 307 |
<%End If%>
|
307 |
<a href='rtree.asp?proj_id=<%=rsQry("proj_id")%>'><%=rsQry("proj_name")%>
|
| 308 |
</td>
|
308 |
<%End If%>
|
| 309 |
|
309 |
</td>
|
| 310 |
<td align="left" valign="top" class="body_txt">
|
310 |
|
| 311 |
<%If rsQry("rtag_name") <> "" Then%>
|
311 |
<td align="left" valign="top" class="body_txt">
|
| 312 |
<a href='dependencies.asp?rtag_id=<%=rsQry("RTAG_ID")%>'><%=rsQry("rtag_name")%>
|
312 |
<%If rsQry("rtag_name") <> "" Then%>
|
| 313 |
<%End If%>
|
313 |
<a href='dependencies.asp?rtag_id=<%=rsQry("RTAG_ID")%>'><%=rsQry("rtag_name")%>
|
| 314 |
</td>
|
314 |
<%End If%>
|
| 315 |
|
315 |
</td>
|
| 316 |
<td align="left" valign="top" class="body_txt">
|
316 |
|
| 317 |
<%=Get_Official(rsQry("official"))%>
|
317 |
<td align="left" valign="top" class="body_txt">
|
| 318 |
</td>
|
318 |
<%=Get_Official(rsQry("official"))%>
|
| 319 |
|
319 |
</td>
|
| 320 |
<td align="left" valign="top" class="body_txt">
|
320 |
|
| 321 |
<%If (NOT IsNull(rsQry("PV_ID"))) AND (rsQry("PV_ID") <> "") Then%>
|
321 |
<td align="left" valign="top" class="body_txt">
|
| 322 |
<a href='fixed_issues.asp?rtag_id=<%=rsQry("RTAG_ID")%>&pv_id=<%=rsQry("PV_ID")%>'><%=rsQry("pkg_name")%>
|
322 |
<%If (NOT IsNull(rsQry("PV_ID"))) AND (rsQry("PV_ID") <> "") Then%>
|
| 323 |
<%Else%>
|
323 |
<a href='fixed_issues.asp?rtag_id=<%=rsQry("RTAG_ID")%>&pv_id=<%=rsQry("PV_ID")%>'><%=rsQry("pkg_name")%>
|
| 324 |
<%=rsQry("pkg_name")%>
|
324 |
<%Else%>
|
| 325 |
<%End If%>
|
325 |
<%=rsQry("pkg_name")%>
|
| 326 |
</td>
|
326 |
<%End If%>
|
| 327 |
|
327 |
</td>
|
| 328 |
<td align="left" valign="top" class="body_txt">
|
328 |
|
| 329 |
<%=rsQry("pkg_version")%>
|
329 |
<td align="left" valign="top" class="body_txt">
|
| 330 |
</td>
|
330 |
<%=rsQry("pkg_version")%>
|
| 331 |
|
331 |
</td>
|
| 332 |
<td align="left" valign="top" class="body_txt" <%If bIsOverdue Then%>style=color:Red<%Elseif bIsReady Then%>style=color:Green<%End If%>><%=EuroDateTime(rsQry("SCHEDULED_DATETIME"))%></td>
|
332 |
|
| 333 |
|
333 |
<td align="left" valign="top" class="body_txt" <%If bIsOverdue Then%>style=color:Red<%Elseif bIsReady Then%>style=color:Green<%End If%>><%=EuroDateTime(rsQry("SCHEDULED_DATETIME"))%></td>
|
| 334 |
<td align="left" valign="top" class="body_txt"><%=DaemonInstructionRepeatString(rsQry("OP_CODE"), rsQry("REPEAT_SECS"))%></td>
|
334 |
|
| 335 |
|
335 |
<td align="left" valign="top" class="body_txt"><%=DaemonInstructionRepeatString(rsQry("OP_CODE"), rsQry("REPEAT_SECS"))%></td>
|
| 336 |
<td align="left" valign="top" class="body_txt">
|
336 |
|
| 337 |
<%If rsQry("full_name") <> "" AND rsQry("user_email") <> "" Then%>
|
337 |
<td align="left" valign="top" class="body_txt">
|
| 338 |
<a href='mailto:<%=rsQry("user_email")%>' title='<%=rsQry("user_email")%>' class="txt_linked"><%=rsQry("full_name")%></a>
|
338 |
<%If rsQry("full_name") <> "" AND rsQry("user_email") <> "" Then%>
|
| 339 |
<%End If%>
|
339 |
<a href='mailto:<%=rsQry("user_email")%>' title='<%=rsQry("user_email")%>' class="txt_linked"><%=rsQry("full_name")%></a>
|
| 340 |
</td>
|
340 |
<%End If%>
|
| 341 |
|
341 |
</td>
|
| 342 |
<td align="left" valign="top" class="body_txt">
|
342 |
|
| 343 |
<%=EuroDateTime(rsQry("ADDED_DATETIME"))%>
|
343 |
<td align="left" valign="top" class="body_txt">
|
| 344 |
</td>
|
344 |
<%=EuroDateTime(rsQry("ADDED_DATETIME"))%>
|
| 345 |
|
345 |
</td>
|
| 346 |
<td align="left" valign="top" class="body_txt">
|
346 |
|
| 347 |
<%If bInProgress Then%>
|
347 |
<td align="left" valign="top" class="body_txt">
|
| 348 |
<%If bResetInProgressEnabled Then%>
|
348 |
<%If bInProgress Then%>
|
| 349 |
<img src="images/i_reset.gif" onclick="reset_in_progress(<%=daemonInstId%>);"></img>
|
349 |
<%If bResetInProgressEnabled Then%>
|
| 350 |
<%End If%>
|
350 |
<img src="images/i_reset.gif" onclick="reset_in_progress(<%=daemonInstId%>);"></img>
|
| 351 |
YES
|
351 |
<%End If%>
|
| 352 |
<%Else%>
|
352 |
YES
|
| 353 |
NO
|
353 |
<%Else%>
|
| 354 |
<%End If%>
|
354 |
NO
|
| 355 |
</td>
|
355 |
<%End If%>
|
| 356 |
|
356 |
</td>
|
| 357 |
<td align="left" valign="top" class="body_txt">
|
357 |
|
| 358 |
<%If UserCanAddOrEditThisDaemonInst(rsQry("proj_id"), rsQry("official"), rsQry("OP_CODE")) Then%>
|
358 |
<td align="left" valign="top" class="body_txt">
|
| 359 |
<%Call objBtnControl.Render ( Array("btnEditDaemonInst", "btnDeleteDaemonInst"), objAccessControl )%>
|
359 |
<%If UserCanAddOrEditThisDaemonInst(rsQry("proj_id"), rsQry("official"), rsQry("OP_CODE")) Then%>
|
| 360 |
<%ElseIf rsQry("USER_ID") = objAccessControl.UserId Then %>
|
360 |
<%Call objBtnControl.Render ( Array("btnEditDaemonInst", "btnDeleteDaemonInst"), objAccessControl )%>
|
| 361 |
<%Call objBtnControl.Render ( Array("btnDeleteDaemonInst"), objAccessControl )%>
|
361 |
<%ElseIf rsQry("USER_ID") = objAccessControl.UserId Then %>
|
| 362 |
<%Else%>
|
362 |
<%Call objBtnControl.Render ( Array("btnDeleteDaemonInst"), objAccessControl )%>
|
| 363 |
No Edit Permission
|
363 |
<%Else%>
|
| 364 |
<%End If%>
|
364 |
No Edit Permission
|
| 365 |
</td>
|
365 |
<%End If%>
|
| 366 |
|
366 |
</td>
|
| 367 |
</tr>
|
367 |
|
| 368 |
<%
|
368 |
</tr>
|
| 369 |
rsQry.MoveNext()
|
369 |
<%
|
| 370 |
%>
|
370 |
rsQry.MoveNext()
|
| 371 |
<tr>
|
371 |
%>
|
| 372 |
<td colspan="13" background="images/bg_table_border.gif"><img src="images/spacer.gif" width="1" height="1"></td>
|
372 |
<tr>
|
| 373 |
</tr>
|
373 |
<td colspan="13" background="images/bg_table_border.gif"><img src="images/spacer.gif" width="1" height="1"></td>
|
| 374 |
<%
|
374 |
</tr>
|
| 375 |
Wend
|
375 |
<%
|
| 376 |
rsQry.Close()
|
376 |
Wend
|
| 377 |
Set rsQry = nothing
|
377 |
rsQry.Close()
|
| 378 |
%>
|
378 |
Set rsQry = nothing
|
| 379 |
</table>
|
379 |
%>
|
| 380 |
|
380 |
</table>
|
| 381 |
<table width="50%" border="0" cellspacing="3" cellpadding="0" >
|
381 |
|
| 382 |
<tr>
|
382 |
<table width="50%" border="0" cellspacing="3" cellpadding="0" >
|
| 383 |
<td class="form_iname">
|
383 |
<tr>
|
| 384 |
<%=sortText%>
|
384 |
<td class="form_iname">
|
| 385 |
</td>
|
385 |
<%=sortText%>
|
| 386 |
</tr>
|
386 |
</td>
|
| 387 |
</table>
|
387 |
</tr>
|
| 388 |
|
388 |
</table>
|
| 389 |
|
389 |
|
| 390 |
<table width="50%" border="0" cellspacing="3" cellpadding="0" >
|
390 |
|
| 391 |
<tr>
|
391 |
<table width="50%" border="0" cellspacing="3" cellpadding="0" >
|
| 392 |
<td class="form_iname"> </td>
|
392 |
<tr>
|
| 393 |
<td class="val_err"><a href=""><%Call Action_Buttons ( "Add Daemon Instruction" )%> </a>
|
393 |
<td class="form_iname"> </td>
|
| 394 |
<td> </td>
|
394 |
<td class="val_err"><a href=""><%Call Action_Buttons ( "Add Daemon Instruction" )%> </a>
|
| 395 |
</tr>
|
395 |
<td> </td>
|
| 396 |
</table>
|
396 |
</tr>
|
| 397 |
|
397 |
</table>
|
| 398 |
<table width="100%" border="0" cellspacing="3" cellpadding="0" >
|
398 |
|
| 399 |
<tr>
|
399 |
<table width="100%" border="0" cellspacing="3" cellpadding="0" >
|
| 400 |
<td>NOTE:</td>
|
400 |
<tr>
|
| 401 |
</tr>
|
401 |
<td>NOTE:</td>
|
| 402 |
<tr>
|
402 |
</tr>
|
| 403 |
<td valign="top" class="help_txt">1)</td>
|
403 |
<tr>
|
| 404 |
<td valign="top" class="help_txt">Instructions become overdue when they are more than 10 minutes old and are not in-progress</td>
|
404 |
<td valign="top" class="help_txt">1)</td>
|
| 405 |
</tr>
|
405 |
<td valign="top" class="help_txt">Instructions become overdue when they are more than 10 minutes old and are not in-progress</td>
|
| 406 |
<tr>
|
406 |
</tr>
|
| 407 |
<td valign="top" class="help_txt">2)</td>
|
407 |
<tr>
|
| 408 |
<td valign="top" class="help_txt">Instructions that take a long time to act upon, may cause other instructions for the same release to become overdue. This is not a real problem.</td>
|
408 |
<td valign="top" class="help_txt">2)</td>
|
| 409 |
</tr>
|
409 |
<td valign="top" class="help_txt">Instructions that take a long time to act upon, may cause other instructions for the same release to become overdue. This is not a real problem.</td>
|
| 410 |
<tr>
|
410 |
</tr>
|
| 411 |
<td valign="top" class="help_txt">3)</td>
|
411 |
<tr>
|
| 412 |
<td valign="top" class="help_txt">Instructions may become stranded in the "in-progress" state if build daemons crash, or a problem occurs on a build machine.
|
412 |
<td valign="top" class="help_txt">3)</td>
|
| 413 |
Automatic deletion of the instruction will eventually occur (see next note). Contact a release manager administrator to correct this problem before automatic deletion.</td>
|
413 |
<td valign="top" class="help_txt">Instructions may become stranded in the "in-progress" state if build daemons crash, or a problem occurs on a build machine.
|
| 414 |
</tr>
|
414 |
Automatic deletion of the instruction will eventually occur (see next note). Contact a release manager administrator to correct this problem before automatic deletion.</td>
|
| 415 |
<tr>
|
415 |
</tr>
|
| 416 |
<td valign="top" class="help_txt">4)</td>
|
416 |
<tr>
|
| 417 |
<td valign="top" class="help_txt">Instructions with scheduled times 5 days or older will be deleted automatically.</td>
|
417 |
<td valign="top" class="help_txt">4)</td>
|
| 418 |
</tr>
|
418 |
<td valign="top" class="help_txt">Instructions with scheduled times 5 days or older will be deleted automatically.</td>
|
| 419 |
<tr>
|
419 |
</tr>
|
| 420 |
<td valign="top" class="help_txt">5)</td>
|
420 |
<tr>
|
| 421 |
<td valign="top" class="help_txt">Add/Edit/Delete Permissions will vary depending upon Operation, Release Mode, and User Permissions.</td>
|
421 |
<td valign="top" class="help_txt">5)</td>
|
| 422 |
</tr>
|
422 |
<td valign="top" class="help_txt">Add/Edit/Delete Permissions will vary depending upon Operation, Release Mode, and User Permissions.</td>
|
| 423 |
|
423 |
</tr>
|
| 424 |
</table>
|
424 |
|
| 425 |
|
425 |
</table>
|
| 426 |
<%=objPMod.ComposeHiddenTags()%>
|
426 |
|
| 427 |
<input type="hidden" name="action" value="true">
|
427 |
<%=objPMod.ComposeHiddenTags()%>
|
| 428 |
<%
|
428 |
<input type="hidden" name="action" value="true">
|
| 429 |
Call objFormComponent.FormEnd()
|
429 |
<%
|
| 430 |
'-- FROM END ----------------------------------------------------------------------------------------------------------------
|
430 |
Call objFormComponent.FormEnd()
|
| 431 |
%>
|
431 |
'-- FROM END ----------------------------------------------------------------------------------------------------------------
|
| 432 |
</body>
|
432 |
%>
|
| 433 |
</html>
|
433 |
</body>
|
| 434 |
<!-- FOOTER -->
|
434 |
</html>
|
| 435 |
<!--#include file="_footer.asp"-->
|
435 |
<!-- FOOTER -->
|
| 436 |
<%
|
436 |
<!--#include file="_footer.asp"-->
|
| 437 |
Call Destroy_All_Objects
|
437 |
<%
|
| 438 |
%>
|
438 |
Call Destroy_All_Objects
|
| - |
|
439 |
%>
|