Quantcast
Channel: SAP BusinessObjects Design Studio
Viewing all 662 articles
Browse latest View live

Debugging your code efficiently on SAP BusinessObjects Design Studio

$
0
0

Learning to debug efficiently is as important as learning to code efficiently to become a coding master. If you are looking to become a coding master for SAP BusinessObjects Design Studio applications, you must know about the hidden gems in SAP BusinessObjects Design Studio. And what’s more interesting, these gems are getting upgraded too!


Let’s take a look at these hidden gems:


Gem 1:


Most of us know that Debug mode gets enabled, if we press Ctrl+Alt+Shift+'D'. From SAP BusinessObjects Design Studio 1.5 onwards, we can debug a component using the Javascript Scripting tab.

 

In the example below, have played around with one of our Visual BI Extensions for SAP BusinessObjects Design Studio to get the “text” value from the Scripting tab.

 

By calling the keyword “this”  from Javascript Scripting tab, it provides JSON representation of your dashboard.

 

In the below screenshot, it showcases how the variable of the component is accessed by calling "this.aDebugJsonLogger[0].component.content.control.content[0].component

 

Iterating the component structure enables us to debug all component properties (both main properties and additional properties)

 

1.jpg

 

Gem 2:


The same Javascript Console from SAP BusinessObjects Design Studio 1.5 now displays the output for theconsole.log(“Hello world from Design Studio”) called from your component.js, very similar to the browser debugging experience.


This is an interesting addition to the SAP BusinessObjects Design Studio 1.5.


2.jpg

 

Gem 3:


As an extension developer the issue we often face is some specific issues related only to the Design mode of DesignStudio, if you’re encountering a similar problem add the below parameters as part of your url.

&DESIGN_MODE=TRUE&DESIGN_MODE_OPTIMIZATION=X&DESIGN_MODE_MAX_MEMBERS=1000

 

Example: If your URL is something like, http://localhost:52821/aad/zen?APPLICATION=LOC&designersessionid=78

 

Just add the parameters as below:

http://localhost:52821/aad/zen?APPLICATION=LOC&DESIGN_MODE=TRUE&DESIGN_MODE_OPTIMIZATION=X&DESIGN_MODE_MAX_MEMBERS=1000&…

 

Now by running the same in IE, it should be recreating the same Design Mode scenario.

 

Gem 4:


This last gem is a popular demand from all SDK extension developers. Need for debugging the additional properties’ JS code!

 

Blindly by calling this hidden SDK function “eclipse_logJavaScriptMessage“ in your additional property javascript instead of console.log().


Example : eclipse_logJavaScriptMessage("Hello from APS - log","log");


The first argument of eclipse_logJavaScriptMessage  should be the message string within double quotes (“ “) and the second argument is about the severity, which can be either "error", “warn", "info" or “log”.

 

4.jpg

 

Got the above log, by adding these below lines as part of my Additional properties Javascript code block:

        eclipse_logJavaScriptMessage("Hello from APS - error","error");

        eclipse_logJavaScriptMessage("Hello from APS - warn","warn");

        eclipse_logJavaScriptMessage("Hello from APS - info","info");

        eclipse_logJavaScriptMessage("Hello from APS - log","log");

 

The best part of this feature is that you can modify the additional property code and test the console by pressing Ctrl+'F5' without restarting the SAP BusinessObjects Design Studio application.


This feature solves most of the issues faced by Extension developers for debugging the Additional property code.


Hope these gems come handy while you are in dire need to debug your code efficiently, share your feedback and other gems which can help the SDK extension developer community.

 




ASUG BI Webinar List - September 2015

$
0
0

Here the updated list of webinars for September 2015

 


For all webinars :

 

  • Start Time : 11:00 AM (CT), 12:00 PM (ET), 10:00 AM (MT), 9:00 AM (PT)
  • Duration : 1 hour


 

  • September 08 - BICCs: Key to BI Success & Self Service BI with SAP and Tetra Pak

    BICCs are not new but are enjoying renewed visibility and investment to address the triple tsunami of Big Data, Internet of Things and Self Service. This session will review how BICCs have evolved to support these trends and how you can evolve your existing BICC or develop one.
    Fredrik Ohlsson from Tetrapak will share their BICC journey and lessons learned.
    Pat Saporito from SAP will review best practices, SAP BICC resources and share results on SAP’s BICC survey findings



 

  • September 21 - Unprecedented Visibility - Bring BI Auditing and Monitoring to Your Mobile Device

    The SAP BI audit database got a big face-lift in the 4.1 release, and it’s easier than ever before to create meaningful reports based on activities that occur in the system. With the advent and maturation of the monitoring application and its ability to write historical data to a trend database co-located with auditor, there are new opportunities for bringing this information together to provide administrators with new levels of transparency into how the system is functioning. In this session, learn how to unite information from these sources, and others, to create Universes that give you the full picture of what’s happening in your environment. Use these as a foundation for responsive applications, developed with SAP BusinessObjects Design Studio, that you can use anywhere to get an immediate picture of system health, and to take action in case of failure. Imagine a world where your mobile device is a window into the complete operations of your SAP BI 4.1 system and make it a reality with ideas and information from this lecture.



  • September 17 - Creating Interactive Analytics from Various Data Sources to Improve Patient Outcomes and Reduce Costs

    Using Business Intelligence, University of Utah Health Care has created scorecards, dashboards, and interactive reports that are being used to understand and improve patient outcomes and reduce patient care costs. By combining quality, productivity, satisfaction, efficiency, and financial data sources into interactive reports using BI tools we are providing timely and actionable data to our physicians and clinical leaders. These analytics are driving change throughout the organization.



 

I hope you enjoy these session.

 

Please note, that these are webinars organized by the ASUG BI group and for attending you need to be a ASUG Member.

A study of getData / getDataAsString method

$
0
0

getData is a very useful method. However, I found it a little bit more complex than I thought initially. Thus, I did some tests to understand its behaviors.

 

There are 3 notes described in the content assistant.

 

This method specifies members in the internal format.

For dimensions that are not specified, their aggregates will be used, provided that the corresponding aggregates exists in the result set.

The requested data needs to be part of the retrieved result set. This is especially important when requesting hierarchy nodes. The hierarchy needs to be expanded in advance to show the required hierarchy node.

 

Besides these 3 points, I think the key idea is that getData is not really to query but just to search from result set. Thus, the wanted data cell must exist in the result set and must “logically” have only one corresponding cell (see Test 5). And getData will take whatever number from that data cell even if the value has been filtered (see Test 7).

 

Let's start from the simplest one.

 

Test 1:

test1.png

Column: AMOUNT_SOLD

Row: Yr (with “Show Totals” checked)

 

DS_1.getData("AMOUNT_SOLD", {"YR": "2003"}).value

Result: correct result

 

 

Test 2 & Test 3 & Test 4:

 

test3.png

 

Column: AMOUNT_SOLD

Row: Yr (with “Show Totals” checked), QTR (with “Show Totals” checked)

 

DS_1.getData("AMOUNT_SOLD", {"YR": "2003"}).value

Result: correct result

 

DS_1.getData("AMOUNT_SOLD", {"YR": "2003","QTR": "1"}).value;

Result: correct result

 

DS_1.getData("AMOUNT_SOLD", {"QTR": "1"}).value;

Result: no result

 

 

Test 5:

 

test6.png

Column: AMOUNT_SOLD

Row: QTR (with “Show Totals” checked), MONTH_NAME (with “Show Totals” checked)

 

DS_1.getData("AMOUNT_SOLD", {"MONTH_NAME": "January"}).value;

Result: no result even though there is only one corresponding “January” data cell. All upper-level dimensions need to be specified in the selection

 

 

Test 6:

 

test7.png

Column: AMOUNT_SOLD

Row: Yr (with “Show Totals” checked), QTR (with “Hide Totals” checked)

 

DS_1.getData("AMOUNT_SOLD", {"YR": "2003"}).value

Result: no result

 

 

Test 7:

 

test8.png

Column: AMOUNT_SOLD

Row: Yr, QTR (Filter Members: “1”)

 

DS_1.getData("AMOUNT_SOLD", {"YR": "2003"}).value;

Result: The result value is the AMOUNT_SOLD of Year 2003, Q1 not whole year

 

 

Test 8:

 

test9.png

If the result set is too large, then no data will be shown in the Result Set. Thus, getData won’t work even though we just need the value of one data cell.

 

 

 

One last thing.

 

Parameters of getData include “measure”, “dimension”, and “value for the dimension”. “Measure” and “value for the dimension” can be replaced by variable while “dimension” cannot. To solve this issue, we can use Design Studio SDK: JSON Object Component. (thank you Karol)

http://scn.sap.com/docs/DOC-63667

 

Without SDK:

var measure=”AMOUNT_SOLD”;

var year=”2003”;

DS_1.getData(measure,{"Yr":year}).value

About demanding clients and pushy servers

$
0
0
Client-side processing, Polling and WebSockets (push)

 

 

Dear community,

 

By introducing my newest contributions to the DesignStudio community SDK repository I would like to show you guys what is possible in terms of SDK component communication and processing whereabouts. From a conceptual perspective we are going to talk about how to achieve data updates in a near real time manner and who is going to do the work. There are three options I would like to discuss: client-only processing, client based polling and permanent communication channels in between clients and servers using push messages. Each of this concepts will be covered by one of the SDK components presented in the next section.

 

Client-side Processing (WorldTime component)

 

This easy to use component enables a designer to display a localized time string. Portal-like dashboards often use it for convenience of the user.

world_time.png

          Figure 1: WorldTime design view

 

You can define an UTC offset, use daylight saving if necessary and choose from a variety of different layout options regarding the time and date format.

 

