CAP oData v4深度删除

2020-08-23 23:33发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我有两个CDS实体,其父/子关系由许多/关联到关键字定义。 CDS定义基于 Cap Cloud文档。 我已从相关实体中删除了所有的webhooks。

实体托运人{
 密钥UUID:UUID;
 地址1:字符串(40);
 城市:字符串(40);
 公司:String(40);
 CompanyId:UUID;
 联系人:字符串(40);
 国家:String(2);
 电子邮件:String(60);
 ID:String(4);
 名称:String(60);
 电话:String(15);
 邮政编码:字符串(10);
 StateProvince:字符串(40);
 符号:字符串(400);
 tenantID:UUID;
 ToCarriers:许多数据的组合。ToCarriers.Shipper= $ self上的Carrier;
 }


 实体承运人{
 密钥UUID:UUID;
 托运人:托运人协会;
 AdapterRegistrationId:String(4);
 CompanyId:UUID;
 ID:String(4);
 名称:String(40);
 符号:字符串(400);
 tenantID:UUID;
 }
 

我已经创建了一个SAPUI5应用程序CRUD应用程序,用于基于 sapui5 hana点播文档

问题排查:

1)创建父条目

2)创建子条目

创建的代码段

 onCreate:function(){
 var oList = this.byId(" carrierList"),
 oBinding = oList.getBinding(" items"),
 oContext = oBinding.create({
 " Shipper_UUID":this.sObjectId.replace(/[{{(}}]/g,''),
 "ID"			: "",
 "名称"			: "",
 "符号":""
 });


 this.setUIChanges();
 oList.getItems()。some(function(oItem){
      如果(oItem.getBindingContext()=== oContext){
 oItem.focus();
 oItem.setSelected(true);
         返回true;
 }
 });
 }

 

3)通过数据库资源管理器验证UUID关系

4)删除父级

代码段:

 onDelete:函数(){
 var oSelected = this.byId(" shipperList")。getSelectedItem();

 如果(oSelected){
 oSelected.getBindingContext()。delete(" $ auto")。then(function(){
 MessageToast.show(this._getText(" deletionSuccessMessage"));
 } .bind(this),函数(oError){
 MessageBox.error(oError.message);
 });
 }
 },
 

数据库浏览器中仍然存在孤儿:(

(48.7 kB)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我有两个CDS实体,其父/子关系由许多/关联到关键字定义。 CDS定义基于 Cap Cloud文档。 我已从相关实体中删除了所有的webhooks。

实体托运人{
 密钥UUID:UUID;
 地址1:字符串(40);
 城市:字符串(40);
 公司:String(40);
 CompanyId:UUID;
 联系人:字符串(40);
 国家:String(2);
 电子邮件:String(60);
 ID:String(4);
 名称:String(60);
 电话:String(15);
 邮政编码:字符串(10);
 StateProvince:字符串(40);
 符号:字符串(400);
 tenantID:UUID;
 ToCarriers:许多数据的组合。ToCarriers.Shipper= $ self上的Carrier;
 }


 实体承运人{
 密钥UUID:UUID;
 托运人:托运人协会;
 AdapterRegistrationId:String(4);
 CompanyId:UUID;
 ID:String(4);
 名称:String(40);
 符号:字符串(400);
 tenantID:UUID;
 }
 

我已经创建了一个SAPUI5应用程序CRUD应用程序,用于基于 sapui5 hana点播文档

问题排查:

1)创建父条目

2)创建子条目

创建的代码段

 onCreate:function(){
 var oList = this.byId(" carrierList"),
 oBinding = oList.getBinding(" items"),
 oContext = oBinding.create({
 " Shipper_UUID":this.sObjectId.replace(/[{{(}}]/g,''),
 "ID"			: "",
 "名称"			: "",
 "符号":""
 });


 this.setUIChanges();
 oList.getItems()。some(function(oItem){
      如果(oItem.getBindingContext()=== oContext){
 oItem.focus();
 oItem.setSelected(true);
         返回true;
 }
 });
 }

 

3)通过数据库资源管理器验证UUID关系

4)删除父级

代码段:

 onDelete:函数(){
 var oSelected = this.byId(" shipperList")。getSelectedItem();

 如果(oSelected){
 oSelected.getBindingContext()。delete(" $ auto")。then(function(){
 MessageToast.show(this._getText(" deletionSuccessMessage"));
 } .bind(this),函数(oError){
 MessageBox.error(oError.message);
 });
 }
 },
 

数据库浏览器中仍然存在孤儿:(

(48.7 kB)
付费偷看设置
发送
4条回答
三十六小时_GS
1楼-- · 2020-08-23 23:35

对绑定上下文的.delete(" $ auto")调用可能与此有关。

在manifest.json中的OData v4模型上设置的模式是什么? groupId $ auto将使用批处理请求(而不是$ direct)。 还要确保ynchronizationMode为" none"。 请参见 https://ui5 .sap.com/#/api/sap.ui.model.odata.v4.ODataModel%23constructor

将src代码放在 https://github.com/sapmentors/cap-community/tree/master/issues ,所以我们可以说代码而不是猜测:)

暮风yp
2楼-- · 2020-08-23 23:45

是否有任何特定原因 为什么不使用Fiori Elements并使用手动方式来实现UI? 由于您已经在使用UUID,建议您重用@ sap/cds/common中的cuid,并将@ odata.draft.enabled添加到服务中的主要实体。 然后添加所需的UI批注,您将获得没有一行JavaScript的CRUD UI。

bbpeas
3楼-- · 2020-08-23 23:38

此问题可以通过下面的git repo重现。 非常感谢Gregor Wolf通过简单的HTTP调用使问题在本地可重现:

https://github.com/austinkloske22/deepDeletion

天桥码农
4楼-- · 2020-08-23 23:55
# p #

Volker,我在这里添加了SAPUI5应用程序源代码:https://github.com/sapmentors/cap-community/issues/36

  • groupId = $ auto
  • synchronizationMode ="无"

要回应上面的Gregors评论,我将检查此功能-我认为有很多很好的用例可以做到这一点,但是此应用程序实际上只是一个简单的示例来说明问题。 我还有其他一些SAPUI5应用程序,它们更加复杂,并且不能使用注释。 我需要对所有SAPUI5应用程序进行深度删除。

一周热门 更多>