| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen   | 
	 
	
	
		| Autor | 
		Nachricht | 
	 
	
		spirigwi •----->
  
  
  Anmeldedatum: 10.07.2003 Beiträge: 1517 Wohnort: Olten-CH
  | 
		
			
				 Verfasst am: 07.12.2004 - 14:57    Titel: rekursiven (sich selbst aufrufenden) Handler STOPPEN | 
				     | 
			 
			
				
  | 
			 
			
				"Frage ans Forum
 
wie kann man an der  so markierter Stelle:"
 
--xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 
"einen Handlerabbruch durch den user setzen dass wenn er merkt dass sowieso nichts geht(ZB Ethernet- Stecker noch ausgezogen) ZB mit CODE_Punkt den handler unterbrechen kann? "
 
--on run
 
my F14()
 
--end run 
 
on F14()
 
   set APA1 to "AllAbrechner.APA"
 
   tell application (my FM()) to activate --ohne öffnet nicht! 4sec 
 
   tell application "FileMaker Pro"
 
      --my FM() geht nicht da folg. Befehle FM spezifisch
 
      try
 
--using terms from .. noch nicht probiert, ginge das?
 
         go to layout "PERIODE" of window APA1 --gleichzeitig überprüft so ob file offen
 
      on error
 
         set PFAD to ((first item of (list disks)) as string) & ":" & ¬
 
            " ALLE_öffner:AllAbrechner.APA"
 
         open file PFAD --für FILE! --oder Alias
 
         --xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 
         return my F14() --erneuter Handleraufruf
 
         --damit nochmals oben anfängt wenn File noch nicht offen 
 
         "Suche nach Ideen wie man hier elegant einen AnwenderAbbruch einfügen könnte"
 
         --xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 
      end try
 
      set STARTNAME to (first item of (list disks)) as string
 
      if STARTNAME = "mcchef" or STARTNAME = "mclicht" then
 
         set bounds of window APA1 to {624, 37, 1027, 582} --PERIODE••   
 
      else
 
         set bounds of window APA1 to {403, 41, 806, 586} --PERIODE••    
 
      end if
 
      tell database APA1
 
         activate
 
         go to window APA1
 
      end tell
 
   end tell
 
end F14
 
 
--###########################
 
on FM()
 
   set PFAD to ((first item of (list disks)) as string) & ":" & ¬
 
      "Programme:FileMaker Pro 5.5:FileMaker Pro"
 
end FM
 
 
oder etwas präzieser formuliert nach Goethes Zauberlehrling:
 
"...und die Geister, die er rief...."@spirigwi
 
"In die Ecke Besen seids gewesen"@Snow, @Folker-HILFE!
 
 
Gruss und Dank im voraus Willy _________________  Skript-Fan => ein  �  -Fan =>Scr¿¿-KongFuSius_Kurpfusius | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		Folker •---->
  
  
  Anmeldedatum: 11.12.2000 Beiträge: 649 Wohnort: Holsteinische Schweiz
  | 
		
			
				 Verfasst am: 08.12.2004 - 10:29    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Hallo Willy,
 
 
so in aller Kürze und vielleicht nicht sonderlich elegant? Einfach eine Zählvariable x einfügen. Beim Scriptstart auf 0 setzen, bei jeder Rekursion um 1 erhöhen set 'x to (x + 1)', dann eine Bedingung formuliern 'if (x >= 3) then error "Zuviele Fehlversuche, prüfen Sie usw..." number -31960 _________________ Gruß,
 
Folker Brandt
 
=============================
 
Systemberatung · Datenbanken · Webdesign | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		Snow Administrator
  
  
  Anmeldedatum: 21.11.2000 Beiträge: 1946 Wohnort: Deiningen
  | 
		
			
				 Verfasst am: 08.12.2004 - 21:04    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Hallo Willy,
 
 
mal sehen, ob ich das richtig verstanden habe. Im 'on error'-Teil rufst du den Handler erneut auf, falls die Datei noch nicht geöffnet ist. Wenn nun der Benutzer feststellt, dass ein Öffnen gar nicht möglich ist (aus welchem Grund auch immer), sitzen wir in einer Endlosschleife.
 
 
Ein Anwenderabbruch erzeugt die Fehlernummer -128. Diese brauchst du eigentlich nur abzufangen und darauf zu reagieren.
 
 
Vereinfachtes Beispiel:
 
 
doJob()
 
 
on doJob()
 
   try
 
      delay 3
 
      tell application "Finder" to open file "Macintosch HD:Documente:ExistiertNicht"
 
   on error number errNr
 
      if errNr = -128 then
 
         display dialog "Vom Benutzer abgebrochen"
 
         return
 
      end if
 
      my doJob()
 
   end try
 
end doJob
 
 
'delay 3' habe ich nur eingebaut, damit man etwas Zeit hat, um mit Befehlstaste-Punkt dazwischen zu funken. _________________ Peter
 
-
 