world_time_properties.png

          Figure 2: WorldTime properties sheet

 

The update interval specifies how often (currently every 5 seconds) the update routine is triggered to refresh the displayed time string. Technically this is done by using the standard JavaScript method setInterval().

 

That way all of the workload resides on the client’s browser. There is no network load and no impact on the server at all.

 

Master of fast polling (TimeOut component)

 

But what if you need actual data feeds which can’t be derived by the client app? Usually web applications such as DesignStudio dashboards are build using technologies like AJAX and libraries like jQuery to optimize server calls and roundtrips. Those are standard JavaScript tools to implement fast and flexible web pages. Parts of your application only call for data input if they need to and the requested data packages can arrive piece by piece. Even better, only the affected web components are updated in the process and not the whole page. But on the bottom line the communication is client initiated utilizing HTTP and the TCP/IP protocol where the communication channel is closed once the receiver confirms data arrival. Every new call starts again with a typical protocol handshake.

 

So, if we want to implement periodic data feed updates, we have to call the server for new information (client poll) on a regular basis. That’s where the second new SDK component comes into play. Let’s say you have a file repository on the SAP BW and you want to monitor if a new file arrives. The TimeOut component enables you to start a timer and use its time out event to add time driven logic to your DesignStudio dashboard.

 

In order to realize the use case described before you can check the checkbox” is periodic?” and schedule a periodic call. That way the dashboard user will be notified about a new file automatically. In the given example worst case is after five seconds. The involved WebService component (to do the actual calls) will also be published soon.

 

timeout_properties.png

          Figure 3: TimeOut properties sheet

 

This kind of approach impacts on the server depending on the frequency of calls and the number of users using the web application. In addition to that, many times, data updates happen less often than the client’s poll for new information. Especially if the request frequency is very high, for example in magnitudes of sub seconds. As a result there is constant traffic on the network and load on the server even if there is no new data to share.

 

For the sake of completeness, if the server delays its answer to the client’s poll request to increase the chance of an incoming data update instead of answering right away, that mechanism is called long polling.

 

Push messages at its best (WSPusher component)

 

To overcome the downsides of fast and long polling regarding the amount of dispensable poll requests and overhead of the handshaking mechanism, the obvious solution is to let the server decide when to send an update and keep the connection open. In order to do so it is necessary to establish a continuous full duplex connection between the client and the server. WebSockets (TCP/IP based protocol) are a popular solution to achieve just that. On such an open stream both partners can exchange messages on their behalf. Meaning the server can now push information to his clients.

 

My SDK component WSPusher implements the standard JavaScript API for WebSockets to enable the pushing mechanism. There are four event listener that handle the communication channel lifecycle on the browser (all current browsers support WebSockets):

 

  • onopen: Called when the communication channel is setup initially
  • onmessage:               Called when a message is received from the server
  • onerror: Called when an error happens during the communication
  • onclose: Called when the communication link closes

 

These are hooked accordingly into the DesignStudio SDK framework so that you can use my component to send and receive messages using WebSockets.

You only need to specify your WebSocket compatible server and you are good to go to get some data pushes from that server. The default URL points to a WebSocket server implementation that echoes your messages so that you can start using the component out of the box.

 

When a new message from the server arrives the event handler On Push Message Received is triggered. My component servers as a generic adapter that only passes the messages from one end to the other. It’s the developer’s task to ensure the web server handles messages, client connection management gracefully and the DesignStudio app does something meaningful with the pushed messages. I would suggest using JSON as data format for the messages and the community’s SDK component JSON Object to work with the JSON documents to increase component interoperability.

 

WSPusher_properties.png

          Figure 4: WSPusher properties sheet

 

The fun part starts when you try to implement WebSockets with ABAP on SAP. SAP calls it ABAP Push Channels (APC). I managed to get a WebSocket compatible service up and running using this blog entry: http://scn.sap.com/community/abap/connectivity/blog/2013/11/18/websocket-communication-using-abap-push-channels

 

And this code snippet for the on_message handler:

 

  method IF_APC_WSP_EXTENSION~ON_MESSAGE.
" Message has been received
TRY.
" Echo the message on WebSocket connection
DATA(lo_message) = I_MESSAGE_MANAGER->create_message( ).
lo_message
->set_text( i_message->get_text( ) ).

" Send message
I_MESSAGE_MANAGER
->send( lo_message ).
CATCH cx_apc_error INTO DATA(lx_apc_error).
MESSAGE lx_apc_error->get_text( ) TYPE 'E'.
ENDTRY.
endmethod.


To use the service cross-origin and in DesignStudio local mode I had to maintain a whitelist for ABAP Push Channel applications using transaction SAPC_CROSS_ORIGIN. In deployment mode this is not a problem if the dashboard is hosted on the same server as the ABAP Push Channel (APC).

 

Now your SAP backend can push around your DesignStudio dashboard J isn’t it great?

 

Obviously there are not only upsides to the WebSocket approach. For example there is also permanent traffic on the network to keep up the continuous communication but with considerably less overhead than with plain old HTTP. And your server needs to be sufficiently equipped to handle several client connections at once in parallel.

 

There is a lot more around that whole topic like broadcasting mechanisms and the ABAP Messaging channel just to mention a few. But for now this shall be sufficient.

 

Final words

 

Using the DesignStudio SDK we can use the full range of types of communication channels and process data/tasks where they are best suited, at the client, at the server or a mixture of both.

 

The components mentioned today are generic in nature and can be used for all sorts of use cases other than described here. I’d like very much to hear about your ideas to make use of them and what problems you solved.

 

Please note that the WSPusher is not yet on the release cycle of the community repository. You will have to do a custom build or ask me to get you an installable zip-file. I will update this post once the component reaches the normal update stream. Find the code repository on GitHub: https://github.com/org-scn-design-studio-community/sdkpackage

 

 

You don’t know the SDK community? You haven’t downloaded our SDK components yet? Find us, our SDK repository installation link and all of the mentioned SDK components over here:

http://scn.sap.com/community/businessobjects-design-studio/blog/2014/12/10/scn-design-studio-sdk-development-community

 

As always feel free to ask lots of follow up questions.

 

Yours

Martin

Your chance to learn more about SAP BusinessObjects Design Studio

$
0
0

Are you wondering how you could move away from BEx Web Analyzer and migrate to SAP BusinessObjects Design Studio ?

 

Are you thinking about migrating all you Xcelsius / Dashboards content over to SAP BusinessObjects Design Studio ?

 

or are you just wondering what SAP BusinessObjects Design Studio is and what it is capable off ?

 

Here are some options to learn more about it.

 

 

SAP BusinessObjects Design Studio Deep Dive

@ SAP TechED in Las Vegas - Monday October 19, 2015

 

 

The session will provide you with hands-on experience for the following areas of SAP BusinessObjects Design Studio:

 

  • Role of design studio in the business intelligence portfolio
  • Design studio deployment options
  • Creating simple dashboards
  • Structuring your dashboard using pagebook, tabstrip, and grid layout
  • Filtering your data using different options
  • Using scripting as part of your dashboard for enhanced interactivity
  • Using personalization and bookmarking
  • Leveraging online composition as part of your dashboard
  • Integrating geographic data
  • Parallel process and background processing of data sources

 

SAP BusinessObjects Design Studio Basic Training with SAP Mentor Ingo Hilgefort

 

 

SAP BusinessObjects Design Studio Advanced Training with SAP Mentor Ingo Hilgefort

 


Hope to see you soon.

Meet ASUG TechEd Speaker Mustafa Bensan and learn how to Apply a Fresh Face to Your BI Apps with SAP BusinessObjects Design Studio

$
0
0

TechEdBanner.png

 


Introduction


After having participated in SAP TechEd Las Vegas as an attendee for the last couple of years, this year I'm thrilled to have been given the opportunity to present ASUG session BA123 Apply a Fresh Face to Your BI Apps with SAP BusinessObjects Design Studio.   As some of you may already be aware, I enjoy being active in the SCN SAP BusinessObjects Design Studio space and especially writing the Design Studio Innovation Series blog.  For those of you who would like to know a little more about me personally and professionally I'm going to take the easy way out and refer you to last month's SCN Member of the Month post.  This time around I won't be presenting in a pilot's uniform although I will certainly try to make the session entertaining nevertheless.



What is my session about?


In a nutshell, I'll be talking about and demonstrating the Fiori concepts in the context of Design Studio and why we should consider adopting these concepts when developing BI apps.  Emphasis will be placed on user experience (UX) and mobile first design.



Why should you attend?


The session will include what I hope you'll find to be three very interesting and practical demos progressively showing what can be achieved in terms of Fiori-style BI apps using both standard and SDK components as follows:


1)  Fiori-style with the standard KPI Dashboard Template

This will be our starting point for applying a Fiori design using only standard components;


2)  Fiori-style with Community SDK Components

This demo will take advantage of the Fiori-style components available from the SCN Design Studio SDK Development Community to illustrate how such components can accelerate development and simplify maintenance by significantly reducing the overall number of components and scripting required to build a Fiori-style BI app; 


3)  Pushing the envelope with the SDK and mobile first design

In this special first look, I'll be sharing a Design Studio SDK initiative which in particular focuses on the Fiori principles of Responsive, Simple and Delightful design.



Conclusion


I look forward to seeing you there and hope you can attend the session.  Feel free to comment or message me if you're going to be at TechEd and would like to meet up.



Learn about experiences extending Design Studio and and SAP Lumira using the SDK in ASUG Session BA209 at TechEd

$
0
0

TechEdBanner.png

 

 

 

Introduction

 

