更新请求不再将所有字段发送到 SAP S/4HANA 系统
Update requests send no longer all fields to the SAP S/4HANA system
自从更新到 Cloud SDK 版本 2.0.0 后,我们在向请求中添加字段时遇到了问题。主要是关于“盘点实物盘点单据项目”的流程步骤。这里,项目的手动设置属性不会发送到请求中。
这些是我们实际设置并发送到 S/4 系统的属性:
这些是嵌入在查询中的属性:
快速回答
在更新流畅的助手上调用方法 includingFields(PhysInventoryDocItem.MATERIAL, ...)
。
更长的解释
1.11.1 版本的 SAP S/4HANA Cloud SDK 在更新请求期间略微更改了 Java 虚拟数据模型 (VDM) 的行为。 release notes 状态:
Update requests with the Java Virtual Data Model (VDM) no longer send all non-null fields to the SAP S/4HANA system, but only changed fields. You may need to adapt the logic in your code to explicitly change fields by using the setters of the entity classes, or use the includingFields method to manually specify fields to include.
因此,在您的情况下,默认情况下只会发送与按键获取 OData 请求返回的结果相比具有不同值的字段,这通常是 PATCH
请求所期望的。例如,字段 material 的值可能没有改变,因为它之前是 "MAT_KONSI_APP1"
。
因为有些情况下需要始终发送一些必填字段,SAP S/4HANA Cloud SDK 允许您控制始终发送哪些字段。在 VDM 的更新流利助手上使用 includingFields
方法来指定在任何情况下都应发送的字段,即使它们的值没有改变。
在您的情况下,如果您想发送 material 和 输入单位 字段,这可能是强制性的属性,您需要以下代码:
service.updatePhysInventoryDocItem(itemToUpdate)
.includingFields(PhysInventoryDocItem.MATERIAL,
PhysInventoryDocItem.UNIT_OF_ENTRY)
.execute()
自从更新到 Cloud SDK 版本 2.0.0 后,我们在向请求中添加字段时遇到了问题。主要是关于“盘点实物盘点单据项目”的流程步骤。这里,项目的手动设置属性不会发送到请求中。
这些是我们实际设置并发送到 S/4 系统的属性:
这些是嵌入在查询中的属性:
快速回答
在更新流畅的助手上调用方法 includingFields(PhysInventoryDocItem.MATERIAL, ...)
。
更长的解释
1.11.1 版本的 SAP S/4HANA Cloud SDK 在更新请求期间略微更改了 Java 虚拟数据模型 (VDM) 的行为。 release notes 状态:
Update requests with the Java Virtual Data Model (VDM) no longer send all non-null fields to the SAP S/4HANA system, but only changed fields. You may need to adapt the logic in your code to explicitly change fields by using the setters of the entity classes, or use the includingFields method to manually specify fields to include.
因此,在您的情况下,默认情况下只会发送与按键获取 OData 请求返回的结果相比具有不同值的字段,这通常是 PATCH
请求所期望的。例如,字段 material 的值可能没有改变,因为它之前是 "MAT_KONSI_APP1"
。
因为有些情况下需要始终发送一些必填字段,SAP S/4HANA Cloud SDK 允许您控制始终发送哪些字段。在 VDM 的更新流利助手上使用 includingFields
方法来指定在任何情况下都应发送的字段,即使它们的值没有改变。
在您的情况下,如果您想发送 material 和 输入单位 字段,这可能是强制性的属性,您需要以下代码:
service.updatePhysInventoryDocItem(itemToUpdate)
.includingFields(PhysInventoryDocItem.MATERIAL,
PhysInventoryDocItem.UNIT_OF_ENTRY)
.execute()