We are familiar with getting data from a table using AMDP procedure or AMDP table function. But, how about CDS View, I tried a case and got the following error

Basically, AMDP will get data from database, and it will get all client (assume your system have several clients), that is a reason why you catch this error when working with CDS view.

So, how to resolve it? Please read this article with me.

Prerequsites:

ABAP 7.55 or newer for using view entity. In case of using CDS DDIC View, don’t worry it

A little bit CDS View and AMDP. If you don’t have any experience, please follow link:

https://blogs.sap.com/2020/08/25/first-program-with-amdp-method/

Solution

Step 1: Create CDS View:

@AbapCatalog.viewEnhancementCategory: [#NONE]
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Demo CDS View'
@Metadata.ignorePropagatedAnnotations: true
@ObjectModel.usageType:{
    serviceQuality: #X,
    sizeCategory: #S,
    dataClass: #MIXED
}

define view entity zchau_acdoca as select from I_JournalEntryItem {
    key CompanyCode             as BUKRS,
    key AccountingDocument      as BELNR,
    key FiscalYear              as GJAHR,
    key LedgerGLLineItem        as DOCLN,
        GLAccount               as RACCT,
        CostCenter              as RCNTR,
        ProfitCenter            as PRCTR 
}
where SourceLedger = '0L' and Ledger = '0L'

Step 2: Create CDS Table function

@EndUserText.label: 'Demo CDS Table function'
@ClientHandling.type: #CLIENT_DEPENDENT
@ClientHandling.algorithm: #SESSION_VARIABLE
define table function zchau_cds_001 with parameters
    @Environment.systemField: #CLIENT
    p_date: mandt
returns {
  
  key CLIENT     : abap.clnt;
  key RBUKRS     : bukrs;
  key DOC_NUM    : belnr_d;
  key GJAHR      : gjahr;
  key DOCLN      : docln6;
      RACCT      : racct;
      RCNTR      : kostl;
      PRCTR      : prctr;
}
implemented by method ZCL_DEMO_AMDP=>GET_ACDOCA;

We need declare Client by adding annotation to this CDS View, If you don’t do it, you can’t create AMDP to consume CDS View. These annotations are very important

Step 3: Create Class to consume CDS View

We will create Global Class and handle method to get data from CDS View which was created in step 1

CLASS zcl_demo_amdp DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC .

  PUBLIC SECTION.
    INTERFACES if_amdp_marker_hdb .
    CLASS-METHODS:
      get_acdoca     FOR TABLE FUNCTION zchau_cds_001.
  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.

CLASS zcl_demo_amdp IMPLEMENTATION.
  METHOD get_acdoca BY DATABASE FUNCTION FOR HDB LANGUAGE SQLSCRIPT OPTIONS READ-ONLY USING zchau_acdoca.
    RETURN SELECT _raw.mandt as client,
            _raw.bukrs as rbukrs,
            _raw.belnr as doc_num,
            _raw.gjahr as gjahr,
            _raw.docln as docln,
            _raw.RACCT as RACCT,
            _raw.RCNTR as RCNTR,
            _raw.PRCTR as PRCTR
     from zchau_acdoca as _raw;
  endmethod.

ENDCLASS.

Result:

Run CDS Table Function and you will see data is shown

 

That’s right, we have successfully used CDS view inside a CDS View table function, I hope it can help you!!!

If this blog is good, please like and share it. If you don’t understand something, please leave a comment in the article.

Sara Sampaio

Sara Sampaio

Author Since: March 10, 2022

0 0 votes
Article Rating
Subscribe
Notify of
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x