Претензии к ФМ или ожидания, у кого что осталось

Практические советы по работе с FileMaker, типичные задачи и их решения. У вас вопрос? Пишите сюда.
Alexei Sytch
Сообщения: 106
Зарегистрирован: 21 сен 2017, 18:48
Откуда: Минск

Re: Претензии к ФМ или ожидания, у кого что осталось

Сообщение Alexei Sytch » 10 мар 2020, 15:01

andrey volkov писал(а):
11 фев 2020, 16:33
кстати, есть хитрость, позволяющая держать настройки в рамках одного окна.
Размещаете за пределами макета web-viewer поименованный например web
Помещаете в него обычный текст типа JSON
Потом извлекаете JSON функцией GetLayoutObjectAttribute("web"; "content") и используете где надо
В каждом окне такой веб-вьюер будет содержать уникальную информацию.
Очень интересно. А для чего именно WebViewer? Он берет данные из текстового файла на диске? --
У меня ощущение, что это будет работать с любым текстовым объектом, и даже с Merge Fields

Похожую хитрость видел с созданием локальных переменных для Layout поле для вычисления видимости объекта
Если там через Let создать $var, то ее можно использовать в Merge Variable, т.е. тем самым получаются вычисления только на Макете, без создания вычисляемых полей.

andrey volkov
Сообщения: 338
Зарегистрирован: 11 сен 2017, 13:42
Откуда: Санкт-Петербург

Re: Претензии к ФМ или ожидания, у кого что осталось

Сообщение andrey volkov » 10 мар 2020, 18:37

Похожую хитрость видел с созданием локальных переменных для Layout поле для вычисления видимости объекта
Если там через Let создать $var, то ее можно использовать в Merge Variable, т.е. тем самым получаются вычисления только на Макете, без создания вычисляемых полей.
как это будет работать, если макет открыть в двух окнах?
Можно делать что-то в одном окне так, чтобы это не затрагивало тот же макет в другом окне?

Впрочем, есть вариант, связанных с именем окна. Можно создавать в глобальную переменную-JSON ассоциативный массив, который берет в качестве ключа имя окна.
Если имена окон отличаются, то это будет работать. А если скриптом создаются два окна с одним именем, то не будет.

Alexei Sytch
Сообщения: 106
Зарегистрирован: 21 сен 2017, 18:48
Откуда: Минск

Re: Претензии к ФМ или ожидания, у кого что осталось

Сообщение Alexei Sytch » 10 мар 2020, 22:01

как это будет работать, если макет открыть в двух окнах?
Можно делать что-то в одном окне так, чтобы это не затрагивало тот же макет в другом окне?
Да, можно сделать -- обновляться будет в момент перерерисовки объекта (или Window Refresh или Object Refresh)
Например, если вставить такую формулу в поле Hide object when
var.PNG
var.PNG (2.02 КБ) 14095 просмотров

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

Let($Var = Get(CurrentTimestamp)& ¶ & "Название текущего окна: " & Get(WindowName) ; 0)
То при каждой перерерисовке окна (например при создании нового окна ) переменная в поле слияния будет обновляться. Ее значение можно получить GetLayoutObjectAttribute - Content -- текстовых объектов возвращает текст (включая текст из полей слияния) свой для каждого окна.
LayoutVar.zip
(66.73 КБ) 665 скачиваний

andrey volkov
Сообщения: 338
Зарегистрирован: 11 сен 2017, 13:42
Откуда: Санкт-Петербург

Re: Претензии к ФМ или ожидания, у кого что осталось

Сообщение andrey volkov » 11 мар 2020, 06:10

Если текст задать программно, то очередной Refresh window его очистит напрочь
Если текст задается не программно, то он ничем не отличается от статической надписи.

В чем бонус, кроме того, что это можно использовать в диалоговых окнах на паузе?

Alexei Sytch
Сообщения: 106
Зарегистрирован: 21 сен 2017, 18:48
Откуда: Минск

Re: Претензии к ФМ или ожидания, у кого что осталось

Сообщение Alexei Sytch » 11 мар 2020, 20:05

Удобно, что не надо создавать вычисляемые поля в таблице для использвования на макете, можно "по-быстрому" посчитать вычисление. Переменная фактически не хратится в памяти, а результат ее вычисления хранится на макете. Для каждого окна - свой результат.