Taking a cue from the good Mustafa Bensan's blog entry (Meet ASUG TechEd Speaker Mustafa Bensan and learn how to Apply a Fresh Face to Your BI Apps with SAP BusinessObjects Design Studio), I thought I'd also raise the awareness of my session, also occurring at SAP TechEd 2015 Las Vegas next month.  I'll also steal his format for sake of consistency.    As Mustafa did, I'll take the easy way out and let you learn anything personal you'd like to know about myself here: Mike Howles - SCN Member of the Month August 2014 or just click on my profile link.

 

What is my session about?

 

I'm happy to again to be presenting for ASUG this year on a similar topic as last year, but not a replay of last year's by any stretch.  This year not only will I be touching on (new) SAP BusinessObjects Design Studio extension use cases, but also recounting use cases explored with SAP Lumira.  For those who attended my session last or my ASUG Webinar, it was overwhelmingly technical and developer focused.  This year I will get into some developer specifics but will touch more on overall experience as well with more use case comparisons between the two products.

 

Below is the link and official description of the course:

 

BA209 - SDK Experiences: SAP Lumira VizPacker and SAP BusinessObjects Design Studio

 

This session provides an overview of three focal areas:

  1. New usage potentials experienced while using the SAP BusinessObjects Design Studio SDK with examples of a new data source extension, new visualization and map experiments, and an overview of the new SDK functionality available with 1.5.

  2. A recount of experience with using SAP Lumira VizPacker and the SAP Web IDE VizPacker plugin.

  3. Leveraging and the challenges faced with common libraries such as SAPUI5, D3, CVOM, and RequireJS.

 

Who should attend?

 

If you are an SAP Customer or an SAP Partner and:

 

  • You want to know more about the extension options for SAP BusinessObjects Design Studio or SAP Lumira, then my presentation should help give you some fact-based first-hand development experiences I had, along with a recount of challenges and what could be better, along the way.

  • You want to know some use cases I went through and see examples of what are possible as a result of exploring them, specifically for visualizations and also for data source extensions.

  • You dabble in HTML5 and are interested in how you could reuse these skills in SAP BI tools.

  • You've got nothing else going on at Wednesday at 4:30p!

 

What else is happening at TechEd with ASUG related to BI?

 

Tammy Powlas has got you covered here: ASUG SAP TechEd Sessions Featuring Business Intelligence

 

Also, even if you don't come to my session but you are interested in some cool Design Studio topics or Fiori design principles, be sure to check out Mustafa Bensan's ASUG session at the very least!  (BA123 - Apply a Fresh Face to Your BI Apps with SAP BusinessObjects Design Studio)

Serious Issue with Design Studio 1.5 SP1 on BIP

$
0
0

Hello Everyone,

 

Just yesterday I had the confirmation from Design Studio development team that a new issue introduced with SP1 for Design Studio 1.5 has been identified and already fixed. Over the last days many incidents were created on this, some of them with Very High priority, due to the criticity it has for business users.

 

When running Design Studio applications on BI Platform errors like data source instantiation not possible are raised (Data source is not initialized, could not instantiate the data source, cannot load query). In many cases it is resolved with an APS restart, but the issue comes back after some minutes.

 

If you look at the APS logs you will see the error:

 

"...Not a valid logon token. (FWB 00003) Cannot find token."


SAP Development released SAP Note 2218808 today on this and for DS 1.5 SP1 PL1 - which is going to fix this issue - planned release data, please refer to this note updates.

 

Kind Regards,
Marcio


Design Studio Update – APOS Webcast Recap

$
0
0

This webcast took place on Thursday – I will try to not repeat what has already been shown here on SCN so I am skipping some of the slides presented.

1fig.png

Figure 1: Source: APOS

 

Figure 1 shows the results of the attendee poll

2fig.png

Figure 2: Source: APOS

 

Figure 2 shows that two-thirds of the attendees expect to use Design Studio – 30% increase from today

3fig.png

Figure 3: Source: APOS

 

SAP’s Ian Mayor then provided an overview of Design Studio 1.5 features.  He said enhancements to Design Studio are voted on by user groups around the world, and Idea Place

4fig.png

Figure 4: Source: SAP

 

Figure 4 shows Smart Objects.  Smart Objects assemble dashboards for end user

 

They allow you to choose components from different dashboards, save them as fragments, and those fragments go into the person’s repository, person creates personalizable dashboards

 

Smart Objects provide live references back to original dashboards

5fig.png

Figure 5: Source: SAP

 

Focus 1.6 area is support for non-SAP sources

 

Row limit for UNX – at least 20K rows, no final number yet

 

As move beyond, 20K is not enough, looking to remove row limits

 

The plan is to improve interop with Lumira, go from Lumira to Design Studio – looking at 2016 timeline

 

SAP plans to redouble commitment to non-SAP sources in 2016

 

Version 1.6 will support multi-source universes

 

Design Studio is on a six month cycle

 

Version 1.6 is planned for November

 

2016 May and November are planned releases

6fig.jpg

Figure 6: Source: APOS

 

Figure 6 shows the APOS add-on using Web Intelligence as a data source to Design Studio and Lumira

 

 

 

Question and Answer

 

Q: How can we deploy Design Studio to SharePoint and other homegrown apps?

A: If you use platform portal integration kits you can use Design Studio with that and it uses the OpenDoc standard to embed content

You have to keep in mind – output is pure HTML5 app – to render properly you need to make sure it is also HTML5 otherwise strange rendering

 

Q: Are there widgets/icons for Design Studio?

A: Icon widget could make it to 1.6 (not 100% certain though)

 

Q: How does Design Studio integrate with BI platform?

A: it is an add-on to BI platform – it releases more often than BI platform

 

Q: Can we connect to ECC using BAPI’s?

A: You can use the transient providers (eph5/6 and above)

 

Q: If use databound components is no scripting required?

A: It does eliminate some scripting but some things like exports and hiding does require scripting

 

Q: Do we have a date for 1.6?

A: Planned for November – can’t give an exact date

 

Q: Parallelization does not use OLAP cache?

A: Will use it some cases but not optimal for BW

BW on HANA – less of an issue as they run faster

 

Q: Plans to use Query as a BI web service like XCelsius?

A: no plans in foreseeable future

Consider add-ons like the Data Gateway from APOS

 

Q: Does Design Studio retire Dashboards?

A: Design Studio is the platform moving forward with – no plans to retire Dashboards/XCelsius but not make plans for new features in those products

 

If build new applications consider Design Studio

 

Related

ASUG Webcast for Design Studio 1.6 – register at https://www.asug.com/events/detail/World-Premiere-of-SAP-BusinessObjects-Design-Studio-1.6

Your chance to learn more about SAP BusinessObjects Design Studio

Meet ASUG TechEd Speaker Mustafa Bensan and learn how to Apply a Fresh Face to Your BI Apps with SAP BusinessObjects Design Studio

Learn about experiences extending Design Studio and and SAP Lumira using the SDK in ASUG Session BA209 at TechEd

APOS will be exhibiting at SAP TechEd Las Vegas

Design Studio Update #askSAP Call

$
0
0

Design Studio was covered at the end of last week's #askSAP call.  The usual legal disclaimer applies that things in the future are subject to change.

 

SAP said the "overall shift in BI from centralized IT to more of an end user agile BI".  It doesn’t meant that “curated” use case has gone away.  It means now we have use cases where users can create something right now based on their needs.

 

Design Studio has been taking on the roles that legacy products filled for application building and dashboarding.  With 1.6, SAP has been rapidly developing the product.  It is a a rapid analytic development tool for dashboarding and analytic apps.

 

It is not necessarily for the developer; it is for the designer.  The designer can rapidly develop complex applications customized to the needs of the organization

 

Templates are included in every version – a “gallery of templates”.  Application can be completely custom.  Applications are universally consumable using HTML5.

 

Drag and drop in cross tabs, save parts of an application with colleagues (smart objects, social BI)

 

1howitbus.jpg

Figure 1: Source: SAP

 

Fast development, template oriented, designer oriented, someone professional curates the application with a fast deployment model

 

Development times are in weeks for a complex application; if using template can do in an afternoon

2fig.jpg

Figure 2: Source: SAP

 

Typical template based application

 

Custom app for OLAP data

3fig.jpg

Figure 3: Source: SAP

 

Out of the box it looks like Lumira (see the right of Figure 3)

4fig.jpg

Figure 4: Source: SAP

 

Data exploration is almost like Lumira and geared towards OLAP data sources

5fig.jpg

Figure 5: Source: SAP

 

Version 1.6 is planned for November

 

For this version features the scorecard

 

With 1.6 feel can turn attention to classic XCelsius community

 

Before had the cross tab, but it is not heavily formatted information

 

Scorecard will have a customizable table, customize conditional formatting, combine CSS formatting to the data to make it dynamic

 

Can put charts in columns/cells and can organize –build a butterfly table and sparkline charts

 

Geo includes small improvements, can now have embedded charts with shapes

 

Will fully support drag and drop BEX use cases

 

Related

ASUG Webcast for Design Studio 1.6 – register at https://www.asug.com/events/detail/World-Premiere-of-SAP-BusinessObjects-Design-Studio-1.6

Your chance to learn more about SAP BusinessObjects Design Studio

Meet ASUG TechEd Speaker Mustafa Bensan and learn how to Apply a Fresh Face to Your BI Apps with SAP BusinessObjects Design Studio

Learn about experiences extending Design Studio and and SAP Lumira using the SDK in ASUG Session BA209 at TechEd

Design Studio Update – APOS Webcast Recap

Your First Extension: Part 0 - Setting Up Eclipse

$
0
0

When an end user comes into contact with a Design Studio app or dashboard, it is all web content.  Design Studio’s designer tool is another beast entirely.  It is an Eclipse Rich Client Platform (RCP) application and leverages both Eclipse itself and the Eclipse Modeling Framework (EMF).  Since our web content is going to need to live in Eclipse and in the EMF during design time, we're going to need to supply some infrastructure to make this possible.

 

