Skip to Content
Author's profile photo Esha Rajpal

End to End Development – SAP HANA and Web IDE

In this blog, we cover end to end application development starting from creating a database table in SAP HANA, develop virtual data models on top of database tables and finally use Smart templates available in Web IDE to create a Fiori Application consuming virtual data models.

Smart templates, also known as SAP Fiori Elements, provide a framework for generating UIs at runtime based on metadata annotations and predefined templates for the most-used application patterns.

We use CDS to model data source and expose CDS through Gateway without writing line of code using CDS rich semantic annotations. Follow the below steps to create an application. For details on CDS refer to blogs [].

Step1:   First step is to create database tables and inserting records to column store tables.

Figure 1 and Figure 2 shows the structure of the tables used for modelling the views.

Figure 1: Structure ZCAR_COLOR

Figure 2: Structure ZCOMPANY_CAR

Step2:   Second step is to create CDS views on top of database tables.

Find below the details of annotations used while creating CDS views.

View level Annotations: Applied to entire view and written before the define view statement.

Annotation @Search.searchable: true indicates that CDS View is relevant to search scenarios.

Annotation @EnterpriseSearch.enabled: true indicates that an Enterprise Search connector should be created and activated.

Annotation @Metadata.allowExtensions: true indicates that the Enterprise Search connector can be enhanced/adapted.

All the above-mentioned Annotations are required for performing Enterprise Search Views.

Annotation “@OData.publish: true” is used to expose the CDS view.  Exposing CDS view through Gateway Service in just one step without writing any piece of code using T-Code  /IWFND/MAINT_SERVICE.

Annotation @EndUserText.label: ‘My smart CDS search view’ is used to define the description of the Enterprise Search connector.

Annotation @ObjectModel.semanticKey: [‘MY_KEY_FIELD_1’, ‘MY_KEY_FIELD_2’, ‘MY_KEY_FIELD_3’] is used to define Enterprise Search Semantic Key.  Semantic key is strictly not a key in terms of database theory.  It identifies an instance of an object from business/search perspective.

Annotation @UI.headerInfo.title: {value: ‘MY_TITLE_ELEMENT’} is used to define an element or field as title field.

Element level Annotations: Applied to entire view and written inside the curly braces before the field selection while doing selection of fields.

Annotation @Search.defaultSearchElement: true is used to mark the element/field as a freestyle request field.  For performance reasons, it is not recommended to have more than 15 freestyle request fields.

The element/field weight for ranking purposes can be defined via annotation @Search.ranking.   Ranking can be set as #HIGH, #MEDIUM and #LOW.

Annotation @UI.selectionField.position: ‘Position’ This annotation is used to specify the order of selection fields that are used for filtering.


@AbapCatalog.sqlViewName: 'ZICARCOLOR'
@AccessControl.authorizationCheck:  #NOT_REQUIRED
@EndUserText.label: 'Car Color Texts CDS View'
define view Z_I_CAR_COLOR 
as select from zcar_color 
 key  color_code, 
 key  langu, 


@AbapCatalog.sqlViewName: 'ZICOMPANYCARD'
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Company Car Details CDS View'
as select from zcompany_car 
association[0..*] to Z_I_CAR_COLOR as _ColorText
on $projection.color = _ColorText.color_code 
key   license, 


@AbapCatalog.sqlViewName: 'ZCARSEARCH'
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Car Search CDS View'
@Search.searchable: true
@EnterpriseSearch.enabled: true
@Metadata.allowExtensions: true
@ObjectModel.semanticKey: ['LICENSE_PLATE']
@OData.publish: true
@UI.headerInfo.title: {value: 'Enterprise Search Application'}

define view Z_C_CAR_SEARCH 
as select from Z_I_COMPANY_CAR_DETAILS
  @UI.selectionField.position: 10
  @EndUserText.label: 'License Plate'
  @Search.ranking: #HIGH  
  @Search.defaultSearchElement: true
  key license as license_plate,
  @UI.selectionField.position: 20
  @EndUserText.label: 'Auto Brand'
  @Search.ranking: #HIGH  
  @Search.defaultSearchElement: true
  @UI.selectionField.position: 30
  @EndUserText.label: 'Horse Power'
  @UI.selectionField.position: 40
  @EndUserText.label: 'Car Color'
  @Search.ranking: #MEDIUM  
  @Search.defaultSearchElement: true
  _ColorText[ 1: langu = $session.system_language ].color_name as car_color

As indicated in Figure 3, OData Service is created automatically. On highlighting the yellow indicator, it shows message that OData Service is not activated.

Figure3: Name of OData Service

Step3:   Third step is to activate the OData Service.  OData Layer at Gateway level is used to expose the data to outside world.

Go to Transaction: /IWFND/MAINT_SERVICE

