SAP RFC的表参数为空

问题描述 投票:1回答: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。异常是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) 我也试过这个答案,但没有用。另一种解决方案

请帮助-

c# sap abap rfc sap-dotnet-connector
1个回答
2
投票

作为 vwegert 已经注释了,你不是在检查表是否初始化,而是在检查内部表的表头行是否初始化。如果你不熟悉带表头行的内部表,请参考以下内容 部分 的文档。事实上,你只应该知道它们的存在,但你不应该再使用它们,因为它们已经被废弃了,甚至在OO上下文中还不允许使用。

问题 "在于 TABLES 函数模块的关键字。它将参数声明为这样一个内部表。这是唯一一个在函数启用RFC的情况下推荐使用它们的地方(我不太记得了,但我认为这与性能有关)。因此,为了检查带头行的内部表是否为空,你需要写下以下命令

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

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

如果你把表类型传给了 IMPORTINGEXPORTING 参数,如果你把它们作为值传递的话(对于启用了RFC的函数模块,没有其他办法)。

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

ENDFUNCTION.

Exporting paramImporting param

对于 TABLES 参数,你就不会收到这样的警告。

如果你想把范围作为 TABLES 你仍然可以做到这一点,因为 RANGE OF 只不过是定义了一个具有特殊结构的内部表。下面是一个例子...

Range structureFM with ranges as tables

© www.soinside.com 2019 - 2024. All rights reserved.