UF_QRY01 - Simple Example of How to Listen For General Framework Objects And View Their Properties

*=============================================================================
*
* Component   : UF_QRY01
* Type        : Reusable Component
* Ancestor    : VF_AC010 (Command Handler)
*
* PLEASE NOTE:  This UF_ (User Framework) component is the shipped version. You
* may choose to modify it. You should do this by copying the source
* code of this component into your own component and then change
* the copied version. This will prevent the accidental loss of your
* changes if you upgrade your Visual LANSA Framework version. Refer
* to the end of this component for more details about making your
* own version of this component.
*
* This is example code only - No warranty is expressed or implied.
* Neither this program, nor any derivative of it, should be ever be used in
* production or end-user environments.
*
* =============================================================================
*
* This is the simplest example of how to listen for general Framework objects and view their properties
* =============================================================================
Function Options(*DIRECT)
Begin_Com Role(*EXTENDS #VF_AC010) Height(336) Layoutmanager(#ATLM_2) Width(552)
* ================================================================================
* Simple Field and Group Definitions
* ================================================================================
* ================================================================================
* Component definitions
* ================================================================================

* Body and Button arrangement panels

Define_Com Class(#PRIM_PANL) Name(#BUTTON_PANEL) Displayposition(2) Height(336) Layoutmanager(#BUTTON_FLOW) Left(464) Parent(#COM_OWNER) Tabposition(2) Tabstop(False) Top(0) Width(88)
Define_Com Class(#PRIM_PANL) Name(#BODY_HEAD) Displayposition(1) Height(336) Layoutmanager(#ATLM_1) Left(0) Parent(#COM_OWNER) Tabposition(1) Tabstop(False) Top(0) Verticalscroll(True) Width(464)


* Attachment and flow layout managers

Define_Com Class(#PRIM_ATLM) Name(#MAIN_LAYOUT)
Define_Com Class(#PRIM_ATLI) Name(#BUTTON_ATTACH) Attachment(Right) Manage(#BUTTON_PANEL) Parent(#MAIN_LAYOUT)
Define_Com Class(#PRIM_FWLM) Name(#BUTTON_FLOW) Direction(TopToBottom) Flowoperation(Center) Marginbottom(4) Marginleft(4) Marginright(4) Margintop(4) Spacing(4) Spacingitems(4)

Define_Com Class(#PRIM_ATLI) Name(#BODY_ATTACH) Attachment(Center) Manage(#BODY_HEAD) Parent(#MAIN_LAYOUT)

* The report button

Define_Com Class(#PRIM_PHBN) Name(#PHBN_REPORT) Buttondefault(True) Caption('Report') Displayposition(1) Left(4) Parent(#BUTTON_PANEL) Tabposition(1) Top(4)
Define_Com Class(#PRIM_FWLI) Name(#FWLI_SAVE_BUTTON) Manage(#PHBN_REPORT) Parent(#BUTTON_FLOW)

* The Traverse component
Define_Com Class(#UF_TRVRS) Name(#UF_TRVRS)
Define_Com Class(#PRIM_ATLM) Name(#ATLM_1) Marginbottom(2) Marginleft(2) Marginright(2) Margintop(2)
Define_Com Class(#PRIM_ATLI) Name(#ATLI_1) Attachment(Center) Parent(#ATLM_1)
Define_Com Class(#PRIM_ATLM) Name(#ATLM_2)
Define_Com Class(#PRIM_ATLI) Name(#ATLI_2) Attachment(Center) Manage(#BODY_HEAD) Parent(#ATLM_2)
Define_Com Class(#PRIM_ATLI) Name(#ATLI_3) Attachment(Right) Manage(#BUTTON_PANEL) Parent(#ATLM_2)

Define_Com Class(#Prim_kCol<#VF_FP003 #VF_ELIDN>) Name(#collBusObj)

* List of the GUIDs of all the Commands
Def_List Name(#ListCmdGd) Fields(#cmdGUID #cmdUID) Type(*Working) Entrys(*MAX)
define #cmdGUID reffld(#vf_elidn) desc('GUID for a command definition')
define #cmdUID reffld(#vf_elidn) desc('uIdentifier for a command definition')

* List of the GUIDs of all the Command References
Def_List Name(#ListCmRGd) Fields(#cmdRefGUD #cmdRefUID) Type(*Working) Entrys(*MAX)
define #cmdRefGUD reffld(#vf_elidn) desc('GUID for a command reference')
define #cmdRefUID reffld(#vf_elidn) desc('uIdentifier for a command definition')


Define_com #VF_FPM09 #TheVF_FPM09 Reference(*Dynamic)
Define_com #VF_FPM10 #TheVF_FPM10 Reference(*Dynamic)
Define_Com Class(#PRIM_LTVW) Name(#LTVW_1) Componentversion(2) Displayposition(1) Fullrowselect(True) Height(332) Left(2) Parent(#BODY_HEAD) Showsortarrow(True) Tabposition(1) Top(2) Width(460)
Define_Com Class(#PRIM_ATLI) Name(#ATLI_4) Attachment(Center) Manage(#LTVW_1) Parent(#ATLM_1)
Define_Com Class(#PRIM_LVCL) Name(#LVCL_1) Caption('Unused Commands') Captiontype(Caption) Displayposition(1) Parent(#LTVW_1) Source(#DF_ELTXTL) Width(100)

* ================================================================================
* Events Definitions
* ================================================================================

* ================================================================================
* Property Definitions
* ================================================================================

* ================================================================================
* Method Definitions
* ================================================================================
* --------------------------------------------------------------------------------
* Handle Command Execution
* --------------------------------------------------------------------------------

Mthroutine Name(uExecute) Options(*REDEFINE)

* The return code field and testing condition

Define #Ret_Code reffld(#IO$STS)
Def_cond Name(*RetOkay) Cond('#Ret_Code = OK')

* Do any execution logic defined in the ancestor

Invoke #Com_Ancestor.uExecute


Endroutine

* ================================================================================
* Subroutines
* ================================================================================

* ================================================================================
* Event Handlers
* ================================================================================

* --------------------------------------------------------------------------------
* Handle the save button
* --------------------------------------------------------------------------------

EVTROUTINE HANDLING(#PHBN_REPORT.Click)

* Clear Lists
clr_list #listCmdGD
clr_list #listCmRGD

* Tell the Traverse reusable part to read through the entire system in no particular order
* This program listens for the signals for each new object,

* Collect all the information
invoke #UF_TRVRS.uTraverseFramework

* Now display a list of any commands that are not referenced by anything
invoke #Com_Owner.Check_Unused

ENDROUTINE

* Listen for a Business Object  - An example of storing ordinary objects

EVTROUTINE HANDLING(#UF_TRVRS.BusinessObject) Reference(#TempVF_FP003)

* Store all the business objects in a collection

Set_ref Com(#collBusObj<#TempVF_FP003.uIdentifier>) to(#TempVF_FP003)

endroutine

* Listen for a Command Definition  Object

EVTROUTINE HANDLING(#UF_TRVRS.CommandDefinition) Reference(#TempVF_FPM09)

* All the Command Definitions are stored as internal members of a single object, #VF_FPM09.

* There is only one object reference that needs to be stored
set_ref #TheVF_FPM09 #TempVF_FPM09

* But to access the information about a particular Command Definition, we need to know
* the value of a special property called .CurrentMemberGUID.

* So, store that value in a list

Change #cmdGUID #TempVF_FPM09.CurrentMemberGUID
Change #cmdUID #TempVF_FPM09.uIdentifier

Add_entry #ListCmdGD


endroutine

* Listen for a Command Usage (Command Reference)  Object

EVTROUTINE HANDLING(#UF_TRVRS.CommandReference) Reference(#TempVF_FPM10) CommandDefinition(#TempVF_FPM09)


* All the Command References are stored as internal members of a single object, #VF_FPM10.

* There is only one object  that needs to be stored
set_ref #TheVF_FPM10 #TempVF_FPM10

* But to access the information about a particular Command Reference, we need to know
* the value of a special property called .CurrentMemberGUID.

* So, store that value in a list

Change #cmdRefGUD #TempVF_FPM10.CurrentMemberGUID

* Store the uIdentifier of the command that is refered to
Change #cmdRefUID #TempVF_FPM09.uIdentifier

Add_entry #ListCmRGd



ENDROUTINE

* Check which commands are not used anywhere

mthroutine Check_Unused

clr_list #LTVW_1

selectlist #ListCmdGD

* Which commands do not have a Command Reference that uses them?
Loc_Entry In_List(#ListCmRGd) Where(#cmdUID *eq #cmdrefUID)

if_status is_not(*Okay)

* Get Details of the command definition being processed
* (Set the GUID property first)
set #TheVF_FPM09 CurrentMemberGUID(#cmdGUID)

#df_eltxtl := 'Command: '  +  #TheVF_FPM09.uCaption.AsNativeString + ' is not used anywhere'

* To see what other command definition properties you can view, click on #The VF_FPM09 above and press F2, and look at the properties of the VF_FPM09 class

add_entry #LTVW_1
endif
endselect
endroutine
End_Com