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:

  1. Lade die Produkte der obersten Ebene mit Panelstatement 55. Diese (und nur dieses) Statement wertet die Suchkriterien aus.
  2. Jedem Objekt jeder Ebene wird eine Panelstatement-ID >= 10000 mitgegeben, mit deren Hilfe die Untereinträge geladen werden können.
  3. Ein Eintrag ist nicht weiter aufklappbar, wenn das Panelstatement für die Untereinträge 0 ist.

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 :

  1. Definition des Tabellenattributes hasstringids in der Tabelle panelstatements bzw. Definition des XML-Elementes hasstringids in der Datei panelstatements.xml, siehe StringIDs
  2. In der Definition des Panelstatements muss der Wert von hasstringids = 1 gesetzt 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 nicht überprüft.

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.
  • Die folgenden Rückgaben sind (ausser für SOAP-Calls an getProductList und Produkten mit StringIDs) optional und werden für den Produktaufbau verwendet.

  • Wenn die Parameter in der Anweisung für die oberste Ebene (üblicherweise das Panelstatement 55 oder ein FindStatement) diese Parameter zurückgeben, müssen auch alle Statements zum Laden der Untereinträge die Parameter füllen.

  • Bei Aufrufen der SOAP-Methode getProductList und Verwendung von StringIDs müssen die Parameter angegeben werden. Setzen Sie deren Werte bei Bedarf auf 0 bzw. "".
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:

  • ### : Einleitende Markierung
  • apply_info1
    • 0 : info1 nicht setzen
    • 1 : info1 in alle Textplatzhalter setzen
    • 2 : info1 in alle Rahmenplatzhalter setzen
    • 3 : info1 in alle Rahmen- und Textplatzhalter setzen
  • info1 : Inhalt von Infos1 der Platzhalter
  • apply_info2
    • 0 : info2 nicht setzen
    • 1 : info2 in alle Textplatzhalter setzen
    • 2 : info2 in alle Rahmenplatzhalter setzen
    • 3 : info2 in alle Rahmen- und Textplatzhalter setzen
  • info2 : Inhalt von Infos2 der Platzhalter

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

  • kProductApplyInfos1, kProductInfos1
  • kProductApplyInfos2, kProductInfos2
auch in cScript festgelegt werden.
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 :

  1. Definition des Tabellenattributes hasstringids in der Tabelle panelstatements bzw. Definition des XML-Elementes hasstringids in der Datei panelstatements.xml, siehe StringIDs
  2. In der Definition des Panelstatements muss der Wert von hasstringids = 1 gesetzt 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:

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 :

  1. Um die SQL-Anweisung union zu simulieren, können mehrere Panelstatement mit der gleichen ID definiert werden. Diese Anweisungen werden der Reihe nach ausgeführt. Als Sortierung wird der Eintrag usage der Panelstatements verwendet.
  2. Die Dateiangabe für den XML-Befehl kann ein in der Datei datafiles.xml oder im Plugin Datendateien defnierter Wert sein. Um auf eine definierte (und aktivierte) Datendatei zu verweisen, geben Sie hier den Aliasnamen der Datendatei mit $ am Anfang an.

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, &lt;parent.ID&gt;, 123, id
            objecttype,
            2009,
            name, value, forcedelete,
            10001,
            docid,
            masterpage,
            grid.name, grid.elem, grid.id, grid.elemid,
            pageitemid
        node elements.element
        where productid = &lt;parent.ID&gt;
    </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 :

  1. getProductList Lade die Produkte der obersten Ebene.
  2. getProductList1 Lade die Produkte der obersten Ebene. Stringparameter werden nicht in Anführungszeichen gesetzt.
  3. getSubProductList Lade die Untereinträge eines Produktes
  4. getProductList Lade die Untereinträge eines Produktes. Stringparameter werden nicht in Anführungszeichen gesetzt.

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 :

  1. Mit Hilfe des Panelstatements 95 wird dem Produkt eine Action-ID zugeordnet. Das Statement muss ein Integer liefern und kann bis zu vier Eingabewerte (int, int, int, varchar) haben, die durch die aktuelle Produkt-ID ersetzt werden. In der Anweisung ist zusätzlich zu den allgemein üblichen Tags wie <ID>, <ID2>, <folder> das Tag <depth> definiert, es enthält die (0-basierte) Schachtlungstiefe des Produktes.
  2. Ist eine Aktionen-ID definiert (>0), wird die Aktion als Skript ausgeführt. Im Skript ist eine zusätzliche globale Variable gClicked definiert, die die 0-basierte Zeilennummer der Eintrages angibt.

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:

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:

  1. Bilden Sie aus den Rahmen vorübergehend eine Cometgruppe
  2. Verwenden Sie wie gewohnt die Palette Template-Verhalten um die Kennungen fetszulegen
  3. Lösen Sie die temporäre Cometgruppe wieder auf.

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: Hier ein Screenshot für 'Erstes Produkt':

