Quantcast
Channel: SCN : Blog List - SAP GUI
Viewing all 276 articles
Browse latest View live

Installation and initial configuration of Personas 3 SP2 on NW 7.5

$
0
0

Recently I installed and configured Personas 3 on my NetWeaver 7.5 system. In fact, this is really easy on NW 7.5. Following the master guide and the configuration guide gives you in short time a fully working Personas 3 installation. A small drawback on these guides is that they do not include screenshots that help you navigating through each step. During the installation I documented each step and published them here. It starts with the installation of base Personas 3, updating it to SP1 and then SP2.

 

In total it`s 3 steps for the installation and 7 for the initial configuration. It took me around 4 hours for the full procedure. Most of the time was for installing Personas 3. The configurations is really easy, and thanks to the configuration checklist, you`ll be sure that it works.

 

Installation

Configuration


SAP Screen Personas 3.0 SP3 now available. New templates to accelerate flavor development.

$
0
0

Driven by customer feedback from SAPPHIRE, TechEd, usability tests around the world, and our monthly SAP Screen Personas Practitioner Forum, the product team has addressed over 250 backlog items to bring you SAP Screen Personas 3.0 SP3. As always, we introduce new functionality to make SAP Screen Personas easier to use, especially for large enterprises looking to scale to thousands of employees. In this blog, I will highlight

  1. Templates
  2. Scripting
  3. Flavor groups
  4. Downport to kernel 7.22

 

twitter.png SAP Screen Personas 3.0 SP3 has over 250 improvements, including new templates.

 

Watch the 10-minute Productivity Power Play episode on SAP Screen Personas 3.0 SP3.

 

What’s New in SAP Screen Personas 3.0 SP3?

template.jpgTemplates

Several customers expressed concern about the repetitive effort and risk of flavors becoming inconsistent when they built and deployed hundreds of flavors. As a first step we published design guides on the SAP Screen Personas Knowledge Base. With templates, we now have a tool that takes design guides to a whole new level.

 

The new template concept allows you to create screens rapidly and consistently, following a pre-set design pattern. Templates provide a pre-made screen layout onto which you can drag screen elements for a consistent appearance. For example, we have a Fiori-inspired header, footer, and content blocks that you can use to build screens quickly. We will be demoing this at SAPPHIRE. You will be able to find a number of initial sample templates in the SAP Screen Personas Flavor Gallery.

http://link.personas.help/SAPScreenPersonasFlavorGallery

 

Scripting

The script editor is another component that generates much feedback, most of it very positive. We have made it even better:

  • Scripting now includes integrated documentation. Now, you can browse the full supported scripting API or you can use the in-place help provided as you write your SAP Screen Personas scripts.
  • Also we saw a cluster of issues related to the use of the RFC integration, we thus decided to make it much easier to use and developed a dedicated tool to help you generate the required calls.
  • Recording your keystrokes and attaching to a script button remains simple and available to business analysts with little or no previous coding experience

 

Flavor groups

Consider an individual with multiple roles in the organization. We now allow you to group a set of transactions into a flavor group. This allows a person to navigate through a pre-selected group of flavors, depending on the task he or she is performing.

 

Once you configure flavors to be part of a group they become active the moment any one flavor becomes active. Let me describe how this works. Imagine I have 2 flavors for SMEN, identical except for a different background image. And I have created two flavor groups, each contains transactions that have the same background image. If I jump to another flavor in the flavor group by entering the okcode, I will jump to this flavor with the same background. If I return to SMEN and select the other flavor with a different background, and again jump to another transaction, it is rendered with the matching background.

 

This will become much clearer if you watch the demo in our Productivity Power Play video.

 

Downport to kernel 7.22

I am happy to announce the successful downport to SAP Screen Personas 3.0 SP03 to lower BASIS versions on SAP Kernel 7.22 PL100+ (which is downward compatible).

 

If you are running an SAP BASIS 700 SP29 or higher (or an equivalent other SAP BASIS version) you can now use SAP Screen Personas on that.

                - SAP BASIS 7.00 SP29

                - SAP BASIS 7.01 SP14

                - SAP BASIS 7.02 SP14

                - SAP BASIS 7.31 SP09

 

Now, one of the biggest barriers to migrating to SAP Screen Personas 3.0 is gone. We look forward to supporting all our SAP Screen Personas 2.0 as they migrate to this new version.

 

Updated Support Statement

With the release of SAP Screen Personas 3.0 SP3, we will only support SP2 and SP3. SAP Screen Personas 3.0 SP1 will be out of support (time to upgrade!). Since the maintenance window for SAP Screen Personas 3.0 is calculated based on the year of a service pack release plus a 3-year support window the new calculated support window is scheduled to end on December 31, 2019.

 

The proven business value of SAP Screen Personas remains the same.

  • Improve SAP adoption by making the system easier to use
  • Increase employee productivity by simplifying screens
  • Reduce training costs with more intuitive screens
  • Enhance data quality by reducing the number of opportunities for people to make errors

 

Kernel recommendation

The minimum Kernel Patch required for SAP Screen Personas 3.0 SP2 is SAP kernel 7.42 patch level 400. Please do not install the new service pack if you do not have this critical kernel pre-requisite.

Read about the minimum system requirements to use SAP Screen Personas 3.0 SP3.

 

Next Steps

Upgrade to SAP Screen Personas 3.0 SP3 (requires valid NetWeaver License)

Take a free openSAP class.

Learn more from our knowledge base

Watch the Productivity Power Play video series.

 

Attention SAP Screen Personas Customers

Want to see how other customers are using SAP Screen Personas to make their users more productive? We have a monthly (virtual) meeting in which companies share their best practices and take questions from the attendees. Usually, there is a customer demo and/or a tutorial from an SAP product expert.

SAP Screen Personas Practitioner Forum is on the 3rd Wednesday of each month. (We have only one monthly meeting now for all versions.)

Register for the Practitioner Forum.

 

For the SAP Screen Personas product team, Peter Spielvogel.

Announcing content (Flavors, Themes, and Templates) for SAP Screen Personas

$
0
0

As a result of your feedback, we will be delivering content you can use to accelerate development of your SAP Screen Personas project. With the release of SAP Screen Personas 3.0 SP3, we are offering:

  • Flavors for SAP Screen Personas
  • Themes for SAP Screen Personas
  • Templates for SAP Screen Personas (read about templates in the SP3 product announcement)

This pre-built content will be packaged into a gallery from which you can download these assets.

 

twitter.png New SAP Screen Personas Flavor Gallery has assets to speed development.

 

 

gallery.jpgWe are providing this Flavor gallery with the goal of providing you content you can use to accelerate your SAP Screen Personas deployment. The Flavors, Templates, or Themes you download are ready to install and use as a foundation for simplifying the transactions on your system. The download package includes:

  • The Flavor, Theme or Template
  • The underlying Theme (if applicable)
  • All relevant Templates (if applicable)
  • Any images to enable the Flavor to render properly
  • Any icons to enable the Flavor to render properly
  • All scripts to provide the described functionality
  • Functional documentation for the Flavor

 

flavor.jpg

 

Since most customers have some level of customization on their SAP ERP systems (for example, custom transactions, custom fields, or additional tabs), the content we provide will not be plug-and-play. You should expect to use it as a starting point for your own screen simplification efforts.

 

To set the right expectations, please be advised that any downloads are subject to the following.

  • These flavors are provided as a starting point. You will need to make modifications to adapt to your IT environment and any changes you have made to your SAP system.
  • These flavors are provided without any warranty or support obligations.
  • These flavors are subject to the full terms of the end-user license agreement (EULA).

 

We hope these assets will help you go live more quickly so you can delight your users with more intuitive screens. Please let us know what else you need to accelerate this process.

 

Visit the SAP Screen Personas Flavor Gallery.

 

For the SAP Screen Personas product team, Peter Spielvogel.

SAP Screen Personas 3.0 SP03 - Where to find?

$
0
0

Since yesterday, SAP Screen Personas 3.0 SP03 is available. As I work with Product Support, I decided to go ahead and install the new SP in about six different test systems, with different SAP Netweaver releases (i.e. 7.00, 7.01, 7.02, 7.31, 7.40 and 7.50).

 

I am presenting here the steps I took to perform the download, the installation and the first access to the Personas administration, implementing a few notes and then have the product ready for use.

 

Where to find the new SP?

 

You can download the package in the Software Center, using the new Support Launchpad.


Once you are authenticated, you need to open the Support Packages and Patches tab:

Personas 3.0 SP03 - Download 01.jpg


Then navigate to "By Category" and click on the "SAP Application Components" link:


Personas 3.0 SP03 - Download 02.jpg

 

Click on the SAP Screen Personas link:

 

Personas 3.0 SP03 - Download 03.jpg

 

Now you can select version 3.0 of the product:

 

Personas 3.0 SP03 - Download 04.jpg

 

You can then click on the "Comprised Software Component Versions" link:

 

Personas 3.0 SP03 - Download 05.jpg

 

You only need to access the "SAP Screen Personas 3.0" link:

 

Personas 3.0 SP03 - Download 06.jpg

 

Click on the "Support Packages" link:

 

Personas 3.0 SP03 - Download 07.jpg

 

In the row for SP03 (first row), under the "Action" column, click on the arrow link:

 

Personas 3.0 SP03 - Download 08.jpg

 

Now select "Download" and save the file into the directory you want:

 

Personas 3.0 SP03 - Download 09.jpg

 

 

Next?

 

My next blog will show the installation process using SPAM.

SAP Screen Personas 3.0 SP03 - Installing via SPAM

$
0
0

In my previous article, you saw where to find the new Personas support package.

 

In this blog, I will show the installation process via SPAM.

 

Before SPAM

 

Now you already have the Personas SP package in a directory. Before using SPAM, it is necessary to extract the content of the SAR file K-30003INPERSONAS.SAR.

 

In order to extract the content, you need to issue the following command:

 

sapcar -xvf K-30003INPERSONAS.SAR

 

The output should be similar to:

 

SAPCAR: processing archive K-30003INPERSONAS.SAR (version 2.01)

x EPS/in/CSN0120061532_0099695.PAT

x EPS/in/I720020751259_0102667.PAT

x SIGNATURE.SMF

SAPCAR: 3 file(s) extracted

 

The PAT files must be transferred to the EPS\in directory, under the DIR_TRANS directory of your system, usually with path \\<HOSTNAME>\sapmnt\trans.

 

Running SPAM

 

The installation process needs to be executed using DDIC user in client 000:

 

Personas 3.0 SP03 - SPAM 01.jpg

 

Execute transaction code SPAM:


Personas 3.0 SP03 - SPAM 02.jpg

 

Note that SPAM needs to be, at least, with support package level 60 installed:

 

Personas 3.0 SP03 - SPAM 03.jpg

 

Now load the packages from the application server:


Personas 3.0 SP03 - SPAM 04.jpg

 

Confirm the popup:


Personas 3.0 SP03 - SPAM 05.jpg


Two packages are loaded:

 

Personas 3.0 SP03 - SPAM 06.jpg

 

Now you need to define a queue to import the support package:


Personas 3.0 SP03 - SPAM 07.jpg


Just select the SAP Screen Personas 3.0 product:


Personas 3.0 SP03 - SPAM 08.jpg

 

You need to confirm the selected support package level to be imported:


Personas 3.0 SP03 - SPAM 09.jpg

 

You are asked whether you want to include Modification Adjustment Transports:

 

Personas 3.0 SP03 - SPAM 10.jpg

 

Then you can import the queue:

 

Personas 3.0 SP03 - SPAM 11.jpg

 

