点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
嗨!
我一直在SEGW中开发OData服务,遇到过Function导入。 我经历了
https://help.sap.com/saphelp_nw74/ helpdata/zh-CN/c5/dc22512c312314e10000000a44176d/content.htm
我仍然不清楚。 有人可以帮我吗?
谁能解释-
- 使用函数导入吗?
- 当我们可以通过实体实现CRUD操作时,为什么要使用函数imports。
- 使用函数导入的某些情况?
- 何时使用函数导入以及何时通过实体实现CRUD。
嗨,
请参考我的博客让我们的代码在OData服务中进行CRUDQ和函数导入操作!并检查最后一个 函数导入部分。
此致
钱德拉(Chandra)
你好Supriya,
您是否使用SEGW构建服务?
如果是,则以下详细信息将帮助您解决错误。
但是,即使您不使用segw t代码构建服务,也不使用基于代码的实现(se80)技术,我们也可以按以下方式进行编码。
由于结构不匹配,导致出现该错误。
因此,请再次检查并发送适当的结构作为答复。
请参阅此内容,这将有助于您解决问题。
当您转到ur/IWBEP/IF_MGW_APPL_SRV_RUNTIME〜GET_ENTITYSET在DPC_EXT类中
代码和方法签名将是这样的(请仔细观察突出显示的文本)
方法/IWBEP/IF_MGW_APPL_SRV_RUNTIME〜GET_ENTITYSET。
DATA get_empset_get_entityset TYPE zcl_zash_test_user_01_mpc => tt_get_emp。
数据testset_get_entityset类型TYPE zcl_zash_test_user_01_mpc => tt_test。
数据lv_entityset_name TYPE字符串。
lv_entityset_name = io_tech_request_context-> get_entity_set_name()。
案例lv_entityset_name。
* ---------------------------------------------- --------------------------- *
* EntitySet-get_empSet
* ---------------------------------------------- --------------------------- *
" get_empSet"时。
*调用实体集生成的方法
get_empset_get_entityset(
导出
iv_entity_name = iv_entity_name
iv_entity_set_name = iv_entity_set_name
iv_source_name = iv_source_name
it_filter_select_options = it_filter_select_options
it_order = it_order
is_paging = is_paging
it_navigation_path = it_navigation_path
it_key_tab = it_key_tab
iv_filter_string = iv_filter_string
iv_search_string = iv_search_string
io_tech_request_context = io_tech_request_context
导入
et_entityset = get_empset_get_entityset
es_response_context = es_response_context
)。
*将特定的实体数据发送到调用者界面
copy_data_to_ref(
导出
is_data = get_empset_get_entityset
改变
cr_data = er_entityset
)。
* ---------------------------------------------- --------------------------- *
* EntitySet-testSet
* ---------------------------------------------- --------------------------- *
" testSet"时。
*调用实体集生成的方法
testset_get_entityset(
导出
iv_entity_name = iv_entity_name
iv_entity_set_name = iv_entity_set_name
iv_source_name = iv_source_name
it_filter_select_options = it_filter_select_options
it_order = it_order
is_paging = is_paging
it_navigation_path = it_navigation_path
it_key_tab = it_key_tab
iv_filter_string = iv_filter_string
iv_search_string = iv_search_string
io_tech_request_context = io_tech_request_context
导入
et_entityset = testset_get_entityset
es_response_context = es_response_context
)。
*将特定的实体数据发送到调用者界面
copy_data_to_ref(
导出
is_data = testset_get_entityset
改变
cr_data = er_entityset
)。
别人的时候。
超级->/iwbep/if_mgw_appl_srv_runtime〜get_entityset(
导出
iv_entity_name = iv_entity_name
iv_entity_set_name = iv_entity_set_name
iv_source_name = iv_source_name
it_filter_select_options = it_filter_select_options
it_order = it_order
is_paging = is_paging
it_navigation_path = it_navigation_path
it_key_tab = it_key_tab
iv_filter_string = iv_filter_string
iv_search_string = iv_search_string
io_tech_request_context = io_tech_request_context
导入
er_entityset = er_entityset)。
结束。
终止方法。
如果您进入方法GET_EMPSET_GET_ENTITYSET
签名->
在这里,当您返回响应时,响应应该是红色突出显示的类型。
如果您进入方法TESTSET_GET_ENTITYSET
签名->
在这里,当您返回响应时,响应应该是红色突出显示的类型。
copy_data_to_ref方法是一种标准方法,您需要调用正确的方法。
希望这可以帮助您解决错误。
此致
Ashwin
嗨,Manvitha,
如其他答复所述,在CRUD不适合的地方可以使用函数导入,但是存在一些缺点。
过度使用会开始使ODATA协议更像SOAP,而将重点放在业务功能而不是数据上。
它们当前未与特定实体相关联,它们会随处可见。 服务定义。 如果我正确理解Odata 4规范,那么这种情况将会改变。
大多数转换为功能导入的操作都可以在CRUD下以正确的设计实现,例如使用"别名"实体(I ''不确定该技术是否有正式术语)。
别名的一个示例是基于"销售订单"业务对象的一组实体。 您可能有订单,未确认订单和已确认订单。
对Orders的完整查询将导致所有三个可能集合的并集,而对其他两个完整查询将导致两个互斥的集合。 如果我想确认CRUD下的订单,我只需从UnconfirmedOrders获取订单并将其放入ConfirmedOrders。 源实体和目标实体向后端指示正在发生的事情,因此逻辑可以运行确认过程。 在PUT之后,我会发现订单的"位置"已更改; 它仍然在订单中,但是现在在ConfirmedOrders中,而不是UnconfirmedOrders中。
我实际上更喜欢这种设计模式,因为它符合使用URI和导航的REST原则。 通过将URI"移动"到可导航的点,我设法更改了业务对象的状态。
使用功能导入或别名实体的主要困难是将使用模式传达给消费者。 假设消费者并不了解您服务中的所有细微皱纹。 是的,您正在为自己的获奖应用程序苦苦地编写它,但是OData是关于可能需要向全球社区公开的已发布服务的,它们不应该过时!
我将尝试使用任何需要的服务 最简单的URI形式,最易于传达用法。
关于
Ron。
非常有趣的Ron ..
绝对需要了解此内容和实现的解释。
也许您可以要求您就此设计模式撰写博客吗? 也有兴趣了解您如何设计"搜索帮助"。
谢谢
克里希纳
Hello Manvitha,
当我们想要执行/实现的操作/业务场景不在标准范围内时,我们选择Function_Import或Custom_Action CRUD操作。
除了Chandra解释过的内容外,我想再举一个例子,即我们去的地方或Function_Import/Custom_Action。
我们说我们有一个场景-
1。 假设我们已经订购了一个ID为'IT-001'
2的ITEM。 用户还可以取消该订单更正?!
3。 现在的问题是如何实现此Business_Case?!
a。 可以使用更新/删除操作来实现这一点,因为取消订单可以被视为更新以及删除操作。
b。 也可以将其实现为Function_Import/Custom_Action,因为上述业务案例将不属于标准的Update/Delete操作。
从技术上讲,我们可以在Update/Delete操作以及Custom-Action/不管我们是调用Delete还是Update或某些Custom_Action,函数导入以及编写的代码在上述情况下都是相同的。
但是GW提供了一些处理上述类型业务的标准方法 -情况。 因此,我们选择功能导入。
问候,
Ashwin
嗨Ashwin,
感谢您提供信息。 因此,根据我的理解-
我们可以在实现CRUD操作的两个选项之间进行选择,对于像您提到的场景那样,使用函数导入通过execute_action来实现它是理想的。
此致
Manvitha
嗨,
对我来说很有趣的线程...我之前有点困惑,但是直到找到用例为止。
我处理了一个样本,该样本要求从浏览器批准/拒绝该表单。 而且,我没有发现需要使用POST操作来执行此操作,因为这与任何实体和关联数据无关。 我所需要做的就是通过一些输入触发工作流。
我使用了带有定义参数的函数导入,并且工作已完成...
此外,还有一个用例,我必须预先加载员工详细信息以及他的直属经理详细信息。 我不知道要从表单中执行查询的员工编号,因此我使用了一个完全不带参数的函数导入,它只读取数据,结果是具有我所需信息的实体。
现在讨论进行得很好,有人可以用更好的方法建议我吗。
最诚挚的问候,
纳德
一周热门 更多>