创建采购收货的CDS-按订单

以下主要目的是学习如何使用CDS的注释annotate来做一个FIORI APP,同时学习BOPF的一些简单使用,基于学习的目的,其中的一些功能并不是为采购收货所必须的,有些只是为了学习而实现以供参考。在采购收货中我们先汇总采购收货计划EKET的需收货的数量,然后按此数量来进行收货。

以下学习中,CDS使用SAP HANA 创建,FIORI APP使用SAP WEB IDE创建。

在学习以下一些基本内容

  1. 创建主从表CDS的创建;
  2. 学习CDS 视图生成BOPF的注释使用;
  3. 学习BOPF中创建动作Actions,并写入动作实现类的常用代码;
  4. 学习BOPF数据有效性检查较验方法;
  5. 学习BOPF中锁使用的方法;
  6. 学习在BOPF中使用Draft草稿操作的方法;
  7. 在SAP WEB IDE中使用CDS Elements 注释快速生成APP的运用;
  8. 在WEB IDE中实现一些CDS注释不能实现的功能,比如动作确认等。

1.实现效果

创建采购收货的CDS-按订单 - 第1张  | 优通SAP

2.创建需收货明细CDS

由于我们想使用EKET的数量来进行收货,但对一个EKPO行来说ETET会有多个计划行,并且可能会有部份已收货情况,所以我们需先从EKET中取出需收货的相关数据来,由于我刚好有一个已存在的EKET视图,所以我直接使用了此视图来作为需收货的EKET明细,事实使用时,可以进行更多的精减。其实里面只要有ebeln,ebelp,etenr,wemng,obmng字段就行,并且其它的视图注释好多也是可以取消的。@ObjectModel部份是可以去除的。此CDS的使用说明可参看这里。

说明

  • cast( ( _eket.menge – _eket.wemng ) as obmng ) as OBMNG,第一个as obmng,表示数据结果数据元素为obmng,第二个表示生成的视图字段名为obmng
  • @Semantics.quantity.unitOfMeasure: ‘meins’ 表示下面的字段数量单位为meins

3.按订单行项目汇总

由于EKET是计划行的需收货数据,所以我们按采购订单行项目汇总生成需收货数据,在这里使用SUM,GROUP BY.

4.创建业务对像BOPF对应EKKO的CDS

说明

  1. transactionalProcessingEnabled: true, 表示生成BOPF
  2. draftEnabled: true,表示BOPF使用草稿功能,
  3. writeDraftPersistence: ‘ZMM_I_GR_EKKO_D’表示草稿数据表为ZMM_I_GR_EKKO_D
  4. 此CDS使用为采购订单抬头数据,其中使用了明细CDS:ZMM_I_GR_EKPO,所以不能独立激活,需要与后面的一步的CDS一起激活
  5. @ObjectModel.association.type: [#TO_COMPOSITION_CHILD]表示后面的对像为字node对像。

5.创建业务对像BOPF对应EKPO的CDS

说明

  • cast( ” as charg_d ) as charg,此说明生成一个内容为空字符表的字段,并且字段名为CHARG,字段元素使用charg_d。
  • 草稿数据表为ZMM_I_GR_EKPO_D

6.采购订单收货情况统计信息CDS

为了解决在显示采购订单抬头数据时,只显示存在未收货明细的采购订单,所以加了些表,同时后期在明细页时显示一些采购订单完成情况的统计信息也会加在这里,比如显示收货完成进度条等。

7.生成消费抬头表CDS视图

8.说明:

  1. 激活需要与后面明细的视图一起同时才能激活。
  2. @OData.publish: true,用于生成ODATA服务,但此服务生成后没有激活,如要直接使用此服务的话,可使用事务码/N/IWFND/MAINT_SERVICE在其中添加服务,来添加此服务,或者直接在SEGW中已有的项目中添加此服务。
  3. updateEnabled: true,设置可以修改,用于修改收货数量,
  4. deleteEnabled: true,设置可以删除数据,如不做增强的话,默认为删除修改的数据,也就是删除草稿内容。
  5. deleteEnabled: true,使用草案
  6. association [0..1] to C_MM_SupplierValueHelp,是连接到供应商的搜索帮助,在后面字段中注释了的LIFNR中,就会使用此CDS
  7. @Consumption: { valueHelp: ‘_SupplierValueHelp’,filter.mandatory: true }此用于在屏幕中生成一个带必输入的供应商查询条件,可以打开此注释,测试。
  8. @ObjectModel.association.type: [#TO_COMPOSITION_CHILD]用于指定后面的为字节点

创建采购收货的CDS-按订单 - 第2张  | 优通SAP

9.生成消费明细表视图

说明

  1. @ObjectModel.readOnly: true,指定不能修改字段值,由于我们只是用采购数据进行收货,所以能修改的主要也就是数量,及地点,批次等相关信息。
  2. @Semantics.quantity.unitOfMeasure: ‘meins’,指定数量的单位。

10.定义CDS annotate

到上面的步骤为止,我们的CDS算是创建完成了,这时我们可以在HANA Studio中显示CDS数据,也能测试BOPF。但我们的目的是要在WEB IDE中生成 Elements APP。所以我们还得定义 Elements相关的一些东西,也就是定义CDS的注释,此注释是影响了WEB IDE创建后的app的显示属性,细节很多,可以查看后面的解说,同时自己修改注释来查看变化影响。一个创建了HEADER,items两个的Metadata Extensions,但现只用到了HEADER的注释,另一个在后面会用到。

8.说明:

  1. 在headerInfo中指定很多的抬头信息,具体的内容还在测试中。
  2. @Search.searchable: true //指定主页可以有搜索框,
  3. @Search:{defaultSearchElement: true,fuzzinessThreshold: 0.8}//主页可搜索框可搜索字段,在这里指定的0.8是一个模糊搜索的一个度量,最大是1,由于供应商有前导0,所以用此方法来避免输入供应商前导0来查询。
  4. lineItem,指定在列表中显示的信息,
  5. fieldGroup指定在对像页(细节页)时抬头显示的信息。
创建采购收货的CDS-按订单 - 第3张  | 优通SAP

ITEMS的注释

12.总结

  1. 当修改了CDS后,特别是BOPF后,如一些功能发现不正常,可以考虑删除BOPF及及相关的所有类,表,重新激活CDS来生成BOPF及相关内容。
  2. 当修改CDS,及注释后,在前端没反映出修改的内容,可以重新生成ODATA,或者SEGW重生活对应的项目,同时使用事务码:/n/IWFND/CACHE_CLEANUP清除缓存。
  3. 由于做CDS时,我们一开始经常什么变更字段,表等,或者需求的变化,而CDS会自动生成很多东西,特别是BOPF的相关的东西,很多会自动生成,但由于CDS的变更,特别是字段的这些变更能够自动更新,所以会导致各种错误,这里的解决法办,可能是删除相关自动生成的对像,如你准确知道应该要删除什么对像那可直接删除,但事实中我们总是判断不了要删除那些自动生成的对像,所以我都是删除所有自动生成的对像,为此我们最好把一个业务相关的CDS创建到一个包里,这里可能会更方便删除。
  4. 在主从视图关联激活时,需要两个视图同时一起激活。
  5. 在激活时,最好当前显示的只是需要激活的对像,不然,激活时会判断已打开的是否能激活(就算没选中也会去激活),这样报错不一定是你当前对像的报错。