You have the option to set the processes to run in background mode (I would recommend to use it, to avoid regular GUI timeouts that might happen):


Personas 3.0 SP03 - SPAM 12.jpg

 

In a given stage of the import, you will be asked to Perform Adjustments. You need to start the process using dialog mode, otherwise you cannot finish the adjustments:


Personas 3.0 SP03 - SPAM 13.jpg

 

Now you can use SPAU to adjust SAP notes that might be implemented in previous SPs:


Personas 3.0 SP03 - SPAM 14.jpg

 

Once the adjustments are made, you receive the notification:


Personas 3.0 SP03 - SPAM 15.jpg

 

Just one last step: confirm the queue:


Personas 3.0 SP03 - SPAM 16.jpg

 

You should be ready to use Personas 3.0 with SP03 successfully installed.

 

 

Next?

 

My next blog will show the first execution of the Personas Health Check with the new SP already installed.

SAP Screen Personas 3.0 SP03 - First Health Check Execution

$
0
0

In my previous article, you saw how to install Personas SP03 using SPAM.

 

In this blog, I will show the first execution of the Health Check feature after the new support package was installed.

 

Personas Administration

 

After executing /PERSONAS/ADMIN, it is possible to see a difference related to SP02.

 

In SP03:


Personas 3.0 SP03 - ADMIN 01.jpg

 

In SP02:


Personas 3.0 SP02 - ADMIN 01.jpg

 

Now a Template Maintenance section is available.

What about the Health Check feature? Is it like in SP02?


Clicking on the button shows the following screen:


Personas 3.0 SP03 - ADMIN 02.jpg

 

Personas Notes Checker

 

The first impression when starting the Health Check for the first time is not so good. Why? Because with SP02, there were no red traffic lights! What is going on?

 

In order to be sure that the Personas installation is up-to-date, a new feature is available: Personas Notes Checker.

 

By clicking on the button, a popup appear:


Personas 3.0 SP03 - ADMIN 03.jpg

 

After the execution, more red traffic lights appeared! There are SAP notes that might need implementation in the system.


Personas 3.0 SP03 - ADMIN 04.jpg

 

Next?

 

My next blog will show the use of SNOTE after the Personas Notes Checker verified the Personas installation.

SAP Screen Personas 3.0 SP03 - Using SNOTE to implement post-SP03 notes

$
0
0

In my previous article, you saw the first execution of the Health Check feature, right after SP03 was installed.

 

In this blog, I will show SNOTE execution, once the Personas Notes Checker brought SAP notes to the verification list.

 

SNOTE

 

The Personas Notes Checker contacts CSS to obtain notes that might be relevant to the Personas installation.

The notes are downloaded, but not installed.

It is up to the system administrator to access SNOTE and assess whether a note should be implemented.

 

In my test system, I got the following list:

 

Personas 3.0 SP03 - SNOTE 01.jpg

 

Now I need to check whether each note can be implemented in the system. I need to select a note and click on the “Check SAP Note” button:

 

Personas 3.0 SP03 - SNOTE 02.jpg

 

The first note brought the popup:


Personas 3.0 SP03 - SNOTE 03.jpg


Since the note cannot be implemented, I decided to change the processing status to “Not Relevant”. Just click on the “Set Processing Status” button, once the note is selected:

 

Personas 3.0 SP03 - SNOTE 04.jpg

 

Then select the option (Not Relevant) and click on the “Ok” button:

 

 

Personas 3.0 SP03 - SNOTE 05.jpg

 

You can check all the remaining notes:

 

Personas 3.0 SP03 - SNOTE 06.jpg

 

Right after installing SP03, you should have a remaining list of 3 SAP notes to implement:


Personas 3.0 SP03 - SNOTE 07.jpg

 

Of course, the list can be bigger, depending on the SAP_BASIS support package level of your system.

 

Once the first note is implemented, the resulting list should be similar to:

 

Personas 3.0 SP03 - SNOTE 08.jpg

 

SAP note 2312942 (SAP Screen Personas 3.0 SP03: Update of Screen and Control ID Overwrite Entries) contains manual steps to be performed:

 

Personas 3.0 SP03 - SNOTE 09.jpg

 

The popup shows:

 

Personas 3.0 SP03 - SNOTE 10.jpg

 

After the automatic steps are performed, you need to confirm the execution of the manual steps:

 

Personas 3.0 SP03 - SNOTE 11.jpg

 

The manual steps consist of executing a report in SE38 (a):


Personas 3.0 SP03 - SNOTE 12.jpg

 

Select the checkbox (b):


Personas 3.0 SP03 - SNOTE 13.jpg

 

Resulting in the list:


Personas 3.0 SP03 - SNOTE 14.jpg

 

Once you finished the SAP notes implementation via SNOTE, you should return to /PERSONAS/ADMIN and execute the Health Check.

 

Next?

 

What happened after the notes were implemented? I will show you in my next blog.

SAP Screen Personas 3.0 SP03 - Health Check

$
0
0

In my previous article, you saw that a few SAP notes were implemented via SNOTE.

In this blog, I will show what happened in the Health Check feature.

 

Health Check, round 2, fight!

 

When I accessed the Health Check after all the notes were implemented, I still could find a few yellow and red traffic lights:

 

Personas 3.0 SP03 - ADMIN 05.jpg

 

The yellow traffic lights were not a concern for the time being. I decided to focus on eliminating all remaining red traffic lights.

 

Fortunately, the solution for the red alert was running a report:


Personas 3.0 SP03 - ADMIN 06.jpg

 

I just unchecked the item and executed:

 

Personas 3.0 SP03 - ADMIN 07.jpg

 

The resulting list can be saved:


Personas 3.0 SP03 - ADMIN 08.jpg

 

After that, all I have left in the Health Check were a few yellow traffic lights: memory management and enabling a UI5 node to have Personas 3.0 enabled for Web Dynpro ABAP:

 

Personas 3.0 SP03 - ADMIN 09.jpg

 

Once I tuned the memory settings and fixed the issues related to the UI5 node in SICF, and clicked on the “Personas Notes Checker” feature: all green!

 

Personas 3.0 SP03 - ADMIN 10.jpg

 

 

Additional information

 

Some important SAP notes (SP03 related):

2295995 - SAP Screen Personas 3.0 SP03: Released Notes Information

2295996 - SAP Screen Personas 3.0 SP03: Update of Client Sources Files

 

Other important notes:

2252031 - SAP Screen Personas 3.0 : Kernel Recommendations

2098894 - SAP Kernel 7.42 disp+work (DW.SAR) patch forecast

2050838 - SAP Screen Personas - Limitations/Restrictions/Behavior

 

Please also visit the Personas Wiki page.


Now, if you want to see what the new SP03 brought to create flavors, then you must look this Productivity Power Play video.





Using heatmaps in Screen Personas part 1

$
0
0

Hi everyone,

 

I am a huge fan of Screen Personas, the low effort approach to do something significant for the user experience is great. I have now done a number of Screen Personas implementations and there are a few things that typically conflicts with the general idea of doing good usability.

 

Typically you engage with the power user of the particular transaction that you want to change, and while these people are very knowledgeable in how to use the transaction, it can lead to flavors that aren't optimal in their design. Design by proxy can be dangerous as one persons perception of a particular design isn't necessarily the right, especially if that user is more of a power user than a general user, which represents the majority of the user group.

 

Usability research has also shown us that typically what a user say is true, might not always be the case, so if we can't trust the users or we can't get access to the "real" users, what do we do?

 

Well we can do guerilla user research, which will give us valuable data on how the users use a particular transaction. In this blog i will show you how.

 

We can use heatmaps to generate a representation on where the users click in a particular transaction, this data is very valuable as you can then document the users behavior and don't have to rely on assumptions anymore. It works as follows, a script is started when the user access a single transaction, then it records all the clicks from that user and stores that in a table in the backend alongside the program name and screen number to filter the correct coordinates.

All this data can then be accessed by the designer in a heatmap like the one below.

Untitled.png

This video shows the end result:

 

Although not perfect, it adds some valuable feedback to the UX designer on what is actually being used on the screen and what clutter that probably can get removed.

 

In part 2 i will show you how to do this.

There are a few things i need to mention:

  • I have used the heatmaps.js library. If you want to implement this productively, please visit the authors website for more info.
  • This only works in the webgui, as we need access to the click event in the window element.
    • If you try this in SAP GUI for Windows, then it will simply just come up with a script error.
    • If you can come up with a way to enable this capture in GUI for Windows, please let me know!
  • I haven't tested this in a WDA on screen personas, but it should work as well.
  • Performance will take a slight hit, even though the RFC called are asyncrounous.
  • If a user goes click frenzy, the script might not capture it all as there is a limitation in most browsers to have a maximum of 6 requests open at a time.
  • It only captures mouse clicks, so users might tab into fields that aren't captured in the heapmap then.
  • Don't rely entirely on this tool as your user research, do engage your end users as well!

 

Let me know what you think and potentially ways to change it, i am eager to hear your feedback.

 

I haven't used this myself at a Screen Personas project, so there might be bugs or stuff i haven't thought about. Please share your feedback

 

Follow me on Twitter or Linkedin for updates and thoughts about SAP User Experience.

Using heatmaps in Screen Personas part 2

$
0
0

Hello again,

 

You have hopefully read my blog:Using heatmaps in Screen Personas part 1

 

This blog will give you the how on how to get the heatmaps working in Screen Personas

Alright let's get started. I created a little recipe list for what we need:

  • Table to store the coordinates.
  • Function Module to capture the click coordinates.
  • Function Module to fetch the click coordinates.
  • Whitelist the Function Modules used in the personas admin transaction.
  • Scripts in screen personas to capture clicks.
  • Script in screen personas to present the clicks in a transaction.

I have already posted the needed scripts on github and you can also download a zip file with the backend content.

Use Lars Hvam's great tool AbapGit

to upload it.If you want to do it manually, then we need the following:

Z-table to store the click coordinates

2016-04-11_1203.png

Function module to capture click coordinates. Remember to RFC enable it.

  1. FUNCTION ZFM_HEATMAPS.
  2. *"----------------------------------------------------------------------
  3. *"*"Local Interface:
  4. *"  IMPORTING
  5. *"    VALUE(IV_PROGNAME) TYPE  CHAR8
  6. *"    VALUE(IV_SCREEN) TYPE  CHAR4
  7. *"    VALUE(IV_X) TYPE  CHAR4
  8. *"    VALUE(IV_Y) TYPE  CHAR4
  9. *"----------------------------------------------------------------------
  10. TYPES:BEGIN OFinsert,
  11.   timestamp typetimestamp,
  12.   progname type char8,
  13.   screen type char4,
  14.   x type char4,
  15.   y type char4,
  16. END OF insert.
  17. data ls_insert TYPEinsert.
  18. GET TIME STAMPFIELD ls_insert-timestamp.
  19. ls_insert-progname = iv_progname.
  20. ls_insert-screen= iv_screen.
  21. ls_insert-x = iv_x.
  22. ls_insert-y = iv_y.
  23. INSERT INTO zheatmaps VALUES ls_insert.
  24. ENDFUNCTION.

Function Module to fetch the click coordinates. Remember to RFC enable it.

  1. FUNCTION ZFM_HEATMAPS_GEN.
  2. *"----------------------------------------------------------------------
  3. *"*"Local Interface:
  4. *"  IMPORTING
  5. *"    VALUE(IV_PROGNAME) TYPE  CHAR8
  6. *"    VALUE(IV_SCREEN) TYPE  CHAR4
  7. *"  TABLES
  8. *"      ET_COORDINATES STRUCTURE  ZHEATMAPS
  9. *"----------------------------------------------------------------------
  10. SELECT *INTOTABLE et_coordinates FROM zheatmaps WHERE PROGNAME = iv_progname ANDscreen= iv_screen.
  11. ENDFUNCTION.

