Technology Blogs by Members
Explore a vibrant mix of technical expertise, industry insights, and tech buzz in member blogs covering SAP products, technology, and events. Get in the mix!
cancel
Showing results for 
Search instead for 
Did you mean: 
kohesco
Active Contributor
SAP BusinessObjects Design Studio 1.6 on SAP Netweaver Portal.  In the roadmap of SAP we learn that the way to go is to embed your Design Studio app's to the SAP BusinessObjects BI Platform.  But this is not for all companies directly applicable.  For those who the SAP Netweaver Portal is the only platform available, I hope this blog is helpful.

  • SAP BusinessObjects Design Studio app contains:

    • 68 Tiles

    • 43 Bex-queries are loaded into the app

    • first page opens in 10 seconds

    • the whole app loads in less than 60 seconds







  1. System & versions



    • SAP Netweaver 7.4

    • SAP BW 7.4 SP 15

    • SAP BusinessObjects Design Studio 1.6


    • When upgrading to SP4, Basic layout will also not be available for SAP Hana and the ready to run templates (Data Discovery - Generic Analysis and Online Composition, will not be available on SAP Netweaver)




  2. Configuration





  3. Embedding Design Studio app's on the SAP Netweaver portal



    • Portal Content > ABAP Roles >select or create role > add Iview from template > Design Studio > save > open wizard > add parameter: APPLICATION="name of your DS app"




  4. Setup of Reporting environment




    1. Design Studio as replacement of the Web Application Template

      This would be the most ideal solution, to change swiftly all the reports to a neat Design Studio interface.  But this is sadly not supported by SAP now and in the future.  SAP is heading only for improvements on the SAP Business Objects BI Platform and will not improve the SAP Netweaver Portal.


    2. Design Studio app's per Bex Query

      This solution I would recommend not to use.  As it has a high work rate to save manually each Bex Query in a Design Studio app.  Even if you reuse each time the same app.  Modifications on the reused app will be needed on each item saved on the platform.


    3. One App meets all

      The Netweaver Portal embeds one Design studio app as a portal interface.  Via that app you 'll retrieve instantly information and you will be able to jump to all bex queries related to it.  In this case you'll only have to maintain 1 app.




  5. One App meets all - explained step by step


    The interface  is build from scratch in the SAP BusinessObjects Design Studio application.  The goal of the interface is to give you a clear overview of your facts & figures of your business.  In the "Welcome (Welkom)" page we will show KPI from different subdomains all together in one view, those are the most used and most important facts the business want to know.  "Aanvragen"/"Regularisatie"/etcetera show all the facts & figures per subdomain.  Each tile represents thus a KPI.  In the headings of the tile we see the Bex Query name belonging to the KPI.  On mouse click on the tile we jump to a generic analysis template app that visualizes the go-to- Bex Query.  In the new window showing our BEX-Query we are able to jump via RRI to the same app including the jump-to BEX Query.


 

