我试图将表参数从.net传递给RFC但没有成功。
我正在接受这个例子。 pass type table parameter
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
请帮忙 -
答案 0 :(得分:2)
由于vwegert已经注释,您没有检查表是否是初始的,而是检查内部表的标题行是否是初始的。如果您不熟悉带有标题行的内部表,请参阅此part文档。实际上你应该只知道它们存在,但是你不应该再使用它们,因为它们已被弃用,甚至在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
除了定义具有特殊结构的内部表之外什么也没做。这是一个例子......