Now go to the /personas/admin

transaction and select the FM whitelist

2016-04-11_1213.png

And add the function modules.

2016-04-11_1214.png

NB: If you want to use this for WDA, then you need to add them with that framework as well.
Now we are done for the backend, easy right?Go to the webgui and access the transaction you want to track.

Create a flavor and go to the scripting engine.Create a new script and paste the following code

  1. // Add event listener to the click event
  2. window.addEventListener("click",function(e){
  3. // Load the custom function module
  4. var rfc = session.createRFC("ZFM_HEATMAPS");
  5. // Capture the screen program. Couldn't use the session.info.program parameter
  6. rfc.setParameter("IV_PROGNAME", session._private.props()._parent.children[0].children[0].properties.ScreenProgram.toString());
  7. // Capture screen number to we can filter out the right heatmap
  8. rfc.setParameter("IV_SCREEN", session._private.props()._parent.children[0].children[0].properties.ScreenNumber.toString());
  9. //Capture X and Y coordinates.
  10. rfc.setParameter("IV_X", e.clientX.toString());
  11. rfc.setParameter("IV_Y", e.clientY.toString())
  12. rfc.send();
  13. });

Now enable this script on the onload event in screen personas

2016-04-11_1219.png

Now create another flavor to visualize the heatmaps.In this flavor go to the scripting engine once more and add the following code

  1. // First capture the program name and screen number
  2. var progname = session._private.props()._parent.children[0].children[0].properties.ScreenProgram.toString();
  3. var screenNo = session._private.props()._parent.children[0].children[0].properties.ScreenNumber.toString();
  4. // Generate the RFC that we are going to call to get all the coordinates for the heatmap
  5. var rfc = session.createRFC("ZFM_HEATMAPS_GEN");
  6. rfc.setParameter("IV_PROGNAME", progname);
  7. rfc.setParameter("IV_SCREEN", screenNo);
  8. rfc.requestResults(JSON.stringify(["ET_COORDINATES"]));
  9. rfc.send();
  10. var coordinates = JSON.parse(rfc.getResult("ET_COORDINATES"));
  11. //Fetch the heatmap
  12. $.getScript("https://rawgit.com/pa7/heatmap.js/master/build/heatmap.js").done(function(){
  13. // minimal heatmap instance configuration
  14. var heatmapInstance = h337.create({
  15.   // only container is required, the rest will be defaults
  16.   container: document.getElementById("webguiPage0")
  17. });
  18. //The points are our click coordinates
  19. var points =[];
  20. $.map(coordinates,function(el){
  21. var point ={
  22. x: el.X,
  23. y: el.Y,
  24. value: 10
  25.   };
  26.   points.push(point);
  27. });
  28. var max = points.lentgh;
  29. var data ={
  30.   max: max,
  31.   data: points
  32. };
  33. heatmapInstance.setData(data);
  34. });

 

Now go to edit mode and create a script button and add add the script to it.

2016-04-11_1224.png

And now the hard work is done!

 

All you need now is to add the capturing flavor to your users and then start recording their movements in the GUI.

Hours of programming

$
0
0

Hours of programming / debugging ? Here is something useful for SAP ABAP developers to reduce stress on your eyes

 

GUI.png

 

First go to SE38 -> Utilities -> Settings -> Editor tab -> Front-end Editor (new). Click OK and you’re done.

Create 2 xml files (find the code below)

