Die ClassID der Palette und ihrer Objekte ist 3.
Externe Objekte einer prrint:comet-Datenverbindung werden durch sogenannt Comet-IDs unterschieden. Comet-IDs bestehen jeweils aus drei Zahlen und einem String. Die erste Zahl der Comet-ID muß dabei größer 0 sein, die beiden anderen Zahlen müssen ≥ 0 sein:
Comet-IDs sind nur dann gleich, wenn alle drei Zahlen und der String gleich sind. Um Fehler zu vermeiden, muss sichergestellt sein, dass die Comet-IDs im verwendeten Kontext eindeutig sind und dass für die ersten drei Zahlenfelder tatsächlich ganze Zahlen verwendet werden. Der Vergleich der StringIDs erfolgt case sensitive.
Comet-IDs werden in vielfältigen Zusammenhängen verwendet. Die mit Abstand häufigste Verwendung ist aber als Produkt-ID der Platzhalter : Beim Verknüpfen eines Dokument-Platzhalters mit einem Produkt wird die Comet-ID des Produktes vollständig und unverändert in den Dokument-Platzhalter übernommen. Über diese Comet-ID kann das Produkt später identifiziert und mit Hilfe der Laden-Aktion des Platzhalters aktualisiert werden. Die aktuell gesetzte Comet-ID eines Platzhalters wird in der Palette Platzhalterwerte angezeigt. Wird der Platzhalter im Dokument ausgewählt und das Produkt ist in der Palette sichtbar, wird der Listeneintrag in der Palette ausgewählt.
Weitere Verwendung finden die Comet-IDs in Dokumenten und Publikatione und Comet-Hyperlinks. Beschreibungen zum Lesen und Setzen dieser Comet-IDs finden Sie in den Dokumentationen der jeweiligen Funktionen und Objekte.
In Plazthalterskripten und Skripten des Tabellenmodules kann der Inhalt aktuellen Comet-ID wie folgt erfragt werden:
cScript Umgebungsvariable | Anweisungs-<Tag> | |
ID | gRecordID | <ID> |
ID2 | gRecordID2 | <ID2> |
ID3 | gRecordID3 | <ID3> |
StringID | gRecordStringID | <STRINGID> |
Beachten Sie bitte auch die folgenden Hinweise zu StringIDs im Tabellenmodul und in Verbindungen zu PublikationsServern!
Aus den StringIDs können über das Tabellenmodul sogenannte Multi-StringIDs gemacht werden. Dabei werden bis zu drei einzelne StringID mit |--| getrennt aneinandergefügt. Skripte dürfen keine Multi-StringIDs in Platzhalter setzen.
In Plazthalterskripten und Skripten des Tabellenmoduls können die Inhalte der drei Teile einer Multi-StringID mit den globalen Variablen gRecordStringID1, gRecordStringID2 und gRecordStringID3 erfragt werden. In direkten Abfragen von Platzhaltern und des Tabellenmoduls kann mit den Tags <STRING1>, <STRING2>, <STRING3> auf die Inhalte der drei Teile einer Multi-StringID zugegriffen werden.
PublikationsServer verwenden in der Regel ausschließlich die StringIDs zur Identifizierung der Produkte und setzen die drei Zahlen der Comet-IDs immer auf die Werte
1, 0, 0, "stringID"
Die Formatierung der StringIDs folgt dabei einheitlichen Regeln. Eine vollständige Beschreibung und wie auf die einzelnen Teile einer PubServer-StringID zugegriffen werden kann, finden Sie hier.
Produkte können am Namensteil in die Palette Produkte des Dokumentes gezogen werden. Um Produkte im InDesign®-Dokument einzufügen, werden sie an ihren Icon gezogen.Ziel Dokument : Ziehen Sie die Produkte an ihrem Icon
Die folgende Tabelle beschreibt alle Aktionen und Tastenkombinationen, die beim Drag And Drop von Produkten in Dokumente unterstützt werden. Mit gehaltener H-Taste wird die folgende Tabelle auch direkt beim Drag And Drop gezeigt. Hilfe zum Drag And Drop von Produkten finden Sie bei ausgewählten Pfeil-Werkzeug außerdem in der Palette Werkzeughinweise .
Ziel | Mac | Windows | Beschreibung | |
H | Zeige diese Hilfe | |||
Unverknüpfter Text, Textende Normal | Normal | ![]() |
Einfügen des Produkttemplates in den Textfluß | |
In der Platzhalter-Palette ist mind. ein Eintrag mit einem Auge markiert. | ![]() |
Einfügen, verknüpfen und laden des markierten Platzhalters für jedes Produkt. Der Inhalt von Suchfeld 2 wird als Trenner verwendet (/r = Absatzende, /n = Softreturn, /t = Tab) | ||
Textplatzhalter | ![]() |
Verknüpfen und Laden des Platzhalters mit dem ersten Produkt | ||
Bildrahmen | ![]() |
Verknüpfen und Laden des Zielrahmens mit dem ersten Produkt | ||
SHIFT über Textrahmen | ![]() |
Alle Platzhalter des Rahmen neu verknüpfen und laden. Ist der Rahmen Teil einer InDesign®-Gruppe, werden auch alle anderen Rahmen der Gruppe bearbeitet. | ||
Freie Fläche | ALT | Y | ![]() |
Produkttemplate einfügen |
+ CMD | + A | ![]() |
Danach Seite reorganisieren | |
+ CMD + SHIFT | + A + SHIFT | ![]() |
Produkttemplate links oben am Seitenelement platzieren | |
+ Leerzeichen | Verwende das Folgetemplate | |||
Tabellenzellen | CTRL | STRG | ![]() |
Zeilen neu verknüpfen und laden ab Drop-Spalte. Überzählige Produkte werden ignoriert. |
+ CMD | + A | ![]() |
Zeilen neu verknüpfen und laden ab Drop-Spalte. Für überzählige Produkte werden neue Zeilen angelegt. | |
+ ALT | + Y | ![]() |
Spalten neu verknüpfen und laden ab Drop-Zeile. Überzählige Produkte werden ignoriert. | |
+ ALT + CMD | + Y + A | ![]() |
Spalten neu verknüpfen und laden ab Drop-Zeile. Für überzählige Produkte werden neue Spalten angelegt. | |
ESC | Abbruch |
Die folgende Tabelle beschreibt die Panelstatements, mit denen das Laden der Produkte konfiguriert werden kann:
ClassID | ID | Beschreibung | Bemerkungen |
3 | 7 | Suche der Listeneinträge | Das Statement wird nur noch in Versionen vor 1.1.9 (ohne Treeview) verwendet. Neuere Versionen benutzen das Statement 55. |
8 | Laden der einzelnen Einträge | ||
3 | 55 | Laden der Einträge der obersten Ebene | Der Befehl lädt IDs und Inhalte der Produkte. Der Befehl liefert darüberhinaus die ID des Panelstatements, mit dem die Untereinträge geladen werden. In der Anweisung dürfen Angaben zur Beschriftung der Suchfelder stehen. |
3 | >= 10000 | Laden der Untereinträge | Befehl zum Laden von Untereinträgen |
18 | 95 | Lade die ID des Skriptes, das bei Doppelklick eines Produktes ausgeführt werden soll. |
Zum Laden der Produkte im Treeview wird folgender Mechanismus verwendet:
Der eigentlich Lade-Befehl ist abhängig von der Art der Datenverbindung. ODBC-Verbindungen erwarten eine SQL-SELECT-Anweisung, XML-Datenpools eine XML-SELECT-Anweisung, SOAP-Verbindungen erwarten eine getProductList-Anweisung.
Nur Panelstatement 55 (oberste) Ebene wertet die Sucheingaben aus, deshalb hat nur dieses Statement Eingabewerte, die im Befehl mit ? markiert werden müssen. Folgende Eingaben werden erwartet.
Parameter | Typ | Beschreibung | Bemerkungen |
1 | int | Einschränkung der ID auf ID > 0 | wird vom Plugin immer durch 0 ersetzt |
2 | string | Inhalt des ersten Suchfeldes mit angefügtem % | nur Standardsuche. Zu weiteren Suchkriterien siehe hier. |
3 | Inhalt des zweiten Suchfeldes mit angefügtem % | ||
4 | int | rownum < | wird vom Plugin immer durch 10.000 ersetzt |
Alle Anweisungen verwenden das gleiche Schema von Rückgabewerten.
Spalte
normal/ SOAP getList |
Parameter | Typ | Beschreibung | Bemerkungen | |
1 | 1 | ID | int | Eindeutige ID des Datensatzes. | Über die ID des Datensatzes wird der Status (+, x, ...) des Produkte in der Palette gesetzt. |
2 | 2 | ID2 | |||
3 | 3 | ID3 | |||
4 | - | StringID | char* | StringID des Datensatzes | NICHT BEI SOAP (Benutzen Sie bei SOAP die Spalte 17 für die StringID)
Damit die StringID verwendet werden kann, müssen die folgenden zwei Bedinungen erfüllt sein :
|
5 | 4 | classID | int | interne ClassID des Objektes | wird zur Zeit nicht ausgewertet |
6 | 5 | iconID | int | Icon-ID | Eine vollständige Liste der verfügbaren Icons finden Sie hier. |
7 | 6 | 1. Spalte der Palette | string | Werte, die in der Palettenliste gezeigt werden | |
8 | 7 | 2. Spalte der Palette | |||
9 | 8 | forceDelete | int | Objektstatus |
>0 : Ist das Objekt nicht im Dokument verplant, wird es nicht in die Produktliste aufgenommen. Ist das Objekt im Dokument verplant, wird es aus der Liste gelöscht, wenn alle Verweise auf dieses Produkt aus dem Dokument entfernt sind. 0 : Normales verplanbares Produkt <0 : Das Objekt soll nicht im Dokument verplant werden. Der Link-Button ist deaktiviert und das Objekt wird beim Überprüfen der Stati mit |
10 | 9 | panelStatementID | int | >= 10000, Verweis auf ein Panelstatement der gleichen Bauart, mit dem die Untereinträge geladen können. | Ist der Wert gleich 0, kann das Objekt nicht weiter aufgeklappt werden. |
|
|||||
11 | 10 | docID | int | ID des Dokumentes | Der Parameter ist zur Zeit unbenutzt und kann mit 0 gefüllt werden. |
12 | 11 | masterpage | string | Musterseitenname in der Form Prefix-Name (z.B. "C-Doppelseite") | Muss beim Produktaufbau eine neue Seite für dieses Produkt angelegt werden, wird dazu die angegebene Musterseite verwendet. Existiert die Musterseite nicht oder ist die Angabe leer, wird die Standardseite des Aufbaus verwendet.
Die Angabe hat nur beim raster-orientierten Produktaufbau Bedeutung. Im seitentemplate-basierten Aufbau werden Musterseiten über die Seitentemplates vergeben. |
13 | 12 | Reserviert | string |
Tragen Sie hier den Wert "" ein. Seit v4.1.6 R26627 Infos1 und Infos2 der Platzhalter im Template. Die Informationen werden vor dem Laden der Platzhalter in alle Rahmen- und/oder die Textplatzhalter des Produkttemplates eingesetzt. Die Angabe erfolgt in folgendem Format: ### apply_info1 'info1' apply_info2 'info2' mit folgenden Werten:
Das folgende Beispiel setzt "aaa" in Infos1 und "bbb" in Infos2 aller Platzhalter eines Produktes: ### 3 'aaa' 3 'bbb' Die Angaben können mit Hilfe der Funktion product::set und den Schlïüsselwörtern
|
|
14 | 13 | Eigenes Icon | string | Icon-Beschreibung | "" oder Definition eines eigenen Icons für den Eintrag. Ist das Feld nicht leer, wird die Angabe iconID aus Spalte 6 (bzw. 5 bei SOAP) ignoriert. |
15 | 14 | pagetemplateID | int | Vor dem Aufbau des Produktes eine neue Seite mit dem Seitentemplate anlegen |
0 oder gültige ID eines Seitentemplates. In der Palette wird der Name des Seitentemplates durch @ getrennt hinter dem Templatenamen gezeigt: Template@Pagetemplate Verwenden Sie diese Option mit Bedacht: Durch die Angabe eines Seitentemplates wird das Produkt beim Produktaufbau automatisch auf einer neuen Seite angelegt. |
16 | 15 | Reserviert | int | Tragen Sie hier den Wert 0 ein. | |
17 | 16 | pageItemID | int | Template mit dem das Produkt eingefügt werden soll |
Templates werden seitenbezogen ermittelt: Ist das gegebene Template auf linke Seiten beschränkt hat aber eine Angabe für ein rechtsseitiges Template, wird auf rechten Seiten automatisch das rechtsseitig Template verwendet. Ist die Angabe 0 oder existiert das angegebene Template nicht, wird das Standardtemplate des Aufbaus verwendet. |
- | 17 | stringID | string | StringID des Produktes | NUR SOAP
Damit die StringID verwendet werden kann, müssen die folgenden zwei Bedinungen erfüllt sein :
|
Die Befehle unterstützen den vollständigen Satz der Panelstatement-Tags wie <user>, <now>. Eine vollständige Liste dieser Variablen finden Sie hier.
Damit beim Laden von Untereinträgen auf Werte der übergeordneten Objekte zugegriffen werden kann, wird in den Statements zum Laden dieser Objekte eine Reihe weiterer Variable unterstützt.
Name | Typ | Beschreibung | Bemerkungen |
parent.ID | int | ID des Elterndatensatzes | Mit parent.parent wird auf den Elterndatensatz des Elterndatensatzes verwiesen, usw. |
parent.ID2 | |||
parent.ID3 | |||
parent.StringID | string | ||
parent.classID | int | interne ClassID des Elterndatensatzes | |
parent.Row1 | string | Listentext des Elterndatensatzes | |
parent.Row2 | |||
parent.ForceDelete | int | Forcedelete-Wert des Elterndatensatzes |
Ausserdem können Sie auf jeder Ebene auf die aktuellen Werte in den Suchfeldern der Palette zurückgreifen. Die Abbildung zeigt die Tags, die den Suchfeldern zugeordnet sind. Ist ein Suchfeld leer, bekommt das Tag den Wert "%", sonst exakt den Inhalt des Suchfeldes (also nicht in Großbuchstaben umgewandelt).
Die Anweisungen haben für Datenbank und XML und für Haupt- und Untereinträge die selben Spalten, mit dem einzigen Unterschied, dass unter XML und für alle Untereinträge (Datenbank und XML) die Reihenfolge von ClassID und IconID vertauscht ist : ... IconID, ClassID, ...
Um Suchfelder umzubennen oder schon beim Start zu belegen verwenden Sie den hier beschriebenen Mechanismus.
Außer den fest eingebauten Icons können die Einträge der Produktrecherche auch mit eigenen Icons versehen werden. Verwenden Sie dazu die 14. (bei XML-Offline und ODBC mit hasstringids = 1) bzw. 13. Spalte (sonst) der Laden-Anweisung. Folgende Angaben werden unterstützt:
Schlüsselwort | Beschreibung | Beispiel |
ImagePath : "local_path" IconPath : "local_path" |
Vollständiger Pfad einer Bilddatei im lokalen Netz. Der Pfad darf mit einem gültigen $-Alias für Ordner beginnen. |
ImagePath : "$DESKTOP/Bilder/bbb.png" |
ImageURL : "image_url" IconURL : "image_url" |
Gültige URL zur Bilddatei |
ImageURL : "http://www.hi13.de/bbb.png" |
SOAPImage : "field_id" SOAPIcon : "field_id" |
fieldID einer Bilddatei der aktuellen SOAP/PubServer-Verbindung |
SOAPImage : "icons/bbb.png" |
Achtung : Vor und hinter dem Doppelpunkt muß in allen Fällen jeweils ein Leerzeichen stehen.
Bilder sollten immer PNGs mit Alphakanal sein. Eine entsprechende Dateiendung ist nicht erforderlich. Andere Bildformate wie GIF, JPG oder EPS können aus historischen Gründen verarbeitet werden und werden auch weiterhin unterstützt, die Qualität der Bilder ist aber deutlich schlechter als die der PNGs.
Als Pfadtrenner können Sie systemunabhängig den Slash / verwenden. Wenn Sie dennoch den Backslash \ verwenden möchten, dann denken Sie bitte daran, dass dieses Zeichen hier in der Regel zweimal maskiert werden muß (\\\\) - einmal für den Aufruf und einmal innerhalb des Pfades.
Bilder werden automatisch skaliert.
Beim Laden der Bilder wird automatisch zuerst versucht, eine zur aktuellen InDesign®-UI-Farbe passende Bildvariante zu laden. Erst wenn es keine entsprechende Bildvariante gibt, wird das Basisbild ohne Endung verwendet:
Helle UI : Bildname_L
Dunkle UI : Bildname_L
Selektiert : Bildname_R
Beachten Sie bitte :
InDesign® verwendet für selektierte Listeneinträgen in heller und dunkler UI das gleiche Icon.
Das _R-Icon wird also sowohl in der hellen als auch in der dunklen UI verwendet werden und Sie sollten mit
der Farbwahl ihrer Icons entsprechend zurückhaltend sein. Unten finden Sie ein Bild mit den von den priint:comet Plugins verwendeten Standardfarben.
Hier ein PNG mit den von den priint:comet Plugins verwendeten Standardfarben :
Icons der Produktrecherche können lokal in Ihrem InDesign® installiert werden. Verwenden Sie dazu den Skriptbefehl prefs::install_image mit dem Parameter destination gleich "products". Bitte beachten Sie aber, dass lokal installierte Icons nur im ausführenden InDesign® sichtbar sind und bei Neuinstallation der priint:comet Plugins verloren gehen!
Hier zwei Beispiele zum Laden der Produktrecherche:
Zuerst das Panelstatement 55 zum Laden der Objekte der ersten Ebene.
select ID, 1401, 1702, '' 3, -- unbenutzt 2012, -- Haus Num, Name, ForceDelete, 10000, -- Lade die Untereinträge 0, '', '', '', 0, 0, 7 -- Template 7 from WIIProducts where ID > ? and upper (num) like ? and upper (name) like ? and rownum < ?
Lade die Objekte der zweiten Ebene.
select ID, <parent.ID>, 123 ,'', 2009, -- Zahnrad ObjectType, Name, Value, ForceDelete, 10001, -- Lade die Untereinträge 0, '', '', '', 0, 0, 7 -- Template 7 from WIIElements where productID = <parent.ID> union select ID, <parent.ID>, 123, '', 2010, -- No passing ObjectType, Name, Value, ForceDelete, 10001, 0, '', '', '', 0, 0, 7 -- Template 7 from WIIElements2 where productID = <parent.ID> union select ID, <parent.ID>, 123, '', 2011, -- Herz ObjectType, Name, Value, ForceDelete, 10001, 0, '', '', '', 0, 0, 7 -- Template 7 from WIIElements3 where productID = <parent.ID>'
Lade die Objekte der dritten Ebene.
select 1, 1401, 1702, '', 2003, -- Glühlampe -1, <parent.Row1>||' '||to_char(<parent.ID>), <parent.Row2>||' '|| to_char(<parent.ID2>), 0, 0, -- Keine Untereinträge mehr 0, '', '', '', 0, 0, 7 -- Template 7 from dual union select 1, 1401, 1702, '', 2002, -- Buch mit Stift -1, <parent.Row1>||' '|| to_char(<parent.ID>), <parent.Row2>||' '|| to_char(<parent.ID2>), 0, 0, -- Keine Untereinträge mehr 0, '', '', '', 0, 0, 7 -- Template 7 from dual
Ganz analog zu den Panelstatements für Datenbanken werden auch die Anweisungen für XML gegeben. Lediglich folgenden Unterschiede sind zu beachten :
Hier ein Beispieleintrag, der StringIDs unterstützt. Die orange hinterlegten Definitionsteile geben eine StringId zurück. Der Rückgabewert von id wird automatisch in einen String umgewandelt. Damit die Untereinträge der so gefundenen Produkte geladen werden können, muss ausserdem eine Definition für das Panelstatement 10001 gemacht werden.
<panelstatement> <id>10000</id> <usage>1</usage> <domain></domain> <statement> "$MYFILE" select id, <parent.ID>, 123, id objecttype, 2009, name, value, forcedelete, 10001, docid, masterpage, grid.name, grid.elem, grid.id, grid.elemid, pageitemid node elements.element where productid = <parent.ID> </statement> <in_parameters></in_parameters> <out_parameters></out_parameters> <description>Untereinträge laden</description> <hasstringids>1</hasstringids> </panelstatement>
SOAP-Dienste müssen einen speziellen Befehl zum Laden von (Unter)produktlisten zur Verfügung stellen. Eine vollständige Beschreibung des SOAP-Dienstes finden Sie hier. Auf der Pluginseite der SOAP-Verbindung wird getProductList in vier verschiedenen Ausprägungen verwendet :
Das folgende Beispiel zeigt eine gültige SOAP-Anweisung zum Laden der Produkte der obersten Ebene (Panelstatement 55) :
<panelstatement> <id>55</id> <usage>Lade Produkte der Produktrecherche als Treeview</usage> <domain></domain> <statement> getProductList id > ? and name like ? and num LIKE ? </statement> <in_parameters></in_parameters> <out_parameters></out_parameters> <description></description> </panelstatement>Im Gegensatz zu den oben beschriebenen Anweisungen für Datenbankverbindungen und XML-Daten können Sie in der SOAP-Anweisung getProductList nicht festlegen, welches Panelstatement zum Laden der Untereinträge verwendet werden soll. Diese Einstellung wird serverseitig gemacht. Gibt der Server beispielsweise die 20000 zurück, könnte der Eintrag in Panelstatements wie folgt aussehen :
<panelstatement> <id>20000</id> <usage>Unterprodukte laden SOAP</usage> <domain></domain> <statement> getSubProductList id = <parent.ID> </statement> <in_parameters></in_parameters> <out_parameters></out_parameters> <description></description> </panelstatement>
Das Beispiel beschreibt ein gültiges Paar der Panelstatements 7 und 8, mit dem Produkte der Palette geladen werden können. Beim Anpassen der Anweisungen muss darauf geachtet werden, dass neue Anweisungen entsprechende Rückgabespalten und Eingabevariablen haben. Die folgenden Abbildungen zeigen, an welcher Stelle der selects Palettenwerte und Rückgaben eingesetzt werden.
entspricht [1] in der Anweisung,
entspricht (1) in der Anweisung.
Im Befehl 2 wird zu Demonstrationszwecken das Tag <userid> verwendet. Dieses Tag wird vor der Anweisungsausführung ersetzt durch die ID des aktuellen Benutzers. Weitere definierte Tags finde Sie hier.
insert into PanelStatements values ( 7, '', 'Lade die IDs für die Produktrecherche', 'select ID, 1401, 1702, '', from WIIProducts where ID > ? -- 0 vom Plugin and upper (num) like ? -- [1] and upper (name) like ? -- [2] and rownum < ?', -- 10.000 vom Plugin 'number, varchar2, varchar2, number', 'number, number, number'); insert into PanelStatements values ( 8, '', 'Lade ein Produkt in Produktrecherche', 'select Num, -- (1) Name, -- (2) ForceDelete from WIIProducts where ID = ?', 'number', 'varchar2, varchar2, number');
Der Wert von ForceDelete steuert, wie das Statusbutton aussehen soll : Ist ForceDelete != 0 wird der Status auf 'Kann gelöscht werden' gesetzt. Ist das Produkt nicht mehr im Dokument verplant, wird es nicht in die Liste geladen. Ist es noch im Dokument verplant und wird aus dem Dokument gelöscht, wird der zugehörige Eintrag automatisch aus der Anzeigeliste entfernt.
Die Einträge der Liste können auf Doppelklicks reagieren. Die auszuführenden Aktion wird wie folgt definiert :
Hier einige Beispiele von gültigen Panelstatements mit denen die Doppelklick-ID definiert werden kann.
select 900+<depth> from dual; "datafiles.xml" -- beliebige XML-Datei select 900+<depth> select id%3 from ... where ID = ? select id%3 from ... where ID = <ID> -- Die ?en sind optional
Und hier ein einfaches Doppelklick-Skript
int main () { showmessage ("Zeile %d, ID = %d", gClicked+1, gRecordID); return 1; }
Oben rechts in der Palette befindet sich ein Popup-Menü, das (alphabetisch sortiert) die verfügbaren Templates anzeigt. Mit zwei kleinen vorgeschalteten Popup-Menüs links vor dem Popup kann diese Liste auf Bereiche und die sog. Mandanten eingeschränkt werden. Trotzdem kann die Liste schnell unübersichtlich lang werden.
Mit dem Panelstatement 148 kann die Liste automatisch gefiltert werden. Das Statement ist ab v4.1.8. R27979 verfügbar und muß ein cScript sein. Das Filter-Skript wird bei jedem Login/Logout und bei jedem Dokumentwechsel ausgeführt. Es erhält eine Liste mit den IDs aller aktuell verfügbaren Templates. Nicht benötigte Einträge werden vom Skript aus der Liste entfernt und die übrig gebliebenen Templates werden im Popup angezeigt. Fehlt das Skript oder ist leer, werden wie bisher alle Templates in das Auswahl-Popup aufgenommen.
Durch Abwählen des Flyout-Menüs Nur freigegebene Templates zeigen kann das Filter-Skript deaktiviert (und wieder aktiviert) werden.
Name | Typ | Beschreibung |
gDocument | ItemRef |
Aktuelles Dokument |
gTemplateIDs | List |
Liste der IDs der verfügbaren Templates. Templates, die nicht im Popup der Palette gezeigt werden sollen, werden vom Skript aus der Liste entfernt |
PubServer ab v4.1.9 haben eine Standard-Version des Skriptes: Über die DokumentID wird die Publikation des Dokumentes ermittelt und die Ergebnisliste mit den der Publikation zugeordneten Templates gefüllt. Sind einer Publikation keine Templates zugeordnet, werden alle Templates gezeigt.
Das Beispiel zeigt ein einfaches Skript, mit dem immer nur die Templates angezeigt werden, die mit dem gleichen Buchstaben wie der Dateiname anfangen.
int main () { char docName [512]; char tName [512]; int i; int len = list::length (gTemplateIDs); document::name (docName); strlower (docName); if (len > 0 && strlen (docName) > 0) { for (i = len-1; i >= 0; i--) { strcpy (tName, datapool::get_template_name (list::get (gTemplateIDs, i))); strlower (tName); if (docName [0] != tName [0]) { list::remove_pos(gTemplateIDs, i); } } } return 0; }
[Seit v4.2 R31657] Produkte können mit ihrem Folgeprodukt so zusammengehalten werden, dass beide Produkte beim Aufbau auf einer Seite platziert werden. Bitte beachten Sie folgende Einschränkungen:
Um ein Produkt mit seinem Nachfolger zusammenzuhalten, klicken Sie das Produkt mit der rechten Maustaste und gehaltener Shift-Taste an. Zusammengehaltene Produkte werden mit einem roten Punkt auf der rechten Seite der Produltliste markiert. Im Screenshot werden Patras Theatre und Tipgrafia jeweils mit ihrem aktuellen Nachfolger auf einer Seite zusammengehalten:
Mit Hilfe der Skriptbefehle product::set/get und dem Selektor kProductKeepWithNext kann die Eigenschaft auch per cScript gesetzt werden.
Da das Zusammenhalten zweier Produkte nicht aufräum-resistent ist, kann diese Eigenschaft auch nicht in der Palette Produkte des Dokumentes gesetzt werden.
Für wiederholte Test insbesondere in der Entwicklungsphase eines Projektes können
Sie aber die Produkte es Dokumentes mit dem Sichern-Buttons der Palette
in eine sogenannte Produkte-XML sichern. Seit v4.2 R32973
wird hier auch das Element <keepWithNext> unterstützt und für alle Einträge mit 0 initialisiert:
<keepWithNext>0<keepWithNext>
Den Wert 0 können Sie (manuell) ändern in 1. Dann wird dieses Produkt mit beim Ausführen des
Reorganisations-Buttons der Palette
mit seinem Nachfolger zusammengehalten werden.
Die Rahmen von Musterseiten dürfen Rahmen- und Textplatzhalter enthalten. Diese Rahmen und ihre Platzhalter können in den folgenden Situationen freigestellt (für die aktuelle Seite lokalisert) und geladen werden:
Wiederholtes Lokalisieren von Rahmen ist erlaubt. Die priint:comet Funktionen erkennen selbstständig, ob ein Musterseitenrahmen bereits lokalisiert wurde. In diesem Fall werden nur die Platzhalter der freigestellten Musterseiten-Rahmen neu geladen.
Musterseitenrahmen, die von den o.g. priint:comet Funktionen lokalisiert werden sollen, müssen dafür wie folgt gekennzeichnet werden:
[Bis v4.2 R33358] Rahmenplatzhalter
[Ab v4.2 R33359] Rahmenplatzhalter und/oder Freistell-Markerierung
Ab v4.3 R34830 Die Musterseitenrahmen werden in der Reihenfolge ihrer Kennung geladen und die Gestalungsregeln werden sofort nach dem Laden ausgeführt. So legen Sie die Kennungen fest:
In Versionen vor v4.3 R34830 werden die Rahmen in der Reihenfolge ihrer Z-Order geladen.
[Bis v4.2 R33358] Um einen Musterseitenrahmen zu lokalisieren und dessen Platzhalter zu laden, muß der Rahmen mit einem Platzhalter mit einer ID > 0 verknüpft sein. Eine zusätzliche Verknüpfung mit einem Produkt ist nicht nötig, der Rahmen darf also die Record-ID [0, 0, 0, ""] haben.
Häufig enthalten Musterseitenrahmen lediglich Textplatzhalter. Auch in diesen Fällen muß der Rahmen mit einem Platzhalter versehen werden! Verwenden Sie für diesen Platzhalter etwa das folgende leere Laden-Skript:
int main () { return 0; }[Ab v4.2 R33359] Alternativ (oder zusätzlich) zur Markierung durch einen Rahmenplatzhalter können Rahmen auch mit Hilfe der Fly-Out Menüs Platzhalter in Rahmen von Musterseiten -> der Palette Platzhalter markiert werden. Folgende Varianten werden unterstützt:
Mit erstem Produkt der Seite verknüpfen Die Rahmen- und alle Textplatzhalter werden vor dem Laden mit der ID des ersten Produktes der aktuellen Seite verknüpft.
Mit letztem Produkt der Seite verknüpfen Die Rahmen- und alle Textplatzhalter werden vor dem Laden mit der ID des letzten Produktes der aktuellen Seite verknüpft.
Nicht neu verknüpfen Das Verhalten entspricht der Markierung mit einem Rahmenplatzhalter.
Bitte beachten Sie Folgendes:
Die Menüs sind nur in Musterseiten aktiv. In normalen Seitenrahmen kann die Eigenachaft nicht gesetzt werden.
Die Platzhalter der freigestellten Musterseitenrahmen werden ausschließlich in den oben genannten Situationen neu geladen. Insbesondere werden Platzhalter, die Inhalte des ersten oder letzten Produktes einer Seite anzeigen, nicht neu geladen, wenn das Produkt auf der Seite gelöscht oder verschoben wird!
Die blaue Markierung ist keine Platzhalter-Markierung. So machen Sie die Markierung sichtbar (Sie müssen beide Menüs aktivieren.):
Die Einstellungen werden im Rahmen-Etikett priint_LoadMaster gespeichert und können auch über die Palette Comet Admin -> Rahmen-Etiketten gesetzt und geändert werden. Folgende Werte für priint_LoadMaster sind definiert:
Schüssel | Beschreibung |
first | Zeige den ensprechenden Wert des ersten Produktes der Seite |
last | Zeige den ensprechenden Wert des letzten Produktes der Seite |
custom | Platzhalter nicht neu verknüpfen |
rowwise | [Default] Zeilenweise Suche nach dem ersten Produkt. Im Bild ist E das letzte Produkt:![]() |
colwise | Spaltenweise Suche nach dem ersten Produkt. Im Bild ist G das letzte Produkt:![]() Diese Sortierung kann nicht per Menü gewählt werden. Verwenden Sie dazu die Palette Comet Admin -> Rahmen-Etiketten und fügen dort das Wort colwise manuell an den Wert first oder last an. Ein Leerzeichen dazwischen wäre von Vorteil :-) |
Für die Suche nach Produkten können verschiedene Methoden gewählt werden. Dabei werden drei Typen von Suchmethoden unterschieden.
In der folgenden Abbildung sind die rot markierten Einträge vorkonfigurierte und die blauen eigene Suchmethoden. (Seit der Oberflächenanpassung von InDesign® CC 2017.1 sind Trenner in Menüs leider fast nicht mehr zu erkennen - und leider hilft auch eine hellere UI-Farbe kaum.)
Beim Login oder beim Setzen eines Datenordners (das kann auch beim Start von InDesign® sein) werden automatisch alle verfügbaren Suchmethoden geladen. Besteht der vordefinierte Suchwert aus mehreren Zeilen, wird das Textfeld automatisch in ein editierbares DropDownMenü umgewandelt. Bei der Auswahl einer Suchmethode können die Namen der vier Suchfelder und ihre Inhalte geändert werden und das Suchpopup bekommt den gelben Beschreibungtext, der in der Suchmethode hinterlegt wurde.
Neben der Standardsuche können Sie auf vorkonfigurierte und eigene Suchmethoden zugreifen. Alle verfügbaren Suchmethoden werden im Suchpopup der Palette gezeigt. Bei der Auswahl vorkonfigurierter und eigener Suchmethoden wird die Suche sofort gestartet. Sie liest zuerst die Angaben der Suchfelder und führt danach die Suchanweisung durch.
Die Suchanweisung wird nur für die Einträge der obersten Ebene verwendet. Zum Laden von Untereinträgen werden wie üblich die Panelstatements der Produkte verwendet.
Für sehr komplexe Abfragen kann die Produktrecherche auch mit Hilfe von cScript geladen werden.
Achtung : Das Laden mit Hilfe von cScript wird nur in FindStatements unterstützt!
Folgende Schritte sind dafür nötig:
Implementierung der Aktion. Im Skript sind die folgenden globalen Variablen definiert:
char gDocumentID[]; ProductList gProducts; // Beim Laden von Untereinträgen Werte des aufrufenden Produktes // In der obersten Ebene 0 oder leer // int gRecordID; int gRecordID2; int gRecordID3; char gRecordStringID []; char gRecordStringID1 []; char gRecordStringID2 []; char gRecordStringID3 []; int gLevel; int gIconID; int gDefaultTemplateID; // seit v4.3 R36620 char gDefaultTemplateName []; // seit v4.3 R36620
Aufgabe des Skripte ist es, die Liste gProducts zu füllen. Die Produkte der Liste nüssen mit product::alloc (kListOwner) erzeugt werden und mindestens die Attribute kID, kRow1, kRow2 und möglichst kPageitemId definieren. Auf die Eingaben der Suchfelder können Sie direkt mit den Tags <searchvalue1>, ..., <searchvalue4> zugreifen. Diese Tags werden vor der Skriptausführung automatisch im Skripttext ersetzt. Beachten Sie aber bitte, dass die Suchangaben in der Regel ein % am Ende haben!
Hier ein Beispielskript zum Laden der Produktrecherche.
#include "internal/types.h" #include "internal/products.h" int main () { Product p; int i; String row1 = string::alloc (); String row2 = string::alloc (); for (i = 1; i < 10; i++) { string::set (row1, "Product %d", i); string::set (row2, "%s %d", gDefaultTemplateName, i); p = product::alloc (); product::set (p, kID, i); product::set (p, kRow1, row1); product::set (p, kRow2, row2); product::set (p, kPageitemid, gDefaultTemplateID); productlist::append (gProducts, p); } return 0; }
Zum Sichern eigener Suchen verwenden Sie die Fly-Out-Menüs der Palette:
Das Sichern einer Suche setzt die Installation der Tabelle/Datei findstatements mit den Attributen label1, label2, ... . voraus.
In PubServer-Verbindungen und generell bei Suchmethoden ohne Such-Felder werden keine eigenen Suchmethoden angelegt.
Zum Löschen eigener Suchen verwenden Sie die Fly-Out-Menüs der Palette:
Vorkonfigurierte Suchmethoden sind Teil der aktuellen Datenbasis. Sie werden einmal angelegt und können von Benutzern verwendet (aber nicht geändert oder gelöscht werden).
Als Systemkonfigurator setzen Sie dazu den Wert candelete des Sucheintrages auf den Wert 0.
Für die Konfiguration von Suchmethoden wird die Tabelle findstatements (unter XML und SOAP die Datei findstatements.xml) benötigt. Für klassische Anwendungen (vor 1.3.3 P/R 47) können die Suchmethoden durch die Tabelle conditions (resp. conditions.xml) unterstützt werden.
Auch wenn die klassische Suchmethode nicht verwendet wird, muss die Tabelle conditions (resp. die Datei conditions.xml) vorhanden sein. Die Tabelle darf in diesem Fall natürlich leer sein.
Alle Suchmethoden werden in der Tabelle findstatements verwaltet. Der Zugriff der Suchanweisungen auf die aktuellen Werte Suchkriterien erfolgt über die Tags <searchvalue1> (Feld links oben) bis <searchvalue4> (Feld rechts unten). Die Tags werden durch die jeweiligen aktuellen Werte in der Palette ersetzt. Dabei gilt:
Name | Typ | Beschreibung |
id | int | Eindeutige ID des Datensatzes |
classid | int | In welcher Palette wird die Suchmethode verwendet? Zur Zeit ist nur die Produktrecherche (ClassID 3) implementiert. |
userid | int | (nur Datenbank) Benutzer-ID. Nur Benutzer dieser UserID sehen diesen Eintrag.
0 : Alle Benutzer sehen den Eintrag |
description | char* | Beschreibung der Suchmethode. Der Text wird als (gelber) Hilfetext im Popup angezeigt. |
label | char* | Name der Suchmethode wie er im Suchpopup gezeigt werden soll. Trennzeilen im Menü werden mit "-" erzeugt. |
sequencenr | int | Reihenfolge der Menüeinträge. |
source | char* | nur XML und SOAP Experimentell (wird zur Zeit nicht verwendet) |
statement | char* | Suchanweisung. Zur Verknüpfung mit den aktuellen Suchkriterien kann die Anweisung folgende Hinweise enthalten :
|
• Sichern von Suchergebnissen und vereinfachte Suche. Fehlen die Angaben, können keine Benutzermethoden gesichert werden und die Suche muss mit der klassischen Methode konfiguriert werden. | ||
candelete | int | 0 : Vorkonfigurierte Suchmethoden 1 : Benutzermethoden |
label1 | char* | Beschriftung der Suchfelder
Die Namen der Suchfelder werden nach den Standardverfahren übersetzt. Suchfelder mit den folgenen Labels werden automatisch deaktiviert:
Sind alle Suchfelder deaktiviert, werden die Suchfelder automatisch ausgeblendet und die Höhe Produktliste entsprechend angepaßt. |
label2 | ||
label3 | ||
label4 | ||
value1 | char* | Initiale Inhalte der Suchfelder. Die Inhalte ersetzen automatisch die Tags <searchvalue1> bis <searchvalue4>.
Ab v4.1.7 R27305 : Besteht der Inhalt aus mehreren Zeilen, wird automatisch ein editierbares Dropdown-Menü mit den entsprechenden Einträgen angelegt, aus dem die Suchkriterien ausgewählt werden können. Es gilt weiter:
Ab v4.1.7 R27311 : Die Angabe ##ID (z.B. ##12345) führt das Skript mit der Action-ID ID aus. Dieses Skript ermittel den Inhalt des Suchfeldes. Die Action muß mit der ClassID 61 definiert sein! Folgende globale Variablen sind im Skript definiert: int gStatementID; // ID des Findstatements oder 0 bei der Standardsuche Das Ergebnis gValues darf Zeilentrenner enthalten. Dann wird aus den einzelnen Zeilen ein Suchpopup gebildet (s.o.) Ein Ausrufezeichen am Zeilenanfang markiert die Default-Auswahl der Liste. Hier ein Beispiel: Erzeuge ein Dropdown mit den Suchwerten Searchvalue 1, Searchvalue 4, Searchvalue 9, ... und dem aktuellen Datum. Searchvalue 9 soll standardmäßig aktiviert sein. #include "internal/types.h" int main () { int i; String dt = string::alloc (); for (i = 1; i < 6; i++) { if (i == 3) { string::append (gValues, "!"); } string::append (gValues, "Scriptvalue %d\n", i*i); } string::append (gValues, "-\n"); string::append (gValues, "%s", system::now (dt, ddmmyyyy_hhmmss)); return 0; } |
value2 | ||
value3 | ||
value4 | ||
sourcefiles
alias |
char* | nur XML und SOAP Im Plugin Einstellungen können für Dateien und Ordner Aliasnamen vergeben werden, die bei der Auswertung von XML-Anweisungen aufgelöst werden. Um zu vermeiden, dass diese Einstellungen vor der Suche von Benutzern gemacht werden müssen, können diese Zuordnungen auch im findstatement gemacht werden. Näheres im nächsten Absatz. |
Nur XML und SOAP Viele Suchanweisungen einer XML-Installation verwenden anstelle fester Dateinamen Aliasnamen zur Beschreibung der Quelldatei. Die aktuellen Zuordnungen zwischen Aliasnamen und Pfaden werden dabei mit Hilfe des Plugins Einstellungen gemacht. Damit eine Suche die richtigen Aliasauflösungen verwenden kann, ohne dass Benutzer die Einstellungen in dieser Palette machen müssen, bietet findstatement.xml die Möglichkeit, Aliaszuordnungen zu definieren.
Alle in einer Suchmethode festgelegten Aliaszuordnungen werden automatisch auch in der Palette Einstellungen gemacht. Wird die Suchmethode wieder gewechelt, wird auf die alten Zuordnungen zurückgestellt. Enthält die Suchmethode eine Zuordnung, die noch nicht existiert, wird sie angelegt.
Zuordnungen werden analog dem folgendem Beispiel definiert :
Für eine Suchmethode werden die Aliasnamen $XMLDATA und $IMAGES benötigt.
<sourcefiles> <sourcefile> <alias>XMLDATA</alias> <path>Kommunen.xml</path> </sourcefile> <sourcefile> <alias>IMAGES</alias> <path>$DESKTOP/Bilder</path> </sourcefile> </sourcefiles>
Im klassischen Verfahren wird sichergestellt, dass Suchmethoden palettenübergreifend konfigurierbar sind. Das ist den meisten Fällen nicht nötig. Ausserdem stellt die klassische Methode den einzigen Weg dar, die Suchfelder der Standardsuche umbenennen zu können.
Für die Beschriftung der Suchfelder und deren aktuelle Werte wird in der klassischen Methode die Tabelle conditions benötigt.
Name | Typ | Beschreibung |
id | int | Eindeutige ID des Datensatzes |
label | char* |
Beschriftung des Suchfeldes Die Namen der Suchfelder werden nach den Standardverfahren übersetzt. Suchfelder mit den folgenen Labels werden automatisch deaktiviert:
|
sequencenr | int | Welches Suchfeld ist gemeint? |
typeid | int | Typ des Suchwertes. Strings werden automatisch in Anführungszeichen gesetzt:
|
value | char* | Dieser Text wird in das bei sequnecenr angegebene Suchfeld eingesetzt. |
replacebyvalue | char* | unbenutzt |
conditionmenueid | int | 0 |
Die Verbindung der Suchanweisung zu den aktuellen Suchkriterien wird über die definierten Schlüsselwörter
%!conditionID, mit ID als gültiger id aus conditions
hergestellt und geschieht auf folgende, leicht zu durchschauende Weise :
Das Schlüsselwort %!condition darf nicht in Kommentaren verwendet werden!
Nun bleibt immer noch zu klären, auf welche Weise die conditions eine Suche verwirklichen können. Bis jetzt wurden ja die Suchkriterien noch gar nicht verändert:
Bei der Auswahl einer neuen Suchmethode werden genau wie bei der eigentlichen Suche alle %!conditionID der Suchanweisung abgearbeitet. Aber im Unterschied zur Suche werden hier neben der sequencenr noch die Felder label und value ermittelt und für Beschriftung und Inhalt der Suchfelder verwendet.
Wollen Sie ein Suchfeld ändern, das in der Suche gar nicht verwendet wird, sondern möglicherweise erst in den Untereinträgen benötigt wird, können Sie das Schlüsselwort
%!CONDITIONID
verwenden. Es wird auf die gleiche Weise ausgewertet wie %!conditionID
Dieses Schlüsselwort darf nur in Kommentaren verwendet werden, es wird bei der Suche nicht ausgewertet.
Die %!CONDITIONs werden nach der Auswertung der %!conditions bearbeitet unbd können deren Änderungen überschreiben.
/* %!CONDITION29 wird in der Ebene 3 verwendet */
Ändere die Beschriftung des dritten Suchfeldes der Standardsuche. Dazu wird zuerst eine Condition definiert. Danach wird im Panelstatement 55 eine Kommetarzeile eingefügt.
/* 1. Definiere die Condition 29 */ <condition> <id>29</id> <conditionmenueid>0</conditionmenueid> <label>Elemente</label> <sequencenr>3</sequencenr> <typeid>3</typeid> <value></value> <replacebyvalue></replacebyvalue> </condition> /* 2. Einfügen eines Kommetares in das Panelstatement 55 */ /* %!CONDITION29 wird in der Ebene 3 verwendet */
Definition einer vorkonfigurierten Suchmethode die als Basis für eigene Suchmethoden verwendet werden kann.
<findstatement> <id>3</id> <label>Printprodukte</label> <description>beliebig</description> <classid>3</classid> <userid>0</userid> <source></source> <statement> "$XMLDATA" select ID, 0, 3, 3, 2012, DescShort#__igNOre__, "", 0, 20000, 0, "", "", "", 0, 0, 0 node Publication.ProductGroup where 1 > 0 and Nummer like <searchvalue1> and DescShort#__igNOre__ like <searchvalue2> orderby DescShort#__igNOre__ </statement> <sequencenr>30</sequencenr> <label1>Nr.</label1> <label2>Name</label2> <label3>Elemente1</label3> <label4>-</label4> <value1>Print</value1> <value2></value2> <value3>F</value3> <value4></value4> <candelete>0</candelete> </findstatement>
Platzhalter von Texten und Rahmen können durch Shift-Klick in die erste Spalte der Produktliste mit dem jeweiligen Produkt verknüpft werden. Dabei werden die Platzhalter aller ausgewählten Rahmen und/oder Texte mit dem Produkt verknüpft. Ist das sog. Autoload-Button der Palette aktiviert (rot)
werden nach dem Verknüpfen alle Platzhalter sofort geladen.
Sie können mehrere Cometgruppen gleichzeitig laden :
Hier ein kurzer Film zur Demonstration :
Templatewechsel können direkt aus der Produktrecherche gemacht werden:
Der obige Film enthält am Ende auch einen Templatewechsel.
Tip : Da die Platzhalter nicht mit neuen Comet-IDs verknüpft werden, reicht es hier, irgendwelche Produkte in der Palette auszuwählen. Es wird jeweils nur das eingestellte Template für den Templatewechsel verwendet.
Im Seitenaufbau-Dialog können Sie festlegen, wie mit Unterprodukten verfahren werden soll:
Als Ebene 0 gelten jeweils die obersten ausgewählten Produkte (Selektion bzw. Auge). Die Produkte müssen nicht aufgeklappt sein, damit Untereinträge geladen werden können. Hier ein Beispiel einer Produktauswahl (bei der die Untereinträge lediglich zu Demonstrationszwecken ausgeklappt sind):
Mit dieser Auswahl werden folgende Produkte gefunden:
Nur Ebene 1 : Ausgehend vom jeweils obersten ausgewählten Produkt werden nur die Produkte der relativen Unterebene (hier 1) gefunden:
301 - 304 : Diese Produkte befinden sich in der ersten Unterebene von 30.
3041 - 3046 : Obwohl diese Produkte ebenfalls eine Ebene unter dem ausgewählten Produkt 304 liegen, werden sie ignoriert.
Grund dafür ist, dass 304 schon durch die Auswahl von 30 'überstimmt' wurde.
4011 - 4013 : Diese Produkte sind eine Ebene unter dem ausgewählten Produkt 401.
Suche bis max. Ebene 1 : Ausgehend vom jeweils obersten ausgewählten Produkt wird bis maximal zur angegebenen relativen Unterebene nach Produkten mit einem definierten Template gesucht. Hat ein Produkt ein definiertes Template, wird die Suche in den Unterprodukten abgebrochen.
30 : Dieses Produkt ist selektiert und hat ein definiertes Template. Alle Produkte unter 30 werden ignoriert.
4011 - 4013 : Das Eltern-Produkt 401 ist eine Toplevel-Auswahl, hat aber selbst kein Template definiert. Die Suche wird also in den Unterprodukten fortgesetzt.
Hinweis 1: Hätte 401 ein definiertes Template, würde statt 4011 - 4013 die 401 verwendet. Dazu wählen Sie entweder für 401 oben rechts in der Produktrecherche ein temporäres Template oder Sie legen im Aufbau-Dialog ein Standard-Template fest.
Hinweis 2: Die Einstellung Produkte ohne Template überspringen des Aufbau-Dialoges hat in der Auswahl-Methode Suche bis max. Ebene keine Bedeutung.
Alles bis Ebene 1 : [Seit v4.3 R36020] Die ausgewählten Produkte und alle Unterprodukte bis zur angegebenen Unterebene werden geladen.
30
301 - 304
401 : Dieses Produkt wird nicht verwendet - es hat kein definiertes Template.
Um dieses Produkt ebenfalls zu erhalten, wählen Sie entweder für 401 oben rechts in der Produktrecherche ein temporäres Template
oder Sie legen im Aufbau-Dialog ein Standard-Template fest.
4011 - 4013
Nein : Es werden genau die ausgewählten (Selektion bzw. Auge) Produkte ausgewählt. In Unterebenen wird nicht gesucht. Achtung! Enthält die Auswahl Produkte ohne definiertes Template, muß unten im Aufbau-Dialog ein Template als Standard angegeben werden. Andernfalls führt der Aufbau zu einem Fehler!
30
304
3041
401 : Dieses Produkt wird nicht verwendet - es hat kein definiertes Template.
Um dieses Produkt ebenfalls zu erhalten, wählen Sie entweder für 401 oben rechts in der Produktrecherche ein temporäres Template
oder Sie legen im Aufbau-Dialog ein Standard-Template fest.
Den für diese Doku verwendeten Testfall finden Sie hier. Sie benötigen mindestens InDesign® 2025 für das Testprojekt. Entpacken Sie das XML-Projekt und stellen Sie in InDesign® eine Datenverbindung zu dem entpackten Ordner her. Um andere Produkt-Hierarchien zu testen, können Sie die Datei products.xml editieren. Für eigenen Produktlisten können Sie die Aktion actions/1000.crpt des Ordners editieren.
Für den Aufbau mit Seitentemplates kann die Liste der aufzubauenden Produkte auch mit Hilfe eines Skriptes erfolgen. Diese Skripte müssen die ClassID 37 haben. Sie bekommen als globale Variable die zu füllende Liste (gProducts) mitgegeben. Die folgende Tabelle zeigt alle globalen Variablen, über die diese Skripte verfügen.
Name | Typ | Beschreibung |
gProducts | ProductsList | Diese Liste wird den Produten gefüllt, die aufgebaut werden sollen. |
gPageTemplate | int* | Sie können in diesem Skript auch das Seitentemplate festlegen. Beim Skriptstart hat die Variable den Wert, der im Aufbau-Dialog eingestellt wurde.
Achten Sie darauf, das ist ein Zeiger, Zuweisungen also etwa so : *gPageTemplate = 12; |
gErMess | char [1024] | Wenn das Skript einen Fehler erzeugen will, können Sie diesen String füllen. Im Fehlerfall muss das Skript einen Returnwert ungleich 0 haben.
|
Hier ein einfaches Auswahlskript.
#include "internal/types.h" #include "internal/products.h" int append_product (ProductList pp, int id1, int id2, int id3, char * ids) { Product p; p = product::alloc (kGlobalStack); product::set (p, kID, id1); product::set (p, kID2, id2); product::set (p, kID3, id3); product::set (p, kStringID, ids); productlist::append (pp, p); return 0; } int main () { append_product (gProducts, 100, 0, 0, ""); append_product (gProducts, 300, 0, 0, ""); append_product (gProducts, 400, 0, 0, ""); append_product (gProducts, 600, 0, 0, ""); // *gPageTemplate = 12; // strcpy (gErMess, "Das war ihr Fehler!"); return 0; }
In den Paletten Produktrecherche und Produkte des Dokumentes befindet sich jeweils ein Button zum Reorganisieren des Dokumentes oder von Teilen des Dokumentes :
Das Aufräumen beginnt immer mit der Cometgruppe des ersten ausgewählten Dokumentrahmens. Der folgenden Tabelle können Sie entnehmen, mit welchen Tastenkombinationen Sie die Reorganistion beinflussen können:
Produktrecherche | Produkte des Dokumentes | |
Alt-Klick |
Nur die aktuelle Seite aufräumen. Produkte, die nicht mehr auf die Seite passen, werden (unaufgeräumt) auf die nächste Dokumentseite im Abstand von 1x1 Punkt gestapelt. Beim Aufräumen dieser Folgeseite behalten die Produkte damit ihre Reihenfolge. |
|
Shift-Klick |
Unabhängig von der Dokumentauswahl wird das gesamte Dokument aufgeräumt. Wird gleichzeitig die Alt-Taste gehalten, bleibt die Taste ohne Wrikung. |
|
Control-Klick |
Die Inhalte befreundeter Rahmen werden ebenfalls neu geladen. Achtung : Die Control-Taste darf erst vor dem Loslassen des Buttons gedrückt werden! |
|
Verwendete Seitentemplates | ||
Ohne Cmd-Taste |
Die im Dokument gesetzten Seitentemplates werden nicht verändert. Für neue Dokumentseiten wird das Seitentemplate verwendet, dass als Nachfolger für das Seitentemplate der letzten Dokumentseite eingestellt ist. |
Jeder Seitentemplate-Eintrag der Liste führt zu einem Seitenwechsel mit dem gewünschten Seitentemplate. Danach wird gemäss den Nachfolger-Einstellungen der Seitentemplates fortgefahren. Ist der erste selektierte Listeneintrag kein Seitentemplate, wird als Starttemplate das im Dokument gesetzte Seitentemplate verwendet. |
Mit Cmd-Taste |
Das Seitentemplate der ersten aufzuräumenden Seite bleibt erhalten. Die Seitentemplates aller folgenden Seiten werden gemäss den Nachfolgerdefinitionen der Seitentemplates gesetzt. |
Die im Dokument gesetzten Seitentemplates werden nicht verändert. Die Seitentemplate-Einträge der Liste werden ignoriert. Für neue Dokumentseiten wird das Seitentemplate verwendet, dass als Nachfolger für das Seitentemplate der letzten Dokumentseite eingestellt ist. |
Seit v4.1.5 R23000 Nach dem letzten Finish Ihrer Dokumente müssen mglw. Preise und Ähnliches noch einmal aktualisiert werden, aber die beauftragte Agentur hat gar keinen Zugriff auf Ihr Datensystem. In diesem Fall können die benötigten Daten vorher bei Ihnen aufgezeichnet werden. Die Agentur benötigt dann nur noch den Ordner mit den aufgezeichneten Platzhalter-Inhalten.
Im Unterschied zum kompletten Date-Recording, bei dem alle Daten inkl. aller benötigten Konfigurationsdaten, Skripte, Templates, usw. aufgezeichnet werden, enthält der Aktualisierungsordner lediglich die absolut nötigen Platzhalter-Inhalte - sonst nichts.
Zum Setzen des Aktivierungsordner verwenden Sie das Menü
Verhalten beim Laden von Platzhaltern -> Aktualisierungsordner festlegen
Zum Aktivieren der Aufzeichnug verwenden Sie das Menü
Verhalten beim Laden von Platzhaltern -> Laden und exportieren in Aktualisierungsordner
Zum Verwenden der aufgezeichneten Daten aktivieren Sie das Menü:
Verhalten beim Laden von Platzhaltern -> Import aus Aktualisierungsordner
Mit Hilfe der Skriptebefehle prefs::set_updatetype, ... können diese Aktionen auch automatisiert werden.
Bei der Aktualisierung werden lediglich Inhalte ersetzt. Laden-Aktionen, die weitere Dokumentänderungen vornehmen oder Inhalte nur teil- oder schrittweise ersetzen, können damit nicht unterstützt werden.
Der Datenordner muß nicht für jeden Platzhalter des Dokumentes Daten enthalten. Enthält er aber für einen Platzhalter Daten, müssen Daten für alle Produkte, die aktualisiert werden sollen, vorhanden sein.
Die Palette zeigt die im aktuellen Dokument aufgebauten Produkte.
Die Liste der angezeigten Produkte kann manuell verändert werden. Mit kann das Dokument entsprechend der aktuellen Liste reorganisiert werden. Die Reorganisation beginnt mit der Seite des ersten ausgewählten Eintrages der Liste. Enthält diese Seite ein Fortsetzungstemplate, wird zurückgegangen bis zur ersten Comet-Gruppe der Fortsetzung. Ist kein Listeneintrag ausgewählt, beginnt die Reorganisation am Anfang des Dokumentes.
Manuell zum Dokument hinzugefügte Rahmen und Comet-Gruppen werden von der Reorganisation automatisch gelöscht.
Die Liste kann mit folgenden Aktionen bearbeitet werden:
Aktion | Button(s) | Beschreibung |
Neuladen der Liste |
![]() |
Achtung : Manuelle Änderungen an der Liste gehen beim Neuladen verloren! |
Ebenen von der Reorganisation ausschließen |
Im Popup Gestaltungsebenen können beliebig viele Ebenen des Dokumetes von der Reorganisation ausgeschlossen werden. Die Einstellung gilt jeweils bis zum nächsten Wechsel des Seitentemplates. |
|
Reihenfolge ändern |
![]() ![]() |
Buttons
|
Elemente löschen |
![]() |
Button |
Seitenumbrüche hinzufügen |
Drag and Drop aus der Palette Seitentemplates. Beachten Sie bitte, dass jedes Seitentemplate einen Seitenwechsel bedeutet. |
|
Produkte hinzufügen |
Drag and Drop der Produkte aus der Produktrecherche. |
|
Produkttemplate / Seitentemplate ändern |
Popup Template/Seitentemplate unter der Liste. Der Inhalt des Popup-Menüs richtet sich nach dem Typ der ausgewählten Listeneinträge. |
|
Seitenumbrüche ändern |
Durch Klicken des Seitensymboles am Anfang der Seitentemplates wird der Seitentyp des Umbruches geändert von Beliebig zu Rechte Seite zu Linke Seite zurück zu Beliebig. Fehlende Leerseiten werden automatisch von der Reorganisation eingefügt. |
|
Manuell hinzugefügte Rahmen und Comet-Gruppen übernehmen |
![]() |
Ist das Auge-Button links neben der Liste rot |
Liste sichern |
![]() |
Mit dem Button Eine so gesicherte Liste kann mit Drag and Drop in die Palette wieder geladen werden. Das ist inbesondere für Tests recht hilfreich. |
Mit aktivierter Synchronisation der Auswahl werden die Rahmen des Produktes im Dokument ausgewählt. Damit können, was mit InDesign®-Bordmitteln nicht geht, Rahmen mehrerer Spreads ausgewählt werden - eine gute Gelegenheit, wenn Rahmen auf irgendeine Weise einheitllich (nach)bearbeitet werden sollen. Zwei Bearbeitungen haben wir standardmäßig eingebaut:
Beliebig viele weitere Aktionen können als Actions der ClassID 39 definiert werden. Folgende globale Variablen sind in den Skripten definiert:
Name | Typ | Beschreibung |
gDocument | ItemRef |
Aktuelles Dokument |
gParam1-4 | char* |
char*-Strings der Parameter 1-4 |
gParamInt1-4 | int |
int-Werte der Parameter 1-4 oder 0, wenn der Wert kein Ganzzahlen-String ist |
gParamFloat1-4 | float |
float-Werte der Parameter 1-4 oder 0.0, wenn der Wert keine Kommazahl ist |
In inputdocumentation der Aktion können Sie einen beliebigen Hilfe-Text hinterlegen. Dieser Text wird als Hilfetext der Aktion in der Palette angezeigt. Beachten Sie bitte, dass Hilfetexte von InDesign® auf 255 Zeichen beschränkt werden.
outputdocumentation beschreibt die vier Parameter der Aktion in einer ##-getrennten Liste. Einzeilige Texte erzeugen ein einzeiliges Texteingabefeld für den Parameter. Zeilentrenner innerhalb eines Tokens erzeugen für den entsprechenden Parameter automatisch ein Popup-Menü mit den Zeilentexten als Inhalt. Ein '!' am Anfang setzt den Default-Eintrag. Mit '-' erzeugen Sie einen Menü-Trenner.