1.按订单行-采购收货

先用一个相对简单的CDS 并使用Elements注释来创建一个APP,来说明CDS Elements注释的使用。

此例子先把EKET中需收货的数据按订单号汇总生成CDS:ZMM_B_GR_EKPO,再使用些CDS创建POPF,最后使用此BOPF来创建消费的CDS,给FIORI的APP使用。

效果如图

1.按订单行-采购收货 - 第1张  | 优通SAP

1.创建可收EKET的CDS

2.创建可收EKPO的CDS

在这里把上一个CDS按订单行项目汇总,并得到未收货量。

3.创建BOPF CDS

在这里使用CDS writeDraftPersistence,把编辑的数据使为草稿记录到表ZMM_POEKPO_D中。

4.创建消费CDS

在这里使用updateEnabled: true,,deleteEnabled: true,来定义的了草稿可修改,可删除功能,

5.定义annotate ,使用注释,

增加一个Metadata Extensions 来定义CDS在SAP WEB IDE向导时使用的注释,此注释决定了生成FIORI 的格式外观等,需要自己一个个参数的自己试。

到这里SAP CDS就做完成了,激活前面的CDS的,当前的数据对像如图。,其中的ZMM_B_GR_EKPO,ZMM_B_GR_EKET,我在另外的包里,所以在这里没显示。在这里BOPF激活后,会生成BOPF对像同时生成一个对像类。

1.按订单行-采购收货 - 第2张  | 优通SAP

6.使用WEB IDE生成APP

6.1.生成ODATA

在生成APP,我们需要把前面的ZMM_C_POEKPO使用SEGW导入到我们的已有(或者前建立)项目中,也可以直接激活此ODATA服务,建议还是使用SEGW导入更好。导入后如图

1.按订单行-采购收货 - 第3张  | 优通SAP

6.2.生成APP

激活ODATA的,在SAP WEB IDE中,使用向导模板,并选择SAP Fiori Element-> List Report Application模板向导,置前一步的ODATA项目,并选择ZMM_C_POEKPO,生成APP

1.按订单行-采购收货 - 第4张  | 优通SAP

6.3.运行APP

运行后,可以订单号,供应商号来查询可收货的数据了,在查询供应商时,我们在annotate view zmm_c_poekpo中定义了,fuzzinessThreshold: 0.8,这表示输入的查询条件,配置供应商的代码的80%,原因是供应有两位前导00,而我们输入时不输入前导0。

1.按订单行-采购收货 - 第5张  | 优通SAP

7.对BOPF增加收货动作

前面向导生成后,如正常运行,我们就可以在BOPF中加入一个ACTIONS,并在annotate view zmm_c_poekpo中使用此ACTIONS,

7.1.定义BOPF动作

打开BOPF:ZMM_I_POEKPO,并转到ROOT note

1.按订单行-采购收货 - 第6张  | 优通SAP
1.按订单行-采购收货 - 第7张  | 优通SAP

增加一个ACTIONS:MIGO_OK

1.按订单行-采购收货 - 第8张  | 优通SAP

在生成的类中写入代码来处理选择的数据

使用了一个函数ZMM_PO_MIGO_GR来做收货处理

7.2.在注释中使用此动作,

修改annotate view zmm_c_poekpo,在第一个字段处增加调用

1.按订单行-采购收货 - 第9张  | 优通SAP

激活后,就可以选择FIORI查看,但由于UI5缓存原因,你可以能需要刷新的一缓存,修改才能体现在UI5前端,可查看这里

重点是需要SEGW重新服务,不然ACTIONS不会被定义到APP中。

8.在SAPUI5中查看效果

1.按订单行-采购收货 - 第10张  | 优通SAP

9.总结与问题

1.之前写的测试时发现,如上生成APP后,当在APP中编辑数据,并保存时,会把修改后的数据保存到表ZMM_POEKPO_D中,并与草稿时的数据是不一样的,但不知乍搞的,现在新做的保存时就报错,并且不会把数据保存到表中,然后网上找了很多代码,发现可以修改ZCL_DR_MM_I_POEKPO的,COPY_DRAFT_TO_ACTIVE_ENTITY方法,来把草稿内容激活,并保存处理,但这与我第一次的效果还是不一样,这保存后,激活那么草稿表中的数据就不存在了,数据又就原因了,我的代码如下,有明白的给说说,我觉得可能是我创建BOPF的CDS时是不是参数用错了,或者漏了什么参数,应该是可以实现的,

或者说,应该是不需有保存按钮,修改后直接就是草稿,这样认为所以修改的都是有效的,这样应该更方便,也不确认是不是我理解有错误引起的。

留下一个回复

你的email不会被公开。

eight + eleven =