Subversion Repositories DevTools

Rev

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