Die Palette wird verwendet, um Text- und Bildalternativen für Platzhalter und Produkte zu zeigen. Hier ein Screenshot:

Mit Hilfe der Buttons der ersten Spalte können Platzhalterinhalte neu gesetzt werden. Dabei werden nicht, wie sonst üblich, die Platzhalter mit einem neuen Objekt verknüpft und dann neu geladen, sondern die Inhalte werden direkt ins Dokument geschrieben. Darüber hinaus können Sie Elemente mit Drag and Drop direkt in Rahmen und Texte ziehen und ablegen. Weitere Informationen finden Sie in den Tooltips der Palette.

Werden Templates in Texte eingesetzt, werden die Rahmen zuvor gruppiert und dann als ein Inline in den Text eingefügt. Wird beim Einsetzen von Templates in Texte die Alt-Taste gehalten, werden die Rahmen als einzelne Inlines eingefügt. Dabei wird die in der Palette Template-Verhalten festgelegte Reihenfolge verwendet.

Zum Einsetzen von Bildern werden die Einstellungen der Popupmenüs Bildposition und Skalierungverfahren oben rechts in der Palette verwendet. Bei gahaltener Alt-Taste beim werden vor dem Einfügen von Bildern die allgemeinen Importoptionen von InDesign® (Ebenen, Beschneidungspfade, Farbräume, ...) erfragt.

Beachten Sie, dass die so geänderten Platzhalter im Normalfall nicht mehr synchron mit den Inhalten der Datenbasis sind und Änderungen beim Aktualisieren der Platzhalter verloren gehen werden.

Mit kann die Listendarstellung zwischen kleinen und großen Einträgen umgeschaltet werden.

Die Suchmethoden werden in der Datenbanktabelle previewstatements bzw. in der Datei previewstatements.xml definiert und erscheinen in der dort festgelegten Reihenfolge oben links im Suchpopup der Palette. Suchmethoden können nach folgenden Kriterien klassifiziert werden:

Die Klassifizierung der Suchmethode wird im Attribut needsselection der PreviewStatements festgelegt (siehe folgende Tabelle). Für platzhalter- und produktabhängige Suchanweisungen wird vor der Suche Hilfe des Attributs condition (siehe unten) geprüft, ob die Suche überhaupt ausgeführt werden kann. Die dazu nötigen aktuellen Platzhalter- und Produktwerte sind in entsprechenden Suchparametern definiert.

Die Tabelle/Datei previewstatements muss folgende Attribute haben:

Attribut Typ Beschreibung
id int Eindeutige ID des Eintrages
classid int Das Feld ist für eventuelle Erweiterungen vorgesehen. Aktuell wird nur die Palette Previews und Alternativen mit unterstützt:

6

name string Name der Suchmethode im Suchpopup oben links in der Palette. Die angezeigten Namen können sprachabhängi lokalsiert werden. Hier finden Sie Informationen zu den Feld-Beschriftungen.

In das Popup werden nur Einträge aufgenommen, deren objectstatementid > 0 ist.

sequencenr int Festlegung der Reihenfolge der Einträge im Suchpopup. Die Werte geben nicht die Position an, sie werden zu Ermittlung der Reihenfolge verwendet.
isdefault int Die erste Suchmethode mit einem Wert >0 wird nach dem Login im Suchpopup ausgewählt.
needsselection int

Klassifizierung der Anweisung. Der Anweisungstyp wird unter dem Popup mit den verfügbaren Suchen angezeigt.

  • 0 - unabhängige Suche
  • 1 - platzhalterabhängig
  • 2 - produktabhängig
condition string Suchbedingung, Die Suche wird nur ausgeführt, wenn die Bedingung erfüllt ist. Bedingungen werden nur in platzhalter- und produktabhängigen Suchen ausgewertet (needsselection = 1|2)
statement string Suchanweisung in der Syntax der Datenverbindung.

In XML-Offline und Datenbankverbidungen liefert die Anweisung die IDs der gefundenen Ergebnisse (ID, ID2, ID2, StringID), siehe hier. Die Inhalte der gefunden Ergebnisse werden danach in einem zweiten, in objectstatementid definierten Aufruf ermittelt.

In SOAP- und PubSerververbindungen wird das komplette Ergebnis inkl. ID erwartet, siehe hier.

objectstatementid int In XML-Offline und Datenbankverbidungen liefert die Anweisung statement lediglich die IDs der gefundenen Ergebnisse. Im Attribut objectstatementid geben Sie die ID eines weiteren PreviewStatements an, mit dem danach die Inhalte der einzelnen Ergebisse ermittelt werden.

In SOAP- und PubSerververbindungen setzen Sie den Wert immer auf 0.

Einträge mit einem Wert < 0 werden zwar ins Popup aufgenommen, führen aber keine Suche durch und können deshalb als Zeilentrenner im Suchpopup verwendet werden. Setzen Sie dazu gleichzeitig das Attribut name auf den Wert "-".

hasButtonState [optional] int Liefert die Anweisung den Status des Ladenbuttons der Listeneinträge? Mehr dazu siehe hier.
hasLinkScript [optional] int Enthält die Anweisung eine Angabe für die ID des Link-Sriptes? Mehr dazu siehe hier.

Hier ein Bespiel für eine gültige Definition in XML. Der Eintrag fügt einen Zeilentrenner in das Suchpopup ein. Dazu wird der Name auf "-" gesetzt. Damit der Eintrag überhaupt in das Popup aufgenommen wird, muss auch die objectstatementid gesetzt werden. Da nichts geladen werden soll, hier eine -1.

<previewstatements>
    <previewstatement>
        <id>50</id>
        <name>-</name>
        <classid>6</classid>
        <needsselection>0</needsselection>
        <condition></condition>
        <statement></statement>
        <objectstatementid>-1</objectstatementid>
        <sequencenr>50</sequencenr>
        <isdefault>0</isdefault>
        <hasButtonState>0</hasButtonState>
        <hasLinkScript>0</hasLinkScript>
    </previewstatement>