BUILDING IT


 


  1. CREATION of Main design studio app



    • Start creation from a standard app

    • HEADER / BODY /FOOTER

    • Header you define textcomponents as text

    • BODY contains a pagebook filled with the tiles


    • The tiles are panels containing Text & Icon components.


    • The tiles are via a CSS class Hoover enabled.  Name your css class ("myBackground" and add hover effect)


    • .myBackground:hover{
      box-shadow: 4px 4px 8px black;
      margin-left: 2px;
      margin-right: 2px;
      margin-top: 2px;
      margin-bottom: 2px;
      }


    • Allthough there are a lot of tiles, the performance is acceptable when you set the pagebook cache to all, it improves the user friendliness as well

    • Each panel contains the jump to the respect. query.

    • Code:TO_REPORT.Jump(TEXT_POOL.R_0_1);

    • Create global code


    • global script XURL to retrieve the server-url

      ID = Bookmark.saveBookmark("URL");


      index = Bookmark.getBookmarkUrl(ID).indexOf("/irj/");


      url = Bookmark.getBookmarkUrl(ID).substring(0,index);


      global script

    • XURL = url + "/irj/servlet/prt/portal/prtroot/com.sap.ip.bi.designstudio.nw.portal.ds?APPLICATION=";

    • global variables

    • XTEMPLATE (designstudio app used as adhocanalysis )& XQUERY=&XQUERY




  2. CREATION of Query app


    Query app uses the Generic Analysis template.  You'll have to add this app to your SAP Netweaver Portal as well.  See chapter 3:"Embedding Design Studio app's on the SAP Netweaver portal".  The jump explained in previous chapter (5.1) will push through the variables: XSystem and XQuery.  The generic analysis template fetches those values and will open the specified query in the Design Studio App, because you will force it  by adding the XTEMPLATE parameter.


    url = XURL + XTEMPLATE + XQUERY + REPORT;

    http://<server>/irj/servlet/prt/portal/prtroot/com.sap.ip.bi.designstudio.nw.portal.ds?APPLICATION=P...

    XURL --> <server> & /irj/servlet/prt/portal/prtroot/com.sap.ip.bi.designstudio.nw.portal.ds?APPLICATION=

    XTEMPLATE --> PORTALTEMPLATE

    XQUERY --> &XQUERY=

    REPORT --> Z_TECH_NAME_BEXQUERY


     


  3. CREATION of Jump to app (optional)


    Is 100% the same as the design of the query app.  But if you really want you can use another template.  It could be handy to force the prompts to pop up of the Query app, so business can (re)define the query.   It's another behavior as when you jump from a line in the query to another query, more detailed and passing through the parameters of that line.  Sao that's a choice up to you.


  4. Pushing values through




in the main "Launchpad" design studio app we use a textpool to lineup all my tiles as KEY and add the corresponding technical name of the query behind the tile as TEXT.  As stated before each tile is showing data from one query.


  • By using the text pool we create our own metadata - by overviewwing this pool - we know which query is behind which tile (documentation)



use the global variables to define:



we create a script function:
url = XURL + XTEMPLATE + XQUERY + REPORT;
APPLICATION.openNewWindow(url);

each tile has a script as event like:
var url_p = TEXT_POOL.KLW_0_1;
url_p = url_p + "&XAANTDBUITTERM=15" + "&XDATVER_REG="+"<"+start_nu_maand;
TO_REPORT.Jump(url_p);

the var url_p fetch the textpool-text via the key so we know the bex-query techn name

we concat the URL with the parameters we want to push through.  When the whole URL is established we user our script function to launch the jump to report.

 

Allright the Jump is created now the target report need to catch the parameters as well.

We used the Generic Analysis template as our jump_to_report.  You'll need to set each parameter/bexquery prompt variable as a global variable.



In the Global scripts Object: START_FUNCTION-on_initialization you'll need to translate the design studio app parameter into the bex variable tech name.



it's quite tricky to push values through when it's envolving dynamical date variables, to tackle that I created a few global variables which I calculate on startup:

ONSTARTUP

sy_date = APPLICATION.getInfo().dateNowInternalFormat;

current_year = sy_date.substring(0,4);

previous_year = Convert.floatToString(Convert.stringToInt(current_year) - 1,"####");

current_month = sy_date.substring(4,6);

if (current_month.substring(0,1)=="0"){ current_month = current_month.substring(1,2);}

current_day = sy_date.substring(6,8);

if (current_day.substring(0,1)=="0"){ current_day = current_day.substring(1,2);}

sy_date = current_day+"-"+current_month+"-"+current_year;

firstday_current_year = "1-"+"1-"+current_year;

firstday_current_month = "1-"+ current_month +"-"+ current_year;

if (current_month == "1"){

lastday_current_month = "31-1-"+current_year;

firstday_previous_month = "1-12-"+previous_year;

lastday_previous_month = "31-12-"+previous_year;

previous_month = "12."+previous_year;

previous_month_key = previous_year+"12";

previous_previous_month = "11."+previous_year;

previous_previous_lastday_month = "30-11-"+previous_year;}

