Проблема с подпрограммой Applescript

Я довольно исключительный AppleScripter и пишу сценарии в течение долгого времени. Приложение, которое я сейчас создаю, предполагает использование приложения «События базы данных». Я пытаюсь установить значение поля с помощью подпрограммы. По-видимому, я «не могу продолжать set_duration» и понятия не имею, что может быть не так. Текущий исходный код приведен ниже.

property first_run : true
on run
if first_run then
display dialog "THIS APPLICATION IS DESIGNED TO CLEAN UP THE FOLDER CONTAINING IT." & return & return & "After a certain number of days that you set, every item in that folder that has not been used for that duration will automatically be moved to a folder named \"Unused Items\"." with icon 1 buttons {"Cancel", "OK"} default button 2
set first_run to false
end if
tell application "Database Events"
set quit delay to 0
try
get database "Folder Cleanup Wizard"
on error
make new database with properties {name:"Folder Cleanup Wizard"}
tell database "Folder Cleanup Wizard"
make new record with properties {name:"Duration"}
tell record "Duration" to make new field with properties {name:"Days", value:set_duration()} --> UNKNOWN ERROR
end tell
end try
end tell
end run

on set_duration()
try
set duration to the text returned of (display dialog "Enter the minimum duration period (in days) that files and folders can remain inactive before they are moved to the \"Unused Items\" folder." default answer "" with title "Set Duration") as integer
if the duration is less than 0 then
display alert "Invalid Duration" message "Error: The duration cannot be a negative number." buttons {"OK"} default button 1
set_duration()
end if
on error
display alert "Invalid Duration" message "Error: \"" & (duration as string) & "\" is not a valid duration time." buttons {"OK"} default button 1
set_duration()
end try
end set_duration

person fireshadow52    schedule 23.01.2011    source источник


Ответы (2)


Проблема в том, что AppleScript обрабатывает set_duration как термин из database "Folder Cleanup Wizard" или из application "Database Events" благодаря блокам tell. (Вне блока tell будет работать просто set_duration().) Чтобы обойти это, вам нужно использовать my set_duration(), который указывает AppleScript искать функцию в текущем скрипте. Итак, в этом случае у вас будет

...
tell record "Duration" to ¬
  make new field with properties {name:"Days", value:my set_duration()}
...
person Antal Spector-Zabusky    schedule 24.01.2011

Я думаю, это потому, что Applescript путается, где живет set_duration

Сделайте что-нибудь вроде этого

tell me to set value_to_set to set_duration()
tell record "Duration" to make new field with properties {name:"Days", value:value_to_set}

Я думаю, это сработает для вас

person RyanWilcox    schedule 24.01.2011