Subversion Repositories DevTools

Rev

Rev 5357 | Rev 5957 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
5357 dpurdie 1
<%@LANGUAGE="VBSCRIPT"%>
2
<%
3
'=====================================================
4
'|                                                   |
5
'|         Eidt Release Licencing Details            |
6
'|                                                   |
7
'=====================================================
8
Option explicit
9
' Good idea to set when using redirect
10
Response.Expires = 0  ' always load the page, dont store
11
%>
12
<!--#include file="common/conf.asp"-->
13
<!--#include file="common/globals.asp"-->
14
<!--#include file="common/formating.asp"-->
15
<!--#include file="common/qstr.asp"-->
16
<!--#include file="common/common_subs.asp"-->
17
<!--#include file="common/common_dbedit.asp"-->
18
<!--#include file="common/_form_window_common.asp"-->
19
<%
20
' Make sure rtag_id is always present
21
If Request("rtag_id") = "" Then
22
	Response.Redirect("index.asp")
23
End If
24
 
25
' Set rfile parameter. This is a return page after Login
26
Call objPMod.StoreParameter ( "rfile", "dependencies.asp" )
27
'------------ ACCESS CONTROL ------------------
28
%>
29
<!--#include file="_access_control_login.asp"-->
30
<!--#include file="_access_control_general.asp"-->
31
<!--#include file="_access_control_project.asp"-->
32
<%
33
'------------ Variable Definition -------------
34
Dim selectedLicence
35
Dim httpReferer
36
Dim licenceList
37
 
38
 
39
'------------ Constants Declaration -----------
40
 
41
Const available_licences_query_string = " SELECT * from licences ORDER BY UPPER(name) "
42
 
43
'------------ Variable Init -------------------
44
 
45
httpReferer = "dependencies.asp?rtag_id="& CStr(parRtag_Id)
46
 
47
' Obtain selected licence from parameter list in the URL. If none given, set the default initial
48
' value to -1 to initiate its selection during html page rendering
49
selectedLicence = Request("selected_licence")
50
If (IsNull(selectedLicence) OR selectedLicence = "") Then
51
   selectedLicence = -1
52
End If
53
 
54
'--------------------------------------------------------------------------------------------------------------------------
55
'  release_licencing_query_string
56
'
57
'  DESCRIPTION
58
'     Constructs a query string using the provided release tag, designed to elicit
59
'     a list of PV_ID's, thier package names, versions and extensions, from the
60
'     release
61
'
62
'  INPUTS
63
'     NNrtag_id : The release tag to be used in the query string
64
'
65
Function release_licencing_query_string(NNrtag_id)
66
 
67
   release_licencing_query_string = "SELECT * FROM ("&_
68
                                    "      SELECT pv.pv_id, pkg.pkg_name, pv.pkg_version, pv.v_ext"&_
69
                                    "        FROM release_content rc, package_versions pv, packages pkg "&_
70
                                    "       WHERE rc.rtag_id = "& CStr(NNrtag_id) &_
71
                                    "         AND pv.pv_id = rc.pv_id "&_
72
                                    "         AND pkg.pkg_id = pv.pkg_id "&_
73
                                    "      UNION "&_
74
                                    "      SELECT pv.pv_id, pkg.pkg_name, pv.pkg_version, pv.v_ext"&_
75
                                    "        FROM work_in_progress wip, package_versions pv, packages pkg "&_
76
                                    "       WHERE wip.rtag_id = "& CStr(NNrtag_id) &_
77
                                    "         AND pv.pv_id = wip.pv_id "&_
78
                                    "         AND pkg.pkg_id = pv.pkg_id "&_
79
                                    "      UNION "&_
80
                                    "      SELECT pv.pv_id, pkg.pkg_name, pv.pkg_version, pv.v_ext"&_
81
                                    "        FROM planned pl, package_versions pv, packages pkg"&_
82
                                    "       WHERE pl.rtag_id = "& CStr(NNrtag_id) &_
83
                                    "         AND pv.pv_id = pl.pv_id "&_
