переопределить автоматическое вычисление поля последнего редактирования в FileMaker 19

#filemaker

#filemaker

Вопрос:

У меня есть таблица с автоматически вычисляемыми полями для того, кто (имя) и когда (дата) строка была изменена в последний раз, используя обычные определения полей FileMaker и защищенное поле.

Однако у меня есть один вариант использования, когда я копирую данные в эту таблицу из источника, в котором также есть эти записи, и я хочу также скопировать их. Но когда мой скрипт копирует данные, он запускает автоматическое вычисление, и, в конце концов, мое «изменено в» устанавливается на текущее время и «изменено» для текущего пользователя. Я хочу сохранить все, что есть у моего внешнего источника в этих полях.

Как я могу временно отключить автоматическое вычисление для этих полей в FileMaker, чтобы на время работы моего скрипта они действовали как обычные поля и просто принимали данные, которые я ввожу?

Комментарии:

1. Можете ли вы импортировать данные? При импорте у вас есть возможность отключить параметры автоматического ввода.

2. На самом деле это не вариант. Я пытаюсь синхронизировать данные между двумя источниками. Очевидно, что синхронизация не должна учитываться как изменение, иначе у меня будет бесконечный цикл синхронизации.

3. Я не понимаю, почему это «на самом деле не вариант». Альтернативой является использование вашей собственной формулы вычисления и создание исключения при включенном флаге. Это большая работа.

4. Я выполняю двустороннюю синхронизацию, поэтому обычный импорт не поддерживает мой вариант использования здесь.

Ответ №1:

Измените автоматически введенные поля модификации следующим образом

  • Переключиться на автоматический ввод вычисляемого значения
  • Выключите параметр «Не заменять существующее значение поля (если оно есть)»

Затем установите для вычисления автоматического ввода значение, подобное следующему

 Let ( trigger = GetField ( "" ) ; If ( $SilentSync > 0 ; Self ; Get ( CurrentDate ) ) )
 

Вам нужно будет изменить значение Get ( CurrentDate ) на то, что подходит для этого поля, и вам нужно будет сделать это для всех полей модификации в каждой таблице.

После этого эти поля будут работать в обычном режиме при ежедневном редактировании и т. Д.

При настройке данных во время синхронизации вы можете использовать следующее в начале процесса синхронизации

 Set Variable [$SilentSync: 1]
 

Затем очистите $$SilentSync в конце процесса синхронизации

 Set Variable [$SilentSync: ""]
 

Комментарии:

1. похоже, это сделает то, что мне нужно. На данный момент я поддержал его и протестирую.

2. Я экспериментирую с этим и не понимаю, что делает первый оператор (let trigger) и зачем он нужен.

3. Ах да, это трюк, вокруг которого вращается эта функциональность. Вычисление по этому полю должно запускаться при каждом изменении любого поля в записи. Для достижения этого вы могли бы ссылаться на каждое поле из вычисления (и не забывайте добавлять к нему новые поля всякий раз, когда вы добавляли их в таблицу), однако это неудобно. Но использование функции getField ( «» ) с пустой строкой в качестве параметра делает всю работу за вас. Это заставляет функцию выполнять оценку при изменении любого поля. После этого вам просто нужно включить эту функцию в какую-то безопасную область calc, я выбрал заголовок Let

4. Теперь я построил свое решение на основе этой идеи, и оно работает блестяще. Спасибо!

5. забавный факт: это работает, чтобы предотвратить обновление поля через пользовательский интерфейс, но не в том случае, если я вставляю данные через JDBC. Странно, потому что я думал, что у меня это работает.