Quantcast
Channel: SCN : Blog List - All Communities
Viewing all 2548 articles
Browse latest View live

SAP CodeJam on SAP HANA Cloud Platform in Wroclaw, Poland done

$
0
0

Hi everyone,

 

I just wanted to share some info on the SAP CodeJam on SAP HANA Cloud Platform which was held on 2016-01-08 at the University of Economics in Wroclaw, Poland. With that it was the first SAP CodeJam on SAP HANA Cloud Platform in 2016!

 

The event was announced as usual on Eventbrite https://www.eventbrite.com/e/sap-codejam-wroclaw-registration-19830208688 and all seats were taken within 48 hours. Nice drag on SAP HANA Cloud Platform in the Wroclaw area! The participants were in part engineers mainly from the SAP user group in the area and in part students from the SAP university group there. The SAP HANA Cloud Platform experts were my colleague Vladimir Pavlov and me.

 

During the event we started with an introduction to the SAP HANA Cloud Platform which you can find on SlideShare. Afterwards we focused on getting the participants started with the platform, for that you can find everything on the website. Nearing lunch we shifted to some more advanced examples from the documentation and SDK and finished the day of with examples on IoT and Gamification. If you want your own event just shoot an email to sapcodejam@sap.com.

 

Here some photos:

CYL6u_3WsAAWsiV.jpg-large.jpeg

CYMJzePWMAAAleu.jpg-large.jpeg

CYMJ9YZWMAATQXT.jpg-large.jpeg

CYNAawkWsAEacwq.jpg

More photos can be found at the KNSAPer Facebook page photo album https://www.facebook.com/media/set/?set=a.1014443841927875.1073741838.179495288756072&type=3.

 

Thanks to the participants for the hard work during the event!

 

All the best,

Sven


HMC Acess Rights

$
0
0

Requirement : In my current project I had the following requirement

 

XYZ- user-group should have read access on a product "Cable" which is part of a catalog "Cable".

ABC- user group should have read access on the product "Cable" and read/write access on an attribute of Cable - Cable.uploaded.

Cable should be accessible as a folder in the HMC navigation tree.

CableCatalog is similar to product catalog for custom products.

 

As per the acceptance criteria as a XYZ user i should be able to view Cable and if i have ABC role assigned also then i should be able to check and uncheck the uploaded attribute of Cable.

 

In order to fulfill the above requirement following steps should be implemented

1. Create  an impex say catalog.impex in your respective extension. Give write permissions to user-group ABC on CableCatalog

 

$cableCatalog=cCableCatalog

UPDATE CatalogVersion;catalog(id)[unique=true];version[unique=true];writePrincipals(uid)

;cableCatalog;Online;ABC

 

This way all the users having ABC role will have write permissions on all attributes of products in Cable catalog. However as per the acceptance criteria ABC should have write access only to Cable.product attribute .

In order to achieve this perform step 2.

 

2. In user-group impex grant the access rights on type Cable to XYZ user group.

$START_USERRIGHTS;;;;;;;;;

Type;UID;MemberOfGroups;Password;Target;read;change;create;remove;change_perm

UserGroup;XYZ;;;;;;;

;;;;Cable;+;-;-;-;-

$END_USERRIGHTS;;;;;;;;;

 

 

3. Grant write acces rights on Cable.uploaded to ABC user group

$START_USERRIGHTS;;;;;;;;;

Type;UID;MemberOfGroups;Password;Target;read;change;create;remove;change_perm

UserGroup;ABC;;;;;;;

;;;;Cable;+;-;-;-;-

;;;;Cable.uploaded;+;+;-;-;-

$END_USERRIGHTS;;;;;;;;;

In this way ABC will have read acces on type Cable in Cable catalog and write access on Cable.uploaded attribute of type Cable .

It can view all the products of Cable catalog.

 

Note: Since Cable is a type in CableCatalog it is important to grant permissions on CableCatalog and Cable both.

Firefox 43 Tests on S/4HANA are Completed

$
0
0

Browser qualification tests for Firefox 43 Rapid Release Cycle were completed by the Suite Test Center for S/4HANA Project Services Edition 1603.

The tests were done for the following areas: Procurement of Direct products, FIN and Project based services for the operating systems Windows 10, 8.1, 7.

For restrictions and limitations see Firefox browser note https://service.sap.com/sap/support/notes/990034.

How to do the data mining on the Gateway statistics using CDS view and AMDP?

$
0
0

Recently i got a very interesting requirement from management team to do a POC based on the Gateway statistics to address the following business questions.

 

  1. What are the Top 10 apps accessed within a certain period ?
  2. Who are the top 10 users within a certain period?
  3. Which hour of the day do the most users access ?
  4. Which week day of the week do the most users access?
  5. What are the most search criteria for all the services ?
  6. According to the functions defined in the app, we could also know that how many times of the business functions are executed?
  7. What are the average response time and maximum payload of the http requests?


i did some research on this topic and would like to share it within this community.

Agenda.jpg


step 1: The Gateway performance statistics are stored in tables /iwfnd/i_med_srh and /wfnd/i_med_srt, which could be accessed via tcode/iwfnd/maint_service

   The Gateway performance statistics are stored in table /iwfnd/su_stats , which could be accessed via tcode/iwfnd/stats


step 2 CDS View Building

CDS View 1:

@AbapCatalog.sqlViewName: 'V_CDS_SERV'

define view /nsl/cdsv_gw_service

( service_name, service_description )

as select from /iwfnd/i_med_srh as srh

          association[0..1] to /iwfnd/i_med_srt as srt

          on srh.srv_identifier = srt.srv_identifier and

             srh.is_active = srt.is_active

{

    srh.service_name,

    srt.description

}

where

   srt.language = 'E' and

   srt.is_active = 'A'

 

CDS View 2

@AbapCatalog.sqlViewName: 'V_CDS_STATS'

define view cdsv_stats_basic

( namespace, service_name, userid, timestampl, service_description, operation, entity_type, expand_string, request_address )

as select from /iwfnd/su_stats as stats

  association[1..1] to v_cds_serv  as service on

  stats.service_name = service.service_name

 

{

  stats.namespace,

  stats.service_name,

  stats.userid,

  stats.timestampl,

  service[1:inner].service_description,

  stats.operation,

  stats.entity_type,

  stats.expand_string,

  stats.request_address

}

where

      (  stats.namespace = '/SAP/' )

 

Step 3: ABAP Managed Database Procedure

Create a structure - Overview

Overview.jpg

AMDP Class Defination:

AMDP Snippet

class /XXX/cl_gw_su_stats definition

  public

  final

  create public .

 

 

  public section.

    interfaces: if_amdp_marker_hdb.

methods:

      get_su_stats_total

        importing

          value(iv_client)        type symandt

          value(iv_start_time)    type timestampl

          value(iv_end_time)      type timestampl

        exporting

          value(ev_user_num)      type /XXX/gw_su_basics_s-user_num

          value(ev_apps_num)      type /XXX/gw_su_basics_s-apps_num

          value(ev_apps_per_user) type /XXX/gw_su_basics_s-apps_per_user

          value(ev_top_user)      type /XXX/gw_su_basics_s-top_user

          value(ev_top_app)       type /XXX/gw_su_basics_s-top_app

          value(ev_hot_hour)      type /XXX/gw_su_basics_s-hot_hour

          value(ev_hot_day)       type /XXX/gw_su_basics_s-hot_day.

  protected section.

  private section.

endclass.