Eclipse is extendable.  Furthermore, these Eclipse extensions (Plug-Ins) can themselves be extended if they offer up an extension point.  Design Studio offers an extension point.   Presuming that we've installed Eclipse (VERSION) and Design Studio and that they are both the same bit depth (32 and 32, or 64 and 64), we can now go about configuring Eclipse to develop Design Studio extensions.

 

When we're developing our extension, were going to want to test it periodically and when we're done, we're going to want to create a deployable package.  Therefore, we're going to want to make sure that Eclipse knows about Design Studio and that Design Studio is a valid "thing with an extension point".  In Eclipse, this is known as a Target Platform.

 

 

Step 1 - In Eclipse, select Window -> Preferences

Step1.png

 

 

 

Step 2 - In the Preferences dialog, search for "target".  This will filter the available properties down to the Target Platform.  Select Target Platform.

Step2.png

 

 

 

Step 3 - At this point, if you have never done any plugin development, then there will be no target platforms.  Click on Add to create one.

Step3.png

 

 

 

Step 4 - Select "Nothing: Start with an empty target definition".

Step4.png

 

 

Step 5 - We have an empty target definition.  First, give it a name.  Then click on the Add button, to define the actual target.

Step5.png

 

 

Step 6 - Since we want to use the existing Design Studio installation as the target platform, we'll assign the directory where its executable resides as the target.  Select Directory.  Then navigate to Design Studio's installation folder and select it.

Step6.png

 

 

Step 7 - You should see a long list of plugins in the preview pane.  Select Finish.

Step7.png

 

 

You should now have a Target Platform defined and it should be the default.  You are now ready to debug the Design Studio Extension projects that you work on.

 

 

Step 8 - Download and install the SDK samples.  These are useful as a reference point in any project.  If you ever find yourself asking "how do I do X", then there is surely a sample that can help you.

 

As of Design Studio 1.5, the download location of the most recent version of the SDK samples is here:

http://help.sap.com/businessobject/product_guides/AAD15/en/DS_15_SDK_SAMPLES.zip

 

Unpack it.

 

 

Step 9 - When you are editing component properties and attributes, you'll be doing it in XML; in the contribution.xml file..  There is a way to ensure that a particular type of XML file follows pattern.  This is to conform to it's schema definition, if there is one.  The Design Studio SDK has a schema definition.  If we inform Eclipse where this schema definition is, Eclipse can warn us when we've made an error in our contribution.xml syntax and it can even give us value help.

 

Navigate back to the Window -> Preferences dialog and this time, select XML -> XML Catalog, or search for XML catalog.

Step9.png

 

 

Step 10 - In the Add XML Catalog Element, select Add.

Step10.png

 

 

Step 11 - Navigate to wherever in the filesystem that you unpacked your samples and select SDK.xsd.  Click on Finish and the sdk schema has been added to Eclipse.

Step11.png

 

 

Step 12 - Now we're ready to import the sample SDK projects into our workspace.  Select File -> Import.  In the Import dialog, select General -> Existing Projects into Workspace.

Step12.png

 

 

Step 13 - Keep the default "Select root directory" radio button checked.  Click on Browse.  Navigate to the location of the projects in the filesystem (where sdk.xsd was).  Select the project(s) that you wish to import.

Step13.png

 

 

Step 14 -  Strictly speaking, Eclipse does not require you to copy the projects into the current workspace and can work with them in their original location.  If you check "Copy Projects into Workspace", Eclipse will copy the content into a newly created folder in the workspace.  Doing this is good practice, as it keeps the projects together and makes them easier to port en-masse to newer versions of Eclipse or to other systems later.

Step14.png

 

 

 

Step 15 - Often, these imported projects contain metadata that was specific to the original project setup.  You may see error messages and the extensions won't be startable.  To take care of this, you can command Eclipse to "clean" the metadata.  With the project selected, select Project -> Clean.

Step15.png

 

 

Step 16 - Select Clean All Projects and then click on OK.

Step16.png

 

 

Step 17 - You are now ready to check and see if your setup is ready for development.  Right click on the project in the Project Explorer.  Select Run As -> Eclipse Application.  This will start the currently active Target Platform (which should be Design Studio), with all currently open extensions installed.  Keep in mind, that this instance of Design Studio will not use the same workspace as Design Studio started normally; so apps developed outside of the context of debugging components will not be visible here and the apps that you work on to test your components won't be seen elsewhere.

Step17.png

Your First Extension: A tutorial for building Design Studio extensions

$
0
0

Design Studio allows you via extensions to add any arbitrary Javascript/HTML/CSS web content to your apps and dashboards.  These extensions are not one-offs.  Rather, they become part of your palette and are always available when you are working on apps in the designer.  This tutorial series walks you through the entire process of creating a your first functional component; a configurable gauge component.  It presumes that you have Eclipse and Design Studio installed and that you know your way around Design Studio.  Prior knowledge of html, Javascript and CSS is helpful, but not mandatory.  We’ll walk you through the bits that you need to know.

 

There are many Design Studio SDK articles on this site and this tutorial series does not break new ground in that respect.  What it does do, is try to bring a comprehensive, systematic approach to learning how to use the SDK.

 

Notes on Terminology

 

Dashboard and Application seem to be used interchangeably.  If there is any consensus, it might be that “dashboards” are simpler and “applications” are more complex.  There is no consensus on when a dashboard has enough complexity to be called an application.  For simplicity, since we don’t want to always write “dashboards and applications”, we’ll just call them apps here.

 

Likewise, “Extension” and “Plugin” are interchangeable.  Here, however, we will split hairs and make an arbitrary distinction.  An “Extension” means the web content that you’ll want to make available to Design Studio and that icon in the design palette, which the designer will access.  “Plugin” refers to the technical plumbing that you’ll need to supply to Design Studio’s Eclipse core; in order to make your extension available to the designer.  The designer of an app installs and uses an extension.  The developer of an extension makes a plugin.

 

Chapters:

 

Part 0 - Setting Up Eclipse

Design Studio Roadmap September EMEA Webcast

$
0
0

This was an EMEA webcast I attended this morning.  Please note, the title of the webcast was roadmap, but the roadmap wasn’t covered until the last few minutes.  I will highlight some new things I learned.

 

Of course SAP’s legal disclaimer applies that things in the future are subject to change.

 

The SAP speaker said that in 1.6, designer mode will include a CSV file will allow you develop offline, not connected to an online data source.

 

Personas

This was one of the first times I remember SAP referencing personas in relation to Design Studio.

1fig.png

Figure 1: Source: SAP

 

Data Analyst is a key business user, awareness of data, Excel/Access skills, and SQL knowledge

 

They understand the types of data, visualizations that organization needs

2fig.png

Figure 2: Source: SAP

 

The information consumer is a decision maker, awareness of data, knowledge of analytics

 

They are the end users for dashboard

3fig.png

Figure 3: Source: SAP

 

Application designer has simple scripting knowledge, data modeling, knows XCelsius / Web Application Designer, and web design.  The application designer is between business & IT departments

4fig.png

Figure 4: Source: SAP

 

The developer has hard development skills, know Web 2.0 technologies, HTLM5, analytics, problem-solving

 

The administrator is one who ensures environment is up and running, authorization governance is in place

 

Lumira is more for the end user

 

Design Studio is for enterprise dashboards and is scalable and robust

5fig.png

Figure 5: Source: SAP

 

Figure 5 shows limitations on NetWeaver

 

The speaker said mobile for NetWeaver is only for the portal and only has iOS support

6fig.png

Figure 6: Source: SAP

 

Platform for HANA is “coming together” and currently has limited support, check PAM's and what’s new guides

 

Other

Edit > Initial View is only for small tweaks; major changes should happen in BEx query

 

Design Studio will be supported BI4.2

 

7fig.png

Figure 7: Source: SAP

 

The plan is to remove restrictions on universe 1.6

 

Customers are seeing 1.5 as a launch point to go live

 

Version 1.6 is a “consolidation release” – improve geo maps, charts, export to PDF enhancements

 

Enhanced universe connectivity, enhanced cross tab features, visualization components, new table, new score cards

 

Future (after 1.6 release) includes scheduling & broadcasting next year – export to documents or creation/distribution and bookmarks

 

Annotations and comments are in the coming year

 

Offline is a journey; it started, continue to invest next year

 

Scorecard is in 1.6 release

 

Continue to invest in Mobile; in 1.6 ensure components are mobile-ready

 

New components will be built for mobile first capacity

 

More advanced mobile support including intro of responsive design

 

Design time tool to more development views – iOS, Android, tablet, phone

 

Extend admin capabilities, improve RTL, accessibility

 

Local calculations and projections are planned for the new year

 

Related

ASUG Webcast for Design Studio 1.6 – register at https://www.asug.com/events/detail/World-Premiere-of-SAP-BusinessObjects-Design-Studio-1.6

Your chance to learn more about SAP BusinessObjects Design Studio

Meet ASUG TechEd Speaker Mustafa Bensan and learn how to Apply a Fresh Face to Your BI Apps with SAP BusinessObjects Design Studio

Learn about experiences extending Design Studio and and SAP Lumira using the SDK in ASUG Session BA209 at TechEd

Design Studio Update #askSAP Call

Design Studio Update – APOS Webcast Recap

Design Studio SDK: UI5 Table with Conditional Formats

$
0
0

Following the blog Design Studio SDK: New Features in UI5 Table, today the Conditional Format function.

 

if you want to:

* display the data from any data source in a table

* highlight some cell values based on conditions, like this below:

 

cond-form.PNG

 

then this blog is for you.

 

The baseline.

This is an extension of the UI5 Table component, as here -Design Studio SDK: UI5 Table Component.

 

