描述 maximo 7.5 中的关系

Mr.*_*ody 2 maximo

描述 maximo 7.5 中的关系以及所有详细信息,包括后端数据库流程。

假设我在 maximo 7.5 资产管理中创建了 Owner_group 和 person_group "owner_group=:person_group" 之间的关系,那么这个查询的实际含义是什么。我对此很困惑。

您能解释一下数据库中的过程吗?

Dex*_*Dex 5

Maximo“关系”只是 SQL 语句的“where 子句”片段。您定义的“子对象”是将运行“where 子句”的表。

Maximo 的后端始终以“select * from”开头。然后它将附加您的子对象的表名称(几乎总是对象名称本身)。然后它附加“where”和您的关系文本。最后,Maximo 最终对数据库运行查询“select * from <object> where <relationship>”。然后它将结果加载到 <object> 的 MBOSet 中。

与其说它是一个连接,不如说它是一个跳转/切换到另一个表。因为它不是联接,所以查询没有您开始的对象数据的上下文。为了能够使用原始对象中的数据来过滤目标对象集,您可以使用字段绑定,即 where 子句片段的那些“冒号字段名”部分。Maximo 将对它找到的所有绑定进行查找和替换,用起始对象的相应字段名中的数据替换它们。这就是关系的“父对象”设置发挥作用的地方。这意味着,仅当您从类型等于“父对象”的记录开始时,Maximo 才会运行此查询,以便它知道这些字段绑定来自何处。

可能值得一提的是,关系必须从单个对象 (MBO) 开始,而不是从一组对象 (MBOSet) 开始才能进行此工作。但是,由于查询在其结果中返回一条或多条记录,因此您始终会从关系中返回一组对象 (MBOSet)。此外,由于这是在查询运行之前进行查找和替换,因此 Maximo 不会利用任何数据库查询计划缓存功能;每个查询对于数据库来说都是不同的,并且在执行之前会被重新解析。

例如,如果您想要创建从资产到工作订单的关系以获取资产的所有未处理工作订单,您可以执行以下操作: 创建与 WORKORDER 子对象的关系,因为这是您想要获取的记录类型后退。您需要所有未处理的工作订单,因此您以“status = 'OPEN'”开始关系文本。您还只需要当前正在查看的资产的工作订单,这意味着您想使用当前对象中的数据,因此需要使用字段绑定。在这种情况下,您想要过滤其 assetnum 与当前记录的 assetnum 相同的工单记录,这意味着您将“and assetnum = :assetnum”添加到您的关系文本/where 子句中(为您提供“status = 'OPEN' and assetnum = :assetnum" 代表您的总关系字符串)。第一个不带冒号的 assetnum 意味着它是正常的查询文本并且将按原样运行。第二个带有冒号的 assetnum 告诉 Maximo 这是一个需要替换的绑定。顺序并不重要,重要的是冒号。Maximo 将找到当前对象 (ASSET) 的 assetnum 字段,并将该字段的内容(例如 assetnum“Blower0082”)放入查询中代替“:assetnum”。当在此特定资产上运行时,此定义的关系的最终结果是 Maximo 对数据库运行以下查询并将所有结果加载到 WORKORDER MBOSet 中: select * from WORKORDER where status = 'OPEN' and assetnum = 'Blower0082';

您的owner_group = :person_group 的特定示例本身没有意义;还需要一个父对象(以便 Maximo 知道从哪里提取绑定数据以及何时允许执行此查询)和一个子对象(以便它知道从哪个表中选择)。我假设它有一个 PERSONGROUP 的父对象和 WORKORDER 的子对象。由于“person_group”以冒号开头,Maximo 将用父对象的 person_group 字段的内容替换该字符串,因此 person_group 字段必须存在于父对象中。由于owner_group前面没有冒号,这是正常的SQL语法,因此该字段必须存在于您的子/目标对象上。这种关系将为您提供当前加载的人员组记录所拥有的所有工作订单。假设 persongroup 是“管道工”,它将运行以下查询并返回管道工当前拥有的所有工作订单: select * from WORKORDER where Owner_group = 'plumbers';