method get_su_stats_total by database procedure

                            for hdb language sqlscript

                            options read-only

                            using /XXX/v_cds_stats.

    DECLARE v_servicename INT;

    DECLARE v_user INT;

    /* get the total number users */

         select count(distinct userid) into ev_user_num from "/XXX/V_CDS_STATS"

              where MANDT = :iv_client and timestampl between :iv_start_time and :iv_end_time ;

 

 

    /* get the total number services */

         select  count(distinct service_name) into ev_apps_num  from "/NSL/V_CDS_STATS"

            where MANDT = :iv_client and timestampl between :iv_start_time and :iv_end_time ;

 

 

    /* get the apps per user */

*     ev_apps_per_user = ev_apps_num / ev_user_num ;

    /* get the top user name */

          select top 1 userid,

                          count (service_name ) as service_name into ev_top_user, v_servicename

                          from "/XXX/V_CDS_STATS"

                          where MANDT = :iv_client and timestampl between :iv_start_time and :iv_end_time

                          group by userid

                          order by service_name desc

                          ;

 

    /* get the top app name */

    select top 1

         service_name,

         count(userid) as userid into ev_top_app, v_user

         from  "/XXX/V_CDS_STATS"

          where MANDT = :iv_client and timestampl between :iv_start_time and :iv_end_time

         group by service_name

         order by userid desc ;

 

 

/* which the day of the week do the agents log in the most */

 

select top 1 to_char( utctolocal(to_timestamp (timestampl),'UTC+8'),'DAY')as Date,

               count(userid) as userid into ev_hot_day, v_user

      from "/XXX/V_CDS_STATS"

          where MANDT = :iv_client and timestampl between :iv_start_time and :iv_end_time

           group by to_char( utctolocal(to_timestamp (timestampl),'UTC+8'),'DAY')

           order by userid desc;

 

/* which Hour of the day do the agents log in the most*/

select top 1 hour( to_time( utctolocal(to_timestamp(timestampl),'UTC+8')))as Hour,

               count(userid) as userid into ev_hot_hour, v_user

      from "/XXX/V_CDS_STATS"

          where MANDT = :iv_client and timestampl between :iv_start_time and :iv_end_time

           group by hour( to_time( utctolocal(to_timestamp(timestampl),'UTC+8')))

           order by userid desc;

  endmethod.

Gateway service snippet

data: ls_entity            like line of et_entityset.

 

 

    loop at  it_filter_select_options into data(ls_filter_select_option).

      case ls_filter_select_option-property.

        when 'SelectionDate'.

          loop at ls_filter_select_option-select_options into data(ls_select_option).

            if ls_select_option-low is initial.

              lv_start_time_feeder = sy-datum.

            else.

              lv_start_time_feeder = ls_select_option-low.

            endif.

 

 

            if ls_select_option-high is initial.

              lv_end_time_feeder = sy-datum.

            else.

              lv_end_time_feeder  = ls_select_option-high.

            endif.

          endloop.

        when others.

          raise exception type /iwbep/cx_mgw_busi_exception

            exporting

              textid = /iwbep/cx_mgw_busi_exception=>filter_not_supported.

      endcase.

    endloop.

 

 

    if sy-subrc <> 0.

      raise exception type /iwbep/cx_mgw_busi_exception

        exporting

          textid            = /iwbep/cx_mgw_busi_exception=>business_error_unlimited

          message_unlimited = |Filter is required|.

    endif.

 

    convert date lv_start_time_feeder time sy-uzeit into time stamp lv_start_time time zone sy-zonlo .

    convert date lv_end_time_feeder time  sy-uzeit into time stamp lv_end_time time zone sy-zonlo.

 

 

    data(lo_overview) = new /nsl/cl_gw_su_stats( ).

    try.

        lo_overview->get_su_stats_total(

          exporting

            iv_client        = sy-mandt

            iv_start_time    = lv_start_time

            iv_end_time      = lv_end_time

          importing

            ev_user_num      =  ls_entity-user_num

            ev_apps_num      = ls_entity-apps_num

            ev_apps_per_user = ls_entity-apps_per_user

            ev_top_user      = ls_entity-top_user

            ev_top_app       = ls_entity-top_app

            ev_hot_day       = ls_entity-hot_day

            ev_hot_hour      = ls_entity-hot_hour

        ).

 

      catch cx_amdp_execution_failed into data(lv_error).

    endtry.

    append ls_entity to et_entityset.

 

last step to test the service in GW client

Test.jpg

Use Fiddle to make modifications on framework js file

$
0
0

Sometimes for trouble shooting or research purpose, you would like to make small changes on framework js file, and test how your application would react to those changes.

 

For example I would like to add a new line for debugging purpose before line 70.

clipboard1.png

It is not possible to make any modifications on the formatted js file done by Chrome "Pretty print" button.

clipboard2.png

We can only change original unformatted file or switch the source code to debugger version and change Text-dbg.js instead. Unfortunately changes done by both approaches could not be persisted. Once we refresh Chrome, they are gone.

clipboard3.png

Inspired by Alessandro Spadoni's great blog Switch #openui5 version on-the-fly without changing the code - Web Debugging Proxy, now I can use Fiddle to achieve the requirement once and for all:

 

1. Download the original Text.js to local laptop. Add the code you would like to insert and save the change.

clipboard4.png

2. Open Fiddle, run UI5 application and use Fiddle to capture the network traffic. Find the corresponding session to request Text.js, and drag it to tab "AutoResponder" and drop there. Select the two checkbox "Enable rules" and "Unmatched requests passthrough".

clipboard5.png

Once you finished drop, the Text.js url will be automatically populated to Rule Editor.

clipboard6.png

Select "Find a file" from drop down list and specify the local modified file you have done in previous step.

clipboard7.png

Once done, you have now created one rule as below: every time the Text.js with given url is accessed, Fiddle will serve it with your local modified version as response.

clipboard8.png

Now we can re-launch application and have a test. We can observe that this time, the modified Text.js is returned:

clipboard9.png

And in Chrome development tool, we can also see modified source code of Text.js.

clipboard10.png

Anchor Tab in SAP UI5

$
0
0

Hello Folks,

I would like to contribute the Anchor tab working Model.As we have this example in Xml View,but it is bit tricky to replicate same to js view.

I am attaching the working project of the Anchor Tab.Please let me know your suggestions about this application

How to do a design thinking job in one hour?

$
0
0

Wallet design game is a classic game, which is more suitable for short time (one hour to 1.5 hours) through hands-on exercises to experience design thinking, first used by D.School and continually improved and supplemented by the collaborators.


wallet1.PNG

The instructors makes a brief explanation for the students before the game so that they have a preliminary understanding of design thinking. The game starts, students are asked to complete a sketch design of an ideal wallet on stencil paper prepared in advance in a few minutes under the guidance of instructors. (Note: the execution of this game will be better if there are two instructors cooperating with each other)

1.jpg


The students are excited and enjoy the game most at this time, and they cannot wait to show their designs as soon as the are done. After the happy and brief share, the instructors announced that they have just completed a problem-centered solution. And the next thing is to use a people-centered way during the rest of the practice. Students are divided into pairs and begin observation with asking his partner questions, such as usage of the wallet, the living habits of his partner, and they note down the key information. Next, students need to think about which of these information is the most important and relevant to their partner. And then students do a new round of further interview with their partner using depth questions such as repeating "why". During this process, the instructors need to control time and keep reminding and, more importantly, sometimes guiding students to learn empathy and try to have some divergent thinking by staying out of the wallet itself.

wallet_10.jpg


The next part is the most important and most difficult step for students. They need to think hard about what are the purposes of his partner, their expectations and goals, hopes in the context of using wallet. And they also need to consider the reasons behind, which is usually hidden behind the obvious, and finally put it in the form of verbs, and that's POV. During this part, the instructors must observe the students and point out the problems and give them timely support and help if necessary. The instructors can also explain with one or two examples. Again, don’t forget the time control!

