SlideShare uma empresa Scribd logo
1 de 35
Baixar para ler offline
MONTREAL 1/3 JULY 2011




Customizing ERModernLook
Applications
David Holt
CSCW Systems Corporation
Overview

•   Context

•   D2W is awesome! - David LeBer WOWODC 2011

•   Developer workflow when using D2W

•   Brand new demo has examples of everything I'll talk about

•   Strategies and tips for development with ERModernLook
Context
•   Attended WWDC in 2000 and 2002 when WO still had heavy
    presence and saw the WOnder release presentation

•   Developer with WO since 2003

•   Lone developer with additional support when necessary

•   Started with WOnder - my preference is to use what exists

•   Our applications are tools that attempt to direct user behaviour
    as much as possible - form based, no advertising, simple and
    utilitarian, minimize training
Our experience with
             ERModernLook
•   Made the commitment to start using D2W about a year ago

•   Core functionality of main app took about a month to get going

•   Simple data capture applications take about two weeks start to
    finish

•   Fast prototyping and iterations for the clients

•   We have found ERModernLook is ready for client facing
    applications “out of the box”
Overview
“Just” Determining what
          the Conventions Are
•   Your job is to understand what default behaviour
    ERModernLook has and what frameworks are used to provide
    that behaviour

•   There is default behaviour where you may not expect (CSS)

•   I am NOT going to talk about creating a new look, because then
    you are creating your own conventions/default behaviours for
    your applications to follow
Hopefully Conventions are
          “Best Practices”
•   proper subclassing of pages and components

•   separate business logic from your view and controller logic

•   correct editing context handling (EC per page, peer EC for edit
    pages so changes can be discarded when the user Cancels)

•   all string labels in the UI are localized

•   data entered in forms is validated / errors displayed to the user

•   PageWrapper/WOComponentContent + ERXNavigationMenu
Over Time, Conventions Change
1.     The days only Chuck remembers (you will likely see this in “legacy” code)

     Project eo = new Project();
     ec.insertObject(eo);
     // manually set up your mandatory attributes and relationships


2. The days that everyone remembers (you will likely see this in a lot of code)

     EOUtilities.createAndInsertInstance(ec, "Project");
     // manually set up your mandatory attributes and relationships


3. The current convention (you will likely see more adoption going forward)

     Person user = _session._user;
     Project.createProject(ec, "Write Slides", user); // constructor sets mandatory attributes and relationships
A brief segue

•   What is D2W? See wiki for list of resources

•   I found it helpful to hear it referred to as an expert system

•   What does it know?

•   How to build web application front ends to data stores

•   It has been DESIGNED to take care of most of your front end
    development tasks
ERModernLook is not just D2W

•   ERXNavigation

•   Localization

•   Validation

•   Object Oriented CSS

•   Ajax
Steps for Developer




                                               Customized
Model your Database,                            behaviour
                                                                 Refinement (adjust UI
  Customize your       Default Application   work flow, labels,
                                                                   where necessary)
   business logic                            custom property
                                               components
Steps for the Developer (Model)

•   Create or supply a Model

•   how you name your attributes and relationships affects their
    default labels

•   user info dictionaries

•   default behaviour with respect to your model is determined by
    rules
Steps for the Developer (Login)

•   Decide whether you need login handling

•   If you do, you can handle where your user lands after login

•   If you don't, then your Main component can offer whatever
    functionality you choose

•   ERXD2WDirectAction (maybe you want to give direct access to
    your app via email, web link, etc.)
Steps for the Developer (Page)
•   Choose an entity to work with

•   Decide on a task. Maybe a Sub-task (wizard, tab, group, csv)

•   Default page or a named PageConfiguration - default naming
    conventions

•   Decide on template for the page (i.e. List, GroupingList)

•   Labels (you can use variables too)

•   These behaviours are set up with rules
Steps for Developer (Page cont.)
•   Is default or modified behaviour of the page template adequate?

•   Make new template for this page?

•   displayPropertyKeys - what attributes and relationships will you
    choose to display?

•   Are there permission-based considerations for things you’re
    displaying on the page?

•   Modify Rules, Templates, Business Logic
Steps for Developer (Attributes)

•   Are the default components adequate? Do any customizable
    characteristics need to be modified? (i.e. height, width)

•   How do you plan to label them? (I strongly recommend
    Localizable.strings even if you are using only one language)

•   Any special characteristics apply? Custom property level
    component?
Steps for Developer
                (Relationships)
•   Which component applies?

•   ERD2WEditToManyRelationship is worth the effort to learn