The idea.

The community flatten functions provided by Mike (and a bit extended by me) are capable to flatten the result set into the table row/cols specification. This allows easy access on cell level to the data - and to the members. It means, the evaluation is made on CONTENT basis, not on logical dimension / member / measure basis. But this is enough for some start.

 

The rules need to be given as an JSON Array:

 

[

    {"condition": "value", "sign": ">", "value":"4", "simpleFormat": "green2"},

    {"condition": "value", "sign": "<", "value":"3", "simpleFormat": "red2"},

    {"condition": "contains", "members": ["Brewer", "Zavala"], "exclude": false, "simpleFormat": "yellow1"}

]

 

the rules can be checked in 3 ways:

* Match First (then ignore others)

* Match Last (last always win)

* Collect (check all and place the assigned "simpleFormats" into an array

 

The "simpleFormat" is a string which is passed into special attribute on the table

data-condformat="<the dimple format string>"

 

and it allows you to select this content via "normal" css selector. Some selectors are already build in, but you can freely add your own.

 

Example for CSS class

div[class~=scn-pack-ActivateSimpleConditions] td>div>label[data-condformat="green1"] {

    background-color: #9fff9f!important;

}

 

you just need to replace "green1" with your own string passed as simpleFormat

 

Conditional Options

Then, we have following evaluation options:

 

contains

checks if the content contains given strings.

positive check

{"condition": "contains", "members": ["Berlin", "Munich"], "simpleFormat": "red1"}

 

negative check (exclude)

{"condition": "contains", "members": ["Berlin", "Munich"], "exclude": true, "simpleFormat": "red1"}

 

pattern

check the content for existence of some characters. you can use '?' to accept any character. Character '*' stops the check and returns the current state.

positive check

{"condition": "pattern", "members": ["Be??in*", "Mun*"], "simpleFormat": "red1"}

 

this should match all Be<here 2 characters which does not matter>in<and here any characters>

OR

Mun<and any character

 

equals

Like contains, but checks on exact content. also possible with exclude flag.

positive check

{"condition": "equals", "members": ["Berlin", "Munich"], "simpleFormat": "red1"}

 

empty

Checks for empty cells, can also be used with exclude flag, then non empty cells will be marked.

positive check

{"condition": "empty", "simpleFormat": "red1"}

 

value

works only for numbers, compares the content with given number.

positive check

{"condition": "value", "sign": ">", "value":"4", "simpleFormat": "green2"},

 

APS Update

The rules can be maintained in additional proeprties, so now no JSON is requried.

 

The maintenance does not need to be made by JSON any more, an UI is available for it:

cond-form1.PNG

cond-form2.PNG

 

All is available in the preview / stable as of now. If someone is willing to test / double check - you are welcome.

 

Restricting the Conditions to Columns

With this property you can additionally restrict applying of the conditions to some columns only. you need to place the key of the dimension/measure which is in this column.

 

cond-form3.PNG

In this case, the key of "Unit Sales" is "unit_sales" and then this condition will be applied only to "unit sales" column.

I hope this helps.

 

Btw, in case you have 2 dimensions in columns, this works as well - you need to make the "Column Header Id" as combination of those:

 

my drill down here:

cond-form4.PNG

The required ID: "<gender id> | <measure id>"

cond-form5.PNG

 

the release package is updated with this function now.

 

Help / API Specification

Go directly to the help site and find the component: Component List - SCN Design Studio Community

 

Download & Use

This component is available on the community package

 

More information on the SCN community package in blog  SCN Design Studio SDK Development Community

 

Example as BIAPP:

org-scn-design-studio-community/applications · GitHub

 

Any thoughts?

feel free to add as usual...

 

Enhancements Ideas?

if you have good ideas (to those who would like to contribute but cannot code...) - place an "issue" with tag "enhancement" under Issues · org-scn-design-studio-community/sdkpackage · GitHub

Horizon Chart extension for Design Studio - Part 1

$
0
0

It's been a while since my last extension and I thought it was high time I got back in the mix. Over the summer I had the opportunity to see a great post by @NadiehBremer on Twitter about horizon plots in R:

 

Nadieh Bremer auf Twitter: &amp;quot;.@vlandham here is an R tutorial for horizon plots - but those from @flowingdata do…

 

I felt that this chart type would be a great addition to Design Studio so I researched a bit more about it here:

 

http://flowingdata.com/2015/07/02/changing-price-of-food-items-and-horizon-graphs/

 

and here:

 

Timely Portfolio: Horizon on ggplot2

 

You can check out an interactive sample by the great Mike Bostock here:

 

http://bl.ocks.org/mbostock/1483226

 

I would encourage everyone to check this out as it provides interesting context on viewing/interpreting many dimensions over a time series. It took me a couple of months to find the time to deliver this extension in a way that satisfied me, and I'll use this blog series to take you through the creation of it step-by-step. I'm following a multi-installment process because otherwise this will turn into more of a novel than a blog.

 

So to begin, let me show you the final result, explain how it works, and obviously provide you with the link to the source. Next time, I'll share the D3 samples I used to cobble this thing together and talk a bit about my own evolution as a D3 developer. This exercise was a fantastic chance for me to create new code for the first time, rather than just copying existing samples.

 

First, let's look at the finished product:

 

HorizonSample.png

 

And the data source underpinning it:

 

data source year-month.png

 

You can see the data source, in this case, is constructed by adding Year and Month dimensions to the rows axis, with a "trellis-by" dimension as the 3rd dimension in the rows. The horizon chart takes a single measure of your choice. In the case above, Blue values represent below average performance, and green values represent above average performance. The component takes 4 color values and uses a poly-linear scale to implement the color saturation.

 

Once you've constructed the data source in this fashion, you can configure the component in Design Studio:

 

HorizonSampleProps.png

The properties are:

 

  1. Data Source - bind to the data source you've configured as above
  2. Horizon Measure - select the measure to plot on the horizon chart
  3. Trellis Dimension (optional) - create small multiples based on a 3rd dimension defined as above (the default value of None can be used if you don't want small multiples)
  4. Unix timestamp format - Set to true to use with timestamp columns representing ms since epoch (covered in detail below)
  5. Bands - sets the number of divisions for the horizon, values from 1-5 are valid.
  6. Mode - mirror positive and negative values on the same axis, or offset negative values on top and positive values below.
  7. Positive Color 1, Positive Color 2, Negative Color 1, Negative Color 2 - specify colors for positive/negative value saturation
  8. Label size - How large should the trellis labels be ... set to 0 for no labels
  9. Trellis Label Text Offset - number of pixels to offset text labels. Set to higher value for long strings

 

Furthermore, there is an on-click event with the following ZTL methods available:

 

getSelectedNodeKey() - retrieve the trellis dimension value (i.e. Workstation ensemble)

getSelectedYear() - retrieve the selected year dimension

getSelectedMonth() - retrieve the selected month dimension

getSelectedDate() - retrieve the selected timestamp in the format yyyymmddhh (for timestamp use case)

 

I built a mouseover function to display the actual measure value and time series dimension because the horizon chart plots based on deviation from the average measure value, not the absolute values underpinning it. This allows us to check the significance of the average fluctuation.

 

I also wanted to leverage this component for use with the BI platform auditing and monitoring databases, where the timestamp is captured in the number of ms since January 1, 1970 (or the epoch as it's called). The D3 Horizon Chart plugin actually requires the date input to be in ms since the epoch, and Mike Bostock's example shows how to create this from a year and month combination. Once I understood this, I was able to add some conditional logic on how to handle a result set where the data was already in this format. A data set from the monitoring tables might look like this:

 

data source ms since epoch.png

 

In this case, the Year and Month rows are replaced with a single row containing the ms since epoch data. The trellis dimension is the server name in the BI platform. After configuring the data source in this fashion, you can set the "Unix timestamp format" property to true. The output then looks something like this:

 

HorizonSampleBIP.png

The red lines indicate points of above average resource consumption. That's it for the overview ... for now I've added this component to the prototypes group in the Design Studio SDK community package. You can find the source code here:

 

sdkpackage/src/org.scn.community.prototypes/res/HorizonChart at master · org-scn-design-studio-community/sdkpackage · Gi…

 

In the next installment, I'll go through the code in detail and share my experiences in assembling this extension from various online sources. I hope you enjoy using it and please provide any feedback you might have as you begin working with it.


Design Studio: Parallel Processing and Scripting

$
0
0

Getting started with parallel processing is easy. Assign data sources to processing groups, set “Merge Prompts” to false, and just execute the application.

While this is true in general, there are some things you need to know.


 

Parallel processing is not present in all phases of application execution. Four specific phases take advantage of parallel processing (see also Chapter 29.10 of Design Studio’s “Application Designer Guide”):

 

  • Initialization of data sources on start-up
  • Fetching result sets during rendering
  • Submitting variables
  • Data binding

 

As you might have noticed, the execution of script statements is not mentioned in the above list.

 

 

Beware the Script Execution

 

Design Studio scripts are always executed sequentially, that is statement by statement. When one statement is executed, it must rely on the fact that the execution of the previous statement has been completed. This rules out parallel execution of statements. For example, if a statement makes a decision based on a result that was computed with a previous statement, the script must be processed in the defined sequence in order to arrive at a reproducible result.

 

     var value = LISTBOX_1.getSelectedValue();

     if (value == "DeleteOrder") {

          // ...

     }

 

Keep this in mind when using script functions that access data sources.

But there is no need to worry, there are solutions around that deal with these circumstances.

 

 

Solution 1: Load Multiple Data Sources in Parallel During Script Execution

 

When you are initializing several data sources in a Design Studio script, try to centralize data source initialization in one place and use APPLICATION.loadDataSources(). This function can initialize the given data sources in parallel.

 

Traditionally initializing several data sources needed multiple script statements:

 

     DS_1.loadDataSource();

     DS_2.loadDataSource();

     DS_3.loadDataSource();

 

As mentioned above these three statements would be executed in sequence. However the initialization of several data sources is a quite common scenario. Therefore a new statement is available that allows parallelization for this scenario:

 

     APPLICATION.loadDataSources([DS_1, DS_2, DS_3]);


Note that this statement does not process all data sources in parallel, but according to their assignment to a processing group.

 

 

Solution 2: Use Property Binding

 

Property binding allows replacing sequential script statements with binding information of data sources to properties of components. The processing of property bindings takes part in the parallel processing.

 

 

 

 

Property Binding - Simple Values

 

You want to set a text from a data source cell to a text field. Traditionally, a Design Studio script statement would retrieve the value of the cell with “getDataAsString” and assign it to the text property:

 

    var text = DS_1.getDataAsStringExt("store_sales", {});

    TEXT_1.setText(text);


When using property binding you create a property binding of type “Data Cell Binding” for the Text property of the text field:

 

dataBinding.png

 

Property Binding - Multiple Values

 

You want to populate a list box with members from a data source. Traditionally, a Design Studio script statement would retrieve the members with “getMembers” and assign it to the list box:

 

     var items = DS_1.getMemberList("city", ...);

     LISTBOX_1.setItems(items);

 

 

When using property binding you create a property binding of type “Dimension Members Binding” for the Items property of the list box:

 

dataBinding_member.png

 

 

Summary

 

Script statements are always executed in sequence. Use property bindings and “loadDataSources()” to leverage the full potential of parallel processing. These can replace specific script statements with techniques that are executed in parallel.

Design Studio: Why is HANA Studio Faster?

$
0
0

Every now and then the Design Studio development team is contacted by people using Design Studio applications with data stored on HANA, reporting that the execution time of a data source in Design Studio is perceptibly larger than executing the corresponding view directly in HANA tools like HANA studio or the HANA Web IDE.

 

At first glance executing a data source in Design Studio and executing the corresponding view appears to be the same action. However Design Studio also provides multidimensional and analytic features on top of the resulting data from HANA, such as:


Active Hierarchies

 

HANA tools, in particular when showing a view’s data, do not apply hierarchy information to visualize hierarchies. In Design Studio, however, available hierarchies of a view are typically always used and processed. Depending on the complexity of the hierarchy, this may take a significant amount of processing time.

 

Currency and Unit Calculations

 

In HANA tools, values in currency and unit columns are treated merely as numbers. When calculating totals of such columns, their numbers are simply added by HANA, not taking into account differences in individual currencies or units. In Design Studio these differences are fully taken into account. Design Studio will never add values of different currencies or units. Analyzing each value for the associated currency or unit takes a certain amount of processing time.

 

Drilldown Including Total/Subtotal Calculations

 

HANA tools process and display data from a simple relational point of view, whereas Design Studio processes and displays data from a multidimensional point of view: Data is arranged along axes in nested drill-downs, often including the calculation of totals and subtotals.

 

 

This shows a Raw Data view in HANA Studio:

 

Table.png


This shows the same data as a part of a multi-dimensional drill-down in Design Studio:

Drilldown.png

 

As you can imagine from the screenshots, providing this additional multi-dimensional information also takes some processing time – that is significantly influenced by the number of dimensions and the dimensions’ arrangement in the drill-downs.

 

Number of Records

 

HANA tools process only a limited number of records by default. In HANA Studio’s Data Preview 200 rows are processed and displayed by default. In HANA Studio’s SQL View 1000 rows are processed and displayed by default. Design Studio processes all relevant records. Limiting the number of records would imply wrong results for totals, for example. Processing a limited number of records is certainly more performant that processing all records.

 

Initial View

 

While HANA tools leads users to experiment ad hoc with the plain view without much configuration, Design Studio has the concept of an initial view, offering users to completely preconfigure the view as they need it in their Design Studio application. The initial view is stored and retrieved with the application and thus contributes to additional processing time when compared with the more ad hoc way of working with views in HANA tools. Design Studio passes the initial view to HANA where it is processed. This is another contribution to additional processing time when comparing Design Studio with HANA tools.


Validation of Values When Applying Filters or Variable Values

 

HANA tools, like in Design Studio, offer the concept of variables and filters. While in HANA tools the applied variable values or filter values are not validated, in Design Studio applications both variable and filter values are validated. This allows Design Studio applications to provide feedback to users when invalid values were applied. As all validation needs to check values against the available data a certain processing time is spent for providing this capability.

 

 

Tip: To improve the performance of value validation on HANA you can enhance your views with additional information:

 

  1. For variables of a view you can specify the View/Table for value help (see screenshot below).
    By providing this table the execution of the view is avoided.

    hana1.png
  2. For dimension values (or a “column”) of a view you can also specify a View/Table for value help (see screenshot below).
    The effect is the same as in 1.
    hana2.jpg

 

Summary

 

At first glance, executing a data source in Design Studio and executing the corresponding view appears to be the same action. This is not true, however. The additional time reported by Design Studio users is spent by calls to HANA to provide multidimensional and analytic features on top of the plain data from HANA.


.

Your First Extension: Part 1 - Project Creation

$
0
0

Currently, there is no project wizard for creating Design Studio extensions.  Likewise, creating projects by hand from scratch is not recommended - due to complexity of configuration.  Yes, it is theoretically possible to create an Eclipse plugin project by hand, that attaches to the Design Studio extension point, but it is an order of magnitude more complex that what we'll be doing here.  The normal, recommended workflow is to start with an existing project, clone it and modify the clone.  In this instalment, we'll create our gauge project, using the clone method.  We will have to do some Eclipse Plugin housekeeping and some Design Studio Extension specific housekeeping in this instalment; but after this, you should be able to develop content.

 

Step 1.1 - Copy/Paste a project (e.g. com.sap.sample.coloredbox) and rename it.  Let's call it "com.sap.sample.scngauge".

 

1.1.png

1.1.2.png

1.1.3.png

 

Mea Culpa:  I spelled gauge incorrectly in that screenshot.  ;-)

 

 

 

 

Step 1.2 - In the new project, open the file  ../res/additional_properties_sheet/additional_properties_sheet.html in the editor and empty it.  At a later time, we'll be creating a new Additional Properties Sheet (APS) page from scratch.

 

 

 

 

Step 1.3 - Open the file ../res/additional_properties_sheet/additional_properties_sheet.js in the editor and empty it.

 

 

 

 

Step 1.4 - You should be staring at an empty additional_properties_sheet.js Before we starting adding anything back to it, let's take a moment to explain the method to the madness.  Behind the scenes, in the SDK framework, there is a Javascript class, called sap.designstudio.sdk.PropertyPage.  This class will contains a function called subclass().  This subclass function is your hook for modifying sap.designstudio.sdk.PropertyPage.  The constructor takes two input variables; a "class name" and an anonymous function.  Behind the scenes, the Design Studio will be monkey patching your code into an instance of the master class, but the dev team decided to try and increase the usability of the SDK and not force you to do it yourself. 

 

 

The "class name" variable can be anything you want.  By convention, the SDK samples follow the convention of using "<ComponentName>PropertyPage", so that's what we'll use here and call our class "com.sap.sample.coloredbox.ColoredBoxPropertyPage", but you are free to call it "Ralph" if that pleases you.

 

 

The anonymous function will be the subject of future discussion, but we'll just leave it "blank" (i.e. function() {} ) for now.  If you don't know what anonymous functions are, here is a good article on the subject.  Tl:dr; "Anonymous" functions are functions that you stick in place of variables; sort of a "here, execute this code" thing.

 

 

The file should look like:

sap.designstudio.sdk.PropertyPage.subclass("com.sap.sample.scngauge.SCNGaugePropertyPage",  function() {

 

});

 

 

 

 

Step 1.5 - Leave the component.css alone for now  ;-)  We'll cover css usage in a later instalment.

 

 

 

 

 

Step 1.6 - Editing the manifest file is part of the Eclipse Plugin housekeeping that you must do.  In the manifest file (../META-INF/MANIFEST.MF), edit ID and Name.

ID =         com.sap.sample.scngauge

Name =  SCN Tutorial Gauge

 

Leave the version alone for now

1.6.png

 

 

 

 

Step 1.7 - Design Studio extensions can include new script commands.  Open the file ../contribution.ztl.  ZTL stands for Zen Template Language (Zen being the original development codename for Design Studio).  This file is where we'll be defining our gauge components BIAL script functions in future instalments.  For now though, we won't be defining any functions, but we'll go over the basics of how it is structured.

 

 

Digression:

Suppose that we have an extension, named com.sap.sample.myextension, that this extension contains a component, called "MyComponent" and that MyComponent has a string property called "something".  Suppose as well, that we'd like a getter function, in BIAL, allowing us to get the value of something in our scripts and that we'll want to call this function getSomething().

 

 

class com.sap.sample.myextension.MyExtension extends Component {

 

 

  /* Comment. */

  String getSomething() {*

  return this.something;

  *}

}

 

 

 

 

The ZTL looks for a Java style class declaration for the component and matches it up with the proper component.

 

 

Comments within this "class" become viewable in the BIAL editor's value help.

 

 

The ZTL parser also searches within the class for function declarations (they have the format <Returntype> <FunctionName()> and monkeypatches the new function into the ZTL library for this component type.

 

 

You might notice the "{* <JavaScript> *}" syntax.  The curly-brace/star combination is the escape sequence for nesting Javascript code into the function.

 

1.7.png

For now, simply declare the "class", but don't add any BIAL functions.

class com.sap.sample.scngauge.SCNGauge extends Component {

 

 

}

 

 

 

 

 

 

Step 1.8 - Right click on ../res/icon.png and select Delete.

1.8.1.png

 

Download the attached file, gauge.png.  Copy it into your ../res folder.  Right click on the project and select Refresh.

1.8.2.png

 

There should now be one file in the ../res folder, gauge.png.

1.8.3.png

 

 

Step 1.9 - We need to add our JavaScript bootstrapping infrastructure.  Design Studio's SDK framework monkey patches the runtime, client-side Javascript code the same way that it does with the additional properties sheet.  The only real difference it that it is sap.designstudio.sdk.Component that will be subclassed this time.  ../res/js/component.js is where we'll be putting our client side Javascript code in.  This file will be the core of any nontrivial extension.  For starters, it should just have a subclass declaration, with a name and an empty anonymous function as parameters.

sap.designstudio.sdk.Component.subclass("com.sap.sample.scngauge.SCNGauge", function() {

 

 

});

 

Before we continue, we want to a small edit to our component.js file.  Itis an acknowledgment that during the usage of this code, the scope may not always consistent.  this may refer to the component, but we can't always be certain.  We do know that this is the component at bootstrap time.  So we add the line "var that = this;".  Now, we can refer to that and know that it is the component, even if this is not anymore.  Our component.js should now look like this:

sap.designstudio.sdk.Component.subclass("com.sap.sample.scngauge.SCNGauge", function() {

 

 

  var that = this;

 

 

});

 

 

 

 

 

 

Step 1.10 - Last, but certainly not least (some of the other steps were prerequisites), we start working on the the extension and component metadata.  To do this, we'll need to edit ../contribution.xml.  You can use the Eclipse XML editor's design mode if you want, but we'll be using the Source tab and hand editing the xml.

 

 

 

Step 1.10a - Define the main, Extension metadata; the attributes of the sdkExtension element.

 

eula= We won't bother with an EULA, as it is outside the scope of this tutorial series..  You can leave this attribute blank, remove it or write whatever you want.

 

 

id= It is very, very, VERY important that the id here matches the ID defined in the MANIFEST.MF file.  You can copy and paste.  If the two Ids don't match, your extension won't work.  Note - If you extension won't load, this attribute (and title, below) should be the first place you check when troubleshooting.

 

 

title= The same issue with ID is also present with title/name.  The title attribute in contribution.xml must be an exact match to the Name property in MANIFEST.MF, or the extension won't load properly.  Again, you can copy and paste.

In contribution.xml, edit id and title

 

 

vendor= and version= can also be copied over from MANIFEST.MF.

 

 

Xml namespace information can simply be left as is.

 

 

 

 

Step 1.10b - Our extension will have a single component, called "SCNGauge".  We will define the metadata for this component as attributes in a component element.

 

databound="false"  Setting this attribute to true, bunds the component to a data source and we don't want to do this just yet.

 

 

group= can be left blank for now.  We'll add a group later.  If no groups have been defined, the component will land in a group called Custom Components.

 

 

handlerType="div"  There are multiple options.

    •   Use "datasource" if the component that you are building is a custom data source.  Since this project is a visual component and not a datasource, we won't use this option.
    •   Use "sapui5" if the component is going to be using the SAP UI5 library.   I'm a big fan of UI5, as it allows you to quickly build complex user interfaces.  In this project, we'll be running a closer to the metal, so we won't be using UI5.  Note - as of 1.5,we only support the commons (desktop) version of UI5 in SDK extensions and not yet m (Mobile).
    •   Use "cvom" if it is a chart that uses the CVOM (Lumira Visualizations). This feature will be available in 1.6.
    •   Use "div" for anything else.  This provides you with a div container in the app and you can do anything you want inside it.  Since we will be building our gauge with the D3 library, we will use div.

 

 

icon="res/gauge.png"  This is the image file that we added in step 1.8.

 

 

id="SCNGauge"

 

 

newInstancePrefix="SCNGAUGE_INSTANCE"  If you don't want the component aliases of your gauges in Design Studio apps to be SCNGAUGE_1, SCNGAUGE_2, etc. and prefer them to be called <somethingelse>_1, <somethingelse>_2, etc., you can define that here.  If you leave this property in, but blank, your component aliases will be _1, _2, etc.  Let's add a value, such as "SCNGAUGE_INSTANCE".  (You can also remove it entirely and its alias will be SCNGAUGE_1, SCNGAUGE_2, etc.)

 

 

propertySheetPath="res/additional_properties_sheet/additional_properties_sheet.html", presuming that is what you called in in step 1.2.

 

 

title="Gauge" This is the title that the designer will see in the pallette.

 

 

tooltip="" You can leave this blank, or write a novel.  If this was anything other than a tutorial, we'd be sure to enter a helpful clause or sentence.

 

 

visible="true"  We certainly don't want our gauge being invisible.

 

 

 

 

 

 

Step 1.10c - Insert an stdInclude element, before the jsInclude element.  This element allows you to tell the DS SDK that it needs to include a standard library.  You don't need to add a stdInclude element for Jquery.  JQuery is always included.  Likewise, if sapui5 is the handler type, the ui5 library is also automatically included.  Note that if you want to use D3, you should include it via stdInclude.  You might be tempted to include it via jsInclude (see 1.9d, below), in order to get the latest and greatest version of D3.  You'd regret doing this, as D3 does not play nice with Require.js.  The D3 copy included in the DS SDK has been modified to play nice with Require.js.

 

 

Javascript was not originally meant to be a normal programming language, but was always intended to be self contained scripting for web pages.  As such, it does not include any include/import mechanism of pulling in libraries on its own and requires the web browser to handle library imports (via the HTML script element).  Require.js brings the classic "include/import", common to most programming languages.

 

 

 

 

Step 1.10d - Leave the jsInclude and cssInclude elements as is.  You will only need to change their values if your JavaScript file is not component.js or your CSS file is not component.css.  If you wish to import another library - that is not part of the DS SDK Framework, then you can add one (or more) additional jsInclude element(s).

 

 

 

 

 

 

Step 1.10e - Remove the property elements.  We'll be adding properties in later instalments, but for now, we'll only use default properties.

 

 

 

 

 

 

Step 1.10f - Look in the initialization element, at its defaultValue child elements.  WIDTH and HEIGHT are default properties, inherited from the master component template.  You can leave them as is, or change their values.  Delete any other defaultValue elements, if there are any.

 

 

 

 

Step 1.10g - If you are in source mode (at the bottom of the editor, the Source tab is selected), your component.xml should now look like the following:

<?xml version="1.0" encoding="UTF-8"?>

<sdkExtension

  eula=""

  id="com.sap.sample.scngauge"

  title="SCN Tutorial Gauge"

  vendor="SAP"

  version="15.1"

  xmlns="http://www.sap.com/bi/zen/sdk"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://www.sap.com/bi/zen/sdkhttp://www.sap.com/bi/zen/sdk ">

  <license>license</license>

  <component

  databound="false"

  group=""

  handlerType="div"

  icon="res/gauge.png"

  id="SCNGauge"

  newInstancePrefix="SCNGAUGE_INSTANCE"

  propertySheetPath="res/additional_properties_sheet/additional_properties_sheet.html"

  title="Gauge"

  tooltip=""

  visible="true">

    <stdInclude kind="d3"/>

    <jsInclude>res/js/component.js</jsInclude>

  <cssInclude>res/css/component.css</cssInclude>

  <initialization>

  <defaultValue property="WIDTH">100</defaultValue>

  <defaultValue property="HEIGHT">100</defaultValue>

  </initialization>

  </component>

</sdkExtension>

 

If you are in design mode, it should look like the following:

1.10.png

 

 

 

Step 1.11 - Now you are ready to test your project.  Right click on the project.  Select Run As -> Eclipse Application.  Design studio should now be launched, so that you can debug the component.

1.11.png

 

 

 

 

Step 1.12 - When Design Studio starts up, create a new application.  Name your app SCNGAUGETEST and click on Finish.  It should be noted here that your normal workspace is not being used, but rather a workspace associated with Eclipse.  This means that you won't be able to see apps that you created when you started Design Studio normally and apps created within debug sessions (i.e. you started Design Studio from Eclipse) won't be visible when you start Design Studio the normal way.

1.12.png

 

 

 

 

Step 1.13 - Look in the Custom Components group of the palette (remember, we did not define a groups or assign the component to any specific groups yet).  Here you will find a green arc, with the label Gauge.

1.13.png

 

 

 

Step 1.14 - Drag the new Gauge component into the canvass and have a look at it in the properties sheet.  Here you should see all of the default properties that your component has (and that most of the default properties are bindable).

1.14.png

 

 

 

 

 

 

 

 

 

 

 

 

Step 1.15 - Run the app.  Your component won't be visible, as it is just an empty div, but it should be error free.  Now your are ready to start filling in the blanks and building an actual component.

CSS Tips & Tricks: Customizing Radio Buttons and Check Boxes in SAP BusinessObjects Design Studio – Part 1

$
0
0

Have you ever wondered why Cascading Style Sheets (CSS) when applied to SAP BusinessObjects Design Studio have no effect on Radio Buttons and Check Boxes? Read this blog to know why and how you can customize these components in SAP BusinessObjects Design Studio.

 

How Radio Buttons & Check boxes are styled

In SAP BusinessObjects Design Studio, Cascading Style Sheets (CSS) can be used to change the colors, look and appeal of any components with ease. However, this option is not always viable for a few select components such as the Radio Button Group, Check Box and the Check Box group.

 

SAP BusinessObjects Design Studio uses images for these components in order to appear as selected or unselected. Therefore, any kind of CSS customization to these components would involve modifying/changing the default images used by SAP BusinessObjects Design Studio.

 

The images used by each of these components vary according to the theme used by the SAP BusinessObjects Design Studio application.  For instance, the images used by a radio button when in the “platinum” theme, will be different from the images used by the radio button when in the “Mobile” theme.

 

Tip: To see which theme your application is in, look for the “Theme” property under the application properties.

 

Theme used by your SAP BusinessObjects Design Studio application

 

What you need to know before you continue reading

In the remainder of this blog, I will explain how to customize Radio button groups, Check Box and Check Box group by altering images used by these components using CSS.

In order to do this, there are a few pre-requisites to be met:

  • Basic CSS knowledge
  • Access to and basic knowledge of Image Editing tools (such as Adobe Photoshop, online editing websites like lunapic.com if you merely want to change the colors in images)

 

Identifying the images used by the components

To identify the styling of the Radio Button component in your application, follow the step-by-step procedure below:

It is important to note that all the steps through to step 4 are common regardless of the component you are using.

1. Insert the “Radio Button Group” component in your SAP BusinessObjects Design Studio. Now we will have to identify the classes and images used by the Radio Button Group.

Add “Radio Button Group” in SAP BusinessObjects Design Studio

 

2. Change the theme of your SAP BusinessObjects Design Studio application as required. In my example, I am using the “Mobile” theme. To change your theme, follow the steps below:

  • Click on application name in the OUTLINE pane
  • Navigate to “Theme” in Properties pane
  • Change the theme to whichever theme you would like to work on.

Changing theme in SAP BusinessObjects Design Studio

 

3. Execute the Application locally (CTRL + F11 inside SAP BusinessObjects Design Studio) using Internet Explorer. Once the application is executed, Press F12 to open the Developer Tools.

The advantages of using Internet Explorer in this case are

  • IE’s Developer Tools allows users to easily explore the required CSS Class
  • IE stored temporary caches of the images on a web page – It becomes extremely easy for users to locate the required images for the Radio Button Groups and Check Boxes.

 

Now that you have the Developer Tools pane open, follow the steps given below :

     a) Click on the “Select Element” option (CTRL + B) to choose the required item in component

     b) Click on any of the options on the Radio button to highlight it

     c) Identify the class name for the Radio Button in the DEVELOPER Panel

     d) Note down the Class name and the image name used in the CSS. In this case, the image name is “iPad_radiobutton_selected”.

 