2.jpg

In the next few steps, students mainly experience repetition and iteration to get solutions gradually. First of all, students should come up with as much as ideas to meet the partner’s need and try to use drawings to show (use words only when needed to explain the details). The point is on the number of ideas, and also students not constrained in the wallet itself. Think outside the box and focus on all the solutions in his daily life. Then show these ideas all to the partner and obverse the reaction and the mood to judge whether they like it, which may contain a new discovery. After the communication, students need design again and draw the sketch more clearly and in more details, especially highlight the bright spot and the core functionality. During this part, instructors can encourage students and remind them to make sure his partner understand the solution they present, which needs interaction and feedback, besides reminding the time and the alternating and rotation.

4.jpg

Final part is realizing the ideas by using all available materials. Students also need focus on improving their core solution and they can overthrow the previous design an design all over again if necessary (if only time allows!). This process will continue until the both students are all satisfied as long as the time is up. But remember one thing, the final solution must be that it can be experienced by the partner directly and physically. The instructors can ask the students show their results and can also choose some distinctive design to let everybody feedback, or choose a random student to show their design and ask others to feedback. Note: pay attention to the time and mind the enthusiasm and participation among the members.

1191254847.jpg


Conclusion: At the end of the game, the instructors can ask students about what they learned about design thinking knowledge from the game, such as people centrism, deep interaction and feedback, sketch drawing, prototyping and iteration etc. It is also worth pointed out that the actual content of the processes and steps can be flexible according to the actual situation (such as the specific condition of space, time, participants), the important thing is that the design thinking game should be executed in happy, relaxing and comfortable atmosphere.


DMO = Do Math Obligations!

$
0
0

Do not complain about insufficient migration rate if you use a 1 GBit network card!

Do your Mathematic Obligations and check your network for performance prior to DMO.


Boris Rubarth

Product Management Software Logistics, SAP SE




P.S. Sorry, yes, the blog above is short and rude, but I had to draw your attention on the network side of housekeeping:

You have to check the network performance before starting with DMO: check the througput between source DB and PAS (on which SUM and R3load processes are running), and between PAS and target DB. One network tool that I am aware of is iPerf: "iPerf3 is a tool for active measurements of the maximum achievable bandwidth on IP networks."  (http://iPerf.fr). But even ftp can provide a first insight: transfer a large file, and check the throughput. Measurements like this can detect an wrong configuration of network cards, a transfer limitation due to firewalls, or other hurdles.

And network card size matters! Using a 1 Gbit network card means a maximum throughput of 439 GB / hour theoretically, practically ~ 350 GB / hour. [The math is: 1 Gbit card means 1000 MBits per second, this is 125 MByte per second, this is 429 GB per hour.]  DMO can do more, if you let it  ... see Optimizing DMO Performance So you should rather use a 10 Gbit network card.

Feel free to add your favorite network tool as comment for this blog.


What happens when you decide to change your Data Model in IS-U

$
0
0

Well, there are more number of on-line resources about Master Data in SAP IS-U, thanks to those authors.

 

SC Blogs:

SAP IS-U data model - Business and Technical Master Data

 

SAP wikis:

How to Create Technical Master Data - Utilities Industry - SCN Wiki

 

But, what happens when you decide to change your basic Data Model in your IS-U? wait, why do you want to do this? To give you a scenario, in one of my previous project the data model was not standard in first place, and we have to change this to standard best practise, and now you got why this blog!

 

By not standard I mean, initially, for each divisions i.e. for Electricity service and for Gas service, users were using individual Contract Accounts and also individual technical master data. This means duplicate of data and business processes. Now in this case we have to change the data model towards as standard SAP IS-U approach as possible with minimum impact to the current business process.

 

There could be many ways to change this Data Model, but I am not going into detail of each, as it depends on specific client/project situation/scale/time/money...etc, few methods are below:

 

A) Having a custom migration process (initially thought of one-off process) where we did updates to the master data tables.

B) For affected scenario, perform Move-out of one fuel and perform move-in (no need of much custom developments compared to A).

 

Each method will have its own pros and cons, needs further custom enhancements and logic to be implemented at various process within IS-U.

 

Note: I will update this blog regularly and add my knowledge gained during the support of this project after go-live.

Overlooked No Longer – Instructors Now Have Their Own Dedicated Space in SuccessFactors Learning

$
0
0

For most of us, part of growing up involves living and sharing our space with others at some point in our lives.  Whether it be family, friends, roommates, or even cellmates, typically we all find ourselves longing for the moment where we finally get out on our own…standing on our own two feet.  Maturing to this point of self-reliance and independence is only natural, and much like humans seeking independence in today’s world, Instructors have sought this same level of freedom within the world of SuccessFactors Learning for far too long.

 

With the b1508/1511 releases, SuccessFactors has given Instructors the ability to spread their wings into their own space.  No longer shall Instructors have to rent the spare bedroom within the SuccessFactors Learning Administrator portal.  Instead of borrowing space that never quite adequately fit the Instructor purpose in the LMS, these types of users now get a shiny new pad for performing functions critical to them and them alone.  And surprisingly, it’s enough to make their former LMS admin landlords jealous.  In this blog, I take a look at the new Instructor Role in SuccessFactors Learning and how it can be used to give your instructors a new lease on LMS life as they know it.

 

The Instructor Role – Location, Location, Location! (and Purpose…)


As in real estate, location is king, and one thing SuccessFactors is making quite evident, especially in SuccessFactors Learning, is new functionality is popping up on the hot part of the SAP block these days, that being the SAP Fiori design platform. As I noted in my last blog regarding the new Quiz Builder for SuccessFactors Learning recently introduced for the LMS, the Instructor Role is based on the same platform and design principles.  The design takes a mobile first approach and revels in process simplicity for its overall success.  The Instructor Role takes these guidelines to heart, providing a much cleaner and easier to use interface for instructors to perform their common functions than what they previously had to deal with inside their ‘rented’ space within the LMS Admin portal.

 

Instructors typically have a very specific purpose/role within corporate learning.  While not trying to discount the importance of a good instructor, their purpose is to effectively manage and deliver training to participants.  Performing these duties in the classroom is challenging enough at times, which makes interacting a corporate LMS for the administrative purposes of instructing all that more frustrating when the LMS is not intuitive and enabling.  This is a point that has beleaguered SuccessFactors Learning for quite some time.  Previously, the only way to allow Instructors access to the LMS was via a purpose-built Instructor security role that required Instructors to access the LMS in the same manner as everyday administrators.  Limiting access for instructors via the administrator portal within the LMS was not easily achievable to the level most organizations would desire, plus the user experience for the specific tasks that an Instructor would frequently perform is not the most intuitive and efficient through the administrator tools (to say the least).

 

One also has to keep in mind that Instructors within the corporate learning world are not always teachers by trade.  Employees from across an organisation may find themselves teaching courses at some point or another, sharing their knowledge with colleagues.  When these types of Instructors are also not LMS administrators themselves, expecting them to use a very involved administrator interface for performing typical Instructor functions was simply not feasible.

 

Functions Available in the Instructor Portal


Considering a large portion of typical Instructor users in an LMS are only casual users of the system, the functions available to them should be simple, intuitive, and smartly designed.  The functions available within the new Instructor portal within SuccessFactors Learning establish a strong foundation keeping these points in mind.  Functions that can be performed by instructors within the new portal include the following:

 

  • View list of assigned courses (Scheduled Offerings)
    • Scheduled and Past Courses
  • View course/segment details
  • View student rosters for courses
  • Communicate with students (via Email)
  • Record attendance/completion
  • Launch virtual learning sessions

 

