Skip to Content
0

See Dashboard without login pop up

May 22, 2017 at 12:20 PM

283

avatar image

Hi,

I've created 2 design studio applications to utilize the bookmark (portable) fragments and allow users to create their own dashboard. (and the associated URL)

These dashboard will be shown on a TV screen (managed by a zebrix NUC using the URL).

A url looks like this

http://serveradres:8080/BOE/OpenDocument/opendoc/openDocument.jsp?sIDType=CUID&iDocID=AXJ0.4HcQptOu5er0As0d1I&XBOOKMARK=AarvwqBxtOxFprTdkk6VWrU

When we try to acces this link , we get a pop up from the BI platform to login (with no authorization type selection possibility (SAP,windows AD,...).

Our authorization is pushed from SAP. So I've created a "zebrixuser" on the BIP platform and added an alias (my user for test purpose). Now login with the zebrixuser works and we see the relevant data.

Since the Zebrix NUC will be making connections I would like to know what are the possibilities so we do not have to login manually.

I've seen the creation of Tokens in the user manual and on this forum but I have the idea these tokens are created when a login on the system has already been successful?

Can we skip this login on the BIP ?

Thanks in advance

Kind regards

Bram

10 |10000 characters needed characters left characters exceeded
* Please Login or Register to Answer, Follow or Comment.

4 Answers

Best Answer
Mustafa Bensan May 23, 2017 at 02:24 AM
0

Hi Bram,

You can indeed bypass the login prompt by placing the appropriate code in the BusinessObjects BIP custom.jsp file. You are certainly on the right track with your question "I've seen the creation of Tokens in the user manual and on this forum but I have the idea these tokens are created when a login on the system has already been successful?". Technically, a successful login is required to create a token but for the login bypass the standard approach is to hard-code the credentials in the custom.jsp file as follows:

1. Create a logon session with hard-coded credentials using the Session Manager API. You would apply your "zebrixuser" ID and password here;

2. Reference the logon session to create a token using the Token Manager API;

3. Append the token to the OpenDoc URL you have specified above and redirect to that URL.

The standard URL that would be called from Zebrix would be as follows:

http://serveraddress:8080/BOE/BI/custom.jsp

This URL will launch your Design Studio application without displaying a logon prompt. Now I assume that Zebrix embeds web page content into its own "viewer" and as such does not expose the actual URL to the end user, so this minimises the security risk in that anyone in your organisation that has access to your intranet and knows or guesses the standardised generic URL could potentially display the dashboard. Assuming again that Zebrix does not display the URL to the end user, you could mitigate any security risk further by including one or more "key code" parameters in the URL that cannot easily be guessed, such as:

 http://serveraddress:8080/BOE/BI/custom.jsp?KeyCode1=HEF#aed32&KeyCode2=kl*45#@!

for example and then check for these values in your custom.jsp logic before launching the dashboard.

Let me know if this approach meets your requirements, in which case I can walk you through the technical details for implementation.

Regards,

Mustafa.

Show 7 Share
10 |10000 characters needed characters left characters exceeded

Dear Mustafa,

Thank you very much for the clear and fast reply.

I will test this (it will take some time because I need infrastructure to add the custom.jsp and I will provide an anwser if it worked or not.

Kind regards

Bram

1

Hi Bram,

Happy to help. If you need a code sample for the custom.jsp file feel free to let me know.

Regards,

Mustafa.

0

Hi,

As explained we succesfully implemented the custom.jsp but now i need to create the url (to share) my self.

I've been able to get the bookmark part (you refere to as keycode 2 )

http://serveraddress:8080/BOE/BI/custom.jsp?KeyCode1=HEF#aed32&KeyCode2=kl*45#@!

But i still need the Application part :

my example :

http://myserver/custom.jsp?docId=AbZIE_hZqnVJpmJprifZ8JQ&bookmarkId=ARMrwFqVlYZAqB1O68Slthc

i do find back the bookmarkId using Bookmark.FragmentBookmark.getBookmarkUrl but I'm missing the application part : docId=AbZIE_hZqnVJpmJprifZ8JQ.

Is there any function i can use to get the doc Id?

Thanks in advance

Kind regards

Bram

0

Hi Bram,

Bookmark.FragmentBookmark.getBookmarkUrl() definitely returns both the DocID for the application as well as the BOOKMARK ID as shown in the real example below:

http://serveraddress:8080/BOE/OpenDocument/opendoc/openDocument.jsp?sIDType=CUID&iDocID=Ae.e8plZ1RpGtFlPIZxtv08&BOOKMARK=ATvv9G0nMTRLih5wE.qn4RI<br>

I suspect the reason why you are not seeing the DocID is because you are testing in local mode, in which case there is no DocID. You need to develop and test directly on the BI Platform to retrieve the correct bookmark URL with DocID.

One other point, in order to call Bookmark.FragmentBookmark.getBookmarkUrl() you need BookmarkID as a parameter and therefore will already have this value, so you only need to parse the DocID from the URL.

Regards,

Mustafa.

0

Mustafa,

Is there a function .getDocId or something avialable? --> DocID ?? says otherwise..

or what's the best way to get the DocId into a parameter?

The url contains the DocID but i'm not that familiar with string functions available in the scriptlanguage of desing studio.

Thanks in advance.

Kind regards

Bram

0

Hi Bram,

You can define a Global Script Function as follows to return the value of any parameter in a URL:

var paramStart = pURL.indexOf(pURLParam);

if (paramStart == -1) {
	
	return ""; // return null if parameter not found
}

var paramValueStart = paramStart + pURLParam.length + 1;
var paramValueEnd = pURL.indexOf("&", paramValueStart);

if (paramValueEnd == -1) {
	
	paramValueEnd = pURL.length + 1;
	
}

var paramValue = pURL.substring(paramValueStart, paramValueEnd);

return paramValue;

To retrieve the DocID you would simply execute the following code:

var myBookmarkURL = Bookmark.PortableFragmentBookmark.getBookmarkUrl(<bookmarkID>);
var myDocID = GLOBAL_SCRIPTS.getURLParameter(myBookmarkURL, "iDocID");

Regards,

Mustafa.

url-function.png (172.5 kB)
url-function.png (178.4 kB)
0

I've managed to do this with a couple repetitions of Split in variables.

It's a long workaround but it's working.

Kind regards

Bram

0
Tammy Powlas
May 22, 2017 at 04:25 PM
0

One option, assuming you are already logged into the platform, is mentioned here: https://archive.sap.com/discussions/thread/3917813 - set the timeout session.

Share
10 |10000 characters needed characters left characters exceeded
Bram Van den Brande May 24, 2017 at 11:04 AM
0

Dear Mustafa,

Thank you for you clear and fast response. What you propose is actually what I need to implement so please feel free to share the technical details.

I'm just wondering about 1 thing: . Append the token to the OpenDoc URL you have specified above and redirect to that URL.

Since the goals of using the portable fragment is to let the user create dashboards (URL) they will also be the once placing the URL on the Zebrix. As I understand your solution, we will need to add every URL to the Custom.jsp to be able create a token? Hence missing the flexibility we would like to provide using the portable Fragments?

Thanks for your feedback.

Kind regards

Bram

Show 6 Share
10 |10000 characters needed characters left characters exceeded

Hi Bram,

We can most probably come up with a flexible generic solution whereby the Design Studio ApplicationID and BookmarkID can be specified as URL parameters when Zebrix calls the custom.jsp, thereby avoiding the need to explicitly hard-code each bookmark URL in the custom.jsp. For your Zebrix scenario, will there be only one Design Studio "producer" application for the bookmarks or potentially multiple applications?

Regards,

Mustafa.

0

Hi Mustafa,

As for now there is only 1 composition application and I think this will remain like this. I do believe there will be multiple "analysis" applications but that is a bookmark identification exercise which is not my main concern.

Kind regards

Bram

0

Hi Bram,

Okay, I think we can even cater for the scenario of multiple "analysis" applications. To make this easy for users to copy to Zebrix, the analysis applications would need to dynamically compose a URL in the required parameterised format based on the selected portable fragment bookmark and display this in a dialogue so that users could simply cut and paste into Zebrix without any further effort. This should be relatively straightforward to achieve.

Regards,

Mustafa.

0

Hi Mustafa,

For now we've implemented a .jsp that allows to bypas the login based on 1 URL (Testcase).

How do you say we can facilitate that we allow multiple URL's to be reachable by the Zebrix without hard coding the URL's in the .jsp. (users will add and delete lots of URL's in short periods of time).

Thanks in advance

Kind regards

Bram

0

Hi Bram,

You can cater for multiple application URL's using URL query parameters for your jsp that represent the Analysis Application Document ID and Bookmark ID. At the moment, I assume your test case URL is composed with a hard-coded document ID, something like this:

String appURL = "https://<server domain>/BOE/OpenDocument/opendoc/openDocument.jsp?token=" + tokenEncode + "&iDocID=AXJ0.4HcQptOu5er0As0d1I&XBOOKMARK=AarvwqBxtOxFprTdkk6VWrU&sIDType=CUID&noDetailsPanel=true";

You could replace this with something like:

String docID = request.getParameter("docID");
String bookmarkID = request.getParameter("bookmarkID");

String appURL = "https://<serveraddress>/BOE/OpenDocument/opendoc/openDocument.jsp?token=" + tokenEncode + "&iDocID=" + docID + "&XBOOKMARK=" + bookmarkID + "&sIDType=CUID&noDetailsPanel=true"; 

When specifying the URL in Zebrix, it would look something like this:

http://<serveraddress>:8080/BOE/BI/custom.jsp?docID=AXJ0.4HcQptOu5er0As0d1I&bookmarkID=AarvwqBxtOxFprTdkk6VWrU

I suggest that you create a popup in the Analysis Application that pre-composes and displays the URL string for the custom.jsp so that the users can simply cut and paste into Zebrix directly. You can compose the URL string by parsing the DocID and BookmarkID from the URL returned by getBookmarkURL().

Let me know if you need any further clarification.

Regards,

Mustafa.

1

Hi Mustafa,

We've succeeded in creating an custom.jsp that allows us to call different dashboard with the Zebrix using parameters in the link.

Thank you very much for your inpu

0
Bram Van den Brande Jun 27, 2017 at 08:34 AM
0

Hi Mustafa,

We've succeeded in creating an custom.jsp that allows us to call different dashboard with the Zebrix using parameters in the link.

Thank you very much for your input.

Another issue arrises now that has been discussed on this forum in this post :

https://archive.sap.com/discussions/thread/3789080

What I would like to know if you think it is possible to implement a timer in dashboards that are created using the composition application.

After 30 minutes we have connection loss from the Zebrix nuc (as is mentioned in other posts) . I've tried your demo to test the timer and reload and it seems to be working. Im' just wondering how we can implement this reload of data in dashboards created using fragments..

Is this possible? Where exactly (what objects) would I implement the timer?

Thanks in avance

Kind regards

Bram

Show 4 Share
10 |10000 characters needed characters left characters exceeded

Hi Bram,

When you refer to "dashboards that are created using the composition application", do you mean users are creating dashboards by dragging and dropping portable fragments onto a Split Cell Container? If this is the case, you could try the following approach:

1) Add a Timer component to the host application that has the Split Cell Container;

2) In the "On Timer" event of the Timer, apply the following script code:

var myDataSources = SPLITCELLCONTAINER.getDataSources();

myDataSources.forEach(function(dataSource, index) {
  dataSource.reloadData();
});

If the purpose of the reload is simply to keep the session active and you don't need to refresh each fragment's data source, then you could simply just refresh the first data source as follows:

var myDataSources = SPLITCELLCONTAINER.getDataSources();
var firstDataSource = myDataSources[0];

firstDataSource.reloadData();

Regards,

Mustafa.

2

Hi Mustafa,

I've implemented your proposal into the composition dashboard (application with splitcell containers where fragments are dropped and where an application is saved (using above implmentation of custom.jsp file.) with no succes. The application did not refresh.

I have implemented your code on the timer event which has an interval of 1500000.

this is the only code that has been adde d:

var myDataSources = SPLITCELLCONTAINER_1.getDataSources();
var firstDataSource = myDataSources[0];
firstDataSource.reloadData();

Do i need any other code ? Timer start? reset? or anything else?

Thansk in advance

Kind regards

Bram

0

Hi Bram,

Sorry, I should have mentioned that you need to execute the TIMER.start() method in the application "On Startup" event to initiate the Timer.

Regards,

Mustafa.

0

Hi Mustafa,

I've added the timer start but still aftere 30 minutes, we lose connection with the Zebrix.

Any other idea how to work around this .

Btw, should i make a new post to addres this specifi issue. Time out in Composition application?

Thanks in advance

0