1. abap_spec.xml

  1. <?xml version="1.0"?>
  2. <?xml-stylesheet type="text/xsl" href="lang_spec.xslt"?>
  3. <XMLConfigSettings>
  4. <FILEINFO>
  5. <Author>Mr Black</Author>
  6. <Type>LangSpec</Type>
  7. <Language>ABAP</Language>
  8. <Desc>Language specification for ABAP</Desc>
  9. </FILEINFO>
  10. <SPECIFICATION>
  11. <FilePattern>*.abap</FilePattern>
  12. <LexerDll>sapab4lex.dll</LexerDll>
  13. <CaseSensitive>0</CaseSensitive>
  14. <OpenClose>()[]''``||{}</OpenClose>
  15. <Delimiters>,.:</Delimiters>
  16. <WrapBy>(),</WrapBy>
  17. <LineEnd>.</LineEnd>
  18. <Words>0-9a-Z_/&lt;&gt;</Words>
  19. <HierarchySeparator>
  20. <Separator id="1" text="-"/>
  21. <Separator id="2" text="-&gt;"/>
  22. <Separator id="3" text="=&gt;"/>
  23. <Separator id="4" text="~"/>
  24. </HierarchySeparator>
  25. </SPECIFICATION>
  26. <STRUCTURES>
  27. <exception-follows value="="/>
  28. <Structure open="region" close="endregion" header="0" has_name="1" sent_start="1"/>
  29. <Structure open="if" middle="else" close="endif" header="1" sent_start="1">
  30. <Middle name="elseif"/>
  31. </Structure>
  32. <Structure open="case" middle="when" close="endcase" header="1" sent_start="1">
  33. <Middle name="others"/>
  34. </Structure>
  35. <Structure open="loop" close="endloop" header="1" sent_start="1"/>
  36. <Structure open="form" close="endform" has_name="1" separator="1" header="1" sent_start="1"/>
  37. <Structure open="while" close="endwhile" header="1" sent_start="1"/>
  38. <Structure open="do" close="enddo" header="1" sent_start="1"/>
  39. <Structure open="try" middle="catch" close="endtry" header="1" sent_start="1">
  40. <Middle name="cleanup"/>
  41. </Structure>
  42. <Structure open="class" close="endclass" has_name="1" separator="1" header="1" sent_start="1"/>
  43. <Structure open="method" close="endmethod" has_name="1" separator="1" header="1" sent_start="1"/>
  44. <Structure open="function" close="endfunction" has_name="1" separator="1" header="1" sent_start="1"/>
  45. <Structure open="module" close="endmodule" has_name="1" separator="1" header="1" sent_start="1"/>
  46. <Structure open="interface" close="endinterface" header="1" sent_start="1"/>
  47. <Structure open="at" close="endat" header="1" sent_start="1"/>
  48. <Structure open="exec" close="endexec" header="1" sent_start="0"/>
  49. <Structure open="define" close="end-of-definition" has_name="1" separator="1" header="0" sent_start="1"/>
  50. <Structure open="provide" close="endprovide" header="1" sent_start="1"/>
  51. <Structure open="select" close="endselect" header="1" sent_start="1">
  52. <open-exception-follows value="single"/>
  53. <open-exception-contains value="into table"/>
  54. </Structure>
  55. <Structure open="begin" close="end" header="0"/>
  56. <Structure open="enhancement" close="endenhancement" header="0" has_name="1" separator="1" sent_start="1"/>
  57. <Structure open="enhancement-section" close="end-enhancement-section" header="0" has_name="1" separator="1" sent_start="1"/>
  58. <Structure open="seam" close="endseam" header="1" sent_start="1"/>
  59. <Structure open="inject" close="endinject" header="1" sent_start="1"/>
  60. <Structure open="for" close="endfor" header="1" sent_start="1"/>
  61. </STRUCTURES>
  62. <FORMAT>
  63. <DefaultIndent>2</DefaultIndent>
  64. <ResetFormatSymbols>,</ResetFormatSymbols>
  65. <FormatWords>
  66. <FormatWord word="data" indent="6" next_line="1"/>
  67. <FormatWord word="field-symbols" indent="15" next_line="1"/>
  68. <FormatWord word="importing" indent="2" next_line="1"/>
  69. <FormatWord word="exporting" indent="2" next_line="1"/>
  70. <FormatWord word="changing" indent="2" next_line="1"/>
  71. <FormatWord word="exceptions" indent="2" next_line="1"/>
  72. <FormatWord word="tables" indent="2" next_line="1"/>
  73. <FormatWord word="using" indent="6" next_line="1"/>
  74. <FormatWord word="elseif" indent="-2"/>
  75. <FormatWord word="binding" indent="2" next_line="1"/>
  76. </FormatWords>
  77. </FORMAT>
  78. <SYNTAXINFO>
  79. <InfoType id="1" name="Compiler error" clr="-1"/>
  80. <InfoType id="2" name="Performance tip" clr="-1"/>
  81. <InfoType id="3" name="Syntax tip" clr="-1"/>
  82. <InfoType id="4" name="Spelling error" clr="-1"/>
  83. </SYNTAXINFO>
  84. <FILTERICONCAPTION>
  85. <IconIndex id="0" name="Bold"/>
  86. <IconIndex id="1" name="Public"/>
  87. <IconIndex id="2" name="Protected"/>
  88. <IconIndex id="3" name="Private"/>
  89. <IconIndex id="4" name="Class"/>
  90. <IconIndex id="5" name="Variable"/>
  91. <IconIndex id="6" name="Constant"/>
  92. <IconIndex id="7" name="Structure"/>
  93. <IconIndex id="8" name="Function"/>
  94. <IconIndex id="9" name="Type"/>
  95. <IconIndex id="10" name="Method"/>
  96. <IconIndex id="11" name="Keyword"/>
  97. <IconIndex id="12" name="Regular"/>
  98. <IconIndex id="13" name="Screen"/>
  99. <IconIndex id="14" name="Include"/>
  100. <IconIndex id="15" name="Application"/>
  101. <IconIndex id="16" name="Table"/>
  102. <IconIndex id="17" name="Attribute"/>
  103. <IconIndex id="18" name="Relation"/>
  104. <IconIndex id="19" name="Event"/>
  105. </FILTERICONCAPTION>
  106. <COLORSYNTAX>
  107. <TextType id="8" name="Breakpoint" d/>
  108. <TextType id="10" name="Changed indicator" d/>
  109. <TextType id="11" name="Changed and saved indicator" d/>
  110. <TextType id="5" name="Current line" d/>
  111. <TextType id="6" name="Erroneous line" d/>
  112. <TextType id="7" name="Execution" d/>
  113. <TextType id="3" name="Inactive selected text" d/>
  114. <TextType id="4" name="Line number" d/>
  115. <TextType id="13" name="Maximum line length" d/>
  116. <TextType id="2" name="Selected text" d/>
  117. <TextType id="1" name="Selection margin" d/>
  118. <TextType id="21" name="Text highlights" bold="1" italic="0" underline="0" clr="16777215" bkclr="-1"/>
  119. <TextType id="22" name="Text highlights error" bold="1" italic="0" underline="0" clr="255" bkclr="-1"/>
  120. <TextType id="30" name="Normal" d/>
  121. <TextType id="9" name="Read-only mode" d/>
  122. <TextType id="31" name="Comments" d>
  123. <FirstChar>*</FirstChar>
  124. <Conditions>
  125. <Condition start="&quot;" end="\n"/>
  126. </Conditions>
  127. </TextType>
  128. <TextType id="52" name="Keywords" ImageIdx="13" bold="0" italic="0" underline="0" clr="13688896" bkclr="-1">
  129. <Keywords>
  130. <Keyword text="Class-pool"/>
  131. <Keyword text="Function-pool"/>
  132. <Keyword text="Include"/>
  133. <Keyword text="Interface-pool"/>
  134. <Keyword text="Program"/>
  135. <Keyword text="Report"/>
  136. <Keyword text="Type-pool"/>
  137. <Keyword text="bound"/>
  138. <Keyword text="Class"/>
  139. <Keyword text="Class-data"/>
  140. <Keyword text="Class-events"/>
  141. <Keyword text="Class-methods"/>
  142. <Keyword text="Constants"/>
  143. <Keyword text="Contexts"/>
  144. <Keyword text="Data"/>
  145. <Keyword text="Definition"/>
  146. <Keyword text="Endclass"/>
  147. <Keyword text="Endinterface"/>
  148. <Keyword text="Enhancement"/>
  149. <Keyword text="Endenhancement"/>
  150. <Keyword text="Enhancement-section"/>
  151. <Keyword text="End-enhancement-section"/>
  152. <Keyword text="Events"/>
  153. <Keyword text="Field-groups"/>
  154. <Keyword text="Field-symbols"/>
  155. <Keyword text="Implementation"/>
  156. <Keyword text="Interface"/>
  157. <Keyword text="Interfaces"/>
  158. <Keyword text="Local"/>
  159. <Keyword text="Methods"/>
  160. <Keyword text="Parameters"/>
  161. <Keyword text="Private"/>
  162. <Keyword text="Protected"/>
  163. <Keyword text="Public"/>
  164. <Keyword text="Ranges"/>
  165. <Keyword text="Section"/>
  166. <Keyword text="Selection-screen"/>
  167. <Keyword text="Select-options"/>
  168. <Keyword text="Static"/>
  169. <Keyword text="Statics"/>
  170. <Keyword text="spots"/>
  171. <Keyword text="Type-pools"/>
  172. <Keyword text="Types"/>
  173. <Keyword text="During "/>
  174. <Keyword text="End-of-page"/>
  175. <Keyword text="End-of-selection"/>
  176. <Keyword text="Initialization"/>
  177. <Keyword text="Line-selection"/>
  178. <Keyword text="Line-selection"/>
  179. <Keyword text="Load-of-program"/>
  180. <Keyword text="Selection-screen"/>
  181. <Keyword text="Start-of-selection"/>
  182. <Keyword text="Top-of-page"/>
  183. <Keyword text="User-command"/>
  184. <Keyword text="and"/>
  185. <Keyword text="assigned"/>
  186. <Keyword text="At"/>
  187. <Keyword text="Begin"/>
  188. <Keyword text="between"/>
  189. <Keyword text="binding"/>
  190. <Keyword text="block"/>
  191. <Keyword text="byte-ca"/>
  192. <Keyword text="byte-cn"/>
  193. <Keyword text="byte-co"/>
  194. <Keyword text="byte-cs"/>
  195. <Keyword text="byte-na"/>
  196. <Keyword text="byte-ns"/>
  197. <Keyword text="Ca"/>
  198. <Keyword text="Call"/>
  199. <Keyword text="Case"/>
  200. <Keyword text="Catch"/>
  201. <Keyword text="Change"/>
  202. <Keyword text="Check"/>
  203. <Keyword text="Cleanup"/>
  204. <Keyword text="cn"/>
  205. <Keyword text="co"/>
  206. <Keyword text="Continue"/>
  207. <Keyword text="cp"/>
  208. <Keyword text="cs"/>
  209. <Keyword text="Define"/>
  210. <Keyword text="Do"/>
  211. <Keyword text="Each"/>
  212. <Keyword text="Else"/>
  213. <Keyword text="Elseif"/>
  214. <Keyword text="End"/>
  215. <Keyword text="Endat"/>
  216. <Keyword text="Endcase"/>
  217. <Keyword text="Enddo"/>
  218. <Keyword text="Endexec"/>
  219. <Keyword text="Endfor"/>
  220. <Keyword text="Endform"/>
  221. <Keyword text="Endfunction"/>
  222. <Keyword text="Endif"/>
  223. <Keyword text="Endloop"/>
  224. <Keyword text="Endmethod"/>
  225. <Keyword text="Endmodule"/>
  226. <Keyword text="End-of-definition"/>
  227. <Keyword text="Endon"/>
  228. <Keyword text="Endprovide"/>
  229. <Keyword text="Endselect"/>
  230. <Keyword text="Endtry"/>
  231. <Keyword text="Endwhile"/>
  232. <Keyword text="eq"/>
  233. <Keyword text="Exec"/>
  234. <Keyword text="Exit"/>
  235. <Keyword text="first"/>
  236. <Keyword text="Form"/>
  237. <Keyword text="Function"/>
  238. <Keyword text="ge"/>
  239. <Keyword text="gt"/>
  240. <Keyword text="If"/>
  241. <Keyword text="in"/>
  242. <Keyword text="initial"/>
  243. <Keyword text="is"/>
  244. <Keyword text="last"/>
  245. <Keyword text="le"/>
  246. <Keyword text="Leave"/>
  247. <Keyword text="Loop"/>
  248. <Keyword text="lt"/>
  249. <Keyword text="M"/>
  250. <Keyword text="Method"/>
  251. <Keyword text="Module"/>
  252. <Keyword text="na"/>
  253. <Keyword text="ne"/>
  254. <Keyword text="new"/>
  255. <Keyword text="not"/>
  256. <Keyword text="np"/>
  257. <Keyword text="ns"/>
  258. <Keyword text="o"/>
  259. <Keyword text="of"/>
  260. <Keyword text="On"/>
  261. <Keyword text="or"/>
  262. <Keyword text="Perform"/>
  263. <Keyword text="Provide"/>
  264. <Keyword text="requested"/>
  265. <Keyword text="Return"/>
  266. <Keyword text="screen"/>
  267. <Keyword text="Select"/>
  268. <Keyword text="Sql"/>
  269. <Keyword text="Stop"/>
  270. <Keyword text="supplied"/>
  271. <Keyword text="transaction"/>
  272. <Keyword text="Try"/>
  273. <Keyword text="When"/>
  274. <Keyword text="While"/>
  275. <Keyword text="z"/>
  276. <Keyword text="Abs"/>
  277. <Keyword text="Abs"/>
  278. <Keyword text="Abs"/>
  279. <Keyword text="Acos"/>
  280. <Keyword text="Add"/>
  281. <Keyword text="Add-corresponding"/>
  282. <Keyword text="Adjacent"/>
  283. <Keyword text="Aliases"/>
  284. <Keyword text="all"/>
  285. <Keyword text="Analyzer"/>
  286. <Keyword text="Any"/>
  287. <Keyword text="Append"/>
  288. <Keyword text="appending"/>
  289. <Keyword text="as"/>
  290. <Keyword text="ascending"/>
  291. <Keyword text="Asin"/>
  292. <Keyword text="Assign"/>
  293. <Keyword text="assigning"/>
  294. <Keyword text="Assert"/>
  295. <Keyword text="Atan"/>
  296. <Keyword text="Authority-check"/>
  297. <Keyword text="Avg"/>
  298. <Keyword text="Back"/>
  299. <Keyword text="BAdi"/>
  300. <Keyword text="binary"/>
  301. <Keyword text="Bit"/>
  302. <Keyword text="Bit-and"/>
  303. <Keyword text="Bit-not"/>
  304. <Keyword text="Bit-or"/>
  305. <Keyword text="Bit-xor"/>
  306. <Keyword text="Blank"/>
  307. <Keyword text="Bound"/>
  308. <Keyword text="Break-point"/>
  309. <Keyword text="buffer"/>
  310. <Keyword text="by"/>
  311. <Keyword text="c"/>
  312. <Keyword text="case"/>
  313. <Keyword text="Ceil"/>
  314. <Keyword text="Centered"/>
  315. <Keyword text="changing"/>
  316. <Keyword text="Charlen"/>
  317. <Keyword text="Checkbox"/>
  318. <Keyword text="Clear"/>
  319. <Keyword text="client"/>
  320. <Keyword text="Close"/>
  321. <Keyword text="Cnt"/>
  322. <Keyword text="Code"/>
  323. <Keyword text="Collect"/>
  324. <Keyword text="color"/>
  325. <Keyword text="col_negative"/>
  326. <Keyword text="col_normal"/>
  327. <Keyword text="Comment"/>
  328. <Keyword text="Commit"/>
  329. <Keyword text="Communication"/>
  330. <Keyword text="comparing"/>
  331. <Keyword text="component"/>
  332. <Keyword text="Compute"/>
  333. <Keyword text="Concatenate"/>
  334. <Keyword text="Condense"/>
  335. <Keyword text="Control"/>
  336. <Keyword text="Controls"/>
  337. <Keyword text="Convert"/>
  338. <Keyword text="Copy"/>
  339. <Keyword text="Cos"/>
  340. <Keyword text="Cosh"/>
  341. <Keyword text="Count"/>
  342. <Keyword text="Country"/>
  343. <Keyword text="Create"/>
  344. <Keyword text="Currency"/>
  345. <Keyword text="Cursor"/>
  346. <Keyword text="Customer-function"/>
  347. <Keyword text="Database"/>
  348. <Keyword text="Dataset"/>
  349. <Keyword text="date"/>
  350. <Keyword text="Dbmaxlen"/>
  351. <Keyword text="Decimals"/>
  352. <Keyword text="default"/>
  353. <Keyword text="Delete"/>
  354. <Keyword text="Demand"/>
  355. <Keyword text="descending"/>
  356. <Keyword text="Describe"/>
  357. <Keyword text="Detail"/>
  358. <Keyword text="Dialog"/>
  359. <Keyword text="Distinct"/>
  360. <Keyword text="Div"/>
  361. <Keyword text="Divide"/>
  362. <Keyword text="Divide-corresponding"/>
  363. <Keyword text="duplicates"/>
  364. <Keyword text="Dynpro"/>
  365. <Keyword text="Edit"/>
  366. <Keyword text="Editor-call"/>
  367. <Keyword text="encoding"/>
  368. <Keyword text="equal"/>
  369. <Keyword text="Event"/>
  370. <Keyword text="Exceptions"/>
  371. <Keyword text="excluding"/>
  372. <Keyword text="Exp"/>
  373. <Keyword text="Exponent"/>
  374. <Keyword text="Export"/>
  375. <Keyword text="exporting"/>
  376. <Keyword text="Extended"/>
  377. <Keyword text="Extract"/>
  378. <Keyword text="Fetch"/>
  379. <Keyword text="Field"/>
  380. <Keyword text="Fields"/>
  381. <Keyword text="Find"/>
  382. <Keyword text="Floor"/>
  383. <Keyword text="for"/>
  384. <Keyword text="Format"/>
  385. <Keyword text="Frac"/>
  386. <Keyword text="frame"/>
  387. <Keyword text="Free"/>
  388. <Keyword text="from"/>
  389. <Keyword text="Generate"/>
  390. <Keyword text="Get"/>
  391. <Keyword text="greater"/>
  392. <Keyword text="Group"/>
  393. <Keyword text="handler"/>
  394. <Keyword text="hashed"/>
  395. <Keyword text="header"/>
  396. <Keyword text="help-id"/>
  397. <Keyword text="Help-request"/>
  398. <Keyword text="Hide"/>
  399. <Keyword text="Hotspot"/>
  400. <Keyword text="i"/>
  401. <Keyword text="Icon"/>
  402. <Keyword text="id"/>
  403. <Keyword text="Import"/>
  404. <Keyword text="importing"/>
  405. <Keyword text="index"/>
  406. <Keyword text="Infotypes"/>
  407. <Keyword text="Inheriting"/>
  408. <Keyword text="Input"/>
  409. <Keyword text="Insert"/>
  410. <Keyword text="intensified"/>
  411. <Keyword text="into"/>
  412. <Keyword text="Inverse"/>
  413. <Keyword text="Iterator"/>
  414. <Keyword text="Join"/>
  415. <Keyword text="key"/>
  416. <Keyword text="Language"/>
  417. <Keyword text="Leading"/>
  418. <Keyword text="left"/>
  419. <Keyword text="left-justified"/>
  420. <Keyword text="less"/>
  421. <Keyword text="Like"/>
  422. <Keyword text="Line"/>
  423. <Keyword text="Line-count"/>
  424. <Keyword text="Lines"/>
  425. <Keyword text="Line-size"/>
  426. <Keyword text="List-processing"/>
  427. <Keyword text="Load"/>
  428. <Keyword text="lower"/>
  429. <Keyword text="Locale"/>
  430. <Keyword text="Log"/>
  431. <Keyword text="Log10"/>
  432. <Keyword text="Margin"/>
  433. <Keyword text="Mask"/>
  434. <Keyword text="Matchcode"/>
  435. <Keyword text="Max"/>
  436. <Keyword text="memory"/>
  437. <Keyword text="Mesh"/>
  438. <Keyword text="Message"/>
  439. <Keyword text="Message-id"/>
  440. <Keyword text="Min"/>
  441. <Keyword text="Mod"/>
  442. <Keyword text="mode"/>
  443. <Keyword text="Modify"/>
  444. <Keyword text="Move"/>
  445. <Keyword text="Move-corresponding"/>
  446. <Keyword text="Multiply"/>
  447. <Keyword text="Multiply-corresponding"/>
  448. <Keyword text="New-line"/>
  449. <Keyword text="New-page"/>
  450. <Keyword text="Next"/>
  451. <Keyword text="no "/>
  452. <Keyword text="nodes"/>
  453. <Keyword text="No-gap"/>
  454. <Keyword text="No-heading"/>
  455. <Keyword text="Non-unique"/>
  456. <Keyword text="No-scrolling"/>
  457. <Keyword text="No-sign"/>
  458. <Keyword text="No-title"/>
  459. <Keyword text="No-zero"/>
  460. <Keyword text="number"/>
  461. <Keyword text="Numofchar"/>
  462. <Keyword text="occurs"/>
  463. <Keyword text="occurrences"/>
  464. <Keyword text="Open"/>
  465. <Keyword text="optional"/>
  466. <Keyword text="order"/>
  467. <Keyword text="others"/>
  468. <Keyword text="Output"/>
  469. <Keyword text="Overlay"/>
  470. <Keyword text="Pack"/>
  471. <Keyword text="Page"/>
  472. <Keyword text="Parameter"/>
  473. <Keyword text="Pf-status"/>
  474. <Keyword text="places"/>
  475. <Keyword text="position"/>
  476. <Keyword text="Print"/>
  477. <Keyword text="Print-control"/>
  478. <Keyword text="Property"/>
  479. <Keyword text="Put"/>
  480. <Keyword text="Radiobutton"/>
  481. <Keyword text="Raise"/>
  482. <Keyword text="Raising"/>
  483. <Keyword text="Read"/>
  484. <Keyword text="Receive"/>
  485. <Keyword text="redefinition"/>
  486. <Keyword text="ref"/>
  487. <Keyword text="reference"/>
  488. <Keyword text="Refresh"/>
  489. <Keyword text="Reject"/>
  490. <Keyword text="Replace"/>
  491. <Keyword text="Reserve"/>
  492. <Keyword text="Reset"/>
  493. <Keyword text="right-justified"/>
  494. <Keyword text="Rollback"/>
  495. <Keyword text="Round"/>
  496. <Keyword text="rows"/>
  497. <Keyword text="Rtti"/>
  498. <Keyword text="Run"/>
  499. <Keyword text="Scan"/>
  500. <Keyword text="Scroll"/>
  501. <Keyword text="Scroll-boundary"/>
  502. <Keyword text="Search"/>
  503. <Keyword text="Selection-table"/>
  504. <Keyword text="Selector"/>
  505. <Keyword text="separated"/>
  506. <Keyword text="Set"/>
  507. <Keyword text="shared"/>
  508. <Keyword text="Shift"/>
  509. <Keyword text="Sign"/>
  510. <Keyword text="Sin"/>
  511. <Keyword text="single"/>
  512. <Keyword text="Sinh"/>
  513. <Keyword text="Size"/>
  514. <Keyword text="Skip"/>
  515. <Keyword text="Sort"/>
  516. <Keyword text="sorted"/>
  517. <Keyword text="Specified"/>
  518. <Keyword text="Split"/>
  519. <Keyword text="Sqrt"/>
  520. <Keyword text="Stamp"/>
  521. <Keyword text="standard"/>
  522. <Keyword text="starting"/>
  523. <Keyword text="Strlen"/>
  524. <Keyword text="Structure"/>
  525. <Keyword text="Submit"/>
  526. <Keyword text="Subtract"/>
  527. <Keyword text="Subtract-corresponding"/>
  528. <Keyword text="Sum"/>
  529. <Keyword text="Summary"/>
  530. <Keyword text="Supply"/>
  531. <Keyword text="Suppress"/>
  532. <Keyword text="Symbol"/>
  533. <Keyword text="Syntax-check"/>
  534. <Keyword text="Syntax-trace"/>
  535. <Keyword text="System-call"/>
  536. <Keyword text="System-exceptions"/>
  537. <Keyword text="table"/>
  538. <Keyword text="Tables"/>
  539. <Keyword text="Tan"/>
  540. <Keyword text="Tanh"/>
  541. <Keyword text="task"/>
  542. <Keyword text="Text"/>
  543. <Keyword text="Textpool"/>
  544. <Keyword text="Time"/>
  545. <Keyword text="times"/>
  546. <Keyword text="title"/>
  547. <Keyword text="Titlebar"/>
  548. <Keyword text="to"/>
  549. <Keyword text="Transfer"/>
  550. <Keyword text="Translate"/>
  551. <Keyword text="transporting"/>
  552. <Keyword text="Trunc"/>
  553. <Keyword text="type"/>
  554. <Keyword text="Uline"/>
  555. <Keyword text="under"/>
  556. <Keyword text="unique"/>
  557. <Keyword text="Unit"/>
  558. <Keyword text="Unpack"/>
  559. <Keyword text="up"/>
  560. <Keyword text="Update"/>
  561. <Keyword text="upper"/>
  562. <Keyword text="using"/>
  563. <Keyword text="value"/>
  564. <Keyword text="Value-request"/>
  565. <Keyword text="Wait"/>
  566. <Keyword text="Where"/>
  567. <Keyword text="Window"/>
  568. <Keyword text="with"/>
  569. <Keyword text="With-title"/>
  570. <Keyword text="Work"/>
  571. <Keyword text="Write"/>
  572. <Keyword text="x"/>
  573. <Keyword text="xor"/>
  574. <Keyword text="Xstrlen"/>
  575. <Keyword text="zone"/>
  576. </Keywords>
  577. </TextType>
  578. <TextType id="32" name="Numbers" d/>
  579. <TextType id="55" name="Operators" ImageIdx="12" bold="0" italic="0" underline="0" clr="16777215" bkclr="-1">
  580. <Separators>
  581. <Separator text="."/>
  582. <Separator text=":"/>
  583. <Separator text=","/>
  584. <Separator text="("/>
  585. <Separator text=")"/>
  586. </Separators>
  587. <Keywords>
  588. <Keyword text="="/>
  589. <Keyword text="=?"/>
  590. </Keywords>
  591. </TextType>
  592. <TextType id="33" name="Strings" d>
  593. <FirstChar/>
  594. <Conditions>
  595. <Condition start="'" end="'"/>
  596. <Condition start="`" end="`"/>
  597. </Conditions>
  598. </TextType>
  599. <TextType id="40" name="Syntactical error" d/>
  600. <TextType id="70" name="Token operator" bold="0" italic="0" underline="0" clr="8421504" bkclr="-1">
  601. <Separators>
  602. <Separator text="-"/>
  603. <Separator text="-&gt;"/>
  604. <Separator text="=&gt;"/>
  605. <Separator text="~"/>
  606. </Separators>
  607. </TextType>
  608. <TextType id="20" name="User region" d>
  609. <Conditions>
  610. <Condition start="&quot;$." end="\n"/>
  611. </Conditions>
  612. </TextType>
  613. </COLORSYNTAX>
  614. </XMLConfigSettings>

 

