Category: SAP

  • SAP ARIBA – Account Configuration

    Preface – This post is part of the SAP Ariba series.

    Introduction

    SAP Ariba, allows you to access and configure new account and also you can set email notifications, electronic orders and invoice routing and other account related configurations for new suppliers. In this article we will explore SAP Ariba – Account Configuration in detail.

    Following steps can be followed to start with the SAP Ariba Account – Configuration

    1. Visit Ariba site here
    2. Provide valid credentials (Username and Password) to login

    Create new account and update Company Profile

    For account access and configuration, navigate to “Company Settings” tab:

    • In order to update information related to Company profile, you will have to navigate to “Company Profile” tab
    • Under this tab following information’s can be updated:
    • Basic company profile
    • Business Details
    • Marketing
    • Company Contacts Details
    • Certification Details
    • Additional Documents

    Create Notifications

    SAP Ariba, allows you to choose the source email address for which you want to receive notifications as well as you can choose destination email address where you want notifications to be followed up.

    • To set notifications, navigate to “Notifications” tab
    • Here, for each notification you can add three email addresses separated by commas (,).

    Manage Electronic Order Routing

    To manage electronic order, navigate to “Network Setting” option and then under this navigate to “Electronic Order Routing”.

    • Below methods can be selected for the business transactions with customers:
    • Email
    • Fax
    • Online
    • cXML
    • EDI

     

    1. Email order routing

    You can send the document as an attachment in email, which will further send the whole PO document in email.

    1. Online Routing

    You can send the PO directly to Ariba inbox without sending any copies to anywhere.

    1. EDI Routing

    ERP system should be configured with Ariba for sending PO via EDI.

    Manage Electronic Invoice Routing

    To manage electronic invoice, navigate to “Network Setting” option and then under this navigate to “Electronic Invoice Routing”.

    • Below methods can be selected for routing method:
    • Online
    • cXML
    • EDI
      • You can add tax related documents like (Tax ID, VAT ID and other related documents) through “Tax Invoicing” option.
      • And also “Invoice Archival” option can be used to set the frequency of zipped invoice archives.

     

  • What is SAP Ariba?

    Preface – This post is part of the SAP Ariba series.

    Introduction

    Ariba, is an American Software and IT services company, located in Palo Alto, California. It was established in 1996 and later in 2012 it was acquired by SAP SE (German Software maker) for $4.3 billion, and thus named as SAP Ariba. SAP Ariba was the first company to introduce IPO in 1999.

    The key idea for the foundation of company was based on providing ease to companies for their procurement process.

    What is SAP Ariba?

    SAP Ariba is a cloud-based platform that connects suppliers and buyers globally by providing procurement solutions, spend management and supply chain services on a single platform. This gives the transparency in business and a better in sight over spending.

    Key features of SAP Ariba

    Features of Ariba:

    1. SAP Ariba connects to the largest network of supplier and vendor and enhances business partnership with right partners.
    2. It connects organisation with the right vendor and provides the transparency of vendor details and procurement process which gives the clear and error free business transaction.
    3. SAP Ariba helps users to connect to different suppliers meeting their needs and managing supply chain.
    4. SAP Ariba can be easily integrated with other SAP ERP solutions like SAP ECC and S/4 HANA.

    Key benefits of SAP Ariba

    Benefits of using SAP Ariba:

    1. SAP Ariba connects suppliers, buyers on a single platform while enhancing user experience and providing the best and reliable solution for their purchase.
    2. SAP Ariba is a cloud-based solution and hence it can be accessed from any location and requires very less capital for the setup.
    3. Setup for the procurement processes – P2P (Procure-to-Pay), P2O (Procure-to-Order) is quite easy.
    4. Using suitable Integration mode, master data – Organisation structure, GL, supplier data can be easily transferred to Ariba solution.
    5. Easy transfer of transactional data – IR (Invoice Receipt) details, PO (Purchase Order) details, GR (Goods Receipt) details; to Ariba using optimal integration.
    6. Integration toolkit is used to connect Ariba solution and ERP system.

    SAP Ariba Solution

    Solution area covered by SAP Ariba are:

    1. Supplier management: It manages supplier information, performance, lifecycle and risks.
    2. Strategic sourcing: Manages sourcing, contracts, spend analysis process (for all three direct, indirect and services)
    3. Direct Spend: Connects partners, people, processes and information required for the ease flow of activities.
    4. Procurement: Helps to achieve compliance, visibility and control by downsizing cost and risks, and improving efficiency.
    5. Financial Supply Chain: Manages the free flow of payables, transactions, invoice management.

    What is SAP Ariba - Solutions

  • Difference between Narrow casting and Wide Casting

    Preface – This post is part of the Differences in ABAP for Interviews series.

    Introduction

    Before discussing the difference between Narrow Casting and Wide Casting, let’s have a short introduction of the two.

    Both the Narrow casting and Wide casting is related to Inheritance concept.

    The subclasses which inherit from the parent (super) class would usually have more components than the parent class, hence the subclasses are Wide.

    On the other hand, the parent (super) classes have a smaller number of components, hence the parent classes are Narrow.

    Narrow casting

    In Narrow casting, an instance of the subclass is assigned to the reference of the superclass. As we are switching from a “more specific view” to a “less specific view”, it is called Narrow casting. By this assignment, only the inherited components of the subclass can be accessed using the reference of the superclass.

    Steps to Narrow Cast:

    i) Declare a reference variable of the superclass

    DATA: lr_parent TYPE REF TO super_class.

    ii) Declare a reference variable of the subclass

    DATA: lr_child TYPE REF TO sub_class.

    iii) Create an instance of the subclass reference

    CREATE OBJECT lr_child.

    iv) Assign the instance to reference of the superclass

    lr_parent = lr_child.

    Wide Casting

    In Wide Casting, an instance of the superclass is assigned to the instance of the subclass. As we are switching to a “more specific view” from a “less specific view”, it is called Wide Casting. By this assignment, all the inherited components and specific components of the subclass can be accessed using the instance of the subclass. The Wide Casting will always fail unless the instance of a subclass has the same type as of the instance of the superclass.  So, it is required to do Narrow casting always before Wide casting.

    Syntax to Wide Cast:

    lr_child ?= lr_parent

    Now, let’s have a look at their difference.

    Difference between Narrow casting and Wide Casting

    Narrow Casting Wide Casting
    It means copying an instance of subclass to an instance of the super class. It means copying an instance of the super class to an instance of sub class
    Only inherited components of the subclass can be accessed. Inherited, as well as specific components of the subclass, can be accessed.
    Assigning operator is used. Casting operator is used.
    Syntax:

    lr_parent = lr_child

    Syntax:

    lr_child ?= lr_parent

     

  • Difference between Check Table and Value Table

    Preface – This post is part of the Differences in ABAP for Interviews series.

    Introduction

    Before discussing the difference between Check Table and Value Table, let’s have a short introduction of the two.

    Table validation is a concept through which the field is restricted to have certain values.

    Field level validation and domain level validation are two concepts of table validation. Field level validations are done to validate entries at field level with the help of a check table whereas domain level validations are done to restrict the values of the field at domain level with the help of fixed values of the domain and value table of the domain.

    Check Table

    Check Table is a table that contains all the valid entries for a field. Fields of a database table whose data type is determined by data element can be assigned the check table. The field of the table to which the check table is assigned is considered as a foreign key field and is part of the foreign key of the table. The table becomes a foreign key table and the primary key of the check table is the foreign key of the foreign key table.  The entries of the primary key of the check table are used as an input help (F4 help) for the foreign key field.

    Value Table

    Value Table is a table that contains all the valid entries of a domain and this domain can be reused in multiple tables. This is maintained at domain level and whenever a foreign key relationship has to be created, the system looks for the value table field, if found, it automatically proposes that name as a check table to generate a foreign key proposal.

    This is a kind of master check and is maintained as a customization object i.e. to enter values to this table a development transport request has to be created and transported.

    Now, let’s have a look at their difference.

    Difference between Check Table and Value Table

    Check Table Value Table
    It is a table which contains all valid entries of a field. It is a table which contains all valid entries of a domain.
    It is a type of field level validation. It is a type of domain level validation.
    It uses foreign key relationship. It is used as a proposal for check table whenever a foreign key relationship is created.

  • Consuming Services in SAP CAP

    Preface – This post is part of the SAP CAPM series.

    Introduction

    In previous articles we have defined modeling in CAP, learnt Defining Services in SAP CAP and performing operations on SAP CAP Services. In this article we will learn Consuming Services in SAP CAP.

    Consuming Services in SAP CAP

    To keep the consumption of services uniform irrespective of the type of service being consumed, CAP provides a generic paradigm.

    const srv = cds.connect.to('some-service')
    
    // could be any of...
    
    // - local service
    
    // - remote service client
    
    // - database client
    
    let query = SELECT.from(Books).where({ID:111})
    
    let books = await srv.run (query)

     

    The above code snippets can be demonstrated as following:

    Consuming Services in SAP CAP

    Note: CAP treats even Database as a service which eventually enhances the database interaction with the help of generic event handlers.

    Types of Service Consumption

    • Event-Based Consumption

    The local services can be accessed by Node.js event emitter asynchronously and directly. But to access the external service, we will have to configure the package.json or .cdsrc.json file. We can also enable the Enterprise messaging1 by setting the property kind as “enterprise-messaging”.

    Example:

    { 
    
    "cds":
    
        {   
    
        "requires":
    
            {     
    
            "my.external.Service":
    
                {       
    
                "kind": "enterprise-messaging",       
    
                 "credentials": {       
    
                   "namespace": "my/custom/namespace"    
    
                     }  
    
               }   
    
         } 
    
      }
    
    }
    
    In case we want to enable Enterprise Messaging for all the external and internal services, then we will define the configuration under “messaging” section, the same is shown below:
    
    { 
    
    "cds":
    
    { 
    
       "requires":
    
    {
    
          "my.external.Service":
    
    {
    
            "kind": "odata"     
    
    },
    
          "messaging":
    
    {       
    
    "kind": "enterprise-messaging",
    
            "credentials":
    
    {
    
              "namespace": "my/custom/namespace" 
    
           }
    
          }
    
        }
    
      }
    
    }

    In case, you just want the local service to be enabled for Enterprise Messaging, it should be mentioned under the section cds.provides.

    Example:

    {  "cds": 
     {    
       "provides": 
     {      
        "my.own.Service": 
     {        
       "kind": "enterprise-messaging"
          }
        }
      }
    }

     

    • HTTP-Based Consumption

    To consume external service in SAP CAP, we need to define it under Destination Service2.

    In the package.json or in the .cdsrc.json the consumed service needs to be configured with the following:

    • Destination:Name of the destination (optional)
    • requestTimeout: ms until a request times out Default is 60,000 ms (optional)
    • model:The CSN3 model of the external service
    • poolConnections to the external service are pooled to prevent DOS-Attacks (optional)

     

    Example:

    {  "cds": {    "requires": {      "externalService": {        "kind": "rest/odata",        "model": "path/to/model",        "credentials": {          "destination": "destinationName",          "requestTimeout": 30000        },        "pool": {          "min": 1,          "max": 10        }      }    }  }}

    If the external service is further extended to used by some other application, then its parameters can be mentioned under credentials section, as below:

    {  "destination": "destinationName",  "url": "...",  "username": "...",  "password": "..",  "requestTimeout": 30000}

    Sending Requests

    Simple examples for reading data (works also for create, update, and delete):

    // Connect to external serverconst srv = cds.connect.to('my.external.service')const { Authors } = srv.entities // share request context with the external service// inside a custom handlerconst tx = srv.transaction(req) // url string inputconst response = await tx.get('/Authors?$select=name') // CSN entity input and fluent query APIconst response = await tx.read(Authors).where('ID', 1) // CQN input from fluent query APIconst cqn = SELECT.from(Authors)const response = await tx.run(cqn)

     

    Adding Event Handlers

    We can add event handlers while consuming a service. This will help us to perform specific tasks on success and failure of the service consuming operation. To handle errors, you can register an .on.error(() => {…}) handler.

    There are two ways to handle the events:

    1. By specifying the event name

    Example:

    const srv = cds.connect.to('my.external.service')srv.on('myEvent', msg => console.log(msg.data))srv.on(['myEvent', 'myOtherEvent'], msg => console.log(msg.data))srv.on('myBoundEvent', 'myEntity', msg => { 
       if (msg.data.age < 18) 
    {
          throw new Error('Cannot handle this event.')    
    }
    })
    1. By specifying the topic directly

    Example:

    const srv = cds.connect.to('my.external.service')srv.on.error(err => { // handle error})

    Emitting Events

    To emit events, you can use the .emit method described in srv.emit.

    There are two ways to create Emits:

    1. By specifying the event name
    2. By specifying the topic directly

    Example:

    const srv = cds.connect.to('my.external.service') srv.emit('myEvent', {some: 'payload'})srv.emit('myBoundEvent', 'myEntity', {some: 'payload'})srv.emit('my/custom/namespace/my/custom/topic', {some: 'payload'})srv.emit('topic:myCustomTopic', {some: 'payload'})srv.emit('myEvent', {some: 'payload'}, {some: 'headers'})

    Best Practises related to Service Consumption:

    • Make sure, that destination configurations for deployment aren’t shared on any file shares
    • There are different types of messaging instances, use only enterprise-messaging for production environment
    • It is good to provide the destination name, else the runtime will look for the name of the configured data source i.e. externalService in previous example
    • To connect to an external service, connect.to should be used
    • As of now only CRUD operations can be performed using send requests. And only Read all, read single can be performed using send requests. No query like filtering or ordering is supported for send request operations
    • An Enterprise Messaging service creates a queue4 for every request and in case it is unused, it must be removed from the SAP Cloud Platform manually
  • Operations on Services in SAP CAP

    Preface – This post is part of the SAP CAPM series.

    Introduction

    In previous article we have explored the ways to define services in SAP CAP. In this article we will learn about the operations on Services in SAP CAP.

    Operations on Services in SAP CAP

    1. Ignoring fields from Services: We can ignore fields using annotation @cds.api.ignore
    2. Adding Action and Functions: We can directly call a function/action, like we have used cancelLeave above, by mentioning it in node.js while calling the service. This can be done in two ways:
      1. Unbound action: For this type of actions, we mention the action in the service itself
    srv.on('cancelLeave', (req) => {
    
    // do something ...
    
    })

     

    1. Bound action: For this type of actions, we mention the action at entity level. It means, we will have to mention the name of the entity during the call
    srv.on('getEmployeeCount', 'Employees', (req) => {
    
    // do something ...
    
    })

     

     

  • Defining Services in SAP CAP

    Preface – This post is part of the SAP CAPM series.

    Introduction

    A service or a metadata service is used to define the data and its structure. It includes all the data models with annotation as well as associations and navigations. In this article we will explore more about Defining Services in SAP CAP.

    Defining Services in SAP CAP

    In CAP, we have already defined multiple entities with association. Later we have added annotations too using Aspects. In service definition, we write all the entities within another entity and give it the name of a service. Here we have created a service in file “service.cd”.

    entity EmployeeService {
    
    enity Employee {
    
    key ID : UUID;
    
    name  : String;
    
    Role : Association to Manager;
    
    }
    
    entity Manager {
    
    key ID : UUID;
    
    name   : String;
    
    Role  : Association to many Role on Employee.Manager = $self;
    
    }
    
    }

     

    To separate the entity sets from the service, unlike the example mentioned above, we will call the domain modals in our services. Hence, all the models will be as usual defined within a model cds e.g.  schema.cds and then it would be called from a Service using CQL (CAP Query Language).

    Example:

    using { empInfo as info } from 'db/schema';
    
    
    
    
    entity EmployeeService{
    
    
    
    
    entity Employee as SELECT from info.Employees{ *,
    
    Employees.firstname ||' '|| Employees.lastname as name : String,
    
    manager.name as manager,
    
    } excluding { salary, currency};
    
    entity Manager as projection on empInfo.Manager
    
    where Manager.Department = 'IT'
    
    order by name;
    
    }

     

    It is recommended to use one service per use case. It helps us to maintain proper authentication and checks.

    Example:

    using { empInfo as info } from './db/schema';
    
    /** Serves end users browsing Employee and Insert Employee Details */ 
    
    service EmployeeService{
    
    @readonly  entity Employee as SELECT from info.Employees{ *,
    
    firstName, lastname
    
    };
    
    @requires: 'authenticated-user'@insertonly entity Salary as projection on info.Salary;
    
    
    
    
    }
    
    /** Serves registered users managing their salary and leave */
    
    service UsersService {
    
    @readonly entity Salary as projection on info.Salary
    
    where EmployeeID = $user; // limit to own ones
    
    action cancelLeave ( ID: Salary.ID, reason:String );
    
    }
    
    
    
    
    /** Serves administrators managing everything */
    
    @requires: 'authenticated-user'
    
    service AdminService {  entity Employee   as projection on info.Employees;
    
    entity Salary as projection info.Salary;
    
    }

     

  • Domain Modelling in SAP CAP

    Preface – This post is part of the SAP CAPM series.

    Introduction

    A Domain Model in SAP CAP is a model which describes the static, data-related aspects of a problem domain in terms of entity-relationship models. In this article we will study the Domain Modelling in SAP CAP in detail.

    Domain Modelling

    In simple words, a CDS in SAP CAP produces domain model in such a way that it defines the business problem in terms of keys, fields and annotations. The code to generate a domain model is written in a CDS schema (db/schema.cds). These domain models can be used in Service Definitions, Persistence Models, Databases or even reused within another domain model.

    Sample Example:

    Namespace empInfo;
    
    using {Currency, managed} from '@sap/cds/common';
    
    
    
    
    entity Employees: managed {
    
    key ID: Integer;
    
    firstName: localized String (111);
    
    lastName: localized String (1111);
    
    manager: Association to Managers;
    
    dateofJoining: Integer;
    
    salary: Decimal (9,2);
    
    currency: Currency;
    
    }

     

    In this example we have created a file schema.cds where we have created an entity Employees which includes basic details of an Employee

    This whole schema has been given a namespace i.e. empInfo

    This schema uses a standard data type i.e. Currency. Using the standard data type like this helps us to bring all the predefined value helps related to it.

    We use CDS to create a Model. In that CDS, we use

    1. Entities to represent set of unique objects e.g.:
      1. Employee Basic Information
      2. Employee Communication Information
      3. Employee Salary Information
    2. Associations to define relationships
      1. Manager association to another entity Manager which will have all the Managers list

    Naming Convention & Recommendations

    1. The name of entity should start with a capital letter and it should be human readable and self-explanatory – for example, Employees
    2. Start elements with a lowercase letter – for example, firstName
    3. It is recommended to use plural form of entities – for example, Employees
    4. It is recommended to use singular form of types – for example, Currency
    5. don’t repeat contexts – for example, Employees.name instead of Employees.EmployeeName
    6. prefer one-word names – for example, salary instead of salaryAmount
    7. use ID for technical primary keys – for example, ID for Employee ID
    8. You can use Namespace to make your entities unique. It is like client concept in SAP where you can have duplicate schemas (cds files) with unique Namespace to differentiate them. Namespaces are optional, use namespaces if your models might be reused in other projects. At the end of the day they’re just prefixes, which are automatically applied to all relevant names in a file. – for example,

    namespace laptop;entity Dell {}

    ..… is equivalent to:

    entity laptop.Dell {}

    1. You can use contexts for nested namespace sections. – for example,

    namespace laptop;entity Dell {}           //> laptop.Dellcontext Apple {      entity MacBookPro {}       //> laptop.Apple.MacBookPro     entity MacBookAir {}         }

     

    Entities

    Entities are like tables with primary keys. We can perform CRUD operation using these Entities. Keep it as flat as possible. Do not over Normalize it. Do not use non-reusable types. This section is only for modelling, only annotation related to individual fields should be added and no technical details (logics) should be added.

    Types

    Types are like Domain in SAP ABAP, it used to define the typed of Data elements.

    Aspects

    Aspects are the extensions of the Models and are mainly used to extend the existing definitions and annotations. Once a model is defined, we can use different cds files (Aspect) to add annotations on top of them for specific task.

    For example-

    • cds– your core domain model, kept clean, simple and understandable
    • audit-model.cds– adds additional fields required for auditing in a file
    • auth-model.cds– adds annotations for authorization.

    Primary Keys

    Like tables & CDS in SAP ABAP, we maintain Primary keys for Entity using keyword key.

    A primary key can be reused across the model by using the methodology of common definitions.

    We can create a common.cds Model where all the common definitions can be stored.

    // common definitions

    entity StandardEntity {
    
    key ID : UUID;
    
    }
    
    Now these  common definitions can be reused as below:
    
    using { StandardEntity } from './common';
    
    entity Employee : StandardEntity {
    
    name : String;
    
    ...
    
    }
    
    entity Manager : StandardEntity {
    
    name : String;
    
    ...
    
    }

     

    The common file is already created by default with a predefined entity named cuid.

    Mapping UUIDs to OData

    CDS maps UUIDs to Edm.Guid, by default, in all of the OData models. However, the OData standard puts up restrictive rules for Edm.Guid values – for example, only hyphenated strings are allowed – which may conflict with existing data. Therefore, we allow the default mapping to be overridden as follows:

    entity Books {

    key ID : UUID @odata.Type:’Edm.String’;

    }

    If necessary, you can also add the annotation @odata.MaxLength to override the corresponding property, too.

    Association

    It is used to define relationship between two entities. Like ABAP CDS, here too we use the word Association. Here, the keyword many indicates a 0..* cardinality. The restrictions for cardinality can be added as a constraint (where condition) – for example, using not null.

    Compositions

    Unlike Association where we associate a field of entity with the objects of an entire entity, the compositions just refer to specific field of another entity. It has extra advantage of self-managed deep operations(Insert/Update) and cascaded deletion(Multi Dependent table deletion).

    // Define Orders with contained OrderItemsentity Orders {  key ID   : UUID;  Items    : Composition of many Order_Items on Items.parent=$self;}entity Order_Items { // shall be accessed through Orders only  key parent : Association to Orders;  key book   : Association to Books;  quantity   : Integer;}

    Best Practises

    1. Don’t add technical details in Models, we use Aspectsfor that
    2. Use short names and simple flat models
    3. Don’t over Normalize the entities in Models
    4. Use local integer sequences if you really deal with high loads and volumes. Otherwise, prefer UUIDs

    Till now what we have learned: Creation of Model and Aspects on top of it .

    Domain Modelling in SAP CAP

  • Difference between SAP MTA and SAP CAP

    Preface – This post is part of the SAP Multi-Target Application (MTA) and SAP CAPM series.

    Introduction

    SAP has recently introduced two different package based development modules: SAP MTA and SAP CAP (or CAPM). It is getting tough for developers and architects to choose the best among them. In this article we will try to explain the difference between SAP MTA and SAP CAP.

    SAP MTA

    A Multi-Target Application (SAP MTA) is a package comprised of multiple libraries, application and resource modules. These have been created using different technologies and deployed to different runtimes but have a common life-cycle. You can bundle different modules together, describe them along with their inter-dependencies to other modules, services, and interfaces, and package them in a Multi-Target Application(MTA) .

    SAP CAP

    SAP Cloud Application Programming Model, also known as SAP CAP is a framework of tools, languages and libraries (both open source and SAP tools and technologies) designed efficiently with SAP best practices to help developers to minimize coding efforts, develop reusable peace of codes in form of micro services and to focus on designing and implementing business/enterprise specific logic.

    Difference between SAP MTA and SAP CAP

    Following are the differences between SAP MTA and SAP CAP:

    SAP MTA SAP CAP
    All the UI5/Fiori Apps are deployed now as MTA Even CAP is deployed as MTA
    MTA includes given modules:

    ·         HTML5(UI5/Fiori)

    ·         Node.js

    ·         Java

    ·         SAP Hana DB Module

    ·         SAP Cloud Platform Service

    CAP includes given modules:

    ·         HTML5(UI5/Fiori)

    ·         Node.js

    ·         Java

    ·         SAP Hana DB Module

    ·         SAP Cloud Platform Service

    ·         CDS Modelling

    MTA doesn’t support CDS Modelling CAP supports CDS Modelling
    MTA is good for creating cloud applications with DB already in place either at ABAP or HANA XS CAP is a single bundle to write data modelling, maintain Authorization, interact with various internal, external and DB services
    MTA is a subset of CAP CAP is an extension of MTA
    SAP MTA is older and more stable. SAP CAP is new, only CAP Cookbook is there for reference
    With only MTA, we will miss CAP capabilities With only CAP, we will have MTA as well as other extended capabilities
  • SAP MTA Project Layout & Best Practices

    Preface – This post is part of the SAP Multi-Target Application (MTA)  series.

    Introduction

    A Multi-Target Application (SAP MTA) is a package comprised of multiple libraries, application and resource modules. These have been created using different technologies and deployed to different runtimes but have a common life-cycle. You can bundle different modules together, describe them along with their inter-dependencies to other modules, services, and interfaces, and package them in a Multi-Target Application(MTA) .

    Technologies and Tools Involved in SAP MTA

    Tool/Technology Purpose Description
    Hana Data Base Store Business Data This can be any database
    Java/ Node.js Add Business logic In place of ABAP, business logic will be written here
    UI5/Fiori UI Design Like convention Fiori Application, the UI will be developed in same uniform manner
    SAP Cloud Foundry MTA Deployment The MTA application is deployed in to SAP Cloud Foundry as a mta.yaml file

    Default Project Layouts

    Files/Folders Description
    app/ all your UI apps go in here; one or more of such in subfolders
    srv/ all your service definitions and implementations go in here
    src/ The default location in which you store your design-time database artifacts. If needed, you can create additional subfolders for the same purpose.
    /package.json your project descriptor, for example, listing dependencies
    /mta.yaml All the relevant dependencies of the module are defined in the MTA descriptor
    srv/cat-service.js A root file for all your custom event handlers
    node_modules/ All node modules sit here
    node_modules/server.js the main .js file (A root file for all your node calls under the Node Module folder)
    node_modules/package.json Add your corresponding description and dependencies of Node.js modules
    node_modules/index.js To maintain a catalogue of all the Node script files and share the same with one place for reference
    lib/ Created only if XSJS support is enabled for the module. Contains .xsjs (SAP HANA XS JavaScript) source files.
    test/ Created only if XSJS support is enabled for the module. Contains XSUnit test (.xsjslib) files.
    tests/ This folder is created for modules without XSJS support. It contains .js test files.

    Note: */ denotes a folder and /* signifies a file

     

    Prerequisites and Restrictions

    We need to consider the following limits for the SAP MTA deployment on SAP Cloud Foundry deploy service:

    • Maximum size of the MTA archive: 4 GB
    • Maximum size of MTA module content: 4 GB
    • Maximum size of MTA resource content: 1 GB
    • Maximum size of MTA descriptors (mtad.yaml and MANIFEST.MF): 1 MB

    Best Practises related to SAP MTA:

    • The MTA descriptor is built in the YAML format and has strict syntax requirements. You can edit the descriptor in the text-based code editor, but it is recommend to use the visual MTA editor because it provides input validation.
    • Use the HTML5 Application Repository in a Multitarget Application as it enables to update the HTML5 applications without restarting the application router in the Cloud Foundry environment.