Documents - Pub - Web Dynpro Abap scn3 PDF
Documents - Pub - Web Dynpro Abap scn3 PDF
Documents - Pub - Web Dynpro Abap scn3 PDF
This post is part of a series on code snippets. The complete list of posts in the series is availab le in the document
Code Snippets: A Blog Series.
Two steps are needed to pass parameters into a Web Dynpro ABAP application from the SAPgui. First, the SAPgui
must construct the URL of the Web Dynpro application and open the URL in a web browser. This step may be done in
any ABAP routine.
Second, the Web Dynpro application must read the parameters from its URL query string. This is accomplished in
one of two ways. Dynamic parameters must be handled by programmatically reading the parameter name/value pairs
from the URL query string in the HANDLEDEFAULT event handler method of the Web Dynpro application's interface
view, i.e., its window.
Internal table LT_PARAMETERS may now be read and the parameter name/value pairs processed as needed by the
application. Static parameters may also be handled in this way or may be defined at design time as importing
parameters in the HANDLEDEFAULT method signature.
This post is part of a series on code snippets. The complete list of posts in the series is availab le in the document
Code Snippets: A Blog Series.
In a view's layout, individual MenuItems may be added as child elements to a Menu, ButtonChoice or LinkChoice
parent element, but what if the list of menu options is not known at design time? An example is needing to present
the user with a ButtonChoice that lists employees who report directly to the user. This list will be different for each
user and must be read from a database table, so these menu options cannot be created at design time.
The Menu, ButtonChoice or LinkChoice element may be created in the view's layout at design time and its child
elements created dynamically at runtime, for example in the view's WDDOINIT hook method. The example below
creates MenuActionItems for a ButtonChoice. The same approach may be used to dynamically create menu items for
a Menu or LinkChoice UI element.
This post is part of a series on code snippets. The complete list of posts in the series is availab le in the document
Code Snippets: A Blog Series.
Knowing the environment in which a Web Dynpro ABAP application is running is necessary if you want to branch logic
or show or hide content depending on the client environment. An example is showing the user's logon name in a
header or a copyright notice in a footer when the application is running standalone but hiding these view elements
when the application is running in the NetWeaver portal.
If you are on a version of NetWeaver that supports chaining method calls (NW 7.0 EhP 2 or higher), you may skip
declaration of the object references.
If you want to debug into what is happening in the ABAP application server when you access an HTTP URL on it with
your browser, there are several places to set an external breakpoint which will bring up the ABAP debugger for this
web request.
Function module HTTP_DISPATCH_REQUEST line 982 seems to be the first point from where a breakpoint will bring
you into the debugger.
At this point, the http handler list is already populated. This is done by call function module
HTTP_GET_HANDLER_LIST from line 606 and gives you all the handlers into question for the URL.
For this example, there exist 2 handlers for /sab/bc/ui5_ui5.
If you look at the nested handlertbl, you can see the handler implementation classes and the order in which they will
be executed to handle the http request.
The next point of interest is where the actual call of the http handler is done. This is in class method
CL_HTTP_SERVER=>EXECUTE_REQUEST line 627.
A bit up in the code, an object instance was created from the http handler class and now the interface method
if_http_extension->handle_request is called. From here it is up to the http handler object to proceed with the
processing. This may be completely different from one handler to the next, and you can of course implement and
register your own http handler class as well.
Note that the handle_request method has to set the flow_rc attribute of the if_http_extension interface with a value that
determines if more handlers will be executed or not (if there are multiple handlers registered).
As an alternative, you can figure out the handler class for your URL from the transaction SICF and just set a
breakpoint in its implementation of method if_http_extension->handle_request or some other place of interest.
This is coding for the SAP_BASIS 7.31 SP 7, it may be different on other SPs or releases.
The URL request to the AS is handled by program SAPMHTTP, which does a lot of the stuff around handling a HTTP
request and in the end uses function module HTTP_GET_HANDLER_LIST to get a list of handler classes for all the
nodes in the path to the requested service (You can use the FM to get the handler list for a given path, but the output is
rather ugly). By looking into the handler list property of the service and its parent nodes in the tree you can find all
handler classes, that potentially might apply for this service.
In this example, there is no handler present for the service rmtsampleflight itself, but in its parent node
/sap/opu/odata, there is the handler class /IWFND/CL_SODATA_HTTP_HANDLER registered. In this case, this is the
only class in all the nodes of the tree to our sample service and thus the only handler class that could possibly be
executed. Nevertheless, there could be multiple classes e.g. several nodes in the path have a handler class, or even
multiple handler classes are registered in a single node. The execution order of the handler classes seems to be in
the following order: from the higher up nodes to the lower nodes in the path, in the numbered order of the handler list
within a node (if there are more than one handlers per node). If there are more than one handler, then they will be
executed one by one in the order just described, but every handler can control if the remaining handlers will be
executed by the value the handler returns in the attribute flow_rc of the interface IF_HTTP_EXTENSION. You can jump
to the implementation classes of the handlers by simply double click on the classname in the handler list.
So now that you know the handler class, how to proceed with the reverse lookup of the sicf service from here?
The good news is that for each request, the interface IF_HTTP_EXTENSION object method HANDLE_REQUEST is
called for an instance of the handler class. This gives you an uniform entry point, from were you can go forward and
dive into the coding. You can set breakpoints, that are triggered when you perform the HTTP request and nicely debug
all the workings on the server.
The bad news is that there is no common implementation of what is happening at this point. Each handler class
does things in its own way, so you are on your own from there on. By the way you also can write your own handler
class, SAP provides some documentation about how to do that in the SAP help, just google for "sap Developing a
HTTP Request Handler " and pick a more recent sap help site.
For the rmtsampleflight example this means that by debugging you can find out that the odata service is implemented
by a complex framework: the Netweaver Gateway in package /IWFND/FRAMEWORK. With some patience you can find
the tables where the metadata information about the odata services are stored and from those tables find which
reports and thus transactions access them. But more efficient is in fact to look up Netweaver Gateway maintenance
and find the transactions from SCN or the documentation. In this case transaction /IWFND/MAINT_SERVICE to
manage and register odata services.
Introduction
This is part 2 of my experiences with writing test scripts for WDA with Selenium (IDE). The first two parts are here:
Test Scripts for WDA with Selenium - Part 1: Reasoning, Background
Test Scripts for WDA with Selenium - Part 2: Writing The First Two Scripts.
A general request: Everything here is my current experience. I am learning as I go. So if you have alternative or better
solutions for some of the things, please do not hesitate to comment. I hope to improve the blog as time goes by.
I had to experience that due to the lack of stable IDs, finding and clicking the right element can be really tricky. I had to
experiment a lot. Two sources helped me tremendously:
1. The XPath reference.
2. The XPath Checker add-on for Firefox.
Without those, I would not have come this far. Reminder: I am new to XPath. But let's start.
I call our so-called "Content Selection", which is a "classic" WDA page, meaning no Floorplan Manager. It looks like
this:
These 4 commands call the page from the navigation menu that I showed in part 2:
pause 1000
waitForElementPresent //a[text()='New']
click //a[text()='New']
waitForElementPresent //span[contains(text()[2],'Management Journal')]
The fourth command is special. What I wanted to do was to wait until the page was loaded. To do that, I wanted to
wait for the first menu option, "Management Journal", to appear. That turned out to be difficult because the HTML looks
a bit weird. To be honest, that is probably driven by the way we developed that WDA page... Here is the HTML:
01. <span class="urCLbl urCl1" unselectable="on" f="WD9A" ti="0" tabindex="0" id="WD9A-lbl">
02. <img align="absmiddle" style="-moz-user-select:none;" class="urRImgOn" src="/sap/public/bc/ur/nw5/1x1.gif"
03. Management Journal
04. </span>
So the text starts with two blanks - but they have an image in between. First I could not find the XPath to identify the
<span> that had the text "Management Journal". You find some discussions about XPath and blanks (e.g. here) but
none helped.
Then I tried using a sub-string like this: //span[contains(text(),'Management Journal')] That XPath basically means:
return the <span> that has inline text containing "Management Journal". It did not work.
Finally, XPath Checker showed me the problem: Because of the <img> in the middle, the <span> has an array of two
texts: The first with " " and the second with " Management Journal". So I had to use the second entry in that entry.
Fortunately, XPath can do that with the syntax you see above.
With that little trick, my script could do the next few clicks:
click //span[contains(text()[2],'Management Journal')]
waitForElementPresent //span[contains(text()[2],'FC')]
pause 1000
click //span[contains(text()[2],'FC')]
And so on... You see the waits for AJAX and the additional pauses. As mentioned, I have not found out how to avoid
the pauses.
The next commands checked for UI elements etc. Nothing you have not seen in part 2.
It Gets Better...
Again, I got stuck soon after. Look at the third column in the screen above. There are several checkboxes. The
problem with those was that their texts were not unique. So far, I identified all elements with their unique inline texts.
That was no longer possible.
So I tried to find an XPath that said: "Look for a <span> with text 'P&L PAC' and return the first <span> containing
'Expense' in its text that comes after". And XPath can do that. The syntax is: //span[text()='P&L
PAC']/following::span[contains(text()[2],'Expense')][1]. So there was my next command:
click //span[text()='P&L PAC']/following::span[contains(text()[2],'Expense')][1]
After that, I felt lucky. I wanted to try to check if the checkboxes for "Title Page" and "Glossary" in the last column were
set. For that you have to know that WDA renders the checkboxes as images with different CSS classes: 'urCImgOn' if
selected and 'urCImgOff' if not.
So I went for an XPath that looked for the <span> with text "Title Page" and returned the first <img> before it, if it is of
class 'urCImgOn'. Also that works. It looks like this:
verifyElementPresent //span[text()='Title Page']/preceding::img[1][@class='urCImgOn']
Summary
The rest of my scripts so far use the same concepts described here and in part 2. After seeing how powerful XPath
can be, I feel that I should be able to script meaningful tests, even without having fixed IDs.
As mentioned, I keep going. If I learn more noteworthy XPath variants, I will add them here. Again, if you see anything
that can be done better or easier, please let me know in the comments.
In some application this is not sufficient. Therefore the developer of the Web Dynpro component enhanced the
possibilities. This is explicit or component defined. E.g. the FPM components use explicit configuration
extensively.
Start the application with URL parameter "sap-config-mode=X". Use the context menu on the UI element you want to
change and select "Settings for current configuration". If you do not see this meu entry, please check your autorization.
You can hide each UI element. You can change the labels, set the value of an input field, reorder the sequence of the
table columns, modify the number of visible rows in a table, set the width of some UI elements, and so on.
In some cases you can add decorative elements to containers (when the layout is matrix, grid, flow or form layout) .
When you have added some elements to a data structure, which is used within the context, you can add UI elements
displaying these fields to the screen.
A Web Dynpro application is started, where you can enter the name of the application configuration. Please note that
the name must be globally unique. When you press "new" or "create" (depending on the release), you should enter
detailed information like package, transport request, etc.
On the main screen you can enter the necessary data and press SAVE.
Then the application configuration is visible as a subnode to the application in SE80 (press "refresh", if not yet
visible). Double click and then you can call the configuration editor from there.
To create a component configuration you can use a similar way as with the application configuration, or you can
navigate from the application configuration to it. If it does not yet exist, you have the chance to do it there. This is the
easiest way.
If you want to do changes, which are not available at runtime, you should start the customizing editor. This is nearly
the same as the configuration editor, but the object you are working on, is a different one. Start the confguration editor,
and change the name of the application in the URL from "configure_component" to "customize_component".
For FPM components: Start the application in customizing mode (see above). Then you see some icons in the top
right corner, which you can use to start the customizing editor.
If you want to allow personalization excluding hiding UI elements, the application parameter
WDENABLEUIELEMENTSHIDE can be used. This is set to true be default, but it can be set to false. This functionality
is available from 7.31.
When there are only some selected properties you want to remove from the personalization list, you can set it to "final"
on configuration or customizing level. This is true for explicit and implicit personalization.
You can see the enhancement in SE80 in the package. In release 7.40 you see them also as subobjects of the
configuration.
You can also see the enhancements in WD_ANALYZE_CONFIG_COMP when you open the popin of the table row
showing your configuration.
Introduction
This is part 2 of my experiences with writing test scripts for WDA with Selenium (IDE). The first part is here: Test
Scripts for WDA with Selenium - Part 1: Reasoning, Background.
A general request: Everything here is my current experience. I am learning as I go. So if you have alternative or better
solutions for some of the things, please do not hesitate to comment. I hope to improve the blog as time goes by.
The Application
Our application is based on NetWeaver 7.30. It consists of parts using "classic" WDA and also Floorplan Manager
for Web Dynpro ABAP. We are not yet complete on Floorplan Manager, that is work in progress. If you are curious
about the application itself, see here: SAP's internal solution for Forecast Reporting.
Now we wait until everything is loaded. Already at this point, AJAX strikes. Most of the page content is loaded
asynchronously with JavaScript. That's of course nothing special; Selenium has the "waitFor..." commands for that.
See here for details.
In my script, I want to wait until the "Navigation" block is present on the page.
Normally, that is not a big deal. This is the HTML code for the "Navigation" text:
In any normal web application, you would use the ID "WD2D-titletext" to identify the <span> and the use the
waitForElementPresent of waitForText in Selenium to wait until it appears on the screen. In normal language, that
means that you wait until that <span> with that text "Navigation" appears. It is the safest check.
The problem is: The IDs in WDA are generated and not stable, so I cannot use them and expect the script to run later
on. So I cannot do a test for one specific page element with a unique ID. Therefore, I was looking for the next best
thing. My approach was to wait for a <span> with the correct text. Using XPath, that is easily possible in Selenium:
waitForElementPresent //span[text()='Navigation']
That halts the script until the page has a <span> element with the inner text "Navigation". On top of that, you could
script additional checks, like if it really the only <span> with that text, what its position is etc. But at that point, that was
enough for me.
When executing that script a couple of times, I saw that even this did not guarantee that everything was loaded.
Further actions sometimes failed. I suspect that there are still JavaScripts being loaded in the background. I could not
identify what exactly I must wait for to be sure that everything is loaded 100%. If anyone knows, please let me know!
Not very elegant - but as mentioned, let me know if you know more.
That basically concludes the first script - I just check if the title is right:
assertTitle Page Title
On the same page, we also have the general navigation of the Floorplan Manager:
The next challenge was to check for the individual menu entries that hide behind those menus:
To make it short: I found no realiable way to script the opening of the menu and then a check on the items. So I used a
workaround: The script opens the "Map" view of the navigation:
click //span[text()='Map']
So now I could check all entries. WDA uses <a> tags again.
verifyElementPresent //a[text()='New']
Next?
Some advanced XPath madness follows in part 3...
Test Scripts for WDA with Selenium - Part 3: More Advance Stuff With XPath
About Selenium
Selenium is a free set of tools for testing web applications in the browser. Information, downloads and a good online
documentation is available at http://docs.seleniumhq.org/.
In short, it allows you to write scripts that will be executed within a browser. There is also a nice add-on for Firefox
called Selenium IDE, which enables you to record and edit scripts directly in the browser. You can then also execute
the scripts with the add-on.
I started from zero and wanted to share my learnings here. Using Selenium for "normal" web applications is of course
not new and you will find plenty of information about it with your favorite search engine. WDA, however, has some
specialties that make browser scripting tricky:
1. Almost everything is AJAX. The page is not reloaded when you click somewhere; instead, new page content is
loaded from the server with JavaScript. That, of course, is also not unusal in normal web applications. The
bigger problem is:
2. The ID attributes in the HTML code are not stable. That is quite unusual and makes scripting tricky. I will go into
more details in the next part. There are some
So this blog series is about the question: How do I write test scripts with Selenium for WDA?
As always, it does not solve every problem - I see it as an additional tool in the box.
Update: August 21
Recently, a colleague of mine (thanks Reik!) pointed me to the URL parameter sap-wd-stableids=X. It is also
mentioned in blogs like Load Testing Web Dynpro ABAP Applications Using Apache JMeter. Apparently, I did not
look for such a parameter well enough before.
The parameter causes WDA to generate stable IDs in the HTML code. That makes much of what you see in part 2
and 3 a lot simpler! I can think of only three reasons why everything I wrote in those two parts may still be of interest:
1. The parameter may not work in all scenarios. For example, it does not work on our landing page. We are still
trying to find out why.
2. Not everything on the page gets an ID. So for some text validations, you may still need some advanced XPath
sytax.
3. When scripting navigation steps within your application, that parameter will not be passed on automatically.
Selenium does not simulate http requests, where you could manually add the parameter. I could think of ways to
handle it with Selenium, where I save parameters in the source screen and then call the target screen with a
new "open" command. But I simply have not played with that yet and cannot share any experience. So if you want
to script navigation, the parameter may not solve all problems with IDs.
Next?
In part 2, I will start describing how I wrote our scripts in detail. Part 3 adds some advanced things. (At least advanced
for me...)
Test Scripts for WDA with Selenium - Part 2: Writing The First Two Scripts
Test Scripts for WDA with Selenium - Part 3: More Advance Stuff With XPath
Motivation
Adaptations are one of the most powerful concepts in Web Dynpro ABAP.
Having an SAP delivered Web Dynpro Component ready for use you are enabled to perform complex adjustments
concerning your business needs without coding a single line of code.
For details of the adaptation concept and how to use adaptations please follow read the blog by Regina Breuer
http://scn.sap.com/community/web-dynpro-abap/blog/2013/08/09/team-wda-configuration-customizing-
personalization-faq.
However - having such a highly adapted component in place may generate the demand to investigate why a certain
adaptation is working or is not working as expected.
Several tools are available supporting different entries to view the adaptation details.
Build up an adapted component by customizing and personalization of the SAP delivered test application
wdr_test_pers_imp_exp.
If you want to work with an own configuration you can use the configuration editor to create it.
Configuration editor works quite similar to customizing editor. For details see customizing a Web Dynpro component
at design time.
Runtime
Customizing is switched on in runtime mode when you run your application with the additional url-parameter
sap-config-mode=X.
Customizing at runtime shall be used for Build-In adaptations.
Design time
Design time customizing takes place in the customizing editor – application (customize_component).
Customizing at design time shall be used for Component-Defined adaptations.
Press Settings and change the treshold settings. And press button “Save”.
In the transport request popup box choose “No Transport Request”.
Changes are applied instantly:
The runtime analysis tool (RAT) enables you at runtime to ascertain the levels in which adaptations have been made
to the user interface of a Web Dynpro ABAP application. It is available since NW 7.31 SP07 and NW 7.40 SP0.
Analyze the adaptation by clicking right mouse button on any position of this screen and select “Technical Help”
from context menu.
Choose tab “Adaptations”
The following levels of adaptation may exist:
ENH – enhancement
CON – configuration
CUS – customizing
PRS – personalization
For each level of available adaptation you can select the entry in the adaptation list.
Selecting an adaptation level will show the details for Build-In and Component Defined adaptations up to this
level.
Comparing the changes it is easy to find out on which level which adaptation is applied.
In our case you see that the value of attribute "CONFIG_LOW" has been changed in customizing to value “30”.
The Built-In adaptations are also available for each level:
Keep in mind that showing up in the adaptation details doesn’t mean that this entity has been adapted at the
selected level.
It means that there is an adaption changing this entity on this level. The adaption may exist on a level below or
on the selected level.
The adaptations details always show the actual adaptation that influences the entity on the selected level. It will
not show the delta from the underlying level.
In SE80 search for Web Dynpro application “WD_ANALYZE_CONFIG_COMP” and start it.
Enter your configuration to be analyzed.
From a list of available configurations you can select your desired configuration for inspection of adaptation
details.
It is also possible to delete or transport a configuration.
Selecting a configuration will show the details of Build-In and Component Defined adaptations.
Start your application and call technical help via context menu.
Click on the Personalization ID to navigate directly to the WD_ANALYZE_CONFIG_USER - tool.
Navigation is not supported in older releases. Start the WD_ANALYZE_CONFIG_USER application and search
with your Personalization ID.
The list of Component Personalizations contains personalizations and customizings of the selected
configuration.
Entries with user „*“ and User Scope „A“ identify customizings whereas entries with a real username and User
Scope “U” are personalizations.
Selecting a personalization / customizing will show the details for Build-In and Component Defined adaptations.
718 View s 3 Comments
Tags: w da, w eb_dynpro, w ebdynpro, configuration, customizing, w eb_dynpro_abap, w ebdynpro_abap, w ebdynproabap,
adaptation, personalization, abap_w d
Web Dynpro is the follow up of the classical Dynpro technology. It is not a direct
competitor of BSP or SAP ITS.
Web Dynpro is a programming model, which allows to design standard UIs very quick.
Everything that can be designed without coding is designed without coding. On the other
side, the freedom in designing the UI is restricted. E.g. it is not possible to include client
side JavaScript in the generated pages. The generated code is not restricted to HTML.
However, Web Dynpro recently provided UI elements that allow integration of
custom HTML, custom JavaScript, and custom CSS into a Web Dynpro
application. The relevant UI elements are HTMLIsland, HTMLContainer and
HTMLFragment.
BSP programming model offers to include all browser supported techniques in the
generated HTML pages. However, the construction of a BSP UI takes a lot more time
than the development of a WD UI, since there is no declarative approach. Thus, BSP can
be used for “free-style” programming.
SAP ITS will be used in to future to map existing Dynpro-based transactions to HTML
pages. This will be necessary, since it is impossible to convert all Dynpro-based
transactions to Web Dynpro in an acceptable time frame. SAP ITS is the only Web
enabling technology. For all other technologies, the application has to be rewritten
completely! Cons: Long response times, since an additional time frame is necessary for
the mapping between HTML pages and Dynpros (in both directions).
Web Dynpro is the technology SAP uses for developing all future applications.
Existing Dynpro-based transactions will be converted. Web Dynpro will replace the old
Dynpro step by step. Cons: Web Dynpro does allow to develop of standardized UI very
quick, but it is not the right choice for the development of fancy Internet-like UIs. This is
because the UI is rendered from meta data, so the developer cannot place his/her own
JavaScript code in the rendered HTML page (unless using HTML Island and HTML
Container). Web Dynpro has to be embedded in the portal environment to be able to
change the application design.
Hi,
I want to create a Search input field on my wd screen which can search an index based on the search text I feed in.
The challenge is that search query in the background should execute as soon as I start writing the key rather than on
hitting any button. Did any of you do this in past or have any insights on this. Basically I need to know if there is a wd
function which gets called on entering text in the input field.
If there is nothing like this available as of now in SAP, any suggestion on how to approach designing this functionality.
Thank you so much.
If you are running NW ABAP 7.31 SPS05, upgraing to SPS 07 means a lot of new feature for WebDynpro ABAP and
Floor Plan Manager.
Below are the details of many new useful features delivered for ABAP WebDynpro & Floorplan Manager as part
SPS07,
Web Dynpro Changes in 7.31 SPS07 -
http://help.sap.com/saphelp_nw73ehp1/helpdata/en/eb/a6d6a041b04fa8afdeb49c1fa032e1/content.htm?
frameset=/en/a3/721c134fdb4f1fbe774cfbfa9be66d/frameset.htm
Hi Experts,
By using the component Interface, We can call multiple components dynamically based on action triggered.
Steps to follow.
1. Create a Webdynpro Component Interface with name 'ZRAO_INTERFACE_TEST' with interface view
'INTERFACE_VIEW'.
i. Delete the default window in ZRAO_INTERFACE_COMP1 and Implement the interface in the component
ZRAO_INTERFACE_COMP1'.
This interface will provide common window named 'INTERFACE_VIEW'.
Follow the above two steps for the another 3 components.( ZRAO_INTERFACE_COMP2,
ZRAO_INTERFACE_COMP3, ZRAO_INTERFACE_COMP4 ).
&
After creating all the 4 components , Create a Main component ZRAO_INTERFACE_MAIN with re-use component
ZRAO_INTERFACE_TEST interface as follows.
3. Create the view with dropdownbyindex with action 'DROPDOWN' and one ViewContainerElement as below.
METHOD onactiondropdown .
wd_this->wd_get_api( )->do_dynamic_navigation(
source_window_name = 'ZRAO_INTERFACE_MAIN' "{this is my window name }
source_vusage_name = 'MAIN_USAGE_0' "{this one is MAIN--"}
source_plug_name = 'OUT_PLUG1' "{this plug name can be generated dynamically }
target_component_name = 'ZRAO_INTERFACE_TEST'
target_component_usage = 'DYNAMIC_COMP1'
target_view_name = 'INTERFACE_VIEW' "{the view i want to embed}
target_plug_name = 'DEFAULT'
target_embedding_position = 'MAIN/VCE' ).
ENDIF.
ENDMETHOD.
Best regards,
Rao.
1. In SE80, select the required Web Dynpro ABAP application and display it (by double-clicking or by choosing
Display).
2. Choose Goto → HTTP Service Maintenance.
You go to the service node in the SICF for your application.
3. Select the service node that belongs to your Web Dynpro application.
.
Once we click on Other File , popup will appear .Choose file and then click on Analyze button
Best regards,
Rao.
1 2 3 4 5 … 8