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 域、一个控制字段,以及两个知道如何处理它的脚本。

MORE Community Logo
Live from the MORE community

Your Maximo questions probably already have answers

See what Maximo users are asking, answering, and solving right now.

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