•   Likely need to modify default characteristics depending on your
    number of options (checkboxes, browser, radio)

•   What do you plan to use to label the items in the relationship?
    (userPresentableDescription, custom business logic, a specific
    attribute on the related entity?)
ERModernLook (navigation)
•   Set up your navigation tab for the chosen entity/page

•   Nice convention is something like Tab-Entity, SubTab-Task1,
    SubTab-Task2


•   Work out labels for the Localizable.strings file

•   Set up your rules for NavigationState. Navigation State is
    controlled by the page you load.
ERModernLook (navigation cont.)
•   ERXNavigation allows you to use up to three levels of tabs

•   You can do all sorts of fancy things (see Ramsey’s notes from
    HelloD2W NavigationMenu.plist)

•   You can vary the configuration of tabs and sub-tabs based on
    stored values (tabs for no login, tabs after login)

•   I use ERXThreadStorage in my session (i.e. based on a whether a
    user is logged in, whether a user has permission to see a given
    tab configuration)
Navigation configuration example
                (session class)
    public String navigationRootChoice() {
    Person user = (Person) user();
    if(user != null ) {
      if(user.isAdmin()==true) {
        return "adminuser";
      }
      return "home";
    }
    return "none";
}
Navigation configuration example
               (NavigationMenu.plist)
    	   	 name = Root;
	   	   directActionClass = DirectAction;
	   	   directActionName = default;
	   	   children = "session.navigationRootChoice";
	   	   childrenChoices = {
	   	   	 home = (
	   	   	 	 Instructions, Blog,
	   	   	 );
	   	   	 adminuser = (
	   	   	 Instructions, Admin,
	   	   	 );
	   	   	 none = (
	   	   	 	 PublicBlog,
	   	   	 );
	   	   };
ERModernLook (pageflow)

•   Page creation logic for each tab goes in the
    MainNavigationController.

•   After creating a few pages, workflow issues begin to appear

•   You may not need a tab for every page (i.e. some tasks can have
    Navigation State left as the Tab for the Entity)
ERModernLook (pageflow cont.)

•   You can use the “actions” key to set up your right and left
    actions in Lists

•   You can use ERDControllerButton in rows for additional, custom
    actions

•   For page level actions (such as download excel version) you can
    use ERDActionBar which appears in the BottomActions section
How to manage the complexity?
•   I have created a set of custom EOModelDoc templates that give
    you generated worksheets to record some of the decisions you
    are making at the entity/task level

•   More importantly, the worksheets can help you communicate to
    your client which property keys will be displayed on which page,
    the labels that will be used, the label for the page)

•   Of course you can also just build and iterate which has a very
    low overhead once you get comfortable with what you are doing
CSS
•   ERModernLook makes extensive use of CSS

•   You can use the default skin and easily add a custom stylesheet
    to your application so you don’t have to start from scratch

•   You can also copy the skin framework entirely and then change
    the stylesheets as much as you like

•   I have begun the work of generating the skin framework with
    Sass and Compass. This allows the use of variables in stylesheets
    and the opportunity to quickly create entirely new skins rapidly
Sencha Touch as an Example
Demo of SimpleBlog
Suggestions and Tips
•   Take it slow, practice practice practice- Zen and the Art of
    Archery

•   Limit yourself to existing templates/components at the start
    (don’t forget ERD2W, D2W includes many components)

•   Learn simple rules first (displayPropertyKeys, show/hide buttons)

•   Learn how to configure embedded page configurations such as
    ERMODEditRelationshipPage (this is among my most used
    components)
More Suggestions and Tips
•   One of my favourite threads all time was a question about how
    to create a button for D2W that would create an email and send
    it to users. The first response was for people to dive into how
    to create a custom component, but then they realized that the
    action could be triggered in the business logic.

•   When it comes to creating new components, think it through
    carefully.You’ll be surprised how much can be moved into
    business logic using methods such as...
ERXGenericRecord
•   willInsert

•   didInsert

•   willUpdate

•   didUpdate

•   willDelete

•   didDelete
Additional things that could have
         been covered
•   ERSelenium (functional testing is crucial since rule changes are
    relatively unpredictable until run time). See WOWODC
    presentation from 2008 on testing.

•   Migrations

•   ERAttachment

•   BugTracker - especially the Factory class

•   ERCoreBusinessLogic
Resources


•   http://wiki.objectstyle.org/confluence/display/WO/Direct+To
    +Web+%28D2W+and+ERD2W%29

•   https://github.com/daveeed/SimpleBlog
MONTREAL 1/3 JULY 2011