Navigating the Instructor Portal


Considering the functions noted above that are available within the portal, the portal itself is laid out intuitively around these processes with the Fiori design guidelines in mind.  The Instructor portal can be accessed as part of the desktop LMS end user view through a new link for ‘My Classes’ and also as part of the iPad user experience for SuccessFactors Learning.  The main view of the Instructor portal provides the instructor with a list of Scheduled Classes and Past Classes.  This view (as shown below) is generated for a user based on the Scheduled Offerings that the user is designated against as an Instructor.

 

inst1.png

Instructor Portal - Scheduled/Past Classes

 

Classes listed in the Scheduled Classes view are displayed in chronological order on down the provided list, reflecting the location and number of registered students with respect to the Min/Max enrolment numbers specified for each Scheduled Offering (if specified).  Clicking on a course from the list will provide the user with further details on the course including Schedule details and a list of registered students.

 

inst2.png

Instructor Portal - Class Schedule and Details

 

Managing Students within the Instructor Portal


The list of Students for a Class within the Instructor portal provides a user with a list of all registered and wait-listed users for the Scheduled Offering.  The instructor will not see in this list anyone who is pending approval of their registration or has previously been cancelled. Currently this list is also only static to the instructor, meaning the instructor cannot modify registrations by adding or cancelling any users for the Scheduled Offering.  An instructor can select students from this list however and click the ‘Send Email’ button provided to communicate to the students as desired.  Performing this function will open an email in the user’s local email client (i.e. – Outlook) with the selected users’ email addresses as stored within the LMS.

 

inst3.png

Instructor Portal - Students (Registered and Wait-Listed)

 

One of the key administrative tasks instructors readily perform is recording attendance and overall completion of training courses they deliver within an organization.  In the past the primary way to accomplish this task involved a lot of paper.  Paper sign-in sheets, instructor assessments of participation, and commonly when instructors had no way of recording information in the LMS directly, handing this paper over to LMS administrators for the manual recording of this information in the LMS.  While modern corporate learning systems do tend to provide more automated ways to do this, organizations still seem to struggle with the process here considering internal/external instructors providing training, inefficient administration processes, and the volume of transactions needing to be done to track training attendance accordingly.

 

SuccessFactors has done a good job in providing the capability to instructors to record attendance and completion via this new portal in a simple and efficient manner, and what makes the offering here a particular strong one is the capability for Instructors to complete these tasks on an iPad.  Few instructors may be tethered to a PC while holding classroom training, but the potential to have an iPad available in today’s ever evolving mobile workforce makes the idea of recording attendance and learning in real-time more of a reality today than ever.

 

Attendance per class segment can be recorded by an instructor from within the portal. Recording attendance has been available within SuccessFactors Learning through the administrator interface for some time, however, you have to dig a bit to get to where this is done within the administration of Scheduled Offerings.  Within the Instructor Portal, however, there are fewer clicks/touches to complete this activity.  Recording attendance is typically seen as cumbersome by clients when the focus is recording completion of the overall learning, but having Instructors do this as they manage the delivery of their classes can provide more data for assessment later on with respect to attendance rates and student participation. Recording attendance for class segments via the Instructor Portal is a simple check per student indicating their presence.

 

inst4.png

Instructor Portal - Schedule - Edit Attendance per Segment

 

Recording overall learning upon completion of a training course is also available to the instructor. More involved than recording attendance, Recording Learning within the LMS is a process that involves recording the successful (or unsuccessful) completion of the training course with respective supporting information for the learning event, including Hours (Total, Content, Credit, and/or CPE), Grade (optional), and Completion Status of the recorded learning event.  Optional comments can also be entered per student during the process.

 

inst5.png

Instructor Portal - Record Learning Completions

 

inst6.png

Instructor Portal - Record Learning Completions - Add Comments

 

And in an effort to promote the mobile capabilities of the Instructor Portal, SuccessFactors has provided the capabilities to Record Attendance via scanning QR codes of learners from their mobile device within the iPad view of the Instructor Portal. In theory, this process of instructors recording attendance via QR code scans is about as efficient and hands off as you could get in recording attendance of students for class segments. The challenge with this though is the participation rate for students having and using the necessary mobile device for generating their QR codes and recording when attending a session.  In a perfect world, I like this idea a lot, but in the real world I believe instructors will always find themselves having to manually record attendance in addition to QR code scanning.  A very nice idea and feature nonetheless and I hope to see clients try to take advantage of the process considering the appropriate student audience and training offerings.  (Forgive the poor Photoshop effort below of an example of the QR code scan via the iPad view of the Instructor Portal…but you get the idea).

 

inst7.png

Instructor Portal (iPad) - Record Attendance via QR Code

 

Setting up the Instructor Portal for Use


The Instructor Portal within SuccessFactors Learning only requires the proper setup of new security workflows and roles for use.  No configuration switches to worry about.  Currently the LMS provides the security Workflows below that are necessary for instructors to have in order for them to be able to access the Instructor Portal.

 

  • Access Scheduled Offerings
    • Allows user to view In Progress, Future, and Past Classes in which they are assigned as an Instructor.
  • Initiate Evaluations
    • An update with the b1511 release, this workflow gives instructors the ability to send out survey evaluations for a course prior to the completion of the course.
  • Record Attendance
    • Allows user to record student attendance per segment for Classes in which they are assigned as an instructor.
  • Record Learning
    • Allows user to record overall completion of training for students for Classes in which they are assigned as an instructor.

 

Depending on your organizations requirements for Instructor access within this new portal, you can grant/limit instructor capabilities within the portal according to the four (4) workflows noted above (e.g. – Allow instructors to view their classes and record attendance, but do not allow them to record learning completion – reserve for LMS admins).

 

Assigning the appropriate instructor role(s) to instructors is done via a new field on the Instructor records within the LMS Administration Portal under the Learning -> Instructors area (shown below).  After assigning the appropriate role to desired Instructors, these users should see the My Classes option when accessing the end user side of the LMS.

 

inst8.png

Administrator Portal - Instructor Management - New Security Role Assignment for Instructor Portal Access

 

Summary


The new Instructor Portal within SuccessFactors Learning was a long time coming to be honest.  I never liked having to explain to clients that their instructors who were casual users of the system at best would have to deal with finding what they need through the LMS Administrator interface.  From a change and training perspective, this was never an ideal situation.  Fortunately SuccessFactors has delivered what I feel is a solid offering for instructors to use in managing the LMS administrative tasks around their classes. As with any new feature from SuccessFactors, don’t expect the Instructor Portal to do everything you may want right out of the gate.  I expect the functionality of the interface to be further refined and built out in coming releases.  Some things I personally hope to see in the Instructor Portal in the future include:

 

  • More robust management of students
    • Give the ability for instructors to do more than just view class rosters and record attendance/learning.  Allow them to register further participants, cancel/withdraw participation, etc., as in some organizations instructors play a very active role in these processes up until course delivery.
  • Give them some reporting
    • While an instructor is not an LMS administrator, they still can benefit from some level of reporting.  The ability to generate quick reports for class rosters and survey evaluation results could be very handy for instructors to have for their own courses.  Hopefully reporting of some kind will find its way into the interface.
  • Blended learning – don’t forget the online parts
    • Currently for blended courses an instructor may teach, the portal does not reflect the status of the online portion of the blended learning course to an instructor when recording learning for the overall training.  For blended learning specifically, if an instructor is going to be the one responsible for recording successful completion of learning, they need to be able to see if students have successfully completed the online portion of the course.

 

