专栏首页Jerry的SAP技术分享SAP CDS view自学教程之一:如何测试基于SAP CDS view自动生成的OData服务

SAP CDS view自学教程之一:如何测试基于SAP CDS view自动生成的OData服务

I am a newbie of CDS view related topic and recently I have to learn it. I will write down here not only the knowledge I learned but also the way how I obtain them via self study ( debugging, or other ABAP tool ). Because it would be quite easy for us to just paste the source code of sample CDS view from other guy’s blog and activate it. The CDS view works. But what have you learned from this simple Ctrl+c and Ctrl+v? For me, I always get used to dig a little bit deeper such as “what has happened in the backend after I click the activate button in ABAP development studio? “.

In this part, I will introduce how to test the OData service generated based on my CDS view via Chrome extension – postman.

Prerequisite

I have created two simple CDS views. They are:

@AbapCatalog.sqlViewName: 'z20160310'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'consume view test '
@ObjectModel: {
  type: #CONSUMPTION,
  compositionRoot,
  semanticKey: ['Actor'],
  createEnabled,
  deleteEnabled,
  updateEnabled
}
define view Zjerrytest20160310 as select from Zjerrytest20160309 {
    key Zjerrytest20160309.carrid as Jerryid,
    key Zjerrytest20160309.carrname as name,
    key Zjerrytest20160309.cityfrom as startLocation,
    key Zjerrytest20160309.cityto as target,
    key Zjerrytest20160309.connid
}

and

@AbapCatalog.sqlViewName: 'zjerrySQL0309'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'test 233'
@ObjectModel: {
  createEnabled,
  deleteEnabled,
  updateEnabled
}
define view Zjerrytest20160309
as select from spfli association [0..1] to scarr as _scarr
on _scarr.carrid = spfli.carrid {
      key spfli.carrid,
      key _scarr.carrname,
      key spfli.connid,
      spfli.cityfrom,
      spfli.cityto
}

And create a project in tcode SEGW, import the first CDS view via context menu:

After that the project looks like below:

Generate runtime artifacts and register the odata service via tcode/IWFND/MAINT_SERVICE. Now the odata service is ready for testing.

Metadata test

Of course you can use SAP gateway client to test, however I prefer Chrome extension, postman, which can organize all my test cases in a hierarchical structure like below.

You have several ways to get the url to test metadata retrieve operation. In tcode SEGW, you can get your service name.

Search it in tcode /IWFND/MAINT_SERVICE, click “SAP Gateway Client”,

Change the url as “/sap/opu/odata/sap//?$metadata”, and then trigger request. You should see 200 return code with status OK.

Or you can also use Postman, in this case you have to paste the absolute url with host name and port number, both of which could be found in gateway client response, as marked by the black rectangle above.

Read operation test

The url I am using is: https://:/sap/opu/odata/sap/ZJERRY20160310TRY_SRV/Zjerrytest20160310 The name “Zjerrytest20160310” is the entitySet name which you can find in SEGW.

The read operation works, see the part of response data below. But how does the read operation work under the hood?

We can ensure that the response we see are fetched from the automatically generated database view when CDS view is activated, and we would like to know which exact line of code in ABAP does this job. As introduced in my blog Six kinds of debugging tips to find the source code where the message is raised we can get the answer via tcode ST05.

Switch on SQL trace in your system via tcode ST05, and then perform the read operation again. Once finished, display the trace result with filter Object Name = “030*”. ( Since at this time I am not sure whether data comes from Z20160309 orZ20160310 ).

Only one result is found, and click the button to display ABAP code.

Then we get what we look for. The line 22 does the read operation.

This method CL_SQL_STATEMENT~EXECUTE_QUERY is quite useful and would be used in following chapters of this tutorial as well. Now we can study the callstack in the debugger to know how our request sent in UI is parsed and handled.

Variable lv_sql_statement in line 629 contains the automatically generated SQL statement:

SELECT "Zjerrytest20160310"."JERRYID" AS "JERRYID", "Zjerrytest20160310"."NAME" AS "NAME", "Zjerrytest20160310"."STARTLOCATION" AS "STARTLOCATION", "Zjerrytest20160310"."TARGET" AS "TARGET", "Zjerrytest20160310"."CONNID" AS "CONNID" FROM "Z20160310" AS "Zjerrytest20160310" WHERE "Zjerrytest20160310"."MANDT" = '001' WITH PARAMETERS( 'LOCALE' = 'CASE_INSENSITIVE' )

The response data in ABAP format could be found in the variable et_flat_data in this callstack frame:

Filter operation test

The url I am using is: https://:/sap/opu/odata/sap/ZJERRY20160310TRY_SRV/Zjerrytest20160310?$filter=(Jerryid%20eq’LH’) It means I want only those records which fulfill the condition “Jerryid = LH” are returned.

This time, the automatically generated SQL statement is a little bit different from the one for read operation. Here the “?” acts as a placeholder for parameter, whose value is specified by another variable in line 29.

Once line 22 is executed, the filter operation works as expected.

How to find latest information for a list of SAP annotations from SAP help

Open this url, and go to the list of SAP Annotations from the path displayed below.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何启用SAP Business by design里的Correction Invoice功能

    Subject: [Tip] How to enable the function Correction Invoice for customer invoic...

    Jerry Wang
  • 使用SAP Transaction Launcher将ABAP Webdynpro嵌入到WebClient UI中

    THINK twice why you want to include an ABAP webdynpro component into CRM UI, as ...

    Jerry Wang
  • SAP OData性能分析工具

    As mentioned by title, this blog does not introduce the OData trace functionalit...

    Jerry Wang
  • Kubernetes Scheduler Extender浅析

    Scheduler 组件可以视为一种监视 watche 和将 Pod 分配 assign 到 Node 的特殊类型控制器 controller。在 Kubern...

    runzhliu
  • JDBC读取数据优化-fetch size

    最近由于业务上的需求,一张旧表结构中的数据,需要提取出来,根据规则,导入一张新表结构中,开发同学写了一个工具,用于实现新旧结构的transformation,

    bisal
  • 2019.8.15乘兴打Codeforces Round #569 (Div. 2)小记

    Recently, on the course of algorithms and data structures, Valeriy learned how t...

    glm233
  • 在以自我为中心的照片串流中发现饮食习惯

    在我们生命的早期阶段就学习饮食习惯。但是,要知道我们与食物有关的常规如何影响我们的健康生活并不容易。在这项工作中,我们解决了以自我为中心的光流无监督地发现营养习...

    用户7724216
  • hdu----(1950)Bridging signals(最长递增子序列 (LIS) )

    Bridging signals Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/3...

    Gxjun
  • Codeforces Round #300(A.【字符串,多方法】,B.【思维题】,C.【贪心,数学】)

    A. Cutting Banner time limit per test:2 seconds memory limit per test:256 megaby...

    Angel_Kitty
  • Codeforces Round #301 (Div. 2)(A,【模拟】B,【贪心构造】C,【DFS】)

    A. Combination Lock time limit per test:2 seconds memory limit per test:256 mega...

    Angel_Kitty

扫码关注云+社区

领取腾讯云代金券