andrey volkov
Сообщения: 338
Зарегистрирован: 11 сен 2017, 13:42
Откуда: Санкт-Петербург

Re: Претензии к ФМ или ожидания, у кого что осталось

Сообщение andrey volkov » 12 мар 2020, 04:00

да, но если вдруг окно обновится случайно (refresh)? Все же исчезнет

Alexei Sytch
Сообщения: 106
Зарегистрирован: 21 сен 2017, 18:48
Откуда: Минск

Re: Претензии к ФМ или ожидания, у кого что осталось

Сообщение Alexei Sytch » 12 мар 2020, 12:26

Андрей, доброго дня! В демке пример. Все на месте остается. Если создать два окна, то в них разные значения. Проблемы были, например, когда есть итоговая сумма (например количество связанных в портале записей подиписи к порталу или в заголовке Таба, и оно изменилось). Данные не обновляются без refresh window или refresh object. А так все работает. Это вообщем-то похоже на использование WebViewer и GetLayoutObjectAttribute только без объекта WV

andrey volkov
Сообщения: 338
Зарегистрирован: 11 сен 2017, 13:42
Откуда: Санкт-Петербург

Re: Претензии к ФМ или ожидания, у кого что осталось

Сообщение andrey volkov » 13 мар 2020, 08:17

рисковый вы человек, Алексей :)

веб-вьюер немножко про другое. он про использование глобальных полей или глобальных переменных для хранения каких-то флагов, влияющих на отображение данных на макете.
Представим, что некие действия пользователя приводят к изменению флагов, из-за чего макет начинает по-другому прорисовываться (данные по-разному отображаются). Это произойдет во всех окнах сразу, и они все будут выглядеть одинаково.
Например, пользователь открыл два окна с макетом Счет.
На одном он хочет просматривать некие счета в рублях, ну другом - какие-то другие счета, и чтобы суммы отображались в долларах. На отображение той или иной валюты влияет, допустим, глобальное поле или глобальная переменная.
Нужно заставить файлмейкер запомнить выбор пользователя в каждом отдельном окне. Вот для таких задач можно использовать веб-вьюер (хотя я из лени тупо запрещаю пользователям открывать новые окна)

Вообще было бы идеально, если бы файлмейкер имел функцию "Идентификатор окна" (что-то типа hwnd в языке C).

Alexei Sytch
Сообщения: 106
Зарегистрирован: 21 сен 2017, 18:48
Откуда: Минск

Re: Претензии к ФМ или ожидания, у кого что осталось

Сообщение Alexei Sytch » 13 мар 2020, 13:40

Соглашусь, это рискованная практика :) В хелпе к Filemaker написано: Вы можете создать переменную слияния, которая будет отображать значение из переменной. Для некоторых задач можно использовать переменные слияния вместо глобальных полей или нехранимых вычисляемых полей. Например, переменная слияния может отображать общую стоимость в нижней части счета-фактуры или отображать название счета, используемого для печати отчета. Т.е. возможности ограниченные. В хелпе идет речь о глобальных переменных, которые используются для Merge Variables. Как hack возможно использовать и локальные переменные, вот здесь было достаточно подробное обсуждение с примерами, в какой момент меняется переменная и момент перерисовки
https://fmforums.com/topic/94863-how-ca ... le/?page=2. Там очень большая дискуссия.

Спасибо за идею с GetLayouOjectAttribute. Проверил, работает.

andrey volkov
Сообщения: 338
Зарегистрирован: 11 сен 2017, 13:42
Откуда: Санкт-Петербург

Re: Претензии к ФМ или ожидания, у кого что осталось

Сообщение andrey volkov » 13 мар 2020, 15:13

Да нет, это вам спасибо
вообще-то можно вполне безопасно использовать, если, например, окно открывается в модальном режиме (скрипт на паузе) или даже если скрипт прекращен, но на форме нет кнопок, которые способны окно перерисовать. Если подстраховаться, то вполне работоспособно. Просто я такой перестраховщик...

А что касается тоталов под порталами, то если переменная САМА вычисляется с помощью настроек Hide Object, как вы описали выше, то все будет работать вполне надежно. И мне этот вариант намного более симпатичен, чем то, что я сейчас использую (ButtonBar или Placeholder). Для текстовой метки можно задать и формат, и условное форматирование, этот способ более простой и элегантный. Так что у меня теперь больше возможностей появилось.

Ответить