Aktuelle SOAP/PubServer-Verbindung und Ausführen von bereitgestellten Diensten.
Aktuelle SOAP/PubServer-Verbindung und Ausführen von bereitgestellten Diensten.
Die Aufrufe benötigen die Installation des Plugins CoreService oder CoreService[Internet]. Informationen zur Konfiguration der Daten-Verbindung finden Sie hier.
Die Verbindungen zu den Diensten werden mit Hilfe von SOAP gemacht. Dazu wird die gSOAP-Implementierung von Robert A. van Engelen verwendet. Ein (englisches) Benutzerhandbuch inklusive aller Fehlercodes dazu finden Sie hier.
[ab v4.0.5 R17778] Der Datenaustausch zwischen Plugins und SOAP-Service kann mitgeschnitten werden. Folgende Daten werden auf ihrem Desktop geschrieben:
Bitte beachten Sie : Die Logdateien können sehr groß werden! Das Mitschreiben der SOAP-Daten sollte deshalb nur im Testbetrieb und mit kleineren Auftragsmengen gemacht werden! Zum Mitschreiben der SOAP-Daten des Aufbaus mehrerer hundert Dokumente ist es definitiv nicht geeignet!
So aktivieren Sie das Mitschreiben:
WERK II bietet den SOAP-Log als Feature an. Mit Hilfe dieser Logs wollen wir Ihnen helfen, SOAP-Fehler Ihres Systems zu finden. WERK II und Partner sehen sich aber nicht in der Pflicht, diese Daten auszuwerten!
static SOAP soap::connection()
Hole die aktuelle SOAP-PubServer-Verbindung. Die Verbindung darf niemals über einen Skriptbefehl gelöscht werden.
Name | Typ | Default | Beschreibung |
Return | SOAP | Aktuelle SOAP/PubServer-Verbindung von InDesign® oder 0 |
static SOAP soap::login(
char* service = 0,
char* user = 0,
char* passwd = 0,
char* lang = 0,
char* mandant = 0)
Stelle eine Verbindung zu einem Soap-Service her. Ist eine der Angaben gleich 0 (nicht ""!), wird der Logindialog geöffnet. Das Ergebnis sollte auf jeden Fall auf 0 geprüft werden. Der erhaltene Zeiger muss mit soap::logout wieder gelöscht werden.
Name | Typ | Default | Beschreibung |
Return | SOAP | Bei aktiver Verbindung die aktuelle SOAP/PubServer-Verbindung, sonst 0. Der Zeiger muss mit soap::logout wieder gelöscht werden! | |
service | String oder char* | 0 | Servicename |
user | String oder char* | 0 | Benutzername |
passwd | String oder char* | 0 | Passwort |
lan | String oder char* | 0 | Sprache |
mandant | String oder char* | 0 | Mandant |
Nach dem Herstellen einer SOAP/PubServer-Verbindung werden die aktuellen XML-Daten hochgeladen zum Service.
int main () { SOAP soap = soap::login ( "http://212.100.45.45:8080/cats-comet/cats/comet", "admin", 0, 0, "Erich Mühsam"); char xmlpath[4096]; int res;
if (!soap) return 0; xmlquery::app_path (xmlpath);
res = soap::upload_metadata (soap, xmlpath); if (res) showmessage ( "Uploading metadata failed : %s.", serror (res));
soap::upload_pageitems (soap, xmlpath); if (res) showmessage ( "Uploading pageitems failed : %s.", serror (res));
soap::logout (soap);
return 0; }
static int soap::logout(SOAP dbc)
Trennen der Verbindung zu einem SOAP/PubServer-Dienst.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
dbc | SOAP | - | Zeiger auf eine mit login erstellte Internetverbindung. Der Befehl darf nicht die Internetverbindung von InDesign® (soap::connection) lösen! |
static char* soap::server(SOAP dbc, char* str)
Ermittle den Servernamen einer SOAP/PubServer-Verbindung.
Name | Typ | Default | Beschreibung |
Return | String oder char* (Abhängig von Parameter str) | Name des Servers, den die angegebene SOAP/PubServer-Verbindung verwendet. Der Rückgabewert ist identisch mit dem Aufrufparameter str. | |
dbc | SOAP | - | SOAP/PubServer-Verbindung |
str | String oder char* | - | Reservierter Speicher für den Servernamen. Bei Verwendung von char* sollte der Speicher mindestens 256 Byte groß sein. |
char s[256];
showmessage ("%s", soap::server (soap::connection (), s));
static char* soap::user(SOAP dbc, char* str)
Ermittle den Benutzernamen, mit dem eine SOAP/PubServer-Verbindung hergestellt wurde.
Name | Typ | Default | Beschreibung |
Return | String oder char* (Abhängig von Parameter str) | Benutzername für die angegebene SOAP/PubServer-Verbindung. Der Rückgabewert ist identisch mit dem Aufrufparameter str. | |
dbc | SOAP | - | SOAP/PubServer-Verbindung |
str | String oder char* | - | Reservierter Speicher für den Benutzernamen. Bei Verwendung von char* sollte der Speicher mindestens 256 Byte groß sein. |
char s[256];
showmessage ("%s", soap::user (soap::connection (), s));
static char* soap::language(SOAP dbc, char* str)
Name | Typ | Default | Beschreibung |
Return | String oder char* (Abhängig von Parameter str) | Datenbankname/Schema für die angegebene SOAP/PubServer-Verbindung. Der Rückgabewert ist identisch mit dem Aufrufparameter str. | |
dbc | SOAP | - | Gültige SOAP/PubServer-Verbindung |
str | String oder char* | - | Reservierter Speicher für den Servernamen. Bei Verwendung von char* sollte der Speicher mindestens 256 Byte groß sein. |
char s[256];
showmessage ("%s", soap::language (soap::connection (), s));
static char* soap::client(SOAP dbc, char* str)
Ermittle den Namen der Datenbank zu der eine Verbindung hergestellt wurde.
Name | Typ | Default | Beschreibung |
Return | String oder char* (Abhängig von Parameter stylePath) | Mandant für die angegebene SOAP/PubServer-Verbindung. Der Rückgabewert ist identisch mit dem Aufrufparameter str. | |
dbc | SOAP | - | Gültige SOAP/PubServer-Verbindung |
str | String oder char* | - | Reservierter Speicher für den Mandatennamen. Bei Verwendung von char* sollte der Speicher mindestens 256 Byte groß sein. |
char s[256];
showmessage ("%s", soap::client (soap::connection (), s));
static int soap::charset(SOAP dbc)
Zeichensatz der Datenverbindung.
Name | Typ | Default | Beschreibung |
Return | int | -1 : Fehler 0 : Systemzeichensatz 1 : UTF-8 2 : Unicode 16 Bit 3 : Unicode 32 Bit |
|
dbc | SOAP | - | Datenbankverbindung |
static int soap::upload(
SOAP soap,
char* data,
int datalen,
char* id,
char* fname = "",
char* mimetype = "",
char* description = "")
Sende eine Datei oder einen Text an den SOAP/PubServer-Dienst
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
soap | SOAP | - | Gültige SOAP/PubServer-Verbindung |
data | String oder char* | - | Daten die hochgeladen werden sollen. Die Daten enthalten entweder einen Text oder einen vollständigen Dateipfad. |
datalen | int | - | Länge der Daten -1 : data ist ein Dateipfad 0 : data enthält Textdaten deren Länge automatisch berechnet werden soll sonst : data enthält Textdaten dieser Länge |
id | String oder char* | - | Bezeichner unter dem die Daten abgelegt werden sollen. Bezeichner müssen eindeutig sein. Existiert ein Upload mit der angegebenen id, werden dessen Daten geändert. Die id wird in download verwendet, um die Daten wieder zu holen. |
fname | String oder char* | "" | Datename für den SOAP/PubServer-Dienst. Bei Dateien wird dieser Parameter ignoriert, bei Daten muss er einen Wert haben. |
mimetype | String oder char* | "" | Typbeschreibung der Daten z.B. text/plain. Ist die Angabe leer, werden Textdaten mit dem Mimetype text/plain abgelegt. Bei Dateien wird versucht, den Mimetype aus der Dateiendung oder aus dem Dateityp (nur Macintosh) zu ermitteln. |
description | String oder char* | "" | beliebige Beschreibung der Daten |
Lade die Datei colors.html des aktuellen XML-Datenordners auf den Server. Die Datei wird mit der Id colors.xml abgelegt.
SOAP gSoap = soap::connection ();
int doUpload (char * path, char * name) { char src[4096]; int err;
strcpy (src, path); strcat (src, "/"); strcat (src, name);
err = soap::upload (gSoap, src, -1, name); return err; }
int main () { char xmlpath[4069];
xmlquery::app_path (xmlpath); gSoap = soap::connection (); if (!gSoap) { showmessage ("Keine Verbindung zum SOAP/PubServer-Dienst"); return 0; }
doUpload (xmlpath, "colors.xml"); }
Speichere einen Text auf dem Server ab. Der Unterschied zum obigen Beispiel ist, dass soap::upload im dritten Parameter einen Wert >= 0 hat.
SOAP gSoap = soap::connection ();
int doUpload (char * id, char * content) { int err;
err = soap::upload (gSoap, content, 0, id, id); return err; }
int main () { char xmlpath[4069];
xmlquery::app_path (xmlpath);
gSoap = soap::connection (); if (!gSoap) { showmessage ("Keine Verbindung zum SOAP/PubServer-Dienst"); return 0; }
doUpload ("test_1.txt", "Das ist eine Testtext.");
return 0; }
static char* soap::download(
SOAP soap,
char* id,
int* len,
int* si_string)
Hole Daten einer SOAP/PubServer-Verbindung. Die Daten werden über die id, unter der sie mit upload eingebucht wurden, identifiziert. Der Aufruf
reserviert automatisch den für das Ergebnis nötigen Speicherplatz. Dieser Speicherplatz muss mit release wieder gelöscht werden.
#include "internal/types.h"
:
data_ptr = soap::download (gSoap, id, &result_len, &is_string);
release (data_ptr);
Name | Typ | Default | Beschreibung |
Return | char* | Zeiger auf die Daten. Das Ergebnis muß mit release wieder gelöscht werden. | |
soap | SOAP | - | Datenverbindung zum Publikationsserver |
id | String oder char* | - | Datenschlüssel unter dem die Daten bei upload abgelegt wurden. |
len | int* | - | Rückgabewert : Länge der Daten in Bytes. |
is_string | int* | - | Rückgabewert : Haben wir einen String oder Binärdaten erhalten? 0 : Binärdaten. Binärdaten dürfen nicht als char*-Strings, z.B. in showmessage verwendet werden. 1 : char*-String. Die abschließende 0 ist bereits angefügt. |
Hole den oben abgelegten Text wieder vom Server. Vergessen Sie nicht, den abgeholten Inhalt zu testen, ob er ein String ist. Und vergessen Sie nicht, den abgeholten Inhalt mit release wieder zu löschen.
#include "internal/types.h"
SOAP gSoap = soap::connection ();
int doDownload (char * id, char ** content) { char * result; int result_len; int is_string;
*content = 0; result = soap::download (gSoap, id, &result_len, &is_string); if (result) { if (is_string) *content = result; else release (result); }
return 1; }
int main () { char * string_content;
gSoap = soap::connection (); if (!gSoap) { showmessage ("No connection to server."); return 0; }
doDownload ("test_1.txt", &string_content); if (!string_content) { showmessage ("No data found"); return 0; }
showmessage ("<%s>", string_content); release (string_content);
return 0; }
static int soap::download_config(
char* folder = 0,
int showFolder = 0,
int showError = 0)
Download aller Konfigarationsdateien der aktuellen SOAP/PubServer-Verbindung in einen XML-Offline Ordner.
Für den Download von SOAP/PubServer-Konfigurationen ist eine priint:comet Developer-Lizenz erforderlich.
Für den Export ist eine aktive SOAP/PubServer-Verbindung nötig! In comet_pdf und Illustrator ist der Befehl verfügbar, liefert aber immer den Fehler -1199.
[seit v4.2 R33233] Die Funktion prüft automatisch alle geladen Aktionen und lädt rekursiv auch alle dort verwendeten Includes der Typen [soap], [<soap>], [.soap_] und [pubserver] in den Unterordner scripts/soap herunter. Die Includes in den Skripten werden entsprechend angepasst.
#include "[soap]/actions/0.crpt" wird zu:
#include "[xml]/scripts/soap/actions/0.crpt"
Achtung I : Einige Installationen verwenden das styleID-Attribut der Platzhalterdefinitionen abweichend vom Standard. Eigentlich wird dieses Attribut wie folgt verwendet:
Achtung II :Includes mit der Endung .c werden zwar ebenfalls wie oben beschrieben importiert. Diese Skripte enthalten aber in der Regel cScript-Code für den Aufruf von Java Methoden eines PubServer Java-Plugins direkt aus diesem Skript heraus. Das ist in XML-Offline natürlich nicht ausführbar!
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode 1268 : Kein priint:comet Developer Lizenz |
|
path | String oder char* | 0 | Zielordner für den Datenexport. 0 oder "" : Der Zielordner wird per Ordnerdialog erfragt. Sonst : Gültiger und vollständiger Pfad des Zielordners. Existiert der Ordner nicht, wird er automatisch angelegt. |
showFolder | int | 0 | Soll der Zielordner nach dem Export automatisch im Finder/Windows Explorer gezeigt werden? 0 : Nein 1 : Ja |
showError | int | 0 | Soll bei einem Exportfehler automatisch eine Fehlermeldung gezeigt werden? 0 : Nein 1 : Ja |
static int soap::download_tofile(
SOAP soap,
char* id,
char* path,
char* name = 0,
char* type = 0,
char* creator = 0)
Hole Daten einer SOAP/PubServer-Verbindung. Die Daten werden über die id, unter der sie mit upload eingebucht wurden, identifiziert und als Datei abgelegt.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
soap | SOAP | - | Gültige SOAP/PubServer-Verbindung |
id | String oder char* | - | Datenschlüssel unter dem die Daten bei upload abgelegt wurden. |
path | String oder char* | - | Zielpfad für die Datei. Existiert der Ordner nicht, wird er automatisch angelegt. |
name | String oder char* | 0 | Name der Datei. Fehlt die Angabe, wird der im SOAP/PubServer-Dienst (id) abgelegte Datename verwendet. |
type | String oder char* | 0 | Dateityp (Macintosh). Wird ein String angegeben, muss er genau 4 Zeichen lang sein. Fehlen die Angaben für Typ und Creator, werden sie aus dem Namensanhang der Datei ermittelt. |
creator | String oder char* | 0 | Datei-Creator (Macintosh). Wird ein String angegeben, muss er genau 4 Zeichen lang sein.Fehlen die Angaben für Typ und Creator, werden sie aus dem Namensanhang der Datei ermittelt. |
Hole die unter der Id colors.xml abgelegte Datei vom Server
SOAP gSoap = soap::connection ();
int doDownload (char * id, char * path) { int err;
err = soap::download_tofile (gSoap, id, path); return err; }
int main () { gSoap = soap::connection (); if (!gSoap) { showmessage ("Keine Verbindung zum SOAP/PubServer-Dienst"); return 0; }
doDownload ("colors.xml", "/Users/paul/Desktop/aaaa/bbb");
return 0; }
static int soap::upload_metadata(SOAP soap, char* path)
Ablage aller für die WERK II Plugins nötigen Beschreibungsdaten für Platzhalter, Skripte, ... .
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
soap | SOAP | - | Gültige SOAP/PubServer-Verbindung |
path | String oder char* | - | Pfad der Beschreibungsdaten |
Das Beispiel lädt alle nötigen Dateien des aktuellen Datenordners auf den Server hoch. Template-Daten (pageitems) werden nicht abgelegt (siehe dazu upload_pageitems).
#include "internal/types.h"
SOAP gSoap = soap::connection ();
int main () { char xmlpath [4096]; int res;
gSoap = soap::connection (); if (!gSoap) { showmessage ("Keine Verbindung zum SOAP/PubServer-Dienst"); return 0; }
xmlquery::app_path (xmlpath); res = soap::upload_metadata (gSoap, xmlpath); if (res) showmessage (serror (res));
return 0; }
static int soap::upload_pageitems(SOAP soap, char* path)
Ablage aller Templates auf dem Server.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
soap | SOAP | - | Gültige SOAP/PubServer-Verbindung |
path | String oder char* | - | Pfad der Beschreibungsdaten |
Das Beispiel lädt alle Templates des aktuellen Datenordners auf den Server hoch.
#include "internal/types.h"
SOAP gSoap = soap::connection ();
int main () { char xmlpath [4096]; int res;
gSoap = soap::connection (); if (!gSoap) { showmessage ("Keine Verbindung zum SOAP/PubServer-Dienst"); return 0; }
xmlquery::app_path (xmlpath); res = soap::upload_pageitems (gSoap, xmlpath); if (res) showmessage (serror (res));
return 0; }
static int soap::upload_folder(
SOAP soap,
char* path,
char* idbase)
Alle Dateien des angegebenen Ordners und aller seiner Unterordner werden auf den Server geladen.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
soap | SOAP | - | Gültige SOAP/PubServer-Verbindung |
basepath | String oder char* | - | Vollständiger Systempfad auf einen Ordner |
idbase | String oder char* | "" | Basis für die Id der SOAP-Einträge. Ist der String nicht leer, wird automatisch ein "/" angefügt. |
static Query soap::call(SOAP soap, char* method)
Erzeuge einen neuen Transaktionsquery für Aufrufe der generischen SOAP Operation "call".
Der Aufruf von soap::call entspricht einem Aufruf von sql::query und anschließendem query::send (qu, "call Methodenname"); Weitere Hinweise und Beispiele siehe unter soap::getlist.
Sind Sie nicht mit einem SOAP- bzw. PubServer verbunden, entspricht der Aufruf von soap::call einem sql::query.
Der Aufruf hat genau eine Spalte von Typ char* als Ergebnis.
Name | Typ | Default | Beschreibung |
Return | Query | Ein neuer Query Ist dbc leer, gibt der Aufruf 0 zurück. Sie sollten den erhaltenen Query in jedem Fall auf 0 testen. | |
soap | SOAP | - | Gültige SOAP/PubServer-Verbindung |
method | String oder char* | - | Methode/SQL-Anweisung, die ausgeführt werden soll |
siehe getlist
Siehe soap::getlist
static Query soap::getlist(SOAP soap, char* method)
Erzeuge einen neuen Transaktionsquery für Aufrufe der generischen SOAP Operation "getList".
Der Aufruf von soap::getlist entspricht einem Aufruf von sql::query und anschließendem query::send (qu, "getlist Methodenname");
Bei anderen als SOAP Verbindungen entspricht der Aufruf von soap::call sql::query.
Beispiel siehe unten, generell gilt:
Die Methode gibt exakt die zum Laden der Produktrecherche nötigen Spalten zurück, mehr dazu siehe hier.
Name | Typ | Default | Beschreibung |
Return | Query | Ein neuer Query Ist soap leer, gibt der Aufruf 0 zurück. Sie sollten den erhaltenen Query in jedem Fall auf 0 testen. | |
soap | SOAP | - | Gültige SOAP/PubServer-Verbindung |
method | String oder char* | - | Methode, die ausgeführt werden soll |
Beispiel 1: von soap::call und soap::getlist bei SOAP als SQL Proxy
Query qu;
// a) qu = sql::query (); query::send (qu, "DELETE FROM actions WHERE id = ?");
// ... entspricht qu = soap::call ("sql.dml"); query::send (qu, "DELETE FROM actions WHERE id = ?"); // ... oder qu = sql::query (); query::send ("call sql.dml DELETE FROM actions WHERE id = ?");
// (Entsprechend gilt dies für Statements, die mit UPDATE, INSERT, COMMIT, // EXECUTE,DROP oder ALTER beginnen
// b) qu = sql::query (); query::send (qu, "SELECT COUNT(id) FROM actions");
// ... entspricht qu = soap::getlist ("sql"); query::send ("SELECT COUNT (id) FROM actions"); // ... oder qu = sql::query (); query::send ("getlist sql SELECT COUNT (id) FROM actions");
Beispiel 2: soap::call und soap::getlist für generische Methodenaufrufe
// a) qu = sql::query (); query::send ("call MyMethod some arguments"); // ... entspricht qu = soap::call ("MyMethod"); query::send (qu, "some arguments");
// b) qu = sql::query (); query::send ("getlist MyMethod some arguments"); // läßt sich auch so notieren: qu = soap::getlist ("MyMethod"); query::send (qu, "some arguments");
Beispiel 3: Aufruf weiterer SOAP Operationen
// Aufruf von getProductList qu = sql::query (); query::send ("getProductList i = ? AND j = ? etc.");
// Sinngemäß funktioniert das auch für die Operationen // getSubProductList, getElementList, autoCometGetNextJob, // autocometSetStart, autocometSetDone, autocometSetStatus und // autocometGetNextHotfolder // Die Ausgabevariablen müssen jeweils entsprechend der Service-Spezifikation // gebunden werden.
static int soap::setlanguage(SOAP soap, char* language)
Setze die Verbindungssprache.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
soap | SOAP | - | Gültige SOAP/PubServer-Verbindung |
language | String oder char* | - | neue Sprache |
Das Beispiel setzt die Verbindungssprache
#include "internal/types.h"
SOAP gSoap = soap::connection ();
int main () { int res;
gSoap = soap::connection (); if (!gSoap) { showmessage ("Keine Verbindung zum SOAP/PubServer-Dienst"); return 0; } res = soap::setlanguage (gSoap, "enEN");
return res; }
static char* soap::getmessage(SOAP soap, int resultCode)
Ermittle die Beschreibung eines Fehler / Resultcodes.
Name | Typ | Default | Beschreibung |
Return | char* | Zeiger auf Ergebnisstring oder 0, wenn keine Beschreibung vorliegt.
Der Rückgabewert darf nicht verändert werden und wird bei folgenden Aufrufen der Funktion überschrieben. Hier finden Sie Informationen zu readonly-Rückgaben von Funktionen. |
|
soap | SOAP | - | Gültige SOAP/PubServer-Verbindung |
resultcode | int | - | Fehler- oder Resultcode |
Zeige die Beschreibung des Fehlercode 17
#include "internal/types.h"
SOAP gSoap = soap::connection ();
int main () { int res = 0; char* msg;
gSoap = soap::connection (); if (!gSoap) { showmessage ("Keine Verbindung zum SOAP/PubServer-Dienst"); return 0; }
msg = soap::getmessage (gSoap, 17); if (msg != 0) showmessage ("Beschreibung fü Resultcode 17: '%s'", msg);
return res; }
Alphabetic index HTML hierarchy of classes or Java