Q&A

Mais conteúdo relacionado

Mais procurados

Drupal intro-training-in-mumbai
Drupal intro-training-in-mumbaiDrupal intro-training-in-mumbai
Drupal intro-training-in-mumbaivibrantuser
 
Efficient Rails Test-Driven Development - Week 6
Efficient Rails Test-Driven Development - Week 6Efficient Rails Test-Driven Development - Week 6
Efficient Rails Test-Driven Development - Week 6Marakana Inc.
 
What IS SharePoint Development?
What IS SharePoint Development?What IS SharePoint Development?
What IS SharePoint Development?Mark Rackley
 
Session 8 - Xcode 5 and interface builder for iOS 7 application
Session 8 - Xcode 5 and interface builder for iOS 7 applicationSession 8 - Xcode 5 and interface builder for iOS 7 application
Session 8 - Xcode 5 and interface builder for iOS 7 applicationVu Tran Lam
 
Introduction to jquery mobile with Phonegap
Introduction to jquery mobile with PhonegapIntroduction to jquery mobile with Phonegap
Introduction to jquery mobile with PhonegapRakesh Jha
 
Modern development paradigms
Modern development paradigmsModern development paradigms
Modern development paradigmsIvano Malavolta
 
SharePoint & jQuery Guide - SPSTC 5/18/2013
SharePoint & jQuery Guide - SPSTC 5/18/2013 SharePoint & jQuery Guide - SPSTC 5/18/2013
SharePoint & jQuery Guide - SPSTC 5/18/2013 Mark Rackley
 
The Magic Revealed: Four Real-World Examples of Using the Client Object Model...
The Magic Revealed: Four Real-World Examples of Using the Client Object Model...The Magic Revealed: Four Real-World Examples of Using the Client Object Model...
The Magic Revealed: Four Real-World Examples of Using the Client Object Model...SPTechCon
 
The SharePoint & jQuery Guide
The SharePoint & jQuery GuideThe SharePoint & jQuery Guide
The SharePoint & jQuery GuideMark Rackley
 
Accessible UIs with jQuery and Infusion
Accessible UIs with jQuery and InfusionAccessible UIs with jQuery and Infusion
Accessible UIs with jQuery and Infusioncolinbdclark
 
Bringing HTML5 alive in SharePoint
Bringing HTML5 alive in SharePointBringing HTML5 alive in SharePoint
Bringing HTML5 alive in SharePointChad Schroeder
 
IBM Digital Experience Theme Customization
IBM Digital Experience Theme CustomizationIBM Digital Experience Theme Customization
IBM Digital Experience Theme CustomizationVan Staub, MBA
 
What is SharePoint Development??
What is SharePoint Development??What is SharePoint Development??
What is SharePoint Development??Mark Rackley
 
Iasi code camp 12 october 2013 shadow dom - mihai bîrsan
Iasi code camp 12 october 2013   shadow dom - mihai bîrsanIasi code camp 12 october 2013   shadow dom - mihai bîrsan
Iasi code camp 12 october 2013 shadow dom - mihai bîrsanCodecamp Romania
 
User-Centered Design in IT: the Low-Hanging Fruit
User-Centered Design in IT: the Low-Hanging FruitUser-Centered Design in IT: the Low-Hanging Fruit
User-Centered Design in IT: the Low-Hanging FruitAllison Bloodworth
 
Introduction to Client Side Dev in SharePoint Workshop
Introduction to Client Side Dev in SharePoint WorkshopIntroduction to Client Side Dev in SharePoint Workshop
Introduction to Client Side Dev in SharePoint WorkshopMark Rackley
 
NOW I Get it!! What SharePoint IS and why I need it
NOW I Get it!! What SharePoint IS and why I need itNOW I Get it!! What SharePoint IS and why I need it
NOW I Get it!! What SharePoint IS and why I need itMark Rackley
 
Building jQuery Mobile Web Apps
Building jQuery Mobile Web AppsBuilding jQuery Mobile Web Apps
Building jQuery Mobile Web AppsOperation Mobile
 
7 Tips For Better JDeveloper Experience
7 Tips For Better JDeveloper Experience7 Tips For Better JDeveloper Experience
7 Tips For Better JDeveloper Experienceshay.shmeltzer
 
SharePoint & jQuery Guide - SPSNashville 2014
SharePoint & jQuery Guide - SPSNashville 2014SharePoint & jQuery Guide - SPSNashville 2014
SharePoint & jQuery Guide - SPSNashville 2014Mark Rackley
 

Mais procurados (20)

