通过RFC FM在简单的select语句上进行sy-subrc 4,即使测试成功

2020-09-12 21:26发布

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

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


大家好

我对abap相当陌生,并创建了一个简单的FM,该FM应该基于表中的值返回一个标志。

当我在se37中测试FM时,它可以正常工作并返回标志,但是,当我从另一个系统(网关)调用该标志时,select将立即返回sy-subrc4。为什么会有这个想法?

RFC FM代码:

功能z_rfc_check_equi_warranty。

 *" ------------------------------------------------  ----------------------

 *" *"本地接口:

 *"正在导入

 *" VALUE(EQUI_NR)TYPE EQUNR

 *"汇出

 *" VALUE(WAR_VALID_FLAG)类型标志

 *" ------------------------------------------------  ----------------------

   "表格:equi,bgmkobj。

   数据:lv_equnr_obj类型j_objnr。

   数据:ls_equi TYPE equi。

   数据:ls_war TYPE bgmkobj。

   SELECT single * FROM equi WHERE equnr = @equi_nr INTO @ls_equi。

     如果sy-subrc =0。" <=当我通过RFC调用它并进行调试时返回4,equi_nr正确传递。

       选择单个*从bgmkobj中,在j_objnr = @ ls_equi-objnr和gaart ='1'到@ls_war中。

       如果sy-subrc = 0。

         如果ls_war-gwlen> sy-datum。

           war_valid_flag ='X'。

         万一。

       万一。

     万一。

 ENDFUNCTION。

谢谢

Antonette

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

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


大家好

我对abap相当陌生,并创建了一个简单的FM,该FM应该基于表中的值返回一个标志。

当我在se37中测试FM时,它可以正常工作并返回标志,但是,当我从另一个系统(网关)调用该标志时,select将立即返回sy-subrc4。为什么会有这个想法?

RFC FM代码:

功能z_rfc_check_equi_warranty。

 *" ------------------------------------------------  ----------------------

 *" *"本地接口:

 *"正在导入

 *" VALUE(EQUI_NR)TYPE EQUNR

 *"汇出

 *" VALUE(WAR_VALID_FLAG)类型标志

 *" ------------------------------------------------  ----------------------

   "表格:equi,bgmkobj。

   数据:lv_equnr_obj类型j_objnr。

   数据:ls_equi TYPE equi。

   数据:ls_war TYPE bgmkobj。

   SELECT single * FROM equi WHERE equnr = @equi_nr INTO @ls_equi。

     如果sy-subrc =0。" <=当我通过RFC调用它并进行调试时返回4,equi_nr正确传递。

       选择单个*从bgmkobj中,在j_objnr = @ ls_equi-objnr和gaart ='1'到@ls_war中。

       如果sy-subrc = 0。

         如果ls_war-gwlen> sy-datum。

           war_valid_flag ='X'。

         万一。

       万一。

     万一。

 ENDFUNCTION。

谢谢

Antonette

付费偷看设置
发送
9条回答
SAP小菜
1楼 · 2020-09-12 21:43.采纳回答

设备编号具有转换例程,因此您可能必须检查非sap系统是否发送了正确的值(例如前导零)。

请尝试下面的功能模块检查正确的值:

CONVERSION_EXIT_ALPHA_INPUT
CONVERSION_EXIT_ALPHA_OUTPUT

哎,真难
2楼-- · 2020-09-12 21:57

equi_nr在调用FM时将为字符串格式,因此必须使用转换alpha进行转换。

空代码
3楼-- · 2020-09-12 21:45

你好,

您可以在Followig链接https://help.sap.com/doc/abapdocu_751_index_htm/7.51/zh-CN/abenrfc_exceptions_abexa.htm 。 您将在此概念和示例中找到解释。
SAP指出这是过时的技术,对于新开发,SAP建议使用独立于功能模块的基于类的异常。
在下一个链接中
https://help.sap。 com/doc/abapdocu_751_index_htm/7.51/zh-CN/abenfunction.htm

注意。

粗暴的香蕉
4楼-- · 2020-09-12 21:49

在调试器中看到的equi_nr值到底是多少? 当您运行

  1. 通过SE37
  2. 通过RFC

时,我只能看到两种可能性。 首先:如S N所示,equi_nr在1.和2中是不同的值。 第二:您在1中执行SE37的系统与在2中使用的RFC目标不相同。

haha101010
5楼-- · 2020-09-12 21:40

Hello Antonette,

对此有一个想法:

在您的情况下,对RFC调用的测试如何工作? 如果调用远程功能模块,则通过RFC连接进行路由。 RFC使用设置的接口用户登录到另一个系统,该用户在RFC设置(SM59)中定义。 此接口用户必须具有足够的授权,这一点很重要。 如果用户无权在远程系统上的指定表上进行选择,则可能会导致SY-SUBRC =4。您应该在SU01中检查RFC用户的角色,然后检查这些角色是否允许表显示操作(S_TABU_DIS ),以适应您的情况。

也许这可以解决您的问题。

最好的问候

Markus

三十六小时_GS
6楼-- · 2020-09-12 21:57

谢谢@ matthew.billingham!

当我比较来自不同调试会话的2个值时,我意识到通过RFC为equi_nr传递的值没有 有任何前导零:)所以alpha转换就成功了。 如果您没有告诉我仔细查看这些值,就不会知道。

Antonette

lukcy2020
7楼-- · 2020-09-12 21:36
谢谢! 有用! :)

一周热门 更多>

点击此处---> EasySAP.com 一起学习S4 HANA ...

相关问答