It will be interesting to see the evolution of the Instructor Portal within SuccessFactors Learning over the coming releases.  In its current state the interface is quite good and a much needed improvement for organizations wishing to get their instructors more involved in administrative tasks for their courses within the LMS.  A strong ‘mobile-first’ element is evident in the Fiori design of the interface, and hopefully this will only help SuccessFactors demonstrate the benefit of the LMS through to instructors who probably weren’t too happy about their ‘rented’ space within the Administrator Portal up until now.  There’s no more rent to pay however…Instructors now have their own place to call home in SuccessFactors Learning.  Enjoy the view…

Translation in Adobe forms using JavaScript with different types of allignment

$
0
0

Few days back we found a serious problem regarding Translation of the Labels of all the forms we were working on. The pressure came from the functional. As per there requirement they want to update a table(Constant table) and they want to reflect the changes in the adobe forms. Then things are getting little challenging. One of my senior created an method to fetch all the Translation details for any of the form. We were passing the values through the context of the forms. She created a structure with 200 fields. Among those fields anybody can pass max of 200 fields to a structure for translation. For our forms the number 200 was little high. Anyways after that we follow the below steps and successfully displayed the caption of the fields dynamically as per the system language.

 

 

this.resolveNode("this.caption.value.#text").value = data.Page1.Translations.FIELD_001.rawValue ;

 

The bold one is the field which contains translation and the italic one is the subform in which we wrapped the fields which contains translation.

 

Now the problem begins. Some of the field text needed to be like this as shown below.

trans.png

  

Case A: For this case the caption is needed to be right aligned. The initial spaces may varies for different languages.

  • First calculate the total no of letters may fit in that field A. Say it is 50 char.
  • Then create an global field named 'i' set its value as 50 spaces. Goto Edit->Form Properties->Variables. Click on '+' and set the value as 50 spaces. It may change for other fields.
  • Then write the following code.

var label = 0 ;

var i_val = 0;

var i_len = 0;

var label_len = 0;

var space_len = 0;

var space_app = 0;

label = data.Page1Translations.FIELD_001.rawValue ;

i_val = String(i.value); ...................................................  " For spaces

i_len = i_val.length; ................................................... " Checking the space length

label_len = label.length ; .................................................... " Checking the label length

space_len = Number(i_len) - Number(label_len); .................................................... " finding the no of spaces have to be appended to a field labels

space_app = i_val.substring(1,space_len);............................" actual required spaces

 

  1. this.resolveNode("this.caption.value.#text").value = space_app + label; ..........." Concatenating and displaying the labels..

 

Thus we achieved our requirement. Now I thought how to fulfill the next requirement...

 

Case B: I created another global variable named 'NXT_LINE' and set its value as 'enter'. (That means in the value I pressed only enter.. )

 

Then wrote the same code as before just passed NXT_LINE instead if 'i'. In the output it came like field B only.

 

At last the things are done with the forms. Then I started to write this document. Suddenly senior came and stood behind me and watched what I was writing.

I realized somebody behind.. Heard a little tough voice "Enough blogging something I have regarding MIGO tcode"... 

 

If any improvement is needed in this technique then please don't forget to write. The main implementation of this technique is to display the caption with your required alignment.

First Thoughts about Fiori Overview Page

$
0
0

At SAP TechEd Las Vegas SAP announced the new Fiori Overview Page. With SAPUI5 1.30 and SAP Web IDE we can try it out (at least in an experimental version).  As soon it was possible for me I had to try it out because OVP looks great and I think it will provide an awesome user experience. In this blog entry I would like to share my thoughts about it.

 

First impression

There is a document on SCN which describes what to do. For OVP you need annotated OData streams that can be displayed in various chart types. The implementation is very fast since it is mostly configuration. At the moment there are more than 37 comments under this document which shows that there is an immense interest in this approach.

 

The UX Explorer describes the use case and more details. OVP uses global filters to display filtered data and supports detail views and navigation. From what I saw, OVP brings analytics into Fiori. The OVP is a role-based dashboard visualizing a set of OData streams with a common filter using a defined set of card types.

 

OVP apps can be programmed using special templates of SAP Web IDE. Development is done using annotations and configuration. It is consistent with latest SAPUI5 development: the template approach allows efficient development of standardized UIs.

 

Personally I am very fond of the experience of the different card types and I am convinced that OVP is very useful for many purposes. And I want to thank SAP that a version of OVP is shipped in SAPUI5 1.30 together with an experimental version in SAP Web IDE. This is really useful since it allows us to get experience with latest features at an early stage. And last but not least: I really like the user experience of OVP and I am sure it will have a great future.

 

What features should SAP add to OVP?

As far as I can see the approach is made for adding analytical features to Fiori. I appreciate it since together with the Analysis Path Framework and the Smart Business Infrastructure Fiori is getting ready for operational reporting.

 

But one aspect is missing: I would like to have the possibility to develop my own custom card resp. card types. This is necessary since a typical use case is the definition of 360 degree views for complex business objects like business partners or insurance claims. In this use case you need specialized tiles for displaying header data of the business object, perhaps pictures of the business objects or related objects, correspondence information and so on.

 

At the moment I don’t know a Fiori design pattern for this use case. Last week I saw two customer UI5 applications which both used a design pattern that is quite useful but not part of Fiori design guidelines. The shell contains of two parts: an object header together with a NavContainer containing some tiles as navigation links. The tiles display some information similar to KPI tiles in SAP Smart Business. This is no Fiori pattern - but nevertheless useful. You can use it to create dashboard-like applications that display information standardized way.

 

The possibility to develop own cards resp. card types would help achieve a user experience consistent to Fiori for above mentioned use case and even if the backend is on a low release level.

 

Moreover I think this development should be also part of openUI5. In SAPUI5 we have additional benefits like the integration with CDS and of course tooling like SAP Web IDE.

 

What is your opinion? What features do you need?

Do you have tried out Fiori Overview Page? What features are missing and would give more value to OVP? What kind of cards are missing? What kind of use cases do you see besides analytics and 360 degree views?

Your First Extension: Part 6a - Adding Property Binding: Preparation

$
0
0

This is part of a tutorial series on creating extension components for Design Studio.

 

We can set the start and end angles via the property pane and via script.  What's missing is setting those angles via an important methodology, first introduced in DS 1.5; property binding.  We could simply add property binding to the angle properties and be done with it.  It is unlikely, however, that any data sources will have measures with degrees as units.  So before we actually add property binding, we're going to make some overhauls to our gauge, so that it can work with generic measure values.  That's the focus of this installment.  What follows is either concepts already covered in this tutorial, or generic Design Studio app building concepts (Grid and Text components, some basic scripting, etc.) that are out of scope for this tutorial.  Therefore, we'll rush along and pack everything into a single instalment so that we can get back to the main narrative. Brace yourself for a long entry.

 

As always, the completed Part 6 extension is available on Github if you feel like breezing over it and speeding ahead.  Just download the zip from Github or clone the repo and you'll find everything covered in this instalment, already prebuilt.

 

 

Requirements (aka what we need)

 

Previously, we simply entered an end angle.  What we're going to need now is some sort of min/max range for the gauge.  Think of a speedometer on a car.  It runs from 0 to <maxspeed>, with the needle showing the current speed.  That's what we need out gauge to have.  So we'll keep endAngleDeg as the current angle and add a new property, endAngleDegMax as the end value of the gauge.

 

When we decide to use measures, we'll be calculating endAngleDeg.  So we'll need to add a new property to tell the component to ignore the entered value of endAngleDeg and calculate it.  We'll need to add a "floor value" for the measure; the value at which (or below which) the gauge sits at its start angle.  This might be zero and we'll default it to zero, but the designer may have reasons for using some other starting value.  We'll need a "ceiling value", at which the gauge is pegged.

 