Developer Tools in Internet Explorer

 

4. As mentioned earlier, IE caches images that it views on pages inside the Temporary Internet Files folder (which is a hidden folder). To make this folder visible, Go to “Computer” and Click Tools – > Folder Options -> View Tab (available in the window appear on click of Folder Options) and change to “Show hidden files, folders and drives” and click OK.

Folder Options Window

 

The above identified image file will be available as a Temporary file in the following location:

C:\Users\<Your Windows Username>\AppData\Local\Microsoft\Windows\


5. In the Search Box (highlighted below), search for the image name that you have noted down.

Search for Image

 

Locate the image name we were looking for in the example “iPad_radiobutton_selected” and copy the image file to another convenient location such as your desktop or to a specified folder. This image can be changed per your requirements using one of the Image editing tools.

 

Result of Search for Image

 

We have now discussed about navigating and finding that radio button image to customize the image as required using Image editing tools.  In Part II of this blog, I will explain about how CSS works in these components in SAP BusinessObjects Design Studio and how to customize these images on the components in SAP BusinessObjects Design Studio.

 

Meanwhile, have your image customized and ready!

CSS Tips & Tricks: Customizing Radio Buttons and Check Boxes in SAP BusinessObjects Design Studio – Part 2

$
0
0

In my previous blog, we discussed how Radio buttons and Check boxes are styled in SAP BusinessObjects Design Studio and how to identify the images used by these components in SAP BusinessObjects Design Studio.

