480 likes | 716 Views
A framework approach eases support for the iServer Brio Mid-Atlantic User Group 8 th April 2003. Socs Cappas QIQ Solutions. Agenda. Introduction. Our Brio iServer Experience. A Framework for Brio JavaScript . Leveraging the Framework. Where to from here. Who is QIQ Solutions?.
E N D
A framework approach eases support for the iServer Brio Mid-Atlantic User Group8th April 2003 Socs CappasQIQ Solutions
Agenda Introduction Our Brio iServer Experience A Framework for Brio JavaScript Leveraging the Framework Where to from here
Who is QIQ Solutions? • Part of the Forge Group • Australian owned and operated since 1996 • Offices in Sydney, Canberra and Melbourne • Forge Research • Developer of Telco Management Systems • Tens of thousands of network devices • 7x24 nationwide operation • Forge Data Solutions • Business Intelligence implementation • QIQ Solutions • Business Intelligence Product Development • Brio Solutions Partner
What QIQ does (1 of 2) • 2000 – Query Intelligence • Harvest BQYs for their attributes • Load attributes into RDBMS • Query and Report on your BQYs • 2001 – ES Designer • Framework for dashboards • Dashboard building via a Wizard • 2001 – QIQ Merge • Merge your existing BQYs • With each other • With our framework
What QIQ does (2 of 2) • 2002 – ES Architect • IDE for Brio JavaScript • Color coded syntax, brace match • Break points, Step execution, Peek and poke properties • Search and replace etc • 2003 – Upgrade Dashboards for iServer • iServer has changed the Brio model • We change our users’ dashboards to match it • 2003 – Upgrade Data Models • RDBMS changes, data model changes • Replace your old data models with new data models • Make your old Queries work against new schemas
ES Designer and its Dashboards ES Designer Wizard
ES Architect - IDE for JavaScript ES Architect
Agenda Introduction Our Brio iServer Experience A Framework for Brio JavaScript Leveraging the Framework Where to from here
Architecture – Pop up dialogs Designer / Explorer / Insight QuickView FreeView Click to start JavaScript executes locally Dialog pops-up User answers JavaScript executes locally Screen is refreshed JavaScript executes locally
Click to start JavaScript executes remotely New HTML is sent to browser Click to start JavaScript executes remotely New HTML is sent to browser Click to start JavaScript executes remotely New HTML is sent to browser Architecture – Helper Forms iServer
Architecture – Joole Designer / Explorer / Insight QuickView FreeView var jo=new JOOLEObject(“param”) jo.methodCall() Lets you call and interact with the local operating System
Architecture – Joole iServer var jo=new JOOLEObject(“param”) jo.methodCall() iServer ignores this Why? a) It could be an attack on the server b) the local OS is the server! c) the local OS may not be Windows
Architecture – Print / Export • Browser Print button for screens • Brio print feature not available • The server’s resources may be • behind the firewall • on another continent • etc • Export feature not available via menus but can be implemented using JavaScript iServer
Platform Differences • OnDoubleClick() – not available • RefreshAvailableValues() broken • Intermittent firing of OnActivate() • ActiveSection construct can cause unexpected behavior • Connected status ambiguous • No Console Window • Charts and Pivots on EIS act as hyperlinks always……but there is no back button • Ovals / round boxes => rectangles • Multiple spaces are reduced to one • Browser versions are critical iServer
Who is the Audience? • Can only be built via EIS / JavaScript… • New Data models • New Queries • New Charts • New Pivots • New Reports • New or existing Local Limits • The audience seems “casual users” • Dashboards are essential for this audience iServer
Making Dashboards iServer ready • Deploy to the iServer • Run all critical paths and observe the behavior • If something is broken – find it and fix it • For all platforms • It took us almost 2 months • ESD dashboards only have ONE code base • No matter how many dashboards • We have complex and sophisticated code • We have our own fully featured diagnostics • We don’t use the Console window so don’t miss it
Agenda Introduction Our Brio iServer Experience A Framework for Brio JavaScript Leveraging the Framework Where to from here
Reports Frame Classes Core Classes CoreCollector Extra Classes Your BQYs & Our Framework QIQ Merge / Import feature Pivots Charts Results Run Time Build Time Queries Regular BQY Template
Reports Frame Classes Core Classes CoreCollector Extra Classes Framework Needs Configuration Pivots Charts Results Queries Runtime Framework Build Framework Template
EIS - User Interface Reports Frame Classes Core Classes CoreCollector Extra Classes Wizard Driven Application Building Wizard Builder Interface Pivots Charts Results Queries Runtime Framework Build Framework Runtime Source Master
EIS - User Interface Reports P-n-PCollector P-n-P Frame Class Frame Classes CoreCollector Core Classes Extra Classes P-n-P Classes Extend with Plug and Play Components Wizard Builder Interface Pivots Charts Results Queries Runtime Framework Build Framework Runtime Source Master
Design, Code, Test Components ES Architect Analytic Development Platform Development Lifecycle with Templates and Components Point, Click, Generate Components ES Designer Templates
EIS - User Interface Core Classes Extra Classes P-n-P Classes Let us look closely at the framework OnStartup(){ discover environment initialize diagnostics initialize back plane initialize core initialize extra initialize P-n-P activate welcome EIS } Visible EIS sections Hidden EIS sections Runtime Framework Back plane
Pattern for Qiq_trace OnStartUp() function Qiq_trace(str,level,component){ if (str.slice(0,3).toLowerCase()==“in ”){ Qiq_arrProcStack.push(str) }else{ if (str.slice(0,4) ).toLowerCase()==“out ”){ Qiq_arrProcStack.pop() } if (Qiq_harTraceLevel[component]>=level){ Sections[“QIQ Diagnostics”].lbxTrace.Add(str) } } ActiveDocument.Qiq_trace=Qiq_trace
Pattern for Component Initialization OnStartUp() ActiveDocument.harSections1020=new Array() for (var a=1;a<=Sections.Count;a++){ if (Sections[a].Type==bqEIS){ if (Sections[a].FrameType.Text==1020){ harSections1020[Sections[a].Name]=Sections[a] for (var b=1;b<=Sections[a].Shapes.Count;b+){ if (Sections[a].Shapes[b].Type==bqCommandButton){ Sections[a].Shapes[b].OnClick() } } } } }
Pattern for Components Hidden EIS Section Buttons Text Labels StartUp Frame Type = 1020 Version Info ShutDown Component Info Pre Process Tool tips Post Process Language Strings On Activate Other persistent settings On Deactivate Control Click Drop Down Select Is System Section Reset Others…
Pattern for functions CommandButton1.OnClick Event var tp = this.Parent Qiq_trace("In " + tp.Name+"."+ this.Name,0,tp) tp.harConstants=new Array() function Qiq_onClick(mySection){ Qiq_trace("In "+tp.Name+".Qiq_onClick()", 1,tp) // regular code Qiq_trace("Out "+tp.Name +".Qiq_onClick()", 1,tp) } tp.Qiq_ onClick =Qiq_ onClick Qiq_trace("Out " + tp.Name+"."+ this.Name,0,tp)
Pattern for User EIS sections Visible EIS Section Scripted Shapes Hidden Text Labels Button 1 Configuration info for Button 1 Configuration info for Button 2 Button 2 Configuration info for Button n Button n etc Drop Down 1 txlMe => Template back plane Drop Down 2 txlClass => Component Drop Down n Picture 1 Picture 2 Picture n Text Label 1 Others…
Events on User EIS Any Control -Any Event() Sections[txlMe.Text].Qiq_onControlClick(this.Parent,this)
Pattern for Event Broker function Qiq_onControlClick(mySection,myControl){ switch (myControl.Name){ case (“known id1”) : handler1(mySection,myControl); break case (“known id2”) : handler2(mySection,myControl); break case (“known id3”) : handler3(mySection,myControl); break // etc… default: var c=findComponent(mySection,myControl) c.OnClick(mySection,myControl) } } this.Parent. Qiq_onControlClick = Qiq_onControlClick
EIS - User Interface Reports P-n-PCollector P-n-P Frame Class Frame Classes CoreCollector Core Classes Extra Classes P-n-P Classes Typical Interaction Pivots Charts Results Queries Runtime Framework Build Framework Runtime Source Master
Agenda Introduction Our Brio iServer Experience A Framework for Brio JavaScript Leveraging the Framework Where to from here
EIS - User Interface Reports P-n-PCollector Frame Classes P-n-P Frame Class CoreCollector Core Classes Extra Classes P-n-P Classes Code only exists in the Infrastructure Pivots Charts Results Queries Runtime Framework Build Framework System Infrastructure
EIS - User Interface Reports P-n-PCollector Frame Classes P-n-P Frame Class CoreCollector Core Classes Extra Classes P-n-P Classes So when the world changes… Pivots Charts Results Queries Runtime Framework Build Framework System Infrastructure
EIS - User Interface Reports P-n-P Collector P-n-P Frame Class Frame Classes Frame Classes CoreCollector Core Classes Extra Classes P-n-P Classes We can Upgrade it safely Pivots Charts Results Queries Runtime Framework Build Framework System Infrastructure
TemplateDev App Sample and Production Applications newsections.dat Template Template Make 1) Code & Test Dev App 2) Generate Template 3) Upgrade newsections.dat 4) Upgrade Applications
newsections.dat Template Components Component Make 1) Code & Test Dev App 2) Generate Component ComponentDev Apps TemplateDev App 3) Upgrade newsections.dat 4) Upgrade Applications Sample and Production Applications
newsections.dat Template Components Template & Component Make 1) Code & Test Dev App 2) Generate Template ComponentDev Apps TemplateDev App 3) Upgrade newsections.dat & Component Dev Apps 4) Upgrade Applications Sample and Production Applications
The Productivity Advantage Analytic Development Platform Traditional EIS Development Highly Technical Developers Components and Templates Computer Literate Developers Analytic Applications Analytic Applications
Tool and Component Productivity Component basedGenerated Applications Generated Applications Productivity Hand written Applications with IDE Hand written Applications no IDE Flexibility
Benefits of this framework • Construction productivity • Focus on the business…not on programming bugs • Empower the business users to drive performance • Build dashboards in hours not days and weeks • Standardization • Reduce the cost of training – standard features • Saving on maintenance and enhancement • Write no code – maintain no code • QIQ support the framework with new versions of Brio • Leverage QIQ’s JavaScript for your P-n-P components • Maintain only your P-n-P components • Save on how you keep dashboards current • ES Upgrade automates deployment of upgrades and enhancements
Agenda Introduction Our Brio iServer Experience A Framework for Brio JavaScript Leveraging the Framework Where to from here
Change is the Management Challenge • What needs to change? • How to apply it quickly and effectively? • How to apply it consistently? • How to ensure no unwanted side effects? • How to authorize changes? • How to work within enterprise standards?
The Management Vision • Reduce the time and effort to roll out changes • Build lists of impacted documents easily • By defining criteria • By matching against provided samples • By selecting specific documents • Specify changes verifiably • Change specification generate scripts • Scripts can be saved and re-used • Changes can be tested on subsets of a list • Change reports generated • Authorization of change • Who can identify documents to be changed • Who can specify and apply changes • Recording who made the changed • Automation of change • Schedule execution of changes • Assist organizations with their change control process • Development, Test and Production
QIQ Workbench Desktop Client Define Favorites BrowseFolders Standard Changes Ad-hoc Changes ServiceManager Desktop TransformEngine Change Scripts & Doc Lists
What Kinds of Changes? • Section Merge • With full dependency • Yank and graft • Section Replacement • EIS • Data Models, resolving all references • Re-Parent of Charts and Pivots • Document-wide shape properties • Locking, Visibility, Image replacement, Colors • Ad-hoc changes • Program changes in JavaScript