cds view 创建和调用
cds view 是一个core data service, 能够将数据库表虚拟化为一个虚拟表(double)。因为各个使用sap的公司,使用的数据库数据是不同的,所以提供一个数据库的虚拟。 通过向虚拟double test里面插入数据,进行unit test。 下面是主要步骤。
准备一个数据表 ztest_view
1: 首先在装有abap development tool 的eclipse软件中,在自己的目录下创建一个cds view。
目录》右键》new abap repository object》选择core data service 下面的data definition(老版本是dictionary 下面的的ddl source)。
2: 给定一个cds view 名字和描述,点击finish完成,创建好了一个cds view 工程。然后进行编辑该cds view.
3: 给cds view 指定数据库表(一个或多个),图中的ztest_view就是一个数据库表,指定cds view的字段(也是数据库中的字段,图中的id,name),可以给定字段别名。也就是将数据表的字段封装成为 cds view的字段。
4: 在该页空白处,右键 》open with>data preview。即可查看到该cds view所封装的数据库的数据
5:点击上图的sql console 可以看到查询sql,可以对其进行编辑等。
6:上述操作完成,即完成cds view的创建,需要写程序去consume创建的cds view.
二:创建类调用 cds view ,对其进行测试。
1:首先创建一个类 ZCL_TEST_CDS_VIEW01 ,并创建一个方法 GET_NAME_BY_ID。该方法对cds view 进行查询。
使用如下代码:
method GET_NAME_BY_ID. * SELECT SINGLE ZHANSEN_CDS_VIEW01~RETURNNAME FROM ZHANSEN_CDS_VIEW01 WITH PRIVILEGED ACCESS * WHERE ZHANSEN_CDS_VIEW01~QUERYid = @iv_id * INTO @ev_name. SELECT SINGLE ZHANSEN_CDS_VIEW01~name FROM ZHANSEN_CDS_VIEW01 WHERE ZHANSEN_CDS_VIEW01~id = @iv_id INTO @ev_name. endmethod.
2:创建测试类: 在创建的类上面,右键》create》generate test class.
3: continue
4: 双击 文本框右边的 白色小框,给定测试类一个名字。 continue
5: 选中 要测试的方法,continue,直到完成。测试类创建成功。
6: 创建测试方法Test_Name_By_Id, 该方法中直接调用 get_name_by _id
*"* use this source file for your ABAP unit test classes class ztcl_Test_Cds_View01 definition for testing "测试类 duration short risk level harmless . private section. data: f_Cut type ref to ZCL_TEST_CDS_VIEW01. "class under test, 原来的类 CLASS-DATA lv_cds_test_environment TYPE REF TO if_cds_test_environment. "测试环境。 CLASS-METHODS: class_setup. "类初始化,每次类执行时,该方法执行 CLASS-METHODS: class_teardown. "每次类关闭时,该方法执行。 METHODS: setup. "方法执行时调用, 每次有方法执行时,该方法执行。 METHODS: teardown. "方法执行完调用, 每次方法执行完后,该方法会被调用。 methods: Test_Name_By_Id for testing. "测试类中的方法。 endclass. "ztcl_Test_Cds_View01 class ztcl_Test_Cds_View01 implementation. "实现类。 METHOD class_setup. lv_cds_test_environment = cl_cds_test_environment=>create( i_for_entity = 'ZHANSEN_CDS_VIEW01' "初始化测试环境,一旦该环境创建之后,就不会查询数据库了。无论是否向cds view中添加数据 test_associations = 'X' ). "initial the cds test environment ENDMETHOD. METHOD class_teardown. lv_cds_test_environment->destroy( ). ENDMETHOD. METHOD setup. CREATE OBJECT f_cut. ENDMETHOD. METHOD teardown. lv_cds_test_environment->clear_doubles( ). ENDMETHOD. method Test_Name_By_Id. data lt_TEST_DATA TYPE STANDARD TABLE OF ZTEST_VIEW. ) '. ) TYPE C. "准备数据,向cds view中插入的数据。 lt_TEST_DATA = VALUE #( ( id = ' name = 'lisi' ) " the first data adds to cds view ( id = ' name = 'zhaoliu' ) " other data with same name will be abandoned. ). lv_cds_test_environment->insert_test_data( i_data = lt_TEST_DATA ). "向cds view中插入数据。 CALL METHOD f_cut->get_name_by_id( "调用 方法 EXPORTING iv_id = lv_id IMPORTING ev_name = lv_name ). cl_abap_unit_assert=>assert_equals( act = lv_name "断言。 exp = 'lisi' msg = 'the name is not expected!' ). endmethod. endclass.
以下代码,直接从数据库中进行取出数据。这时不能有:
lv_cds_test_environment = cl_cds_test_environment=>create( i_for_entity = 'ZHANSEN_CDS_VIEW01' "初始化测试环境,一旦该环境创建之后,就不会查询数据库了。无论是否向cds view中添加数据,都会只查询cds view. test_associations = 'X' ). "initial the cds test environment
*"* use this source file for your ABAP unit test classes class ztcl_Test_Cds_View01 definition for testing duration short risk level harmless . private section. data: f_Cut type ref to ZCL_TEST_CDS_VIEW01. "class under test CLASS-DATA lv_cds_test_environment TYPE REF TO if_cds_test_environment. METHODS: setup. methods: Test_Name_By_Id for testing. endclass. "ztcl_Test_Cds_View01 class ztcl_Test_Cds_View01 implementation. METHOD setup. CREATE OBJECT f_cut. ENDMETHOD. method Test_Name_By_Id. data lt_TEST_DATA TYPE STANDARD TABLE OF ZTEST_VIEW. ) '. ) TYPE C. CALL METHOD f_cut->get_name_by_id( EXPORTING iv_id = lv_id IMPORTING ev_name = lv_name ). cl_abap_unit_assert=>assert_equals( act = lv_name exp = 'lisi' msg = 'the name is not expected!' ). endmethod. endclass.
cds view: @AbapCatalog.sqlViewName: 'CDS_VIEW01' 改名字在se11下面查找 cds view
https://www.jianshu.com/p/44b0fd2ef5bc
问题:当 一个测试方法中使用了多个cds veiw时,需要创建一个多cds view的测试环境
go_cds_test_environment ?= cl_cds_test_environment=>create_for_multiple_cds( i_for_entities = VALUE #( ( i_for_entity = 'I_RESPYMGMTTEAMHEADER' i_select_base_dependencies = abap_true i_dependency_list = VALUE #( ( 'P_RespyMgmtTeamHeader' ) ) ) ( i_for_entity = 'I_RESPYMGMTTEAMATTRIBUTE' i_select_base_dependencies = abap_true i_dependency_list = VALUE #( ( 'hrp7731') ( 'hrt7731') ) ) ( i_for_entity = 'P_RESPYMTEAMMEMBERFUNCBASIC' i_select_base_dependencies = abap_true i_dependency_list = VALUE #( ( 'P_RespyMgmtRelationships' ) ( 'hrp7732') ) ) ( i_for_entity = 'I_RESPYMGMTBPWITHUSER' i_select_base_dependencies = abap_true i_dependency_list = VALUE #( ( 'P_RespyMgmtBPWithUser' ) ) ) ) ).
这样就能在以上4个cds view的数据库中添加数据。
cds view 创建和调用的更多相关文章
- cds view join和association
1:创建两张表:ztt_teacher01 和ztt_teacher02 用于 cds view中的join和association 2:创建两个cds view:ztt_teacher01_id_n ...
- iOS开发——UI进阶篇(八)pickerView简单使用,通过storyboard加载控制器,注册界面,通过xib创建控制器,控制器的view创建,导航控制器的基本使用
一.pickerView简单使用 1.UIPickerViewDataSource 这两个方法必须实现 // 返回有多少列 - (NSInteger)numberOfComponentsInPicke ...
- Android应用程序中的多个Activity的显示创建和调用
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTkzNjE0Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...
- # 2017-2018-2 20155228 《信息安全系统设计原理》 使用VirtualStudio2008创建和调用静态库和使用VirtualC++6.0创建和调用动态库
使用virtual c++ 6.0创建和调用动态库 不得不说一下关于环境的问题 只要我打一个响指,一半的安装在win7上的VC6.0都会因为兼容性问题直接崩掉 懒得研究怎么解决兼容性的问题了,直接开一 ...
- 如何用ABAP代码读取CDS view association的数据
我有如下一个CDS view, 这个view的数据来自CRMD_ORDERADM_H, 定义了一个名称为_statushelp的association, 指向了另一个CDS view Z_C_Stat ...
- mysql 存储过程、视图---创建、调用、删除
之前一直用的是Sql Server数据库,最近偶然机会接触到mysql.这里总结了关于mysql 存储过程.视图的“创建.调用.删除”示例 ============================== ...
- 如何在SAP云平台ABAP编程环境里把CDS view暴露成OData服务
Jerry 2016年在学习SAP CDS view时,曾经写过一个CDS view的自学系列,其中有一篇提到了一个很方便的注解: @OData.publish: true 加上这个注解的CDS vi ...
- 基础总结篇之八:创建及调用自己的ContentProvider
转自:http://blog.csdn.net/wellsoho/article/details/49494141 若不能坚持到底,即使是朽木也不能折断:只要坚持不停地用刀刻,就算是金属玉石也可以雕出 ...
- C/C++中动态链接库的创建和调用
DLL 有助于共享数据和资源.多个应用程序可同时访问内存中单个DLL 副本的内容.DLL 是一个包含可由多个程序同时使用的代码和数据的库.下面为你介绍C/C++中动态链接库的创建和调用. 动态连接库的 ...
随机推荐
- php项目踩到的empty函数的一个坑
报错信息: PHP Fatal error: Can't use function return value in write context in /目录省略.../XXService.php on ...
- Spring 事务 readOnly 到底是怎么回事?
Spring的事务经常会有这样的配置: 1 <tx:method name="search*" read-only="true" /> 或者这样的注 ...
- Airtest iOS测试环境部署
[本文出自天外归云的博客园] 简介 这个Airtest IDE是通过iOS-Tagent来操作iPhone的,你可以在Airtest IDE里录制脚本来实现自动化操作iPhone 前提 1. 得有个i ...
- linux的挂载的问题,重启后就挂载就没有了
我用fdisk命令,分一个/dev/sda6出来,然后用mkfs格式化为ext3,然后挂载到根目录下的PPP文件夹中,挂载是成功了,但是用reboot和shutdown重启或关机后挂载就没有了 要修改 ...
- HTTP 02 HTTP1.1 协议
发送请求: 返回时, content-type 与 HTTP 正文之间有一个空格 HTTP 是不保存状态协议, 也就是说在 HTTP 这个级别, 协议对于发送过的请求或相应都不做持久化处理. 但是, ...
- Linux下用gSOAP开发Web Service服务端和客户端程序
网上本有一篇流传甚广的C版本的,我参考来实现,发现有不少问题,现在根据自己的开发经验将其修改,使用无误:另外,补充同样功能的C++版本,我想这个应该更有用,因为能用C++,当然好过受限于C. 1.gS ...
- hadoop 动态调整mapred参数
bin/hadoop job -set-reduce-capacity job_20151126032920_1142443 1000 调成map数 bin/hadoop job -set-prior ...
- python定义函数时,形参前加*和**的意义
转发:https://blog.csdn.net/qq_34806812/article/details/82017839 1.加*表示接受一个tuple类型(元组),如: 2.加**表示接受一个di ...
- java生成txt文件,读txt文件
1.方法1 public static void main(String[] args) { try { FileWriter fileWriter = new FileWriter("c: ...
- 114、drawable和mipmap 目录下图片的区别
android 在 API level 17 加入了 mipmap 技术,对 bitmap 图片的渲染支持 mipmap 技术,来提高渲染的速度和质量.mipmap 是一种很早就有的技术了,翻译过来就 ...