1

我试图从.net 将表参数传递给 RFC,但没有成功。

我正在关注这个例子。 传递类型表参数

1)C#代码:

        int low = 2015;
        int high = 2016;
        string sign = "I";
        string option= "BT";

        RfcConfigParameters parametros = SapConector_fch.ConexionAsap_fch(SapConector_fch);
        RfcDestination DestinoRFC = SapConector_fch.probarConexionASap_fch(parametros, this.Page);            
        RfcRepository repositorio = DestinoRFC.Repository;
        IRfcFunction zrfc_valorhh = repositorio.CreateFunction("ZRFC_VALORHH");

         IRfcTable it_ano = zrfc_valorhh.GetTable("ANO");
        //IRfcStructure it_ano = zrfc_valorhh.GetStructure("ANO");


          it_ano.Append();
          it_ano.SetValue("SIGN", sign);
          it_ano.SetValue("OPTION", option);
          it_ano.SetValue("LOW", low);
          it_ano.SetValue("HIGH", high); 


        try
        {
            zrfc_valorhh.Invoke(DestinoRFC);
        }
        catch (RfcAbapException ex)
        {
            Console.WriteLine(ex.Message);
            ClientScript.RegisterStartupScript(this.GetType(), "Exepcion al llamar el RFC", "alert('" +"Exepcion al llamar el RFC " +  ex.Message + "');", true);
        }

2)我知道表参数“ANO”何时为空,因为我在 sap 中引发了异常。
例外是 EMPTYPARAMETER。

    FUNCTION ZRFC_VALORHH.
   *"*"Interfase local
   *"  TABLES
   *"      IT_VALORESHH STRUCTURE  ZSTRUCT_VALORESHH
   *"      ANO STRUCTURE  RNG_GJAHR
   *"  EXCEPTIONS
   *"      NODATA
   *"      EMPTYPARAMETER
   *"----------------------------------------------------------------------

  IF ano IS INITIAL.
    RAISE EMPTYPARAMETER.
  ENDIF.

3)我也试过这个答案但没有用。 另一种解决方案

请帮忙-

4

1 回答 1

2

正如vwegert已经评论的那样,您不是在检查表是否是初始的,而是在检查内部表的标题行是否是初始的。如果您不熟悉带有标题行的内部表,请参阅这部分文档。实际上,您应该只知道它们存在,但您不应该再使用它们,因为它们已被弃用,甚至在 OO 上下文中还不允许使用。

“问题”与TABLES功能模块的关键字有关。它将参数声明为这样的内部表。如果该功能启用了 RFC,这是唯一推荐使用它们的地方(我不记得确切,但我认为它与性能有关)。因此,要检查带有标题行的内部表是否为空,您需要编写

IF ano[] IS INITIAL.
    RAISE EMPTYPARAMETER.
ENDIF.

或者

IF lines( ano ) IS INITIAL.
    RAISE EMPTYPARAMETER.
ENDIF.

IMPORTING如果您将表类型或参数作为值传递,这就是您得到的EXPORTING结果(对于启用 RFC 的功能模块,不可能做其他事情)。

FUNCTION ZZZTEST.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"  IMPORTING
*"     VALUE(I_INPUT) TYPE  STRING_TABLE
*"  EXPORTING
*"     VALUE(E_EXPORT) TYPE  STRING_TABLE
*"----------------------------------------------------------------------

ENDFUNCTION.

导出参数 导入参数

对于TABLES参数,您不会收到此类警告。

如果你想传递范围,TABLES你仍然可以这样做,因为RANGE OF它只不过是定义一个具有特殊结构的内部表。这是一个例子......

范围结构 范围为表格的 FM

于 2016-03-20T08:24:23.457 回答