1

全部,

我们目前开发了一个通过 JCO v3.0 API 与 SAP 通信的 Java 客户端应用程序。在调用多个 BAPI 函数的有状态调用期间,我们使用 JCoContext 类来建立有状态会话。我们在执行 JCoFunction 之前调用 JCoContext.begin(),并在所有函数完成后在 finally 块中调用 JCoContext.end()。

问题出现在 JCoContext.end() 上。它可能会引发 JCoException。文档不是很清楚为什么会发生异常或如何处理它。在测试中,当将 NULL 目标传递给 JCoContext.end() 方法时,我已经能够观察到异常。虽然这可能发生,但它绝对不会出现在我们的生产代码中。所以问题仍然存在,是否还有其他原因会引发异常?

此外,如果未调用 JCoContext.end() 方法,我观察到了奇怪的行为。在这些情况下,我看到后续 BAPI 调用未成功完成。这向我表明,如果 end() 方法没有成功完成,它可能会使 JCo 处于错误状态。那么,我们应该如何处理这里发生的异常。作为开发人员,我有什么追索权?看来我唯一的保证就是关闭程序。

有什么想法可以告诉我,谢谢

保罗·曼宁

4

2 回答 2

1

SAP 员工在 SCN 论坛上回答了这个问题。我在那里交叉发布了这个问题。链接在这里:

SAP 论坛问题:SAP JCo:如何处理 JCoContext.end() 抛出的异常

总而言之,如果传入的“destination”参数为 NULL 或 SAP JCO 中存在错误,则 JCoContext.end() 方法应仅引发异常。因此,您必须确保“目标”不为空。如果您遇到其他问题,请向 SAP 提交支持票证。

完了,走吧。

-保罗

于 2016-01-21T17:53:31.897 回答
0

通过此描述可以基本了解 JCo 异常。SAP 文档说明了这种异常处理方式:

JCoDestination destination = JCoDestinationManager.getDestination("<destination>");

try
{
    JCoContext.begin(destination);
    function1.execute(destination);
    function2.execute(destination);
    functionBapiTransactionCommit.execute(destination);
}
catch (AbapException ex)
{
    ...
}
catch (JCoException ex)
{
    ...
}
catch (Exception ex)
{
    ...
}
finally
{
    JCoContext.end(destination);
}
于 2016-01-20T10:10:44.140 回答