[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt per Skript eine Skriptdate im ESTK laden - Windows

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

per Skript eine Skriptdate im ESTK laden - Windows

WernerPerplies
Beiträge gesamt: 2760

25. Jul 2013, 17:17
Beitrag # 1 von 20
Bewertung:
(5451 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi,

eigentlich eine simple Sache:

Ich möchte eine Skriptdatei per Skript in den Editor des ESTK laden ohne das Skript auszuführen.

Wenn ich die Datei über File().excute() aufrufe, lädt das Skript die Datei und führt sie dann aus.

Wenn ich den gleichen Versuch mit einer Skriptdatei aus einem, für InDesign nicht vertrauenswürdigen Verzeichnis mache, wird das Skript geladen, dann wird eine Warnmeldung ausgegeben.

Wenn ich aber in Visual Studio (ich mache die Versionsverwaltung für die InDesign-Skriptentwicklung über Projekte in Visual Studio) den ".jsx"-Dateien das ESTK als Editor zuweise, funktioniert das Laden des Skriptes wie gewünscht.

Wer kennt den Trick?

Vielen Dank schon mal für eine gute Idee.
X

per Skript eine Skriptdate im ESTK laden - Windows

Uwe Laubender
Beiträge gesamt: 5316

25. Jul 2013, 17:38
Beitrag # 2 von 20
Beitrag ID: #515512
Bewertung:
(5433 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, Werner!

Da könnte etwas für Dich dabei sein:

Bob Stucky
http://forums.adobe.com/message/4839733#4839733

und weiter unten im gleichen Thread:

Marc Autret
http://forums.adobe.com/message/4842992#4842992


als Antwort auf: [#515511]

per Skript eine Skriptdate im ESTK laden - Windows

WernerPerplies
Beiträge gesamt: 2760

25. Jul 2013, 17:53
Beitrag # 3 von 20
Beitrag ID: #515513
Bewertung:
(5420 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,

danke, stimmt, da könnte ich fündig werden.

Der Hintergrund für mein Anliegen:

Ich habe mir ein Skript gebaut, das eine Startdatei automatisch mit Headerinformationen (Skriptname, targetengine, Version, Erstellungsdatum, Lizenzinformationen) versieht, dann rekursiv alle Include-Dateien einfügt, dabei auch diese Dateien auf Änderungen überprüft und ggf. die Header korrigiert.

Daraus entsteht eine Gesamtdatei, die dann, hier hänge ich, in's Binärformat exportiert werden soll und anschließend automatisch in ein Aufrufskript einfügt wird, das Installationsroutinen und den eigentlichen Aufruf enthält.

Der letzte Teil funktioniert auch.

Ich hoffe also mit den von Dir genannten Infos auch den Rest erledigen zu können.


als Antwort auf: [#515512]

per Skript eine Skriptdate im ESTK laden - Windows

WernerPerplies
Beiträge gesamt: 2760

25. Jul 2013, 18:10
Beitrag # 4 von 20
Beitrag ID: #515514
Bewertung:
(5410 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,

Bob löst das Problem innerhalb des ESTK, ich brauche ja den externen Aufruf.

Des Rätsels Lösung liegt wohl im Verzeichnis
C:\Program Files\Adobe\Adobe Utilities\ExtendScript Toolkit 2\Required

Ich bin ziemlich sichern, dass ich da fündig werde.

Vielen Dank für die Links.


als Antwort auf: [#515512]

per Skript eine Skriptdate im ESTK laden - Windows

Uwe Laubender
Beiträge gesamt: 5316

25. Jul 2013, 19:04
Beitrag # 5 von 20
Beitrag ID: #515516
Bewertung:
(5388 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, Werner!

Für Mac-Anwender sieht's ein wenig anders aus.

Da muss man in die app-Package reinschauen.
Dort dann unter:

Contents/Shared Support/Required

Uwe


als Antwort auf: [#515514]

per Skript eine Skriptdate im ESTK laden - Windows

WernerPerplies
Beiträge gesamt: 2760

25. Jul 2013, 19:13
Beitrag # 6 von 20
Beitrag ID: #515517
Bewertung:
(5384 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,

danke, das habe ich gesehen.

Zwischenzeitlich habe ich auch gesehen, wie der externe Aufruf unter Windows funktioniert, aber weiß ich keine Lösung mit JavaScript.

Mit einem externen Skript dürfte sich das reine Öffnen leicht realisieren lassen, aber bisher habe ich noch keine Lösung für das Compilieren gefunden.

Aus meiner meiner momentanen Sicht wäre es am leichtesten dafür einen Compilierparameter einzuführen, wenn ihn vielleicht nicht sogar schon gibt.

Dann könnte man den gesamten Vorgang problemlos mit kleinen externen Skripten lösen.


als Antwort auf: [#515516]

per Skript eine Skriptdate im ESTK laden - Windows

Dirk Becker
Beiträge gesamt: 193

29. Jul 2013, 19:19
Beitrag # 7 von 20
Beitrag ID: #515625
Bewertung:
(5207 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Mir ist noch nicht ganz klar, wo es hakt, ich habe aber auch Bob's Paket noch nicht durchgesehen, das kannte ich auch noch nicht. Vorerst ein paar Tips:

Etwa für vollautomatische Build-Prozesse akzeptiert ESTK Befehlszeilenargumente "cmd ScriptFileName" ohne die Quoten. Auf dem Mac muss man direkt das Binary im App-Bundle ansprechen, also die Datei in Contents/MacOS.

Man kann im "SharedSupport/Required" Ordner auch einen neuen Ordner "extensions" erstellen, der ist genau für eigene Scripts gedacht. Funktioniert gut, ich habe da schon einiges rumliegen. Der SVN Client ist aber noch eine Baustelle ;-)

Die interne Ausführungsumgebung von ESTK spricht man im ESTK Editor über ein separates Target an. Leider funktioniert dort der Debugger nicht, man muss sich mit der Konsole begnügen.

Code
#target "estoolkit#dbg" 


Das jsxbin erstellt man in diesem Target über den Befehl app.compile, wie auch in 80document.jsx so circa Zeile 2450:
Code
var bin = app.compile(code,undefined,"/"); 

Das Ergebnis dann in eine binäre Datei schreiben ...


als Antwort auf: [#515517]

per Skript eine Skriptdate im ESTK laden - Windows

WernerPerplies
Beiträge gesamt: 2760

30. Jul 2013, 08:16
Beitrag # 8 von 20
Beitrag ID: #515635
Bewertung:
(5176 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Dirk,

vielen Dank fü Deinen Betrag, der mich wohl ein ganzes Stück weiterbringen wird.

Zitat ...Etwa für vollautomatische Build-Prozesse akzeptiert ESTK Befehlszeilenargumente "cmd ScriptFileName" ohne die Quoten.


Hättest Du vielleicht auch eine Kommandoliste fir mich?

Zitat Man kann im "SharedSupport/Required" Ordner auch einen neuen Ordner "extensions" erstellen, der ist genau für eigene Scripts gedacht. Funktioniert gut, ich habe da schon einiges rumliegen. Der SVN Client ist aber noch eine Baustelle ;-)

Das macht die Sache natürlich übersichtlicher, Bob packt seine Extension direkt in den Required-Ordner, der offentsichtlich in alphabetischer Reihenfolge abgearbeitet wird,
Zitat #target "estoolkit#dbg"

Na das ist doch mal eine Info,wo findet man so etwas?

Zitat var bin = app.compile(code,undefined,"/");

Ja, diese Zeile habe ich natürlich gesehen, noch eleganterwäre es wohl, wenn an die ESTK-app direkt aus dem Indesignscript aufrufen und die Methoden über ein eigenes Global-Object aufrufen könnte.

Wenn ich die Logik richtig verstanden habe, sollte so etwas möglich sein.

Ich melde mich,wenn ich mehr weiß.

Zitat Der SVN Client ist aber noch eine Baustelle ;-)

;-)Um mir diese Arbeit zu sparen,bin ich den Weg über Visual Studio und Team Foundation Server gegangen, eine bessere Lösung (nur für Windows), kenne ich icht.


als Antwort auf: [#515625]

per Skript eine Skriptdate im ESTK laden - Windows

Dirk Becker
Beiträge gesamt: 193

30. Jul 2013, 10:45
Beitrag # 9 von 20
Beitrag ID: #515639
Bewertung:
(5148 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat Hättest Du vielleicht auch eine Kommandoliste für mich?

Das Feature habe ich seit 2007 nicht mehr im Einsatz, weil meine Build-Scripts mit dem Wechsel von PowerPC und CodeWarrior auf Intel und XCode obsolet wurden. Aber soeben probiert:

Code
Dirk-MBP:~ dirk$ cat ~/Hallo.jsx  
alert("Hallo");
Dirk-MBP:~ dirk$ /Applications/Utilities/Adobe\ Utilities-CS5.localized/ExtendScript\ Toolkit\ CS5/ExtendScript\ Toolkit.app/Contents/MacOS/ExtendScript\ Toolkit -cmd ~/Hallo.jsx


ESTK startet, bringt den Alert und verabschiedet sich wieder.

#target "estoolkit#dbg"

Zitat Na das ist doch mal eine Info,wo findet man so etwas?

Indem man die richtigen Leute fragt. Früher gab es neben den öffentlichen Adobe Foren auch noch eine kleine email Liste nur zu Scripting. Inzwischen hat das Partnerprogramm (ich entwickle auch Plugins) ähnliche Bereiche.


als Antwort auf: [#515635]

per Skript eine Skriptdate im ESTK laden - Windows

WernerPerplies
Beiträge gesamt: 2760

31. Jul 2013, 13:14
Beitrag # 10 von 20
Beitrag ID: #515700
Bewertung:
(5089 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Dirk,

ich möchte mich noch einmal für Deine Hilfe bedanken, dieses Skript ist jetzt das Ergebnis meiner Experimente:
Code
#target "estoolkit#dbg"  
main();

function main()
{
try
{
var file = new File("C:/Users/Werner Perplies/Documents/!!!!!!Testordner/alert.jsx");
if (file.exists)
{
var sourceCode = readFile2String(file.fullName);
if ( sourceCode!=null)
{
var bin = app.compile(sourceCode);
writeString2File(file.fullName.replace(".jsx",".jsxbin"), bin);
}
}
}
catch (error)
{
alert(error.message);
}
}
/*string*/function readFile2String(/*string*/fileName)
{
try
{
var fileContent = null;
if (fileName == null) return null;
var file = File (fileName);
if (file==null)
{
throw new Error("Konnte das File-Objekt nicht erzeugen!");
}
if (!file.open("r"))
{
throw new Error(file.error);
}
var fileContent = file.read(file.length);
if (fileContent == null )
{
if ((fileContent.length == 0) && (file.error.length == 0))
{
file.error = "leere Datei\n "+ file.name;
throw new Error(file.error);
}
}
if (!(file.close()))
{
throw new Error(file.error);
}
return fileContent;
}
catch (error)
{
alert(error.message+"\n"+error.line);
return fileContent;
}
return fileContent;
}
/*bool*/function writeString2File(
/*string*/fileName, /*string*/string2Write, /*string*/encoding)
{
try
{
var file = File (fileName);
if (file==null)
{
throw new Error("Konnte das File-Objekt nicht erzeugen!");
}
if (encoding==null)
file.encoding = "UTF-8";
else
file.encoding = encoding;
if (!file.open("w"))
{
throw new Error(file.error);
}
if (!(file.write(string2Write)))
{
throw new Error(file.error);
}
if (!(file.close()))
{
throw new Error(file.error);
}
return true;
}
catch (error)
{
alert(error.message + "\n"+error.line);
return false;
}
return false;
}


Ein Problem gibt es noch:

Das Skript funktioniert im ESTK, bei Aufruf aus dem Skriptpanel ist die Methode app.compile() undefiniert.

Über DoScript habe ich es noch nicht getestet.


als Antwort auf: [#515639]

per Skript eine Skriptdate im ESTK laden - Windows

WernerPerplies
Beiträge gesamt: 2760

31. Jul 2013, 13:33
Beitrag # 11 von 20
Beitrag ID: #515701
Bewertung:
(5084 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Jetzt habe ich es mit DoScript probiert und es klappt leider nicht, weil mein Funktionsaufruf readFile2String) als unbekannt angemeckert wird.
Hat jemand dazu vielleicht eine Idee?


als Antwort auf: [#515700]

per Skript eine Skriptdate im ESTK laden - Windows

mx
Beiträge gesamt: 161

31. Jul 2013, 14:13
Beitrag # 12 von 20
Beitrag ID: #515703
Bewertung:
(5058 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,

und es liegt jetzt nicht vielleicht an

Zitat If a script is compiled to a .jsxbin file, the #target directive is ignored. Double-clicking a .jsxbin
file does not execute the script in the application that the #target directive defines.


?

Viele Grüße
Jo


als Antwort auf: [#515701]

per Skript eine Skriptdate im ESTK laden - Windows

WernerPerplies
Beiträge gesamt: 2760

31. Jul 2013, 15:11
Beitrag # 13 von 20
Beitrag ID: #515707
Bewertung:
(5030 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Jo,

Zitat If a script is compiled to a .jsxbin file, the #target directive is ignored. Double-clicking a .jsxbin
file does not execute the script in the application that the #target directive defines.


Danke, das ist mir bekannt, und deswegen verwende ich für binäre Skripts ein Wrapper-Skript, das die Zuweisung der Target-Machine macht. Wie ich das mache, kannst bei Interesse zum Beispiel an meinen Skript WpsHyperlinkInspector sehen.
In diesem Wrapper-Script rufe dann mein eigentliches Skript per DoScript auf. Da funktionieren auch alle Unterfunktionen.

In diesem Fall aber ruft ein nicht kompiliertes Skript ein anderes nicht kompiliertes Skript auf.


als Antwort auf: [#515703]

per Skript eine Skriptdate im ESTK laden - Windows

Dirk Becker
Beiträge gesamt: 193

1. Aug 2013, 18:09
Beitrag # 14 von 20
Beitrag ID: #515765
Bewertung:
(4957 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
app.compile ist eine Funktion von der speziellen ESTK Engine. Das Script muss also von ESTK ausgeführt werden.

Ich verwende #target Anweisungen sonst nur, um beim Start aus ESTK direkt die richtige Applikation (InDesign oder InDesign Server) zu adressieren. Ob #target vom InDesign Script-Panel auch zur Adressierung der anderen Applikationen der Suite Cloud funktionieren sollte weiss ich nicht und habe ich noch nie gebraucht. Da es wohl wie von Werner beobachtet zumindest für das spezielle Target nicht funktioniert, bleibt noch immer der Aufruf über BridgeTalk - eine Wissenschaft für sich - oder über die Befehlszeile.

Btw, irgendwo gab es auch einen Bericht, dass man den jsxbin Code auch über eval() in ein jsx einbetten kann, das spart dann ggf. eine zweite Script-Datei.


als Antwort auf: [#515707]

per Skript eine Skriptdate im ESTK laden - Windows

WernerPerplies
Beiträge gesamt: 2760

1. Aug 2013, 18:20
Beitrag # 15 von 20
Beitrag ID: #515766
Bewertung:
(4955 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Dirk,

d. h.. wenn ich das richtig verstehe:

Zurück auf Los!.

Trotzdem danke.

Zitat Btw, irgendwo gab es auch einen Bericht, dass man den jsxbin Code auch über eval() in ein jsx einbetten kann, das spart dann ggf. eine zweite Script-Datei.


Ich bette den Code auch in eine jsx-Datei ein, verwende aber DoScript.

Ich habe also auch nur eine Datei.

Ergänzung:
Zitat Aufruf über BridgeTalk - eine Wissenschaft für sich

Kennt sich hier jemand damit aus?


als Antwort auf: [#515765]
(Dieser Beitrag wurde von WernerPerplies am 1. Aug 2013, 18:26 geändert)
X