2. abap_user.xml

  1. <?xml version="1.0"?>
  2. <?xml-stylesheet type="text/xsl" href="lang_user.xslt"?>
  3. <XMLConfigSettings>
  4. <FILEINFO>
  5. <Author>Mr Black</Author>
  6. <Type>LangUser</Type>
  7. <Language>ABAP</Language>
  8. <Desc>User specific settings for ABAP</Desc>
  9. </FILEINFO>
  10. <EXPANDS>
  11. <Expand key="case">
  12. <Descr>Case (§)</Descr>
  13. <Text>CASE |.\nWHEN .\nWHEN .\nWHEN OTHERS.\nENDCASE.</Text>
  14. </Expand>
  15. <Expand key="region">
  16. <Descr>Region (§)</Descr>
  17. <Text>"$. Region %Region Name%\n%SurroundedText%\n"$. Endregion %Region Name%</Text>
  18. </Expand>
  19. <Expand key="loop">
  20. <Descr>Loop (§)</Descr>
  21. <Text>LOOP AT |.\n%SurroundedText%\nENDLOOP.</Text>
  22. </Expand>
  23. <Expand key="define">
  24. <Descr>Define (§)</Descr>
  25. <Text>DEFINE |.\n%SurroundedText%\nEND-OF-DEFINITION.</Text>
  26. </Expand>
  27. <Expand key="try">
  28. <Descr>Try (§)</Descr>
  29. <Text>TRY |.\n%SurroundedText%\nCATCH .\n\nENDTRY.</Text>
  30. </Expand>
  31. <Expand key="*--">
  32. <Descr>*-------...</Descr>
  33. <Text>*--------------------------------------------------------------------*</Text>
  34. </Expand>
  35. <Expand key="ife">
  36. <Descr>If (§) Else</Descr>
  37. <Text>IF |.\n%SurroundedText%\nELSE.\n\nENDIF.</Text>
  38. </Expand>
  39. <Expand key="while">
  40. <Descr>While (§)</Descr>
  41. <Text>WHILE |.\n%SurroundedText%\nENDWHILE.</Text>
  42. </Expand>
  43. <Expand key="***">
  44. <Descr>***.....</Descr>
  45. <Text>**********************************************************************</Text>
  46. </Expand>
  47. <Expand key="if">
  48. <Descr>If (§)</Descr>
  49. <Text>IF |.\n%SurroundedText%\nENDIF.</Text>
  50. </Expand>
  51. <Expand key="do">
  52. <Descr>Do (§)</Descr>
  53. <Text>DO | TIMES.\n%SurroundedText%\nENDDO.</Text>
  54. </Expand>
  55. </EXPANDS>
  56. </XMLConfigSettings>

 

Create a backup of your original files if you ever want to reset it and copy these files into

C:\Users\[[YOUR USER]]\AppData\Roaming\SAP\SAP GUI\ABAP Editor\

Above code  does the color setup for your editor. After you copied those, you can start SAPgui again, open any program using SE38 and you’ll see the new colors.

Change your font to Consolas Enjoy

Summary of SAP Screen Personas at SAPPHIRE 2016

$
0
0

Another year, another SAPPHIRE NOW and ASUG Annual Conference. Once again, I returned from Orlando excited, energized, and exhausted. In this blog, I’ll share my quick summary of the event and the key people that made it a success.

 

