首页 > 解决方案 > VdmComplex 更改不适用于 PATCH

问题描述

使用带有 3.39.0 的 SAP B1 .edmx 并尝试DeliveryNotes使用新的DocumentPackages. 但是,DocumentPackage最终通过执行更新操作传递的列表是空的。

代码:

var packagesUpdateDocument = new Document();

packagesUpdateDocument.setDocEntry(1);

var documentPackages = new ArrayList<DocumentPackage>();
var documentPackage = new DocumentPackage();

documentPackage.setNumber(10);

documentPackages.add(documentPackage);

packagesUpdateDocument.setDocumentPackages(documentPackages);


var updateDeliveryPackagesRequest = service.withServicePath("etc")
                    .updateDeliveryNotes(packagesUpdateDocument);

var updateDeliveryPackagesResponse = updateDeliveryPackagesRequest.tryExecute(serviceLayerDestination);

查看服务层的日志,我可以看到这是最终由客户端发送的请求:

PATCH /b1s/v2/DeliveryNotes(1)

{"DocEntry":1,"DocumentPackages":[{}],"@odata.type":"SAPB1.Document"}

据我了解,PATCH 请求将自动忽略生成的客户端认为“未更改”的任何内容。

打印更改的字段:

System.out.println(packagesUpdateDocument.getChangedFields());

产量:

{
  DocEntry=175017, 
  DocumentPackages=
    [DocumentPackage
      ( 
        super=VdmObject(customFields={}, 
        changedOriginalFields={}), 
        odataType=SAPB1.DocumentPackage, 
        number=10, 
      )
    ]
  .....
}

我相信包没有记录已更改的字段。虽然我不确定。

有没有我遗漏的步骤或者这是一个功能差距?

标签: sap-cloud-sdk

解决方案


从 SAP Cloud SDK 3.42.0 开始,我们支持使用开箱即用的 PATCH 更新复杂属性。有关更多详细信息,请参阅发行说明


推荐阅读