Macos 如何动态定位不同的FileMaker应用程序

Macos 如何动态定位不同的FileMaker应用程序,macos,applescript,filemaker,Macos,Applescript,Filemaker,我正在编写一个系统范围的服务,它接受当前选定的文本,并在我们的内部FileMaker数据库中进行各种搜索 我已经写了一些在我的开发机器上运行良好的东西,其中FileMaker作为“FileMaker Pro Advanced”存在。现在我无法让它在安装了FileMaker(“FileMaker Pro”)的非开发版本的其他机器上运行 问题是,当脚本在一台客户机上运行时,我会看到“Where is foo”对话框(我会说),因为“using terms”行,我不希望出现这种情况。是否可以将File

我正在编写一个系统范围的服务,它接受当前选定的文本,并在我们的内部FileMaker数据库中进行各种搜索

我已经写了一些在我的开发机器上运行良好的东西,其中FileMaker作为“FileMaker Pro Advanced”存在。现在我无法让它在安装了FileMaker(“FileMaker Pro”)的非开发版本的其他机器上运行

问题是,当脚本在一台客户机上运行时,我会看到“Where is foo”对话框(我会说),因为“using terms”行,我不希望出现这种情况。是否可以将FileMaker作为目标,以便我可以编译脚本并在客户端上运行它

以下是我目前拥有的:

on run {input, parameters}
    set _target to null

    try
        tell application "Finder" to get name of application "FileMaker Pro Advanced"

        set _target to application "FileMaker Pro Advanced"
    end try
    if _target is null then
        try
            tell application "Finder" to get name of application "FileMaker Pro"

            set _target to application "FileMaker Pro"
        end try
    end if
    if _target is null then
        display alert "FileMaker cannot be found"
        return
    end if

    using terms of "FileMaker Pro Advanced"
        tell _target
            -- script goes here
        end tell
    end using terms of
end run

像这样简单的初始测试如何:

try
  if exists application "FileMaker Pro Advanced" then
    set _target to "FileMaker Pro Advanced"
  else if exists application "FileMaker Pro" then
    set _target to "FileMaker Pro"
  else
    <handle error>
  end if
end try
试试看
如果存在应用程序“FileMaker Pro Advanced”,则
将_目标设置为“FileMaker Pro Advanced”
否则,如果存在应用程序“FileMaker Pro”,则
将_目标设置为“FileMaker Pro”
其他的
如果结束
结束尝试

如果您希望最终用户将FileMaker安装在标准位置,那么以下操作应该有效:

set _fmpa to "/Applications/FileMaker/FileMaker Pro Advanced.app"
set _fmp to "/Applications/FileMaker/FileMaker Pro.app"

try
    tell application _fmpa to launch
    set _target to _fmpa
end try

try
    tell application _fmp to launch
    set _target to _fmp
end try

tell application _target
    ...
end tell

FMP和FMPA上的捆绑id是否相同?如果是这样的话,就用它来代替乱搞应用程序名称吧。e、 g.
告诉应用程序id“com.filemaker.whatever”…
还有,filemaker狗链上的同情者,这些垃圾是邪恶的。你不能让它为你设置一个带有PostgreSQL的普通或花园式Linux服务器,然后让每个人都看到它?FMPA12 bundle ID是“com.filemaker.client.advanced12”,我不会费心去检查正常版本,因为meh,真的,12?(这也适用于@brian_schick下面的答案)。问题是我不能用动态的_目标编译AppleScript,因为FM术语不可用,它无法识别“当前布局”之类的内容。因此,我使用中的术语将其包装成一个
,但是在运行时,在没有安装FMPA的机器上,我会得到一个对话框。您是否尝试过完全使用
中的术语来消除
?除最后一个
告诉
是系统上的
“FileMaker Pro Advanced”
外,请保持与上述内容相同。将其更改为
\u target
,然后交付。使用此技术对我的系统进行的快速测试表明,它可以正常工作。您的系统或他们的系统不需要
用户术语
。脚本在到达系统时已编译,因此也没有编译错误。@tiennou:using terms from块在编译期间生效。我猜问题在于Automator的“RunAppleScript”操作将脚本存储在源代码中,而不是编译后的形式。(是的,Automator也很聪明。)如果你是唯一一个使用FMPA的人,你可以尝试将其重命名为FMP,然后使用标准进行编译,因为编译器友好的
告诉应用程序“FileMaker Pro”
块。如果应用程序的文件名是相同的,那就祈祷吧,因为我不在乎它到底是哪一个。另一个选项是使用原始AE代码编写脚本(
«class docu»
«event AsTargetd»
,等等),避免使用编译时术语。这将允许您随意使用动态目标。IIRC有一个菜单选项,可以将复制粘贴作为源代码,将关键字转换为原始AE代码。在没有安装FM*的机器上反编译脚本也可以;只要在出现“FileMaker*?”提示时选择Chess.app,然后将
告诉app“Chess.app”
更改为
告诉app\u target
,并使用它。我承认还有一个想法。通常,在处理这一复杂的解决方案时,是时候退一步,重新评估该方法了。您最初的问题提到,这是一项服务,它可以获取选定的文本,并在FileMaker中对其进行处理。考虑另一种方法。也许不用AppleScript控制FileMaker,而是使用
fmp
URL方案运行一个脚本来完成繁重的工作。退房