In this blog, we will see how CSS works for these components in SAP BusinessObjects Design Studio. We will also learn how to customize the color of these images and how to use these custom images in the components.

 

Understanding how CSS works in these components

 

SAP BusinessObjects Design Studio uses different images to differentiate and display the Check box / Radio Button selection. When a user selects an option in the check box or the radio button, the image used by the component changes to the image corresponding to the selected option. Depending on the theme used for your application, either the image will be replaced by another or the position of the image will be changed.

 

1. On themes such as Platinum, Gold Reflection or Blue Crystal, a single image is used and based on the user selection; the background-position property is used to move this image around to indicate selection & deselection – similar to CSS image Sprites.

Radio button sprite image used for Platinum themeRadio button sprite image used for Platinum theme

 

 

2. On themes such as Mobile & Mobile Black, two separate images are used, one of which is to indicate ‘selected’ and another is to indicate ‘deselected’. In this case, the image itself will be changed based on the user selection.

 

Selected Radio button image in Mobile themeSelected Radio button image in Mobile theme

 

 

Deselected Radio button image in Mobile themeDeselected Radio button image in Mobile theme

 

 

In the Mobile theme, when a Radio Button is disabled, the opacity of image used is reduced by 50% in CSS.

 

Refer to Table 1 for the components which use a single image sprite to denote selected/unselected states on the components.

