Link in Zwischenablage kopieren
Kopiert
Hello, there..
I'm starting to work with eventListeners.
But, as you can imagine, I'm having problems.
Reading a lot of posts here I figured out how to run the afterOpen just one time.
But, now, I'm trying to run an beforeClose eventListener but it doesn't runs.
The afterOpen sets all stories to trackChanges = true.
On close, I want to turn off the trackChanges to all stories.
As I understood, the event runs AFTER the doc is closed, instead of BEFORE.
What am I doing wrong?
Thanks a lot!
Link in Zwischenablage kopieren
Kopiert
If you want a event listener to be keep on listening you need to use a persistent script engine.
That's made by using a specific directive:
#targetengine "session"
Actually "session" could be anything. It's the name you give to the script engine
That will make the script being executed all session long unless yours or someone else 's script will disable it.
beforeClose event may be listened but as the closing processiong cannot be stopped, you would need to store teh doc url, reopen it in invisible mode (app.open (someFile, false)) then do the edits and close.
Link in Zwischenablage kopieren
Kopiert
I tried, but I'm failing on some point.
Take a look, please, and help me to find the right way to do this.
#targetengine "askRevisao"
app.addEventListener("afterOpen", askRevisao, false);
app.addEventListener("beforeClose", beforeCloseRev, false);
function askRevisao(myEvent) {
if (myEvent.target.constructor.name !== "Document") return;
var askRev = confirm("Deseja ativar a revisão?");
if (askRev == true) {
app.documents[0].stories.everyItem().trackChanges = true;
}
}
function beforeCloseRev(myEvent) {
var myDocName = app.documents[0].fullName;
app.open(myDocName, false);
app.documents[0].stories.everyItem().trackChanges = false;
app.documents[0].close(SaveOptions.YES);
}
Link in Zwischenablage kopieren
Kopiert
You may try this syntax instead…
app.eventListeners.add
#targetengine "askRevisao"
app.eventListeners.add("afterOpen", askRevisao, false);
app.eventListeners.add("beforeClose", beforeCloseRev, false);
function askRevisao(myEvent) {
if (myEvent.target.constructor.name !== "Document") return;
var askRev = confirm("Deseja ativar a revisão?");
if (askRev == true) {
app.documents[0].stories.everyItem().trackChanges = true;
}
}
function beforeCloseRev(myEvent) {
var myDocName = app.documents[0].fullName;
app.open(myDocName, false);
app.documents[0].stories.everyItem().trackChanges = false;
app.documents[0].close(SaveOptions.YES);
}
Link in Zwischenablage kopieren
Kopiert
When I close the document...
Link in Zwischenablage kopieren
Kopiert
Dealing with handlers imply to have a good understanding of the underlaying mechanisms. One of those is to ensure that the objects you are after actually exist or are in a state you can deal with :
//Making script persistent
#targetengine "listeningEvents"
//Main routine
var main = function() {
///VARIABLES DEFINITIONS
var
closedDocPath,
addCloseHandlers,
onAfterOpenHandler,
onBeforeCloseHandler,
onAfterCloseHandler,
onAfterOpenEventListener,
onBeforeCloseEventListener,
onAfterCloseEventListener;
//function to add close related listeners
addCloseHandlers = function() {
//adding a before close listener if not found
if ( !onBeforeCloseEventListener.isValid ) {
onBeforeCloseEventListener = app.eventListeners.add ( "beforeClose", onBeforeCloseHandler );
onBeforeCloseEventListener.name = "onBeforeClose";
}
//adding an after close listener if not found
if ( !onAfterCloseEventListener.isValid ) {
onAfterCloseEventListener = app.eventListeners.add ( "afterClose", onAfterCloseHandler );
onAfterCloseEventListener.name = "onAfterClose";
}
}
//Handler for after open events
onAfterOpenHandler = function ( evt ) {
var doc = evt.parent;
if ( !(doc instanceof Document ) ) return;
doc.stories.everyItem().trackChanges = confirm ( "Deseja ativar a revisão?" );
}
//Handler for before close events
onBeforeCloseHandler = function ( evt ) {
var doc = evt.parent;
if ( !(doc instanceof Document ) ) return;
closedDocPath = File ( doc.properties.fullName );
}
//Handler for after close events
onAfterCloseHandler = function( evt ) {
var doc;
if ( closedDocPath && closedDocPath.exists ) {
//Removing close related events handlers so the reopening/closing of the doc doesn't fire them
onBeforeCloseHandler.remove();
onAfterCloseHandler.remove();
//Reopening doc in invisible mode
doc = app.open ( closedDocPath, false );
doc.stories.everyItem().trackChanges = false;
doc.close( SaveOptions.YES );
//Readding close related events handlers
addCloseHandlers();
}
}
//Referencing possibly existing listeners
onAfterOpenEventListener = app.eventListeners.itemByName ( "onAfterOpen" );
onBeforeCloseEventListener = app.eventListeners.itemByName ( "onBeforeClose" );
onAfterCloseEventListener = app.eventListeners.itemByName ( "onAfterClose" );
//adding after open listener if not found
if ( !onAfterOpenEventListener.isValid ) {
onAfterOpenEventListener = app.eventListeners.add ( "afterOpen", onAfterOpenHandler );
onAfterOpenEventListener.name = "onAfterOpen";
}
//adding close related events listener
addCloseHandlers();
}
//Go tigers
main();
HTH
Loic
Link in Zwischenablage kopieren
Kopiert
Thank you so much for the class!
I'll try (to learn more about)...
Weitere Inspirationen, Events und Ressourcen finden Sie in der neuen Adobe Community
Jetzt ansehen