</previewstatements>

Suchanweisungen für XML und Datenbankverbindungen werden in zwei Schritten ausgeführt :

  1. Suchen der Listen-IDs
  2. über die objectstatementid wird der previewstatements-Eintrag zum Laden der Listeninhalte ermittelt und die einzelnen Listeneinträge werden geladen.

Suchanweisungen für PubServer und SOAP-Verbindungen werden in einem Schritt ausgeführt, der IDs und anzuzeigende Werte gleichzeitig abgeholt,

Mit zusätzliche Bedingungen kann die Ergebnisliste auf die Angaben der Suchfelder eingeschränkt werden.

Diese Anweisung wird nur bei XML und Datenbankverbindungen ausgeführt. Für SOAP- und PubServer Verbindungen siehe hier. Die Anweisung muss folgende Werte liefern :

Typ Beschreibung
int, int, int, string ID des Eintrages.

Die ID entspricht üblicherweise einer gültigen ID eines Objektes der angegebenen Klasse mit der ein Platzhalter im Dokument neu verknüpft werden kann.

Bei Snippets ist es die ID des Templates, das eingesetzt werden soll. Ist nichts anderes angegeben, wird dabei als Datenquelle pageitems.data verwendet. Wollen Sie eine andere Datenquelle verwenden, müssen Sie das im Statement der einzelnen Einträge angeben (siehe hier).

int ClassID des Eintrages. In aller Regel tragen Siehier eine 3 (für die Produktrecherche) ein.
int, int, int, int Freie Schlüsselwerte. Auf diese Werte kann beim Laden der Einträge mit der Anweisung objectstatementid mit <key1>, .., <key4> zugegriffen werden.
string Freier Schlüsselwert. Auf diesen Wert kann beim Laden der Einträge mit der Anweisung objectstatementid mit <stringkey> zugegriffen werden.

Mit Alt-Click in das Suchpopup können Sie Einträge editieren.

Hier eine gültige XML-Anweisung zum Laden der IDs. Zur besseren Lesbarkeit sind die Anführungzeichen, > und < hier nicht XML-codiert. Wenn Sie den Anweisungstext direkt in eine XML-Datei einsetzen, müssen Sie direse Zeichen also noc h XML-kodieren.

"$FLOWERS"
select
    id, 0, 0, "", <!-- ID             -->
    3,            <!-- class          -->
    0, 0, 0, 0,   <!-- <key1>, ...    -->
    ""            <!-- <stringkey>    -->
node flowers.flower where id &gt; 0

Hier eine gültige SQL-Anweisung zum Laden der IDs. Alle Einträge der Tabelle comet_snippets_2 sollen in der Liste gezeigt werden.

select
    id, 0, 0, '', 3, 0, 0, 0, 0, '', 1, 1
from comet_snippets_2 where id > 0

[XML und Datenbankverbindungen] Die Listeneinträge werden mit Hilfe der Ergebnisse der ersten Suchanweisung einzeln geladen. Der Befehl muss einen ?-Wert enthalten, der durch die jeweilige id (also die erste Spalte der übergeordneten Suchanweisung) ersetzt wird. Werden weitere Werte der Listen-Ids benötigt, kann das über die üblichen Tags <ID2>, ... gemacht werden, siehe hier. Zusätzlich können die in der Listensuche definierten Werte <key1>, .., <key4> und <stringkey> abgefragt werden

[PubServer- und SOAP-Verbindungen] Die Listeneinträge werden inklusive ihrer IDs in einem Aufruf geladen. Der Aufruf enthält daher keinen '?'-Wert, mit dem die Listen-ID referenziert werden muß.

Der Wert der (gelb markierten) Ergebnisspalte Path bestimmt den Typ des Eintrages:

Bitte beachten Sie, dass die Ergebnisspalten bis auf die letzten beiden Spalten vollständig sein müssen. Fehlende Einträge können mit 0 bzw. "" gefüllt werden.

Name Typ Beschreibung
• Nur für SOAP-Verbindungen
ID int ID des Preview-Eintrages bestehend aus ID, ID2, ID3 und StringID
ID2 int
ID3 int
StringID string
• Angaben zum Bildeintrag
ImageName string Name des Eintrages

Nur für Bildeinträge mit URL : Ist die Angabe leer und die URL endet mit der ////-getrennten Angabe eines Web-Bildnamens, dann wird der Web-Bildname als Name verwendet.

Path string Nicht-leere Angaben erzeugen einen Bild -, bzw. einen Snippet- Eintrag. Folgende Angaben werden unterstützt:

Achtung : Trotz aller Bemühungen kann es vorkommen, dass URLs nicht aufgelöst werden können. Nicht auflösbare URLs sind nicht Teil des WERK II Supportes! Wenden Sie sich in diesen Fällen gerne an unseren Support, aber bitte haben Sie Verständnis dafür, dass wir Erweiterungen in diesem Bereich als (kostenpfilchtige) Feature-Requests behandeln.

  •   image@statement :  Wie snippet@, aber es entsteht ein Bild-Eintrag und die leere Anweisung wird hier nicht unterstützt.

  •   soap@media-dataImageData : Die Angabe wird nur bei PubServer-Verbindungen unterstützt. Der angelegte Bldeintrag lädt das Bild meta-dataImageData und zeigt als Preview das Bild meta-previewImageData an. ImageData ist eine gültige FileID des Servers.

  •   snippet@statement
    • Ist statement leer, wird das Preview des Templates mit der ID des Datensatzes geladen.
    • Ist statement nicht leer, wird die Anweisung ausgeführt. und das so gefundene Bild geladen. In Datenbankverbindungen werden hier die Binärdaten des Previews erwartet, in allen anderen Fällen ein gültiger (und vollständiger) Dateipfad oder eine URL (siehe oben).

Leer : Texteintrag. Die Angaben zum Bildeintrag (bis zur grünen Zeile) werden ignoriert (müssen aber vorhanden sein!).

