2010-01-20 27 views
1

我目前正在編寫一個要在FileMaker中運行的applescript。我需要告訴filemaker它的應用程序的名稱是什麼(FileMaker Pro或FileMaker Pro Advanced或其他),以便我可以在另一個蘋果文件內的蘋果腳本我可以說「告訴應用程序文件製造商」AppleScript與FileMaker之間的通信

我目前有一個腳本,數字取出應用程序文件的名稱,但是,問題是讓它回到文件製作器。我要發回的名稱是的AppleScript變量「FMName」我能想到的2個選項

1)

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

這樣做的問題是,即使我知道,應用程序FMName將有設置單元格命令,applescript不會這樣抱怨。

2)有applescript要麼返回一個值或一個錯誤消息,並以某種方式讓FileMaker接受這一點,並做一些有用的事情。

這樣做的問題是,1)它似乎只能返回數字(這是真的嗎?)2)我不想要一個錯誤對話框或任何東西,3)我還沒有想出如何獲得filemaker接受這個返回值首先...

任何人有什麼更好的想法如何做到這一點?

謝謝!

+0

你能讓我們知道你真的想用你的蘋果燈實現嗎?可能會有一個完全不同的(更好的)解決方案。 – DisplacedAussie

+0

我正在編寫從filemaker調用的applescript。當我希望AS向FM返回一個值(或多個值)時,我們發現的唯一方法是使AS腳本成爲FM,但調用set cell命令。所以FM正在運行AS,它調用FM來設置一個單元。這是愚蠢的,但它的工作原理,直到你有像FileMaker Pro和FileMaker Pro Advanced這樣具有不同軟件包名稱的多種FM ...所以我需要知道FM應用程序的名稱,以便我可以告訴AS什麼調用... –

回答

1

因爲(如果我理解正確),無論應用程序是針對哪種應用程序,它都是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中的數據直接寫入正確的文件。

+0

不,它實際上是同一個filemaker應用程序。真的,我想要做的是讓AppleScript將數據返回給filemaker。我們提出的最簡單的方法是讓AS告訴FM將單元格設置爲一個值。並且將數據寫入FM導入的文件實際上是我正在使用的當前策略... AS將應用程序的名稱寫入FM然後讀取的文件中......雖然...有點雜亂...... –

+0

啊,那麼不要擔心告訴聲明。如果AppleScript嵌入到FileMaker的Perform AppleScript腳本步驟中,則任何不直接針對應用程序的語句都將針對運行AppleScript的FileMaker應用程序。在我上面的例子中,所有你需要的是'set cell'語句。 'tell'語句是多餘的。 – Chuck

+0

等一下,真的嗎?優秀。這正是我需要的! 謝謝! –

1

這是回答,但我雖然我會添加我最近發現的東西。 如果你的目標是另一個應用程序,比如說Finder,那麼使用「告訴應用程序查找器激活」,那麼這些FMP調用將失敗,因爲你現在在Finder中,直到你做了「End Tell」或明確地指向FMP。

這是向我指出解決的辦法是做在一個單一的線出端調用如

「告訴應用程序查找器[你需要在Finder做什麼都]」

這只是告訴非FMP應用程序,但仍然保留在FMP中,因此您的FMP調用將起作用。

由於運行時名稱與開發應用程序名稱不同,因此這會成爲運行時間的問題。

1

我知道這個線程現在有點陳舊,但這裏是我所做的 - 使用if語句。使用Get(ApplicationVersion)函數找出一種的FileMaker正在運行什麼:

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

我採取這一更進一步,將其設置爲自定義函數,所以我沒有它在許多不同的重複腳本。