Das Dokument beschreibt technische Details zum Einrichten der Palette Tabellenaufbau und Erweiterungen von TaggedText für das comet Tabellenmodul. Am Anfang finden Sie zudem eine Kurzanleitung zur Verwendung des Tabellenmodules

Das Dokument ist kein Handbuch zur Beschreibung des Tabellenaufbaus und dem Umgang mit der Palette Tabellenaufbau und Tabellenplatzhaltern!

Hier ein Screenshot der Palette Tabellenaufbau:

Das Tabellenmodul dient der Darstellung von Produkten, oder allgemeiner, von Objekten mit Varianten und/oder unterschiedlich vielen Eigenschaften in Tabellen. Die Tabelle, einmal konfiguriert und gestaltet, kann dann zur Darstellung aller Objekte mit gleicher Struktur verwendet werden. Eigenschaften können darüberhinaus in Unterblöcken der Tabellen wieder mit weiteren Eigenschaften "gekreuzt" werden.

Von einem eher technischen Standpunkt aus bildet das Tabellenmodul die Kreuzprodukte mehrerer Eigenschaften in einer Tabelle ab.

Hier sehen Sie zwei Produkte, dargestellt mit der gleichen Basistabelle. Das erste Produkt hat zwei Eigenschaften und fünf Varianten, das zweite vier Eigenschaften und acht Varianten.

Im Beispiel findet die Kreuzung der Werte nur auf einer Ebene statt. Es ist aber ohne weiteres möglich, dass etwa in der zweiten Tabelle zur Eigenschaft "Durchmesser vorne" mehere verschiedene "Schreinerhämmer" gefunden werden und einem eigenen Unterblock der Tabelle eingefügt werden.

Hinweis 1 : Zur Eräuterung der Arbeitsweise wird das Tabellentemplate des WERK II Industry Showcases verwendet. Sie können diesen Showcase als mySQL-Datenbank über unseren Support erhalten.

Hinweis 2 : Wenn Sie das Tabellentemplate im Showcase suchen - es ist etwas versteckt: Für die Industry-Einträge der Poduktrecherche wird das Template Standard Produkt Montage (ID 74) verwendet

    

Im Rahmen mit der Kennung B (das ist die rote hinterlegte Beschriftung rechts oben an den Rahmen) wird die Tabelle angelegt. Diese Tabelle kommt wie wie folgt ins Dokument:

- Der Platzhalter des Rahmens B fügt mit frame::replace ein w2-Tag ein, das einen Tabellenplatzhalter erstellt.
- Der Tabellenplatzhalter ermittelt die ID des Templates, in dem die Tabelle ist. Es ist Artikeltabelle Standard mit der ID 58.
- Aus dem so gefundenen Template wird die erste Tabelle des ersten Rahmens in den Rahmen B kopiert.

Dieser lange Weg ist nicht zwingend nötig. Die Tabelle darf natürlich auch direkt im Template stehen.

Achtung : Obwohl der Showcase in der aktuellen Version lediglich deutsche Texte für die Werkzeuge enthält, sind die Platzhalter so konfiguriert, dass Sie auch andere Sprachvarianten ausgeben können. Die Sprache wird dabei über den Namen der Ebene gegeben. Die aktuelle Dokument-Ebene muß also den Namen eines gültigen Sprachkürzels haben. Für Deutsch ist das 'de'.

Setzen Sie den Namen der aktuellen Ebene auf den Namen de.

In den folgdenden Bildern sehen Sie die Ursprungstabelle und die fertig aufgebaute Tabelle eines Werkzeuges (Spenglerrundzangen aus Industry -> Hauptkatalog 2012 -> Montagematerial der Produktrecherche).

Beide sehen recht unterschiedlich aus, aber das Ergebnis ist richtig. Wie konnte das geschehen? Schauen wir uns dazu die kleine Tabelle etwas genauer an.

Zuerst müssen Sie der Tabellen mitteilen, welches Produkt sie anzeigen soll.

Das ist die sog. RootTableRecordID. Im normalen Arbeitsablauf wird diese ID von den Comet-Platzhaltern gesetzt.

Zum Konfigurieren kann man die Tabelle auch manuell verknüpfen. Das geht so:

  1. Setzen Sie den Textcursor irgendwo in die Tabelle.
  2. Suchen Sie das gewünschte Produkt in der Produktrecherche aus. Einfache Markierung genügt, ein Auge muss nicht gesetzt werden.
  3. Klicken Sie unter dem Punkt Aktuelle Verknüpfungen ganz unten in der Palette Tabellenaufbau.

Ich habe die Spenglerrundzangen genommen und erhalte die folgende Angabe (Die Angabe der Zell-ID ist an dieser Stelle noch irrelevant.):

Ich habe keine Ahnung, was genau eine Spenglerrundzangen ist, aber hier ist ein Bild:

    

Die RootTableRecordID sollte jetzt mit der ID des Produktes aus der Produktrecherche (gelber Hilfezettel der Produkte) übereinstimmen.

Die Felder mit den IDs sind editierbar.

Die Tabelle soll zwei Dinge zeigen:

  1. In den Spalten alle Attribute für die Zangen
  2. In den Zeilen alle Varianten der Spengerrundzange.

