a framework approach eases support for the iserver brio mid-atlantic user group 8 th april 2003 socs...
TRANSCRIPT
A framework approach eases support for the iServer
Brio Mid-Atlantic User Group8th April 2003
Socs CappasQIQ Solutions
2
Agenda
Where to from here
Our Brio iServer Experience
Introduction
A Framework for Brio JavaScript
Leveraging the Framework
3
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
4
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
5
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
6
ES Designer and its Dashboards
ES Designer
Wizard
7
ES Architect - IDE for JavaScript
ES Architect
8
Agenda
Where to from here
Our Brio iServer Experience
Introduction
A Framework for Brio JavaScript
Leveraging the Framework
9
Architecture – Pop up dialogsDesigner / Explorer / Insight
QuickView FreeView
Click to start
JavaScript executes locally
Dialog pops-up
Screen is refreshed
JavaScript executes locally
JavaScript executes locally
User answers
10
Architecture – Helper FormsiServer
Click to start
JavaScript executes remotely
New HTML is sent to browser
JavaScript executes remotely
Click to start
New HTML is sent to browser
Click to start
JavaScript executes remotely
New HTML is sent to browser
11
Architecture – JooleDesigner / Explorer / Insight
QuickView FreeView
var jo=new JOOLEObject(“param”)
jo.methodCall()
Lets you call and interact with the local operating System
12
Architecture – JooleiServer
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
13
Architecture – Print / ExportiServer
• 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
14
Platform DifferencesiServer
• 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
15
Who is the Audience?iServer
• 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
16
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
17
Agenda
Where to from here
Our Brio iServer Experience
Introduction
A Framework for Brio JavaScript
Leveraging the Framework
18
Your BQYs & Our FrameworkR
ep
ort
s
Queries
Results
Piv
ots
Ch
art
s
Regular BQY
QIQ Merge / Import feature
Template
Co
re C
las
ses
Fra
me
Cla
ss
es
Ex
tra
Cla
sse
s
Co
re C
olle
cto
r
Run Time
Build Time
19
Template
Framework Needs Configuration
Runtime Framework
Ex
tra
Cla
sse
s
Co
re C
las
ses
Build Framework
Re
po
rts
Queries
Results
Piv
ots
Ch
art
s
Fra
me
Cla
ss
es
Co
re C
olle
cto
r
20
Source MasterRuntime
Wizard Driven Application BuildingR
ep
ort
s
Runtime FrameworkQueries
Results
Piv
ots
Ch
art
s
Ex
tra
Cla
sse
s
Fra
me
Cla
ss
es
Co
re C
las
ses
Build Framework
Co
re C
olle
cto
r
Wizard Builder InterfaceEIS - User Interface
21
Source MasterRuntime
Extend with Plug and Play ComponentsR
ep
ort
s
Runtime FrameworkQueries
Results
Piv
ots
Ch
art
s
Ex
tra
Cla
sse
s
Fra
me
Cla
ss
es
Co
re C
las
ses
Build Framework
Co
re C
olle
cto
r
Wizard Builder InterfaceEIS - User Interface
P-n
-P C
olle
cto
r
P-n
-P C
las
ses
P-n
-P F
ram
e C
lass
22
Analytic Development Platform
Development Lifecycle with Templates and Components
ES Designer
Templates
Point, Click, Generate
Components
Design, Code, Test
ES Architect
Components
23
Let us look closely at the framework
Runtime Framework
Ex
tra
Cla
sse
s
Co
re C
las
ses
P-n
-P C
las
ses
EIS - User InterfaceVisible EIS sections
Hidden EIS sections
Back plane
OnStartup(){
discover environment
initialize diagnostics
initialize back plane
initialize core
initialize extra
initialize P-n-P
activate welcome EIS
}
24
QIQ Diagnostics – our life saver
25
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
26
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()
}
}
}
}
}
27
Hidden EIS Section
Buttons Text Labels
Pattern for Components
Control Click
Drop Down Select
StartUp
ShutDown
Pre Process
Post Process
On Activate
On Deactivate
Is System Section
Reset
Others…
Frame Type = 1020
Version Info
Component Info
Tool tips
Language Strings
Other persistent settings
28
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)
29
Sample Initialized Brio Object Model
30
Visible EIS Section
Scripted Shapes Hidden Text Labels
Pattern for User EIS sections
Picture 1
Picture 2
Button 1
Button 2
Button n
Drop Down 1
Drop Down 2
Drop Down n
Picture n
Text Label 1
Others…
Configuration info for Button 1
Configuration info for Button 2
Configuration info for Button n
etc
txlMe => Template back plane
txlClass => Component
31
Events on User EIS
Any Control - Any Event()
Sections[txlMe.Text].Qiq_onControlClick(this.Parent,this)
32
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
33
Source MasterRuntime
Typical InteractionR
ep
ort
s
Runtime FrameworkQueries
Results
Piv
ots
Ch
art
s
Ex
tra
Cla
sse
s
Fra
me
Cla
ss
es
Co
re C
las
ses
Build Framework
Co
re C
olle
cto
r
EIS - User Interface
P-n
-P C
olle
cto
r
P-n
-P C
las
ses
P-n
-P F
ram
e C
lass
34
Agenda
Where to from here
Our Brio iServer Experience
Introduction
A Framework for Brio JavaScript
Leveraging the Framework
35
Code only exists in the Infrastructure
Runtime Framework
Ex
tra
Cla
sse
s
Build Framework
Re
po
rts
Queries
Results
Piv
ots
Ch
art
s
Co
re C
olle
cto
r
Co
re C
las
ses
Fra
me
Cla
ss
es
EIS - User Interface
P-n
-P C
olle
cto
r
P-n
-P C
las
ses
P-n
-P F
ram
e C
lass
System Infrastructure
36
So when the world changes…
Runtime Framework
Ex
tra
Cla
sse
s
Build Framework
Re
po
rts
Queries
Results
Piv
ots
Ch
art
s
Co
re C
olle
cto
r
Co
re C
las
ses
Fra
me
Cla
ss
es
EIS - User Interface
P-n
-P C
olle
cto
r
P-n
-P C
las
ses
P-n
-P F
ram
e C
lass
System Infrastructure
37
We can Upgrade it safely
Runtime Framework
Ex
tra
Cla
sse
s
Build Framework
Re
po
rts
Queries
Results
Piv
ots
Ch
art
s
Fra
me
Cla
ss
es
Co
re C
las
ses
Fra
me
Cla
ss
es
P-n
-P C
olle
cto
r
P-n
-P C
las
ses
P-n
-P F
ram
e C
lass
EIS - User Interface
Co
re C
olle
cto
r
System Infrastructure
38
Template Make
TemplateDev App
Template
Sample and Production
Applications
newsections.dat
1) Code & Test Dev App
2) Generate Template
3) Upgrade newsections.dat
4) Upgrade Applications
39
Components
Component Make
TemplateDev App
Template
Sample and Production
Applications
1) Code & Test Dev App
2) Generate Component
3) Upgrade newsections.dat
4) Upgrade Applications
ComponentDev Apps
newsections.dat
40
Template & Component Make
TemplateDev App
ComponentDev Apps
Template Components
Sample and Production
Applications
newsections.dat
1) Code & Test Dev App
2) Generate Template
3) Upgrade newsections.dat & Component Dev Apps4) Upgrade Applications
41
Computer Literate Developers
The Productivity Advantage
Highly Technical Developers
Analytic Applications
Components and Templates
Analytic Applications
Analytic Development Platform
Traditional EIS Development
42
Tool and Component Productivity
Hand written Applications no IDE
Pro
duct
ivity
Flexibility
Generated Applications
Component basedGenerated Applications
Hand written Applications with IDE
43
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
44
Agenda
Where to from here
Our Brio iServer Experience
Introduction
A Framework for Brio JavaScript
Leveraging the Framework
45
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?
46
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
47
Desktop Client
ServiceManager
QIQ Workbench
Desktop Transform
Engine
Change Scripts & Doc Lists
BrowseFolders
Ad-hoc Changes
Define Favorites
Standard Changes
48
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