Microstrategy Web SDK: Api Essentials
Microstrategy Web SDK: Api Essentials
API Essentials
MicroStrategy Instructor-Led Curriculum
CPD
Architect: Project Design 2 days
Certified Project Designer Exam (CPD) 1 day
MCE
Comprehensive Certification Focus Area Certification
MicroStrategy Certifications
Certified Engine Specialist Program
MCE
SQL Essentials 1 day
Engine Essentials 2 days
CES
Engine Tuning & VLDB Properties 1 day
Advanced Data Warehousing 2 days
Certified Engine Specialist Exam (CES) 1 day
ANY
Narrowcasting Essentials 2 days
Advanced Narrowcasting 1 day Certified Enterprise Reporter
CND
CER
Certified Advanced Adm inistrator Program Dynamic Dashboards 200 1 day
ONE
Intelligence Server Tuning & Advanced Administration 2 days Freeform SQL Essentials 1 day
Web Administration & Tuning 1 day Certified Enterprise Reporter Exam (CER) 1 day
CAA
MCEP
Comprehensive Certification Focus Area Certification
MicroStrategy Certifications
CWS
Web SDK: Portal Integration 2 days
Certified Web SDK Specialist Exam (CWS) 1 day
CWD
Web SDK: Customizing Security 1 day
MCD
Comprehensive Certification Focus Area Certification
Certification Paths
MCD MCE
MCEP
Course Approach
Introduction to
MicroStrategy SDK
1
Customization & Integration with MicroStrategy Platform
MicroStrategy Web
Customization Integration
Adding Data
functionality Visualization
Customization Integration
MicroStrategy Platform
Data Warehouse
1,000s Attributes
1,000s Metrics
1
The SDK comprises of the following components:
BI Information Layer
(Java)
(Web Beans) Custom Functionality
BI Function Layer
(Web Objects)
(Java)
Functionality used in all of above
Communication Layer
(Java)
(XML API)
Web server
Identify Custom
page logic Transform
beans
Load page
Execute Collect
definition
Client events data Arrange Client
content
Bean Custom
instances logic
created
Customizable
component
1
Customizable Components - Transforms
Web server
Identify Custom
page logic Transform
beans
Load page
Execute Collect
definition
Client events data Arrange Client
content
Bean Custom
instances logic
created
Transform
Customizable
•The data of a bean is transformed into HTML using transform
component
components
•These allow great flexibility in how a bean’s data is transformed
into HTML
1
Customizable Components – Arrange Content
Web server
Identify Custom
page logic Transform
beans
Load page
Execute Collect
definition
Client events data Arrange Client
content
Bean Custom
instances logic
created
WebObjectsFactory factory=
WebObjectsFactory.getInstance()
* We will only look at the bare basics of the Web Objects API
2
Session Management: Concepts
Session
ID
com.microstrategy.web.objects.WebSessionInfo
interface
com.microstrategy.web.objects.WebIServerSession
+getSessionID():String
+getSessionID(create:boolean):String
+getServerName():String
+setSessionID(sessionID:String):void
+setServerName(serverName:String):void
+getLogin():String
+getServerPort():int
+setLogin(login:String):void
+setServerPort(portNumber:int):void
+setPassword(password:String):void
+getProjectName():String
+closeSession():void
+setProjectName(projectName:String):void
+getUserInfo():WebObjectInfo
+isAlive():boolean
+refresh():void
+reconnect():void
+getFactory():WebObjectsFactory
2
Web Objects API – Source Objects
• Obtain a WebObjectsFactory instance by calling
getInstance()
• WebObjectSource +getObject(objectID:String,objectType:int,populate:boolean):WebObjectInfo
+getObject(objectID:String,objectType:int):WebObjectInfo
• WebObjectInfo +getObject(objectID:String,objectType:int,objectSubType:int):WebObjectInfo
+getObject(objectID:String,objectType:int,objectSubType:int,populate:boolean):WebObjectInfo
+getRoot():WebFolder
• WebFolder +getBlockBegin():int
+setBlockBegin(blockBegin:int):void
+getBlockCount():int
+setBlockCount(blockCount:int):void
+getFlags():int
+setFlags(flags:int):void
* EnumDSSMXLObjectFlags interface
WebDisplayUnit
...web.objects.WebFolder ...web.objects.WebAttribute
2
Web Objects API – WebObjectInfo
interface
com.microstrategy.web.objects.WebDisplayUnit
• WebObjectInfo represents a
generic MicroStrategy object
interface
com.microstrategy.web.objects.WebObjectInfo interface
...web.objects.WebTemplate
+getID():String
+getType():int
+getSubType():int
• Contains methods commonPersistable
interface
+getName():String
+getAbbreviation():String
+getDescription():String
among most other
...web.objects.WebSearch
+getCreationTime():String
+getModificationTime():String
+isHidden():boolean
MicroStrategy objects
interface
+getAccessGranted():int ...web.objects.WebDimension
+getState():int
+getOwner():WebObjectInfo
• ID, Name, Description, etc.
+getPropertySets():WebPropertyGroup
+getAncestors():SimpleList interface
+getParent():WebFolder ...web.objects.WebAttribute
+getFilterType():int
2
Web Objects API – WebObjectInfo
interface
com.microstrategy.web.objects.WebDisplayUnit
• Most specific
MicroStrategy objects
interface
interface
have specific
com.microstrategy.web.objects.WebObjectInfo
...web.objects.WebTemplate
interfaces extending
+getID():String
+getType():int Persistable
WebObjectInfo
+getSubType():int interface
+getName():String ...web.objects.WebSearch
+getAbbreviation():String
+getDescription():String
+getCreationTime():String
+getModificationTime():String
+isHidden():boolean interface
+getAccessGranted():int ...web.objects.WebDimension
+getState():int
+getOwner():WebObjectInfo
+getPropertySets():WebPropertyGroup
+getAncestors():SimpleList interface
+getParent():WebFolder ...web.objects.WebAttribute
Persistable
interface
...microstrategy.web.objects.WebFilter * Many other objects
extend WebObjectInfo
+getFilterType():int
+getExpression():WebExpression
beyond those listed here.
2
Web Objects API – WebFolder
interface
0..*
1 • Determine types of objects
com.microstrategy.web.objects.WebFolder
in folder, whether folder is
+getFolderType():int
+getRoot():WebFolder
root
+findTypedObjects(types:int[]):WebFolder
+objectTypes():SimpleList
+isReadOnly():boolean
+add(newObject:WebObjectInfo):int
+add(newObject:WebObjectInfo,beforeKey:int):int
+add(newObject:WebObjectInfo,beforeObject:WebObjectInfo):int
+get(index:int):WebObjectInfo
+getItemByKey(key:int):WebObjectInfo
• Methods for adding or
+remove(index:int):void
+removeItemByKey(key:int):void
+remove(object:WebObjectInfo):void
removing items
+clear():void
+isEmpty():boolean (typically read-only)
+size():int
+containsKey(key:int):boolean
+contains(object:WebObjectInfo):boolean
+keyOf(object:WebObjectInfo):int
+elements():Enumeration
+isRoot():boolean
+isNamedFolder(folderName:int):boolean
2
Object Browsing – General Steps
+getNewSearchObject():WebSearch
+getDomain():int
+setDomain(domain:int):void
+getMaxObjects():int
+setMaxObjects(maxObjects:int):void
+getNamePattern():String
+setNamePattern(namePattern:String):void
+getSearchOwner():String
+setSearchOwner(searchOwner:String):void
WebDisplayUnit +getSearchRoot():String
...web.objects.WebObjectInfo +setSearchRoot(searchRoot:String):void
+types():SimpleList
0..*
+usedBy():SimpleList
+uses():SimpleList
+submit():void
+submit(searchXML:String):void
1 +getStatus():int
+getSearchID():String
1 1 +setSearchID(searchID:String):void
...web.objects.WebFolder +isAsync():boolean
+setAsync(async:boolean):void
+getMaxWait():int
+setMaxWait(millis:int):void
+getPollingFrequency():int
+setPollingFrequency(millis:int):void
+getResults():WebFolder
+purge():void
+reset():void
2
Object Searching – General Steps
3: Submit Search
• Result set of the search is retrieved and placed into a folder object
which is created using the WebFolder interface
2
Searching for a particular MicroStrategy Report
• Is a collection of interfaces
• Conforms to JavaBeans standard and provide methods for
JavaBeans instantiation and data collection
• Essentially a wrapper of the Web Objects API for convenient use
in a web programming environment
• All objects in the Web Beans API are instantiated through the
singleton WebBeanFactory class
• Entry point to all Bean and other Transformable classes
• Static method: getInstance()
• Summary of important objects for understanding Web Bean
usage in and outside of Web/Web Universal 8:
• WebComponent
• WebBean
• ObjectBean
• ReportBean
• PromptsBean
3
WebBeanFactory
3
WebBean Interface
• A WebBean is a WebComponent.
• Any class that is associated with a WebBean must implement the WebComponent
interface.
• Represent high-level GUI objects.
RequestPersistable
...web.beans.WebComponent
WebComponent
Transformable
interface
com.microstrategy.web.beans.WebBean Persistable
...web.beans.Transformable ...web.beans.RequestPersistable
+getSessionInfo():WebSessionInfo
+setSessionInfo(sessionInfo:WebSessionInfo):void
+getErrorInfo():WebBeanError
+getDocument():Document
+isStale():boolean
+setStale(stale:boolean):void
com.microstrategy.web.beans.WebBean
3
The WebComponent Interface
• WebComponent objects are Java classes that have business logic and
can be plugged into the application as an abstraction of any component
in a Web application
• In Web/Web Universal 8, every page, bean, and frame element is a
web component. Page
Toolbar
Report
3
The WebComponent Interface
DrillEditorBean
FilterEditorBean
Etc…
ReportFrame
Bean
Page
ReportFrame
ReportBean
Bean
DrillEditor FilterEditor
Etc… ReportBean
Bean Bean
3
Using the WebComponent Interface
+getParent():WebComponent
+setParent(parent:WebComponent):void
+getRoot():WebComponent
+getChildCount():int
+getChildByType(childType:int):WebComponent
+getChild(key:String):WebComponent
+getChild(index:int):WebComponent
+searchChild(key:String):WebComponent
+addChild(key:String,child:WebComponent):void
+removeChild(key:String):WebComponent
+removeChild(component:WebComponent):WebComponent
3
Using the WebComponent: Supporting Events
interface
com.microstrategy.web.beans.WebComponent
+getWebEvent(event:int):WebEvent
+getWebEvent(event:int,recurse:boolean):WebEvent
+handleRequest(keys:RequestKeys):boolean
+getWebEventHandler():WebEventHandler
+setWebEventHandler(handler:WebEventHandler):void
3
Supporting Events with the RequestKeys
RequestPersistable
WebComponent +getType():int
Transformable +addTransform(transform:Transform):TransformInstance
...web.beans.WebBean +addTransformByClass(transformClass:String):TransformInstance
+addTransformByStyle(styleName:String):TransformInstance
+hasTransform():boolean
+hasTransform(key:String):boolean
+getTransformInstance():TransformInstance
+getTransformInstance(key:String):TransformInstance
+transform():MarkupOutput
+transform(key:String):MarkupOutput
+getTransformInstances():Enumeration
+getBeanContext():BeanContext
+setBeanContext(beanContext:BeanContext):void
+getMessageString(key:String):String
3
Transformable Objects Employ Transforms
• Any object (WebComponent, WebBean) that is Transformable, can
employ a Transform.
• All Web/Web Universal 8 transform objects implement the Transform
interface.
com.microstrategy.web.beans.WebBean
• Transform applied RequestPersistable
as a TransformInstance – WebComponent
...web.beans.WebBean
enables multiple transforms 1
to be applied, each 0..*
0..* 1
uniquely identified ...Transformable
com.microstrategy.web. com.microstrategy.web.
by a key. ...TransformInstance
beans.TransformInstance beans.Transformable
1
ti1.setKey(“grid");
ti2.setKey(“simple");
3
WebBeans are Persistable
is not saved –
collectData() must still interface
com.microstrategy.utils.serialization.Persistable
be called in order to
accumulate the results +saveState(howMuchState:int):String
+saveState():String
+restoreState(state:String):boolean
+saveState(buf:StringBuffer,howMuchState:int):void
+restoreState(parser:SAXSupport,uri:String,localName:String,qName:String,attrs:Attributes):boolean
3
Types of WebBeans
ReportBean = factory.
newReportBean(); com.microstrategy.web. com.microstrategy.web.
beans.ReportBean beans.DocumentBean
3
Types of WebBeans
com.microstrategy.web.beans.ObjectBean
• Property access
methods for all generic +getObjectName():String
+setObjectName(objectName:String):void
MSTR object properties +getObjectType():int
+setObjectType(objectType:int):void
(name, ID, type, etc.) +getObjectID():String
+setObjectID(objectID:String):void
+getObjectInfo():WebObjectInfo
+getParentID():String
+getParentFolderBean(name:String):FolderBean
* Exposes relevant +getFlags():int
+setFlags(flags:int):void
properties of underlying +getBlockBegin():int
+setBlockBegin(blockBegin:int):void
WebObjectSource +getBlockCount():int
+setBlockCount(blockCount:int):void
3
The ReportBean
state ID)
3
The ReportBean: Setting Execution Properties
+setMaxWait(millis:int):void
+setPollingFrequency(millis:int):void
+setUseCaches(useCaches:boolean):void
+setExpiration(hoursExpire:int):void
+setViewMode(viewMode:int):void
+setPromptsEventHandler(promptsEventHandler:WebEventHandler):void
+setExecutionFlags(executionFlags:int):void
+setResultFlags(resultFlags:int):void
3
ReportBean: Report Execution & Data Retrieval
• PromptsBean com.microstrategy.web.beans.ReportBean
+getReportInstance():WebReportInstance
+getReportData():WebReportData
+getWebGraph():WebGraph
+getReportPageInfo():ReportPageInfo
+getReportPageInfo(reportPageType:int):ReportPageInfo
+getPromptsBean():PromptsBean
3
The ReportBean: Saving State for Restoration
interface
com.microstrategy.utils.serialization.Persistable
+saveState(howMuchState:int):String
+saveState():String
+restoreState(state:String):boolean
+saveState(buf:StringBuffer,howMuchState:int):void
+restoreState(parser:SAXSupport,uri:String,localName:String,qName:String,attrs:Attributes):boolean
3
The ReportBean: Rendering Data
+getCount(typeOfPrompt:int):int
+getCurrentPromptPosition():int
+setCurrentPromptPosition(position:int):void
+getNextPromptPosition(type:int,startPos:int):int
+getNextPromptPosition(type:int):int
+getNextPromptPosition():int
+getPromptObject(position:int):PromptObject
+getPromptObject():PromptObject
+getPromptObjects(typeOfPrompt:int):Iterator
+addPromptsSource(promptSourceType:int):PromptsSource
+getPromptsSources():Iterator
+getPreviousPromptPosition(type:int,startPos:int):int
+getPreviousPromptPosition(type:int):int
+getPreviousPromptPosition():int
3
The PromptsBean: Access to WebPrompts
1..*
Transformable
interface 1 1
com.microstrategy.web.beans.PromptObject WebObjectInfo
...objects.WebPrompt
+getPromptPosition():int
+getWebPrompt():WebPrompt
+getPromptsBean():PromptsBean
+getValidationInfo():WebBeanError
+setValidationInfo(wbe:WebBeanError):void
+getHighlightedObjects():HighlightedObjects
3
Using the PromptsBean – General Steps
//1. Create Report Bean, set State and I-Server session as done before
rb.setObjectName("Prompt Report Example");
PromptsBean pb = rb.getPromptsBean();
TransformInstance ti1 = pb.addTransform(new com.microstrategy.
web.app.transforms.PromptsClassicTransform());
ti1.setKey("prompt");
//3. Call collectData() and render data – be sure to transform the PromptsBean to
render the data returned by a prompt
rb.collectData();
MarkupOutput mo = pb.transform(“prompt");
StringWriter sw = new StringWriter();
mo.send(sw);
out.println(sw.getBuffer().toString());
3
Using the MicroStrategy Web APIs – Review
Customizing Transforms
4
Web 8 Query Flow – Data Formatting
Web server
Identify Custom
page logic Transform
beans
Load page
Execute Collect
definition
Client events data Arrange
content
Bean Custom
instances logic
created
Customizable
component
4
The Transform Infrastructure Package
Style
RequestPersistable
WebComponent
...web.beans.WebBean
WebBean. 1
1
interface
com.microstrategy.web.transform.Transform
+transform(data:Transformable,transOut:MarkupOutput):void
+supports(data:Transformable):boolean
+canTransform(data:Transformable):boolean
4
Transform Interface and AbstractTransform Class
+getDescription():String
+getFormalParams():FormalParameters
+isResolved():boolean interface
+isPreviewAvailable():boolean com.microstrategy.web.beans.Transformable
+getPreview():MarkupOutput
+transform(data:Transformable,transOut:MarkupOutput):void
+getSupportedBeanType():Class
+supports(data:Transformable):boolean interface
+supports(beanClass:Class):boolean com.microstrategy.web.beans.MarkupOutput
+canTransform(data:Transformable):boolean
Class
AbstractTransform
+addFormalParam(FormalParameterImpl formal)
4
FormalParameters and FormalParameter Interfaces
+PARAM_TYPE_UNKNOWN:int=0
+PARAM_TYPE_STRING:int=1
+PARAM_TYPE_INTEGER:int=2
interface interface +PARAM_TYPE_FLOAT:int=3
Transform 1 1 FormalParameters 1 1..* +PARAM_TYPE_BOOLEAN:int=4
+getName():String
+getType():int
+paramTypeToString(paramType:int):String
+getDescription():String
+isRequired():boolean
+getDefaultValue():Object
* Lifetime of the FormalParameters object +getValue():Object
+setValue(value:Object):void
coincides with the transform object +checkValue(value:Object):void
4
Implementation Package
• AbstractReportTransform,AbstractFolderTransform,
AbstractPromptObjectTransform, Other abstract classes…
• ReportGridTransformImpl, ReportGraphTransformImpl,
FolderViewTransform, Other concrete classes…
4
AbstractAppTransform
AbstractAppTransform AbstractPromptObject
Transform
PromptsClassicTransform
AbstractReportTransform AbstractFolderTransform
PromptsSummaryTransform
ReportFrameClassic
ReportGridTransformImpl FolderViewTransform Transform
ReportGraphTransformImpl FolderDetailsTransform
ReportPageByTransform FolderPathTransform
... FolderBulletTransform
...
4
AbstractReportTransform
interface AbstractTranform
report data
ReportIncrementalFetchTransform
ReportExportHTMLTransform
ReportToolbarTransform
• ReportDataTransform
ReportDetailsTransform
ReportQuickLinksTransform
ReportSavePropertiesTransform
ReportGraphImageTransform
incremental fetch,
interface
ReportDataTransform
functionality
ReportOutlinModeTransformImpl
4
AbstractFolderTransform
• The AbstractFolderTransform
contains many child transforms
• However, only one derived class – FolderViewTransform
– is used to render both the Icon View and the List View
on the Shared Report and My Reports pages
4
ReportFrameClassicTransform
COMPONENT_DESIGN_MODE_BUTTONS renderDesign
ModeProcessForm
COMPONENT_PAGE_BY
• Extends AbstractAppTransform renderTemplateEditor
COMPONENT_REPORT_DATA
• Supports COMPONENT_DESIGN_MODE_BUTTONS
COMPONENT_REPORT_FILTER
renderDesign
ModeProcessForm
COMPONENT_VIEW_FILTER generateDesignMode()
COMPONENT_GRID_TOOLBAR renderReportElements
COMPONENT_PAGE_BY
COMPONENT_REPORT_TOOLBAR
renderGrid
COMPONENT_MESSAGE_BEFORE_DATA
COMPONENT_OBJECT_BROWSER
COMPONENT_REPORT_DATA
generateExecuteMode()
4
What does Extending a Transform Mean
• Transforms allows object oriented techniques to extend and override features of existing
transform
FolderViewTransform
renderList CustomFolderViewTransform
renderFolderName
extends FolderViewTransform
renderModificationInfo
renderFolderName
renderDescriptionInfo
…
To modify a transform:
1. Extend the existing transform, override the render methods that you want
to replace
2. Add a new style in the style catalog that defines the style name and any
formal parameter values
3. Replace the web component with the new style name
4
Rendering The Report Grid and Prompts
• Rendering Prompts
• Understand the modifications required for customizing the data
presentation in a prompt.
• Rendering prompts in MicroStrategy Web products involves two parts:
• Rendering of the PromptsBean (using PromptsClassicTransform)
• Rendering of each individual prompt question
4
Rendering The Report Grid
• renderRowTitles()
• renderRowTitle()
• renderColumnTitle()
• renderColumnHeaders()
• renderColumnHeader()
4
Report Data
• renderGridData()
• renderSingleRow()
• renderRowHeaders()
• renderRowHeader()
• renderMetricValues()
• renderMetricValue()
4
Cell Rendering Classes
• Extend ReportGridCellRowHeaderImpl
4
Simple Code Sample: Report Transform
package mypackage.name;
import com.microstrategy.web.beans.*;
import com.microstrategy.web.objects.*;
import com.microstrategy.web.transform.*;
import com.microstrategy.webapi.*;
import java.io.*;
package mypackage.name;
import com.microstrategy.web.beans.*;
import com.microstrategy.web.objects.*;
import com.microstrategy.web.transform.*;
import com.microstrategy.webapi.*;
import java.io.*;