Fischer-Bayern.de|Shadetreemicro.com | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		spirigwi •----->
  
  
  Anmeldedatum: 10.07.2003 Beiträge: 1517 Wohnort: Olten-CH
  | 
		
			
				 Verfasst am: 08.12.2004 - 23:26    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				"Hey Folker&Snow
 
hier error&company
 
 
ihr verwöhnt mich, eure 2 Bilder im Forum gehen jetzt als screenshot in die Trophäensammlung ein:
 
der eine liefert gleich für jeden AS-skripter eigentlich zum Necessaire gehörende Zählmaschine, nur ich Greenhorn weiss wieder mal nichts davon vorher und der andere überesetzt endlich meine Fragestellung ins Deutsch dazu, noch hintangehängt so ganz nebenbei, die Lösung in seccem Beispiel
 
doch ne feine Sache, dieses Forum, nicht wahr.
 
 
Nun kann ich endlich anknüpfen an Snows Formulierung mit mehr Problem - berschreib:
 
 
bei diesen verfluchten FileMaker-files ist manchmal ein Aufruf-ergebnis nicht sofort zu haben
 
und wenn er dann einfach weiter skriptet dann prasselts von Fehlermeldungen hiroglyphischer Art nur so los auf die armen user(-Innen)
 
sodass der user beim ersten missgrlückten Versuch(=file noch nicht offen, kann aber noch werden)
 
 noch nicht eingesetzt werden sollte
 
--> daher 2. Handleraufruf 
 
Wenns jetzt immernoch nicht geht beginnen die anderen Gründe zu spielen u.a:
 
- Hardware
 
- ein anderes FM-file steckt in einer FORTFAHREN warte - Zange
 
-...jedenfalls wäre an diesem Punkt das Wissen des Anwenders gefragt 
 
 
 	  | Snow hat Folgendes geschrieben: | 	 		   
 
doJob()
 
 
on doJob()
 
   try
 
      delay 3
 
      tell application "Finder" to open file "Macintosch HD:Documente:ExistiertNicht"
 
   on error number errNr
 
      if errNr = -128 then
 
         display dialog "Vom Benutzer abgebrochen"
 
         return
 
      end if
 
      my doJob()
 
   end try
 
end doJob
 
  | 	  
 
 
also: [in die Worte Snows die [Formel von Folker] eingebaut]: "
 
 
--CODE-- dh man kanns gefahrlos abrattern
 
property x : 1 -- solche Techniken bei Folker abgeguckt
 
--für Lebensverlust bei Falschanwendung...keine Haftung durch den Nachahmer  
 
with timeout of 3 seconds
 
   -- hier die zeitkritischen Anweisungen platzieren= Snow-Zitat 
 
   doJob() --timeout scheint keine Wirkung zu haben, falscher Ort?  
 
end timeout
 
on doJob()
 
   try
 
      delay 3 --macht nun die Sache wesentlich ungefährlicher, danke Snow
 
      "da man ja CODE_Punkt drücken kann und damit error erzeugt(nicht gewusst ich)"
 
      tell application "Finder" to open file "Macintosch HD:Documente:ExistiertNicht"
 
   on error number errNr
 
      if errNr = -128 then
 
         display dialog "Vom Benutzer abgebrochen"
 
         --return--auflösen weil brauche nochmals einen Versuch
 
         --irgendwie kommt er gar nicht hier hinein,ich schwörs Snow, obige HD
 
         --nicht zu besitzen, der Pausenschlag nach Mac würde ja schon das 
 
         --Doppelklicken  auf Name verhindern..bei mir längst verlassene Nomenklatur
 
         --AHA!!!!   durch CODE_Punkt kommt man hier hin, ach so, SUPER!!!!!!!
 
      end if
 
      --START-Zähler FOLKERFOLKERFOLKERFOLKERFOLKERFOLKER
 
      set x to (x + 1) -- so gail
 
      activate (display dialog x)
 
      --dann eine Bedingung formuliern 
 
      if (x >= 3) then
 
         set x to 1 --damit x  -wieder auf 1 zurückgedreht wird error&company lässt grüssen
 
         error "Zuviele Fehlversuche, prüfen Sie usw..." number -31960
 
      end if
 
      --END Zähler FOLKERFOLKERFOLKERFOLKERFOLKERFOLKER
 
      activate (display dialog "sollte dialogen vor erneutem Handleraufruf")
 
      my doJob()
 
   end try
 
end doJob
 
"Ich danke beiden für ihren so wertvollen "
 
doJob --not
 
doppelJob -- dats it!
 
DOPPELDANK --Willy
 
 _________________  Skript-Fan => ein  �  -Fan =>Scr¿¿-KongFuSius_Kurpfusius | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
	 
	    
	   | 
	
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
  | 
   
 
  
Powered by phpBB  © 2001, 2002 phpBB Group Deutsche Übersetzung von phpBB.de 
		 | 
	 
 
 | 
 
 |