Drupal intro-training-in-mumbai
Drupal intro-training-in-mumbaiDrupal intro-training-in-mumbai
Drupal intro-training-in-mumbai
 
Efficient Rails Test-Driven Development - Week 6
Efficient Rails Test-Driven Development - Week 6Efficient Rails Test-Driven Development - Week 6
Efficient Rails Test-Driven Development - Week 6
 
What IS SharePoint Development?
What IS SharePoint Development?What IS SharePoint Development?
What IS SharePoint Development?
 
Session 8 - Xcode 5 and interface builder for iOS 7 application
Session 8 - Xcode 5 and interface builder for iOS 7 applicationSession 8 - Xcode 5 and interface builder for iOS 7 application
Session 8 - Xcode 5 and interface builder for iOS 7 application
 
Introduction to jquery mobile with Phonegap
Introduction to jquery mobile with PhonegapIntroduction to jquery mobile with Phonegap
Introduction to jquery mobile with Phonegap
 
Modern development paradigms
Modern development paradigmsModern development paradigms
Modern development paradigms
 
SharePoint & jQuery Guide - SPSTC 5/18/2013
SharePoint & jQuery Guide - SPSTC 5/18/2013 SharePoint & jQuery Guide - SPSTC 5/18/2013
SharePoint & jQuery Guide - SPSTC 5/18/2013
 
The Magic Revealed: Four Real-World Examples of Using the Client Object Model...
The Magic Revealed: Four Real-World Examples of Using the Client Object Model...The Magic Revealed: Four Real-World Examples of Using the Client Object Model...
The Magic Revealed: Four Real-World Examples of Using the Client Object Model...
 
The SharePoint & jQuery Guide
The SharePoint & jQuery GuideThe SharePoint & jQuery Guide
The SharePoint & jQuery Guide
 
Accessible UIs with jQuery and Infusion
Accessible UIs with jQuery and InfusionAccessible UIs with jQuery and Infusion
Accessible UIs with jQuery and Infusion
 
Bringing HTML5 alive in SharePoint
Bringing HTML5 alive in SharePointBringing HTML5 alive in SharePoint
Bringing HTML5 alive in SharePoint
 
IBM Digital Experience Theme Customization
IBM Digital Experience Theme CustomizationIBM Digital Experience Theme Customization
IBM Digital Experience Theme Customization
 
What is SharePoint Development??
What is SharePoint Development??What is SharePoint Development??
What is SharePoint Development??
 
Iasi code camp 12 october 2013 shadow dom - mihai bîrsan
Iasi code camp 12 october 2013   shadow dom - mihai bîrsanIasi code camp 12 october 2013   shadow dom - mihai bîrsan
Iasi code camp 12 october 2013 shadow dom - mihai bîrsan
 
User-Centered Design in IT: the Low-Hanging Fruit
User-Centered Design in IT: the Low-Hanging FruitUser-Centered Design in IT: the Low-Hanging Fruit
User-Centered Design in IT: the Low-Hanging Fruit
 
Introduction to Client Side Dev in SharePoint Workshop
Introduction to Client Side Dev in SharePoint WorkshopIntroduction to Client Side Dev in SharePoint Workshop
Introduction to Client Side Dev in SharePoint Workshop
 
NOW I Get it!! What SharePoint IS and why I need it
NOW I Get it!! What SharePoint IS and why I need itNOW I Get it!! What SharePoint IS and why I need it
NOW I Get it!! What SharePoint IS and why I need it
 
Building jQuery Mobile Web Apps
Building jQuery Mobile Web AppsBuilding jQuery Mobile Web Apps
Building jQuery Mobile Web Apps
 
7 Tips For Better JDeveloper Experience
7 Tips For Better JDeveloper Experience7 Tips For Better JDeveloper Experience
7 Tips For Better JDeveloper Experience
 
SharePoint & jQuery Guide - SPSNashville 2014
SharePoint & jQuery Guide - SPSNashville 2014SharePoint & jQuery Guide - SPSNashville 2014
SharePoint & jQuery Guide - SPSNashville 2014
 

Semelhante a Customizing ERModernLook Applications

Web Development with Delphi and React - ITDevCon 2016
Web Development with Delphi and React - ITDevCon 2016Web Development with Delphi and React - ITDevCon 2016
Web Development with Delphi and React - ITDevCon 2016Marco Breveglieri
 
Features, Exportables & You
Features, Exportables & YouFeatures, Exportables & You
Features, Exportables & Youjskulski
 