84
                                    "         AND pkg.pkg_id = pv.pkg_id "&_
85
                                    "         AND (pl.operation IS NULL OR pl.operation = 'R') "&_
86
                                    ") ORDER BY UPPER(pkg_name), UPPER(v_ext), pv_id DESC"
87
End Function
88
 
89
'--------------------------------------------------------------------------------------------------------------------------
90
'  IsLicenced
91
'
92
'  DESCRIPTION
93
'     Queries the database to determine if a supplied PV_ID is associated with
94
'     the provided licence
95
'
96
'  INPUTS
97
'     NNpv_id    : The PV_ID of the package version being examined
98
'     NNlicence  : The licence to be examined
99
'
100
'  OUTPUTS
101
'     TRUE if the PV_ID is associated with the licence, else FALSE
102
'
103
Function IsLicenced(NNpv_id, NNlicence)
104
 
105
   Dim IsLicencedQuery
106
   Dim IsLicencedQueryResults
107
 
108
   IsLicencedQuery = "SELECT * FROM licencing WHERE pv_id=" & CStr(NNpv_id) & " AND licence=" & CStr(NNlicence)
109
 
110
   Set IsLicencedQueryResults = OraDatabase.DbCreateDynaset( IsLicencedQuery, cint(0))
111
 
112
   If IsLicencedQueryResults.RecordCount = 0 Then
113
      IsLicenced = FALSE
114
   Else
115
      IsLicenced = TRUE
116
   End If
117
   IsLicencedQueryResults.Close()
118
   Set IsLicencedQueryResults = nothing
119
 
120
End Function
121
 
122
'--------------------------------------------------------------------------------------------------------------------------
123
'  AddLicencing
124
'
125
'  DESCRIPTION
126
'     Adds a licencing relationship to the database for the supplied PV_ID, and the
127
'     supplied Licence
128
'
129
'  INPUTS
130
'     NNpv_id    : The PV_ID of the package version to be used
131
'     NNlicence  : The licence to be used
132
'
133
Sub AddLicencing(NNpv_id, NNlicence)
134
   OraDatabase.Parameters.Add "PV_ID",   NNpv_id,   ORAPARM_INPUT, ORATYPE_NUMBER
135
   OraDatabase.Parameters.Add "LICENCE", NNlicence, ORAPARM_INPUT, ORATYPE_NUMBER
136
 
137
   On Error Resume Next
138
   objEH.TryORA( OraSession )
139
   OraDatabase.ExecuteSQL ("begin INSERT INTO licencing (pv_id, licence) VALUES (:PV_ID, :LICENCE); end;")
140
   objEH.CatchORA( OraSession )
141
 
142
   OraDatabase.Parameters.Remove "PV_ID"
143
   OraDatabase.Parameters.Remove "LICENCE"
144
   On Error Goto 0
145
 
146
   ' Log Action
147
   Call Log_Action ( NNpv_id, "software_licence", "Added: " & licenceList.Item(Cint(NNlicence)))
148
 
149
End Sub
150
 
151
'--------------------------------------------------------------------------------------------------------------------------
152
'  RemoveLicencing
153
'
154
'  DESCRIPTION
155
'     Removes a licencing relationship from the database for the supplied PV_ID, and the
156
'     supplied Licence
157
'
158
'  INPUTS
159
'     NNpv_id    : The PV_ID of the package version to be used
160
'     NNlicence  : The licence to be used
161
'
162
Sub RemoveLicencing(NNpv_id, NNlicence)
163
   OraDatabase.Parameters.Add "PV_ID",   NNpv_id,   ORAPARM_INPUT, ORATYPE_NUMBER
164
   OraDatabase.Parameters.Add "LICENCE", NNlicence, ORAPARM_INPUT, ORATYPE_NUMBER
165
 
166
   On Error Resume Next
167
   objEH.TryORA( OraSession )
168
   OraDatabase.ExecuteSQL ("begin DELETE FROM licencing WHERE pv_id=:PV_ID AND licence=:LICENCE; end;")
