Maximo实施中,会遇到这样一种情况:您有一系列问题,可能用于供应商报价,每个问题都需要不同类型的答案。有些需要是/否下拉菜单。有些需要自定义值列表。有些只是自由文本。

本能的反应通常是为每种类型创建一个单独的字段:一个带有YORN域的字段,另一个带有自定义域的字段,还有一个纯文本字段。这虽然可行,但意味着您的数据模型会随着每种新问题类型的增加而膨胀,并且您的屏幕布局每次都需要更新。

在这篇博客中,我们将介绍一种不同的方法:一个单个的VALUE字段,它会根据所回答的问题动态改变其行为——自由文本、是/否查找、是/否/不适用查找,或自定义域。无需更改屏幕布局。无需新增字段。只需两个小型自动化脚本。

设置

本例的背景是一个基于自定义 Maximo 对象构建的问卷,包含三个关键字段:

  • QUESTION - 问题文本
  • VALUE - 答案字段。这是我们使其动态化的字段
  • DATATYPE - 驱动VALUE行为的控制字段

核心思想: VALUE字段在应用程序设计器中配置为不带静态域的纯文本框。它是否成为自由文本字段或特定查找字段,由DATATYPE字段在运行时决定,并由两个自动化脚本驱动。

从 ALN 域驱动

问题在 ALN 域中维护。每个条目使用两个字段:

  • 域条目的 VALUE 字段存储问题文本。
  • DESCRIPTION 字段存储数据类型代码,该代码是控制 VALUE 答案字段行为的信号。

 

在特定状态更改时,ALN 域条目的 VALUE 字段被复制到自定义对象的 QUESTION 字段中,DESCRIPTION 字段被复制到自定义对象的 DATATYPE 字段中。具体的触发器将取决于您的需求。

 

以下是数据类型代码以及每个代码对 VALUE 答案字段的含义:


强大之处在于:
添加新的自由文本问题或使用现有查找类型(FNSYN、FNSYNNA、FNSDESKTOP)的问题,只需在 ALN 域中添加新行即可。无需更改代码,无需更改屏幕。

Application Designer 配置

在 Application Designer 中,VALUE 字段作为标准文本框添加到屏幕上。关键在于, 没有静态查找分配给它。

 

这至关重要。如果静态分配了查找,它将覆盖脚本。该字段必须留作空白画布,以便两个自动化脚本在运行时拥有完全控制权。

实现其功能的两个脚本

两个 Maximo 自动化脚本附加到自定义对象上的 VALUE 属性。它们共同处理完整的查找生命周期。

脚本 1 - 初始化脚本 (INI)

脚本名称:IBM.CUSTOMOBJECT.VALUE.INI

 

此脚本在记录加载时触发。它的作用很简单:如果 DATATYPE 是已识别的查找类型之一,它会将 lookupname 设置为 "valuelist",以激活 VALUE 字段上的查找图标。如果数据类型为 null 或无法识别,则不进行任何设置,该字段将保持为纯自由文本。

# Script  : IBM.CUSTOMOBJECT.VALUE.INI 
# Trigger : Attribute Initialization — VALUE attribute 
# Purpose : If this question requires a lookup, activate the valuelist control. 

if mbo.getString("DATATYPE") in ["FNSYN", "FNSDESKTOP", "FNSYNNA"]: 
    lookupname = "valuelist" 

# If DATATYPE is null or unrecognised, no lookupname is set — 
# VALUE renders as a plain free-text box. 

脚本 2 - 检索脚本 (RL)

脚本名称:IBM.CUSTOMOBJECT.VALUE.RL

 

当用户点击 VALUE 字段上的查找图标时,此脚本会触发。它读取 DATATYPE 并将其映射到正确的 ALN 域,告知 Maximo 要查询哪个对象、要应用哪个 WHERE 子句以及要映射回哪些键。

# Script  : IBM.CUSTOMOBJECT.VALUE.RL 
# Trigger : Retrieve lookup — VALUE attribute 
# Purpose : Map the DATATYPE to the correct ALN domain. 

if mbo.getString("DATATYPE") == "FNSYN": 
    relationObject = "ALNDOMAIN" 
    relationWhere  = "domainid = 'YORN' and value=:value" 
    listWhere      = "domainid = 'YORN'" 
    srcKeys        = ["value"] 
    targetKeys     = ["value"] 

elif mbo.getString("DATATYPE") == "FNSYNNA": 
    relationObject = "ALNDOMAIN" 
    relationWhere  = "domainid = 'YNNA' and value=:value" 
    listWhere      = "domainid = 'YNNA'" 
    srcKeys        = ["value"] 
    targetKeys     = ["value"] 

elif mbo.getString("DATATYPE") == "FNSDESKTOP": 
    relationObject = "ALNDOMAIN" 
    relationWhere  = "domainid = 'FNSDESKTOP' and value=:value" 
    listWhere      = "domainid = 'FNSDESKTOP'" 
    srcKeys        = ["value"] 
    targetKeys     = ["value"] 


模式说明:
此示例对所有查找都使用 ALNDOMAIN。对于非 ALN 域查找(数字域、表域),relationObject 和键映射将有所不同。总体模式保持不变——只有目标会改变。

添加新的查找类型

大多数新问题无需任何代码更改——只需在 ALN 域中添加一行即可。唯一的例外是当您需要一个脚本从未见过的新查找域时。在这种情况下:

  1. 创建新的 ALN 域及其值。
  1. 在问卷 ALN 域中添加新行,并在 DESCRIPTION 字段中包含新的数据类型代码。
  1. 将新的数据类型添加到 INI 脚本的 if 条件中。
  1. 在 RL 脚本中添加一个新的 elif 块,将新的数据类型映射到其域。

 

完成后,任何将来使用该数据类型的问题都将自动选择正确的查找,无需进一步更改。

让一个字段服务于多种用途是一种整洁、易于维护的设计模式。通过将 DATATYPE 作为运行时控制信号,并将所有逻辑集中在两个脚本中,该解决方案保持易于理解且易于扩展。

 

关键要点是: 你不需要为每种新的问题类型都创建一个新字段。 你需要一个结构良好的 ALN 域、一个控制字段,以及两个知道如何处理它的脚本。

Unlock the Ultimate Guide to IBM Maximo Application Suite (MAS)

Discover everything you need to know to modernize your asset management strategy.

Inside, you’ll learn:

  • What’s new in IBM Maximo Application Suite 9.0
  • Key differences between Maximo 7.6 and MAS
  • How AppPoints and OpenShift change the game
  • Industry use cases across energy, manufacturing, and transportation
  • Step-by-step guidance for upgrading and migration readiness
Cover of 'The Ultimate Guide to MAS Maximo Application Suite' by Naviam featuring a man in a yellow construction helmet and safety vest holding a tablet.
×

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.

Read Press Release