Clean architecture with asp.net core
Clean architecture with asp.net coreClean architecture with asp.net core
Clean architecture with asp.net coreSam Nasr, MCSA, MVP
 
5 Common Mistakes You are Making on your Website
 5 Common Mistakes You are Making on your Website 5 Common Mistakes You are Making on your Website
5 Common Mistakes You are Making on your WebsiteAcquia
 
Add-On Development: EE Expects that Every Developer will do his Duty
Add-On Development: EE Expects that Every Developer will do his DutyAdd-On Development: EE Expects that Every Developer will do his Duty
Add-On Development: EE Expects that Every Developer will do his Dutyreedmaniac
 
Add-On Development: EE Expects that Every Developer will do his Duty
Add-On Development: EE Expects that Every Developer will do his DutyAdd-On Development: EE Expects that Every Developer will do his Duty
Add-On Development: EE Expects that Every Developer will do his DutyLeslie Doherty
 
jQuery: The World's Most Popular JavaScript Library Comes to XPages
jQuery: The World's Most Popular JavaScript Library Comes to XPagesjQuery: The World's Most Popular JavaScript Library Comes to XPages
jQuery: The World's Most Popular JavaScript Library Comes to XPagesTeamstudio
 
Browser Developer Tools for APEX Developers
Browser Developer Tools for APEX DevelopersBrowser Developer Tools for APEX Developers
Browser Developer Tools for APEX DevelopersChristian Rokitta
 
Angular JS, A dive to concepts
Angular JS, A dive to conceptsAngular JS, A dive to concepts
Angular JS, A dive to conceptsAbhishek Sur
 
Design Systems: Enterprise UX Evolution
Design Systems: Enterprise UX EvolutionDesign Systems: Enterprise UX Evolution
Design Systems: Enterprise UX EvolutionAnne Grundhoefer
 
DSL, Page Object и WebDriver – путь к надежным функциональным тестам
DSL, Page Object и WebDriver – путь к надежным функциональным тестамDSL, Page Object и WebDriver – путь к надежным функциональным тестам
DSL, Page Object и WebDriver – путь к надежным функциональным тестамSQALab
 

Semelhante a Customizing ERModernLook Applications (20)

WOdka
WOdkaWOdka
WOdka
 
Web Development with Delphi and React - ITDevCon 2016
Web Development with Delphi and React - ITDevCon 2016Web Development with Delphi and React - ITDevCon 2016
Web Development with Delphi and React - ITDevCon 2016
 
Features, Exportables & You
Features, Exportables & YouFeatures, Exportables & You
Features, Exportables & You
 
Clean architecture with asp.net core
Clean architecture with asp.net coreClean architecture with asp.net core
Clean architecture with asp.net core
 
5 Common Mistakes You are Making on your Website
 5 Common Mistakes You are Making on your Website 5 Common Mistakes You are Making on your Website
5 Common Mistakes You are Making on your Website
 
React.js at Cortex
React.js at CortexReact.js at Cortex
React.js at Cortex
 
1_Intro_toHTML.ppt
1_Intro_toHTML.ppt1_Intro_toHTML.ppt
1_Intro_toHTML.ppt
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
BackboneJS
BackboneJSBackboneJS
BackboneJS
 
Add-On Development: EE Expects that Every Developer will do his Duty
Add-On Development: EE Expects that Every Developer will do his DutyAdd-On Development: EE Expects that Every Developer will do his Duty
Add-On Development: EE Expects that Every Developer will do his Duty
 
presentation
presentationpresentation
presentation
 
Add-On Development: EE Expects that Every Developer will do his Duty
Add-On Development: EE Expects that Every Developer will do his DutyAdd-On Development: EE Expects that Every Developer will do his Duty
Add-On Development: EE Expects that Every Developer will do his Duty
 
presentation
presentationpresentation
presentation
 
Prashant Patel
Prashant PatelPrashant Patel
Prashant Patel
 
jQuery: The World's Most Popular JavaScript Library Comes to XPages
jQuery: The World's Most Popular JavaScript Library Comes to XPagesjQuery: The World's Most Popular JavaScript Library Comes to XPages
jQuery: The World's Most Popular JavaScript Library Comes to XPages
 
Browser Developer Tools for APEX Developers
Browser Developer Tools for APEX DevelopersBrowser Developer Tools for APEX Developers
Browser Developer Tools for APEX Developers
 
Visualforce
VisualforceVisualforce
Visualforce
 
Angular JS, A dive to concepts
Angular JS, A dive to conceptsAngular JS, A dive to concepts
Angular JS, A dive to concepts
 
