我使用 RFC_READ_TABLE 将数据输出到我的软件,但很多时候当 RFC 返回和异常时,它不会返回描述。例如,搜索不存在的表或查询大量列。它总是返回相同的标题RfcAbapException,没有细节也没有 InnerException。
我的项目中引用的 SAP dll 是 2.0 版。
编辑:
所以问题是:为什么不返回异常细节?
我使用 RFC_READ_TABLE 将数据输出到我的软件,但很多时候当 RFC 返回和异常时,它不会返回描述。例如,搜索不存在的表或查询大量列。它总是返回相同的标题RfcAbapException,没有细节也没有 InnerException。
我的项目中引用的 SAP dll 是 2.0 版。
编辑:
所以问题是:为什么不返回异常细节?
请检查您的系统中是否存在ST22
与异常相关的短转储(事务)。如果有的话,这或多或少是设计使然。正如我试图在这个答案中解释的那样(虽然没有详细解释),短转储使 ABAP 处理器处于无效状态。它要么无法将任何类型的消息返回给调用者,要么将任何数据返回给调用者是不明智的,因为它可能是无效的甚至是安全问题。在这种情况下,调用将简单地失败并显示未指定的错误消息。Hogan 在另一个答案中提到的代理异常代码在这种情况下不会有任何帮助,因为它们仅针对 RFC 模块的命名异常生成,而不是基本系统或编程错误。
据我所知,RfcAbapException 中没有包含任何描述。而是返回一个可以解码的代码。像这样:
catch (RfcAbapException ex)
{
switch (ex.AbapException)
{
case (SAPProxy1.No_Function_Found):
MessageBox.Show("abap call failed because no function found");
break;
case(SAPProxy1.Nothing_Specified):
MessageBox.Show("abap call failed because nothing specified");
break;
default:
MessageBox.Show("Some unknown abap error occurred ("
+ex.AbapException.ToString()+")");
break;
} //switch
}
请参阅原始来源。