На заметку: функция Lookup (field)

Практические советы по работе с FileMaker, типичные задачи и их решения. У вас вопрос? Пишите сюда.
Ответить
andrey volkov
Сообщения: 338
Зарегистрирован: 11 сен 2017, 13:42
Откуда: Санкт-Петербург

На заметку: функция Lookup (field)

Сообщение andrey volkov » 10 мар 2022, 09:15

Логическая функция Lookup ( sourceField {; failExpression } ) возвращает значение определенного поля из связанной таблицы.

На первый взгляд кажется, что это совершенно лишнее. Потому что просто запросив sourceField из связанной таблицы мы получим то же самое.
Но, оказывается, все устроено гораздо хитрее: функция lookup таит в себе очень полезное свойство.
Давайте разберем на примере.
Допустим, у нас есть основная таблица BaseTable и в ней есть поле SEARCH
Есть связанная таблица RelatedTable и в ней поле MatchField
Таблицы связаны следующим образом:
BaseTable::SEARCH = RelatedTable::MatchField

Мы хотим получить содержимое некоего поля в RelatedTable, если в ней имеется хотя бы одна запись, соответствующая тексту, вбитому в SEARCH.
Так вот.
Обычные средства позволяют нам получить информацию об этом только в одном случае: если мы завершили и подтвердили изменение поля SEARCH. Только после Commit реляция будет обновлена и мы увидим, какие записи по реляции подтянулись.

Не буду распространяться на тему того, как это неудобно, многие, думаю, сталкивались с этим.
Функция Lookup(sourceField) позволяет без коммитов(!) и рефрешей, немедленно после изменения хотя бы одного символа поля SEARCH узнать, как это изменение повлияло на записи в связанной таблице.
Вы можете обработать изменение поля триггером OnObjectModify, используя в скрипте функцию Lookup.
Если искомое поле вычисляется, то будет возвращено его значение. Если вычисление невозможно, потому что связанные записи не обнаруживаются, то будет возвращен символ "?"

Если вам нужно просто знать, появились ли или исчезли связанные записи в процессе редактирования поля, то используйте функцию IsValid, которая возвращает булево 1, если записи есть, и 0, если соответствующие записи в связанной таблице отсутствуют.

Код: Выделить всё

IsValid ( 
   Lookup ( RelatedTable::MatchField )
)

Аватара пользователя
Arcady
Администратор
Сообщения: 201
Зарегистрирован: 10 сен 2017, 20:45
Контактная информация:

Re: На заметку: функция Lookup (field)

Сообщение Arcady » 15 мар 2022, 17:53

Хозяйке на замету :D
Спасибо
Аркадий Перла.
ТриА. Разработка решений для FileMaker
http://tria.pw

Alexander Klochkov
Сообщения: 31
Зарегистрирован: 12 сен 2017, 04:14

Re: На заметку: функция Lookup (field)

Сообщение Alexander Klochkov » 20 мар 2022, 11:45

Супер!
Александр Клочков
apklotchkov@yahoo.com

Ответить