169
   objEH.CatchORA( OraSession )
170
 
171
   OraDatabase.Parameters.Remove "PV_ID"
172
   OraDatabase.Parameters.Remove "LICENCE"
173
   On Error Goto 0
174
 
175
   ' Log Action
176
   Call Log_Action ( NNpv_id, "software_licence", "Removed: " & licenceList.Item(Cint(NNlicence)))
177
 
178
End Sub
179
 
180
'--------------------------------------------------------------------------------------------------------------------------
181
'  initialLicence
182
'
183
'  DESCRIPTION
184
'     Queries the database for a list of licences, and returns the first one in the list
185
'     which will be used as the default licence prior to a user making a specific alternative
186
'     selection via the drop down list
187
'
188
'  OUTPUTS
189
'     The first licence from the list, else -1 if list is empty
190
'
191
Function initialLicence
192
 
193
   Dim initialLicenceQuery
194
 
195
   Set initialLicenceQuery = OraDatabase.DbCreateDynaset( available_licences_query_string, cint(0) )
196
 
197
   If ((initialLicenceQuery.RecordCount  > 0) AND (NOT initialLicenceQuery.BOF) AND (NOT initialLicenceQuery.EOF)) Then
198
      initialLicence = CDbl(initialLicenceQuery("licence"))
199
   Else
200
      initialLicence = -1
201
   End If
202
 
203
   initialLicenceQuery.Close()
204
   Set initialLicenceQuery = nothing
205
End Function
206
 
207
'--------------------------------------------------------------------------------------------------------------------------
208
'  CheckFormEntryConditions
209
'
210
'  DESCRIPTION
211
'     Checks some conditions of entry to the form and takes action when conditions are not met
212
'
213
Sub CheckFormEntryConditions
214
 
215
   Dim CheckFormEntryConditionsQuery
216
 
217
   ' Check that at least one licence exists that can be associated with specific package versions. If there are no
218
   ' licences, then the form cannot be used.
219
   Set CheckFormEntryConditionsQuery = OraDatabase.DbCreateDynaset( available_licences_query_string, cint(0) )
220
   If CheckFormEntryConditionsQuery.RecordCount = 0 Then
221
      CheckFormEntryConditionsQuery.Close()
222
      Set CheckFormEntryConditionsQuery = nothing
223
      Call RaiseMsg( enum_MSG_NO_LICENCES_EXIST & "?rtag_id=" & CStr(parRtag_Id), 0 )
224
   End If
225
 
226
   CheckFormEntryConditionsQuery.Close()
227
   Set CheckFormEntryConditionsQuery = nothing
228
 
229
End Sub
230
 
231
'--------------------------------------------------------------------------------------------------------------------------
232
'  CheckFormSubmitActions
233
'
234
'  DESCRIPTION
235
'     Checks for any form submit actions and processes them accordingly
236
'
237
'     The form has a number of submit buttons (OK, APPLY, CANCEL)
238
'
239
'     The OK and APPLY buttons lead to the checkbox states being used to update the database.
240
'     The database updates are not performed when the CANCEL button is pressed.
241
'
242
'     Pressing OK or CANCEL takes the user out of the form and back to the original referer page.
243
'     Pressing APPLY leaves the user in the form so that they may make further licencing changes.
244
'
245
Sub CheckFormSubmitActions
246
 
247
   If Request("action") <> "" Then
248
      If objForm.IsValidOnPostBack Then
249
 
250
         If Request("btn_submit") = "Apply" OR Request("btn_submit") = "OK" Then
251
            Dim checkedItemsFromForm
252
            Dim checkedItemsArray
253
            Dim item
254
            Dim parSelectedLicence
255
            Dim checkedItemsDict
256
            Dim rsQry
257
 
258
            ' Get the selected licence - and cater for situation where user has not changed the selected licence in
259
            ' the drop down list since first opening the form
260
            parSelectedLicence = Request("selected_licence")
