当来自 Maximo 的 运行 时,Maximo BIRT 报告运行时错误

Maximo BIRT report runtime error when ran from Maximo

我开发了一份报告,我可以在 Eclipse BIRT 上 运行 预览,没有任何问题。但是,将其导入 Maximo 并尝试 运行 时,出现以下错误:

There was an exception on the server. Check your report parameter values, or contact your system administrator, who can find additional details in the server log.

我查看了应用服务器的日志,没有相关信息。我还在 DEBUG 级别启用了 Maximo 上的 birt 报告记录器,但我仍然没有收到任何错误。

我如何确定阻止它在 Maximo 上 运行ning 的问题?

如果您使用可以从 Maximo 服务器获得的 Tivoli 模板开始报告,我会很好奇。这些模板应该始终与您将部署到 Maximo 中的新报告一起使用。它们包括 Maximo 将需要的必需参数和库链接,以及默认数据源。 如果您一开始没有使用模板,我建议您将这些项目从模板中复制到您的新报告中。

发现问题,事实证明 Maximo 不喜欢查询中的别名:/

是的,使用 ALIAS 可以在带有字段名称的 SELECT 中使用,但不能在 FROM 和 table 名称中使用。

Maximo 和 BIRT 通过隐藏参数相互交流。其中两个参数是“where”和“appname”。当在应用程序外部执行报告时,“appname”用于确定 MAXOBJECTNAME 使用“where”参数将信息传递给报告。因此来自 StartCenter 的报告 运行 WORKORDER 将使用 'appname' WOTRACK 来检索主 table WORKORDER在“where”中传递元素,如 siteid、orgid。该报告采用此内容并用于查询 WHERE as workorder.siteid= ‘xxxx’ and workorder.orgid=’xxxx’.

如果 SQL 的主要 table 是别名,查询将失败,因为 BIRT 不知道 table 是 FROM workorder wo

的别名

在 from 和 to 中使用别名的解决方案可以通过更改 Maximo 通过的位置来实现。例如,接收应用程序传递 matrectrans,因此我们只需将对象名称替换为别名并使用 myWhere。 var myWhere = params["where"].replace("matrectrans","m"); -W

有时报告不会在多个浏览器上 运行。 尝试使用特定版本的 Mozilla-Firefox。

您可以对报告进行编码,以便很容易地允许 table 使用别名。通常,应用程序期望 运行 而不是为应用程序标识的默认值 table:

  1. 检查 maxapps table 中的 maxintbname 值,以了解您要 link 向其报告的特定应用程序。这是主要 select 语句将引用的 table,maximo 传递给报告的部分 'where' 子句将在构建时考虑到这一点。 (例如,对于工单跟踪应用程序 - WOTRACK - 主要 table 是 WORKORDER)

  2. BIRT 报告中主要 select 的 Open 方法将构建适当的 SQL Select 语句并将 MAXIMO 传递的 where 子句附加到结束。因此,如果您为 workorder 使用别名 - 这将与 maximo 提供的传入 where 子句不匹配。解决这个问题的方法是编写一个额外的包含语句

例如而不是使用以下内容:

   select ... from workorder mydetails 
    where $where;

使用类似的东西:

 select ... from workorder alias .... 
    where alias.workorderid in (select workorderid from workorder where $where):

(workorderid 是包含整数值的唯一列。您可以通过查看您正在引用的 table 的 MAXTABLS 条目并检查唯一列值来确定适当的唯一列)

因此,这允许您编写一个报告,该报告将 运行 无论 maximo 从工作订单跟踪应用程序传递的子句是什么。

如果您现在针对 PM 应用程序注册此报告 - 它通常会提交到 运行,因为传入的 where 子句将与 PM 应用程序相关,而不是 WORKORDER object。这就是 appname 参数的用武之地 - 您可以使用它来添加条件逻辑,以根据调用应用程序执行略有不同的事情。

通常情况下,工单列表报告使用此值添加适当的标题,具体取决于报告是从服务请求应用程序、事件应用程序还是问题应用程序调用的!

:)