240 likes | 262 Views
Learn how to create custom composite components in .SAS/AF with this detailed example, including visual and non-visual controls. Follow step-by-step instructions for deploying and configuring composite components effectively.
E N D
SAS/AF Composite Class:A Detailed Example Richard A. DeVenezia
Composite documentation • SAS Online Help • Look under Legacy • SAS Online Doc • Not present in V8 • SAS Online Doc PDF • Not present in V8
What is a composite ? • A custom component • Comprised of other components • Visual controls • text entry, combo box, list box, push button, etc... • Non-visual models • library list, catalog list, data set list, etc... • A subclass of sashelp.fsp.Composit.class • Deployed by using in a frame
Developing classes • A single SCL entry • Two or more SCL entries • A CLASS entry and a SCL entry • A CLASS entry and multiple SCL entries • This is the scenario of the sample composite ListOfValues
CLASS entry and SCL entries • Class Editor (GUI) used to develop CLASS entry • attributes, methods • events, event handlers • interfaces • SCL entries for implementations • attribute methods: setCAM, getCAM • methods: new and overrides
SCL entries • USECLASS / ENDUSECLASS block • All the attributes and methods of _self_ are implicitly available. • Early binding allows checks at compile time • No USECLASS block • Attributes and methods of _self_ must be referenced through _self_ dot notation. • Late binding, checks are done at run time
ListOfValues example • Visual Controls • List box, Push buttons • Non-visual • SLIST entry list model • Behaviour • List management • Persistence of list
Create ListOfValues • Issue build command • build example.sugi26.listofvalues.class
Layout components • Edit componentDefinition attribute to enter the CompositeDefinition window
CompositeDefinition window • Components window added to docking view • Very similar to frame build window • Component Properties Editor available from context menu or View menu
Component naming • Use a convention that clarifies implemen-tation SCL code • co_type_name • co indicates a component in the composite • type • pb for push button control • lb for list box control • mdl for a model • name indicating functionality
Component attachments • Make your composite ‘size smart’ • Use menu Layout/Attach/Define Attachment • Widen and heighten the list box when composite enlarged by usingsingle directional attachmenttypes
Model / Viewer linkages • Set co_lb_Values model attribute to co_mdl_ValuesSLIST • When the SLIST entryName is set, the model will pass the SCL list read to the list box items attribute, causing the list of values shown to change
Configuring method overrides • A method of the component is selected in the Properties Editor • Overridden using context menu • Source Entry set to a SCL entry • Examples.Sugi26.Listofvalues.scl • Source Label set to a method label in the SCL entry
ListOfValues method overrides • Source entry Examples.Sugi26.Listofvalues.scl • Push buttons _onClick() Source Label • co_pb_AddValue onClickAdd • co_pb_ReplaceValue onClickReplace • ... onClick... • List box _onPopup() Source Label • c o_lb_Values onPopupValues
onClick...() override SCL • Does not have a USECLASS block • Accessing other components in composite • lov = _self_.ownerId;lov._getWidget ( widgetName, widgetId );widgetId... • Be glad component naming conventions were used (widgetName)
onPopup() override SCL • Invokes _sendEvent() on _self_.ownerId • Not required, but implemented this way for demonstration of technique • Custom event “valuesListBox ContextMenuRequested” sent • The composite (ownerId) must be configured to handle the custom event
Layout finished • Exit the Composite Definition window • Answer ‘Yes’ to dialog asking to save changes • Returns to Class Editor
Add public attributes • Allows customization when deployed • valuesAddDialogTitle • valuesAddDialogPrompt • valuesAddDialogMaskCharacter • valuesListBoxTitle • Set CAM = setcamValuesListBoxTitle • valuesSLISTEntryName • Set CAM = setcamValuesSLISTEntryName
setcam... methods • setcamValuesListBoxTitle • Forwards attribute value to list box title atttribute • setcamValuesSLISTEntryName • Forwards attribute value to SLIST entry list model entryName attribute • Reads SCL list from catalog entry • SLIST entry list model feeds list box viewer • Invokes the list box _refresh() method
Override methods • _term • The current list shown in list box will be stored in catalog entry named in attribute valuesSLISTEntryName • savelist() function used to store SCL list • This behavior implements the persistent aspect of ListOfValues
Add event and handler • Event name “valuesListBox ContextMenuRequested” • Event handler definition configures which method is dispatch when the event occurs • onValuesListBoxContextMenuRequested() • The handler method pops up a menu to allow a value to be added or removed from the list box
Composite SCL entry • This entry does contain a USECLASS block • All components layed out in Composite-Defintion window are implicitly available • Again, be glad that sensible naming convention was used from components
Conclusion • The composite class is very flexible • Time should be taken to learn model/viewer fundamentals and new features in SAS/AF • The wide range of implementation possibilities can make it hard to determine which route to follow SAS and SAS/AF are registered trademarks or trademarks of SAS Institute Inc, in the USA and other countries. indicates USA registration.