261
            If (IsNull(parSelectedLicence) OR parSelectedLicence = "") Then
262
               parSelectedLicence = initialLicence()
263
            End If
264
 
265
            ' Get the list of checked items from the form. They will be in a CSV format.
266
            ' Split the list at the commas and read each item into a dictionary so we can use it for testing against the
267
            ' full set of PV_IDs we get later.
268
            Set checkedItemsDict = CreateObject("Scripting.Dictionary")
269
            checkedItemsFromForm = Request("checked_pv_id_list")
270
            checkedItemsArray = Split(checkedItemsFromForm,",")
271
            For Each item in checkedItemsArray
272
               checkedItemsDict.Add Trim(CStr( item )), ""
273
            Next
274
 
275
            ' Populate the licence name diction - for logging
276
            Call getLicenceNames
277
 
278
            ' Get the record set for the entire set of PV_IDs in the release
279
            Set rsQry = OraDatabase.DbCreateDynaset( release_licencing_query_string(parRtag_Id), cint(0) )
280
 
281
            Do While (NOT rsQry.BOF) AND (NOT rsQry.EOF)
282
 
283
               ' If the user has checked the item, and it does not already exist in the licencing table associated to the selected licence,
284
               ' then add a new row to the table to create that associatation
285
               If checkedItemsDict.Exists(CStr(rsQry("pv_id"))) Then
286
 
287
                  If (NOT IsLicenced(rsQry("pv_id"), parSelectedLicence)) Then
288
                     Call AddLicencing(rsQry("pv_id"), parSelectedLicence)
289
                  End If
290
               Else
291
                  ' Item is not checked, so we need to ensure that any association to the selected licence is removed
292
                  ' from the licencing table.
293
                  If (IsLicenced(rsQry("pv_id"), parSelectedLicence)) Then
294
                     Call RemoveLicencing(rsQry("pv_id"), parSelectedLicence)
295
                  End If
296
               End If
297
 
298
               rsQry.MoveNext
299
            Loop
300
 
301
            ' destroy objects
302
            rsQry.Close()
303
            Set rsQry = nothing
304
 
305
            checkedItemsDict.RemoveAll
306
            Set checkedItemsDict = nothing
307
 
308
            ' figure out where to go next
309
            If Request("btn_submit") = "OK" Then
310
               ' User has finished making licencing changes so go back to the referer page
311
               Call OpenInWindow ( httpReferer )
312
            Else
313
               ' else user pressed Apply, so stay in the form to let user make further licencing changes
314
               Call OpenInWindow ( "form_edit_release_licencing.asp?rtag_id=" & Request("rtag_id") & "&selected_licence=" & parSelectedLicence )
315
            End If
316
         Else
317
            ' User has cancelled so go back to the referer page
318
            Call OpenInWindow ( httpReferer )
319
         End If
320
      End If
321
   End If
322
End Sub
323
 
324
'--------------------------------------------------------------------------------------------------------------------------
325
'  LicenceDropDownHTML
326
'
327
'  DESCRIPTION
328
'     Constructs the HTML to render the drop down list and whilst doing so, updates the global selectedLicence variable
329
'
330
Function LicenceDropDownHTML
331
 
332
   Dim rsQry
333
   Dim html_string
334
 
335
   ' Get the full list of licences availabel from the database
336
   Set rsQry = OraDatabase.DbCreateDynaset( available_licences_query_string, cint(0) )
337
 
338
   ' Start of select tag
339
   ' This is designed such that when the user changes the selection, the page is re-rendered with the selected licence value passed
340
   ' in as a paramter as part of the URL along with the release tage
341
   html_string               = "<select name='selected_licence'"
342
   html_string = html_string & " onChange=""Cascaded_Menu('parent','"& scriptName &"?rtag_id="& parRtag_Id &"&selected_licence=',this,0)"""
343
   html_string = html_string & " class='form_item'>"
344
 
345
   ' Add each licence to the select, using the option tag, and set the initially selected option
346
   While (NOT rsQry.BOF) AND (NOT rsQry.EOF)
