ClassID ID Beschreibung Bemerkungen
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 100 ersetzt (nur bei ODBC-Verbindungen)

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 Nummer für das Icon, das für das Objekt verwendet werden soll
2000 2001 2002 2003 2004
2005 2006 2007 2008 2009
2010 2011 2012 2013 2014
2015 2016 2017 2018 2019
2020 2021 2022 2023 2024
2025 2026 2027 2028 2029
2030 2031 2032 2033 2034
2035 2036 2037 2038 2039
2040 2041 2042 2043 2044
2045 2046 2047 2048 2049
2050 2051 2022 2053 2054
2055 2056 2057 2058 2059
2060 2061 2062 2063 2064
2065 2066 2067 2068 2069
2070 2071 2072 2073 2074
2075 2076 2077 2078 2079
2080 2081 2082 2083 2084
2085 2086 2087 2088 2089
2090 2091 2092 2093 2094
2095 2096 2097 2098 2099

2200

2201
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.
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.

Ab Version 1.4.2 R 504 können die Einträge der Produktrecherche mit eigenen Icons versehen werden. Die folgende Tabelle gibt eine vollständige Liste aller unterstützten Quellen:

Schlüsselwort Quelle Beschreibung Transparenz Beispiel
ImagePath

lokales Dateisystem

Vollständiger Pfad zur Bilddatei

Der Pfad darf mit den gültigen Alias-Name für Ordner beginnen.

keine

ImagePath: "$DESKTOP/../../InDesign/Plugins/Bilder/aaa.png"

IconPath

Weiß

ImageURL

Netz

Gültige URL zur Bilddatei

keine

ImageURL : "http://www.hi13.de/tantarantana.jpg"

IconURL

Weiß

SOAPImage aktuelle SOAP-Verbindung

fieldID einer Bilddatei des SOAP-Dienstes

Es muß eine SOAP-Verbindung bestehen.

keine

SOAPImage : "icons/123"

SOAPIcon

Weiß

Achtung : Vor und hinter dem Doppelpunkt muß in allen Fällen jeweils ein Leerzeichen stehen.

Bilder werden automatisch so skaliert, dass sie vollständig sichtbar sind. Von Bildern, die nicht PNG sind, werden dazu skalierte Versionen der Bilder auf Ihrem Rechner abgelegt: 

    $PREFS/Werk [2]/CS_VERSION/ProductPreviews/17x 17/...       mit CS_VERSION gleich CS6 für ID CS6, CS7 für ID CC, CS8 für ID CC 2014 usw.

Dieser Ordner oder beliebige Einträge dieser Ordner dürfen gelöscht werden - dann werden Previews bei Bedarf automatisch neu erzeugt. Aber Dateien dieser Ordner dürfen nicht geändert werden. Die Bilder sind, auch wenn sie bekannte Bildformate haben, von anderen Grafikprogrammen nicht lesbar.

Damit Icons auf dem skalierbaren Grau der Illustratur Benutzeroberfläche immer sichtbar sind, müssen unterschiedliche Icons für helle und dunkle Oberflächen verwendet werden. Es wird automatisch versucht, Bilddateien mit den folgenden Namenserweiterung zu suchen :

Werden die benötigte Varianten nicht gefunden, wird die Stammdatei ohne zusätzliche Namenserweiterung verwendet.

Auch die Transparenz kann bei unterschiedlichen UI-Farben natürlich nicht mehr Weiß-basiert sein. Verwenden Sie für Transparenzen daher immer PNG-Bilder mit Alphakanal. Die Angabe Image- oder Icon- ist in diesem Fall gleichwertig. Hier ist ein Beispielbild mit den Farben, die auch für die Comet-Icons verwendet werden:

    

Als Pfadtrenner können Sie systemunabhängig / oder \ verwenden.

Bei der Verwendung von \ als Pfadtrenner denken Sie bitte daran, dass dieses Zeichen, wie in Strings üblich, mit \ maskiert werden muss, also als \\ angegben werden muss. Da auch die meisten Programme zur Bearbeitung von Datenbankinhalten erwarten, dass \ verdoppelt wird, wenn Sie es in einem insert oder update übergeben wollen, müssen Sie also bei der Definition der Suchanweisung in den meisten Fällen alle \ als \\\\ übergeben:

    select
      1, 0, 0, a.id,
      3,
      2020,
      a.label, '''',
      0,
      10000,
      0,
      ''A-Mustervorlage'',
      '''',
      ''ImagePath : "
\\\\Users\\\\paul\\\\Desktop/../../InDesign/Plugins/Bilder/buffer.png"'',
      0,
      0,
      0
    from comet_container a, comet_planningtypes r
    where a.container_id=''0'' and a.active = 1 and r.keyname = a.type_name
    order by sort, label

Ob Sie das Zeichen bei der Definition der Suchanweisung für die Datenbank maskieren müssen oder nicht (ob Sie also \\ oder \\\\ schreiben müssen), müssen Sie mit Ihrem jeweiligen Eingabeprogramm testen. Wenn Sie die Suche in der Produktrecherche ausführen, wird die Anweisung ins Logfile geschrieben, dort sollten dann jeweils alle Pfadtrenner als \\ erscheinen. Erhalten Sie dann immer noch kein eingenes Bild, zeigt der Pfad nicht auf ein lesbares Bild.

Hier zwei Beispiele für SQL und XML.

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>

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;
}

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.

Die Palette hat die ClassID 3