Kümmern wir uns erstmal um die Attribute. Eine Spalte Attribut gibt es schon, N werden benötigt. Es liegt also nahe, die Spalte Attribut entsprtechend oft zu kopieren und jeweils das Wort Attribut zu ersetzen. Klicken Sie dazu die Zelle mit dem Wort Attribut an und wählen Sie im Popup Einfügen des Bereichs Spalte kopieren den Eintrag Alle Attribte (Keynames) der Artikel eines Produktes. Hinter diesem Popup-Eintrag steht eine Anweisung, die alle Attribute eines Werkzeuges in der Datenbank findet:

Wie diese Anweisung aussehen muss und wo sie herkommt, erfahren Sie weiter unten.

Es werden zwei Attribute gefunden, die Spalte Attribut muss einmal kopiert werden. Das Kopieren entspricht dabei dem InDesign®-Befehl

Die Tabelle sieht jetzt so aus:

Die gefundenen Varianten sollen als Zeilen unter dem Tabellenkopf erscheinen. Analog zu den Attributen wählen Sie jetzt also die Zelle direkt unter Attribut und wählen im Bereich Zeilen kopieren den Eintrag Alle Artikel eines Produktes. Fünf Zangen werden gefunden. Das Tabellenmodul kopiert also viermal die zweite Zeile und die Tabelle sieht jetzt so aus:

Auch noch nicht viel besser. Aber die Anzahl von Zeilen und Spalten stimmt schon mal.

Es ist sicher naheliegend, dass die Inhalte der Zellen zumindest teilweise als Comet-Platzhalter angelegt sind - und so ist es natürich auch:

Es ist natürlich nicht zwingend, überall Platzhalter zu setzen. Z.B. könnte man die Währung fest und ohne Platzhalter hinter dem Preis stehen.

Woher aber kommen die IDs der Platzhalter? Die RootTableRecordID kann es sicher nicht sein, dann wären die Texte am Ende ja nicht unterschiedlich.

Jede Zelle der Tabelle hat drei IDs:

Achtung : Die Begriffe Column- und RowRecordID sind leicht falsch und missverständlich:

  1. Die Begriffe werden gleichermaßen für die gesamte RecordID UND die erste Zahl dieser RecordID verwendet. Achten Sie daher bitte auf den Kontext der Verwendung.
  2. Nach links oder oben (also rückwärts) dürfen Zellen keine Änderungen mehr an der aufgebauten Tabelle vornehmen, die IDs gelten daher immer erst ab der auslösenden Zelle (und dann bis zum Tabellenende).

Aus diesen drei IDs wird die ID der Zelle, die sog. CellRecordID komponiert. Und die CellIDs, das sind dann die IDs, mit denen die Platzhalter geladen werden. Sie haben prinzipiell zwei Möglichkeiten zur Berechnung der CellRecordID:

  1. Die CellRecordID wird direkt aus den drei IDs komponiert.
  2. Eine Anweisung oder ein Skript berechnen die CellRecordID auf der Basis der drei IDs.

Die Berechnung der CellRecordID muss natürlich in jeder Zelle, die Platzhalter enthält, festgelegt werden (und nicht nur in den Zellen, die Zeilen und Spalten duplizieren)!

Die Zusammenstellung der CellIDs erfolgt im Bereich Berechnen der IDs der Zelle.

Fü die Attribute unserer Zange (die Spalten der Tabelle) kann die (einfache) erste Möglichkeit verwendet werden. Der Platzhalter benötigt lediglich die StringID der Spalte, um den Attributnamen aus dem Datenbestand ermitteln zu können.

Da Platzhalter nicht geladen werden, wenn die erste Zahl der RecordID 0 ist, geben Sie ihr ebenfalls einen Wert (hier die ColumnRecordID1 der Spalte).

Wählen Sie also die Zelle [Zeile 1, Spalte 1] der Tabelle aus und komponieren Sie die Cell-ID entsprechend:

Die Varianten der Attribute werden als Zeilen der Tabelle angelegt. Sie sind in diesem Fall etwas schwieriger zu ermitteln. Deshalb gibt es dazu eine eigene bereits fertige Anweisung.

Wählen Sie die Zelle [Zeile 2, Spalte 1] der Tabelle aus und komponieren Sie die Cell-ID entsprechend:

Aktivieren Sie die Checkbox Unabhängige Zellinhalte und wählen dann die Aktion * Ermittle Attribut-Id wie im Bild gezeigt.

Wie diese Anweisung aussehen muss und wo sie herkommt, erfahren Sie weiter unten.

Bleiben noch die inneren Zellen der Tabelle. Das sind einfache Eigenschaften der Varianten, und die sind über die ID der Zeile bereits defniert. Für die Platzhalter der Zellen genügt die ID1 und die StringID.

Setzen Sie die Zell-IDs der Zellen [Zeile 2, Spalte 2] und [Zeile 2, Spalte 3] wie in der Abbildung:

Die Tabelle sieht nach dem Aufbau jetzt so aus:

Wir sind fast fertig. Die Tabelle soll noch auf Rahmenbreite gebracht werden und alle Spalten mit den Attributen sollen gleich breit sein. Dafür gibt es fertige Tabellengestaltungsregeln.

Sie können auch eigene Regeln schreiben. Mehr dazu siehe hier.

Die Konfiguration der Tabellengestaltung machen Sie im Bereich Gestaltung der Palette Tabellenaufbau:

