Jump to content
  • 0

AppleScript


andries

Question

Ik heb een applicatie draaien die door middel van AppleScript bepaalde eigenschappen van foto's ophaalt en ze dan terug communiceert naar FileMaker.

 

 

set this_file to "Macintosh HD:private:var:tmp:folders:502:TemporaryItems:FileMaker:temp.jpg"
try
tell application "Image Events"
	-- start the Image Events application
	launch
	-- open the image file
	set this_image to open this_file
	-- extract the property value
	copy the dimensions of this_image to {W, H}
	-- purge the open image data
	close this_image
end tell
on error error_message
display dialog error_message
end try

tell application "FileMaker Pro Advanced"
tell database "TEST"
	tell table "PHO_Photos"
		set cell "g_edt_resize_H" of current record to H
		set cell "g_edt_resize_W" of current record to W
	end tell
end tell
end tell

 

Dit werkte perfect tot ik FM10Adv ook installeerde op mijn computer ( heb nu dus 9 en 10 draaien ). Deze twee applicaties hebben dezelfde naam, namelijk "FileMaker Pro Advanced". Ik heb het gevoel dat AppleScript nu niet meer weet met welke hij nu eigenlijk moet praten, en dus maar faalt.

 

Ik heb gehoord dat er een methode is om een actief proces te bekijken aan de hand van

 

tell applictation "System Events"
tell process "FileMaker Pro Advanced"
	code hier
end tell
end tell

 

Ik krijg dit echter ook niet aan de praat. Heeft er hier iemand nog problemen mee gehad? En hebben jullie een work around gevonden?

 

Alvast bedankt !

 

Andries

Link to comment

7 answers to this question

Recommended Posts

  • 0

Het script is gemaakt toen alleen versie 9 op je computer stond, neem ik aan.

Om in applescript aan te kunnen wijzen welke applicatie je eigenlijk wilt hebben, vervang ik de naam in het applescript altijd door 'xxx'

Bij compileren zal applescript vragen 'waar is xxx?' en dan wijs je FMP10 aan.

 

HTH

 

rmw

Link to comment
  • 0

Klopt, maar dat wil je niet altijd.

 

De reden dat je het niet aan de praat krijgt, is dat je niet mag praten met FileMaker via System Events.

Dus je haalt die zaken uit elkaar.

 

En dan zijn er nog een aantal andere voetangels en schietgeweren opgesteld.

Dus ik loop er even systematisch door.

tell application "System Events"
if (count of ((every application process) whose name is "FileMaker Pro")) > 0 then
	set fmRunning to true
	set appFile to file of (item 1 of ((every application process) whose name is "FileMaker Pro")) as string
end if
end tell

Eerst ga je kijken of FileMaker draait. FileMaker Inc. heeft er gelukkig voor gekozen om haar proces "FileMaker Pro" te laten heten, of het nu de Pro of de Advanced versie is.

Bovenstaande code gaat kijken of er processen met die naam draaien, en als er minstens 1 proces draait, haalt het het pad op naar de applicatie van het eerste proces - in de veronderstelling dat je meerdere FileMakers tegelijkertijd kán draaien.

 

We gaan met die FileMaker praten via het pad naar de applicatie. Op die manier zijn we zeker dat we altijd met dezelfde FileMaker praten.

Doordat we dit echter "soft coden", weet de AppleScript compiler niet meer hoe hij je AppleScript code moet interpreteren, want dat staat immers nog niet vast op het ogenblik dat je compileert.

Daarom moeten we raw syntax gebruiken.

Het vervolg van het scriptje ziet er zó uit:

if fmRunning then
tell application appFile
	tell «class cDB » "TEST"
		tell «class cTBL» "PHO_Photos"
			set «class ccel» "g_edt_resize_H" of «class pCRW» to H
			set «class ccel» "g_edt_resize_W" of «class pCRW» to W
		end tell
	end tell
end tell
else
-- fouthandling hier
end if

 

Hoe genereer je die raw (chevron) syntax eigenlijk? Je loopt naar een benzinestation...sorry flauw grapje.

Niet zo voor de hand liggend eigenlijk. Ik denk dat Smile vroeger zoiets had, maar ikzelf gebruik Script Debugger. Prijzige software, maar als je professioneel aan de slag wilt, is het gewoon onmisbaar.

Link to comment
  • 0

He Peter

 

ik denk dat ik het niet helemaal heb begrepen.

 

Ik heb nu jouw script in Script Editor gestoken, en ik krijg nu de volgende error teruggegeven:

 

Can’t set «class ccel» "g_edt_resize_H" of «class pCRW» to H.

 

Als ik echter nu je post opnieuw lees, denk ik dat wat ik doe ook niet mogelijk is. Als ik het goed begrijp is het niet meer mogelijk via Script Editor en moet ik het via Script Debugger doen?

 

Of zie ik echt dingen over het hoofd?

Link to comment
  • 0

He Peter

 

ik denk dat ik het niet helemaal heb begrepen.

 

Het eerste deel werkt perfect, hij vindt idd de draaiende versie van FileMaker. Echter het tweede deel ( tevens het meest abstracte ) krijg ik niet aan de praat.

 

Ik heb nu jouw script in Script Editor gestoken, en ik krijg nu de volgende error teruggegeven:

 

Can’t set «class ccel» "g_edt_resize_H" of «class pCRW» to H.

 

Als ik echter nu je post opnieuw lees, denk ik dat wat ik doe ook niet mogelijk is. Als ik het goed begrijp is het niet meer mogelijk om dit via Script Editor en moet ik het via Script Debugger doen?

 

Of zie ik echt dingen over het hoofd?

 

 

edit: per ongeluk op citeer in plaats van wijzigen geklikt...

Link to comment
  • 0

Dag Andries,

Die chevron syntax gaat prima vanuit Script Editor, Script Debugger vernoemde ik omdat het handig is om die syntax terug te vinden.

De twee stukje AppleScript die ik poste, vormen samen 1 script. Da's ook logisch, want je 2e stuk begint met een variable die al gedefinieerd moet zijn ( fmRunning ).

Can’t set «class ccel» "g_edt_resize_H" of «class pCRW» to H
Hier moet je even goed kijken:

ccel: een cel

pCRW: het huidige record

Dus: de boodschap = "can't set cell "g_edt_resize_H" of current record to H.

Eigenlijk vrij simpel, ik weet het, op het eerste gezicht nogal griezelig, maar het valt uiteindelijk wel mee.

 

Wat je doet, moet eigenlijk gewoon werken. Leg misschien je opstelling eens compleet uit, en/of post een lab-schaal FileMaker bestandje.

 

He Peter

ik denk dat ik het niet helemaal heb begrepen.

Het eerste deel werkt perfect, hij vindt idd de draaiende versie van FileMaker. Echter het tweede deel ( tevens het meest abstracte ) krijg ik niet aan de praat.

Ik heb nu jouw script in Script Editor gestoken, en ik krijg nu de volgende error teruggegeven:

Can’t set «class ccel» "g_edt_resize_H" of «class pCRW» to H.

Als ik echter nu je post opnieuw lees, denk ik dat wat ik doe ook niet mogelijk is. Als ik het goed begrijp is het niet meer mogelijk om dit via Script Editor en moet ik het via Script Debugger doen?

Of zie ik echt dingen over het hoofd?

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...