Note: CSS Class name may varies between DS 1.4 and DS 1.5 for some themes.

 

Design Studio

(DS 1.4 / DS 1.5)

THEMECOMPONENTIMAGE NAME
CLASS NAME

DS 1.4 & DS 1.5

 

Platinum

Radio-Button groupRadio.png.sapUiRb > label
Check-box / Check Box GroupCheckbox.png.sapUiCb> label

 

DS 1.4

 

Gold Reflection

Radio-button groupRadiobutton.png.sapUiRb > label
Check-box / Check- Box GroupCheckbox.png.sapUiCb> label

 

DS 1.4 & DS 1.5

 

Blue Crystal

Radio-button groupRadiobutton.png.sapUiRb > label
Check-box / Check- Box GroupCheckbox.png.sapUiCb> label

Table 1: Image and CSS Class for components using Single image

 

 

Refer to Table 2 for the components which use two images and their corresponding CSS Class names.

Design Studio (DS1.4 / DS1.5THEMECOMPONENTSTATEIMAGE NAMECLASS NAME

 

 

DS 1.4

 

 

Mobile Black

Radio-button GroupSelectedRadiobutton_sel.png.sapUiRbSel> label
UnselectedRadiobutton.png.sapUiRb > label
Check-box / Check-Box GroupSelectedCheckbox_chk.png.sapUiCbChk> label
UnselectedCheckbox.png.sapUiCb> label

 

DS 1.4 &

DS 1.5

 

 

Mobile

Radio-button Group

SelectediPad_Radiobutton_selected.png.sapUiRbSel.sapUiRb > label
UnselectediPad_Radiobutton.png.sapUiRb > label
Check-box / Check-Box GroupSelectediPad_Checkbox_selected. png.sapUiCbChk.sapUiCb> label
UnselectediPad_Checkbox.png.sapUiCb> label

Table 2: Image name and CSS Class names for components using two separate images

 

 

Note: High Contrast black theme uses no image, so the above procedure does not apply for Radio button and Check box components on this theme.

 

Customizing the color of the images and using them in the components

 

1. Edit the Images as per your requirements

Use image editing tools of your choice or the websites mentioned in the previous blog to edit the colour of these images as per your requirements. There are a couple of points that you need to look out for:

  • Make sure that the image transparency is not affected – Backgrounds that are transparent may tend to fill in black or white automatically on certain image editors or file formats.
  • Make sure that the dimensions of the images are un-altered after editing.

 

2. Convert the image to URI

Once you have the images edited, the next step would be to convert them to a URI so that you can reference them within a custom CSS file.

Use Online image URI Converters like http://websemantics.co.uk/online_tools/image_to_data_uri_convertor/ to convert your edited images to URIs.

 

  • Click Browse to choose the image which needs to be converted
  • Once the image is chosen, click convert image to convert the image to URI

Online URI ConverterOnline URI Converter

 

  • Copy the content of “As raw data” section. It contains the URI of your converted image.

URI of the Image converted

URI of Image converted

 

You can also refer to this blog to learn how effectively URIs can be used.

 

3. Custom CSS File

Now that we have the edited images converted to URIs, our objective is to override the default images used by these components (in this case, the Radio Button Group). To ensure that the components now use the modified images, we assign the respective image URIs within the CSS classes used by these components in a custom CSS file and upload it to SAP BusinessObjects Design Studio.

 

Since, in our example, I have used the “Mobile” theme, I will only need to modify the following CSS Class with our custom images:

 

.sapUiRb > label
{
Background-image: url (< Insert deselected indication Image URI here >);
}
.sapUiRbSel.sapUiRb > label
{
Background-image: url (< Insert selected indication Image URI here >);
}


In my application, I have tried to change the blue Radio Button to red. I inserted the respective Image URIs for deselection and selection indication in the above CSS code. For your reference, I have also shared the CSS file that I have used: Click here to download the CSS file. After uploading this custom CSS file to my SAP BusinessObjects Design Studio application, the customized radio button appeared as in the figure below.

 

Customized Radio Button by CSS

Customized Radio Button by CSS

 

Please note that when you use a theme with single image, you may have to modify just one class to ensure that the component’s styling changes. Refer to Tables 1 and 2 for CSS classes.

 

The general structure of the CSS files is as shown below:

 

a. Format of CSS file if components use one image

Format of CSS if Components using one image

 

b. Format of  CSS file if the components use two images

Format of CSS if Components using two images

 

To learn how to modify a component using CSS, you can refer to this link – http://scn.sap.com/docs/DOC-41398.

 

Once the CSS file is uploaded, the components will be modified as per the CSS with the modified image and we are done!

Have fun customizing these markers in SAP BusinessObjects Design Studio.!!!

Viewing all 662 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>