Once we have a min and max range for our measure, we'll need the actual measure value that we want to plot and a normalization algorithm, to convert this measure value into endAngleDeg .

 

The new Properties:

  • useMeasures - This boolean value will determing whether we directly assign endAngleDeg, or calculate it.
  • endAngleDegMax - This determins the maximum range of the gauge; the angle that it is maxed out at
  • measureMax - The measure value, at which the gauge will be maxed out (endAngleDeg = endAngleDegMax)  increasing the measure value beyond this will have no effect.
  • measureMin - he measure value, at which the gauge will be at it's start valueout (endAngleDeg = startAngleDeg)  decreasingthe measure value beyond this will have no effect.
  • measureVal - The actual value of the measure.

 

 

While we're at it, we clean up the properties pane a bit and group the new properties into their own group in the properties pane.  First, we add the new group to contribution.xml.  It goes between two existing elements, the license and the component.:

  <license>license</license>

  <group

  id="SCNGaugeAngleSettings"

  title="Angle Settings"

  tooltip="Gauge Angle Settings"/>

  <component

  databound="false"

              ...

 

 

 

Then the add the new property entries; which look like this:

<property

  id="useMeasures"s

  title="Use Measures"

  type="boolean"

  group="SCNGaugeAngleSettings"/>

<property

  id="endAngleDegMax"

  title="End Angle Max"

  type="float"

  group="SCNGaugeAngleSettings"/>

<property

  id="measureMax"

  title="Measure Max Value"

  type="int"

  group="SCNGaugeAngleSettings"/>

<property

  id="measureMin"

  title="Measure Min Value"

  type="int"

  group="SCNGaugeAngleSettings"/>

<property

  id="measureVal"

  title="Measure"

  type="int"

  group="SCNGaugeAngleSettings"/>

 

 

 

They will also need entries in contribution.ztl, so that they can be scriptable:

/* Returns whether or not gauge angles cab be indirectly set, based on measure values. */

boolean getUseMeasures() {*

  return this.useMeasures;

*}

 

/* Enables or disables the ability to indirectly set gauge angles, based on measure values. */

void setUseMeasures(/* New boolean */ boolean useMeasures) {*

  this.useMeasures = useMeasures;

*}

 

/* Returns the maximum end angle of the gauge. */

float getEndAngleDegMax() {*

  return this.endAngleDegMax;

*}

 

/* Sets the maximum end angle of the gauge. */

void setEndAngleDegMax(/* New angleMax */ float newAngleMax) {*

  this.endAngleDegMax = newAngleMax;

*}

 

/* Returns the measure value at which the gauge will peg (read its maximum value). */

float getMeasureMax() {*

  return this.measureMax;

*}

 

/* Sets the measure value at which the gauge will peg (read its maximum value). */

void setMeasureMax(/* New measureMax */ float measureMax) {*

  this.measureMax = measureMax;

*}

 

/* Returns the measure value at which the gauge will read its minimum value. */

float getMeasureMin() {*

  return this.measureMin;

*}

 

/* Sets the measure value at which the gauge will read its minimum value. */

void setMeasureMin(/* New measureMin */ float measureMin) {*

  this.measureMin = measureMin;

*}

 

/* Returns the measure value from which the gauge will determine its angle. */

float getMeasureVal() {*

  return this.measureVal;

*}

 

/* Sets the measure value from which the gauge will determine its angle. */

void setMeasureVal(/* New measureVal */ float measureVal) {*

  this.measureVal = measureVal;

*}

 

 

 

Each of these will also need getter/setter functions in compoent.js.  We'll cover them below.

 

 

 

 

Introducing recalculateCurrentAngle()

 

In component.js, we won't need to make any changes wherever we're touching properties that only affect the sizing and positioning of the gauge.  This means that we can leave the radii and padding properties alone.  All of the angle affecting properties will need to check and recompute the angles before calling redraw().  We'll introduce a new function with this algorithm, called recalculateCurrentAngle() and these properties will call recalculateCurrentAngle(), instead of redraw(). This new function will act as a wrapper for redraw(), that first implements the angle recalculation algorithm.

 

The logic flowchart for this algorithm is below:

recalculateCurrentAngle.png

 

And the JavaScript code, needed to implement it looks like this:

//New with Part 6

me.recalculateCurrentAngle = function(){

  if (me._useMeasures == true){

  //Firstly, ensure that we can turn in a clockwise manner to get from startAngleDeg to endAngleDegMax

  while (me._endAngleDeg < me._startAngleDeg){

  me._endAngleDegMax = me.me._endAngleDegMax + 360.0;

  }

 

  var currEnd = 0.0;

  if (me._measureVal > me._measureMax){

  currEnd = me._endAngleDegMax;

  }

  else if (me._measureVal  < me._measureMin){

  currEnd = me._startAngleDeg;

  } else{

  var measureDelta = me._measureMax - me._measureMin;

  var measureValNormalized = 0.0;

  if (measureDelta >  measureValNormalized){

  var measureValNormalized = me._measureVal / measureDelta;

  }

  currEnd = me._startAngleDeg + (measureValNormalized * (me._endAngleDegMax - me._startAngleDeg))

  }

 

  if (currEnd >  me._endAngleDegMax){

  currEnd = me._endAngleDegMax;

  }

 

 

  //Now set me._endAngleDeg

  me._endAngleDeg = currEnd;

  }

  else {

  //Right now, this gauge is hardcoded to turn in a clockwise manner.

  //  Ensure that the arc can turn in a clockwise direction to get to the end angles

  while (me._endAngleDeg < me._startAngleDeg){

  me._endAngleDeg = me._endAngleDeg + 360.0;

  }

 

  //Ensure that endAngleDeg falls within the range from startAngleDeg to endAngleDegMax

  while (me._endAngleDeg > me._endAngleDegMax){

  me._endAngleDegMax = me._endAngleDegMax + 360.0;

  }

  }

  me.redraw();

};

 

 

 

So now that we've have recalculateCurrentAngle() in hand, we can add the component.js side getter/setter functions for the new properties.  We're not explicitly showing the code block here, but don't forget to refactor me.startAngleDeg() and me.endAngleDeg() to call recalculateCurrentAngle(), instead of redraw().

//New with Part 6

me.useMeasures = function(value) {

  if (value === undefined) {

  return me._useMeasures;

  } else {

  me._useMeasures = value;

  me.recalculateCurrentAngle();

  return this;

  }

};

 

me.endAngleDegMax = function(value) {

  if (value === undefined) {

  return me._endAngleDegMax;

  } else {

  me._endAngleDegMax = value;

  me.recalculateCurrentAngle();

  return this;

  }

};

 

me.measureMax = function(value) {

  if (value === undefined) {

  return me._measureMax;

  } else {

  if (value >= me._measureMin){

  me._measureMax = value;

  me.recalculateCurrentAngle();

  }

  else{

  alert("The maximum displayed value of the measure must be greater then the minimum!");

  }

  return this;

  }

};

 

me.measureMin = function(value) {

  if (value === undefined) {

  return me._measureMin;

  } else {

  if (value <= me._measureMax){

  me._measureMin = value;

  me.recalculateCurrentAngle();

  }

  else{

  alert("The maximum displayed value of the measure must be greater then the minimum!");

  }

  return this;

  }

};

 

me.measureVal = function(value) {

  if (value === undefined) {

  return me._measureVal;

  } else {

  me._measureVal = value;

  me.recalculateCurrentAngle();

  return this;

  }

};

 

 

We should now be ready to copnstruct a test app! 

 

 

 

Test App

 

 

