动态命名apple脚本变量

问题描述 投票:1回答:1

让我先说一下,我知道我可以使用Filemaker的计算Apple脚本轻松完成以下操作。我真的很想知道如何在Apple Script中完成这个任务。我正在尝试将变量设置为名为Keyboard Maestro的宏程序,我将其称为KM。

我的脚本首先遍历Filemaker中找到的记录,并从每个找到的记录中复制数据。我无法弄清楚如何从Apple Script中的循环设置KM变量,因为据我所知,您无法动态设置Apple Script变量的名称。

我可以通过创建一个列表来创建变量的名称(我想使用):

set variableListFunderName to {}
set i to 1
repeat until i = winCount + 1

    copy "Business_ExistingAdvance" & i & "FunderName" to the end of variableListFunderName
    set i to i + 1
end repeat



set variableListFundingCurrentBalance to {}
set i to 1
repeat until i = winCount + 1

    copy "Business_ExistingAdvance" & i & "FundingCurrentBalance" to the end   of variableListFundingCurrentBalance
    set i to i + 1
end repeat




set variableListFundingAmount to {}
set i to 1
repeat until i = winCount + 1

    copy "Business_ExistingAdvance" & i & "FundingAmount" to the end of variableListFundingAmount
    set i to i + 1
end repeat

--

但是当我将字段的内容设置为我创建的列表项时,变量不会显示在KM中:

--

set i to 1


repeat until i = winCount + 1
    tell record i

        set item i of variableListFunderName to cell "Funders_ExistingAdvances::FunderCompanyName"
        set item i of variableListFundingCurrentBalance to cell "FundingCurrentBalance"
        set item i of variableListFundingAmount to cell "FundingAmount"
    end tell

    ignoring application responses
        tell application "Keyboard Maestro Engine"

            setvariable item i of variableListFunderName & "_AS" to item i of variableListFunderName
            setvariable item i of variableListFundingCurrentBalance & "_AS" to item i of variableListFundingCurrentBalance
            setvariable item i of variableListFundingAmount & "_AS" to (item i of variableListFundingAmount)
        end tell
    end ignoring
    set i to i + 1
end repeat

如何设置这些KM变量?

variables dynamic set applescript keyboard-maestro
1个回答
1
投票

您无法使用applescript创建动态变量。

您目前所做的是生成字符串并将其添加到列表中。然后用其他值替换这些字符串,这样字符串就会丢失。

但你可以在applescript objective-c的帮助下实现这一点:

use framework foundation

set variableListFunderName to {}
set i to 1
repeat until i = winCount + 1

    copy "Business_ExistingAdvance" & i & "FunderName" to the end of variableListFunderName
    set i to i + 1
end repeat

set funderNameDict to current application's NSMutableDictionary's alloc()'s init()

repeat with var in variableListFunderName
 funderNameDict's setObject:"yourValue" forKey:var
end repeat

然后,您可以使用访问动态值

set myValue to funderNameDict's objectForKey:"yourDynamicVarName"

循环使用字典

repeat with theKey in funderNameDict's allKeys()
set myValue to funderNameDict's objectForKey:theKey
end repeat 
© www.soinside.com 2019 - 2024. All rights reserved.