Format string Bildformat oder "" Fehlende Angaben versuchen wir, direkt aus den Bilddaten zu lesen. Bitte haben Sie Verständnis dafür, dass wir hier nur die gängigen Bildformate wie JPEG, PNG, GIF usw. unterstützen können.
Bildbreite int Angabe in Pixel oder 0 | 1
Bildhöhe int Angabe in Pixel oder 0 | 1
Auflösung int Angabe dpi oder 0
Farbtiefe int Angabe in Bits pro Pixel oder 0
ButtonState int [Optional] Status des Laden-Buttons. Ist für die Anweisung das Attribut hasButtonState = 1 gesetzt, wird hier der Buttonstatus erwartet :
  • 0 : Unsichtbar
  • 1 : Inaktiv
  • 2 : Aktiv und sichtbar

Ist hasButtonState nicht definiert oder 0, sind die Buttons sichtbar und aktiviert.

LinkScript int [Optional] Aktion, die nach dem Einsetzen ausgeführt werden soll. Ist für die Anweisung das Attribut hasLinkScript = 1 gesetzt, enthält die Angabe die ID der Aktion, die nach dem Einsetzen des Datensatzes ins Dokument für den Zielrahmen/text ausgeführt werden soll.
• Angaben zum Texteintrag oder Snippet. Die Spalten sind auch für Bildeinträge obligatorisch!
Texteintrag (Path == "") Snippet (Path == "snippet@...") Bild
TextName string Textname Zweite Zeile der zweiten Textspalte.

Aus Gründen Rückwärtskompatibilität ist die Reihenfolge der Felder hier leider etwas unübersichtlich.

ignoriert
TextInfo1 string Textbeschreibung Dritte Zeile der zweiten Textspalte ignoriert
TextInfo2 string ignoriert Erste Zeile der zweiten Textspalte ignoriert
Content string Textinhalt. Die Angabe darf TaggedText enthalten. Für die Paletten-Anzeige werden die Tags ausgefiltert und nur der reine Text gezeigt. Snippetbeschreibung, zweite Zeile der ersten Textspalte Bildpositionierung, siehe hier.
SnippetTable string [optional] ignoriert Snippet aus einer eigenen Quelle laden : Name und Attribut der Tabelle, aus der ein Snippet geladen werden soll (z.B. "comet_snippets_2", "data"). Fehlen die Angaben, werden Snippets aus pageitems.data geladen. Siehe unter Eigene Datenquellen. ignoriert
SnippetAttr string [optional] ignoriert ignoriert

Für Bilder können in der Ergebnisspalte Content Hinweise über die Positionierung, den Freistellpfad, etc. angegeben werden. Die Angaben entsprechen den Informationen, die auch in Bildplatzhaltern gegeben werden mit dem einzigen Unterschied, dass Freistellpfade immer über ihren Index und nicht über ihren Namen identifiziert werden müssen. Die Angaben müssen in folgendem Format (und ohne Kommas getrennt) gemacht werden :

Typ Beschreibung Default
int Bildposition 5
double Bildgrösse 0.0
int Index des Freistellpfades (siehe frame::image) -2
int Freistellparameter 4
int Clip to frame 0
double Tolerance 0.0
double Minimale Pfadgrösse 0.0
double Inset 0.0
int Index des Alphakanales (siehe frame::image) -2
String Name des Alphakanales (siehe frame::image) ""

Werden nur Defaultwerte verwendet, dürfen die Angaben auch fehlen. Gültige Positionierungsinfo wären also:

Die hier beschriebenen Snippets sind unterschiedlich zu den mit Comet 4.0.5 eingeführten Comet-Snippets. Eine Beschreibung der Comet-Snippets finden Sie hier.

Hier einige Beispiele für Snippet-Defintionen:

Datenpool Beispiel Beschreibung
XML snippet@ Verwende den Eintrag aus pageitems.xml mit der ID der Zeile
snippet@'pageitems.xml' select preview.src node pageitems.pageitem where id = <ID> Lade den Dateipfad
SQL snippet@ Dateiblob mit Zeilenid aus pageitems verwenden
snippet@select preview from pageitems where id = <ID> Dateiblob verwenden
SOAP snippet@ Verwende den Eintrag aus pageitems.xml mit der ID der Zeile
snippet@pageitems/preview/&lt;ID&gt;.gif Verwende eine FileID. Die Datei wird mit getBinaryFile geladen. Achten Sie darauf, bei der Verwendung von call oder anderen SOAP-Anweisungen vor der Anweisung einen Leerstring ('') anzugeben.
snippet@'pageitems.xml' select preview.src node pageitems.pageitem where id = &lt;ID&gt;
snippet@'' call ...

Die beiden letzen Spalten SnippetTable und SnippetAttr der Anweisungen zum Laden der Preview-Einträge sind optional und werden nur bei Snippet-Einträgen ausgewertet. Sie enthalten in diesem Fall die Beschreibung, wo nach den Snippets gesucht werden soll. Fehlen die Angaben, werden automatisch "pageitems" und "data" verwendet.

Die Spalten geben den Unterordner im XML-Datenordner an, in dem sich die Snippets befinden. In diesem Unterordner befinden sich Snippets als Dateien unter ihrer ID. Folgende Formate werden unterstützt : INDD, INDS, IDMS.

Das Format kann im zweiten Unterordners als Zahl und durch Komma getrennt mitgegeben werden (1 INDD, 2 INDS, 3 IDMS). Fehlt die Formatangabe, werden INDDs erwartet.

"snippets", "data"  lädt für die Snippet-ID 4 die Datei:

xml-ordner/snippets/data/4.indd

Snippets im InDesign®-Snippet-Format IDMS : "snippets", "data, 3"  lädt für die Snippet-ID 4 die Datei:

xml-ordner/snippets/data/4.idms

