1 Business Requirement – Why we need to extend standard app ?

The fields delivered in standard SAP Fiori app for “My Travel & Expenses” does not suffice the business needs.

  1. Changes required
    1. Document No required as input on screen so that user can enter original receipt no to it and save the same
    2. No of Employee is required for meal expenses so that user can enter no of employee attending the business dinner/lunch outing. Adding names of each employee is difficult job. And when you have around 150 attendees then it’s kind of waste of effort.
    3. %Lobby is also needed on the screen for input
    4. Per diem region has to be hidden, it’s no longer required

1.1 Extend Fiori App “My Travel and Expenses”

Current Situation

Target Situation

1. Document no. is not available in the standard screen of expenses types in My Travel & Expenses of SAP FioriExtend1.png

Extend2.jpg

2. No. of Employees is not available in the standard screen of
    My Travel & Expenses in SAP Fiori

Extend3.jpg

Extend4.jpg

3. Lobby % is not available in the standard screen of
    My Travel & Expenses in SAP FioriExtend5.jpg

Extend6.jpg

4. Per Diem Region is not required as per the business requirement

Can be handled by UI Extensibility no OData extension is required for hiding Per Diem Region

Extend7.jpg

2 Fiori app extension has two part

2.1 Extending front-end of Fiori App (UI Extensibility)

  1. Screen and section to which field has to be added is identified and extended.
  2. Entity name which will be used to map data to new fields is also identified

2.2 Extending oData service on backend system

Front end developers confirm the entities which has to be extended and also the respective new custom field names.

For this scenario entity name provided by frontend developer is “EXPENSES

Fields to be added are “DocumentNo”, “NoOfEmployees” & “LobbyPercentage

2.2.1 oData service is extended using below step

  1. Identify the oData service name for standard app
  2. Identify the corresponding ABAP DDIC structures for entities to be extended
  3. Create custom gateway project & Redefine the standard oData service
  4. Add custom field to entities confirmed for extension
  5. Implement BADI for fetching and manipulating new Data
  6. Regenerate & Register the new service

3 Identify oData Service name of standard Fiori app

  1. Go To Fiori Reference App Library
  2. Search for My Travel & Expenses App (Direct Link for My Travel & Expenses Fiori App)
  3. Click on tab “Implementation Information”
  4. Navigate to Configuration
  5. Check for oData service name

Extend8.jpg

PAOC_TRV_SRV is oData service for “My Travel & Expenses” Fiori App

Note: This information can also be provided by front end developers, they can locate it in Controller section of fiori app .

4 Extend corresponding ABAP structure

Entity name confirmed for this requiremnt is “Expense” and fields to be added are:

  1. “DocumentNo” (type=edm.String; MaxLength=20 ; )
  2. “NoOfEmployees” (type=edm.Decimal; MaxLength=3 ; )
  3. “LobbyPercentage” (type=edm.Decimal; MaxLength=3 ; )


4.1 Identify the corresponding abap structure

  1. Go to transaction “SEGW
  2. Click on open project
    Extend9.jpg
  3. Enter the project name and execute (In general if we remove _SRV from technical service or oData servive then we will get name of standard gateway project or you can do search like PAOC_TRV* after removing _SRV  from oData service name)
    Extend10.jpg
  4. Navigate to Data Model->Entity Types and get structure name for EXPENSE entity
    Extend11.jpg

4.2 Add custom field to identified structure

  1. Go to transaction “SE11
  2. Enter structure name and click on display
    Extend12.jpg
  3. Click on Append Structure
    Extend14.jpg
  4. Click on create append
    Extend15.jpg
  5. Enter name of new append structure and hit enter
    Extend16.jpg
  6. Add field to new structure and activate
    Extend17.jpg.png
  7. Now new fields are added to standard structure

Extend18.jpg

5 Redefine oData Service

  1. Go to transaction “SEWG
  2. Click on Create Project
    Extend19.png
  3. Enter Project Name, Description and Package Name. Then hit enter
    Extend20.png
  4. Right Click on Data Model and select Redefine -> oData Service
    Extend21.png
  5. Enter standard oData Service name “PAOC_TRV_SRV” then hit enter
    Extend22.png
  6. Now all the Standard project objects are copied to custom project and new Z*  runtime artifacts are created
    Extend23.png

