Copy link to clipboard
Copied
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!
Copy link to clipboard
Copied
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.
Copy link to clipboard
Copied
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);
}
Copy link to clipboard
Copied
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);
}
Copy link to clipboard
Copied
When I close the document...
Copy link to clipboard
Copied
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
Copy link to clipboard
Copied
Thank you so much for the class!
I'll try (to learn more about)...
Find more inspiration, events, and resources on the new Adobe Community
Explore Now