hilfdirselbst.ch
Facebook Twitter gamper-media
Martin Fischer  M  p
Beiträge: 11766
9. Nov 2017, 09:46
Beitrag #1 von 5
Bewertung:
(1871 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Steuerung der Prozesse eines Hotfolders über eine Palette


Liebe Kollegen,

für die Steuerung von Prozessen eines Hotfolders verfolgte ich zunächst einen Ansatz über einen idleTask und einem angehängten Eventlistener wie ihn Uwe in seinem Diskussionsbeitrag zu Interaktives Panel dargestellt hat (Danke schön, Uwe, für das schöne Beispiel).

idleTask: eigenwillig
========================
Nun stellt sich in der Praxis unter InDesign CS6 und CC 2014 heraus, dass der idleTask etwas eigenwillig und mehr oder weniger unvorhersehbar agiert:
Beim ersten Ablegen von Daten im beobachteten Hotfolder werden diese sofort abgearbeitet.
Beim nächsten Ablegen kommt fast der Verdacht auf, die Beobachtung funktioniere nicht mehr. Und dann kommt überraschend doch wieder Schwung rein und die Daten werden wie erhofft und erwartet abgearbeitet.
Nach meinen Beobachtungen ist dieser Prozess zu beschleunigen, indem man InDesign den Fokus gibt.

Insgesamt wirkt dieser Ansatz aber nicht so zuverlässig.


Palette (nicht-modales Fenster)
========================
Diese Schwächen suche ich nun über die Verlagerung der Steuerung der Prozesse in eine Palette (nicht-modales Fenster) zu umgehen.
Die Palette ist bestückt mit den Buttons
Start = Starten des Beobachtungsprozesses mit Verarbeitungsroutinen
Stop = Stoppen des Beobachtungsprozesses
Exit = Stoppen des Beobachtungsprozesses, Schließen der Palette, Beendigung des Skripts
In einem StaticText-Feld wird der aktuelle Status angezeigt.

Nun habe ich aber das Problem, dass solange der durch Start in Gang gesetzte Beobachtungsprozess mit Verarbeitungsroutinen läuft, die Palette praktisch eingefroren ist und Zugriffe (wie auch die Auswertung von Klicks auf die Buttons) auf die Palette nicht mehr möglich sind. Ohne eine Notbremse läuft in der reservierten targetengine eine Endlosschleife.

Eine mögliche Notbremse: Ablegen einer Steuerungsdatei (z.B. stop.txt) in den Hotfolder, bei deren Erkennung der Beobachtungs- und Verarbeitungsprozess beendet wird.


Parallele targetengines?
========================
Eine weiterer Idee: ergänzend zur targetengine, in der die Beobachtungs- und Verarbeitungsprozesse laufen, eine davon unabhängige targetengine für das Dialogfenster (Palette) einzurichten.

Ist dies möglich?
Wenn ja, wie?
Eine einfache Angabe einer targetengine "dialog" am Anfang der Funktion für den Dialog funktioniert nicht.


Vielleicht gibt es noch einen ganz anderen Tipp?

Viele Grüße
Martin Top
 
X
Uwe Laubender S
Beiträge: 3947
9. Nov 2017, 12:00
Beitrag #2 von 5
Beitrag ID: #560589
Bewertung:
(1849 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Steuerung der Prozesse eines Hotfolders über eine Palette


Antwort auf: …Nach meinen Beobachtungen ist dieser Prozess zu beschleunigen, indem man InDesign den Fokus gibt.


Hallo Martin,

wo liegt denn der Fokus?

Hast Du InDesign zwar laufen, aber bist im Vordergrund mit einem anderen Programm unterwegs? Beispielsweise im Browser, um auf HDS einen Beitrag zu schreiben?

Wie groß ist der Wert von sleep in der idleTask?
*****
Mit herzlichem Gruß,
Uwe Laubender
als Antwort auf: [#560582] Top
 
Martin Fischer  M  p
Beiträge: 11766
9. Nov 2017, 12:33
Beitrag #3 von 5
Beitrag ID: #560593
Bewertung:
(1843 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Steuerung der Prozesse eines Hotfolders über eine Palette


Hallo Uwe,

Antwort auf: Hast Du InDesign zwar laufen, aber bist im Vordergrund mit einem anderen Programm unterwegs? Beispielsweise im Browser, um auf HDS einen Beitrag zu schreiben?


Nicht im Browser, sondern im Mail-Programm, um dem Kunden zu antworten, der sich über den Aussetzer nach dem ersten Datenpaket beschwert hat.
Dabei konnte ich eben auch beobachten, dass mit dem zweiten Paket an Daten lange nichts passiert und plötzlich ging's doch los. Die Beobachtung des Kunden konnte ich somit bestätigen.

Als ich zwischendurch mal nach InDesign wechselte (in den Vordergrund holte), wurden die gerade kurz davor reingelegten Daten sofort abgearbeitet und mit der nächsten Lieferung ging es nach dem Wechsel in InDesign genau so flott.

Hab auf dem MAC testweise mal den APP NAP von InDesign deaktiviert.
Konnte damit aber keine Änderung feststellen.

Antwort auf: Wie groß ist der Wert von sleep in der idleTask?

Hab den Wert auf 1000 Millisekunden eingestellt.


Inzwischen habe ich eine Behelfslösung eingerichtet.
Da InDesign während der Überwachung des Hotfolders nichts anders zu tun hat und gerne auch blockiert sein darf, genügt es, vom Skript zu Beginn eine run.txt in den Hotfolder zu legen. So lange die dort drin liegt, prüft InDesign fortlaufend ob andere Daten ankommen und reagiert darauf.
Sobald die run.txt rausgenommen, umbenannt oder gelöscht wird, stoppt die Überwachung - ohne IdleTask, EventListener oder sonst was.
InDesign ist eben während der Überwachung blockiert.
Das ließe sich vermutlich auch zu einer nicht-blockierenden Lösung ausbauen.

Viele Grüße
Martin
als Antwort auf: [#560589] Top
 
Martin Fischer  M  p
Beiträge: 11766
10. Nov 2017, 11:07
Beitrag #4 von 5
Beitrag ID: #560628
Bewertung:
(1789 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Steuerung der Prozesse eines Hotfolders über eine Palette


Antwort auf: Eine weiterer Idee: ergänzend zur targetengine, in der die Beobachtungs- und Verarbeitungsprozesse laufen, eine davon unabhängige targetengine für das Dialogfenster (Palette) einzurichten.

Ist dies möglich?


Von Marc Autret findet sich ein Beispiel für die Arbeit mit mehreren #targetengines (main und session) in https://forums.adobe.com/message/4179231#4179231.

Hier eine Abwandlung des Beispiels:

Code
#targetengine "session"    
var w = new Window("window", 'Test', undefined, {resizeable:false, borderless:false} );
var myPanel = w.add ("panel");
w.add("statictext", undefined, "#targetengines");
var mb1 = w.add("button", undefined, "main");
var mb2 = w.add("button", undefined, "session");
var mb3 = w.add("button", undefined, "default");
mb1.size = mb2.size = mb3.size = [150,20];

mb1.onClick = function()
{
app.doScript("#targetengine 'main'\r" + test.toSource() + "('" + this.text + "');",
ScriptLanguage.javascript, undefined, UndoModes.entireScript);
}
mb2.onClick = function()
{
app.doScript("#targetengine 'session'\r" + test.toSource() + "('" + this.text + "');",
ScriptLanguage.javascript, undefined, UndoModes.entireScript);
}
mb3.onClick = function()
{
app.doScript("test(this.text)",
ScriptLanguage.javascript, undefined, UndoModes.entireScript);
}

w.show();

function test(str)
{
alert('#targetengine ' + $.engineName + '\nButton: ' + str + ' clicked');
}


Viele Grüße
Martin
als Antwort auf: [#560582]
(Dieser Beitrag wurde von Martin Fischer am 10. Nov 2017, 11:50 geändert)
Top
 
-hans-
Beiträge: 737
25. Nov 2017, 15:08
Beitrag #5 von 5
Beitrag ID: #561000
Bewertung:
(1563 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Steuerung der Prozesse eines Hotfolders über eine Palette


Hallo Martin,

wenn man auf native Scriptsprachen wie Applescript oder eben VBS ausweicht wäre die Einrichtung eines Hotfolders vielleicht einfacher¿!
Lieben Gruß

Hans-Gerd Claßen
als Antwort auf: [#560628] Top
 
X