VdmComplex 更改不适用于 PATCH
VdmComplex Changes Not Working with PATCH
将 SAP B1 .edmx 与 3.39.0 一起使用并尝试使用新的 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 请求将自动忽略生成的客户端认为 'unchanged.'
的任何内容
正在打印更改的字段:
System.out.println(packagesUpdateDocument.getChangedFields());
产量:
{
DocEntry=175017,
DocumentPackages=
[DocumentPackage
(
super=VdmObject(customFields={},
changedOriginalFields={}),
odataType=SAPB1.DocumentPackage,
number=10,
)
]
.....
}
我相信该包没有记录已更改的字段。虽然我不确定。
我是否遗漏了某个步骤或者这是一个功能差距?
是的,这是目前的一个功能差距。 PATCH
将只考虑根实体的属性和导航属性,而忽略复杂属性的变化。
直到支持使用 PUT
更新而不是通过 .replacingEntity()
选项应该可以工作。
从 SAP Cloud SDK 3.42.0 开始,我们支持使用开箱即用的 PATCH 更新复杂属性。有关详细信息,请参阅 release notes。
将 SAP B1 .edmx 与 3.39.0 一起使用并尝试使用新的 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 请求将自动忽略生成的客户端认为 'unchanged.'
的任何内容正在打印更改的字段:
System.out.println(packagesUpdateDocument.getChangedFields());
产量:
{
DocEntry=175017,
DocumentPackages=
[DocumentPackage
(
super=VdmObject(customFields={},
changedOriginalFields={}),
odataType=SAPB1.DocumentPackage,
number=10,
)
]
.....
}
我相信该包没有记录已更改的字段。虽然我不确定。
我是否遗漏了某个步骤或者这是一个功能差距?
是的,这是目前的一个功能差距。 PATCH
将只考虑根实体的属性和导航属性,而忽略复杂属性的变化。
直到支持使用 PUT
更新而不是通过 .replacingEntity()
选项应该可以工作。
从 SAP Cloud SDK 3.42.0 开始,我们支持使用开箱即用的 PATCH 更新复杂属性。有关详细信息,请参阅 release notes。