C# SAP RFC的表参数为空

C# SAP RFC的表参数为空,c#,abap,saprfc,sap-dotnet-connector,C#,Abap,Saprfc,Sap Dotnet Connector,我试图从.net向RFC传递一个表参数,但没有成功 我举这个例子。 1) C#代码: 2) 我知道表参数“ANO”何时为空,因为我在sap中引发了异常。 这个例外是空参数 FUNCTION ZRFC_VALORHH. *"*"Interfase local *" TABLES *" IT_VALORESHH STRUCTURE ZSTRUCT_VALORESHH *" ANO STRUCTURE RNG_GJAHR *" EXC

我试图从.net向RFC传递一个表参数,但没有成功

我举这个例子。

1) C#代码: 2) 我知道表参数“ANO”何时为空,因为我在sap中引发了异常。
这个例外是空参数

    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) 我也试过这个答案,但不起作用。

请帮助-

如前所述,您不是在检查表是否为初始值,而是在检查内部表的标题行是否为初始值。如果您不熟悉带有标题行的内部表格,请参阅本文档。实际上,您应该只知道它们的存在,但您不应该再使用它们,因为它们已被弃用,甚至在OO上下文中是不允许的

“问题”在于功能模块的
关键字。它将参数声明为这样一个内部表。如果功能启用了RFC(我记不清了,但我认为这与性能有关),这是唯一一个建议使用它们的地方。因此,要检查带有标题行的内部表是否为空,需要写入

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

如果您将表类型作为值传递给
导入
导出
参数(如果启用了RFC功能模块,则不可能执行其他操作),则会得到这一结果

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

如果您想将范围作为
表传递
,您仍然可以这样做,因为
范围的传递只不过是定义一个具有特殊结构的内部表。这里有一个例子


如果
如果ano[]是首字母
能给你一个更好的结果,你能试试吗?如果有,我将添加一个答案来解释……如果它们不推荐使用,如何传递表参数(如范围)?或者有更好的方法可以做到这一点?它们不适合用于开发功能模块,这意味着您不应该将它们用于新的功能模块。这并不意味着你不能再使用它们,也不意味着你不能通过RFC使用它们。SAP有大量使用表参数的功能模块,在进一步删除表参数之前,他们必须更改所有这些模块。现在推荐使用表参数的方法是导入/导出中的表类型。
IF ano[] IS INITIAL.
    RAISE EMPTYPARAMETER.
ENDIF.
IF lines( ano ) IS INITIAL.
    RAISE EMPTYPARAMETER.
ENDIF.
FUNCTION ZZZTEST.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"  IMPORTING
*"     VALUE(I_INPUT) TYPE  STRING_TABLE
*"  EXPORTING
*"     VALUE(E_EXPORT) TYPE  STRING_TABLE
*"----------------------------------------------------------------------

ENDFUNCTION.