Die Spalten geben Tabelle und Attribut (in dieser Reihenfolge) an, an der die Snippets abgelegt sind. Die Tabelle muss zudem das int-Attribut format haben. Dieses Attribut definiert das Format der Daten im BLOB (1 INDD, 2 INDS, 3 IDMS).

"snippets", "data" führt folgende Anweisung zum Laden des Snippets aus:

select data, format from snippets where id = 4;

Die ID des Snippets plus eine Dateiendung werden als SOAP-ID verwendet. Die beiden Spalten werden dieser SOAP-ID vorangestellt. Auch hier darf, wie bei XML, im zweiten Paramenter eine kommagetrennte Formatangabe gemacht werden (1 INDD, 2 INDS, 3 IDMS). Die Formatangabe wird nicht Teil der SOAP-ID.

"snippets", "data"  lädt für die Snippet-ID 4 das Objekt

snippets/data/4.indd

"snippets", "data, 3"  lädt für die Snippet-ID 4 das Objekt

snippets/data/4.idms

Hier für jeden Preview-Typ ein statement-Beispiel für XML-Offline. In allen drei Beipielen sind die Spalten ButtonState und LinkScript nicht enthalten, in der Defintion der Anweisungen in PreviewStatements müssen also die Attribute hasButtonState und hasLinkScript beide auf den Wert 0 gesetzt werden!

Zur besseren Lesbarkeit sind die Anführungzeichen hier nicht XML-codiert. Wenn Sie den Anweisungstext direkt in eine XML-Datei einsetzen, müssen Sie diese Zeichen also noch XML-konform kodieren.

"pageitems.xml"
select
    "Image Name",
    "$DESKTOP/Bilder/orange.jpg",
    "Image Format",
    400, 300, 360, 8,
    <!-- Omit ButtonState and LinkScript -->
    "",
    "",
    "",
    ""
node pageitems.pageitem where id = ?

Setzen Sie in den Spalten Format und ImageInfo1-4 leere Angaben ein, werden die entsprechenden Bildinformationen intern automatisch berechnet:

"pageitems.xml"
select
    "Image Name",
    "$DESKTOP/Bilder/orange.jpg",
    "",
    0 0 0 0,
    <!-- Omit ButtonState and LinkScript -->
    "",
    "",
    "",
    ""
node pageitems.pageitem where id = ?

"pageitems.xml"
select
    "Image Name",
    "snippet@",
    "",
    0, 0, 0, 0,
    <!-- Omit ButtonState and LinkScript -->
    "",
    "Column 1",
    "Column 2",
    "Text Content"
node pageitems.pageitem where id = ?

"pageitems.xml"
select
    "Text Name",
    "",
    "",
    0, 0, 0, 0,
    <!-- Omit ButtonState and LinkScript -->
    "",
    "Column 1",
    "",
    "%!TT&lt;cSsize:24.0&gt;Text Content"
node pageitems.pageitem where id = ?

Der Status des Laden-Buttons in den einzelnen Zeilen der Liste kann beim Laden der Listeneinträge definiert werden. Folgende Einstellungen sind möglich :

Ist nichts anderes angegeben, sind die Buttons sichtbar und aktiv. So schränken Sie die Verfügbarkeit der Buttons ein :

  1. Erweitern Sie die Tabelle/Datei previewstatements um das int-Attribut hasButtonState. Unter SOAP und XML muss dabei jeder Knoten <previewstatement> das neue Attribut bekommen! Setzen Sie den Wert in allen Einträgen der Tabelle/Datei dabei auf 0.
  2. Ändern Sie im gewünschten Objektstatement den Wert von hasButtonState auf 1.
  3. Fügen Sie in die Spalte ButtonState Folgende Werte sind definiert :
  4. Die Suchmethoden werden beim Verbinden mit dem Datenpool gelesen. Sie müssen sich daher jetzt einmal neu anmelden.

[Ab Version 3.1 R 1730, 5. Feb. 2010] Listeneinträge können auch mit Hilfe eines Skriptes geladen werden. In diesem Fall enthält das Attribut statement zum Laden einfach ein Skript.

Für Skripteinträge sind keine weiteren Previewstatements zum Füllen der einzelnen Listeneinträge nötig. Sie füllen die Listeneinträge direkt im Skript. Damit der Eintrag im Suchpopup erscheint, muss objectstatementid auf einen Wert ungleich 0 gesetzt werden.

Die folgende Tabelle gibt die in diesen Skripten definierten globalen Variablen an:
Name Typ Beschreibung
gProducts IDTypeList Ergebnisliste der Previews, die gezeigt werden sollen
gButtonState int* Status des Ladenbuttons des Previews (ab Comet 3.1 R2178, 22. Okt. 2010)
  • 0 : Unsichtbar (für alle Produkte der Liste gProducts)
  • 1 : Inaktiv (für alle Produkte der Liste gProducts)
  • 2 : Sichtbar und aktiv (für alle Produkte der Liste gProducts)
  • -1 : Der Wert wird mit product::set mittels kPreviewButtonState in den einzelnen Produkte definiert

Achtung : Setzen Sie *gButtonState = -1, muss der Wert kPreviewButtonState in jedem Produkt definiert werden. Umgekehrt gilt : Wollen Sie die Werte in jedem Produkt einzeln setzen, müssen Sie in Ihr Skript die Anweisung

    *gButtonState = -1;

einfügen.

gLinkScript int* ID der Aktion, die nach dem Einsetzen des Eintrages (Text oder Bild) ausgeführt werden soll, siehe hier.

Geben Sie hier einen Wert >= 0 wird er für alle Einträge der Liste gProducts verwendet. Sonst setzen Sie den Wert jeweils mit product::set und dem Slot kPreviewLinkScript.

Achtung : Setzen Sie *gLinkScript = -1, muss der Wert kPreviewLinkScript in jedem Produkt definiert werden. Umgekehrt gilt : Wollen Sie die Werte in jedem Produkt einzeln setzen, müssen Sie in Ihr Skript die Anweisung

    *gLinkScript = -1;