347
 
348
      If CDbl(Request("selected_licence")) = CDbl(rsQry.Fields("licence")) or selectedLicence = -1 Then
349
         html_string = html_string & "<option value='"& rsQry.Fields("licence") &"' selected>"& rsQry.Fields("name") &"</option>"
350
         selectedLicence = CDbl(rsQry("licence"))
351
      Else
352
         html_string = html_string & "<option value='"& rsQry.Fields("licence") &"'>"& rsQry.Fields("name") &"</option>"
353
      End If
354
      rsQry.MoveNext
355
   WEnd
356
 
357
   ' destroy objects
358
   rsQry.Close()
359
   Set rsQry = nothing
360
 
361
   ' End of select tag
362
   html_string = html_string & "</select>"
363
 
364
   ' return result
365
   LicenceDropDownHTML = html_string
366
End Function
367
 
368
'--------------------------------------------------------------------------------------------------------------------------
369
'  getLicenceNames
370
'
371
'  DESCRIPTION
372
'     Populates a dictionary to simplify conversion of licence data to text
373
'     Used in logging changes
374
'
375
Sub getLicenceNames
376
 
377
   Dim rsQry
378
   Set licenceList=Server.CreateObject("Scripting.Dictionary") 
379
 
380
   ' Get the full list of licences availabel from the database
381
   Set rsQry = OraDatabase.DbCreateDynaset( available_licences_query_string, cint(0) )
382
 
383
   ' Add each licence to the select, using the option tag, and set the initially selected option
384
   While (NOT rsQry.BOF) AND (NOT rsQry.EOF)
385
      licenceList.Add Cint(rsQry.Fields("licence")), CStr(rsQry.Fields("name"))
386
      rsQry.MoveNext
387
   WEnd
388
 
389
   ' destroy objects
390
   rsQry.Close()
391
   Set rsQry = nothing
392
End Sub
393
 
394
'--------------------------------------------------------------------------------------------------------------------------
395
'  PV_ID_ListHTML
396
'
397
'  DESCRIPTION
398
'     Constructs the HTML to render the rows of checkboxes, package names, versions and extensions
399
'
400
Function PV_ID_ListHTML
401
   Dim rsQry
402
   Dim html_string
403
 
404
   Set rsQry = OraDatabase.DbCreateDynaset( release_licencing_query_string(parRtag_Id), cint(0) )
405
 
406
   '--- Render rows ---
407
   Do While (NOT rsQry.BOF) AND (NOT rsQry.EOF)
408
 
409
      ' BEGIN ROW
410
      html_string = html_string & "<tr>"
411
 
412
      ' CHECKBOX
413
      If (IsLicenced(rsQry("pv_id"), selectedLicence)) Then
414
         html_string = html_string & "<td align='center'><input type='checkbox' name='checked_pv_id_list' value=" & rsQry("pv_id") & " checked></td>"
415
      Else
416
         html_string = html_string & "<td align='center'><input type='checkbox' name='checked_pv_id_list' value=" & rsQry("pv_id") & "></td>"
417
      End If
418
 
419
      ' PACKAGE NAME
420
      html_string = html_string & "<td nowrap class='body_rowg'>" & rsQry("pkg_name") & "</td>"
421
 
422
      ' PACKAGE VERSION
423
      If IsNull(rsQry("v_ext")) Then
424
         html_string = html_string & "<td nowrap class='body_rowg'>" & rsQry("pkg_version") & "</td>"
425
      Else
426
         html_string = html_string & "<td nowrap class='body_rowg'>" & Left(rsQry("pkg_version"), Len(rsQry("pkg_version")) - Len(rsQry("v_ext")) ) & "</td>"
427
      End If
428
 
429
      ' PACKAGE EXTENSION
430
      html_string = html_string & "<td nowrap class='body_rowg'>" & rsQry("v_ext") & "</td>"
431
 
432
      ' END ROW
433
      html_string = html_string & "</tr>"
434
 
435
      rsQry.MoveNext
436
 
