NCo-应该使用什么来通用地发现RFC,而不是RFC_READ_TABLE?

2020-09-14 02:09发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我继承了一些已有十年历史的代码的所有权,这些代码似乎并未在每个存档线程中使用反模式

https://archive.sap.com/discussions/thread/3313110

代码的原始作者早就离开了项目,团队,公司。 没有有用的代码注释,参考设计或类似材料可供参考。 因此,我既试图重构目标,又发现什么是实现目标的正确,现代且受SAP支持的方法。

特别是,我继承的代码试图发现系统上可用的RFC,BAPI,IDOC及其匹配的元数据。 当前,它通过使用NCo通过在一个路径中将QUERY_TABLE参数设置为EDIMSG并在另一路径中将TAPLT设置为RFC_READ_TABLE来调用RFC_READ_TABLE。 如果我理解正确,则EDIMSG允许查看所有可用的IDOC类型。

获取EDIMSG时,返回的GetTable" DATA" IRfcTable具有单个元素,对于该元素,GetElementMetadata表示它是字段WA,如TAB512中一样( https://www.sapdatasheet.org/abap/tabl/tab512.html #)。 该单个WA字段依次出现,其中包含EDIMSG的实际数据,与

处的结构匹配

https://www.sapdatasheet.org/abap/tabl /edimsg.html

我认为它得到的是这样的TAB512结构化IRfcTable,而不是与查询表EDIMSG匹配的多个字段的IRfcTable,因为它没有使用IRfcFunction.GetTable来获取EDIMSG表,而是通过RFC_READ_TABLE。 现有代码期望如此,并分别获取EDIMSG的元数据(这次改为使用存储库MetadataBatchQuery调用),然后手动解析WA字段。 之所以出现这种卷积,是因为RFC_READ_TABLE可以读取任何表,而不仅仅是EDIMSG,并且其返回的表是通用OPTIONS/FIELDS/DATA,而不是EDIMSG表本身或任何其他特定查询的表类型。

关于什么是正确的模式,上面提到的线程中的Markus指出:"您应该使用现有的启用远程功能的模块,或者如果没有满足您需求的模块,则实施特定的启用远程功能的模块, 调用这些权限检查,并防止未经授权的数据访问。"

我认为启用远程功能的模块意味着RFC(如果我误解了,请纠正我)。 新的RFC的实现对我们不可用,因为我们仅在SAP的NCo之上提供连接软件,而在SAP系统端则没有任何变化,除了客户可以选择(或不选择)进行任何自定义。 因此,利用现有的可用RFC,您如何发现可在系统中调用的IDoc及其元数据/获取EDIMSG的正确方法是什么? 探索在哪里使用EDIMSG( https://www。 sapdatasheet.org/wul/abap/tabl/edimsg/func.html ),到目前为止,我还找不到能够实现返回EDIMSG表预期目的的RFC。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我继承了一些已有十年历史的代码的所有权,这些代码似乎并未在每个存档线程中使用反模式

https://archive.sap.com/discussions/thread/3313110

代码的原始作者早就离开了项目,团队,公司。 没有有用的代码注释,参考设计或类似材料可供参考。 因此,我既试图重构目标,又发现什么是实现目标的正确,现代且受SAP支持的方法。

特别是,我继承的代码试图发现系统上可用的RFC,BAPI,IDOC及其匹配的元数据。 当前,它通过使用NCo通过在一个路径中将QUERY_TABLE参数设置为EDIMSG并在另一路径中将TAPLT设置为RFC_READ_TABLE来调用RFC_READ_TABLE。 如果我理解正确,则EDIMSG允许查看所有可用的IDOC类型。

获取EDIMSG时,返回的GetTable" DATA" IRfcTable具有单个元素,对于该元素,GetElementMetadata表示它是字段WA,如TAB512中一样( https://www.sapdatasheet.org/abap/tabl/tab512.html #)。 该单个WA字段依次出现,其中包含EDIMSG的实际数据,与

处的结构匹配

https://www.sapdatasheet.org/abap/tabl /edimsg.html

我认为它得到的是这样的TAB512结构化IRfcTable,而不是与查询表EDIMSG匹配的多个字段的IRfcTable,因为它没有使用IRfcFunction.GetTable来获取EDIMSG表,而是通过RFC_READ_TABLE。 现有代码期望如此,并分别获取EDIMSG的元数据(这次改为使用存储库MetadataBatchQuery调用),然后手动解析WA字段。 之所以出现这种卷积,是因为RFC_READ_TABLE可以读取任何表,而不仅仅是EDIMSG,并且其返回的表是通用OPTIONS/FIELDS/DATA,而不是EDIMSG表本身或任何其他特定查询的表类型。

关于什么是正确的模式,上面提到的线程中的Markus指出:"您应该使用现有的启用远程功能的模块,或者如果没有满足您需求的模块,则实施特定的启用远程功能的模块, 调用这些权限检查,并防止未经授权的数据访问。"

我认为启用远程功能的模块意味着RFC(如果我误解了,请纠正我)。 新的RFC的实现对我们不可用,因为我们仅在SAP的NCo之上提供连接软件,而在SAP系统端则没有任何变化,除了客户可以选择(或不选择)进行任何自定义。 因此,利用现有的可用RFC,您如何发现可在系统中调用的IDoc及其元数据/获取EDIMSG的正确方法是什么? 探索在哪里使用EDIMSG( https://www。 sapdatasheet.org/wul/abap/tabl/edimsg/func.html ),到目前为止,我还找不到能够实现返回EDIMSG表预期目的的RFC。

付费偷看设置
发送
1条回答
N-Moskvin
1楼-- · 2020-09-14 02:42

为了发现IDOC,尽管我尚未确认返回的列表与EDIMSG内容完全相同,但我已经能够替换RFC IDOCTYPES_LIST_WITH_MESSAGES响应PT_MESSAGES表。

对于RFC,可以使用RFC_FUNCTION_SEARCH进行发现,但是此60k +平面列表存在规模问题。 我尝试通过RFC组对它们进行组织,使用RFC_GROUP_SEARCH获得了一部分组友好名称(并非RFC_FUNCTION_SEARCH报告的所有组都具有匹配的条目),但是组列表仍然很大。 我们以前对包含应用程序模块的函数使用友好的名称,这就是为什么要查询TAPLT的原因。 但是,没有搜索或列出的RFC我​​可以找到它为RFC_FUNCTION_SEARCH中的1个字符的应用程序代码提供任何友好的文本。

一周热门 更多>