einfügen.

gSearchField1, gSearchField2 char*, char* [seit v3.3 R2660, 26. Sept. 2011] Aktuelle Werte der beiden Suchfelder. Im Gegensatz zu PreviewStatements, die eine Select-Anweisung ausführen, werden die Inhalte der Suchfelder hier nicht automatisch durch '%' verlängert.

Die Einträge, die in der Liste erscheinen sollen, werden in die globale Produktliste gProducts des Skriptes eingefügt. Achten Sie darauf, die einzelenen Einträge mit kGlobalStack zu erzeugen. Alle Angaben in den Einträgen werden wie bei den normalen Listen auch behandelt. Sie legen also z.B. Texteinträge dadurch an, dass Sie die Pfadangabe auf leer ("") setzen. Eine Beschreibung der definerten Werte für Previews finden Sie unter product::set.

Hier ein Beispiel:

#include "internal/types.h"
#include "internal/text.h"
#include "internal/products.h"
	
int create_preview (
		int			i1,
		int			i2,
		int			i3,
		char	*	s1,
		char	*	name,
		char	*	path,
		char	*	fmt,
		int			w, 
		int			h,
		int			res,
		int			depth,
		char	*	descr,
		char	*	info1,
		char	*	info2,
		char	*	info3,
		int			clid,
		int			del)
	{
	Product			p		= 0;
	
	p = product::alloc (kGlobalStack);
		
	product::set (p, kID, 					i1);
	product::set (p, kID2, 					i2);
	product::set (p, kID3, 					i3);
	product::set (p, kStringID, 			s1);
	product::set (p, kPreviewName, 			name);
	product::set (p, kPreviewPath, 			path);
	product::set (p, kPreviewFormat,		fmt);
	product::set (p, kPreviewWidth, 		w);
	product::set (p, kPreviewHeight, 		h);
	product::set (p, kPreviewResolution, 	res);
	product::set (p, kPreviewBitDepth,		depth);
	product::set (p, kPreviewTextName, 		descr);
	product::set (p, kPreviewInfo1, 		info1);
	product::set (p, kPreviewInfo2, 		info2);
	product::set (p, kPreviewText, 			info3);
	product::set (p, kPreviewClassID,		clid);
	product::set (p, kPreviewToDelete, 		del);
		
	productlist::append (gProducts, p);
		
	return 0;
}
	
int main ()
{
	Product		p;
		
	create_preview (
				2, 0, 0, "", 
				"Qualitätsarbeit", "$DESKTOP/12.idml", "", // Format leer!
				0, 0, 0, 0, 	
				"Bild1", "info-1", "info-2", "info-3",
				0, 0);
	
	create_preview (
				3, 0, 0, "", 
				"Tantarantana", "$DESKTOP/Bilder/tantarantana.jpg", "JPG",
				100, 200, 72, 8, 	
				"Bild1", "info-1", "info-2", "info-3",
				0, 0);
			
	create_preview (
				14, 0, 0, "", 
				"Ein Text", "", "",	// Pfad leer!
				0, 0, 0, 0, 
				"Textname", "Info1", "info2", "Und das ist der Text : &lt;0x00FC&gt;äöü",
				0, 0);
	
	create_preview (
				17, 0, 0, "", 
				"Kho Payam", "snippet@", "JPG",
				700, 800, 75, 64, 
				"Bild4", "info-10", "info-11", "info-12",
				0, 0);
		
	return 0;
}

Platzhalter- und produktabhängige Suchen fragen vor dem Auslösen der Suche, ob die Suche überhaupt ausgeführt werden soll. Dazu wird die Angabe condition geprüft. Der String muss eine gültige boolsche Bedingung enthalten. Die Bedingung wird lokal geprüft, darf also keine Datenbankanweisungen enthalten.

Hier eine gültige Bedingung. Die Bedingung testet, ob im Dokument ein Platzhalter ausgewählt ist und ob dieser Platzhalter ein Produkt ist. Näheres über die erlaubten Tags erfahren Sie hier.

    <selection.placeholder> > 0
and <selection.class> = 3

In den Anweisungen der Suchmethoden kann mit Hilfe üblichen Tags auf globale Werte der Umgebung zugegriffen werden. Beachten Sie aber, dass Sie nur auf Werte zugreifen können, die global definiert sind, also etwa der Wert von <page> undefiniert ist.

Für die platzhalterabhängige Suche (needsselection == 1) sind folgende zusätzliche Werte definiert. Die Tags enthalten jeweils die Werte des ersten gefundenen Platzhalters im Dokument. Die Tags können, soweit nicht anders angegeben, in allen Anweisungen zum Laden der Listen-IDs, Listeneinträge und Testen der Suchbedingung verwendet werden.

Name Typ Beschreibung
<selection.ID> int ID des ersten im Dokumentes ausgewählten Platzhalters.
<selection.ID2>
<selection.ID3>
<selection.stringID> string
<selection.placeholder> int Platzhalter-ID des ersten im Dokument ausgewählten Platzhalters
<selection.class> int ClassID des ersten im Dokument ausgewählten Platzhalters
<selection.text> string Text der aktuellen Dokumentauswahl (auf max. 4000 Zeichen gekürzt). Ist die Textauswahl nicht aktiv, ist der String leer.
<selection.tagtext> string
<selection.tagpath> string Bildpfad des aktuell ausgewählten Platzhalterrahmens. Ist kein Platzhalterrahmen ausgewählt oder kein Bild definiert, ist der String leer.
Nur definiert beim Laden der Listeneinträge (objectstatementid = 0)
<ID> int ID, die beim Laden der Listen-IDs ermittelt wurde.
<ID2>
<ID3>
<StringID> string
<key1> int Werte aus der zugehörigen Anweisung zum Laden der Listen-IDs
<key2>
<key3>
<key4>
<stringkey> string

