【问题标题】:VdmComplex Changes Not Working with PATCHVdmComplex 更改不适用于 PATCH
【发布时间】:2021-03-18 16:02:50
【问题描述】:

使用带有 3.39.0 的 SAP B1 .edmx 并尝试使用新的 DocumentPackages 更新 DeliveryNotes。但是,更新操作的执行最终通过的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


    【解决方案1】:

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

    【讨论】:

    • @Conner 该功能现已推出
    • 完美!我非常密切地关注 SDK 的发布,所以我在星期五开始使用它。感谢您的帮助!
    【解决方案2】:

    是的,这是目前的功能差距。 PATCH 只会考虑根实体的属性和导航属性,而忽略复杂属性的变化。

    在支持使用PUT 更新之前,通过.replacingEntity() 选项应该可以工作。

    【讨论】:

    • 不幸的是,PUT 操作在这种情况下并不完全可行,因为 Document 有数百个无法更新的字段,如果您发出 PUT 请求会导致错误。
    • 我可以使用通用客户端发出请求,所以我认为我们现在应该没问题。
    • 是的,这将是我的下一个建议。一旦 SDK 原生支持,我会在这里更新。
    猜你喜欢
    • 2023-01-29
    • 2017-10-04
    • 2019-08-31
    • 2013-05-17
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    相关资源
    最近更新 更多