函数导入-USE

2020-08-31 16:01发布

         点击此处--->   EasySAP.com群内免费提供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。

         点击此处--->   EasySAP.com群内免费提供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。
付费偷看设置
发送
10条回答
compass1988
1楼 · 2020-08-31 16:56.采纳回答

嗨,

请参考我的博客让我们的代码在OData服务中进行CRUDQ和函数导入操作!并检查最后一个 函数导入部分。

此致

钱德拉(Chandra)

闻人可可
2楼-- · 2020-08-31 16:40

你好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

野沐沐
3楼-- · 2020-08-31 16:42

嗨,Manvitha,

如其他答复所述,在CRUD不适合的地方可以使用函数导入,但是存在一些缺点。

过度使用会开始使ODATA协议更像SOAP,而将重点放在业务功能而不是数据上。

它们当前未与特定实体相关联,它们会随处可见。 服务定义。 如果我正确理解Odata 4规范,那么这种情况将会改变。

大多数转换为功能导入的操作都可以在CRUD下以正确的设计实现,例如使用"别名"实体(I ''不确定该技术是否有正式术语)。

别名的一个示例是基于"销售订单"业务对象的一组实体。 您可能有订单,未确认订单和已确认订单。

对Orders的完整查询将导致所有三个可能集合的并集,而对其他两个完整查询将导致两个互斥的集合。 如果我想确认CRUD下的订单,我只需从UnconfirmedOrders获取订单并将其放入ConfirmedOrders。 源实体和目标实体向后端指示正在发生的事情,因此逻辑可以运行确认过程。 在PUT之后,我会发现订单的"位置"已更改; 它仍然在订单中,但是现在在ConfirmedOrders中,而不是UnconfirmedOrders中。

我实际上更喜欢这种设计模式,因为它符合使用URI和导航的REST原则。 通过将URI"移动"到可导航的点,我设法更改了业务对象的状态。

使用功能导入或别名实体的主要困难是将使用模式传达给消费者。 假设消费者并不了解您服务中的所有细微皱纹。 是的,您正在为自己的获奖应用程序苦苦地编写它,但是OData是关于可能需要向全球社区公开的已发布服务的,它们不应该过时!

我将尝试使用任何需要的服务 最简单的URI形式,最易于传达用法。

关于

Ron。

梦想连接
4楼-- · 2020-08-31 16:56

非常有趣的Ron ..

绝对需要了解此内容和实现的解释。

如果我想确认CRUD下的订单,只需将其从UnconfirmedOrders中获取,然后将其放入ConfirmedOrders中即可。 源实体和目标实体向后端指示发生了什么,以便逻辑可以运行确认过程

也许您可以要求您就此设计模式撰写博客吗? 也有兴趣了解您如何设计"搜索帮助"。

谢谢

克里希纳

compass1988
5楼-- · 2020-08-31 16:51

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

Cikesha
6楼-- · 2020-08-31 16:55

嗨Ashwin,

感谢您提供信息。 因此,根据我的理解-

我们可以在实现CRUD操作的两个选项之间进行选择,对于像您提到的场景那样,使用函数导入通过execute_action来实现它是理想的。

此致

Manvitha

闻人可可
7楼-- · 2020-08-31 16:54

嗨,

对我来说很有趣的线程...我之前有点困惑,但是直到找到用例为止。

我处理了一个样本,该样本要求从浏览器批准/拒绝该表单。 而且,我没有发现需要使用POST操作来执行此操作,因为这与任何实体和关联数据无关。 我所需要做的就是通过一些输入触发工作流。

我使用了带有定义参数的函数导入,并且工作已完成...

此外,还有一个用例,我必须预先加载员工详细信息以及他的直属经理详细信息。 我不知道要从表单中执行查询的员工编号,因此我使用了一个完全不带参数的函数导入,它只读取数据,结果是具有我所需信息的实体。

现在讨论进行得很好,有人可以用更好的方法建议我吗。

最诚挚的问候,

纳德

一周热门 更多>