Für die produktabhängige Suche (needsselection == 2) sind folgende zusätzliche Werte definiert. Die Tags enthalten jeweils die Werte des ersten ausgewählten Produktes der Produktrecherche. Die Tags können, soweit nicht anders angegeben, in allen Anweisungen zum Laden der Listen-IDs, Listeneinträge und Testen der Suchbedingung verwendet werden.

Tag Typ Beschreibung
<product.id> int

ID des ersten ausgewählten Eintrages der Produktrecherche

<product.id2> int
<product.id3> int
<product.stringid> string
<product.pageitemid> int Mit welchem Tepmplate soll der erste ausgewählte Eintrag der Produktrecherche geladen werden?
<product.docid> int Informationen für den Rasteraufbau von Comet 3.0. Die Angaben werden von Comet 4.0 weiter unterstützt aber nicht mehr verwendet.
<product.masterpage> string
<product.grid> string
<product.gridid> int
<product.element> string
<product.elementid> int
<product.needsrequest> int
<product.defined> int
<product.level> stringlist::getint Absolute Schachtlungstiefe im Produktbaum
<product.substatement> string Bei Einträgen mit Unterelementen die Anweisung zum Laden der Unterelemente. Sonst leer.
<product.classid> stringlist::getint Klassen-ID des ersten ausgewählten Eintrages der Produktrecherche
<product.row1> stringlist::gettext Text der ersten/zweiten Textspalte des ersten ausgewählten Eintrages der Produktrecherche
<product.row2> stringlist::gettext
<product.pre_ruleid> int ID und Parameter der Regeln zum Vorbereiten und Nachbearbeiten des ersten ausgewählten Eintrages der Produktrecherche. In Comet 4-Anwednungen haben diese Parameter keine Bedeutung mehr.
<product.pre_ruleparams> string
<product.post_ruleid> int
<product.post_ruleparams> string
<product.adparams> string
<product.snippet_attr> string Name des Datenbank/XML-Attributes, in dem das Snippet gespeichert wird.
<product.buttonstate> int Siehe oben unter gButtonState
<product.linkscript> string>int Siehe oben unter gLinkScript

[Ab v4.3 R35700] Alle für die Suchbedingungen definierten Tags können auch direkt in Skripten verwendet werden. Schreiben Sie dazu die Tags direkt und mit den spitzen Klammern in ihren Skripttext. Die Tags werden vor der Ausführung automatisch durch ihre Werte ersetzt.

Im Besipiel wird <product.id> vor der Ausführung automatisch durch die ID des ersten ausgewählten Produktes (oder 0) ersetzt.

if (<product.id> == 120)
{
	...
}

Die automatische Ersetzung der Tags geht natürlich nicht, wenn Sie den Text eines Tags, z.B. <product.id>, auch in einer anderen Bedeutung, z.B. als Textausgabe verwenden!

In Versionen vor v4.3 R35700 sind diese Tags in Skripten nicht definiert. Sie können die entsprechenden Informationen aber leicht mit Hilfe entsprechender cScript/Python-Funktionen ermitteln. Platzhalter-relevante Infos etwa erhalten Sie mit Hilfe der Funktionen textmodel::selection und placeholder::(s)get_value.

Ermittle die Produkt-ID plid des ersten ausgewählten Platzhalters im Dokument.

ItemRef		frame 	= item::alloc ();
ItemList	frames 	= itemlist::alloc ();
int			s, e;
int			plid = 0;
char		sid [5000];
		
textmodel::selection (&s, &e, frame, frames);
if (s < 0) frame	= itemlist::get (frames, frame, 0);
plid = placeholder::get_value (frame, "ID", s);
item::release (frame);
itemlist::release (frames);

Produkt-relevante Infos erhalten Sie etwa mit Hilfe der Funktionen stringlist::alloc (3, kSelected) oder productlist::get ("selected").

Ermittle die ID plid des ersten ausgewählten Eintrages der Produktrecherche.

#include "internal/panels.h"
		
StringList	sl = stringlist::alloc (kPanelProducts, kSelected);
int			plid = 0;

if (stringlist::length (sl) > 0)
{
	plid	= stringlist::getint (sl, 0, "ID");
}

[ab v3.3 R2660, 26. Sept. 2011] Die Ergebnisliste kann mit zwei Suchfeldern eingschränkt werden. Auf die Inhalte der Suchfelder kann wie folgt zugegriffen werden :

Anweisungstyp Beschreibung
select, xmlquery, SOAP-Call

<SearchField1>, <SearchField2>

Die Tags werden jeweils durch den aktuellen Inhalt der Suchfelder plus '%' ersetzt. Sollen die Suchkriterien Strings ersetzen, müssen die Tags ebenfalls in gültige Anführungszeichen gesetzt werden.

<SearchField1_nopercent>, <SearchField2_nopercent>

Diese Tags werden mit dem aktuellen Inhalt der Suchfelder ohne '%' ersetzt. Sollen die Suchkriterien Strings ersetzen, müssen die Tags ebenfalls in gültige Anführungszeichen gesetzt werden.

cScript

char * gSearchField1, gSearchField2;

Die beiden Variablen sind mit den aktuellen Inhalten der Suchfelder gefüllt. Es wird kein '%' an den Inhalt angefügt.

Die Suchfelder können anweisungsbezogen beschriftet werden. Dazu können Sie in den Definitionen der Previewstatements dem Namen des Eintrages die Namen der Suchfelder jeweils durch ## getrennt anfügen. Die einzelnen Namensteile werden jeweils übersetzt.

Hier eine XML-Definition eines Previewstatements mit eigenen Namen für die Suchfelder:

<id>1004</id>
    <name>Einige Templates (Script)##Namensanfang##ID kleiner</name>
    <classid>6</classid>
    <needsselection>0</needsselection>
    <condition></condition>
    <statement>...</statement>
    <sequencenr>0</sequencenr>
    <domain></domain>
    <isdefault>0</isdefault>
</previewstatement>

Die Einträge der Liste können auf Doppelklicks reagieren. Die auszuführenden Aktion wird wie folgt definiert :

  1. Mit Hilfe des Panelstatements 97 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;
}