IMG_2898 - scn.JPGThank you to the customers who presented and partners that hosted sessions in their booth

  • Nestle - Francis Rodrigues shared the story of how he started with SAP Screen Personas for a single business and now has deployed it around the world.
    Tip: involve the end-users and iterate.
  • Cargill - Kari Ingebritsen and Mike Berg discussed Cargill’s user experience transformation, including some great productivity metrics.
    Tip: simplify the business process first, before touching any screens.
  • Convergent IS - Shaun Syvertsen talked about how he uses SAP Screen Personas with SAP S/4HANA to simplify complex scenarios.
    Tip: use a combination of SAP Screen Personas and Fiori for a coherent user experience
  • U.S. Army - Daniel Trudgett and Daniel Parker described how they used SAP Screen Personas to make an SAP system match the look and feel of an existing tool.
    Tip: have a clear target and gather user input to ensure you are meeting the goals
  • PwC - Abhinav Gupta hosted a standing room only session in the PwC booth on when to use SAP Screen Personas or SAP Fiori or both.
  • TCS - Vikram Shankar and Pranay Nayyar held an intimate session in the TCS meeting area in which we discussed how to build Fiori-inspired screens with SAP Screen Personas

 

The slide decks for ASUG sessions can be found on the ASUG website at bit.ly/asug2016_slides.

 

IMG_2895.JPGThe UX pod was packed

Hundreds of people visited the demo pod we shared with the Fiori 2.0 team. Demo rock star Danny George was able to meet the demand for SAP Screen Personas information tirelessly throughout the show. We are so excited that he is part of our extended team.

 

We also had full participation in our usability testing lab, in which participants had a chance to try several exercises on SAP Screen Personas 3.0 SP3 under the guidance of Sylvia Barnard and Ashley Tung.

 

In the sessions, UX booth, and elsewhere on the show floor, there was much excitement from customers and partners about:

 

As with most SAP events, we always hear some interesting things. Here is what we heard and the reality.

  • There are still many people that had not heard of SAP Screen Personas. If you are reading this blog, please send it to three or more colleagues, ideally at least one outside your organization.
  • Some people still had lingering questions about the long-term viability of SAP Screen Personas. We just released a new service pack and are continuing to innovate, including close collaboration with the S/4HANA team. If you hear rumors to the contrary or have additional questions, please reach out to me directly.
  • Bill’s keynote focusing on empathy reinforced the approach many of our customers are taking with design thinking, which starts by finding the problems most important to your users.

 

PPP19.pngFor a video analysis by Sebastian Steinhauer, Tobias Queck and me about the customer sessions at SAPPHIRE NOW and the ASUG Annual Conference, please watch our Productivity Power Play episode.

 

Many people requested a list of resources where they can learn more information about SAP Screen Personas. Here is the content of the slide we showed in several of our sessions.

Product Page

www.sapscreenpersonas.com

Getting Started resource page

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

OpenSAP course

https://open.sap.com/courses/sps1

Productivity Power Play (video series)

http://videos.personas.help

SAP Press e-book

https://www.sap-press.com/using-sap-screen-personas_3975/

Download (part of NetWeaver license)

https://service.sap.com

 

Thank you for attending SAPPHIRE NOW and the ASUG Annual Conference. Hope to see you next time or at TechEd in the fall.

 

For the SAP Screen Personas product team, Peter Spielvogel.

Personas Events in the UK

$
0
0

A litte over three years ago I attended an SAP Screen Personas customer day organised by SAP UK ( Thoughts on SAP Screen Personas after event in London). Much of the content was delivered by Peter Spielvogel and Tobias Queck, and it was that day that sold me on Personas as a product. One of the most important parts of the day for me was the opportunity to get some hands-on time with Personas, to take one or two of the SAPgui transactions that I know our users had issues with and see what I could do with them. Way back then, Personas was a much simpler product than it is today, but between the hands-on session and what Peter and Tobias said, I was sold both on the product and on their vision for what it would become. The rest, as they say, is history

 

For the last couple of years I've been trying to get SAP UK to arrange a repeat event. We've got close a couple of times but always something has got in the way. Finally, I'm pleased to say, there's going to be another Personas Day in the UK! Peter and Tobias have very kindly offered to come over and help me with a couple of events at the end of June.

 

Firstly there's a UK SAP User Group User Experience SIG meeting on June 27th, at which they're giving a couple of sessions. This event is for User Group members only, I'm afraid. If you are a member you can book a place here: https://www.sapusers.org/events/1273/20160627-user-experience-sig. The agenda and meeting details are all on that page.

 

If you are not a UK User Group member, don't feel left out - the best is yet to come. The following day, June 28th, Peter and Tobias are going to run a full Personas day with exercises and hands-on access to a Personas system throughout the day. It will cover everything from basic use through to more advanced scripting, building Fiori flavours and integrating to the Fiori launchpad. This event is open to all, but places are limited. Please complete this form to reserve a place - SAP Screen Personas Training Day. There is no cost for attending the day, but lunch and refreshments are not included (sorry). There are catering outlets nearby for food and coffee.

 

Both events are being held here at the University of Warwick. If you are attending both and staying over, or arriving on Monday evening for the Personas Day, we will all get together for dinner in a nearby pub. You will be very welcome to join us - please indicate this on the booking form so I can be sure to reserve enough space. Again, sorry but the cost of this not included.

 

I'm very grateful to Peter and Tobias for their willingness to support these events. I'm really looking forward to them.

Embedding Google Map on SAP Personas 3.0

$
0
0

The idea is to bring the area of the Sold to party from the Sales and Distribution cycle on the Google map

 

so that the user can know exactly where the location of the area and also show the top areas in Sales and distribution on the Map.

 

        For this purpose we build a Custom UI5 table and populate the data from the SD Cycle. When the user selects a document from the table and clicks on the “Show on map” button the area is shown as a Marker on the map. If the user wants to go to a particular place he/she can click on the “Take me there” button then the QR Code gets generated and user can scan the QR Code on a Smartphone or Tablet, it takes the user to the desired location using the Google maps.


When the Flavor is Loaded.

Onloading.JPG

On selecting a row and Clicking the button "Show on Maps".

Maps.JPG

On selecting a row and Clicking the button "Take me there!!"

QR Code.JPG

Three things has to be done to bring this

  1. Creating Remote Function Call in ECC using ABAP
  2. Creating Flavor with Custom Table
  3. Embedding Maps and QR Code

 

Creating Remote Function Call in ECC using ABAP

 

1.Details RFC -  ZRFC_COUNT_TEST

 

Create a RFC to get the data from the Table VBAK to prepare a Custom table using UI5 and Html Viewer.

Source Code:

SELECT * FROM VBAK INTO CORRESPONDING FIELDS OF TABLE DETAILS1 where ernam = user and VBTYP = doc_type

Tables Parameter:

 

2. Select City - ZRFC_CITY

 

Write a RFC to fetch the correct city for the desired Sold-to-Part in the Document

Source Code:

TABLES:KNA1.

data : city1 type STANDARD TABLE OF KNA1,

      wa_city TYPE kna1.

 

SELECT * from KNA1 into CORRESPONDING FIELDS OF wa_CITY where KUNNR = stp.

  ENDSELECT.

city = wa_city-ort01.

Parameters:

 

 

Creating Flavor with Custom Table


     This part has been beautifully done here Custom tables in Personas (take 2) by Steve Rumsby. I am adding few functionalities hope he doesn't get mad at me and also thank you Steve for wonderful post.

     Add a event listener to the Custom UI5 Table

 

var oTable2 = new sap.ui.table.Table({

     title: "Sales Order Details",

     visibleRowCount: 15,

     columnHeaderHeight: 30,

     selectionMode: sap.ui.table.SelectionMode.Single,

rowSelectionChange: function(oEvent){

var path = oEvent.getParameter("rowContext");

gdata=oModel2.getProperty("KUNNR", path);

document.getElementById("test").innerHTML=gdata;}

});

 

We are getting the value of the SOLD-TO-PARTY i.e KUNNR field and updating a hidden <p> element named test for the map to fetch the value.

 

</div><p hidden id="test"></p><div id="button">


Make Sure the Cross domain Error does not occur setting the value of "document.domain" for the HTML viewer.

 

Embedding Maps and QR Code

 

     This is the trickiest part first lets build the map.

Map:


     Fetch the sold to party stored in the hidden <p> tag.


var stp = window.document.getElementById("wnd[0]/usr/htmlViewerPersonas_1460964388149").contentDocument.getElementById('test').innerHTML;


     Get the Sold to party of the selected row from the UI5 Custom table and using the RFC get the corresponding Place of the STP.


var rfc = session.createRFC("ZRFC_CITY");

rfc.setParameter("STP", stp);

rfc.requestResults(JSON.stringify(["CITY"]));

rfc.send();

var city = rfc.getResult("CITY");


Build the Map and pass the value of the city to display it in the map.


Note : To use the Map service API Key is needed

You can Sign Up using the link Sign Up for the Google Maps AP


function initMap() {

        var map = new google.maps.Map(document.getElementById("map"), {

          zoom: 8,

          center: {lat: -34.397, lng: 150.644}

        });

        var geocoder = new google.maps.Geocoder();

 

                 geocodeAddress(geocoder, map);

             }

//Rest of the code goes for selecting the place and placing the marker


After building the HTML File in a variable update the content of the HTML Viewer.

Attach the script to the Script Button.

 

QR CODE:


Fetch the sold to party stored in the hidden <p> tag.


var stp = window.document.getElementById("wnd[0]/usr/htmlViewerPersonas_1460964388149").contentDocument.getElementById('test').innerHTML;


Use the same RFC above to get the value of the City.

 

Build the URL for the google map as below

 

var url = "https://www.google.co.in/maps/dir/"+”end_users_location”+”/”+city+"/data=!4m2!4m1!3e4";

 

Update the content of a hidden HTML Viewer to by calling a QR Generator API with URL specified.

 

ID_OF_Hidden_HTML_Viewer.url="https://api.qrserver.com/v1/create-qr-code/?size=300x300&data="+url;

 

Now show the hidden HTML Viewer and a script button behind to close(Hide) the QRCode.

 

Details.JPG


And that's all Everything is set now.


You can now view the place in Maps and also scan qr code to open the Directions in your Smartphone or Tablet.


Waiting for SP03 to be installed to explore more and also for making Personas run on Mobile and Tablets.


My next blog will be on Highest Area of sales area to the lowest on the Google Map with the function to chat directly from the flavor and use Google Analytics on Flavor to view how many Active users are present and what events get triggered and rendering time of the flavor and much more features.


Maps Area.JPG

Preview of Google Analytics


google analytics.JPG





Gift or A Curse! - Error DTP Behavior in SAP 7.4 version

$
0
0

Hi All,


This blog is about error records correction in SAP GUI 7.4 version. We recently migrated our systems to higher version of GUI(7.4 SP 14 ) and as expected something new hitting up the overall process of handling error records. Hope you justify it logically correct or incorrect:


Consider we have below requests in Error stack:

PIC1.jpg

Request 19400.319 : Consist of 2 records in Error stack.

Below is the main standard DTP* request and we see that total no. of records in Error Stack are 52 (2 in 19400.319 and rest 50 in other requests).Pic2.png

And the Error handling settings are: (Similar to Update Valid records , No reporting (Request Red) in lower versions )

PIC3.jpg

 

Now suppose you have corrected all the error stack and triggered Error DTP. We will get warnings with only 50 records updated in target table. What about the Request 19400.319 ?

PIC4.png

Why warnings? Let’s explore it: Just press the long text button and you get your answer.Only request prior to current failed request are updated even though current request in error stack is edited and saved correctly !

