何时使用(装饰)什么以及为什么 - DefaultErpHttpDestination、DefaultHttpDestination?
When to use (decorate with) what and why - DefaultErpHttpDestination, DefaultHttpDestination?
使用 java SAP Cloud SDK
我必须使用 com.sap.cloud.sdk.s4hana.datamodel.odata.namespaces.outbounddeliveryv2.batch.OutboundDeliveryV2ServiceBatch.execute(HttpDestinationProperties destination)
在 S/4 系统上执行一些更新。此方法 execute
采用 HttpDestinationProperties
.
类型的参数
因为我需要一个目的地,所以我使用下面的代码来获取目的地:
HttpDestination destination = DestinationAccessor.getDestination("MyErpSystem").asHttp();
由于 HttpDestination
扩展了 HttpDestinationProperties
,我们可以安全地将其传递给 execute
。但是根据step 4 of 'Connect to OData Service on Cloud Foundry Using SAP Cloud SDK' tutorial,访问目的地的代码是这样的:
ErpHttpDestination destination = DestinationAccessor.getDestination("MyErpSystem").asHttp().decorate(DefaultErpHttpDestination::new);
然后他们将该目的地传递给服务的 execute
方法。
我的问题是,由于 execute
方法采用 HttpDestinationProperties
类型的参数,我怎么知道我必须使用 DefaultErpHttpDestination
? DefaultHttpDestination
.
也是如此
我有以下问题 -
- 何时以及为什么我应该将目的地包装在
DefaultErpHttpDestination
中?
- 何时以及为什么我应该将目的地包装在
DefaultHttpDestination
中?
- 我为什么要把目的地包装在上面两个包装器中?
这是一个很好的问题!
上下文:
- 当然你可以继续使用你原来的方法:
HttpDestination destination =
DestinationAccessor.getDestination("MyErpSystem").asHttp();
这是 destinations 目标 generic HTTP 服务端点的推荐方式。
它加载 HTTP 连接所需的目标属性,例如URL、身份验证、...
- 在教程中,我们描述了与 S/4HANA OData 服务的集成:
HttpDestination destination =
DestinationAccessor.getDestination("MyErpSystem").asHttp()
.decorate(DefaultErpHttpDestination::new);
通过 "decorating" 具有 ERP 属性的 HttpDestination
实例,我们启用 additional S/4 相关的 HTTP 请求 headers:sap-client
和 sap-locale
。通过上述配置,这些值会自动从 destination 服务中读取 - 如果它们已设置。
您的问题(顺序改变):
"When and why should I wrap the destination in DefaultHttpDestination?"
DestinationAccessor#getDestination
returns 通用 Destination
。为了确保我们正在处理 HTTP(而不是 RFC)连接,您需要 运行 #asHttp
- 正如您已经做的那样。使用生成的 HttpDestination
实例,您可以 运行 HTTP 查询,例如 OData 和 REST。根据您的用例,不需要额外包装。
例如,如果您要使用 BAPI 端点,那么您需要 运行 #asRfc
。此方法将检查不同的 destination 属性以确保设置了所有必需的值。
"When and why should I wrap the destination in DefaultErpHttpDestination?"
建议仅在处理 S/4 服务端点并且依赖 sap-client
和 sap-locale
。包装可以在您的应用程序 运行 时间的任何时间完成,只要它发生在 #execute(HttpDestinationProperties)
方法之前。
如果您不想第二次包装它,那么您需要手动管理 sap-client
和 sap-locale
.[=29= 的 HTTP 请求 headers ]
"Why should I wrap the destination in above two wrappers at all?"
这是API合同。它确保在调用实际请求之前正确设置所有必需的 destination 属性。提供了目标实例的(可选)ERP 风味包装,以确保自动考虑所有 S/4 属性。
使用 java SAP Cloud SDK
我必须使用 com.sap.cloud.sdk.s4hana.datamodel.odata.namespaces.outbounddeliveryv2.batch.OutboundDeliveryV2ServiceBatch.execute(HttpDestinationProperties destination)
在 S/4 系统上执行一些更新。此方法 execute
采用 HttpDestinationProperties
.
因为我需要一个目的地,所以我使用下面的代码来获取目的地:
HttpDestination destination = DestinationAccessor.getDestination("MyErpSystem").asHttp();
由于 HttpDestination
扩展了 HttpDestinationProperties
,我们可以安全地将其传递给 execute
。但是根据step 4 of 'Connect to OData Service on Cloud Foundry Using SAP Cloud SDK' tutorial,访问目的地的代码是这样的:
ErpHttpDestination destination = DestinationAccessor.getDestination("MyErpSystem").asHttp().decorate(DefaultErpHttpDestination::new);
然后他们将该目的地传递给服务的 execute
方法。
我的问题是,由于 execute
方法采用 HttpDestinationProperties
类型的参数,我怎么知道我必须使用 DefaultErpHttpDestination
? DefaultHttpDestination
.
我有以下问题 -
- 何时以及为什么我应该将目的地包装在
DefaultErpHttpDestination
中? - 何时以及为什么我应该将目的地包装在
DefaultHttpDestination
中? - 我为什么要把目的地包装在上面两个包装器中?
这是一个很好的问题!
上下文:
- 当然你可以继续使用你原来的方法:
这是 destinations 目标 generic HTTP 服务端点的推荐方式。 它加载 HTTP 连接所需的目标属性,例如URL、身份验证、...HttpDestination destination = DestinationAccessor.getDestination("MyErpSystem").asHttp();
- 在教程中,我们描述了与 S/4HANA OData 服务的集成:
通过 "decorating" 具有 ERP 属性的HttpDestination destination = DestinationAccessor.getDestination("MyErpSystem").asHttp() .decorate(DefaultErpHttpDestination::new);
HttpDestination
实例,我们启用 additional S/4 相关的 HTTP 请求 headers:sap-client
和sap-locale
。通过上述配置,这些值会自动从 destination 服务中读取 - 如果它们已设置。
您的问题(顺序改变):
"When and why should I wrap the destination in DefaultHttpDestination?"
DestinationAccessor#getDestination
returns 通用 Destination
。为了确保我们正在处理 HTTP(而不是 RFC)连接,您需要 运行 #asHttp
- 正如您已经做的那样。使用生成的 HttpDestination
实例,您可以 运行 HTTP 查询,例如 OData 和 REST。根据您的用例,不需要额外包装。
例如,如果您要使用 BAPI 端点,那么您需要 运行 #asRfc
。此方法将检查不同的 destination 属性以确保设置了所有必需的值。
"When and why should I wrap the destination in DefaultErpHttpDestination?"
建议仅在处理 S/4 服务端点并且依赖 sap-client
和 sap-locale
。包装可以在您的应用程序 运行 时间的任何时间完成,只要它发生在 #execute(HttpDestinationProperties)
方法之前。
如果您不想第二次包装它,那么您需要手动管理 sap-client
和 sap-locale
.[=29= 的 HTTP 请求 headers ]
"Why should I wrap the destination in above two wrappers at all?"
这是API合同。它确保在调用实际请求之前正确设置所有必需的 destination 属性。提供了目标实例的(可选)ERP 风味包装,以确保自动考虑所有 S/4 属性。