Let's put together a test app, that allows us to modify existing angle properties, as well as the new ones; to test and demonstrate the new properties at runtime.  We can modify the test app that we've been using by adding a grid layout with 7 rows and two columns.  If you don't want to build a test app yourself, you can use the one from the Github repository.  In the left column, we have the label for each row and in the right, the value.  We can use a text component to display and change these values.  For now, we'll just use scripting to modify all values.

Part6a.3.png

 

In the application startup event script (called "On Startup"), we can fill these text fields:

INPUTFIELD_STARTANGLE.setValue("" + SCNGAUGE_1.getStartAngleDeg());

INPUTFIELD_MAXENDANGLE.setValue("" + SCNGAUGE_1.getEndAngleDegMax());

INPUTFIELD_ENDANGLE.setValue("" + SCNGAUGE_1.getEndAngleDeg());

INPUTFIELD_MEASUREMINVAL.setValue("" + SCNGAUGE_1.getMeasureMin());

INPUTFIELD_MEASUREMAXVAL.setValue("" + SCNGAUGE_1.getMeasureMax());

INPUTFIELD_MEASUREVAL.setValue("" + SCNGAUGE_1.getMeasureVal());

 

var useMeasures = SCNGAUGE_1.getUseMeasures();

 

if (useMeasures == true){

  RADIOBUTTONGROUP_1.setSelectedValue("1");

} else {

  RADIOBUTTONGROUP_1.setSelectedValue("0");

}

 

 

We also want the gauge to be updated when the user edits a field within the grid.  Let's take one of these text elements - the start angle - as an example.  When the user changes the value, we'll execute the following script:

var asInt = Convert.stringToFloat(INPUTFIELD_STARTANGLE.getValue());

SCNGAUGE_1.setStartAngleDeg(asInt);

 

As the rest of the fields are similar, we'll not explicitly show the repetitive scripts here.

 

 

At runtime, we should be able to do the following with the app.  If it is set to *not* use measures, the pie chart should use the angles that we set directly.

Part6a.1.png

 

When we switch to use measures, then the end angle that we directly input before is ignore and instead, a normalized end angle is calculated.

Part6a.2.png

 

Next time, we'll actually add data binding.

ScrollReveal and SAPUI5

$
0
0


Introduction


ScrollReveal.js is a javascript resource for animating objects as they appear in the viewport. I wanted to make a proof of concept and see if it can work together with SAPUI5.

 

Here a link to the ScrollReveal library webpage also implementing it's own library:

 

https://scrollrevealjs.org/



Using ScrollReveal



First you have to include the javascript with the library with:



<scriptsrc="https://cdn.jsdelivr.net/scrollreveal.js/3.0.9/scrollreveal.min.js"></script>


One way to make it work is apply a class to an element in HTML

 

<!-- HTML -->

<divclass="foo"> Foo </div>

<divclass="bar"> Bar </div>


Start ScrollReveal and apply the reveal method to the required classes.

// JavaScript

window.sr=ScrollReveal();

sr.reveal('.foo');

sr.reveal('.bar');


With that you will implement an animation to the <div> when it enters into the screen when scrolling.


Here the official help:

jlmakes/scrollreveal.js - JavaScript - GitHub


Implement on SAPUI5



We have to be sure that SAPUI5 elements are already loaded when reveal method is called, so we will do it when document is ready and we will apply the reveal to all elements with class "foo".

 

$('document').ready(function(){      window.sr = ScrollReveal();      sr.reveal( '.foo', { delay: 500, scale: 0.9, opacity: 0.1 } );
});

Here an example of a SAPUI5 Panel



You have some panels and when you scroll down and panels enter into screen, they are shown with an animation. You have to check the working example but here a screenshot of a panel making a fade in when you scroll down.


scrollreveal.png


You can see a working example in the following jsbin.


https://jsbin.com/hiyiyo/edit?html,output

 


Conclusion

This was only a test for me if an external library canwork with SAPUI5. What I mean is that I'm not using ScrollReveal in a productive tool but could be a starting poing to someone who starts playing with ScrollReveal and SAPUI5.

 

Your First Extension: Part 6b - Adding Property Binding

$
0
0

This is part of a tutorial series on creating extension components for Design Studio.

 

In the last instalment, we made performed a major overhaul of the gauge and made it able to determine a normalized gauge angle, based on measure values.  Now we'll make them bindable!

 

To make the properties bindable, we simply open component.xml, go to the property entries for the properties that we want to make bindable and add a "bindable" attribute, after "type".  That's it!  Let's make our measure properties bindable.

<property

  id="endAngleDegMax"

  title="End Angle Max"

  type="float"

  bindable="true"

  group="SCNGaugeAngleSettings"/>

<property

  id="measureMax"

  title="Measure Max Value"

  type="int"

  bindable="true"

  group="SCNGaugeAngleSettings"/>

<property

  id="measureMin"

  title="Measure Min Value"

  type="int"

  bindable="true"

  group="SCNGaugeAngleSettings"/>

<property

  id="measureVal"

  title="Measure"

  type="int"

  bindable="true"

  group="SCNGaugeAngleSettings"/>

 

Testing

 

 

We can test the binding.  Presuming that we're using the csv data source in the Github repository and the test app that we built last time (also in the repository), we can do the following:

 

 

Set useMeasures to True

 

 

Make sure that we bind measureMax to a totals cell for a measure, as with the example from the csv data data source in the app on Github:

Part6b.1.png

 

Make sure that we bind measureVal to a row cell for the same measure, as with the example from the csv data data source in the app on Github:

Part6b.2.png

 

Viola!

Part6b.3.png

 

Part6b.4.png

 

The entire content from part 6 - the extension, the test app and the csv datasource - are in the Part 6 repository on Github.

 

Next time, we'll have a look at the complex property types, introduced in Design Studio 1.6.


How SAP Manages Processes for Innovation

$
0
0

Richard Branson says there is no such thing as an accidental entrepreneur– it’s deliberate, conscious and very hard work. I would say the same for innovation. While the ideas that form the catalyst for innovation might come from a place of wild creativity, chaos or even anarchy, in order to execute and scale innovation, we need to be deliberate, conscious and steady. An idea that is never adopted is not an innovation.


While many believe that processes are an obstacle to progress, in my role as SAP Chief Process Officer and CIO, I see that good process management can be a key to innovation. On the one hand, it offers us a clear methodology for scaling innovation and, on the other, well-managed processes free up capacity to harness the creativity that new ideas require.

 

Here are some of the ways we are managing processes for innovation at SAP.

 

Solutions scale business innovation

In the digital age, it is essential that companies are agile and fast enough to adapt to change. SAP is no exception. The solutions that we develop – based on standardized business processes – are innovating, accelerating and improving the way we work. This is absolutely game-changing. Our solutions enable focus and scaling.

 

Here are a couple of examples. Right now, we are leveraging the Ariba Network to manage more and more of our resources. When we turned to Ariba, SAP was growing faster than its procurement team, and we needed to innovate our procure-to-pay processes. Now, with simpler, more standardized sourcing and procure-to-pay processes, we are operating much more efficiently: we’re seeing a 50% increase in invoice automation, 20% increase in procurement productivity and a 42% reduction in procurement cost. And, with the implementation of SAP Simple Finance, our finance teams are able to deliver quarter-end closing five days faster than any other DAX company.

 

We are weeding out complexity and finding ways to be simple and innovative. And our business processes are absolutely key.

 

No paper, more impact

Organizational excellence is about driving business impact and creating value. Since we have no manufacturing line, we have to find ways to simplify and optimize our processes so that we can free our employees to focus on the work in their job descriptions. In other words, no paper and more impact.

 