Bitte beachten Sie Folgendes:

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.

  1. Standardsuche
  2. Vorkonfigurierte Suchmethoden
  3. Eigene Suchmethoden

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:

  1. Anlegen eines FindStatements. Statt eines Selects geben Sie im Attribut statement nach einem einleitenden # die ID der Aktion an, mit der die Produkte geladen werden sollen. Im SQL-Fall also z.B. #2000. In XML-Offline und mglw. SOAP/PubServer muß vor dieser Definition der Pfad einer XML-Datei des Datenpools stehen. Diese Datei wird von der Skriptausführung ignoriert, ist aber für einen syntaktisch richtigen xmlquery-Aufruf nötig. Verwenden Sie hier eine existierende und möglichst kleine XML-Datei Ihres Datenpools, z.B. "colors.xml" #2000.
  2. Anlegen der Aktion, auf die im Findstatement verwiesen wird. Verweisen die Produkte der obersten Ebene wieder auf ein Sub-Statement, kann auch diese Anweisung wieder als cScript geschrieben werden. Beachten Sie bitte, dass Anweisungen zum Laden von Untereinträgen unter der festgelegten ID in den Panelstatements (und nicht in den findstatements) definiert werden müssen.
  3. 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:

  1. Ganzzahlen bleiben unverändert
  2. Dezimalzahlen bleiben unverändert
  3. Alle anderen Inhalte werden wie folgt weitergegeben
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
  1. links oben
  2. links unten
  3. rechts oben
  4. rechts unten

Die Namen der Suchfelder werden nach den Standardverfahren übersetzt. Suchfelder mit den folgenen Labels werden automatisch deaktiviert:

  • Unused
  • unused
  • -
  • Leerstring

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>.
  1. links oben
  2. links unten
  3. rechts oben
  4. rechts unten

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:

  • Es wird immer zuerst der Standard-Eintrag beliebiger Wert angelegt
  • Whitespace um die Zeilen werden entfernt
  • ! am Textanfang wählt den Eintrag im Menü aus
  • - : Ein einzelnes Minus (-) erzeugt eine Trennlinie
  • Untermenüs können nicht definiert werden

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
int gFieldNum;      // Nummer des Feldes (1-4, siehe oben)
String gValues;     // String für das Ergebnis

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
path

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:

  • Unused
  • unused
  • -
  • Leerstring
sequencenr int Welches Suchfeld ist gemeint?
  1. oben links
  2. unten links
  3. oben rechts
  4. unten rechts
typeid int Typ des Suchwertes. Strings werden automatisch in Anführungszeichen gesetzt:
  1. int
  2. float
  3. string
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 :

  1. Trifft die Verarbeitung auf den Hinweis %!condition28, wird die condition mit der id 28 gelesen.
  2. Von dieser Bedingung wird das Feld sequencenr geholt.
  3. Diese Nummer (laut Definition ein Wert zwischen 1 und 4) gibt an, welches Suchfeld gemeint ist.
  4. Jetzt kann der aktuelle Suchwert geholt werden.
  5. Der aktuelle Suchwert ersetzt in der Suchanweisung den Begriff %!condition28. Der Suchwert wird dabei zusätzlich in einfache Anführungszeichen gesetzt, wenn die condition 28 die typeid 3 hat.

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 &gt; 0
         and Nummer like &lt;searchvalue1&gt;
         and DescShort#__igNOre__ like &lt;searchvalue2&gt;
      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 :

  1. Wählen Sie die gewünschten Comet-Gruppen im Dokument aus. Es genügt ein Rahmen pro Comet-Gruppe.
  2. Wählen Sie die mind. die gleiche Anzahl Produkte in der Palette aus. Produkte mit dem Status 'Kann gelöscht werden' (dargestellt in Schrägschrift) werden dabei nicht mitgezählt.
  3. Shift-Cmd-Klick in die erste Spalte des ersten ausgewählten Produktes.
  4. Die erste Comet-Gruppe wird jetzt mit dem ersten Produkt geladen, die zweite mit dem zweiten Produkt usw.. Die Reihenfolge der Cometgruppen ergibt sich aus den Seitenelementen. Ist die aktuelle Zielseite nicht mit einem Seitentemplate versehen, werden die Cometgruppen "zeilenweise" nach ihren XY-Koordinaten sortiert.

Hier ein kurzer Film zur Demonstration :

Templatewechsel können direkt aus der Produktrecherche gemacht werden:

  1. Wählen Sie die gewünschten Comet-Gruppen im Dokument aus. Es genügt ein Rahmen pro Comet-Gruppe.
  2. Stellen Sie mit Hilfe des Template-Popupmenüs oben links in der Palette das gewünschte Template ein.
  3. Shift-Alt-Klick ändert die Templates alle selektierten Comet-Gruppen. Inhalte befreundeter Rahmen werden dabei übernommen.

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:

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 und rechts unter der Liste

    Elemente löschen

    Button links unten in der Palette

    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 , werden manuell angelegte Rahmen und Cometgruppen in den Dokumentaufbau übernommen.

    Liste sichern

    Mit dem Button kann die aktuelle Liste als XML-Datei gesichert werden.

    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.