Nach dem Einfügen ins Dokument können die neuen Daten mit dem sog. Link-Skript nachbearbeitet werden. Sie können in diesem Skript beispielsweise die Objekt-ID des Zielplatzhalters neu setzen.

Das Link-Skript wird im Hilfetext der Einträge angegeben.

So definieren Sie ein Linkskript für einen Eintrag der Previewpalette.

  1. Erweitern Sie previewstatements um das int-Feld hasLinkScript. Die Felder werden mit dem Wert 0 initialisiert.
    Bei XML-Dateien müssen Sie auf die Schreibweise achten und darauf, dass das Attribut in jedem Eitrag eingefügt wird.

  2. In allen Anweisungen zum Laden der Listeneinträge, die ein Linkskript ausführen sollen, setzen Sie den Wert von hasLinkScript auf den Wert 1.

  3. Das LinkSkript wird über die ID einer Aktion definiert. Diese ID wird in die Ergebnisspalte LinkScript der Anweisung eingetragen.

    Beachten Sie auch, wenn Sie den Ladenbutton deaktivieren oder unsichtbar machen, gibt es auch keine Situation, in der ihr Linkskript ausgeführt werden könnte.

    Werden die Listeneinträge mit Hilfe eines Skriptes geladen, können Sie das Linkskript mit folgender Anweisung setzen :
        
    product::set (your_entry, kPreviewLinkScript, your_action_id);

  4. Definieren Sie Aktion, deren ID Sie im Punkt 3 übergeben haben. Mehr dazu im nächsten Absatz.

In den Linkskripten sind die folgenden globalen Variablen definiert:

Name Typ Beschreibung
gRecordID int

ID des Previeweintrages, der das Skript ausgelöst hat.

gRecordID2
gRecordID3
gRecordStringID string
gRecordStringID1
gRecordStringID2
gRecordStringID3
gImageAlign int Einstellung von Bildposition und -skalierung in der Palette Previews
gImageSize float Zur Zeit immer 0.0
gInsertedFrames ItemList

Snippets können neue Rahmen ins Dokument einfügen. Die Liste enthält die neu eingefügten Rahmen. Wurden keine Rahmen eingefügt, ist diese Liste gleich 0.

Rahmen können auch als Inline-Rahmen eingefügt werden. Beachten Sie die Einschränkungen, die für Inline-Rahmen gelten. Sie dürfen diese Rahmen beispielsweise nicht einfach auf eine neue Seite oder eine andere Ebene verschieben.

gSnippetStart int

Aktuelle Einfügeposition und -länge bei Textersetzungen.

Werden die Inhalte von Textplatzhaltern durch einfache Texteinträge ersetzt, sind diese Angaben identisch zu gStart und gLen. Beim Einfügen von Textsnippets wird der Platzhalter aber entfernt, gStart ist dann 0, gLen die Länge des gesamten Textes. Damit Sie die aktuellen Textpositionen trotzdem wissen, gibt es gSnippetStart und gSnippetLen.

Werden Snippetrahmen ins Dokument eingesetzt (und nicht als Inlines in den Text) haben die Variablen folgenden Werte :

    gSnippetStart = 0;
    gSnippetLen= -1;

gSnippetLen

Die Skripte für Text, Bild und Snippet unterscheiden sich im grundsätzlichen Aufbau ein wenig. Hier für jeden Fall ein Beispiel.

Ein Text wurde eingesetzt (nicht durch ein Snippet). Die ID des Previeweintrages soll danch als Objekt-ID verwendet werden. Zur Demonstration wird an den neuen Text noch ein weiterer Text angefügt.

Achtung : Im allgemeinen ist das so natürlich nicht ganz richtig. Die IDs der Previewliste sind normalerweise keine gültigen Objekt-IDs. In diesem Fall hätten Sie ja die Produktpalette verwenden können.

int main ()
{
	placeholder::link (
			gFrame,
			3,
			gRecordID, gRecordID2, gRecordID2,
			gStart, gLen,
			gRecordStringID);
	textmodel::append ("AAA");

	return 0;
}

Ein Bild wurde ersetzt. Vergrössere es rahmenfüllend und zentriere es.

int main ()
{
	frame::fit_image (gFrame, 1);
	frame::fit_image (gFrame, 5, 5);
	return 0;
}

Ein Snippet wurde eingesetzt. Wurde Text ersetzt (auch durch Inline-Rahmen), wird hinter dem neuen Text eine Markierung eingesetzt. Wurden Seitenrahmen eingesetzt, bekommen diese eine zufällige (aber jeweils gleiche) Farbe.

int main ()
{
	if (gSnippetLen >= 0)
	{
		textmodel::insert ("by action 905", gSnippetStart+gSnippetLen);
	}
	else if (gInsertedFrames)
	{
		itemlist::apply (
				frame::color_rgb,
				gInsertedFrames,
				0, random (255), random (255), random (255), -1, -1);
	}

	return 0;
}

[ab v4.0.5 R8410] Comet-Snippets sind InDesign®-kompatible Versionen aufgebauter Produkte. Sie können an beliebiger Stelle in Dokumente eingefügt werden. Comet4-Snippets können eindeutig zugeordnet werden in der Kombination der folgenden drei Angaben:

  1. Dokument. Hat das Dokument eine PubServer-DocumentID, wird diese ID zur Unterscheidung der Dokumente verwendet, sonst wird der vollständige Dokumentpfad verwendet (oder, bei neuen Dokumenten, der Dokumentname).
  2. Template
  3. Produkt

Comet-Snippets können nicht über mehrere Seiten gehen. Beim Sichern von Snippets werden daher auch nur Produkte gesichert, die keine Fortsetzungen haben. Zum Anlegen und Löschen von Comet-Snippets verwenden Sie die Buttons +, •, x der Previews-Palette oder die Skriptbefehle productlist::create_snippets und productlist::remove_snippets.