As a cloud company, we have to make sure that our employees are as productive as possible and do not waste time on non-essential activities. By renovating our IT development process using Agile, we ensure that our developers spend their time on their area of expertise: coding. We improve processes in the finance function to ensure that our controllers are freed up to work on business simulation planning. And we have put HR in the cloud so that employees can access their key data simply, quickly and efficiently. By implementing strong business processes, we have scaled innovation, harnessed creativity and driven business value.

 

We all want to see return on investment, and to do this we have put measures in place that define clear business benefits for our IT investment. Called the business benefit framework, this is an easy-to-use methodology to create a standardized overview of any large planned IT investments. It is based on common value propositions and related business benefit drivers with a three year net present value. The framework contains a short series of clearly defined steps, and the result of these steps is a business benefit profile for each proposed investment, which provides operational process intelligence on which decisions can be made. By doing so, we put business value in the center of everything we do.


Operational excellence in IT

In the digital economy IT must drive innovation. IT leads the way in removing complexity to power the digital transformation. So, at SAP, we are seeing how SAP S/4HANA is removing complexity from our core systems, and helping us return to standard. We have simplified the data model so that there are no aggregates, no indices, no redundancies or discrepancies between systems. With one ERP system and one HR system for the whole of SAP, we are talking about little to no latency. This single instance strategy is a model for simplicity and excellence that we recommend.

 

By getting rid of long upgrade cycles, we ensure that businesses will be able to consume new innovation frequently. Our solutions enable focus and scale, which we have demonstrated in our move to the cloud. This frees up leaders, such as CIOs, to become trusted innovation partners to their organizations to keep their systems future-ready in order to keep pace with change.

 

In the end, it is about driving business value. If we streamline our processes so that employees can focus on strategic work, if we innovate our business by implementing our own solutions or finding ways to drive out complexity in IT, we create business value for SAP. And in so doing, we also create an atmosphere where creativity is valued, ideas can thrive and we innovate for excellence.

Finding Balance on a Bamboo Bicycle

$
0
0

Fazlul Hoque balances the virtual nature of his job with the construction of eco-friendly bicycles. Now he is sharing his newfound passion with others.

 

Assuming you are passionate about what you studied, you have a cool career happening around you, and you love your employer too, then you should be completely content and fulfilled, right?

 

On paper it sounds like a great formula, and it might work for some. But Fazlul Hoque, who has all of those things and more, looked inside himself and discovered that something was still missing. Being the perceptive guy he is, Fazlul set out to balance his own equation.

 

Fazlul has always liked building things, and as an interaction designer at SAP’s research and development lab in Germany, he works in a multidisciplinary team that designs and builds the user interfaces for SAP’s newest applications.

 

His task is to mask the fundamental complexity of business software witha simple interface design that delights end users. And that’s easier said than done. “In the age of information overload, it is the job of the designer to lead the way and hold the hand of the user. Simplicity is the only way to accomplish that,” says Fazlul.

 

He and his colleagues are currently working in one of industry’s hottest areas: the Internet of Things, and on applications that help companies to analyze sensor data in order to predict machine failures thus optimizing maintenance cycles and reducing machine downtime.


Back to the “roots”


“As an interaction designer I am working a lot with design concepts, but most of them are digital,” explains Fazlul. “What was missing for me was building something that I could touch and feel.” That’s when he began to look for a project in his free time that would combine his passions for design, construction, sustainability, and practicality. Bamboo bicycles were the perfect fit.


For thousands of years this incredibly fast growing, versatile, light, and eco-friendly material has been used to build objects that can withstand major loads. As a boy growing up in Bangladesh, Fazlul experienced first-hand how bamboo is used in the construction of furniture, houses, boats, and even bridges.


“I wanted to build is something with my hands that I can use in my daily life, but I didn’t want to build just a normal bike,” Fazlul explains. “It had to have a unique aspect to it, and the bamboo bike fits all of my criteria.” Knowing that he would need support on his first bike, he searched and found an impassioned bike enthusiast and entrepreneur in Berlin who ran workshops in bamboo bicycle construction.


Fazlul travelled to Berlin on weekends to complete his bike, which was built in clearly defined stages. “My favorite part was working with my hands and learning about new materials and new techniques. It’s a very explorative process and you can use this skill in any job.”


Completing the bike is one of the things that Fazlul is most proud of, and a self-made bike also translates into a lot of fun: “Riding a bicycle is a joy for everybody, but if you ride something that you built yourself then it exponentially increases that joy.”


He found the experience so worthwhile that he wants to share it with others. The interaction designer and another colleague at SAP formed a group that are learning the technique of building the eco-friendly vehicles, even electric-powered ones. Visitors to SAP in Walldorf, Germany, can therefore expect to see more bamboo bikes around the campus soon.


Video: Natalie Hauck and Alex Januschke, SAP Development University; Text: Paul Baur, Global Corporate Affairs Content Team.

 

If you liked this story and video, then you might like these too:

 

 

 

 

 

 

 

To: The CFO - From: Concur - Subject: Winning with a Holistic Approach to Travel and Expense

$
0
0

I found that looking at Travel and Expense processes in organisations is usually more frustrating the better the system is they have in place. No: it's not a typo. For a change, my frustration is not about system issues, but about the huge potential a state of the art T&E system brings, but is left untapped, because of a lack of vision / big picture view. To some extend, this has been the case with the old SAP on-premise Travel Management solution already, but with a new generation system like Concur, the gap can be huge.

 

That's why I write this open letter to all CFOs, who would usually not get involved in T&E, but should now at least briefly - just to set the scene:

 

As a CFO, the nitty gritty of expense management and travel booking is probably nothing you want to be involved a lot. However, you are probably best positioned 2014-10-15 11.08.10.jpgto see the big picture and drive a holistic approach to serve all parties involved. Without that C-level support, what we usually see as normal practice (ignoring those organisations where it's a complete mess) is:

  • the accounting team driving process rigour and tax compliance in expense capturing trying to support 4 AP staff
  • and/or the head of procurement driving low cost and vendor number minimisation (in theory going hand in hand in real live often contradicting each other) to make life easier for 3 people in the travel team or procurement
  • and/or sometimes HR/payroll popping in looking for tax issues and occasionally uttering the words "duty of care"
  • and always: the 1000 employees, who are out there to sell your products or serve your customers, being frustrated about paperwork and intransparent admin processes, left alone in the cold with travel issues and being kicked, if they book the "wrong" hotel to get this critical customer appointment scheduled in the last minute.

Sure: you can have terrible T&E practices, even when using a world class software. But it doesn't go both ways any more: it is very difficult to have a state of the art T&E process that makes compliance easy, reduces cost further than any heavy handed procurement focus could AND supports your travelers in the field as much as possible so they can focus on customers, unless you have the 2 crucial ingredients:

  • a world class system that includes a wide scope of vendor integration, analytics, mobile capabilities and add on services like traveler support
  • AND top level sponsorship to get all back-office parties involved together to achieve savings plus excellent customer Service.

 

One such system (the best in my opinion) is Concur.

Top level support: that's you.


For some more insights into the scope of (possibly lost) opportunity in a Concur implementation, check out this blog from last summer: What Walking Cars, German Folk Songs and Goats can Teach You About Concur Implementations

Chrome 48 Tests on Windows 10 were executed

Using Navigation profiles in PP information system

$
0
0

Navigation profiles can be used to simplify transition between a set of transactions that are related together. In this post, I will demonstrate an example of how to use navigation profiles to jump from production order list (tcode COOIS) to confirmation screen (Tcode CO11N). You can use the same steps with COOISPI if you are in the PPPI configuration.

 

You can follow the steps by watching the following demo video :

 

 

Note: Navigation profiles are also available in other transactions like : COHV, CO24, etc.

Viewing all 2548 articles
Browse latest View live


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