Damit die Tabelle fertig und sieht so aus, wie eingangs gezeigt:

Tabellengestaltungsregeln dienen zum "Polieren" der aufgebauten Tabellen.

Die Regeln werden immer auf definierte Tabellenteile angewendet. Die Zielflächen werden vor jeder Ausführung einer Regel berechnet:

ID Schlüssel Icon Zielfläche Bemerkungen
7 table Gesamte Tabelle

Die Regel wird einmal für die gesamte Tabelle ausgeführt.

8 cells Alle Zellen der Tabelle

Die Regel wird für jede Zelle der Tabelle ausgeführt.

2 self Zelle
3 col Spalte (ab Zelle)
4 row Zeile (ab Zelle)
1 left Zelle links daneben
0 above Darüberliegende Zelle
5 block Gesamter Block

Als Blöcke werden die Teile der Tabelle bezeichnet, die von einer Zelle angelegt wurden. Mit den Buttons und der Palette können Sie die von einer Zelle aufgebauten Tabellenzellen auswählen.

Umgekehrt kann mit die Elternzelle einer Zelle ausgewählt werden.

Die Regeln können entweder einmal pro Block oder einzeln für jede Zelle des Blockes ausgeführt werden.

6 children Alle Zellen des Blockes

Um Benutzern eine Idee davon zu geben, was eine bestimmte Regel machen wird, werden die Tabellengestaltungregels jeweils mit einem Icon dargestellt, das die Intention der Aufgabe zeigt. Folgende Icons stehen zur Verfügung:

ID Icon Intention
0 Unbekannt
1 Skript
2 Zellkanten
3 Füllfarbe
4 Text
5 Breite/Höhe
6 Split, Unmerge
7 Merge
8 Einfügen
9 Berechnung
10 Nachrichten
11 Sichern

Die Intention von Regeln wird ausschließlich zur Darstellung in der Palette verwendet und hat keinerlei Einfluß auf deren Wirkungsweise.

Der Tabellenaufbau verfügt über einen Satz fest eingebauter Standardmethoden zur Tabellengestaltung:

Name Intention
Zusammengehörige Zeilen verbinden In Unterblöcken der Tabelle hat die auslösende Zelle immer den gleichen Wert. Sollen diese Zellen zu einer Zelle verbunden werden?
Zusammengehörige Spalten verbinden
Tabelle auf Rahmenbreite

Eine oder alle Spalten der Tabelle so verbreitern, dass die Tabelle genauso breit wird wie der umgebende Rahmen. Erstreckt sich die Tabelle über mehrere Rahmen, wird die Breite des Rahmens verwendet, in dem die Tabelle beginnt.

Wird die Regel auf eine Spalte oder einen Block angewendet, wird nur die aktuelle Spalte bzw. die erste Spalte des Blockes verbreitert.

Wird die Regel auf die gesamte Tabelle angewendet, wird die Verbreiterung gleichmäßig auf alle Spalten verteilt. Um die Verbreiterung nur auf ausgesuchte Spalten anzuwenden, gehen Sie wie folgt vor:

  • Aktivieren Sie die Eigenschaft "ab J. Spalte jede K.". Dann wird die J-te Spalte verbreitert.
  • Verwenden Sie Gruppenzugehörigkeiten:
    • Die Gruppenzugehörigkeit einer Spalte wird in der ersten Tabellenzeile festgelegt. Fügen Sie der Spalte einen Gruppennamen hinzu, siehe hier.
    • Aktivieren Sie die Eigenschaft "Gruppen prüfen" der Regel und tragen Sie die gewünschte Gruppe rechts daneben in die Liste ein. Die erste gefundene Spalte mit dem angegebenen Gruppennamen wird dann verbreitert.
Gleiche Spaltenbreite

Spaltenbreiten so verändern, dass die Gesamtbreite der Tabelle unverändert bleibt aber jede der gewünschten Spalten gleich breit wird.

Wird die Regel auf eine Spalte oder einen Block angewendet, werden alle Spalten des Blockes auf die gleiche Breite gebracht.

Wird die Regel auf die gesamte Tabelle angewendet, werden alle Spalten gleich breit. Um die Auswahl der Spalten zu verringern, gehen Sie wie folgt vor:

  • Aktivieren Sie die Eigenschaft "ab J. Spalte jede K.". Dann werden die J-te und danach jede weitere K-te Spalte gleich breit.
  • Verwenden Sie Gruppenzugehörigkeiten:
    • Die Gruppenzugehörigkeit einer Spalte wird in der ersten Tabellenzeile festgelegt. Fügen Sie den gewünschten Spalte jeweils den gleichen Gruppennamen hinzu, siehe hier.
    • Aktivieren Sie die Eigenschaft "Gruppen prüfen" der Regel und tragen Sie die gewünschte Gruppe rechts daneben in die Liste ein. Alle Spalten dieser Gruppe werden dann gleich breit.
Spaltenbreite anpassen

Die Spaltenbreiten werden so angepasst, dass keine Zeile der Spalte einen Übersatz hat.

Mit dem Attachment-Button über der Methoden-Liste kann kann die Funktion so verändert werden, dass

  1. Spalten auch schmaler gemacht werden dürfen
  2. Zeilenhöhen erhalten bleiben müssen. In dem Fall kann es natürlich leicht passieren, dass ein Übersatz auch mal nicht behoben werden kann.

