130 likes | 223 Views
EGL Programming - Data Parts and Assignment Statements - 2 - DataItems. These slides walk you through the terms and concepts around declaring EGL variables using DataItem definitions. This learning module also covers EGL data properties in-depth.
E N D
EGL Programming - Data Parts and Assignment Statements - 2 - DataItems These slides walk you through the terms and concepts around declaring EGL variables using DataItem definitions. This learning module also covers EGL data properties in-depth.
2. DataItems – Defining Custom Types or “Domain Definitions” EGL supports the creation of new types for your application domains, that consist of extended semantic definitions for common application development requirements through a language abstraction known as DataItems. • A DataItem is a single element definition that associates a primitive data type with extended properties. Using DataItems you can create an operational “data dictionary” for your application with business rules entered into a central repository (a file of DataItems), coded and tested once and reused throughout. • Examples: dataitem Password String { DisplayUse=Secret, DisplayName = "Enter Password", InputRequired = yes } end • Defines a Password type as a string, that: • Displays asterisks when bound to a JSF control • The default label it creates is “Enter Password:” • The user must enter a value, or the EGL generated code – will return an error message dataitem OrderAmount Money(9, 2) { NumericSeparator = yes, ValidValues = [1.00, 999999.99] } end dataitem StateAbbrev String { ValidValues = ["AK","AL","CT","DE","NC","TX","NJ"] } end Can you figure out what semantic validations the OrderAmount and StateAbbrev DataItems provide?
Declaring an EGL DataItem – Syntax Format Prototype: DataItem <DataItemName> <primitive_type> { EGL Properties } end Example: DataItem Last_Name_Inp string { displayUse = input, displayName = “Enter Last Name”, inputRequired = yes, validatorFunction = lnameValFunc } end • Dragging a variable of this type onto a web page will create an input control • The label of this control will be: “Enter Last Name:” • This is not an optional entry field for users • A function in the JSFHandler named: lnameValFunc will be invoked automatically, to ensure that the data entered conforms to more complex business rules 1. 2. 3. 4.
F3 F3 I’ve Already Used DataItems + F3 (Open on Selection) Yes! When you imported the tables with the Data Access Application wizard, that process created a DataDefinitions.egl file – with default DataItems that were referenced in the fields of the records used in allcustomers2, updatecustomer2, allorders, etc. F3 (Best Practice) Edit allcustomers2. egl. Highlight the Customer record definition and press F3 (this will open the record definition in the Content Area). You can then highlight a DataItem (type) in the record, and press F3 to see the original DataItem definition.
DataItems – Best Practices – 1 of 2 – Generic/Specific Domains • DataItem Best Practices fall into two basic categories: • Individual/specific field domain definition • Generic domain definition Specific (individual field) DataItem Definitions: - You can define an individual DataItem (or most of the DataItems) for individual fields in Records and variables throughout your application***Notes - Typically, you would embed as many domain-specific customized properties as you can, when taking this approach dataItem Password String {DisplayUse=Secret,DisplayName="Enter Password", InputRequired=yes} end dataItem OrderAmount Money(8,2) {NumericSeparator=yes, ValidValues=[1.00, 999999.99]} end dataitem OrderDetails String {DisplayName="Order Details"} end dataitem CurrentStates String {ValidValues = ["AK","AL","CT","DE","NC","TX","NJ"]} end dataitem CustID int {DisplayUse=outPut,DisplayName="Customer ID",ValidValues=[1,999999]} end Generic (reusable/domain) DataItem Definitions - You can define “global” DataItem types for domains you use repeatedly throughout your application. Ex. MoneyType (9,2), DateType (dateFormat, etc.) - You would probably declare a minimal number of generic/common properties for such definitions, and then add to/over-ride when you declare variables of these types (see next slide) dataitem NameType String { upperCase = yes} end dataitem IDType int { DisplayUse=outPut, DisplayName="ID" } end dataitem MoneyType Money(8, 2) { NumericSeparator = yes, sign=leading } end dataitem DateType Date {dateFormat=eurDateFormat} end dataitem StateType char(2) {ValidValues = ["AK","AL", "AS", "AR", "AZ", "CA", "CO", "CT"…]}
DataItems – Best Practices – 2 of 2 – Over-riding Properties • For any use (reference to) a DataItem type, in one of your logic parts, you may: • Insert new properties – which are added to the property list defined in the DataItem • Over-ride properties – which forces the EGL tooling to substitute your new property, for a defined property of the same type in the Domain Definition Example: 1. Initial DataItem definition: 2. Variable of type: Password – over-riding DisplayName and DisplayUse, adding UpperCase= 3. Drag field3 (with over-ridden properties) on a web page. Note design and run-time results: Over-Ridden DisplayUse Over-Ridden DisplayName UpperCase=yes
EGL Properties – Leveraging DataItems You specify useful business semantics for a DataItem by coding one or more EGL Properties. Properties are powerful ways of expressing business rules for your DataItems. They are coded with the following name/value pair syntax: { <property>=<value>, <property>=<value>, …} Considerations: • Properties exist for: • Data Parts (we are mostly interested in Data Part properties here) • Logic Parts • UI Parts (Terminal User Interface forms) • DataItems allow you to: • Consolidate like or related properties into a single new, custom “type” • Create unique “one-off” types for fields in your application Let’s have a look at properties within the help system. From the Help menu, search on: Master list of all EGL properties
EGL Properties – Two Categories Formatting and U.I. display • upperCase / lowerCase – translates Alphabetic characters to upper case • zeroFormat – display a zero (yes) or blank (no – default) on pages for values of zero • Sign – provides a negative indicator character, for numeric values less than zero being displayed • displayName – allows you to customize the label for the variable, when dragged onto a page • dateFormat – allows you to custom-format a date field’s display • fillCharacter – over-rides the default fill character (blanks) for fields • numericSeparator – adds commas to Money and numeric output fields Validation and Data Entry (input/edit properties) • All of these Properties are used to trigger server-side generated code, that automatically applies business logic rules – consistently, to user data entry values, and automatically returns errors if the data tests false • inputRequired (yes/no) – forces users to enter non-blank data in a field upon input • validValues […] – allows you to provide a list of values which user input is tested against*** Notes • validatorTable = DataTablename – Names an EGL DataTable that contains values which the user input must adhere to • validatorFunction = FunctionName – allows you to name a custom JSF Handler function that will be called automatically to test user input against. Use for complex data entry edit requirements • onValueChangeFunction – similar to validatorFunction, except that this function is only invoked if users actually change values on a field in a page
EGL Properties and Content Assist and Source Assistant too! What if you don’t remember the syntax for a particular EGL Property? Two options: 1. By placing your cursor between the curly braces, and pressingCtrl+Shift+Z - You invoke Source Assistant – wizard-driven method of selecting properties 2. Ctrl/Spacebar - You can let Content Assist bring up a list of all variable properties
Declaring EGL Variables That Reference a DataItem Type After a DataItem has been defined and saved you can refer to it as the “TYPE” of a variable in a Logic Part. And the EGL tooling “copies” all of the extended semantic properties of the DataItem definition to your variable declaration when you generate. • This allows you to declare variables of <DataItemType>; - using Content Assist (in an EGL Logic Part) //VariableName DataItem (new variable type) pWord Password; ordAmt OrderAmount; • Note that the DataItem definition (in the above example, Password and OrderAmount) must be available within the Namespace – meaning you may need an import statement for the folder that contains the EGL source file with the DataItem definitions you wish to use. Ex. import data.*;
Workshops for DataItem Topic – 1 of 2 Using the RBD tooling and EGL, create the EGL DataItems and their custom properties as shown here. Steps: 1. Create a new EGL source file named: DataDictionary in the \data\ directory under \EGLSource\ 2. Into this file, Copy and paste the following DataItem definitions (below the package statement) //A DataItem AgeItem smallint {displayName="Enter Age", validValues=[[18,99]], DisplayUse = input} end //D DataItem DateOfBirthItem Date {displayName="Enter Date of Birth", dateFormat=usaDateFormat} end //H Dataitem HeightItem Decimal (3,1) {displayName="Enter Height", value=0.0} end //N DataItem NameItem string {displayName="* Enter Name",inputRequired=yes} end //P DataItem PhoneItem char(12) {displayName="* Enter Phone",inputRequired = yes} end //S DataItem SalaryItem decimal(8,2) {displayName="Enter Salary",currency=yes, validValues=[[20000.00,99999.99]], DisplayUse = Input} end DataItem selItem boolean {value=false, displayname="Generic Boolean"} end DataItem StateItem char(2) {validValues=["CA","CT","NJ","NY","NC"]} end //Z DataItem ZipItem char(5) {displayName="Enter Zip", validValues=[["00001","90210"]]} end 3. Modify the displayName and validValues properties. 4. Change the dateFormat from usaDateFormat to another alternative. Note – use Content Assist to help you discover and code a valid date format syntax)
Workshops for DataItem Topic – 2 of 2 5. Return to your newaccount JSFHandler, and modify the EGL data types, as shown here …referencing DataItems instead of Primitive types in most cases • Use Content Assist to speed your work! 6. Press Ctrl/Sto save
Topic Summary • Now that you have completed this topic, you should be able to: • Define EGL DataItems • Describe several useful properties of DataItems • Use Content Assist and Source Assistant to create DataItem properties • Code variables that reference new DataItem types • Over-ride EGL properties defined in DataItems for variables declarations