Im Produktaufbau kann entschieden werden, ob Produkte jeweils neu aufgebaut werden sollen oder ob ein Comet4-Snippet verwendet werden soll. Beim Einfügen von Snippets werden keine Platzhalterdaten geladen und keine weitere Gestaltungsregeln ausgeführt.

Im Popupmenü der Suchmethoden befinden sich zwei Methoden zum Anzeigen der verfügbaren Comet-Snippets:

Die Menüs sind nur verfügbar, wenn die aktuelle Datenverbindung Comet-Snippets unterstützt (Mehr dazu siehe hier.)
Die Menüs werden immer ans Ende der Suchmethoden angefügt.

Mit der Checkbox an Dokumentauswahl/Produktauswahl anpassen können Sie das automatische Neuladen der Snippets unterdrücken.

Achtung: Die hier beschriebenen Snippets sind nicht identisch mit den oben beschriebenen Comet-Snippets.

Hier eine gültigeSQL-Anweisung zum Laden der Preview-IDs. Alle Einträge der Tabelle comet_snippets_2 sollen in der Liste gezeigt werden.

select
    id, 0, 0, '', 3, 0, 0, 0, 0, '', 1, 1
from comet_snippets_2 where id > 0

Passend zum zweiten Beispiel des Listenladens hier die Anweisung zum Laden der Snippeteinträge. Die Snippets werden nicht aus der Standardtabelle pageitems geladen, auch die IDs stammen nicht aus dieser Tabelle. Damit beim Einsetzen eines Snippets in ein Dokument die richtige Datendatei verwendet wird, müssen Tabelle (comet_snippets_2) und Attribut (data) der Datenquelle hier angegeben werden.

select
    name,
    "snippet@select preview from comet_snippets_2 where id = <ID>",
    "" ,
    CONVERT (rightPos-leftPos, UNSIGNED), CONVERT (bottomPos-topPos, UNSIGNED), 0, 0,
    2,  // hasButtonState der Listensuche auf 1 setzen!
    0,  // hasLinkState der Listensuche auf 1 setzen!
    "Info1", "Info2","info3" , "Snippetbeschr",
    "comet_snippets_2",
    "data"
from comet_snippets_2 where id = <ID>

Die Tabelle comet_snippets_2 muss mind. wie folgt definiert sein (mySQL) :

create table snippets
(
    ID         int(10),
    name       varchar (4000),     
    data       longblob,
    preview    longblob,
    format     int(10),
    leftPos    float(10,4),
    topPos     float(10,4),
    rightPos   float(10,4),
    bottomPos  float(10,4)
);

Und hier ein Beispielskript, wie die Tabelle comet_snippets_2 gefüllt werden könnte.

#include "internal/types.h"
			
int main ()
{
	Query		qu		= sql::query (sql::dbconnection ());
	long		id		= 0;
	char		path	[2000];
	ItemList	frames	= itemlist::selected ();
	Image		img		= 0;
	float		l, t, r, b;
	
	// create content
	strcpy (path, "$DESKTOP/aaa");
	itemlist::create_snippet (frames, path, 1);
	itemlist::bbox (frames, &l, &t, &r, &b);
	img = image::snapshot_frames (frames, 100);
	
	// next free comet_snippet idquery::send (qu, "select max(id) from comet_snippets_2");
	query::output (qu, kInt, &id);
	query::exec (qu);
	while (query::fetch (qu)) {}
	id = id + 1;
	
	// create the new entryquery::send (qu, "insert into comet_snippets_2 (ID, active, leftPos, topPos, rightPos, bottomPos) values (?, 3, ?, ?, ?, ?)");
	query::input (qu, kInt, id);
	query::input (qu, kFloat, l);
	query::input (qu, kFloat, t);
	query::input (qu, kFloat, r);
	query::input (qu, kFloat, b);
	query::exec (qu);
	
	// store snippet
	strcat (path, ".idms");
	query::send (qu, "update comet_snippets_2 set data = ?, preview = ?, format = 3 where ID = ?");
	query::input (qu, kBinfile, path, kCopyLocalFile, "PICT"); 
	query::input (qu, kImage, img);
	query::input (qu, kInt, id);
	query::exec (qu);
	
	// clean up
	query::close (qu);
	image::release (img);
	itemlist::release (frames);
	file::remove (path);
	
	return 0;
}

Bei der Anzeige von Bilddateien ohne Preview wird versucht, aus der angegebenen Datei ein für die Anzeigegröße passendes Preview zu erzeugen. Die Berechnung der Previews kann einige Zeit in Anspruch nehmen, deshalb werden einmal erzeugte Previews auf Ihrer Festplatte aufgehoben. Ändert sich die Originaldatei, wird das Preview automatisch neu berechnet. Die Previews werden in den Voreinstellungen des Benutzers abgelegt :

Die Dateien und Ordner dieser Ablage dürfen gelöscht, aber nicht geändert werden. Mit Hilfe des Buttons können sie auch direkt über die Palette gelöscht werden.

Die Previewdateien enthalten, obwohl ihre Endung das vermuten lässt, keine gültigen Bilddateien des jeweiligen Bildformates und können nicht mit anderen Grafikprogrammen geöffnet werden. Das Format dieser Dateien ist wie folgt (und die eigentlichen Bilddaten des Previews beginnen erst beim letzten Eintrag der Formatbeschreibung):

Datentyp Wert Beschreibung
int flen Länge des folgenden Strings mit der Angabe des Dateiformates
flen chars Dateiformat
int Bildbreite in Pixel
int Bildhöhe in Pixel
int Bildauflösung in dpi
int Farbtiefe (1, 2, 4, 8, 24)
int blen Größe des Previews in Bytes
int Previewbreite in Pixel
int Previewhöhe in Pixel
int Bits pro Bildzeile (für die Farbtiefe des Previews)
int 1 Internes Bildformat
int 24 Intern verwendete Farbtiefe
blen chars Previewdaten