437
      ' ROW SEPERATOR
438
      If (NOT rsQry.BOF) AND (NOT rsQry.EOF) Then
439
         html_string = html_string & "<tr><td colspan='8' background='images/bg_table_border.gif'><img src='images/spacer.gif' width='1' height='1'></td></tr>"
440
      End If
441
   Loop
442
 
443
   ' destroy objects
444
   rsQry.Close()
445
   Set rsQry = nothing
446
 
447
   ' return result
448
   PV_ID_ListHTML = html_string
449
End Function
450
 
451
'--------------------------------------------------------------------------------------------------------------------------
452
'--------------------------------------------------------------------------------------------------------------------------
453
'------------ RUN BEFORE PAGE RENDER ----------
454
 
455
Call CheckFormEntryConditions()
456
 
457
Call CheckFormSubmitActions()
458
 
459
'----------------------------------------------
460
%>
461
 
462
<html>
463
<head>
464
<title>Release Manager</title>
465
<link rel="shortcut icon" href="<%=FavIcon%>"/>
466
<meta HTTP-EQUIV="Pragma" CONTENT="no-cache">
467
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
468
<link rel="stylesheet" href="images/release_manager_style.css" type="text/css">
469
<link rel="stylesheet" href="images/navigation.css" type="text/css">
470
<script language="JavaScript" src="images/common.js"></script>
471
<script language="JavaScript" src="scripts/remote_scripting.js"></script>
472
 
473
<!-- DROPDOWN MENUS -->
474
 
475
 
476
<!--#include file="_menu_def.asp"-->
477
<script language="JavaScript1.2" src="images/popup_menu.js"></script>
478
 
479
</head>
480
<body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="0">
481
<!-- MENU LAYERS -------------------------------------->
482
<div id="popmenu" class="menuskin" onMouseover="clearhidemenu();highlightmenu(event,'on')" onMouseout="highlightmenu(event,'off');dynamichide(event)">
483
</div>
484
<!-- TIPS LAYERS -------------------------------------->
485
<div id="formTipsLayer" style="position: absolute; z-index: 1000; visibility: hidden; left:0; top: 0; width: 10">&nbsp;</div>
486
<!----------------------------------------------------->
487
<!-- HEADER -->
488
<!--#include file="_header.asp"-->
489
<!-- BODY ---->
490
 
491
<table width="100%" border="0" cellspacing="0" cellpadding="0">
492
   <%
493
   '-- FROM START ---------------------------------------------------------------------------------------------------------
494
 
495
   objFormComponent.FormName = "FormName"
496
   objFormComponent.Method = "post"
497
   objFormComponent.Action = ScriptName & "?rtag_id=" & parRtag_Id & "&selected_licence=" & Request("selected_licence")
498
   Call objFormComponent.FormStart()
499
   %>
500
   <tr>
501
      <td width="1" background="images/bg_home_orange.gif" valign="top"></td>
502
      <td width="100%" rowspan="2" align="center" valign="top" bgcolor="#EEEFEF">
503
         <table width="10" border="0" cellspacing="0" cellpadding="0">
504
            <tr>
505
               <td width="1%"></td>
506
               <td width="100%">
507
                  <table width="100%"  border="0" cellspacing="0" cellpadding="0">
508
                     <tr>
509
                        <td nowrap class="body_txt"></td>
510
                     </tr>
511
                  </table>
512
                  <table width="100%" border="0" cellspacing="0" cellpadding="0">
513
                     <tr>
514
                        <td nowrap class="form_ttl"><p>&nbsp;</p>
515
                           <p>EDIT RELEASE LICENCING DETAILS</p>
516
                        </td>
517
                        <td align="right" valign="bottom"></td>
518
                     </tr>
519
                  </table>
520
               </td>
521
               <td width="1%"></td>
522
            </tr>
523
            <tr>
524
               <td align="left" valign="top" background="images/lbox_bg_blue.gif"><img src="images/lbox_tl_cnr_b.gif" width="13" height="13"></td>