Wird die Regel auf eine Spalte oder einen Block angewendet, werden genau diese Spalten angepasst.

Wird die Regel auf die gesamte Tabelle angewendet, werden alle Spalten angepasst. Um gezielt einzelene Spalten anzupassen, gehen Sie wie folgt vor:

  • Aktivieren Sie die Eigenschaft "ab J. Spalte jede K.". Dann werden die J-te und danach jede weitere K-te Spalte gleich breit.
  • Verwenden Sie Gruppenzugehörigkeiten:
    • Die Gruppenzugehörigkeit einer Spalte wird in der ersten Tabellenzeile festgelegt. Fügen Sie den gewünschten Spalte jeweils den gleichen Gruppennamen hinzu, siehe hier.
    • Aktivieren Sie die Eigenschaft "Gruppen prüfen" der Regel und tragen Sie die gewünschte Gruppe rechts daneben in die Liste ein. Alle Spalten dieser Gruppe werden dann in ihrer Breite angepasst.
Gleiche Zellen verbinden

Zellen gleichen Inhaltes verbinden.

Mit dem Attachment-Button über der Methoden-Liste können Sie einstellen, in welcher Richtung (horizontal oder vertikal) zuerst verbunden werden soll, wie "genau" die Textübereinstimmung sein soll und wie der Text in der neuen Zelle ausgerichtet werden soll.

[ab v4.1.6 R25001] Textinhalte können auf vier verschiedene Arten verglichen werden:

  • Formatierungen beachten
  • Formatierungen und Platzhalter beachten
  • Formatierungen ignorieren
  • Formatierungen und Leerzeichen ignorieren

Die Einstellungen entsprechen dem Parameter compareFunction der Funktion table::merge_equal.

Neben dem Textinhalt werden auch die Inlines im Text geprüft. Es gilt:

  1. Inlines müssen in gleicher Anzahl und an den gleichen Textpositionen vorhanden sein
  2. Einstellungen zur Ankerposition der Inlies werden ignoriert
  3. Rahmeneinstellungen wie Größe, Farbe, Rand, Transparenz, ... werden ignoriert
  4. Inlines mit Texten werden immer als unterschiedlich betrachtet.
  5. Für Bildrahmen gilt
    1. Bildpfade müssen gleich sein
    2. Geometrieeinstellungen (Position, Drehung, ...) müssen gleich sein
    3. Gleicher (oder kein) Freistellpfad. Unterschiedliche Einstellungen zum gleichen Freistellpfad werden ignoriert.
    4. Gleicher (oder kein) Alphakanal. Unterschiedliche Einstellungen zum gleichen Alphakanal werden ignoriert.
Zellverbindung aufheben

(seit v4.0.5 R14478) Auflösen verbunderer Zellen

Gestaltungsmethoden für Tabellen können (müssen aber nicht) so implementiert sein, dass sie nur in Zellen arbeiten, die zu bestimmten Gruppen gehören. Die Gruppenzugehörigenkeiten sind daher ein wesentliches Element der Gestaltungsmethoden für Tabellen. Eine Zelle darf zu beliebig vielen Gruppen gehören.

Gruppen für Zellen können auf dreierlei Art vergeben werden:

In den Bereichen "Spalte kopieren" und "Zeile kopieren" können Gruppennamen für die erzeugten Zeilen und Spalten vergeben werden. Tragen Sie dazu in den Feldern Gruppe den gewünschten Namen wie folgt ein:

Die Gruppennamen werden automatisch beim Aufbau gesetzt. Existiert eine Gruppe noch nicht, wird sie angelegt.

Liefert die oben verwendete Anweisung Zeilen anlegen vier RecordIDs, bekommen die Zellen der 12 Zeilen (=4 RecordIDs * 3 Zeilen pro Block) folgende Gruppen:

Zeilen 1-3 :     Tool, Tool_1
Zeilen 4-9 :     Tool
Zeilen 10-12 :   Tool, Tool_N

Die Anweisungen zum Duplizieren von Zeilen und Spalten (siehe hier) können weitere (und beliebig viele) Gruppenzugehörigkeiten liefern. Jede durch eine Anweisung angelegte Zelle wird allen Gruppen zugeordnet, die von der Anweisung mitgegeben wurden. Existiert eine Gruppe noch nicht im Dokument, wird sie automatisch angelegt.

Gruppen können manuell zugewiesen werden. Dazu verwenden Sie die Liste Gruppen der Zelle im Bereich Berechnen der IDs der Zelle.

Mit dem + über der Liste können Sie neue Gruppen anlegen. Jeder neuen Gruppe wird dabei automatisch eine Farbe zugeordnet. Gruppennamen sind frei vergebbar.

Um einer Zelle eine Gruppe zuzuordnen, wählen Sie die gewünschte Zelle im Dokument und klicken einmal den Gruppennamen. Beim nächsten Klick wird der Gruppenname grau - die Zelle gehört nicht mehr zu dieser Gruppe. Im Bild gehört die Zelle zur Gruppe Daimler, aber nicht zu Porsche:

Wenn Sie in das farbige Quadrat der Liste klicken, werden alle Zellen der Tabelle, die zu dieser Gruppe gehören, entsprechend eingefärbt. So können Sie schnell überprüfen, wo die Gruppe überall verwendet wird. Durch erneutes Klicken des Quadrates entfernen Sie die Markierung wieder.

