How does one manipulate records within a handler?
if name of current application is "Script Editor" then
tell application id "DNtp"
set sel to selected records
my performSmartRule(sel)
end tell
end if
on performSmartRule(theRecords)
tell application id "DNtp"
repeat with theRecord in theRecords
my flag(theRecord)
end repeat
end tell
end performSmartRule
on flag(theRecord)
set state of theRecord to true
end flag
throws the error:
error "DEVONthink 3 got an error: Can’t make |state| of content id 18164 of database id 2 into type reference." number -1700 from |state| of content id 18164 of database id 2 to reference
The flag function needs a tell block like this:
on flag(theRecord)
tell application id "DNtp"
set state of theRecord to true
end tell
end flag
Is this the complete & final script or will it be extended/revised? Because smart rules can change the flag without having to use scripts.
Following up on @cgrunenberg’s comment: state
is a property of DEVONthink’s dictionary, not a generic property, so it needs to be in a DEVONthink tell
block.
Thanks @cgrunenberg The script is much larger - it shells out to perl, extracts 1/2 dozen fields. Just started working on adding error handling and refactoring which led to function issue.
try
add custom meta data item 5 of the theArray as number for "Tax" to theRecord
on error error_message number error_number
log message "Error: Handler \"can't parse tax\""
set tags of theRecord to tags of theRecord & {"Needs review"}
set state of the theRecord to true
set anyErrors to true
-- my flag(theRecord)
end try
Got it. Within each function the “work” with DT needs to happen inside its own tell block.
Thanks for the added context!
You’re welcome and yes, that’s true if you’re using DEVONthink specific classes and properties such as state
.
tell application id "DNtp"
set sel to item 1 of (selected records)
display alert "" & my getdate(name of sel)
end tell
on getdate(recName)
return (recName & " " & (short date string of (current date)))
end getdate
The handler here doesn’t require a DEVONthink tell
block as there’s no DEVONthink-specific commands or properties being used or requested.
I hope that makes sense.
1 Like