Maximo 自动化脚本编写 | 自动化脚本简介
史蒂芬舒尔
March 26, 2019


这将是一系列有助于解释 Maximo 自动化脚本编写的博客文章中的第一篇。在这篇文章中,我将介绍它是什么以及为什么将其添加到产品中。在以后的文章中,我将主要关注如何利用它们来满足不同类型的自定义需求,但也将介绍自动化脚本内部存在的一些相对未知的功能,重点介绍自定义选项(包括非自动化脚本选项)之间的优缺点,并讨论我们在构建脚本方面的一些最佳实践。有一些编程经验将是有益的,但我将尝试帮助解释大部分代码,这样你就可以理解我为什么要做我正在做的事情。如果你有任何问题,可以随时在 Maximo 论坛上发帖,这样其他人也可以从答案中受益。
Maximo 是一款高度可配置的产品(请查看我们的 解决方案 我们的产品页面)。只需最低限度的技术技能,用户就可以在 Maximo 中添加新字段、更改屏幕或限制属性值。但是,一旦你开始需要超越这些功能,人们就会开始询问有关自动化脚本/Java 自定义的问题。而且,如果这是你以前从未做过的事情,一开始可能会很吓人。希望本博客系列将有助于消除大多数恐吓,并让您更快地实现业务目标。
让我们开始讨论 Maximo 中的自动化脚本是什么。对于那些不知道的人来说,自动化脚本是自定义代码。它们可以是小脚本(我们有一些只有一行脚本),也可以是非常大的脚本(有些脚本几乎是一千行代码)。这些脚本通常使用 Python 或 JavaScript 编写,因为这两种语言是 Maximo 开箱即用支持的两种语言,但是如果你对其进行配置,则可以使用任何 JSR 223 语言。自动化脚本是在 Maximo 7.5 中添加的(前身存在于 Maximo 之前的 IT 版本中),并在 Maximo 7.6 中得到了显著增强。自7.6发布以来,IBM一直在各种功能包中增强自动化脚本,因此使用最新版本Maximo 7.6(当前为7.6.0.9)的人将能够使用某些早期版本不存在的功能。当我们的示例中出现这种情况时,我会尽量弄清楚哪个版本首先支持它,并尽可能提及其他选项。
自动化脚本通常使用启动点绑定到 Maximo 中的事件。一些较新的功能(例如集成)没有定义实际的启动点,而是通过在脚本上使用特殊的命名结构来调用的。了解这些启动点选项对于在 Maximo 中进行开发至关重要(我们将在本博客系列中详细介绍所有启动点)。事件选项的这种灵活性使您可以在最合适的时间执行代码。这样可以降低调用脚本的频率,从而显著提高 Maximo 中更复杂脚本的性能。
你应该在什么时候使用自动化脚本?一旦你了解了自动化脚本的强大功能,通常会很容易利用它来满足所有的自定义需求。我强烈认为,只有在 Maximo 框架还不支持你需要做的事情时,才应该使用脚本。我见过的一个常见的滥用自动化脚本的例子是使用自动化脚本将值从一个对象交叉到另一个对象。如果没有转换,最好使用跨域名。它们可以可靠地触发(可以抑制事件,防止脚本触发,或者应用程序可能处于管理员模式,防止所有脚本触发),说实话,它们可以正常运行。
我看到的另一个被滥用的例子是使用自动化脚本来要求字段或将字段设为只读。在某些情况下,这是有道理的,但在大多数情况下,使用全局数据限制可以更好、更可靠地实现这一点。和以前一样,如果你的脚本没有触发(事件被抑制或是管理模式),那么你试图限制/要求业务流程中的某些内容可能无法设置。而且,尝试将大多数现场需求整合到一个地方,这样可以很容易地找到何时需要这些要求以及在什么条件下需要这些要求。
与Java定制相比,自动化脚本有哪些优缺点?自动化脚本编写的最大优势是部署过程。与 Java 自定义不同,可以在不停机的情况下添加、修改或禁用自动化脚本。仅此一项就使大多数组织难以被击败。如果您处于集群状态,则部署 Java 自定义项可能需要数小时,这使得开发和测试所需的时间要长得多,此外还会因失去 Maximo 访问权限而对业务造成影响。我经常听到一些开发人员说这不是问题,因为企业已经安排了停机时间来部署这些更改。但是,当你的代码出现错误时会发生什么?问题通常是在工作时间发现的,如果不中断,就无法关闭或修改 Java 自定义。
另一个优点是,您可以轻松地将自动化脚本绑定为在 Maximo 中触发多个事件。例如,如果您希望脚本在 assetnum 或位置属性发生变化时触发,则可以使用自动化脚本和两个启动点来实现。您可以使用 Java Customizations 调用同一段代码,但必须扩展(或编写)每个属性的字段类,这需要维护更多的代码,而不仅仅是编写公共部分。
我最喜欢的优势之一是使用自动化脚本可以让你利用这两种语言。通常,脚本通常比 Java 中的相同代码更简单。但是,真正节省时间的地方是,有一种非常好的方法可以在 Jython 中做一些在 Java 中更困难或更详细的事情。一个简单的例子是检查 Maximo 中的属性是否已设置。有时当你调用 getString(“属性名称”)时,你会得到一个空值,有时你会得到一个空字符串。在 Java 中,你必须像 getString(“属性名”)一样编写这两个支票!=null 和 getString(“属性名称”)!=””。在 Jython 中,我只能说 mbo.getString(“ATTRIBUTENAME”)和它能否同时处理这两种场景。不用担心这个例子(我们将在下一篇博客文章中介绍这个例子),只是觉得重点介绍这个例子最容易。
使用自动化脚本进行自定义有一些缺点。首先是,如果需要在管理模式下完成此操作,则需要编写 Java 代码。我们认为这不是一个常见的用例,因为我们的大多数自定义都是面向业务的,除了脚本编写之外,不应在管理模式下进行业务交易。
Java 自定义效果更好的另一个例子是当你需要重写一个方法来抑制逻辑时。例如,假设 IBM 在他们的一个类文件中做了你不想发生的事情。你可以尝试在脚本中撤消他们在该方法中所做的事情,但是如果你编写 Java 类,你可以简单地阻止代码被执行,只执行你的自定义代码。同样,这对我们来说并不常见,因为如果IBM正在做某事,则可能应该将其置之不理,否则您将面临在未来造成其他问题的风险。
最后,有时候自动化脚本是不可能的。IBM 不断为自动化脚本添加更多事件以供监听和改进功能(例如 “是/否/取消” 对话框),但是有时您需要做一些当前框架不可能的事情。有些将在未来的版本中进行改进(例如能够关闭对话框!),有些人可能永远做不到。自动化脚本永远不会有 100% 的覆盖范围,但可以帮助 Maximo 的普通管理员完成一些了不起的事情。
Discover everything you need to know to modernize your asset management strategy.
Inside, you’ll learn:

ActiveG, BPD Zenith, EAM Swiss, InterPro Solutions, Lexco, Peacock Engineering, Projetech, Sharptree, and ZNAPZ have united under one brand: Naviam.
You’ll be redirected to the most relevant page at Naviam.io in a few seconds — or you can
go now.