Uns wäre es lieber, hier statt der Einfärberei eine eigene Markierung analog den Platzhalter-Markierungen zeichnen zu können. Leider ist das mit den bisherigen Versionen der InDesign®-Plugin-Entwicklungsumgebung nicht möglich und Adobe hat unser diesbezügliches Flehen leider auch noch nicht erhört.

Mit den Buttons - und A über der Palette können Sie die Gruppen bearbeiten. Dabei wird immer die erste ausgewählte Gruppe der Liste bearbeitet.

Achtung : Wie oben beschrieben können mit normalen Mausklicks in die Liste die Gruppenzugehörigkeiten der Zelle (de)aktivt werden. Wenn Sie Einträge auswählen möchten, geht das mit der rechten Maustaste!

Mehr gibt es über die Gruppen nicht zu sagen.

Aktionen zum Berechnen von RecordIDs können an verschiedenen Stellen der Palette Tabellenaubau verwendet weden:

  1. Die Popupmenüs Einfügen und Auslassen im Bereich Spalte kopieren.
  2. Die Popupmenüs Einfügen und Auslassen im Bereich Zeile kopieren.
  3. Das Popupmenü Unabhängige Zellinhalte im Bereich Berechnung der IDs der Zelle.

Alle Popupmenüs der Palette haben die gleichen Einträge.

Die Anweisungen werden in der Tabelle actions mit der typeid (bzw in actions.xml mit type) 23 definiert.

Achtung : Abweichend von den übrigen Aktionen wird die 23 nicht im Attribut classid sondern in typeid/type angegeben.

Anweisungen zum Laden von RecordIDs müssen immer die folgenden fünf Ergebnisspalten liefern:

Name Typ Beschreibung
ID int übliche Comet ID
ID2
ID3
StringID string
Groups string

Alle mit dieser Anweisung erzeugten Zellen bekommen automatisch die angegebene Gruppen.

Der String kann mehrere, durch Leerzeichen getrennte Gruppennamen enthalten. Gruppenname mit Leerzeichen müssen in doppelte Anführungszeichen eingeschlossen werden.

Im Popup Unabhängige Zellinhalte wird die Angabe igonriert.

In den Anweisungen können zusätzlich zu den üblichen Tags die folgenden Tabellenmodul-spezifischen Tags (jweils in <>) verwendet werden:

Name Typ Beschreibung
RootTableRecordID int ID des Objektes, mit dem die Tabelle verknüpft ist.
RootTableRecordID2
RootTableRecordID3
RootTableRecordStringID char*
ColumnRecordID int ID des Objektes, mit dem die Tabellenspalte verknüpft ist.
ColumnRecordID2
ColumnRecordID3
ColumnRecordStringID char*
RowRecordID int ID des Objektes, mit dem die Tabellenzeile verknüpft ist.
RowRecordID2
RowRecordID3
RowRecordStringID char*
CellRecordID int [seit v3.3.1 R3387] ID des Objektes, mit dem die Tabellenzelle verknüpft ist.
CellRecordID2
CellRecordID3
CellRecordStringID char*
RowParent. - [seit v3.3.1 R3387] Ermittle eine Eltern-ID einer Zelle. Durch mehrfache ~Parent-Angaben kann die "Abstammung" der Zelle zurückverfolgt werden. Hat eine Zelle in der angegebenen Richtung keine Elternzelle mehr, wird der Bezeichner durch 0 bzw. "" ersetzt.

Beispiele für Eltern-IDs

    <RowParent.RowRecordID>
    <RowParent.RowParent.CellRecordID>
    <RowParent.ColParent.CellRecordID>
ColParent.

PubServer spezifische Tags

Siehe hier. Die Werte der Variablen werden aus den StringIDs der jeweiligen RecordIDs ermittelt und haben nur in Comet4-PUBSERVER-Verbindungen sinnvolle Werte. In anderen Verbindungen sind die Variablen zwar definiert, Ihre Inhalte sollten aber nicht verwendet werden.

Hier das Select zum Laden aller Artikel aus dem Beispiel der Zange:

select distinct 1,0,0,i.id,'articles'
from comet_infoobject i
where
i.infoobject_id = <RootTableRecordStringID> and i.keyname = 'Artikel' order by i.id

Wenn Ihnen das lieber ist (oder bei komplexeren Anforderungen) können Sie die IDs und Zellgruppen auch über ein cScript ermittlen. Die RecordIDs werden dabei in die skript-globale Liste gProducts eingefügt. Gruppenzugehörigkeiten werden in die Liste gMoreGroups eingefügt. Die Liste gMoreGroups darf leer bleiben, aber wenn wenn Sie benutzt wird, sollte sie gleich lang wie gProducts sein.

Name Typ Beschreibung
gTable ItemRef

Verweis auf die Tabelle, die aufgebaut wird. Zum Zeitpunkt des Aufrufes ist die Tabelle zurückgesetzt (siehe table::reset) und es sind noch keine neuen Zeilen oder Spalten angelegt.

gRow int Aufrufende Zelle
gColumn
gProducts IDTypeList

Alle Produkte, die von der Aktion in die Tabelle eingefügt werden sollen, werden in diese Liste eingetragen. Verwenden Sie dazu Anweisungen der Form idtypelist::append (gProducts, 1, 0, 0, "");.

