*=============================================================================
*
* 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