6 Add custom field to Entity Types

  1. Navigate to Data Model -> Entity Types -> Expense . Double click on Properties
    Extend24.png
  2. Click on Append Row
    Extend25.png
  3. Blank row will added to bottom please enter Property Name ( e.g “DocumentNumber” )

Extend26.png

    1. Select Edm Core Type ( You can type in Edm.String or select from F4 help ) 
      Extend27.png
    2. Check for the operation needed on this field, refer screen shot in step 6.3 . For e.g. Creatable, Updatable, Sortable, Nullable
    3. You can enter label for this field click on Label Help ( marked as red box 1 in step 6.3 )
      Extend28.png
    4. Select reference ABAP field . CLick on corresponding ABAP field blank space and press F4
      Extend29.png
    5. Save the changes
  1. Similarly add other fields NoOfEmployee, PercentLobby and save the changes to project
  2. Now select Project name and Generate Runtime Objects
    Extend30.png

7 Find & Implement BADI for My Travel and Expenses App

  Refer  Section 3. there we can find details about extesniblity in extensibility node, and also link to
“My Travel & Expenses” Extensibilty HelpIn this help page you can find the name of BADI.
  Extend31.png

  1. Go to transaction “SE18” and open the BADI PAOC_MY_TRAVEL_EXPENSES_BADI in display mode
    /wp-content/uploads/2015/08/2015_08_05_14h04_48_765901.png
  2. Copy the Enhancement Spot Name and Go to “SE19” .
    Create implementation for Enhancement Spot PAOC_MY_TRAVEL_EXPENSES
    /wp-content/uploads/2015/08/2015_08_05_14h07_49_765902.png
  3. Enter Implementation Name , Description and hit enter
    /wp-content/uploads/2015/08/2015_08_05_14h10_41_765903.png
  4. Enter Implementation name, implementing Class Name , Select BAdI and hit enter
    /wp-content/uploads/2015/08/2015_08_05_14h12_32_765904.png
  5. Select Create Empty Implementation
    /wp-content/uploads/2015/08/2015_08_05_14h29_12_765905.png
  6. Select Sample Class and Click Copy Sample Class
    /wp-content/uploads/2015/08/2015_08_05_14h34_45_765906.png
    Activate BAdI implementation.
  7. Go to transaction SE24 and change implementing class ZCL_HR_NA_PAOC_MTE_EXTEND.
    /wp-content/uploads/2015/08/2015_08_05_14h47_46_765907.png
    Check & remove any pre-existing unwanted code copied from sample class methods.
    Activate the implementing class

8 Logic to read & manipulate Entity Information

To report this post you need to login first.

8 Comments

You must be Logged on to comment or reply to a post.

    1. Prakash S Post author

      Hello Rene,

      I see that table PTRV_SADD is updated for Additional Receipt Information.

      You can search for other tables by PTRV* .

      Standard function module used for saving expense trip is “PTRA_WEB_EXPENSE_REPORT_SAVE_2


      It accepts data for Expenses in Fiori App or ESS ( WebDynpro App) using structure “PTRV_WEB_RECEIPTS_INT_2

      Regrads,

      Prakash

      (0) 
  1. Soo Ming Tan

    Hello  Prakash,

    Good write up! I try extending oData but I have encountered the following error:

    /wp-content/uploads/2016/01/error_862700.png

    Did you encountered this? I’m already on the latest and greatest version of the Software Component for this.

    Thanks!

    (0) 
  2. Emanuel Affatati

    Hi Prakash,

    This is an excellent post. Thanks for posting.

    I have one question:

    Why did you redefine the service in step5? Couldn’t you just implement the bady?

    I think that you extended the service because you wanted to modify the entity “Expense” and there is no way to add fields to the entity of the standard service, but I want to confirm with you.

    Like in this case:

    How To: Enhancing an SAP Fiori App Gateway Service (PO Tracking)

    Thanks!

    Emanuel

    (0) 
    1. Prakash S Post author

      Yes you are right.

      There was bug in earlier version which did not allow me to get desired results.

      So that time I redefine. But at later stage this was taken care and resolved by SAP in new versions.

      You can absolutely just implement BADI and take care of extension in back end.

      I will try to update this post ASAP.

      Thanks for reminding.

      (0) 

Leave a Reply