Связь между applecript и FileMaker - PullRequest
1 голос
/ 21 января 2010

Я сейчас пишу яблочный скрипт для запуска в FileMaker. Мне нужно сообщить filemaker, как называется его приложение (FileMaker Pro, FileMaker Pro Advanced или что-то еще), чтобы я мог в ДРУГОЙ яблочный скрипт внутри filemaker я сказать «сказать приложению filemaker»

В настоящее время у меня есть скрипт, который определяет имя файла приложения, однако проблема заключается в том, чтобы вернуть его обратно в filemaker. Имя, которое я хочу отправить обратно, находится в переменной appleScriptcript "FMName". Я могу вспомнить 2 варианта

1)

tell application FMName
   set cell "gFMName" of current record to FMName
end tell

Проблема в том, что, хотя я знаю, что приложение FMName будет иметь команду set cell, яблочный скрипт не имеет и поэтому жалуется.

2) заставьте яблочный скрипт вернуть значение или сообщение об ошибке и каким-то образом заставить FileMaker принять это и сделать с ним что-то полезное.

Проблема в том, что 1) кажется, что Applescripts может возвращать только числа (это правда?) 2) я не хочу диалоговое окно с сообщениями об ошибках или что-то еще, и 3) я не понял, как получить filemaker принять это возвращаемое значение в первую очередь ...

У кого-нибудь есть идеи получше, как это сделать?

Спасибо!

Ответы [ 3 ]

1 голос
/ 04 августа 2010

На этот вопрос ответили, но я хотел бы добавить кое-что, что обнаружил в последнее время. Если вы настроили таргетинг на другое приложение, скажем, Finder, с помощью «Сказать активировать приложение Finder», то эти вызовы FMP не будут выполняться, потому что вы сейчас находитесь в Finder, пока вы не выполните «Завершить настройку» или явно укажете на FMP.

Решение, которое мне было указано, состояло в том, чтобы делать внешние вызовы в одной строке, такой как

«Сообщите приложению Finder, что [когда-либо вам нужно было делать Finder]»

Это направляет только то, что сообщает приложению без FMP, но оставляет вас все еще в FMP, чтобы ваши FMP-звонки работали.

Это становится проблемой со средами выполнения, поскольку имя среды выполнения будет отличаться от имени вашего приложения разработки.

1 голос
/ 12 сентября 2011

Я знаю, что этот поток немного устарел, но вот что я делаю - используйте оператор if. Используйте функцию Get (ApplicationVersion), чтобы узнать, какой тип FileMaker запущен:

If ( PatternCount ( Get ( ApplicationVersion ) ; "Advanced" ) ; 
"tell application \"FileMaker Pro Advanced\""   ; 
"tell application \"FileMaker Pro\""  )

Я сделал еще один шаг и настроил ее как пользовательскую функцию, чтобы ее не повторяли во многих различных сценариях.

1 голос
/ 26 января 2010

Поскольку (если я правильно вас понимаю), независимо от того, какое приложение предназначено, это версия FileMaker, будь то FileMaker Pro или FileMaker Pro Advanced, или даже версия FileMaker во время выполнения, используемый словарь будет иметь одинаковый условия доступны. Таким образом, вы можете использовать using terms from application "FileMaker Pro" для включения блока, который вы хотите выполнить.

using terms from application "FileMaker Pro"
    tell application FMName
        set cell "gFMName" of current record to FMName
    end tell
end using terms from

Я не экспериментировал с этим, поэтому не уверен, будет ли он работать. Похоже, ваша цель - заставить одно приложение FileMaker получать данные из AppleScript в другом приложении FileMaker. Однако мне интересно, почему вы используете два приложения FileMaker. Это разные версии (например, FileMaker 10 и FileMaker 6)? Если это так, то возможно, что AppleScript записывает данные в файл, который затем импортирует второе приложение FileMaker. Но если они оба FileMaker 7-10, почему бы просто не открыть два файла в одном приложении? Затем вы можете записать данные из AppleScript непосредственно в правильный файл.

...