Design Systems: Enterprise UX Evolution
Design Systems: Enterprise UX EvolutionDesign Systems: Enterprise UX Evolution
Design Systems: Enterprise UX Evolution
 
DSL, Page Object и WebDriver – путь к надежным функциональным тестам
DSL, Page Object и WebDriver – путь к надежным функциональным тестамDSL, Page Object и WebDriver – путь к надежным функциональным тестам
DSL, Page Object и WebDriver – путь к надежным функциональным тестам
 

Mais de WO Community

In memory OLAP engine
In memory OLAP engineIn memory OLAP engine
In memory OLAP engineWO Community
 
Using Nagios to monitor your WO systems
Using Nagios to monitor your WO systemsUsing Nagios to monitor your WO systems
Using Nagios to monitor your WO systemsWO Community
 
Build and deployment
Build and deploymentBuild and deployment
Build and deploymentWO Community
 
Reenabling SOAP using ERJaxWS
Reenabling SOAP using ERJaxWSReenabling SOAP using ERJaxWS
Reenabling SOAP using ERJaxWSWO Community
 
Chaining the Beast - Testing Wonder Applications in the Real World
Chaining the Beast - Testing Wonder Applications in the Real WorldChaining the Beast - Testing Wonder Applications in the Real World
Chaining the Beast - Testing Wonder Applications in the Real WorldWO Community
 
D2W Stateful Controllers
D2W Stateful ControllersD2W Stateful Controllers
D2W Stateful ControllersWO Community
 
Deploying WO on Windows
Deploying WO on WindowsDeploying WO on Windows
Deploying WO on WindowsWO Community
 
Unit Testing with WOUnit
Unit Testing with WOUnitUnit Testing with WOUnit
Unit Testing with WOUnitWO Community
 
Apache Cayenne for WO Devs
Apache Cayenne for WO DevsApache Cayenne for WO Devs
Apache Cayenne for WO DevsWO Community
 
Advanced Apache Cayenne
Advanced Apache CayenneAdvanced Apache Cayenne
Advanced Apache CayenneWO Community
 
Migrating existing Projects to Wonder
Migrating existing Projects to WonderMigrating existing Projects to Wonder
Migrating existing Projects to WonderWO Community
 
iOS for ERREST - alternative version
iOS for ERREST - alternative versioniOS for ERREST - alternative version
iOS for ERREST - alternative versionWO Community
 
"Framework Principal" pattern
"Framework Principal" pattern"Framework Principal" pattern
"Framework Principal" patternWO Community
 
Filtering data with D2W
Filtering data with D2W Filtering data with D2W
Filtering data with D2W WO Community
 
Localizing your apps for multibyte languages
Localizing your apps for multibyte languagesLocalizing your apps for multibyte languages
Localizing your apps for multibyte languagesWO Community
 

Mais de WO Community (20)

KAAccessControl
KAAccessControlKAAccessControl
KAAccessControl
 
In memory OLAP engine
In memory OLAP engineIn memory OLAP engine
In memory OLAP engine
 
Using Nagios to monitor your WO systems
Using Nagios to monitor your WO systemsUsing Nagios to monitor your WO systems
Using Nagios to monitor your WO systems
 
Build and deployment
Build and deploymentBuild and deployment
Build and deployment
 
High availability
High availabilityHigh availability
High availability
 
Reenabling SOAP using ERJaxWS
Reenabling SOAP using ERJaxWSReenabling SOAP using ERJaxWS
Reenabling SOAP using ERJaxWS
 
Chaining the Beast - Testing Wonder Applications in the Real World
Chaining the Beast - Testing Wonder Applications in the Real WorldChaining the Beast - Testing Wonder Applications in the Real World
Chaining the Beast - Testing Wonder Applications in the Real World
 
D2W Stateful Controllers
D2W Stateful ControllersD2W Stateful Controllers
D2W Stateful Controllers
 
Deploying WO on Windows
Deploying WO on WindowsDeploying WO on Windows
Deploying WO on Windows
 
Unit Testing with WOUnit
Unit Testing with WOUnitUnit Testing with WOUnit
Unit Testing with WOUnit
 
Life outside WO
Life outside WOLife outside WO
Life outside WO
 
Apache Cayenne for WO Devs
Apache Cayenne for WO DevsApache Cayenne for WO Devs
Apache Cayenne for WO Devs
 
Advanced Apache Cayenne
Advanced Apache CayenneAdvanced Apache Cayenne
Advanced Apache Cayenne
 
Migrating existing Projects to Wonder
Migrating existing Projects to WonderMigrating existing Projects to Wonder
Migrating existing Projects to Wonder
 