525
               <td background="images/lbox_bg_blue.gif" class="lbox_ttl_w"><img src="images/h_trsp_dot.gif" width="600" height="15"></td>
526
               <td align="right" valign="top"  background="images/lbox_bg_blue.gif"><img src="images/lbox_tr_cnr_b.gif" width="13" height="13"></td>
527
            </tr>
528
            <tr>
529
               <td bgcolor="#FFFFFF"><img src="images/h_trsp_dot.gif" width="10" height="100"></td>
530
               <td bgcolor="#FFFFFF" valign="top">
531
                  <%
532
                  %>
533
                  <!-- MESSAGE +++++++++++++++++++++++++++++++++++++++++++++++++++ -->
534
                  <!--#include file="messages/_msg_inline.asp"-->
535
                  <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
536
                  <br>
537
                  <table width="100%"  border="0" cellspacing="2" cellpadding="0">
538
                     <tr>
539
                        <td nowrap class="form_iname" valign="top">Select Licence</td>
540
                        <td valign="top" nowrap class="form_iname">
541
                           <%=LicenceDropDownHTML()%>
542
                        </td>
543
                        <td width="9%" valign="top"></td>
544
                        <tr>
545
                           <td valign="top" nowrap background="images/bg_table_col.gif" class="body_col"></td>
546
                           <td valign="top" nowrap background="images/bg_table_col.gif" class="body_col">Package Name</td>
547
                           <td valign="top" nowrap background="images/bg_table_col.gif" class="body_col">Package Version</td>
548
                           <td valign="top" nowrap background="images/bg_table_col.gif" class="body_col">Package Extension</td>
549
                           <td valign="top">
550
                        </tr>
551
                        <%=PV_ID_ListHTML()%>
552
                        <tr>
553
                           <td class="form_iname">&nbsp;</td>
554
                           <td>&nbsp;</td>
555
                           <td class="val_err"></td>
556
                        </tr>
557
                     </tr>
558
                  </table>
559
               </td>
560
               <td background="images/lbox_bgside_white.gif">&nbsp;</td>
561
            </tr>
562
            <tr>
563
               <td background="images/bg_action_norm.gif" ></td>
564
               <td align="right" background="images/bg_action_norm.gif" >
565
                  <input name="btn_submit" type="submit" class="form_btn" value="OK">
566
                  <input name="btn_submit" type="submit" class="form_btn" value="Apply">
567
                  <input name="btn_submit" type="submit" class="form_btn" value="Cancel">
568
                  <input type="hidden" name="action" value="true">
569
               </td>
570
               <td background="images/bg_action_norm.gif" ><img src="images/h_trsp_dot.gif" width="5" height="30"></td>
571
            </tr>
572
            <tr>
573
               <td background="images/lbox_bg_blue.gif" valign="bottom"><img src="images/lbox_bl_cnr_b.gif" width="13" height="13"></td>
574
               <td background="images/lbox_bg_blue.gif"></td>
575
               <td background="images/lbox_bg_blue.gif" valign="bottom" align="right"><img src="images/lbox_br_cnr_b.gif" width="13" height="13"></td>
576
            </tr>
577
         </table>
578
      </td>
579
      <td width="1" valign="top"><img src="images/h_trsp_dot.gif" width="1" height="1"></td>
580
   </tr>
581
   <tr>
582
      <td valign="bottom" align="center" background="images/bg_home_orange.gif"><img src="images/img_vtree.gif" width="86" height="99" vspace="20" hspace="30"></td>
583
      <td background="images/bg_lght_gray.gif" valign="top"><img src="images/h_trsp_dot.gif" width="1" height="500"></td>
584
   </tr>
585
   <%
586
   Call objFormComponent.FormEnd()
587
   '-- FROM END ----------------------------------------------------------------------------------------------------------------
588
   %>
589
</table>
590
<!-- FOOTER -->
591
<!--#include file="_footer.asp"-->
592
</body>
593
</html>
594
<%
595
Call Destroy_All_Objects
596
%>