PIC5.png

 

That mean you have to make your Main standard DTP status as Green first which is something new in 7.4. Whereas in lower versions we can run error DTP which will update the records of the current failed DTP and prior to current request in Error Stack. Later we make the current DTP status as green so that  next process chain steps should be applicable for the error stack records and main DTP standard  records. (Consider scenario of compression!).


In order to solve this (SAP suggest as per above screen-print):


Step 1 : Make the Main DTP as Green (Off coarse manually).

Step 2 : Correct Error Stack.

Step 3 : Run the Error DTP to update records from Error Stack.


Logically this does not exist , but we have in 7.4 !


Hope this help you to improve the standard process in error handling and save extra efforts required for the missed Error stack records as these are processed quite later than the standard DTP.


*DTP : Data Transfer Process


Best,

Praveen


Chat, Maps & Google Analytics on Personas 3.0

$
0
0

     Hi everyone, this blog is with reference to my previous blog Embedding Google Map on SAP Personas 3.0 ,the POC requirement was to bring the Highest area of sales to lowest area of sales in the Google map with the number denoted on the marker of the map. To use Maps on Personas 2.0 Tamas Hoznek has written a great blog on this How to embed Google Maps into a Personas 1.0 / 2.0 flavor? ,Thanks Tamas your blog was an inspiration for me when I got struck while trying to complete this.

 

     I have also focused on the chat feature directly from the Personas Flavor, it is very useful for the speech and hearing impaired persons who is working on SAP Screen Personas. They can directly chat with the admin team, basis team or the person who supports the flavor.

 

     Next is the Google Analytics, on any UI / UX it is important to know how the end user uses the UI for the developers to develop the UI on a most suited way for the end user so by using google analytics we can know exactly how many active users are using the Flavor on the real time, know the rendering time for the flavor, bounce rate and many more data can be gained.

 

 

     First for bringing Area of sales in Google maps the first thing is we need to get the data from the back-end table, VBAK is the table that contains all the

Sales and Distribution data. Next is to create a ZTABLE which contains the Latitude and Longitude data of the Sold-to-party area.

 

Creating ZTABLE:

 

     Go to SE11 Transaction and create a table named ZLOCATION

 

On the fields create three fields as below

Save and activate the Table.

 

Next, To populate the Table Go to SE37 and execute the Function Module SE16N_INTERFACE and give the I_TAB Parameter as Your table name i.e LOCATION and I_EDIT as X

 

Now you can enter the data into the table.There are many ways to populate the data i have used one of the methods.

 

These are the various Sold to party used in the organization.The 2nd Column is the Latitude and the 3rd is the Longitude.

 

CreatingRFC:


Before creating a RFC create a structure named ZSALES_AREA as below and activate it

Save and activate the structure.

 

      We need the data of which area ranks 1st and which area the next to build the map according to data. For this purpose we are using RFC


Z_SALES_AREA:

     Create a RFC and on the tables parameter define a table which can be used as both export and import parameter.

     On the Source code Write the logic to calculate the number of times the sold to party has used in the VBAK table

        

  DATA : total   TYPE float,
it_vbak TYPE TABLE OF vbak,
wa_vbak TYPE vbak,
it_kna1 TYPE TABLE OF kna1,
wa_kna1 TYPE kna1,
count   TYPE float VALUE 585,
wa_sales_area TYPE zsales_area.

 

  SELECT COUNT( * ) FROM vbak INTO total.

  SELECT * FROM vbak INTO CORRESPONDING FIELDS OF TABLE it_vbak.

  SELECT * FROM kna1 INTO CORRESPONDING FIELDS OF TABLE it_kna1.

 

  LOOP AT it_kna1 INTO wa_kna1.

LOOP AT it_vbak INTO wa_vbak.
IF wa_kna1-kunnr = wa_vbak-kunnr.
count = count + 1.
ENDIF.
ENDLOOP.
TRANSLATE:  wa_kna1-ort01  TO UPPER CASE.
write: wa_kna1-ort01, ' '.
SELECT longitude latitude FROM zlocation INTO CORRESPONDING FIELDS OF wa_sales_area where city = wa_kna1-ort01.
ENDSELECT.
wa_sales_area-city = wa_kna1-ort01.
wa_sales_area-doc_sold = count.
count = 0.
APPEND wa_sales_area TO it_sales_area.

  ENDLOOP.

ENDFUNCTION.


Calling this RFC in flavor and building map:


     Call the above RFC in the Flavor to get the data.

var rfc = session.createRFC("ZRFC_SALES_AREA");

rfc.requestResults('["IT_SALES_AREA"]');

rfc.send();

var sale = rfc.getResult("IT_SALES_AREA");

var so = JSON.parse(sale);

 

Write a function to sort the data according to the sales and pass the JSON model to it.

 

var sort_by = function(field, reverse, primer){

 

   var key = primer ?

       function(x) {return primer(x[field])} :

       function(x) {return x[field]};

 

   reverse = !reverse ? 1 : -1;

 

   return function (a, b) {

       return a = key(a), b = key(b), reverse * ((a > b) - (b > a));

     }

}

so.sort(sort_by('DOC_SOLD', true, parseInt));

 

Next, we have to build the maps using the data fetched in a variable and update the content of the HTML Viewer.

 

I have attached the file below for building the Map "Gmaps.txt"

 

Embedding Chat in Flavor.


There are different chats API's available I have used the olark chat Olark live chat. We have to first register and get the site reference key it's for free.

 

I have embedded it in the Maps HTML Viewer before the  </body> tag so that it appears on the bottom right corner of the window.

 

I have also attached the file for embedding chats in Flavor "Chats.txt"

 

Using Google Analytics:


      Google Analytics also needs to be registered first to get the API Key for using it

Google Analytics - Mobile, Premium and Free Website Analytics – Google

 

Sign Up and get the API key.

After that attach the code in the file "GAnalytics.txt" to the onload event

 

And that's done you can now use the google analytics using the mail address registered.

 

Both the Chats and Google Analytics use Asynchronous JavaScript so there is no compromise in Performance of the Flavor.

 

Thank You all, Hope I have shared something Useful.

Productivity Power Play video series - Usability Testing Drives Product Improvement

$
0
0

Usability testing allows software developers, product managers, and designers to validate that the software they created aligns with user expectations. It is an opportunity to watch how people of varying skill levels interact with a product, usually by performing a defined series of tasks with minimal instructions. Usability testing can often reveal features that are not as intuitive as the developers thought.

 

In this latest version of Productivity Power Play, Sylvia Barnard discusses the importance of usability testing, how we use this customer feedback to improve SAP Screen Personas, and how you can do your own usability testing.

 

PPP21_Sylvia_topic.png

 

She shows a specific example of how usability testing caused us to change several buttons in SAP Screen Personas to avoid universal confusion among the testers.

 

Watch Productivity Power Play episode 21.

 

See all the episodes.

 

For the SAP Screen Personas product team, Peter Spielvogel.

Voice Interaction in SAP Personas Flavor

$
0
0

    Hi everyone, This blog is about integrating Voice recognition in SAP Screen Personas Flavor, so that the end user can provide input through Voice command instead of keyboard press or mouse click.

 

    I have used Web kit speech recognition which is a API available for Google chrome 25 and above. This can make the Personas Flavor voice driven.

 

     I have named the flavor as "Persona". She can also reply you back using the speech synthesis. For example when you say "Good Morning" she can reply you back with a suitable answer after checking current time in your location using Javascript.

   

     The user can give voice commands for Persona to close any popup or enter data in text field or even for launching a particular flavor and transaction.

 

 

    Voice Interaction in SAP Personas Flavor

 

     Sorry guys forgot to add the part for voice command being wrong. When the voice command turns to be wrong or not understandable Persona apologizes for not understanding the command, repeats the command which she has understood and asks to repeat the command again by the user. It would be something like "Sorry I cannot understand *your_command*.Can you repeat it again please."

 

1.Create a Javascript file

          Create a JavaScript file and write the function for selecting the transaction and return the transaction code.Save the file in ".js" format.

I have attached the file "check_Transaction_IDs" rename the file to ".js" format.

    The JS file contains code like below. I have given only the logic below but attached the completed file


transaction_check = function(str1,str2){

  var t;

switch(str1){

                    case 'CREATE':

                                              switch(str2){

                                                                  case 'INQUIRY':

                                                                  t="VA11";

                                                                  break;

                                                                  }

                      break;

                      case 'CHANGE':

                                              switch(str2){

                                                                  case 'INQUIRY':

                                                                  t="VA12";

                                                                  break;

                                                                }

                      break;

                      case 'DISPLAY':

                                              switch(str2){

                                                                  case 'INQUIRY':

                                                                  t="VA13";

                                                                  break;

                                                                  }

                      break;

                    }

return t;

}

 

          After this upload the file in the system using the transaction "/n/personas/admin".

Create resource.JPG

Then after uploading note the GUID for using the script in Personas Flavor

guid.JPG

2.Welcome message on Flavor Load

    The next step is bringing welcome message when the flavor gets loaded for this purpose we check weather the flavor is loaded the first time or not and then proceed further.

    The user name is stored in a variable called name using the method session.info.user.

   

    var name = session.info.user;

 

    To check weather the flavor is loaded the first time we use the session variable. We check weather the session variable is empty if its empty then the flavor is loaded the first time and so perform the necessary actions and set the session variable value.

 

    if(session.utils.get("check") != "first"){

    //write the code be to perform when the flavor is loaded the first time in the session

}

 

    Next we have to produce the voice for Persona to welcome the user for this purpose we use SpeechSynthesisUtterance class available in chrome. This speech synthesis does not need any external permission need. It works fine without any permission with the help of speechSynthesis object.

    we should create an object for the SpeechSynthesisUtterance class and set the language.


    su = new SpeechSynthesisUtterance();

    su.lang = "en";

 

    The next step is we should get the JSON array with all supporting voices and assign a voice to Persona. Even though the voice is not assigned to persona a default voice is set to it.

    The next important thing is we should build the string for making Persona speak that string, we use the username which is stored in the variable called "name" and welcome the user with nice greetings.

 

    su.text= "Hi "+name+". I am Persona, your Personal Voice guide";

    speechsynthesis.speak(su);

 

    Make sure you set the session variable after completing all these steps so that Persona does not welcome the user each time a refresh occurs or change of flavor occurs, you can the value of the variable "check" to any string.

 

    session.utils.put("check","first");


3.Performing the interaction with the flavor:


    First get the time of the client location as in his system using the Javascript and update the greet word according to the current time as Good morning or Noon or Evening.


    var greet ='';

    var time = new Date();

    var hour = time.getHours();

    if(hour < 12 && hour >= 6)greet = "GOOD MORNING";

    else if (hour >= 12 && hour <= 16)greet = "GOOD NOON";

    else greet = "GOOD EVENING";


    Create an object for the class webkitSpeechRecognition and specidy the variable "lang" of the class as "en-US" so as to recognize the the language spoken as US English.


    var recognizer = new webkitSpeechRecognition();

    recognizer.lang = "en-US";

 

  In the video which i have shown above the connection is not an secured i.e Http connection so for time the user needs to click the allow button, but if the connect is secured i.e Https the script will not ask for authorization each time, it is a one time process if it is a secured( Https) connection and the user need not press on allow each time.

 

    Also create the object for Speech Synthesis as specified above during the welcoming the user.

 

    su = new SpeechsynthesisUtterance();

    su.lang = "en";

 

    If needed specify the slang voice which needs to be Spoken in the variable called "voice" when Persona speaks.I have use two voices one on US slang the female and another is German slang the Male.

 

    var voice = speechsynthesis.getVoices();

    su.voice=voice[2];

 

    The next step is to get the result as the user speaks on the microphone and store in a object when the user stops speaking the result has to be processed and actions have to be performed accordingly.For this purpose we use the even onresult and write the function.

 

    recognizer.onresult = function(event) {

    //Get the voice and convert into object as soon as the user stops speaking

    if (event.results.length > 0) {

    var result = event.results[event.results.length-1];

    }}


    Process the result and perform the action once the user has stopped speaking.


    if(result.isFinal) {

    //Perform actions

    }


