SAP RFC的表参数为空(NCO 3.0 sap connector .net)

时间:2016-03-19 23:20:38

标签: c# sap abap rfc sap-connector

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

我正在接受这个例子。 pass type table parameter

1)C#CODE:

        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)我也试过这个答案但没有工作。 another solution

请帮忙 -

1 个答案:

答案 0 :(得分:2)

由于vwegert已经注释,您没有检查表是否是初始的,而是检查内部表的标题行是否是初始的。如果您不熟悉带有标题行的内部表,请参阅此part文档。实际上你应该只知道它们存在,但是你不应该再使用它们,因为它们已被弃用,甚至在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 param Importing param

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

如果你想将范围作为TABLES传递,你仍然可以这样做,因为RANGE OF除了定义具有特殊结构的内部表之外什么也没做。这是一个例子......

Range structure FM with ranges as tables