【问题标题】:Communication between applescript and FileMakerapplescript 和 FileMaker 之间的通信
【发布时间】:2010-01-20 21:32:31
【问题描述】:

我目前正在编写一个要在 FileMaker 中运行的 applescript。我需要告诉 filemaker 它的应用程序的名称是什么(FileMaker Pro 或 FileMaker Pro Advanced 或其他),以便我可以在 filemaker 内的另一个 applescript 中说“告诉应用程序 filemaker”

我目前有一个脚本可以计算出应用程序文件的名称,但是,问题在于将其返回到 filemaker。我想发回的名字在applescript变量“FMName”中我能想到2个选项

1)

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

问题在于,即使我知道应用程序 FMName 将有一个设置单元格命令,applescript 没有,因此会抱怨。

2) 让 applescript 返回一个值或一条错误消息,并以某种方式让 FileMaker 接受这一点并用它做一些有用的事情。

问题在于 1)Applescripts 似乎只能返回数字(这是真的吗?) 2)我不想要错误对话框或任何东西,以及 3)我还没有弄清楚如何获取 filemaker首先接受这个返回值...

有人对如何做到这一点有更好的想法吗?

谢谢!

【问题讨论】:

  • 您能告诉我们您实际上想用您的 AppleScript 实现什么目标吗?可能会有完全不同(而且更好)的解决方案。
  • 我正在编写从 filemaker 调用的 applescript。当我希望 AS 向 FM 返回一个值(或多个值)时,我们发现的唯一方法是让 AS 脚本成为 FM,但调用 set cell 命令。所以 FM 正在运行 AS,它调用 FM 来设置一个小区。这很愚蠢,但它可以工作,直到您拥有多种 FM,例如 FileMaker Pro 和 FileMaker Pro Advanced,它们具有不同的捆绑名称......所以我需要知道 FM 应用程序的名称,这样我才能告诉 AS 要做什么打电话...

标签: macos applescript filemaker


【解决方案1】:

我知道这个线程现在有点陈旧,但我就是这样做的 - 使用 if 语句。使用 Get(ApplicationVersion) 函数找出正在运行的 FileMaker 类型:

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

我更进一步,并将其设置为自定义函数,因此我不会在许多不同的脚本中重复它。

【讨论】:

    【解决方案2】:

    因为(如果我理解正确的话)无论目标应用程序是什么,它都是 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 应用程序从另一个 FileMaker 应用程序中的 AppleScript 接收数据。不过,我确实想知道您为什么要使用两个 FileMaker 应用程序。它们是不同的版本(即 FileMaker 10 和 FileMaker 6)吗?如果是这样,也许让 AppleScript 将数据写入第二个 FileMaker 应用程序然后导入的文件是一种选择。但如果它们都是 FileMaker 7-10,为什么不简单地在同一个应用程序中打开这两个文件呢?然后您可以将 AppleScript 中的数据直接写入正确的文件中。

    【讨论】:

    • 不,它实际上是同一个文件制作器应用程序。我真正想做的是让 AppleScript 将数据返回给文件制作者。我们想出的最简单的方法是让 AS 告诉 FM 将单元格设置为一个值。将数据写入 FM 导入的文件实际上是我正在使用的当前策略...... AS 将应用程序的名称写入 FM 然后读取的文件......虽然有点乱......
    • 啊,那就不用担心tell语句了。如果 AppleScript 嵌入在 FileMaker 的执行 AppleScript 脚本步骤中,则任何不直接针对应用程序的语句都将针对运行 AppleScript 的 FileMaker 应用程序。在我上面的示例中,您只需要 set cell 语句。 tell 声明是多余的。
    【解决方案3】:

    这已得到回答,但我想补充一些我最近发现的东西。 如果您使用“Tell application Finder Activate”定位另一个应用程序,例如 Finder,那么这些 FMP 调用将失败,因为您现在在 Finder 中,直到您执行“End Tell”或明确指向 FMP。

    向我指出的解决方案是在一行中进行外部调用,例如

    “告诉应用程序 Finder [您需要 Finder 做什么]”

    这会将通知定向到非 FMP 应用程序,但您仍处于 FMP 中,因此您的 FMP 调用将起作用。

    这成为运行时的问题,因为运行时名称将与您的开发应用程序名称不同。

    【讨论】:

      猜你喜欢
      • 2011-08-23
      • 2017-08-13
      • 2013-10-18
      • 2011-08-08
      • 2020-12-10
      • 2011-01-25
      • 2013-05-29
      • 2014-12-23
      • 2011-04-26
      相关资源
      最近更新 更多