4. Colloquial Interaction with Persona


    Get the string from the result object and convert the string to Uppercase so that it can be used to perform actions.

   

    var check = result[0].transcript;

    check = check.toUpperCase();

 

    If the user says Good Morning or Good Evening or Goon Noon Check with the variable given above and reply the user accordingly. If its a Hi, Hello or How are you process it accordingly using suitable cases.

     We can change the voice by checking the session variable and updating the variable call voice in the class using the object "su".

 

if(check.indexOf("CHANGE VOICE") != (-1)||check.indexOf("CHANGE YOUR VOICE") != (-1) || check.indexOf("I DONT LIKE YOUR VOICE") != (-1) ||check.indexOf("SPEAK IN MALE VOICE") != (-1) ||check.indexOf("SPEAK IN FEMALE VOICE") != (-1)){

  if(session.utils.get("g_voice") == null)

  {session.utils.put("g_voice","4");

  su.voice = voice[4];

  su.text = "Yup, Do I sound good now?";}

  else{

  var num = parseInt(session.utils.get("g_voice"));

  if(num==4){

  su.voice = voice[2];

  session.utils.put("g_voice","2");

  su.text = "Do I sound sweet now ";

  }

  else{

  su.voice = voice[4];

  session.utils.put("g_voice","4");

  su.text = "Is it fine now";

  }

  }

  speechsynthesis.speak(su);

  }

 

     To Play the music define the variable in form of audio as

var snd = new Audio(`data:audio/wav;base64,//uQZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAEv8Aj....`);

     As from my organisation i do not have authorization to access the audio links i gave it in the form of base64 format or else you can give the link inside the audio as


var snd = new Audio(*link to mp3 file*);


     To play and pause the audio use the methods snd.play() and snd.pause().

 

5. Performing actions on Personas elements using voice commands:

 

    The main objective is to perform actions on the personas objects and also execute scripts using the voice commands, for this we get the result in the type of the string and use various validations to know what action needs to be performed.

 

Start a transaction using the voice command:

    We have to include the JavaScript library which we have uploaded in the system the purpose of uploading it is that the function in the script can be used globally on any of the flavor we create.

         

    session.utils.include("0021F60F04171EE68CF23D6564B061FE",false);


    The second parameter is specified as false because it needs to be executed only when it called and not before. Write the function to to execute the function on the above file and get the transaction code accordingly.

   

  var num = check.indexOf(" TRANSACTION ");

  check = (check.slice((num+12),check.length)).trim();

  var value = check.split(" ");

  var t_e = transaction_check(value[0],value[1]);

  session.callTransaction(t_e);

   

    And in the end we need to refresh the screen so that the changes in the screen gets updated.

  sap.personas.scripting.executeScriptInternal({src: ''});

   

Execute a Script and press a personas button:

    To execute a personas script we need to follow the same above given logic with the personas function to perform the required function.

   

  su.text = "Hang on, Running the Sales and Distribution process with default values";

  speechsynthesis.speak(su);

  session.utils.executeScript("wnd[0]/scrptPersonas_4");

  sap.personas.scripting.executeScriptInternal({src: ''});

     

Translate the flavor:

    To perform the translation the flavor has to be already translated using the /n/admin/personas translation feature. The trick is to change the url with the desired language in the parameter sap-language.

    First get the determine which language to be changed to and update or construct the url. After that change the url so the flavor gets rendered in the desired url.I have the flavor available in four different languages German, French, Spanish, English.

   

  var translate = function(){

  if(check.indexOf("TRANSLATE") != (-1) || check.indexOf("CHANGE THE LANGUAGE") != (-1)|| check.indexOf("CHANGE LANGUAGE") != (-1)){

  var  url = "http://hostname:port/sap/bc/personas?sap-client=600&sap-language=";

  var value = check.split(" ");

  for(var i=0;i<value.length;i++)

  {console.log(value[i]);

  switch(value[i])

  {

  case "GERMAN":

  url+="DE";

  break;

  case "FRENCH":

  url+="FR";

  break;

  case "SPANISH":

  url+="ES";

  break;

  case "ENGLISH":

  url+="EN";

  break;

  default:

  url+="EN";

  break;

  }

  }

  window.top.location=url;

  }};


Enter Data using Voice Command:

     To enter the data check the index of the label name and replace the unnecessary sub-string and paste the data in the relevant input fields.


  var data = function(check){

  if(check.indexOf("SALES ORGANISATION") != -1){

  var num = check.replace( /^\D+/g, '');

  session.findById("wnd[0]/usr/ctxtPersonas_1457421438811").text = num;

  sap.personas.scripting.executeScriptInternal({src: ''});

 

  su.text = "Okay. Whats Next?";

  speechsynthesis.speak(su);

  setTimeout(function(){recognizer.start();},2000);

  }

    

     If the input field has to be deleted or cleared it be like below

 

     else if(check == "CLEAR ALL" || check == "CLEAR"){

  session.findById("wnd[0]/usr/ctxtPersonas_1457421438811").text="";

  //Clear rest of the input fields

  sap.personas.scripting.executeScriptInternal({src: ''});

  su.text = "Okay, Clean as a new slate now";

  speechsynthesis.speak(su);

  }

 

 

And that's it everything is set now and the user can interact with Persona and she will perform what ever action you ask her to perform.


SAP Personas is evolving in a steady manner I hope so sooner or later it will be enabled on mobile device and tablets, during that time also this feature work flawlessly as it requires only chrome to run.

 

Thank You for reading the blog. Hope I have shared something interesting and useful.

UK Personas Training Day - event report

$
0
0

Over the last few years I've spoken at numerous conferences and other events about SAP Screen Personas and our use of it here at the University of Warwick. At the start of all of these talks I always ask for a show of hands to see who has used, or even seen, Personas before. Most of the time, a large proportion of the audience has little or no knowledge of Personas and its capabilities. And most of the time those same people leave thinking this is a tool that could be useful and that they need to learn more about, and wondering why they've not heard about it before. Personas seems to be a well kept secret!

 

To try and fix that I've been wanting for a while to organise a "Personas Day", to give people the opportunity to learn much more about the product, and especially to get some hands-on experience of it. In my opinion Personas is best experienced by actually using it, and realising how quickly you can start building useful things with it. Thanks to the generosity of Peter Spielvogel and Tobias Queck, this finally happened on Tuesday of this week. Peter and Tobias took time out from a trip to the UK to come here to Warwick to support a UKISUGUser Experience Special Interest Group (UX SIG) meeting, and the following day to run a full day of hands-on Personas training. Think TechED hands-on, but running all day. We had a room of 40 people, a good mixture of people who'd used Personas 3 already, used Personas 2 before but not 3, and some who'd never touched Personas at all, all learning everything from basic screen editing to advanced scripting and using the newest Personas 3 SP03 features to turn SAPgui screens into Fiori-like screens.

 

IMG_20160628_102631.jpg

 

Some people, non-techies especially, found the advanced content a little tough, but all left understanding much more about what Personas can do, and with ideas for how to use it when they get back to the office. Some were determined to get it installed in their landscape and to continue learning.

 

A few comments:

 

"Just a quick note to say thank you for holding the Personas workshop day, yesterday Im quite new to SAP, but can see how new users to SAP would benefit from using Personas (as an ease-in to SAP and especially where they are occasional users of the system. So, very helpful and a lot covered on the course."


"A very good day.  I can see all sorts of potential for it, especially now we understand where Personas fits with Fiori and other options."

 

"Just wanted to thank you for all the hard work you put in to make the last couple of days such a success. I for one really appreciated the opportunity to kick start my Personas journey!"

 

"Thanks for having us today - enjoyed it, even if my brain did start frying towards the end"

 

I had an upper limit of 40 people in the training room, and had a waiting list of more than 10 people, so I'm going to have to look at organising a repeat event!

 

Thanks once again to Peter and Tobias for taking time out to support this, and to Holly Evans from the team here at Warwick for supporting me in organising the event.

SAP Screen Personas - Fit, Fiori, and Futures (roadmap update July 2016)

$
0
0

In the two months since SAPPHIRE NOW, we have had many conversations with customers, either individually or in user group meetings, or hands-on SAP Screen Personas training. Several topics seem to come up very often around SAP Screen Personas, SAP Fiori, and SAP S/4HANA, especially how these solutions fit together and the future of SAP Screen Personas in this context. Specifically, several customers we met with already had SAP S/4HANA and wanted to know where SAP Screen Personas fits. Others are planning for SAP S/4HANA and want to avoid starting any UX-related projects that will be throwaway within a few years.

 

In this blog, I will:

  • Discuss how SAP Screen Personas fits with S/4HANA
  • Explain how SAP Screen Personas makes it easy to deliver Fiori UX to your users, whether you are running ECC 6.0 on NetWeaver 7.00, SAP S/4HANA, or anything in between
  • Share the latest SAP Screen Personas roadmap

 

How SAP Screen Personas fits with S/4HANA

I and several colleagues participated in a few meetings with customers that had purchased SAP S/4HANA with the expectation that all screens have the Fiori user experience. While the Fiori UX is ultimate goal for SAP S/4HANA, as our chief design officer explains, we are on a journey to get there and have not yet reached our destination. The good news is that SAP provides a powerful tool for customers that want to achieve the Fiori UX now. SAP Screen Personas allows you to transform classic screens in SAP S/4HANA into Fiori-inspired designs:

  1. In areas where Fiori coverage does not yet exist
  2. For custom transactions for which you want to keep your business logic and not redevelop a new UI5 application.

The outcome of these meetings was that customers realized that SAP Screen Personas will become an essential part of their S/4HANA landscape. The combination of SAP Fiori apps and SAP Screen Personas will deliver the desired simple and delightful user experience.

 

SAP Screen Personas makes it easy to deliver Fiori UX to your users

During ASUG meetings, SAP Screen Personas practitioner forum calls, and other customer-facing events, while we see strong interest in S/4HANA, the number of customers that are live or far along their path to S/4HANA is relatively small. So, what do these customers do if they want the Fiori experience now, with minimal disruption to their current IT environment?

 

SAP Screen Personas provides several ways to deliver the Fiori UX on existing ECC 6.0 or Business Suite on SAP HANA systems.

 

Latest SAP Screen Personas roadmap

With all our customer contact, we receive a steady stream of great ideas to enhance the product. Thank you to everyone that has provided us suggestions for updates.

 

Here is the latest roadmap slide (available as part of the UI technologies roadmap document on SCN) that shows what we are working on. What else you would like to see in future versions of SAP Screen Personas?

 

roadmap2016July.png

 

Now that you have this information, what should you do? Here are a few ideas:

 

Disclaimer: In this blog, I have made forward looking statements and predictions of when SAP will bring certain products or services to market. This represents our current state of planning. These plans might change for a variety of reasons. So, none of the content in this blog reflects a commitment from SAP to provide specific functionality or deliverables on any set schedule.

 

For the SAP Screen Personas product team, Peter Spielvogel.

Viewing all 276 articles
Browse latest View live


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