iOS for ERREST - alternative version
iOS for ERREST - alternative versioniOS for ERREST - alternative version
iOS for ERREST - alternative version
 
iOS for ERREST
iOS for ERRESTiOS for ERREST
iOS for ERREST
 
"Framework Principal" pattern
"Framework Principal" pattern"Framework Principal" pattern
"Framework Principal" pattern
 
Filtering data with D2W
Filtering data with D2W Filtering data with D2W
Filtering data with D2W
 
WOver
WOverWOver
WOver
 
Localizing your apps for multibyte languages
Localizing your apps for multibyte languagesLocalizing your apps for multibyte languages
Localizing your apps for multibyte languages
 

Último

TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesThousandEyes
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterMydbops
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditSkynet Technologies
 

Último (20)

TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance Audit
 

Customizing ERModernLook Applications

  • 1. MONTREAL 1/3 JULY 2011 Customizing ERModernLook Applications David Holt CSCW Systems Corporation
  • 2. Overview • Context • D2W is awesome! - David LeBer WOWODC 2011 • Developer workflow when using D2W • Brand new demo has examples of everything I'll talk about • Strategies and tips for development with ERModernLook
  • 3. Context • Attended WWDC in 2000 and 2002 when WO still had heavy presence and saw the WOnder release presentation • Developer with WO since 2003 • Lone developer with additional support when necessary • Started with WOnder - my preference is to use what exists • Our applications are tools that attempt to direct user behaviour as much as possible - form based, no advertising, simple and utilitarian, minimize training
  • 4. Our experience with ERModernLook • Made the commitment to start using D2W about a year ago • Core functionality of main app took about a month to get going • Simple data capture applications take about two weeks start to finish • Fast prototyping and iterations for the clients • We have found ERModernLook is ready for client facing applications “out of the box”
  • 6. “Just” Determining what the Conventions Are • Your job is to understand what default behaviour ERModernLook has and what frameworks are used to provide that behaviour • There is default behaviour where you may not expect (CSS) • I am NOT going to talk about creating a new look, because then you are creating your own conventions/default behaviours for your applications to follow
  • 7. Hopefully Conventions are “Best Practices” • proper subclassing of pages and components • separate business logic from your view and controller logic • correct editing context handling (EC per page, peer EC for edit pages so changes can be discarded when the user Cancels) • all string labels in the UI are localized • data entered in forms is validated / errors displayed to the user • PageWrapper/WOComponentContent + ERXNavigationMenu
  • 8. Over Time, Conventions Change 1. The days only Chuck remembers (you will likely see this in “legacy” code) Project eo = new Project(); ec.insertObject(eo); // manually set up your mandatory attributes and relationships 2. The days that everyone remembers (you will likely see this in a lot of code) EOUtilities.createAndInsertInstance(ec, "Project"); // manually set up your mandatory attributes and relationships 3. The current convention (you will likely see more adoption going forward) Person user = _session._user; Project.createProject(ec, "Write Slides", user); // constructor sets mandatory attributes and relationships
  • 9. A brief segue • What is D2W? See wiki for list of resources • I found it helpful to hear it referred to as an expert system • What does it know? • How to build web application front ends to data stores • It has been DESIGNED to take care of most of your front end development tasks
  • 10. ERModernLook is not just D2W • ERXNavigation • Localization • Validation • Object Oriented CSS • Ajax
  • 11. Steps for Developer Customized Model your Database, behaviour Refinement (adjust UI Customize your Default Application work flow, labels, where necessary) business logic custom property components
  • 12. Steps for the Developer (Model) • Create or supply a Model • how you name your attributes and relationships affects their default labels • user info dictionaries • default behaviour with respect to your model is determined by rules
  • 13. Steps for the Developer (Login) • Decide whether you need login handling • If you do, you can handle where your user lands after login • If you don't, then your Main component can offer whatever functionality you choose • ERXD2WDirectAction (maybe you want to give direct access to your app via email, web link, etc.)
  • 14. Steps for the Developer (Page) • Choose an entity to work with • Decide on a task. Maybe a Sub-task (wizard, tab, group, csv) • Default page or a named PageConfiguration - default naming conventions • Decide on template for the page (i.e. List, GroupingList) • Labels (you can use variables too) • These behaviours are set up with rules
  • 15. Steps for Developer (Page cont.) • Is default or modified behaviour of the page template adequate? • Make new template for this page? • displayPropertyKeys - what attributes and relationships will you choose to display? • Are there permission-based considerations for things you’re displaying on the page? • Modify Rules, Templates, Business Logic
  • 16. Steps for Developer (Attributes) • Are the default components adequate? Do any customizable characteristics need to be modified? (i.e. height, width) • How do you plan to label them? (I strongly recommend Localizable.strings even if you are using only one language) • Any special characteristics apply? Custom property level component?
  • 17. Steps for Developer (Relationships) • Which component applies? • ERD2WEditToManyRelationship is worth the effort to learn • Likely need to modify default characteristics depending on your number of options (checkboxes, browser, radio) • What do you plan to use to label the items in the relationship? (userPresentableDescription, custom business logic, a specific attribute on the related entity?)
  • 18. ERModernLook (navigation) • Set up your navigation tab for the chosen entity/page • Nice convention is something like Tab-Entity, SubTab-Task1, SubTab-Task2 • Work out labels for the Localizable.strings file • Set up your rules for NavigationState. Navigation State is controlled by the page you load.
  • 19. ERModernLook (navigation cont.) • ERXNavigation allows you to use up to three levels of tabs • You can do all sorts of fancy things (see Ramsey’s notes from HelloD2W NavigationMenu.plist) • You can vary the configuration of tabs and sub-tabs based on stored values (tabs for no login, tabs after login) • I use ERXThreadStorage in my session (i.e. based on a whether a user is logged in, whether a user has permission to see a given tab configuration)
  • 20. Navigation configuration example (session class) public String navigationRootChoice() { Person user = (Person) user(); if(user != null ) { if(user.isAdmin()==true) { return "adminuser"; } return "home"; } return "none"; }
  • 21. Navigation configuration example (NavigationMenu.plist) name = Root; directActionClass = DirectAction; directActionName = default; children = "session.navigationRootChoice"; childrenChoices = { home = ( Instructions, Blog, ); adminuser = ( Instructions, Admin, ); none = ( PublicBlog, ); };
  • 22. ERModernLook (pageflow) • Page creation logic for each tab goes in the MainNavigationController. • After creating a few pages, workflow issues begin to appear • You may not need a tab for every page (i.e. some tasks can have Navigation State left as the Tab for the Entity)
  • 23. ERModernLook (pageflow cont.) • You can use the “actions” key to set up your right and left actions in Lists • You can use ERDControllerButton in rows for additional, custom actions • For page level actions (such as download excel version) you can use ERDActionBar which appears in the BottomActions section
  • 24. How to manage the complexity? • I have created a set of custom EOModelDoc templates that give you generated worksheets to record some of the decisions you are making at the entity/task level • More importantly, the worksheets can help you communicate to your client which property keys will be displayed on which page, the labels that will be used, the label for the page) • Of course you can also just build and iterate which has a very low overhead once you get comfortable with what you are doing
  • 25.
  • 26.
  • 27. CSS • ERModernLook makes extensive use of CSS • You can use the default skin and easily add a custom stylesheet to your application so you don’t have to start from scratch • You can also copy the skin framework entirely and then change the stylesheets as much as you like • I have begun the work of generating the skin framework with Sass and Compass. This allows the use of variables in stylesheets and the opportunity to quickly create entirely new skins rapidly
  • 28. Sencha Touch as an Example
  • 30. Suggestions and Tips • Take it slow, practice practice practice- Zen and the Art of Archery • Limit yourself to existing templates/components at the start (don’t forget ERD2W, D2W includes many components) • Learn simple rules first (displayPropertyKeys, show/hide buttons) • Learn how to configure embedded page configurations such as ERMODEditRelationshipPage (this is among my most used components)
  • 31. More Suggestions and Tips • One of my favourite threads all time was a question about how to create a button for D2W that would create an email and send it to users. The first response was for people to dive into how to create a custom component, but then they realized that the action could be triggered in the business logic. • When it comes to creating new components, think it through carefully.You’ll be surprised how much can be moved into business logic using methods such as...
  • 32. ERXGenericRecord • willInsert • didInsert • willUpdate • didUpdate • willDelete • didDelete
  • 33. Additional things that could have been covered • ERSelenium (functional testing is crucial since rule changes are relatively unpredictable until run time). See WOWODC presentation from 2008 on testing. • Migrations • ERAttachment • BugTracker - especially the Factory class • ERCoreBusinessLogic
  • 34. Resources • http://wiki.objectstyle.org/confluence/display/WO/Direct+To +Web+%28D2W+and+ERD2W%29 • https://github.com/daveeed/SimpleBlog
  • 35. MONTREAL 1/3 JULY 2011 Q&A