Skripte des Produktaufbaus verwenden ebenfalls eine Liste des Namens gProducts, aber diese Liste ist vom Typ ProductList.

gMoreGroups StringList Für jedes in gProducts eingefügte Produkt sollte eine Angabe über zusätzliche Gruppen für die erzeugten Tabellenzellen gemacht werden. Diese Gruppennamen müssen eindeutig sein. Sollen mehrere Gruppen verwendet werden, werden die Gruppennamen durch Leerzeichen getrennt. Gruppennamen mit Leerzeichen werden in Anführungszeichen gesetzt:
  • Gruppe_1
  • Gruppe_1 master
  • "Gruppe 1" master

Achten Sie darauf, die Anführungszeichen in cScript mit \ zu maskieren!

gRootTableRecordID int Root-ID der Tabelle
gRootTableRecordID2
gRootTableRecordID3
gRootTableRecordStringID char*
gColumnRecordID int ID der Tabellenspalte
gColumnRecordID2
gColumnRecordID3
gColumnRecordStringID char*
gRowRecordID int ID der Tabellenzeile
gRowRecordID2
gRowRecordID3
gRowRecordStringID char*
gCellRecordID int [seit v3.3.1 R3387] ID der Tabellenzelle
gCellRecordID2
gCellRecordID3
gCellRecordStringID char*

PubServer spezifische Variablen

Siehe hier. Die Werte der Variablen werden aus den StringIDs der jeweiligen RecordIDs ermittelt und haben nur in Comet4-PUBSERVER-Verbindungen sinnvolle Werte. In anderen Verbindungen sind die Variablen zwar definiert, Ihre Inhalte sollten aber nicht verwendet werden.

Hier ein sehr einfaches Beispiel zur Rückgabe von drei IDs. Beachten Sie insbesondere, dass die Gruppennamen jeweils in Anführungszeichen gesetzt sind (die aber für cScript escaped werden müssen.):

#include "internal/text.h"
#include "internal/products.h"

int main ()
{
	char 	mg[1000];

	idtypelist::append (gProducts, 1, 0, 0, "aaa");
	stringlist::append (gMoreGroups,
	sprintf (mg, "\"Gruppe %d\"", idtypelist::length (gProducts)));

	idtypelist::append (gProducts, 2, 0, 0, "aaa");
	stringlist::append (gMoreGroups,
	sprintf (mg, "\"Gruppe %d\"", idtypelist::length (gProducts)));

	idtypelist::append (gProducts, 3, 0, 0, "aaa");
	stringlist::append (gMoreGroups,
	sprintf (mg, "\"Gruppe %d\"", idtypelist::length (gProducts)));

	return 0;
}

Über die Funktionsvariablen können Aktionen pro Zelle individualisiert werden. Diese Variablen werden pro Zelle gesichert. Mehr dazu unter Funktionsvariablen.

Wenn Sie das +-Button über der Methoden-Liste im Bereich Gestaltung mit gehaltener ALT-Taste klicken, öffnet sich folgender Dialog mit dem Sie neue Gestaltungmethoden für Tabellen direkt aus InDesign® heraus anlegen können:

Achtung: Die Regeln werden direkt im Bestand Ihrer aktuellen Datenverbindung angelegt. Wenn Sie das oft machen, werden entsprechend viele Regeln angelegt. Es gibt keine Möglichkeit, die Regeln auch wieder aus InDesign® heraus zu löschen. Die Regeln können nur direkt im Datensystem gelöscht werden!

Sie können zwischen folgenden Basisregeln auswählen

Alle so erzeugten Skripte erscheinen sofort im Popup mit den verfügbaren Gestaltungsregeln und können von dort verwendet werden.

Mit ALT-Klick ins Popup sind die Regeln mit einer Partnerlizenz editierbar.

Diese Skripttypen werden erst ab InDesign® CC 2014 unterstützt. Hintergrund ist ein lästiger Fehler in InDesign® CS6, für den wie leider keinen Workaround haben und der InDesign® unter Umständen zum Absturz bringen kann.

Wenn Sie sich für Kontur oder Fläche entschieden haben, erscheint danach der InDesign® Standarddialog für Zellenoptionen. Die Einstellungen, die Sie hier machen, werden im Skript so zusammengefasst, dass das Skript das Gleiche macht, als hätten Sie den Dialog wieder ausgewählt und eingestellt. Das ist eigentlich sehr schön und einfach.

Für Berechnungen stehen folgende Formeln zur Verfügung:

Bitte denken Sie daran : Das ist nicht Excel!

Als Grundlage für die Berechnungen kann wahlweise die Zeile, Spalte oder Tabelle der Tabellenzelle verwendet werden. Die Zelle selbst wird von der Berechnung in jedem Fall ausgeschlossen. Weitere Zellen können die Angabe von Klassenzugehörigkeiten ausgeschlossen werden:

Erstellen einer Tabellenregel zum Schreiben einer Logmeldung.

Erstellen des Gerüstes einer Tabellengestaltungsregel. Diese Option ist hilfreich bei der Erstellung neuer Tabellengestaltungsregel.

Die Anweisungen werden in der Tabelle actions mit der typeid (bzw in actionsxml mit dem Element type) 24 definiert und in cScript geschrieben. Die Aktionen müssen IDs > 0 haben!