Add the service which is automatically created after specifying “@OData.publish: true” annotation in the CDS view. Next step is to activate the service. Figure 4a, 4b and 4c shows services is added and activated.

Figure 4a: Add Service Option

In this case SAP Gateway is in Embedded Deployment Scenario hence we select LOCAL in system Alias.

Figure 4b: Get the required service

Provide the package name in which you want to assign the service.  Adding the service would provide a message ‘Z_C_CAR_SEARCH_CDS’ was created and its metadata was loaded successfully.

Figure 4c: Service Added and Activated.

Click on call browser or SAP Gateway Client to check whether the service is working fine or not. Figure 5a shows that service is working fine (Return Code 200) and Figure 5b and 5c shows the URL to view the metadata and metadata of the service.

Figure 5a Service Working Properly

Figure 5b URL to view the Metadata

Figure 5c: Metadata of the service

Step4:   Fourth Step is to build the User Interface using SAP Fiori SMART Template consuming OData Service which is created in previous step3.

With HANA 2.0, SAP Web-IDE is integrated development environment used for any kind of development (ABAP, JAVA, NODE.JS, XSJS etc.) going forward.

Follow the below steps:

  • Open Web-IDE, go to FILE in menu option
  • Click on New
  • Select Project from Template
  • Choose SAP Fiori Worklist Application from available templates as shown in Figure 6

Figure 6: Worklist Application as Template

Select the system where your OData resides and the pick the OData service as shown in Figure 7.  HANA connector can be one of the option to maintain the connection between Web-IDE and backend/On-premise system.

Figure 7 System and OData Service

Provide the application setting and perform data binding as per the requirement. Once we are done with the configurations and bindings, click on Finish button. This will create a project in our workspace. Figure 8 shows the application interface after execution of the project.

Figure 8: Application Interface

Figure 9 shows the search operation performed for brand name.

Figure 9: Search Operation

To summarize, SAP Web IDE is powerful, extensible web based integrated development tool that simplifies end to end application development.

Assigned Tags

      You must be Logged on to comment or reply to a post.
      Author's profile photo Former Member
      Former Member

      Is UI5 development with SAP Web IDE faster and easier than with native tools on premise?

      Author's profile photo Esha Rajpal
      Esha Rajpal
      Blog Post Author

      Yes, its fast and easy..

      Author's profile photo Christopher Solomon
      Christopher Solomon

      What tools did you have in mind? Using SAP Web IDE in the cloud is incredibly easy and fairly quick. You could use the local version as well. It really depends on what you are trying to do...pick the best tool in your bag for the job....Web IDE is just another tool.


      Author's profile photo Jelena Perfiljeva
      Jelena Perfiljeva

      Thank you for sharing! It's good to have an overview of the end-to-end process and I'm sure this will be helpful to many SCN members.

      I would just urge you to please not write the whole blog text in Italic font. It should only be used to highlight certain parts and otherwise negatively affects readability.

      Please keep in mind this text has to be rendered in different browsers. For body text, default font works just fine IMHO and keeps with overall "look and feel" of the website.

      Thank you!

      Author's profile photo Esha Rajpal
      Esha Rajpal
      Blog Post Author

      Sure... I'll keep this in mind..

      Author's profile photo Michelle Crapo
      Michelle Crapo

      More toys! <cough> I of course mean more tools.   Very nice blog.

      Thank you!


      Author's profile photo Vlad Mily
      Vlad Mily

      Hi Esha,

      Thank you for your blogs, great content.

      Could you please list the tools used in this blog:

      • tables created in S4HANA on-premise using Eclipse ADT?
      • CDS views created in S4HANA on-premise in Eclipse ADT using CDS annotations?
      • Fiori Apps created in Web IDE Cloud using HANA Connector to access OData for CDS Views.

      Would you also be able to clarify ABAP development use case in HANA 2.0 Web IDE based on below statement:

      "With HANA 2.0, SAP Web-IDE is integrated development environment used for any kind of development (ABAP, JAVA, NODE.JS, XSJS etc.) going forward."

      Thanks a lot,







      Author's profile photo Esha Rajpal
      Esha Rajpal
      Blog Post Author


      Table creation can be done from Backend (ABAP system).

      For CDS Views, Eclipse with ADT Plugin.

      For OData Activation, use transaction /IWFND/MAINT_SERVICE in backend system

      For Fiori App, use Web IDE.

      With HANA 2.0 XSA, SAP Web IDE is an option for doing any kind of development.

      Refer to below SAP Note Numbers:

      “2465027 - Deprecation of SAP HANA extended application services, classic model and SAP HANA Repository”

      Regards, Esha

      Author's profile photo Prashant Sharma
      Prashant Sharma

      Helpful Blog. Thanks.

      Author's profile photo Gaurav Tripathi
      Gaurav Tripathi


      Its really very helpful blog.

      Thanks Esha