else if (current_month == "2"){

lastday_current_month = "28-2-"+current_year;

firstday_previous_month = "1-1-"+current_year;

lastday_previous_month = "31-1-"+current_year;

previous_month = "01."+current_year;

previous_month_key = current_year+"01";

previous_previous_month = "12."+previous_year;

previous_previous_lastday_month = "31-12-"+previous_year;}

else if (current_month == "3"){

lastday_current_month = "31-3-"+current_year;

firstday_previous_month = "1-2-"+current_year;

lastday_previous_month = "28-2-"+current_year;

previous_month = "02."+current_year;

previous_month_key = current_year+"02";

previous_previous_month = "01."+current_year;

previous_previous_lastday_month = "31-1-"+current_year;}

else if (current_month == "4"){

lastday_current_month = "30-4-"+current_year;

firstday_previous_month = "1-3-"+current_year;

lastday_previous_month = "31-3-"+current_year;

previous_month = "03."+current_year;

previous_month_key = current_year+"03";

previous_previous_month = "02."+current_year;

previous_previous_lastday_month = "28-2-"+current_year;}

else if (current_month == "5"){

lastday_current_month = "31-5-"+current_year;

firstday_previous_month = "1-4-"+current_year;

lastday_previous_month = "30-4-"+current_year;

previous_month = "04."+current_year;

previous_month_key = current_year+"04";

previous_previous_month = "03."+current_year;

previous_previous_lastday_month = "31-3-"+current_year;}

else if (current_month == "6"){

lastday_current_month = "30-6-"+current_year;

firstday_previous_month = "1-5-"+current_year;

lastday_previous_month = "31-5-"+current_year;

previous_month = "05."+current_year;

previous_month_key = current_year+"05";

previous_previous_month = "04."+current_year;

previous_previous_lastday_month = "30-4-"+current_year;}

else if (current_month == "7"){

lastday_current_month = "31-7-"+current_year;

firstday_previous_month = "1-6-"+current_year;

lastday_previous_month = "30-6-"+current_year;

previous_month = "06."+current_year;

previous_month_key = current_year+"06";

previous_previous_month = "05."+current_year;

previous_previous_lastday_month = "31-5-"+current_year;}

else if (current_month == "8"){

lastday_current_month = "31-8-"+current_year;

firstday_previous_month = "1-7-"+current_year;

lastday_previous_month = "31-7-"+current_year;

previous_month = "07."+current_year;

previous_month_key = current_year+"07";

previous_previous_month = "06."+current_year;

previous_previous_lastday_month = "30-6-"+current_year;}

else if (current_month == "9"){

lastday_current_month = "30-9-"+current_year;

firstday_previous_month = "1-8-"+current_year;

lastday_previous_month = "31-8-"+current_year;

previous_month = "08."+current_year;

previous_month_key = current_year+"08";

previous_previous_month = "07."+current_year;

previous_previous_lastday_month = "31-7-"+current_year;}

else if (current_month == "10"){

lastday_current_month = "31-10-"+current_year;

firstday_previous_month = "1-9-"+current_year;

lastday_previous_month = "30-9-"+current_year;

previous_month = "09."+current_year;

previous_month_key = current_year+"09";

previous_previous_month = "08."+current_year;

previous_previous_lastday_month = "31-8-"+current_year;}

else if (current_month == "11"){

lastday_current_month = "30-11-"+current_year;

firstday_previous_month = "1-10-"+current_year;

lastday_previous_month = "31-10-"+current_year;

previous_month = "10."+current_year;

previous_month_key = current_year+"10";

previous_previous_month = "09."+current_year;

previous_previous_lastday_month = "30-9-"+current_year;}

else {

lastday_current_month = "31-12-"+current_year;

firstday_previous_month = "1-11-"+current_year;

lastday_previous_month = "30-11-"+current_year;

previous_month = "11."+current_year;

previous_month_key = current_year+"11";

previous_previous_month = "10."+current_year;

previous_previous_lastday_month = "31-10-"+current_year;}

 

TO_REPORT.Get_URL();

APPLICATION.doBackgroundProcessing();
 
8 Comments
Labels in this area