Achtung : Abweichend von den übrigen Aktionen wird die 24 nicht im Attribut classid sondern in typeid/type angegeben.

Ein leeres Gerüst einer Tabellengestaltungsregel können Sie mit ALT-Klick des +-Buttons über den Gestaltungsregeln im Bereich Gestaltung erstellen.

In den Skripten sind die folgenden Werte global definiert:

Name Typ Beschreibung
gTable ItemRef

Verweis auf die Tabelle, die aufgebaut wird. Zum Zeitpunkt des Aufrufes ist die Tabelle zurückgesetzt (siehe table::reset) und es sind noch keine neuen Zeilen oder Spalten angelegt.

gAreaLeft int

Wirksamer Bereich der Regel. Die Angaben sind 0-basiert.

gAreaRight ist die erste Spalte, die nicht mehr zum Zielbereich gehört. gAreaBottom ist die erste Zeile, die nicht mehr zum Zielbereich gehört.

gAreaTop
gAreaRight
gAreaBottom
gGroups char*

Vollständige Liste der Gruppen, auf denen die Methode arbeiten/nicht arbeiten soll. Die Gruppennamen sind jeweils in " eingeschlossen.

Die Angabe ist leer, wenn Gruppen prüfen der Methode deaktivert ist.

gNotInGroups
gAlternatingColumnsOn int Soll die Regel alternierend auf Spalten/Zeilen angewendet werden?
gAlternatingRowsOn
gAlternatingColumnsStart int Erste Spalte/Zeile, auf die die Regel angewendet werden soll.
gAlternatingRowsStart
gAlternatingColumnsStep int Schrittweite, in denen Spalten/Zeilen alternierend bearbeitet werden sollen.
gAlternatingRowsStep

Hier ein Beispiel für eine Tabellengestaltungsregel

//***************************************************************************

#include "internal/types.h"
#include "internal/text.h"
#include "internal/table.h"

//***************************************************************************

int stError			= 0;

//***************************************************************************

int Process (Table T, int l, int t, int r, int b)
{
	float		f 	= table::average(T, "", -1, l, gAreaTop, gAreaLeft);
	char		str [512];

	sprintf (str, "%F", f);
	table::set_text (T, l, t, str);

	return 0;
}

//***************************************************************************

int ProcessCells (Table T, int l, int t, int r, int b)
{
	int		x, y;
	
	for (y = t; y<b; y++)
	{
		for (x=l; x<r; x++)
		{
			stError = Process (T, x, y, x+1, y+1);
			if (stError) return stError;
		}
	}
	return 0;
}

//***************************************************************************

int main ()
{
	stError = Process (gTable, gAreaLeft, gAreaTop, gAreaRight, gAreaBottom);
	
	return stError;
}

Für die Konfiguration der Methoden wird das Feld inputdocumentation von actions verwendet. Folgendes Format kann (optional) angegeben werden:

    intention##destination

Die Intention einer Tabellengestaltungsregel wird im ersten Teil der inputdocumentation über eine Icon-ID festgelegt. Eine Liste der gültigen Werte und der zugehörigen Icons finden Sie hier.

Für welche Wirkungsbereiche eine Methode zugelassen ist, wird im zweiten Hash-Tag mit einer beliebige Liste der Schlüssel für den Wirkungsbereichfetsgelegt festgelegt. Im Popupmenü mit den Zielbereichen einer Tabellengestaltungsregel werden nur die Einträge aktiviert, die in der Schlüsselliste gefunden werden. Ist die Schüsselliste leer, werden alle Einträge aktiviert. Die Begriffe können beliebig getrennt sein.

Methode für Zellkanten, erlaubt für die gesamte Tabelle, alle Zellen und für alle Zellen des Blockes

2##table cell children

Die für das Tabellenmodul nötigen Informationen können vollständig in TaggedText exportiert und von dort wieder importiert werden. Mehr Informationen dazu finden Sie hier.

Zum Export der Tabellenmodul-Informationen in TaggedText muß das Menü

aktiviert sein. Das Abschalten ist sinnvoll für Fälle, in denen der TaggedText zum Import in InDesigns® ohne Comet-Pluigns bestimmt ist. InDesign® schreibt sonst die dann unbekannten Tags als Text in das Zieldokument.

Auf Grund technischer Details ist es leider nicht möglich, die Tags des Tabellenmodules (oder ganz allgemein Third-Party-Tags) gänzlich vom Export auszuschließen. Irgend etwas muß leider geschrieben werden. Wir verwenden dafür das unbenutzte und ungefähliche, aber definierte Tag <dps:>.

Der Import der Tabellenmodul-Informationen wird immer unterstützt.

Die Angaben werden in den Tags

w2table
w2cell

gemacht. Die Informationen in den Tags sind recht umfangreich und werden hier nicht im Einzelnen beschrieben. Eine vollständige Definition können Sie leicht erzeugen, indem Sie eine Tabelle als TaggedText exportieren. Fehlende Angaben innerhalb der Tags werden ignoriert und mit Defaultwerten (0 oder "") gefüllt. Attributnamen innerhalb der Tags sind case sensitive.

Das Tag w2table muss innerhalb das Standardtags <TableStart:...> platziert werden:

