Oracle Forms

 

A Forms dynamic LOV

 

Home page

 

 

 

 

The purpose is to manage dynamic LOVs, able to build any LOV of 1 to 9 columns.

 

 

 

 

The record group is dynamically populated by the SELECT order provided, then the LOV is tuned to fit and display the corresponding columns.

 

It uses a pre-defined LOV that can handle 9 columns.

The data selected from the LOV are copied into 9 hidden items stored in a control block (:LOV).

The copy process is done in an Item-level KEY-LISTVAL trigger:

 

Declare

LB$Ok Boolean ;

LC$Lov Varchar2(30) := Get_Item_Property(:system.trigger_item, LOV_NAME) ;

Begin

If LC$Lov Is not null Then

LB$Ok := Show_Lov(LC$Lov);

If LB$Ok Then

-- get returned values --

:BL.TXT1 := :LOV.RETURN1 ;

End if ;

End if ;

End;

 

The LOV populating process is done in the POPULATE_LOV() procedure, stored in the program unit of the sample dialog provided,

But you can, of course, copy it in a PL/SQL library.

(In fact you need to keep together: PKG_COLLECT package, Build_Select_line function and Populate_LOV procedure)

 

 

How to use the dynamic LOV

 

You can manage 5 different dynamic LOVs in the provided sample dialog.

 

To populate the LOV, and eventually attach it to an item, use the Populate_LOV() procedure

 

PROCEDURE Populate_LOV

(

PC$SQL_Order IN VARCHAR2,

PC$NumLOV IN VARCHAR2,

PC$Title IN VARCHAR2,

PC$TargetItem IN VARCHAR2 default null,

PB$Display IN BOOLEAN Default false

)

 

 

PC$SQL_Order is the corresponding SQL query

PC$NumLOV is the number of LOV (1-5)

PC$Title is the title for the LOV

PC$TargetItem is the item you want to attach the LOV (bloc_name.item_name)

PB$Display is provided in debug mode to ensure the LOV will display the correct values

 

e.g.:

Populate_LOV

(

'Select empno, ename, sal from emp',

'1',

'Choose an employee',

'BL.TXT1',

False

);

 

If you want to provide aliases, they must be given within double-quotes:

 

Select empno "Number", ename "Name", sal "Salary" from emp

 

 

Special case:

 

If you need to incorporate a function that contains a comma, To_Char(), for instance, replace the comma by a ;

 

e.g.

select empno, ename, sal, TO_CHAR(hiredate;'DD/MM/YYYY') "HIREDATE" from emp

 

the ; will be replace by its normal comma at execution time.

 

 

 

 

The sample dialog

 

         Download the dynamic_lov.fmb sample dialog for you to test (Forms 9.0.2)

 

To implement it into you own Forms, you can simply drag the DYN_LOV object group into your module.