[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt "afterOpen", Event ?

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

"afterOpen", Event ?

AndreasCAR
Beiträge gesamt:

6. Dez 2011, 12:33
Beitrag # 1 von 11
Bewertung:
(8160 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo.

Wie kann ich erreichen, dass das " alert( "Habe fertig");" erst erscheint, wenn das ID5-Dokument komplett geöffnet ist? Also zum Schluß, und nicht wie jetzt am Anfang.

Code
#targetengine "session"  

main();

function main() {
app.addEventListener("afterOpen", myEventFunction, false);
}
function myEventFunction(myEvent) {

if (app.documents.length > 0 ) {

alert( "Habe fertig");
}

}


PS: Ich will ein Script erst "loslegen" lassen, wenn das Dokument fertig geöffnet ist.
____________________
Grüße
AndreasCAR
X

"afterOpen", Event ?

Martin Fischer
  
Beiträge gesamt: 12685

6. Dez 2011, 12:51
Beitrag # 2 von 11
Beitrag ID: #485823
Bewertung:
(8153 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Andreas,

Du meinst vermutlich das Ereignis, nachdem das Layoutfenster geöffnet ist.

Ab InDesign CS5 sollte das so funktionieren:

Code
#targetengine "session"   

main();

function main() {
app.addEventListener("afterOpen", myEventFunction, false);
}
function myEventFunction(myEvent) {
if (myEvent.parent.constructor.name == 'LayoutWindow' ) {

alert( "Habe fertig");
}

}



als Antwort auf: [#485822]

"afterOpen", Event ?

AndreasCAR
Beiträge gesamt:

6. Dez 2011, 13:06
Beitrag # 3 von 11
Beitrag ID: #485824
Bewertung:
(8140 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin.

Danke für die schnelle Antwort. Wenn die alert-Meldung kommt,
ist (siehe Bild) noch das "Neues-Dokument"-Fenster zu sehen.
Kann die "alert-Meldung" evtl. noch etwas verzögert werden...?

____________________
Grüße
AndreasCAR

http://www.pic-upload.de/...Habe-Fertig.jpg.html


als Antwort auf: [#485823]

"afterOpen", Event ?

Martin Fischer
  
Beiträge gesamt: 12685

6. Dez 2011, 13:25
Beitrag # 4 von 11
Beitrag ID: #485825
Bewertung:
(8131 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Andreas,

Du kannst noch eine Pause-Funktion einbauen.
Code
function pause(zeit) 	//Zeit hier in ms angeben 
{
var starttime=(new Date).getTime();
while (starttime+zeit > (new Date).getTime() ) {};
}


Aber ich fürchte, das bringt nicht den erhofften Effekt (Meldung erscheint erst, wenn "Neues-Dokument"-Fenster verschwunden ist), sondern es bewirkt nur eine nutzlose Verzögerung.


als Antwort auf: [#485824]
(Dieser Beitrag wurde von Martin Fischer am 6. Dez 2011, 13:35 geändert)

"afterOpen", Event ?

AndreasCAR
Beiträge gesamt:

6. Dez 2011, 15:34
Beitrag # 5 von 11
Beitrag ID: #485837
Bewertung:
(8082 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin.

Danke, schau ich mir dann in Ruhe an.

____________________
Grüße
AndreasCAR


als Antwort auf: [#485825]

"afterOpen", Event ?

gfellenz
Beiträge gesamt: 120

6. Dez 2011, 16:22
Beitrag # 6 von 11
Beitrag ID: #485841
Bewertung:
(8064 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

ich hätte jetzt für Pause $.sleep(TimeInMs) vorgeschlagen.

Aber eigentlich wollte ich zum eigentlichen Thema "afterOpen" noch etwas sagen:

Es scheint ganz so, also ob das Event afterOpen bei großen Dokumenten und (großen) IDML-Dokumenten zu früh ausgelöst wird.

Bspw. hatte ich hier einen Fall, das eine IDML-Datei nach afterOpen noch nicht gespeichert werden konnte. Die Fehlermeldung war, dass noch nicht alle Transaktionen abgeschlossen waren.
Hier im Forum hatten wir ein ähnliches Phänomen mit der Eigenschat allGraphics, die ebenfalls nicht immer richtig referenziert.

Je nachdem welches Problem Andreas hat, ist dieses nicht lösbar. Wobei deine Pause-Funktion eventuell etwas besser ist, da sie durch den Aufbau dazu führen könnte, dass andere Threads noch weiterlaufen können. Bei $.sleep() scheint mir die komplette Verarbeitung gestoppt zu werden, was eigentlich nie etwas bringt. Das ist jetzt aber reine Spekualtion.

Falls das Problem reproduzierbar besteht bitte den Bug unter:

https://www.adobe.com/...ex.cfm?name=wishform

posten. Vielleicht löst Adobe dann dieses lästige Problem!

Grüße,
Gregor


als Antwort auf: [#485837]

"afterOpen", Event ?

Martin Fischer
  
Beiträge gesamt: 12685

7. Dez 2011, 08:17
Beitrag # 7 von 11
Beitrag ID: #485858
Bewertung:
(8017 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Gregor,

Antwort auf: ich hätte jetzt für Pause $.sleep(TimeInMs) vorgeschlagen.

Ich war knapp dran, auch $.sleep() vorzuschlagen, war mir dann aber spontan unsicher, ob der Core JavaScript Befehl möglicherweise ESKT anstößt, was ich mit dem veröffentlichten Funktionscode (aus fremder Quelle) zu umgehen versuchte.

$.sleep() funktioniert freilich auch.
Vermutlich sogar genau so, wie die obige Funktion (also kein Gewinn/Verlust hinsichtlich der Aufgabenstellung).

Antwort auf: Bspw. hatte ich hier einen Fall, das eine IDML-Datei nach afterOpen noch nicht gespeichert werden konnte. Die Fehlermeldung war, dass noch nicht alle Transaktionen abgeschlossen waren.
Hier im Forum hatten wir ein ähnliches Phänomen mit der Eigenschat allGraphics, die ebenfalls nicht immer richtig referenziert.


Hast Du eine Idee, was alles zwischen
a) beforeOpen (document) und afterOpen (document) und zwischen
b) afterOpen(document) und afterOpen (layoutWindow) passiert?

Habe letzthin ein Logger-Skript entwickelt, das die Dauer des Öffnenvorgangs von Dokumenten unter unterschiedlichen Bedingungen (Links lokal oder auf Server, unterschiedliche Stati) protokolliert. Dabei konnte ich zumindest feststellen, dass die Überprüfung der Schriften und der Links zwischen beforeOpen (document) und afterOpen (document) stattfindet.
Geht es in der Phase zwischen afterOpen (document) und afterOpen (layoutWindow) nur ums Rendern des Inhalts des Layoutfensters?


Übrigens wollte es mir in CS5 nicht gelingen, mit beforeOpen (document) Fehlermeldungen bzgl. Schriften und Links zu unterdrücken, um die Bremse der damit verbundenen Dialoge, die einen Benutzereingriff erfordern, zu umgehen.

Den Zustand des UserInteractionLevels habe ich mir vor und nach dem Unterdrücken der Benutzerinteraktion beim beforeOpen-Event (document) angeschaut. Die Zustandsmeldungen entsprachen der Erwartung; die Wirkungen (das Ergebnis) allerdings nicht: die Fehlermeldungen ließen sich nicht unterdrücken.
Code
#targetengine "session"  

app.addEventListener( "beforeOpen", zeitStoppenEin);
app.addEventListener( "afterOpen", zeitStoppenAus);


function zeitStoppenEin(myEvent)
{
alert( 'beforeOpen (' + myEvent.parent.constructor.name + ') – vor Unterdrückung: ' + app.scriptPreferences.userInteractionLevel );
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.NEVER_INTERACT;
alert( 'beforeOpen (' + myEvent.parent.constructor.name + ') – nach Unterdrückung: ' + app.scriptPreferences.userInteractionLevel );
// do something
}

function zeitStoppenAus(myEvent)
{
alert( 'afterOpen (' + myEvent.parent.constructor.name + ') – vor Reaktivierung: ' + app.scriptPreferences.userInteractionLevel );
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.INTERACT_WITH_ALL;
alert( 'afterOpen (' + myEvent.parent.constructor.name + ') – nach Reaktivierung: ' + app.scriptPreferences.userInteractionLevel );
// do something
}


Hab auch mal auf das Wiederherstellen der Interaktion bei afterOpen (document) bzw. afterOpen (layoutWindow) verzichtet.
Es will mir nicht gelingen, bei diesem Event-Skript die Fehlermeldungen bzgl. Schriften und Verknüpfungen zu unterdrücken.

Hast Du eine Idee, wie man diese Blockade durch die Fehlermeldungen mit der Notwendigkeit eines Benutzereingriffs umgehen könnte?


als Antwort auf: [#485841]
(Dieser Beitrag wurde von Martin Fischer am 7. Dez 2011, 08:30 geändert)

"afterOpen", Event ?

gfellenz
Beiträge gesamt: 120

7. Dez 2011, 15:06
Beitrag # 8 von 11
Beitrag ID: #485886
Bewertung:
(7958 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

was genau passiert weiß ich leider auch nicht. Bis jetzt habe ich die Namen interpretiert und getestet ob das gewünschte erreicht wird - mit nicht immer befriedigendem Ergebnis wie wir inzwischen wissen.

Zur Frage des Benutzereingriffs: Eine andere Idee habe ich leider auch nicht. Wobei ich nicht ganz verstehe was du willst: Du willst nicht global den UserInteractionLevels setzen, sonder nur die Fehlermeldungen bzgl. Schriften und Links nicht mehr anzeigen?

Grüße,
Gregor


als Antwort auf: [#485858]

"afterOpen", Event ?

Martin Fischer
  
Beiträge gesamt: 12685

7. Dez 2011, 16:50
Beitrag # 9 von 11
Beitrag ID: #485890
Bewertung:
(7939 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Gregor,

Antwort auf: Du willst nicht global den UserInteractionLevels setzen, sonder nur die Fehlermeldungen bzgl. Schriften und Links nicht mehr anzeigen?


Die Aufgabe lautet: Messung der Dauer des Öffnen-Vorgangs von Dokumenten.

Die Absicht: Anhand des Vergleichs von verschiedenen Parametern (Zahl, Status, Prüfung, Lage/Pfad der Links ...) in einer Liste soll ein Zusammenhang zwischen bestimmten Bedingungen und der Dauer/Langsamkeit des Öffen-Vorgangs ermittelt werden.

Das Problem: Öffnet ein Anwender ein Dokument und geht erst mal einen Kaffee trinken, weil er um die Wartezeit weiß, kann es sein, dass eine Fehlermeldung, die vom Benutzer weggeklickt werden muss, die ermittelte Zeit beim Öffnen eines Dokuments deutlich verfälscht; zumal diese Störung in der Liste nicht festgehalten wird/werden kann.

Das Ziel ist also, eine Störung des regulären Öffnen-Vorgangs durch eine Meldung über fehlende Schriften, fehlende oder nicht aktuelle Verknüpfungen und fehlende Plugins möglichst zu unterdrücken.
Außerhalb des Messbereichs von beforeOpen und afterOpen sollen jedoch Meldungen möglich sein.


als Antwort auf: [#485886]

"afterOpen", Event ?

gfellenz
Beiträge gesamt: 120

7. Dez 2011, 17:58
Beitrag # 10 von 11
Beitrag ID: #485897
Bewertung:
(7922 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hey Martin,

mit scriptPreferences.userInteractionLevel setzt du fest, wie InDesign sich während des Skript-Ablaufs verhält. Ein Skript läuft aber beim Öffnen nicht, sondern nur während der Event Phase. Für deine Anwendung musst du den Öffnen-Menüeintrag überschreiben. In etwa so:

Code
#targetengine session 

app.menus.item("$ID/Main").submenus.item("$ID/&File").menuItems.item("$ID/kPMOpenDocTextKey").associatedMenuAction.addEventListener ("beforeInvoke", zeitStoppenEin);
app.addEventListener( "afterOpen", zeitStoppenAus);

function zeitStoppenEin(myEvent) {
myEvent.preventDefault();
myEvent.stopPropagation ()
var _file = File.openDialog("InDesign ... "); // ++ Filter etc.
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.NEVER_INTERACT;
$.hiresTimer // Reset
app.open(_file);
}

function zeitStoppenAus(myEvent) {
if (myEvent.constructor.name == "LayoutWindow") {
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.INTERACT_WITH_ALL;
$.writeln("aus: " + $.hiresTimer)
}
}


Keine Garantie, habe es nur kurz getestet.

Funktioniert natürlich nur, wenn der Benutzer immer mit Befehl+O oder dem entsprechenden Menüeintrag öffnet. Bei Drag&Drop oder Doppelklick geht das nicht.

Grüße,
Gregor


als Antwort auf: [#485890]

"afterOpen", Event ?

Martin Fischer
  
Beiträge gesamt: 12685

8. Dez 2011, 08:41
Beitrag # 11 von 11
Beitrag ID: #485924
Bewertung:
(7892 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Gregor,

prima, so funktioniert es!

Zumindest beim Öffnen über den Menüeintrag.
So könnte man etwa während der Testphase entscheiden, ob das Öffnen protokolliert werden soll oder nicht und entsprechend die Dateien über's Menü üffnen oder durch Doppelklick im Finder.

Danke für den Hinweis und die Skizze.

---
edit:
Auch der $.hiresTimer kommt mir gelegen. ;-)


als Antwort auf: [#485897]
(Dieser Beitrag wurde von Martin Fischer am 8. Dez 2011, 08:56 geändert)
X

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
01.03.2023 - 09.03.2023

Online
Mittwoch, 01. März 2023, 00.00 Uhr - Donnerstag, 09. März 2023, 00.00 Uhr

Online Webinar

Wie gehen wir mit diesen Veränderungen um? Was ist notwendig, damit wir die Digitalisierung im Unternehmen klappt? Veränderungsprozesse verstehen und entsprechend handeln Mitarbeiter als Botschafter Webseite mit WordPress erstellen SEA /SEO (Ads aufschalten)

Ja

Organisator: B. Isik - SNF Academy

Kontaktinformation: B. Isik, E-Mailinfo AT snfa DOT ch

https://www.fernstudiumfitness.ch/digitalisierung-schweiz/