<TableStyle:\[Basic Table\]><TableStart:4,4:0:0<tCellDefaultCellType:Text><w2Table: .... >>

Das Attribut Groups enthält alle in Zellen und Gestaltungsregeln der Tabelle verwendeten Gruppennamen. Gruppennamen werden durch Leerzeichen getrennt. Gruppennamen mit Leerzeichen müssen in Anführungszeichen gesetzt werden.

Hier ein Bespiel für eine gültige Gruppendefinition innerhalb des Tags w2table:

Groups='bbb "Hallo Paul"'

Das Attribut Postprocess enthält alle Gestaltungsregeln und deren Parameter, die nach dem Tabellenaufbau ausgeführt werden sollen. Die Regeln werden auch ausgeführt, wenn die Tabelle mit einer der cScript-Funktionen frame::replace, textmodel::replace, ... eingefügt wird.

Folgende Angaben werden im Attribut Postprocess für eine Regel erwartet:

Index Beschreibung Mögliche Werte
1

ID der Regel

-100 : Zusammengehörige Zeilen verbinden
-101 : Zusammengehörige Spalte verbinden
-102 : Tabelle auf Rahmenbreite
-103 : Gleiche Spaltenbreite
-104 : Spaltenbreite anpassen
-105 : Gleiche Zellen verbinden

Sonst : Gültige ID der Aktion in actions
2

Intention

Gültige ID der Liste der Intentionen
3 Wirkungsbereich Gültige ID der Liste der der Wirkungsbereiche
4 Unbenutzt 0
5
6
7 Spalten alternierend bearbeiten? 0 : Nein
1 : Ja
8 Erste alternierende Spalte 0-basierte gültige Tabellenspalte
9 Schrittweite alternierende Spalte > 0
10 Zeilen alternierend bearbeiten? 0 : Nein
1 : Ja
11 Erste alternierende Zeile 0-basierte gültige Tabellenzeile
12 Schrittweite alternierende Zeilen >0
13 Gruppenzugehörigkeiten prüfen? 0 : Nein
1 : Ja
14 Gruppen und Parameter

Leerzeichengetrennte Liste von Gruppennamen. Enthalten Gruppennamen Leerzeichen, werden sie in " gesetzt.

Bei den Regeln Spaltenbreite anpassen (-104) und Gleiche Zellen verbinden (-105) muss auf die Gruppennamen das Kürzel

--PNC--

folgen. Danach kommen Regel-typische Parameter wie folgt:

Regel Index Bedeutung Mögliche Werte
-105 Gleiche Zellen verbinden

1

Wie soll Zelleninhalt horizontal ausgerichtet werden, wenn nebeneinanderligende Zellen verbunden werden (Index 5 = 1)?

-1 : Einstellung der ersten Zelle verwenden
0 : linksbündig
1 : zentriert
2 : rechtsbündig
3 : Blocksatz, alle Zeilen
4 : Blocksatz, letzte Zeile linksbündig
5 : Blocksatz, letzte Zeile zentriert
6 : rechtsbündig justiert
7 : automatisch
8 : am Rücken ausrichten
9 : Am Aussenrand ausrichten

2 Wie soll Zelleninhalt vertikal ausgerichtet werden, wenn nebeneinanderligende Zellen verbunden werden (Index 5 = 1)?

-1 : Unverändert
0 : oben
1 : mitte
2 : unten
3 : Systemeinstellung

3 Zellen untereinander dürfen verbunden werden / Horizontal Wie Index 1
4 Zellen untereinander dürfen verbunden werden / Vertikal Wie Index 2
5 Zellen nebeneinander dürfen verbunden werden eingeschaltet?

0 : Nein
1 : Ja

6 Zellen untereinander dürfen verbunden werden eingeschaltet?

0 : Nein
1 : Ja

7 Platzhalter(definitionen) ebenfalls vergleichen?

0 : Nein
1 : Ja

8 Rahmenumbrüche beachten? 0 : Nein
1 : Ja
-104 Spaltenbreite anpassen 1 Zeilenhöhe prüfen

0 : Nein (Zeilen dürfen höher werden)
1 : Ja (Zeilenhöhe erhalten)

2 Nur anpassen bei Übersatz?

0 : Nein (nur bei Übersatz anpassen)
1 : Ja (immer anpassen)

15 Verbotene Gruppen Leerzeichengetrennte Liste von Gruppennamen. Enthalten Gruppennamen Leerzeichen, werden sie in " gesetzt. Ist Index 13 gleich 1, werden alle Zellen, die zu einer der hier festgelegten Gruppen gehören, nicht bearbeitet.

Hier eine gültige Postprocess-Angabe zum Anpassen der Spalten:

Postprocess='-104 5 7 0 0 0 0 1 2 0 0 2 0 "G1 G2 --PNC-- 0 0" "" '

Das Tag w2cell muss innerhalb das Standardtags <CellStart:...> platziert werden:

<CellStart:1,1<w2Cell: ...>>

Das Attribut Groups enthält alle in Zellen und Gestaltungsregeln der Tabelle verwendeten Gruppennamen. Gruppennamen werden durch Leerzeichen getrennt. Gruppennamen mit Leerzeichen müssen in Anführungszeichen gesetzt werden.

Hier ein Bespiel für eine gültige Gruppendefinition innerhalb des Tags w2cell:

Groups='bbb "Hallo Paul"'