在一个项目中,我们有一个定制的消息跟踪软件来跟踪我们的EDI消息。我们面临的一个问题是,我们想知道消息出了什么问题,以及为什么它在映射中失败。
正如我所看到的,我们有三种选择。
使用新的警报 API 获取警报
创建一个应用程序,该应用程序读取 SAP PI 的状态表,并基于该应用程序创建警报。
在消息映射中创建我们自己的错误处理例程。
对于前两个解决方案,可以在警报和消息之间建立连接。它可以使用标准的java表和调度来构建。
挑战在于是否必须始终批量运行或计划运行,因此无法实时执行验证。在大多数情况下,这是正确的。
对于某些合作伙伴,我们希望执行实时警报,因此前两种方法并不理想。
这里的想法是创建一个新的执行方法来覆盖固有的映射。然后,我可以先进行调用,然后通过调用 inhered execute 函数来执行映射。
因此,API发生了变化,它看起来与我必须找到一种方法在PI 7.31上做同样的事情。在反编译(我做了很多试错实验)AMapping类之后,我能够找到它的工作方式。它看起来与Java映射API非常相似。它使它变得容易得多。
所以我只需要转到“函数”选项卡,然后在 Attributes and Methods 中添加函数。
然后我可以尝试一下 - 抓住对超级方法的调用,然后我可以在下面放置自己的错误处理。作为奖励,我能够使用转换输入来获取消息的动态属性。
代码如下所示。
public void transform(TransformationInput in, TransformationOutput out) throws StreamTransformationException {
// TODO Auto-generated method stub
try {
super.transform(in, out);
} catch (Exception e) {
// Custom Error handling.
throw new StreamTransformationException("Custom Exception handler:" + e.getMessage(), e);
}
}