Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 
Former Member

Since its implementation with BI 4.0, Business Intelligence Support has been heavily relying on the End to End tracing to work, analyse and solve identified problematic workflows with customers.

However, this great functionality has a scope of usage that does not extend as much as we would like: when using Chrome or Firefox, or for workflows relying on Client Tools leveraging BI Web Services such as Live Office, Dashboards, Query as a Web Service, or add-ons such as Design Studio and Lumira, the SAP Client Plugin cannot be used to generate an End-To-End trace (Commonly named E2E).

But what if I told you that there is actually a way to replicate what the Client Plug-In does to extend that functionality for the scenarios mentioned above?

SAP Client Plugin use and limitations

The SAP Client Plug-In is normally used to "Launch" Internet Explorer, and provides a "Start Transaction" button, which, when triggered with the level of tracing you apply (generally High), enables tracing for the workflow in all the BI platform, from Tomcat or other J2EE server to the back-end processing servers, allowing to capture the entire workflow and only that workflow on the whole chain of processes involved, allowing for a targeted analysis of the issue where possible.

But as discussed in the introduction, in scenarios that could potentially make use of E2E, such as issues while executing Query As a Web Service (QaaWS), Live Office, or Dashboards when they leverage Web Services, as the SAP Client Plugin E2E only works with Internet Explorer (IE), the procedure falls short for these scenarios. By extension, the limitation also impacts web browsers the SAP Client Plugin does not support, such as Firefox and Chrome.

Pre-requisites

Before starting, the following tools and concepts need to be acquired

Tools

End to End SAP Client Plugin

VersionPlug-In downloadSAP Note
Internet Explorer 8, 9, 10SAPClientPlugin_1.26_x86.zipSAP Note 1435190
Internet Explorer 11SAPClientPlugin.rarSAP Note 1608231

Fiddler & the "Fiddler script editor" add-on

Download Fiddler Web Debugging Tool for Free by Telerik

FiddlerScript Editor

Concepts

The following documentation provides an explanation of End-to-End tracing mechanisms but implies existing knowledge of its general use. If you are not already familiar with End-to-End tracing usage and logs collection in BI, please refer to the excellent KBA and Wiki written on the matter:

https://launchpad.support.sap.com/#/notes/1861180

How to generate and consume an E2E trace with BI4.x (for non-SolMan landscapes)

It is also recommended to have previous knowledge and understanding of the mechanisms of HTTP tracing tools, in this case Fiddler. See this youtube video for Fiddler if you haven't come across it

Getting started with Fiddler Web Debugging Proxy

Getting started

First of all, we need to understand how End-To-End tracing (E2E) works and collect a "sample".


Comparing HTTP traces with and without E2E enabled, it is possible to identify that it is achieved by injecting headers in the HTTP requests sent by the browser. This is not the purpose here so we'll skip straight to what actually happens and need to be collected.

Keep the SAP Client Plugin tracing to a minimum in the following steps to avoid unnecessary traces to show in the final result

To gather the headers of E2E:

  1. Make sure there's no running IE process on the system.
  2. Start Fiddler
  3. Start the SAP Client Plug-In and "Launch" IE through it
  4. Enable "High" level tracing in the SAP Client Plug-in and press the "Start Transaction" button
  5. Go to the BI logon page URL from IE (do not logon)
  6. Click "Stop transaction" in SAP Client Plugin to avoid further tracing
  7. In Fiddler, check the "Request Headers" of the logon page (ie: logon.faces). You will find the "SAP-PASSPORT" and the "X-CorrelationID" which have been added as shown in the screenshot below

At that point you can copy and capture the "X-CorrelationID" and the "SAP-PASSPORT" with their values into a notepad. The result should look like this:

X-CorrelationID: 005056B734E51ED5AEEDC08C3D386369-1-1

SAP-PASSPORT: 2A54482A03<SHORTEN-FOR-READABILITY>02A54482A

The correlationID is made of an hexadecimal value, followed by two integer we'll call X and Y.

In this example: 005056B734E51ED5AEEDC08C3D386369-1-1 which we'll name as HexadecimalValue-X-Y

X is used to increment the "Step" (the "New step" button in the SAP plugin)

Y is a value incrementing for each HTTP call made.

Doing "on-the-fly" header injection

As part of the pre-requisites mentioned above, Fiddler and the Fiddler Script Editor need to be available.

We already used Fiddler to collect the SAP-PASSPORT and XCorrelation-ID even though there are alternatives to gather these.

But now is the time where Fiddler and the Fiddler Script Editor become essential, and here is why:

- Fiddler acts as a proxy on the client machine and set itself as the proxy for IE. By doing so, it also applies itself as the proxy for any other tool running on the same machine.

- The Fiddler Script Editor allows to apply instructions to the traffic based on the conditions we define.

To open the Script Editor in Fiddler, click on "Rules" and select "Customize Rules..." or press CTRL+R

The goal here is to:

  • create a variable before the function (incremental value) to replace the "Y" value of the CorrelationID (See above)
  • create a rule within the existing function onBeforeRequest in the Script Editor which adds the E2E headers between the moment Fiddler receives it from the web browser and send it to the web server.

The instructions within the function contain:

  • An "IF" statement based on the hostname, IP or FQDN of the HTTP server (to reduce the header injection to the BI HTTP server, such as Tomcat)
  • The SAP-PASSPORT value gathered in the "Getting Started" section
  • The X-CorrelationID without the Y value (HexadecimalValue-X-) and an incremental counter

The end result should look similar to this:

public static var counter:int = 1;


static function OnBeforeRequest(oSession: Session) { //Remember this line already exist in the editor!!!


if (oSession.HostnameIs("Name.Of.The.Server")){
oSession.oRequest["SAP-PASSPORT"]= "2A54482A03<SHORTEN-FOR-READABILITY>02A54482A"
;
oSession.oRequest["X-CorrelationID"]= "005056B734E51ED5AEEDC08C3D386369-1-" + counter
;
counter=counter+1
;

}

Save the script (CTRL +S or File > Save). The highlight in the left frame will turn from yellow to green.

The system is now setup to handle automated header injection.

Start the client tool to reproduce

Launching Dashboards, Live Office, or any other tool leveraging HTTP to BI, they will automatically detect the IE proxy (in this case Fiddler), which will now add the headers to trigger the E2E for the workflow you are running.

In the screenshot below, you can see Query As A Web Service process launching with the headers for E2E

When the issue has been reproduced, collect the fiddler trace (always good as a reference point), as well as the Web Services traces (SBOPWebApp_ws) and the back-end trace (the BI logging directory) on the server and the BusinessTransaction.xml on the client (Please refer to the Concepts sub-section above and KBA 1861180 for reference to log gathering)

Analyse the results

In the example output below, I use FlexiLogReader to parse the End to End trace for the following test workflow

  • Input a wrong password in QaaWS
  • Reviewed the CMS and dswsbobje log together in FLR (log is cropped with red line for ease of reading).

You can see the login phase from QaaWS through the Web Service log passed to the CMS with full tracing on for the workflow

Complementary Information

  1. Comment or remove the content of the function when the test is over to avoid generating E2E each time you connect to the BI server with Fiddler enabled
  2. Do not use "Localhost" for testing (as a general rule, not just for this tutorial)! Always prefer using the hostname, external IP or the FQDN of the server.
  3. In case the injection of headers does not work, the jscript.NET of the Fiddler Script Editor might be broken. Refer to the first section of the "Tips and tricks" of the following link to repair it: http://fiddlerbook.com/fiddler/dev/scriptsamples.asp

Thank you for reading

3 Comments