«Взаимосвязи» Maximo — это просто фрагмент предложения «where» оператора SQL. «Дочерний объект», который вы определяете, — это таблица, для которой будет выполняться «предложение where».
Серверная часть Maximo всегда начинается с «select * from». Затем он добавит имя таблицы вашего дочернего объекта (которое почти всегда является именем самого объекта). Затем он добавляет «где» и текст ваших отношений. В конце концов, Maximo выполняет запрос "выбрать * из ‹объект>, где ‹отношение>" к базе данных. Затем он загрузит результаты в набор MBOSet из ‹object>.
Это не столько соединение, сколько переход/переключение на другую таблицу. Поскольку это не соединение, запрос не имеет контекста данных объекта, с которого вы начали. Чтобы иметь возможность использовать данные из вашего исходного объекта для фильтрации набора целевых объектов, вы можете использовать привязки полей, те части «имя поля с двоеточием» фрагмента предложения where. Maximo выполнит поиск и замену всех найденных привязок, заменив их данными из соответствующих имен полей вашего начального объекта. Именно здесь в игру вступает установка отношения «родительский объект». Это означает, что Maximo будет выполнять этот запрос только в том случае, если вы начнете с записи типа, равного "родительскому объекту", чтобы он знал, откуда берутся эти привязки полей.
Возможно, стоит упомянуть, что связь должна начинаться с одного объекта (MBO), а не набора объектов (MBOSet), чтобы разрешить эту работу. Однако, поскольку запрос возвращает одну или несколько записей в своем результате, вы всегда получите набор объектов (MBOSet) из отношения. Кроме того, поскольку это поиск и замена перед выполнением запроса, Maximo не использует преимуществ какой-либо функции кэширования планов запросов к базе данных; каждый запрос выглядит по-разному для базы данных и повторно анализируется перед выполнением.
Например, если вы хотите создать связь между Активом и Заказом на работу, чтобы получить все открытые заказы на работу для актива, вы должны сделать следующее: Создать связь с дочерним объектом ЗАКАЗА НА РАБОЧИЙ, потому что это тип записи, который вы хотите получить назад. Вам нужны все открытые заказы на работу, поэтому вы начинаете текст отношений со «status = 'OPEN'». Вам также нужны рабочие заказы только для актива, который вы сейчас просматриваете, это означает, что вы хотите использовать данные из вашего текущего объекта, поэтому вам нужно использовать привязку поля. В этом случае вы хотите отфильтровать записи заказов на работу, чей номер актива совпадает с номером актива вашей текущей записи, это означает, что вы добавляете «и актив номер = : номер актива» в предложение text/where вашего отношения (что дает вам «статус = 'ОТКРЫТО' и номер актива = :assetnum" для вашей общей строки отношений). Первый номер объекта без двоеточия означает, что это обычный текст запроса, который будет выполняться как есть. Второй актив с двоеточием сообщает Maximo, что это привязка, которую необходимо заменить. Порядок не имеет значения, важно только двоеточие. Maximo найдет поле актива вашего текущего объекта (АКТИВ) и поместит содержимое этого поля (скажем, активнум "Blower0082") в запрос вместо ":ассетнум". Конечным результатом этого определенного отношения при запуске на этом конкретном активе является то, что Maximo выполняет следующий запрос к базе данных и загружает все результаты в MBOSet WORKORDER: выберите * из WORKORDER, где статус = 'OPEN' и номер актива = 'Blower0082';
Ваш конкретный пример owner_group = :person_group сам по себе не имеет смысла; также необходимы родительский объект (чтобы Maximo знал, откуда брать данные связывания и когда ему разрешено выполнять этот запрос) и дочерний объект (чтобы он знал, из какой таблицы он выбирает). Я собираюсь предположить, что у него есть родительский объект PERSONGROUP и дочерний объект WORKORDER. Поскольку "person_group" начинается с двоеточия, Maximo заменит эту строку содержимым поля person_group вашего родительского объекта, поэтому поле person_group должно существовать в вашем родительском объекте. Так как owner_group не имеет двоеточия перед ним, это нормальный синтаксис SQL, и поэтому это поле должно существовать в вашем дочернем/целевом объекте. Эта связь даст вам все заказы на работу, принадлежащие записи группы лиц, которую вы загрузили в данный момент. Предполагая, что персональная группа является «сантехниками», будет выполнен следующий запрос и возвращены все рабочие заказы, которыми в настоящее время владеют сантехники: выберите * из РАБОЧЕГО ЗАКАЗА, где owner_group = 'сантехники';
person
Dex
schedule
19.03.2015