我试图从.net向RFC传递一个表参数,但没有成功。
我下面是这个例子。传递类型表参数
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) 我也试过这个答案,但没有用。另一种解决方案
请帮助-
作为 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
只不过是定义了一个具有特殊结构的内部表。下面是一个例子...