Ga naar inhoud
  • 0

AppleScript


andries

Vraag

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 naar reactie

7 antwoorden op deze vraag

Aanbevolen berichten

  • 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 naar reactie
  • 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 naar reactie
  • 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 naar reactie
  • 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 naar reactie
  • 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 naar reactie

Doe mee aan dit gesprek

Je kunt dit nu plaatsen en later registreren. Indien je reeds een account hebt, log dan nu in om het bericht te plaatsen met je account.

Gast
Beantwoord deze vraag...

×   Geplakt als verrijkte tekst.   Plak in plaats daarvan als platte tekst

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...