Whereas Andrew Fox talked in his blog (What is the future for Dashboards created by the mythical "Business User?")
about the adaption of Design Studio as the successor for Dashboards aka Xcelsius, there is also a big role to play for Design Studio as the successor for the BEx Web Application Designer.
In the future directions of the Design Studio roadmap, closing the gap with BEx Web is listed, among features as context menu, RRI, favorites and broadcasting, with only favorites expected in the DS1.3 version. In the case that is required to do an upgrade from BEx WAD 3.5 front-end to Design Studio, there is thus a challenge to meet.
In this blog I report on some ideas we used to close the gap.
First of all, the functionality is part of a template we use as a base for all the WAD reports to convert. The scripting is made generic by using BEx query metadata that is stored in a DSO and InfoObjects. The idea is similar to the approach Dirk Mayrock used in Internationalize DesignStudio Applications by reusing RSBEXTEXTS table from BEx WAD
Properties
So to change the properties of characteristics in a crosstab, it is necessary to populate a dropdown box with the characteristics that are used in the crosstab. Using the script:
DS_METADATA.setFilter("ZDSDDWN", "X");
DS_METADATA.setFilter("ZDSRAP", ZDSRAP);
DS_METADATA.setFilter("ZDS_DS", "DS_ANA_TAB1");
DROPDOWN1.setItems(DS_METADATA.getMemberList("ZDSKENM", MemberPresentation.EXTERNAL_NONCOMPOUNDED_KEY, MemberDisplay.TEXT, 150));
The first statements are used to select the proper subset of infoobects options. The last statement fills the dropdown box with values like:
To change to representation of the characteristic (text or key), a dropdown box is offered to the user where the characteristic can be selected, and by choosing a radiobutton, the display changes. The radio button has the following ‘OnSelect’ code:
var RB = RADIOBUTTON1.getSelectedValue();
if (RB == "K") { DS_ANA_TAB1.setMemberDisplay(DROPDOWN1.getSelectedValue(), MemberDisplay.KEY); }
if (RB == "KT") { DS_ANA_TAB1.setMemberDisplay(DROPDOWN1.getSelectedValue(), MemberDisplay.KEY_TEXT); }
if (RB == "T") { DS_ANA_TAB1.setMemberDisplay(DROPDOWN1.getSelectedValue(), MemberDisplay.TEXT); }
if (RB == "TK") { DS_ANA_TAB1.setMemberDisplay(DROPDOWN1.getSelectedValue(), MemberDisplay.TEXT_KEY); }
A similar functionality can be created for activating/deactivating hierarchies. When more script options will become available, like switching totals on/of, these can be added as well.
Filter
Another important function is the filter option in the context menu. For this the ‘OnSelect’ option of the crosstab is used. A popup appears that lists all the selected characteristics in the rows or columns, with the filter value. Using check boxes it is possible to select the filter values that need to be kept.
On the background the following happens:
A dropdown box is filled with elements as:
In the script, local variables are filled with the select value in the cross tab and the description of the characteristic:
DROPDOWN2.setSelectedValue("V01");
var A01 CROSSTAB1.getSelectedMember(DROPDOWN2.getSelectedText()).text;
DROPDOWN2.setSelectedValue("T01"); var T01 = DROPDOWN2.getSelectedText();
This code is repeated for V01…Vxx, as much as you need. In our general template we have 20 placeholders. With the local variables the checkboxes in the popup are populated:
if ( A01 != '' ) {CH_CONTEXT01.setVisible(true); CH_CONTEXT01.setChecked(true); i = i + 30; CH_CONTEXT01.setTopMargin(i);}
if ( A02 != '' ) {CH_CONTEXT02.setVisible(true); CH_CONTEXT02.setChecked(true); i = i + 30; CH_CONTEXT02.setTopMargin(i);}
CH_CONTEXT01.setText( T01 + ': ' + A01 );
CH_CONTEXT02.setText( T02 + ': ' + A02 );
When the filter button is pressed, the filters are set using a similar procedure:
DROPDOWN2.setSelectedValue("V01");
if ( CH_CONTEXT01.isChecked() == true )
{ DS_ANA_TAB1.clearFilter(DROPDOWN2.getSelectedText()); DS_ANA_TAB1.setFilter(DROPDOWN2.getSelectedText(), CROSSTAB1.getSelectedMember(DROPDOWN2.getSelectedText())); }
With the command removeDimension(DROPDOWN2.getSelectedText()) it is possible to remove the characteristic from the crosstab as well.
RRI
Finally we also managed to use the local variables in a report to report interface kind of way. For the receiving report global variables XV01..XVxx need to be created as placeholders for the filter values. We realized this in a prototype but decided not to use this, since it requires a lot of maintenance. Instead the RRI is simulated by having the RRI receiver report in a hidden panel. When pressing the RRI button, the applied filters are copied using copyFilters, and this panel is shown.
To conclude
For the experienced analytical user, this functionality is a step back compared to the functionality offered in WAD 3.5. For the majority of the users, combined with the realization of other benefits, this is acceptable though.