Liste von Produkten.
Ein allgemeines Beispiel zur Verwendung der Klasse productlist finden sie hier.
Liste von Produkten. Die Liste kann entweder aus der aktuellen Produkterecherche und deren Auswahl ermittelt werden oder im Skript aufgebaut werden. Listen der aktuellen Produktrecherche können erweitert werden.
static ProductList productlist::alloc()
Erzeuge eine neue leere Liste. Die Liste muss mit release wieder gelöscht werden.
Weitere Informationen zu Produktlisten und Produkten in Listen finden Sie hier.
Name | Typ | Default | Beschreibung |
Return | ProductList | Zeiger auf ein neue, leere Produktliste |
static ProductList productlist::get(char* statement)
Erzeuge eine neue Liste aus den Einträgen der Produktrecherche.
Eine zweite Version des Befehls mit zwei Parametern holt das nte Produkt einer gegebenen Produktliste.
Name | Typ | Default | Beschreibung |
Return | ProductList | Neu allokierte Produktliste | |
statement | String oder char* | - | Anweisung zu Füllen der Liste, siehe hier. |
static void productlist::clear(ProductList pl)
Entferne alle Einträge der Liste.
Name | Typ | Default | Beschreibung |
pl | ProductList | - | Zeiger auf eine gültige Produktliste |
static void productlist::release(ProductList pl)
Lösche eine Liste wieder aus dem Arbeitsspeicher.
Weitere Informationen zu Produktlisten und Produkten in Listen finden Sie hier.
Name | Typ | Default | Beschreibung |
pl | ProductList | - | Zeiger auf eine gültige Produktliste |
static int productlist::length(ProductList pl)
Aktuelle Länge der Liste
Name | Typ | Default | Beschreibung |
Return | int | Anzahl der Listenelemente | |
pl | ProductList | - | Zeiger auf eine gültige Produktliste |
static Product productlist::get(ProductList pl, int nth)
Hole das nte Listenelement. Mit einem char*-Parameter gerufen, erzeugt der Aufruf eine neue Produktliste aus einer Auswahl der Produktrecherche.
Name | Typ | Default | Beschreibung |
Return | Product | gefundes Objekt. Im Fehlerfall gibt der Aufruf 0 zurück. | |
pl | ProductList | - | Zeiger auf eine gültige Produktliste |
nth | int | - | 0-basierter Listenindex |
static int productlist::get_pos(
ProductList pl,
Product p,
int setPos = 0)
Bestimme den Index, den ein Objekt in der Liste hat.
Name | Typ | Default | Beschreibung |
Return | int | 0-basierte Listenposition des Objektes. Wurde das Objekt nicht gefunden, gibt der Aufruf -1 zurück. | |
pl | ProductList | - | Zeiger auf eine gültige Produktliste |
p | Product | - | Zeiger auf ein gültiges Produkt |
setPos | int | 0 | Setze die aktuelle Listenposition auf das Produkt? 0 : nein 1 : ja |
static Product productlist::get_nth(
ProductList pl,
int n,
int setPos = 0)
Hole das nte Produkt einer Liste.
Name | Typ | Default | Beschreibung |
Return | Product | Produkt an der 0-basierten Position der Eingabeliste 0 : leere Liste oder Listenindex nicht defniert |
|
pl | ProductList | - | Zeiger auf eine gültige Produktliste |
n | int | - | 0-basierter Index in der Liste |
setPos | int | 0 | Setze die aktuelle Listenposition auf den Index? 0 : nein 1 : ja |
static int productlist::append(
ProductList pl,
Product p,
int allowDoubles = 1)
Füge ein Objekt an die Liste an.
Name | Typ | Default | Beschreibung |
Return | int | 1 - Das Objekt konnte eingefügt werden 0 - Objekt nicht eingefügt |
|
pl | ProductList | - | Zeiger auf eine gültige Produktliste |
p | Product | - | Zeiger auf ein gültiges Produkt |
allowDoubles | int | 1 | Sind in der Liste Einträge mit gleichen IDs erlaubt? 0 - Enthält die Liste bereits einen Eintrag mit der ID von p, wird p nicht in die Liste eingefügt. 1 - Der Eintrag wird ohne Prüfung der ID eingefügt. |
static int productlist::insert(
ProductList pl,
Product p,
int index,
int allowDoubles = 1)
Füge ein Objekt in die Liste ein.
Weitere Informationen zu Produktlisten und Produkten in Listen finden Sie hier.Name | Typ | Default | Beschreibung |
Return | int | 1 - Das Objekt konnte eingefügt werden (und wird bei clear/release (li, 1) automatisch gelöscht) 0 - Objekt nicht eingefügt (und muss evtl. gelöscht werden) |
|
pl | ProductList | - | Zeiger auf eine gültige Produktliste |
p | Product | - | Zeiger auf ein gültiges Produkt |
ix | int | - | Einfügen vor dieser Position. Die Position ist 0-basiert. Um ein Objekt an die Liste anzufügen, verwenden sie append oder den Index -1. |
allowDoubles | int | 1 | Sind in der Liste Einträge mit gleichen IDs erlaubt? 0 - Enthält die Liste bereits einen Eintrag mit der ID von p, wird p nicht in die Liste eingefügt. 1 - Der Eintrag wird ohne Prüfung der ID eingefügt. |
static Product productlist::remove_pos(ProductList pl, int index)
Lösche ein Objekt der Liste. Das Objekt an der angegebenen Listenposition wird aus der Liste entfernt. Das Produkt selbst wird beim Enfernen aus der Liste nicht gelöscht.
Name | Typ | Default | Beschreibung |
Return | Product | Das entfernte Objekt 0 - es wurde kein Objekt aus der Liste entfernt |
|
pl | ProductList | - | Zeiger auf eine gültige Produktliste |
ix | int | - | 0-basierter Listenindex |
static Product productlist::remove(ProductList pl, Product p)
Lösche ein Objekt der Liste. Das Objekt wird aus der Liste entfernt. Das Produkt selbst wird beim Enfernen aus der Liste nicht gelöscht.
Name | Typ | Default | Beschreibung |
Return | Product | Das entfernte Objekt 0 - das Objekt wurde nicht in der Liste gefunden |
|
pl | ProductList | - | Zeiger auf eine gültige Produktliste |
p | Product | - | Zeiger auf ein gültiges Produkt |
static Product productlist::first(ProductList pl)
Hole das erste Objekt der Liste und setze den aktuellen Listenzeiger auf den Listenanfang.
Name | Typ | Default | Beschreibung |
Return | Product | Erstes Objekt der Liste 0 - Leere Liste |
|
pl | ProductList | - | Zeiger auf eine gültige Produktliste |
static Product productlist::next(ProductList pl)
Rücke den aktuellen Listenzeiger um eine Position weiter und hole das nächste Objekt der Liste. Der Aufruf setzt entweder first oder last und einige prev-Aufrufe voraus.
Name | Typ | Default | Beschreibung |
Return | Product | Nächstes Objekt der Liste 0 - Listenende erreicht |
|
pl | ProductList | - | Zeiger auf eine gültige Produktliste |
static Product productlist::prev(ProductList pl)
Rücke den Listenzeiger eine Position nach vorne und hole das Objekt der Liste.Der Aufruf setzt entweder last oder first und einige next-Aufrufe voraus.
Name | Typ | Default | Beschreibung |
Return | Product | Nächstes Objekt der Liste 0 - Listenanfang erreicht |
|
pl | ProductList | - | Zeiger auf eine gültige Produktliste |
static Product productlist::last(ProductList pl)
Hole das letzte Objekt der Liste und setze den aktuellen Listenzeiger auf das Listenende.
Name | Typ | Default | Beschreibung |
Return | Product | Letztes Objekt der Liste 0 - Liste leer |
|
pl | ProductList | - | Zeiger auf eine gültige Produktliste |
static int productlist::build(
char* statement = "watched",
int flags = 0,
char* errmess = 0,
ItemRef baseFrame = 0,
int removeFrame = 0,
int pageNum = -1,
char* layerName = "",
char* defaultMasterpage = "",
int gridID = 0,
int pageitemID = 0,
int anchor = 0,
float left = 0.0,
float top = 0.0,
float right = 0.0,
float bottom = 0.0,
int purgeSequence = 0,
char* sequName = "",
int preScript = kNoRule)
Produktaufbau. Wie document::build_products.
static int productlist::build_list(
ProductList pl,
int flags = 0,
char* errmess = 0,
ItemRef baseFrame = 0,
int removeFrame = 0,
int pageNum = -1,
char* layerName = "",
char* defaultMasterpage = "",
int gridID = 0,
int pageitemID = 0,
int anchor = 0,
float left = 0.0,
float top = 0.0,
float right = 0.0,
float bottom = 0.0,
int purgeSequence = 0,
char* sequName = "",
int preScript = kNoRule)
Produktaufbau. Wie document::build_products, als erster Parameter wird eine Produktliste übergeben. Der Aufruf führt kein Präskript aus. Die Liste der Produkte liegt bereits im Skript vor und kann dort entsprechend vorbereitet werden.
Die Anweisung ist insbesondere für den Serverbetrieb geeignet, in dem keine Produktpalette zur Verfügung steht. Im normalen InDesign®-Betrieb können Sie fast immer die (etwas schnellere) Anweisung document::build_products verwenden. Einzige Ausnahme ist, wenn Sie die Liste der Produkte im Skript zusammenstellen oder die Ergebnisliste von productlist::get im Skript noch überarbeitet werden soll.
Aufbau einer kleinen Auswahl von Produkten.
#include "internal/products.h"
int gGridID = 12;
int append_product (ProductList li, int id1, int id2, int id3, int pi) { Product p;
if (!li) return 1;
p = product::alloc (); product::set (p, kID, id1); product::set (p, kID2, id2); product::set (p, kID3, id3); product::set (p, kPageitemid, pi);
productlist::append (li, p, 1);
return 0; }
int main () { ProductList li = productlist::alloc ();
append_product (li, 100, 10, 0, 2); append_product (li, 300, 10, 0, 2); append_product (li, 300, 10, 0, 2); append_product (li, 400, 10, 0, 12); append_product (li, 500, 10, 0, 2);
productlist::build_list ( li, kUseDefaultGrid, 0, 0, 0, -1, "", "", gGridID);
productlist::clear (li, 1);
return 0; }
static ProductList productlist::load(
int sourceType,
void* dsn,
int format,
char* statement = "",
List values = 0 )
Lade eine Produktliste aus einer XML oder CSV-Datei, einer Datenbankverbindung oder einem XML-Baum.
Name | Typ | Default | Beschreibung |
Return | ProductList | Zeiger auf Produktliste. Die Liste muss vom Skript wieder gelöscht werden. 0 - Fehler beim Laden | |
sourceType | int | Typ der Datenquelle. Mögliche Werte sind: - kXML |
XML-Datei - kCSV CSV Datei - kDB Datenbank- oder SOAP Verbindung - kXMLTree XML Struktur |
dsn | void * | abhängig vom Typ muss hier ein gültiger Pfad (kXML und kCSV), eine Datenbankverbindung oder ein XMLTree übergeben werden | |
format | int | kStandardSet | Format der Daten. Dieser Wert gibt an, welche Ergebnisspalten in der Datenquelle erwartet werden. Mögliche Werte sind: - kStandardSet (ID,ID2,ID3,StringID) - kExtendedSet (ID,ID2,ID3,StringID,Pageitemid) - kCustomSet selbstdefiniertes Set. In diesem Fall muss als 5. Parameter eine Liste von erwarteten Ergebnisspalten angegeben werden |
statement | String oder char* | "" | Abfrage, die auf die Datenquelle angewendet werden soll. Mögliche und sinnvolle Werte hängen vom Datenquelltyp und Format ab. - kXML, kXMLTree: Bei den Formaten kStandardSet und kExtendedSet ist der Parameter optional, wenn die XML-Datei die in den Beispielen gezeigte Struktur hat. - kCSV: Der Parameter wird nicht ausgewertet. - kDB: Der Parameter ist in jedem Fall erforderlich. |
List | values | 0 | Liste von Ergebnisspalten, die in der Datenquelle erwartet werden. Die Reihenfolge der Werte in der Liste muss der Reihenfolge in der Datenquelle bzw. der durch die Abfrage festgelegten Reihenfolge der Ergebnisspalten entsprechen. Siehe Beispiele für die Verwendung des Befehls. |
XML Standardformat
// // <productlist> // <product> // <ID/> // <ID2/> // <ID3/> // <StringID/> // </product> // </productlist> // ProducList pl = productlist::load (kXML, "/Export/catalogue_data/2007_05.xml");
XML Erweitertes Format
// // <productlist> // <product> // <ID/> // <ID2/> // <ID3/> // <StringID/> // <Pageitemid/> // </product> // </productlist> // ProducList pl = productlist::load (kXML, "/Export/catalogue_data/2007_05.xml");
Laden aus XML Struktur (z.B. zur Auswertung von als XML String übergebenen Parametern)
XMLTree tree; ProductList pl;
tree = xmlquery::parse ("<productlist><product><ID/><ID2/><ID3/><StringID/></product></productlist>"); pl = productlist::load(kXMLTree, tree);
Datenbank / eigene Ergebnissets
ProductList pl; int dbc = datapool::get_dbc (); // DBC oder SOAP // Zunächst wird die Liste erwarteter Rückgabespalten erstellt List values = list::alloc ();
list::insert (values, kID); list::insert (values, kID2);
pl = productlist::load(kDB, dbc, kCustomSet, "SELECT ID,ID2 FROM product", values);
// die wie oben geladenen Produktlisten können bspw. so weiterverarbeitet werden: productlist::build_list (pl, kUseDefaultGrid, 0, 0, 0, 1, "produktlayer", "A-Mustervorlage", 1, 0, 0);
static int productlist::seek(ProductList pl, int pos)
Setze den internen Listenzeiger auf das durch pos angegebene Element
Name | Typ | Default | Beschreibung |
Return | int | 1, wenn die Position gefunden und der Zeiger positioniert werden konnte, sonst 0 | |
pl | ProductList - Zeiger auf eine gültige Produktliste | ||
pos | int | - | Position, auf die der Iterator gesetzt werden soll |
static int productlist::establish(
ProductList pl,
ItemRef dref = 0,
int pageNum = -1,
char* layer = "",
int pageTemplate = 0,
int pageItem = 0,
int flags = 0,
int preScript = 0,
int singleSequences = 0,
char* sequName = 0,
char* errMess = 0,
char* ignoreLayers = 0,
int snippetMatchFlag = 0,
char* snippetContext = 0,
int snippetFilterFunc = 0,
...)
Produktaufbau mit Seitentemplates.
Produktaufbau mit Hilfe von Seitentemplates. Hier finden Sie ein kurzes Tutorial zum Produktaufbau mit Seitentemplates. Hier ist ein Flussdiagramm des Produktaufbaus:
Hier ist ein Flussdiagramm des Produktaufbaus:
Aktionsbeschreibungen:
Next Item Hole das nächste Element der Eingabeliste. Die Liste kann Produkte und Seitentemplates (kProductType = 4) enthalten.
Is Product Die Produktliste kann sowohl Produkte als auch Seitentemplates enthalten. Seitentemplates werden mit kProductType = 4 gekennzeichnet und legen eine neue Seite im Dokument an. Sind in den Seitentemplate-Einträgen Musterseiten definiert, wird die erste gefundene Musterseite auf die neue Seite angewendet.
Fix Template Hat das Template des aktuellen Produktes seitenspezifische Untertemplates, wird das zum aktuellen Seitentyp passende Untertemplate ermittelt. Beim Anlegen von Fortsetzungen wird automatisch das passende Untertemplate der Fortsetzungen verwendet.
Fix Page Element Suche den nächsten freien Stellplatz auf der Seite.
In 1:N-Elemente wird zuerst geprüft, ob das Element ein weiteres Produkt aufnehmen kann. Ist das nicht der Fall, werden die im Element aufgebauten Produkte gemäß den Einstellungen des Elementes ausgerichtet horizontal und vertikal ausgerichtet.Muß ein neues Seitenelement ermittelt werden, wird beginnend hinter dem aktuellen (oder beim ersten) Seitenelement des Seitentemplates geprüft, ob bereits existierende Dokumentrahmen über dem Element liegen. Das erste Element ohne Rahmenüberschneidungen wird für den Aufbau der Produktes verwendet. Wird kein freies Seitenelement gefunden, wird eine neue Seite eingefügt, mit dem aktuellen Seitentemplate verbunden und das erste Element der neuen Seite verwendet.
Create New Page Jedes Seitentemplate in der Eingabeliste legt automatisch eine neue Seite an. Erfordert das Seitentemplate eine linke (oder rechte) Seite, wird bei Bedarf zuerst eine Leerseite eingeschoben (wenn z.B. der Aufbau auf einer linken Seite steht und ein Seitentemplate eine neue linke Seite erfordert, dann wird zusätzlich eine leere rechte Seite eingefügt).
Set PageTemplate Neu angelegte Seiten werden mit dem aktuellen Seitentemplate verknüpft. Hat das Seitentemplate Angaben zu Musterseiten, wird die erste gefundene Musterseite auf die neuen Seiten angewendet.
Page Created Wurde in der letzten Aktion eine neue Seite angelegt? In den allermeisten Fällen kann jeweils nur eine Seite angelegt werden. Nur wenn die Eingabeliste ein Seitentemplate enthält, das einen genauen Seitentyp (links, rechts) erfordert, wird in doppelseitigen Dokumenten die dafür nötige Leerseite zusätzlich angelegt (wenn z.B. der Aufbau auf einer linken Seite steht und ein Seitentemplate eine neue linke Seite erfordert, dann wird zusätzlich eine leere rechte Seite eingefügt).
Check Page Type Prüfe ob die aktuelle Dokumentseite den vom Seitentemplate gewünschten Seitentyp hat. Erfordert das Seitentemplate eine linke (oder rechte) Seite, wird bei Bedarf zuerst eine Leerseite eingeschoben (wenn z.B. der Aufbau auf einer linken Seite steht und ein Seitentemplate eine neue linke Seite erfordert, dann wird zusätzlich eine leere rechte Seite eingefügt).
Exec Pageitem Script Mitunter ist das Produkttemplate abhängig vom Stellplatz im Dokument. Z.B. soll etwa das erste Produkt auf einer Seite immer anders dargestellt werden als die Folgeprodukte. Hier ist jetzt die Zielstelle im Dokument klar und das Template kann berechnet werden. Informationen zum Skripttyp finden Sie hier.
Check Element Size Before Prüfe, ob das Template in den berechneten Stellplatz paßt. Zur Prüfung wird die gespeicherte Größenangabe des Templates verwendet. Es werden nicht die tatsächlichen Rahmen des Templates verwendet. Hat das Template eine erwartete Minimalgröße wird anstelle der Templategröße die Minimalgröße verwendet. Es wird ausschließlich die geometrische Größe getestet, andere Kriterien spielen bei der Prüfung keine Rolle. Zur Prüfung weiterer Kriterieren verwenden Sie die Aufbauhilfe mit der Situation kCheckSizeBefore (= 1).
Aufbauhilfe Aufruf der angegebenen Aufbauhilfe-Situation. Folgende Situationen werden unterstützt:
1 kCheckSizeBefore 2 kCheckSizeAfter 3 kBeforeCreateContinue 4 kAfterCreateContinue 5 kProductPlaced 6 kUnsolvableOversets 7 kBeforeLoad // seit v4.2 R32572, UNBENUTZT! 8 kProductPlacedAndFitted // seit v4.3 R35000 // Nicht im Bild enthalten! // Wird direkt vor 'Prepare Oversets' ausgeführt 20 kAfterBuild 21 kProductFinished
Exec PreRule Das Skript wurde im Comet3-Rasteraufbau für Seiten- und Stellplatzwechsel verwendet. Im Seitenaufbau von Comet4 wird es noch aufgerufen, hat aber nur noch historische Bedeutung. Eine Beschreibung der definierten Variablen finden Sie hier.
Exec PostRule Das Skript wurde im Comet3-Rasteraufbau verwendet. Im Seitenaufbau von Comet4 wird es noch aufgerufen, hat aber nur noch historische Bedeutung. Eine Beschreibung der definierten Variablen finden Sie hier.
Check Element Size After Das Produkttemplate ist jetzt verlinkt und fertig geladen. Alle entsprechenden Gestaltungsregeln sind ausgeführt. Paßt das Produkt immer noch an seinen ursprünglich vergebenen Stellplatz? Zur Prüfung wird die BoundingBox der aktuellen Dokumentrahmen des Produktes bzw.der aktuellen Fortsetzung verwendet. Es wird ausschließlich die geometrische Größe getestet, andere Kriterien spielen bei der Prüfung keine Rolle. Zur Prüfung weiterer Kriterieren verwenden Sie die Aufbauhilfe mit der Situation kCheckSizeAfter (= 2).
Move Frames (to Element) Verschiebe die Rahmen des Produktes (oder seiner Fortsetzung) an die linke obere Ecke des aktuellen Stellplatzes. Bei 1:N-Elementen kann diese Stelle auch innerhalb des Elementes liegen.
Remove Frames from Grid Wurden die Produktrahmen als Teil eines 1:N-Elementes aufgebaut, werden sie jetzt auch der internen 'Buchhaltung' des Elementrasters entfernt. (Das Elementraster dient der späteren Zeilen- und Spaltenausrichtung des Elementes.)
Next Page Element Springe zum nächsten Seitenelement. Die Reihenfolge der Seitenelemente ergibt sich aus der Sequenznummer der Elemente. Ist das letzte Seitenelement erreicht, wird automatisch eine neue Seite angelegt und mit dem als Fortsetzung angegebenen Seitentemplate verknüpft.
Prepare Oversets Rahmen mit Übersatz, für die eine Fortsetzung definiert ist, werden auf ihre vom Seitenelement begrenzte maximal mögliche Höhe gebracht. Wird der Übersatz dadurch aufgelöst, wird der Rahmen danach nochmals an seinen Inhalt angepasst.
Frames With Overset Gibt es mindestens einen Rahmen mit Fortsetzung, der auch in seiner vom Seitenelement begrenzten Maximalhöhe noch einen Textübersatz hat?
Oversets Smaller than before Hat das Vergrößern der Rahmen mit Fortsetzung den Übersatz verkleinert.
Recursive Continue Call Das Produkt benötigt eine Fortsetzung. Dazu wird der Produktaufbau nochmals gerufen. Am Ende dieses Aufrufes werden Rahmen gleicher Kennung automatisch zu einer Textkette verbunden.
Continue Call Wird das Haupttemplate des Produktes oder eine Fortsetzung eingefügt?
Is Textflow Wird das Produkt als Textfluß aufgebaut?
Product Exists ... ? Existiert das Produkt bereits im Dokument?
Create Textframe Für den Aufbau als Textfluß steht kein eindeutiger Template-Rahmen zur Verfügung. Als Rahmen für den Text wird deshalb das Seitenelement selbst verwendet. Voraussetzung ist, dass das Seitentemplate als Dokument im Datenpool existiert (und nicht nur dessen XML-Beschreibung). Ist das entsprechende Seitenelement kein Textrahmen, wird der Rahmen automatisch in einen Textrahmen umgewandelt. Ansonsten wird der Rahmen mit all seinen Textrahmen-Eigenschaften übernommen.
Bestehender Text im Rahmen wird entfernt und durch den Produkttext ersetzt. In der Palette Template-Verhalten können Sie festlegen, ob die einzelnen Rahmen des Templates als Inline in den Textfluß übernommen werden sollen oder deren Textinhalt eingefügt werden soll. Weitere Informationen finden Sie hier.
Insert Template Einfügen des Templates in das Dokument. Template werden immer an der Seitenposition (0, 0), also links oben eingefügt und erst später verschoben. Hintergrund ist, dass bei größeren Templates sonst Teile des Templates von der Arbeitsfläche fallen können und dadurch schwere Fehler in InDesign® verursachen können.
Um Fehler in der späteren Bestimmung des Textübersatzes zu vermeiden, werden an diese Stelle des Produktaufbaus auch alle Text-Verdrängungen anderer Rahmen temporär aufgehoben.
Hinweis: Die deaktivierten Textverdrängungen werden automatisch wieder aktivert, wenn das Produkt später an sein finale Zielposition verschoben wurde. An dieser Stelle werden auch die (mit den jetzt gültigen Textverdrängungen) Textübersätze neu bestimmt. Um die Beschreibung des Produktaufbaus nicht noch komplexer zu machen, sind diese Schritte im Flußdiagramm nicht dargestellt.
Link Placeholders Verknüpfe die Platzhalter aller neu eingefügten Rahmen und Texte mit der ID des aktuellen Produktes.
Load Placeholders Lade die Inhalte aller Platzhalter aller neu eingefügten Rahmen und Texte.
Build Repeating Elements Aufbau wiederholender Elemente. Informationen zum Aufbau wiederholender Elemente finden Sie hier.
Ausführen der entsprechenden Gestaltungsregeln aller Produktrahmen.
Höhenänderungen an Rahmen mit Fortsetzungen werden automatisch wieder rückgängig gemacht.
This is a Reorganisation Dieser Zweig des Produktaufbaus wird nur bei Reorganisationen besucht. Das Haupttemplate des Produktes wird an seine neu berechnete Position im Dokument verschoben. Fortsetzungen des Produktes werden gelöscht und neu angelegt.
Not Enough Space Es wirde kein Seitenelement gefunden, dass groß genug für das Produkt (oder dessen Fortsetzung) ist.
Prrduct Finished Das Produkt wurde erfolgreich eingefügt und aufgebaut. Der Aufbauprozeß geht jetzt beim nächsten Produkt (bzw. Seitentemplate) weiter.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode. Für eine genauere Fehlerbeschreibung kann der Funktion ein allokierter String für die Fehlerbeschreibung übergeben werden, siehe Parameter errmess. | |
pl | ProductList | - | aufzubauende Produkte |
dref | ItemRef | - | Zieldokument für den Aufbau 0 : Aktuelles Dokument |
int | pageNum | - | Startseite für den Aufbau 0 : Aktuelle Seite des Frontdokumentes Unter InDesign® Server und comet_pdf ist die aktuelle Seite nicht definiert. |
layer | String oder char* | - | Name der Zielebene "" : Aktuelle Ebene des Zieldokumentes |
int | pageTemplate | - | Start-Seitentemplate für den Aufbau Seitenwechsel im Aufbau erreichen Sie durch das Einfügen von Produkten mit kProductType = 4 (Seitentemplate) in die Produktliste. Hier finden Sie ein Beispiel. |
int | pageItem | 0 | Verwende dieses Template für den Aufbau. Anwendung siehe unter Flags (kPreferDefaultPageItem) |
int | flags | 0 | Steuerflags. kPreferDefaultPageItem . Verwende das Default-Template pageItem für alle Produkte, sonst nur, wenn im Produkt keine eigenes Template definiert ist. kSkipEmptyTemplates : überspringe beim Aufbau alle Produkte, für die kein Template definiert ist. (verfügbar ab Comet 3.2 R2187) kShowProgress Progressbalken zeigen kCheckIfNotExists : Prüfe vor dem Einfügen, ob das Produkt bereits im Dokument verplant ist, wenn ja, wird es nicht mehr eingefügt. kAutoDetectType : Werden Templates als Text eingefügt, muss entschieden werden, ob ein Templaterahmen als Inline oder sein Inhalt als Text eingefügt werden. Sie können diese Einstellung in den Aufbauregekn von Rahmen machen. Mit gesetztem kAutoDetectType wird wie folgt verfahren : Bei Textrahmen wird der Inhalt eingefügt, sost der Rahmen als Inline. kSuppressAlerts Nachrichten und Warnungen unterdrücken. Einige Meldungen wie "Durch diese Werte würde ein Objekt von der Arbeitsfläche verdrängt werden." sind so tief in InDesign® eingebaut, dass Sie durch Plugins leider nicht unterdrückt werden können. kIgnoreErrors Fehler beim Aufbau ignorieren. Durch fehlerhafte Produkte können 'Löcher' im Aufbau entstehen. Durch Reorganisation des Dokumentes können diese Löcher gefüllt werden. kPreferExistingPages Dokumentseiten, die bereits mit einem Seitentemplate verknüpft sind, verwenden dieses Seitentemplate für Aufbau und Reorganisation. Ist die letzte Seite erreicht, geht es gemäß der Seitentemplate-Nachfolger Regel weiter. kPreferProductPT [Ab v3.3 R2731] In den Produkten können Seitentemplates hinterlegt sein. Der Name des Seitentemplates steht in der Produktrecherche durch @ getrennt hinter dem Template des Produktes. Das Seitentemplate kann im Feld gridID der Panelstatements zum Laden der Produkte festgelegt werden. Jeder Seitentemplate-Wechsel in den Produkten erzwingt dann einen Seitenwechsel. Die neue Seite wird mit dem festgelegten Seitentemplate verknüpft und der Produktaufbau dann auf dieser Seite fortgesetzt. Produkte ohne definiertes Seitentemplate verwenden das ausgewählte Standard- Seitentemplate. ACHTUNG : In der vorliegenden Version können mit diesem Verfahren nur einfache Seitenumbrüche gemacht werden. Umbrüche auf eine neue LINKE oder RECHTE Seite sind damit noch nicht möglich. kLoadMasterItems [Ab v3.3 R3051] Verlinkte Musterseiten-Rahmen werden nach dem Produktaufbau automatisch freigestellt und geleaden. Dabei werden alle Seiten des Dokumentes bearbeitet. Die Einstellung wird ins Dokument übernommen und bei folgenden Seitenreorganisationen ausgewertet : Ist das Flag gesetzt, werden auch nach Reorganisationen die Musterseiten-Rahmen bearbeitet, sonst nicht. Freigestellte Musterseiten-Rahmen lieger immer über den nicht freigestellten Rahmen und können diese mglw. verdecken. Bei Bedarf müssen Rahmen, die im Vordergrund liegen sollen, mit einem leeren Platzhalter versehen und entsprechend arrangiert werden. kSuppressLoad [Ab v4.1.8 R30123] Laden der Platzhalter und Aufbau wiederholender Elemente unterdrücken. kSuppressAutoExtent (0x2000) [Ab v4.3 R36094] Wird der Aufbau in einem N:1-Seitenelement begonnen, werden die neuen Produkte ohne Reorganisation angefügt. Beachten Sie bitte die hier beschriebenen Einschränkungen! |
preScript | int | kNoRule | ID des Vorbereitungsskriptes. Das Skript wird ausgeführt, nachdem die Liste der zu importierenden Produkte
ermittelt worden ist und kann dazu verwendet werden, die Produktliste zu bearbeiten. Siehe dazu auch product::set, product::clone,
productlist und unter dem Absatz Skriptunterstützung. kNoRule - Kein Skript ausführen Sonst : ID des Skriptes, Skriptaufbau siehe hier. |
singleSequences | int | 0 | Die Angabe wird ignoriert. |
sequName | String oder char* | "" | Die Angabe wird ignoriert. |
errmess | String oder char* | 0 | Zeigt die Variable auf einen allokierten String (z.B. vom Typ char[8192]), kann hier eine Fehlermeldung erhalten werden. |
ignoreLayers, ... | String oder char* | 0 | [Ab Comet 3.2] Beliebig lange Liste von Ebenennamen. Neu eingefügte Produkte dürfen Rahmen dieser Ebenen überdecken. Die Liste wird durch die Parameteranzahl oder durch 0 begrenzt. "invisibles" : Alle unsichtbaren Ebenen "except name" : Alle außer dieser Ebene "behind name" : Alle hinter dieser Ebene "background" : Die unterste Ebene sonst : Name der Ebene. Ist diese Ebene die aktive Ebene des Dokumentes, wird die Angabe ignoriert. Es können mehrere ignoreLayers angegeben werden. Sofern nach den Ebenen noch Snippet-Parameter (siehe unten) angegeben werden sollen, muß die Liste mit 0 abgeschlossen werden. Für keine ignoreLayers ist entsprechend eine alleinstehende 0 anzugeben. |
snippetMatchFlags | int | kSnippetsNever | [Ab v4.1.6 R26609] Soll der Aufbau Comet-Snippets verwenden? Die Angaben können beliebig addiert werden, z.B. kSnippetMatchesProduct + kSnippetMatchesTemplate kSnippetsNever : Nein, keine Snippets verwenden kSnippetMatchesProduct : Ja, wenn die Produkt-IDs übereinstimmen kSnippetMatchesTemplate : Ja, wenn die Template-IDs übereinstimmen kSnippetMatchesDocument : Ja, wenn die Dokumente übereinstimmen kSnippetMatchesLayer : Ja, wenn die Ebenen übereinstimmen kSnippetMatchesContext : Ja, wenn der (freie) Kontext übereinstimmt kSnippetFallbackToTemplate : Sollen Comet-Snippets verwendet werden, kann es passieren, dass ein Snippet zu groß für einen Stellplatz ist. Hat das ursprüngliche Template eine Fortsetzung, wäre es in dieser Situation wünschenswert, vielleicht doch dieses ursprüngliche Template für das Produkt zu verwenden (und zu laden). Dann addieren Sie diesen Wert zu snippet_matches. kSnippetCreate : Während des Aufbaus fehlende Snippets anlegen |
snippetContext | String oder char* | 0 | [Ab v4.1.6 R26609] frei zu vergebender String, der einen Kontext des Snippets bezeichnet. Dieser wird während des Aufbaus sowohl für die Snippetsuche (sofern kSnippetMatchesContext gesetzt ist) verwendet, als auch beim Anlegen neuer Snippets hinterlegt. |
snippetFilterFunc | int | 0 | [Ab v4.1.6 R26609] Zeiger auf eine Funktion, die vor Anlegen eines Snippets ausgeführt werden soll. Diese Funktion muß im selben script (oder über ein include eingebunden) implementiert sein. Signatur der Funktion ist int (*snippetFilterFunc)(Product p). Gibt die Funktion 1 zurück, wird für das entsprechende Produkt ein Snippet angelegt, bei 0 wird dieses Produkt übersprungen. Ein Beispiel finden Sie unter prefs::snippet_filter |
#include "internal/products.h" #include "internal/types.h"
int main () { ProductList pl = productlist::get ("selected"); int result;
result = productlist::establish ( pl, 0, // front document -1, // current page "", // front layer 2, // page template 0, // default template kShowProgress, // flags, (showprogress) 0, // pre script 0, // no single sequences "", // sequence name not used 0 // errmess ); if (result == 0) wlog ("", "# Establishing %d products done\n", productlist::length (pl)); else wlog ("", "# Establishing %d products returned error %d\n", productlist::length (pl), result);
return 0; }
static int productlist::grid_build(
ItemRef docRef,
PlanningList plannings,
int flags = 128,
char* buildMessage = 0,
char* layer = 0,
int preScript = 0,
int snippetMatchFlags = 0,
char* snippetContext = 0,
int snippetFilterFunc = 0)
Baue eine Liste von Planning-Objekten gemäßl; der hinterlegten Seiten, Koordinaten und Dimensionen auf.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode. | |
docRef | ItemRef | - | Dokument 0 : aktuelles Dokument |
plannings | PlanningList | - | Liste von Planning Objekten |
flags | int | - | Flags zur Steuerung des Aufbaus. Prinzipiell sind alle von productlist::establish unterstützten flags erlaubt, sinnvoll n diesem Zusammenhang sind vor allem: 0 : Stellplatzgröße ignorieren. Impliziert: bestehenden Inhalt ebenfalls ignorieren kCheckGridElementSize : Stellplatzgröße beachten |
buildMessage | char * | 0 | Buffer für Fehlermeldungen während des Aufbaus |
layer | char * | 0 | Zielebene |
preScript | int | kNoRule | ID des Vorbereitungsskriptes. Das Skript wird ausgeführt, nachdem die Liste der zu importierenden Produkte
ermittelt worden ist und kann dazu verwendet werden, die Produktliste zu bearbeiten. Siehe dazu auch product::set, product::clone,
productlist und unter dem Absatz Skriptunterstützung. kNoRule - Kein Skript ausführen Sonst : ID des Skriptes, Skriptaufbau siehe hier. |
snippetMatchFlags | int | kSnippetsNever | [Ab v5.0 R36398] Soll der Aufbau Comet-Snippets verwenden? Die Angaben können beliebig addiert werden, z.B. kSnippetMatchesProduct + kSnippetMatchesTemplate kSnippetsNever : Nein, keine Snippets verwenden kSnippetMatchesProduct : Ja, wenn die Produkt-IDs übereinstimmen kSnippetMatchesTemplate : Ja, wenn die Template-IDs übereinstimmen kSnippetMatchesDocument : Ja, wenn die Dokumente übereinstimmen kSnippetMatchesLayer : Ja, wenn die Ebenen übereinstimmen kSnippetMatchesContext : Ja, wenn der (freie) Kontext übereinstimmt kSnippetFallbackToTemplate : Sollen Comet-Snippets verwendet werden, kann es passieren, dass ein Snippet zu groß für einen Stellplatz ist. Hat das ursprüngliche Template eine Fortsetzung, wäre es in dieser Situation wünschenswert, vielleicht doch dieses ursprüngliche Template für das Produkt zu verwenden (und zu laden). Dann addieren Sie diesen Wert zu snippet_matches. kSnippetCreate : Während des Aufbaus fehlende Snippets anlegen |
snippetContext | String oder char* | 0 | [Ab v5.0 R36398] frei zu vergebender String, der einen Kontext des Snippets bezeichnet. Dieser wird während des Aufbaus sowohl für die Snippetsuche (sofern kSnippetMatchesContext gesetzt ist) verwendet, als auch beim Anlegen neuer Snippets hinterlegt. |
snippetFilterFunc | int | 0 | [Ab v5.0 R36398] Zeiger auf eine Funktion, die vor Anlegen eines Snippets ausgeführt werden soll. Diese Funktion muß im selben script (oder über ein include eingebunden) implementiert sein. Signatur der Funktion ist int (*snippetFilterFunc)(Product p). Gibt die Funktion 1 zurück, wird für das entsprechende Produkt ein Snippet angelegt, bei 0 wird dieses Produkt übersprungen. Ein Beispiel finden Sie unter prefs::snippet_filter |
static int productlist::trace_build(
ItemRef docRef,
int pg,
char* fileName)
Füge der Aufbauverfolgung ein weiteres Bild der aktuellen Situation hinzu. Das Bild bekommt die automatisch die nächste Zählnummer. Die Anweisung hat nur dann eine Wirkung, wenn die Aufbauverfolgung aktiviert ist (Menü Flyout der Produktrecherche -> Verschiedenes -> Aufbauverfolgung).
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode. | |
docRef | ItemRef | - | Dokument 0 : aktuelles Dokument |
pg | int | - | 1-basierte Seite, die "fotografiert" werden soll. |
fileName | String oder char* | - | Name der erzeugten Datei. Der Name wird an die automatische vergebene Zählnummer angefügt. Gleichzeitig erscheint im Logfile
eine zugehörige Meldung: # Trace image created : '$CACHE/BuildTrace/NN_p1_fileName.png' |
static ProductList productlist::get_established(
ItemRef docRef = 0,
int startPage = 1,
ItemRef behindRef = 0)
Erzeuge eine neue Liste aus den in einem Dokument enthaltenen Produkten und den verwendeten Seitentemplates. Die Liste entspricht der Liste, die in der Palette Produkte des Dokumentes gezeigt wird. Weitere Informationen zu Produktlisten und Produkten in Listen finden Sie hier.
Name | Typ | Default | Beschreibung |
Return | ProductList | Zeiger auf die neue Liste | |
docRef | ItemRef | 0 | Dokument 0 : aktuelles Dokument |
startPage | int | 1 | Startseite, ab der das Dokument durchsucht werden soll (1-basiert) |
behindFrame | ItemRef | 0 | Erst hinter diesem Rahmen mit der Suche beginnen. Ist der Wert ungleich 0, wird die Angabe der Startseite ignoriert. |
Suche alle aufgebauten Produkte der Seite des ausgewählten Rahmens und schreibe sie ins Logfile.
#include "internal/products.h"
int main () { ProductList pl; Product p; int pg1 = page::get (gFrame);
pl = productlist::get_established (0, pg1, 0); if (!productlist::length (pl)) { wlog ("", "No products found!\n"); return 0; }
wlog ("", "Products found on page %d\n", pg1); for (p = productlist::first (pl); p; p = productlist::next (pl)) { if (product::get (p, kProductType) != 4) { wlog ("", "[%d, %d, %d, '%s'] : used template %d\n", product::get (p, kID), product::get (p, kID2), product::get (p, kID3), product::gets (p, kStringID), product::get (p, kPageitemid)); } }
return 0; }
static int productlist::reorganize(
ItemRef docRef = 0,
ProductList plist = 0,
ItemRef firstFrame = 0,
int thisPageOnly = 0,
int flags = 1,
char* errmess = 0,
int* failedIndex = 0,
Product* firstEntry = 0)
Reorganisation eines Dokumentes. Ist die übergebene Liste der Produkte leer oder 0, wird sie aus dem Dokument ermittelt.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
docRef | ItemRef | 0 | Dokument 0 : aktuelles Dokument |
plist | ProductList | 0 | Liste der Produkte des Dokumentes (z.B. aus get_established) 0 : Ermittle die Produkte direkt aus dem Dokument |
firstFrame | ItemRef | 0 | Beginne bei der Cometgruppe dieses Rahmens mit dem Aufräumen. 0 : Angabe ignorieren und gesamtes Dokument aufräumen |
thisPageOnly | int | 0 | Nur diese Seite aufräumen 0 : Angabe ignorieren. Das gesamte Dokument wird (mglw. erst hinter firstFrame beginnend) aufgräumt. >0 : 1-basierter Seitenindex. In diesem Fall werden die Angaben firstFrame und plist ignoriert. Der Aufruf entspricht dem Menü "Seite aufräumen". Ist zusätzlich das Flag kFillPage gesetzt, entspricht der Aufruf dem Menü "Seite füllen und aufräumen". -2 : Nur die Seite aufräumen, auf der entweder der erste Rahmen des ersten Produktes von plist oder (wenn plist leer ist) der Rahmen firstFrame liegt. Sind beide Angaben leer, wird die erste Seite des Dokumentes aufgeräumt. |
flags | int | kShowProgress | Flags kShowProgress Progressbalken zeigen kReloadAll Unterdrücke das Kopieren von Texten und Bildern zwischen Rahmen befreundeter Templates und gleicher Kennungen bei Templateänderungen kSuppressAlerts Nachrichten und Warnungen unterdrücken. Einige Meldungen wie "Durch diese Werte würde ein Objekt von der Arbeitsfläche verdrängt werden." sind so tief in InDesign® eingebaut, dass Sie durch Plugins leider nicht unterdrückt werden können. kIgnoreErrors Fehler beim Aufbau ignorieren. Durch fehlerhafte Produkte können 'Löcher' im Aufbau entstehen. Durch Reorganisation des Dokumentes können diese Löcher gefüllt werden. kPreferExistingPages Dokumentseiten, die bereits mit einem Seitentemplate verknüpft sind, verwenden dieses Seitentemplate für Aufbau und Reorganisation. Ist die letzte Seite erreicht, geht es gemäß der Seitentemplate-Nachfolger Regel weiter. kLoadMasterItems [Ab v3.3 R3051] Verlinkte Musterseiten-Rahmen werden nach dem Aufräumen automatisch freigestellt und geleaden. Dabei werden alle Seiten des Dokumentes bearbeitet. Wurde der letzte Produktaufbau mit diesem Flag gemacht, hat die Option (und insbesondere ihr Fehlen) keine Bedeutung : In diesem Fall werden die Musterseiten-Rahmem immer freigestellt und/oder geladen. Freigestellte Musterseiten-Rahmen lieger immer über den nicht freigestellten Rahmen und können diese mglw. verdecken. Bei Bedarf müssen Rahmen, die im Vordergrund liegen sollen, mit einem leeren Platzhalter versehen und entsprechend arrangiert werden. kFillPage [Ab v3.4 R5115] und bei thisPageOnly > 0 : Seite vor dem Aufraümen füllen. kCropPage [Ab v3.4 R5115] und bei thisPageOnly > 0 : Seite gleichzeitig freistellen. Vor und hinter der Seite werden jeweils Produktaufbau-Seitenumbrüche eingefügt. |
errmess | String oder char* | 0 | 0 oder allokierter Speicher für mögliche Fehlernachrichten. Wenn Sie den char* benutzen, sollte er mind. für 4000 Zeichen Platz haben. |
failedIndex | int* | 0 | Listenindex des Produktes, bei dem der erste Fehler auftrat. |
firstEntry | Product | 0 | Reorganisiere ab dem gegebenen Eintrag bis zum Ende der Liste plist 0 : Angabe ignorieren Sonst : Gültiger Eintrag der Produktliste plist. Die Angaben für firstFrame und thisPageOnly werden in diesem Fall ignoriert. |
static int productlist::get_default_pageitem()
Welches Template ist in der Produktrecherche als Standard ausgewählt? (Die Einstellung wird in dem Popup oben rechts gemacht). Die Funktion kann nur dann einen Wert liefern, wenn die Palette Produktrecherche geöffnet ist.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder ID des Templates, das in der Produktrecherche als Standard ausgewählt ist. Die Funktion kann nur dann einen Wert liefern, wenn die Palette Produktrecherche geöffnet ist. |
static int productlist::sort(LinkList lli, int cmpFunc)
Sortiere eine Liste von Produkten.
Die Vergleichfunktion cmpFunc muss im Skript definiert sein und folgenden Typ haben
int yourCmpFunction (Product a, Product b)
Die Funktion wird verwendet um zu testen, ob die Reihenfolge der beiden Listenobjekte a und b stimmt oder nicht. Beim Aufruf steht a vor b in der Liste. Soll diese Reihenfolge getauscht werden, geben Sie in der Funktion eine 1 zurück, sonst 0.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
lli | ProductList | - | Gültige Produktliste. |
cmpFunc | int yourCmpFunction (Product a, Product b) | - | Vergleichsfunktion. Die Funktion wird verwendet um zu testen,
ob die Reihenfolge der beiden Listenobjekte a und b stimmt oder nicht.
Beim Aufruf steht a vor b in der Liste. Soll diese Reihenfolge getauscht werden,
geben Sie in der Funktion eine 1 zurück, sonst 0. Die Funktion wird in der Regel lokal im Skript definiert. Globale Variablen des Skriptes dürfen in der Funktion nicht verwendet werden! |
Die Liste der in der Produktrecherche ausgewählten Einträge wird nach verschiendenen Kriterien sortiert und ins Logfile geschrieben.
#include "internal/text.h" #include "internal/types.h" #include "internal/products.h"
int w_pli (ProductList pli, char * trailer) { Product p;
wlog ("", "%s\n", trailer); for (p = productlist::first (pli); p; p = productlist::next (pli)) { wlog ("", "[%d %d %d, '%s'] (Template %d): '%s'\n", product::get (p, kID), product::get (p, kID2), product::get (p, kID3), product::get (p, kStringID), product::get (p, kPageitemid), product::gets (p, kRow1)); } wlog ("", "\n"); }
int byName_asc (Product a, Product b) { char s1 [8000]; char s2 [8000];
strcpy (s1, product::gets (a, kRow1)); strcpy (s2, product::gets (b, kRow1));
if (strcmp (s1, s2) > 0) return 1;
else return 0; }
int byName_desc (Product a, Product b) { char s1 [8000]; char s2 [8000];
strcpy (s1, product::gets (a, kRow1)); strcpy (s2, product::gets (b, kRow1));
if (strcmp (s1, s2) < 0) return 1;
else return 0; }
int byTemplate_asc (Product a, Product b) { if (product::get (a, kPageitemid) > product::get (b, kPageitemid)) return 1;
else return 0; }
int byID_asc (Product a, Product b) { if (product::get (a, kID) > product::get (b, kID)) return 1;
else return 0; }
int main () { ProductList pli = productlist::get ("selected");
w_pli (pli, "Original");
productlist::sort (pli, byName_asc); w_pli (pli, "By name (ascent)");
productlist::sort (pli, byName_desc); w_pli (pli, "By name (descent)");
productlist::sort (pli, byTemplate_asc); w_pli (pli, "By template (ascent)");
productlist::sort (pli, byID_asc); w_pli (pli, "By id1 (ascent)");
return 0; }
static int productlist::update_findstatements(
int reloadFindStatements,
int popupSelection,
int reloadProducts)
Aktualisieren des Popup-Menüs mit den Suchmethoden in der Produktrecherche. Die Anweisung benötigt keine Produktliste.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
reloadFindStatements | int | 0 | Popupmenü neu laden? 0 : nein 1 : ja |
popupSelection | int | -1 | Ausgewählter Eintrag des Popup-Menüs (0-basiert). Trennzeilen im Menü werden dabei mitgezählt. -1 : Auswahl unverändert lassen (wenn möglich) >= Anzahl der Menüeinträge : Letzten Eintrag auswählen |
reloadProducts | int | 0 | Produktliste neu laden? 0 : nein 1 : ja |
static int productlist::create_snippets(
ItemRef docRef = 0,
int page = 0,
int snippetMatchFlags = 0,
char* snippetContext = 0,
char* snippetLayer = 0,
int snippetFilterFunc = 0)
Anlegen von Comet-Snippets der Cometgruppen eines Dokumentes. Existierende Snippets, die denselben Kriterien entsprechen, werden überschrieben, das bedeutet: je spezifischer die Suchkriterien, desto weniger Snippets sind von Aktualisierungen betroffen. Wenn kein passendes Snippet exisitiert, wird ein neuer Eintrag angelegt.
Comet-Snippets werden nur von Produkten ohne Fortsetzungen angelegt.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
docRef | ItemRef | 0 | Dokument, von dem die Snippets erzeugt werden sollen. 0 : aktuelles Dokument |
page | int | 0 | Welche Seiten sollen verwendet werden? 0 : alle Seiten > 0 : nur diese Seite -1 : Cometgruppen der ausgewählten Rahmen |
snippetMatchFlags | int | kSnippetsNever | [Ab v4.1.6 R26609] Soll der Aufbau Comet-Snippets verwenden? Die Angaben können beliebig addiert werden, z.B. kSnippetMatchesProduct + kSnippetMatchesTemplate -1 zeigt den Dialog zur Festlegung der Snippet-Parameter an. kSnippetsNever : Nein, keine Snippets verwenden kSnippetMatchesProduct : Ja, wenn die Produkt-IDs übereinstimmen kSnippetMatchesTemplate : Ja, wenn die Template-IDs übereinstimmen kSnippetMatchesDocument : Ja, wenn die Dokumente übereinstimmen kSnippetMatchesLayer : Ja, wenn die Ebenen übereinstimmen kSnippetMatchesContext : Ja, wenn der (freie) Kontext übereinstimmt |
snippetContext | String oder char* | 0 | [Ab v4.1.6 R26609] frei zu vergebender String, der einen Kontext des Snippets bezeichnet. Dieser wird während des Aufbaus sowohl für die Snippetsuche (sofern kSnippetMatchesContext gesetzt ist) verwendet, als auch beim Anlegen neuer Snippets hinterlegt. |
snippetLayer | String oder char* | 0 | [Ab v4.1.6 R26609] wenn angegeben, werden Snippets auch auf Ebenen-übereinstimmung geprüft. |
snippetFilterFunc | int | 0 | [Ab v4.1.6 R26609] Zeiger auf eine Funktion, die vor Anlegen eines Snippets ausgeführt werden soll. Diese Funktion muß im selben script (oder über ein include eingebunden) implementiert sein. Signatur der Funktion ist int (*snippetFilterFunc)(Product p). Gibt die Funktion 1 zurück, wird für das entsprechende Produkt ein Snippet angelegt, bei 0 wird dieses Produkt übersprungen. Ein Beispiel hierzu finden Sie unter prefs::snippet_filter |
static int productlist::remove_snippets(char* key, ItemRef docRef)
Löschen von Comet-Snippets.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
Snippets eines Dokumentes löschen | |||
key | String oder char* | - | "DOC" |
value | ItemRef | - | Dokument, dessen Snippets gelöscht werden sollen 0 : aktuelles Dokument |
Dokumentauswahl | |||
key | String oder char* | - | "DOCID" oder "DOCPATH" |
value | String oder char* | - | key == "DOCID" : Dokument-ID des Pubservers key == "DOCPATH" : Vollständiger Pfad des Dokumentes |
Produkt-ID | |||
key | String oder char* | - | "RECORDID" |
id1 | int | - | ID1 des Produktes, dessen Snippet(s) gelöscht werden sollen |
id2 | int | - | ID2 des Produktes, dessen Snippet(s) gelöscht werden sollen |
id3 | int | - | ID3 des Produktes, dessen Snippet(s) gelöscht werden sollen |
sid | String oder char* | - | StringID des Produktes, dessen Snippet(s) gelöscht werden sollen |
static char* productlist::to_xml(ProductList list, char* rootElementName = "products")
Generiere die XML Struktur eines ProductList-Objekts.
Wenn Sie über die Verwendung dieser Funktion nachdenken, sind Sie möglicherweise an näheren Informationen zur Interaktion von cscript mit auf dem PubServer als PlugIn bereitgestellten Java-Methoden interessiert. Mehr Informationen dazu finden Sie hier.
Name | Typ | Default | Beschreibung |
Return | char * | xml string oder 0 bei Fehlern. Der Ergebnisstring ist nur bis zum nächsten Aufruf einer to_xml-Funktion gültig und darf nicht verändert oder freigegeben werden. | |
list | ProductList | - | Object |
rootElementName | String oder char* | products | Name des Root-Elements |
static ProductList productlist::from_xml(char* xml)
Generiere eine ProductList-Objekt aus einer XML Struktur.
Es gibt zwei Formate in denen Produktlisten übergeben werden können:
Dieses Format enthält alle Angaben, die die Produkte einer Produktrecherche kennen (vgl. hier). Das Format wird im PubServer-Umfeld verwendet und die XML-Beschreibung wird als Stringeingabe dieser Funktion erwartet.
Wenn Sie über die Verwendung dieser Funktion nachdenken, sind Sie möglicherweise an näheren Informationen zur Interaktion von cscript mit auf dem PubServer als PlugIn bereitgestellten Java-Methoden interessiert. Mehr Informationen dazu finden Sie hier.
<products xsi:type="cscript-products" xmlns:xsi="http:www.w3.org/2001/XMLSchema-instance" xmlns:xs="http:www.w3.org/2001/XMLSchema"> <product> <classId>0</classId> <column1/> <column2/> <docId>0</docId> <gridElementId>0</gridElementId> <gridElementName/> <gridId>0</gridId> <gridName/> <gridElmentId>0</gridElmentId> <pageTemplateElementId>0</pageTemplateElementId> <pageTemplateId>0</pageTemplateId> <forceDelete>false</forceDelete> <id>1</id> <id2>0</id2> <id3>0</id3> <stringId/> <masterPage/> <pageItemId>0</pageItemId> <preRuleId>0</preRuleId> <postRuleId>0</postRuleId> <documentPosition>-1</documentPosition> <toDelete>0</toDelete> <start>-1</start> <end>-1</end> <type>4</type> <tagId1>0</tagId1> <tagId2>0</tagId2> <pageType>1</pageType> <preRuleParams/> <postRuleParams/> <adParams/> <snippetAttribute/> </product> <product> <classId>0</classId> <column1/> <column2/> <docId>0</docId> <gridElementId>0</gridElementId> <gridElementName/> <gridId>0</gridId> <gridName/> <gridElmentId>0</gridElmentId> <pageTemplateElementId>0</pageTemplateElementId> <pageTemplateId>0</pageTemplateId> <forceDelete>false</forceDelete> <id>1</id> <id2>0</id2> <id3>0</id3> <stringId/> <masterPage/> <pageItemId>1</pageItemId> <preRuleId>0</preRuleId> <postRuleId>0</postRuleId> <documentPosition>-1</documentPosition> <toDelete>0</toDelete> <start>-1</start> <end>-1</end> <type>0</type> <tagId1>0</tagId1> <tagId2>0</tagId2> <pageType>-1</pageType> <preRuleParams/> <postRuleParams/> <adParams/> <snippetAttribute/> </product> </products>
Dieses Format enthält alle Angaben, die für einen Produktaufbau bzw. eine Reorganisation
nötig sind. Das Format kann ausschließlich über Eingabedateien gelesen werden.
Die Pfadangabe erfolgt hinter einem führenden file: im Parameter xml der Funktion.
Gültige items.xmls erhalten Sie z.B. mit Hilfe des Sichern-Buttons der Palette Produkte des Dokumentes
aus einem Dokument mit vorher aufgebauten Produkten.
<?xml version="1.0" encoding="utf-8"?> <items version="4.2" pluginRevision="33067" ref="document" documentID="" spreadID="" pageID="" groupID="" elementID="" importFlags="0x0" documentPath="" documentName="" isMissingPlugIns="0" isConverted="0" isModified="1" isReadOnly="0"> <item> <ID>1</ID> <ID2>0</ID2> <ID3>0</ID3> <stringID/> <pageitemID>0</pageitemID> <type>pagetemplate</type> <pageType>1</pageType> <layout_layers/> <document-position>-1</document-position> <groupID>0</groupID> <classID>3</classID> <status>normal</status> <elementID>0</elementID> <preruleID>0</preruleID> <preruleParams/> <postruleID>0</postruleID> <postruleParams/> <keepWithNext>0</keepWithNext> </item> <item> <ID>1</ID> <ID2>0</ID2> <ID3>0</ID3> <stringID/> <pageitemID>1</pageitemID> <type>product</type> <pageType>-1</pageType> <layout_layers/> <document-position>-1</document-position> <groupID>0</groupID> <classID>3</classID> <status>normal</status> <elementID>0</elementID> <preruleID>0</preruleID> <preruleParams/> <postruleID>0</postruleID> <postruleParams/> <keepWithNext>0</keepWithNext> </item> <items>
Name | Typ | Default | Beschreibung |
Return | ProductList | Objekt vom Typ ProductList. Dieses Objekt muss mit productlist::release wieder freigegeben werden. | |
xml | String oder char* | - | Gültiger XML-String einer products.xml "file://..." [seit v4.2 R33100, nicht unterstützt von Illustrator] Angabe eines Pfades auf eine items.xml XML-Datei. Beachten Sie bitte, dass die Syntax einer items.xml anders ist als die einer products.xml. Folgende Pfadangaben werden unterstützt:
|
static int productlist::add_all(
ProductList target,
ProductList src,
int deleteFromSource)
Füge alle Elemente der Liste src in die Liste target ein. Bei deleteFromSource != 0 werden die Elemente aus der Quellliste entfernt (aber nicht freigegeben)
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode. | |
target | ProductList - | Zielliste | |
src | ProductList - | Quellliste | |
deleteFromSource | 0 | Elemente aus der Quelliste entfernen |
static int productlist::is_in_build(int* pageTemplateID = 0, int* elementSeq = 0)
Befindet sich das aktuell ausgeführte Skript in einem Produktaufbau oder nicht?
Name | Typ | Default | Beschreibung |
Return | int | 0 : Nein, es ist kein Produktaufbau aktiv 1 : Ja |
|
pageTemplateID | int* | 0 | Bei Rückgabewert 1 : ID des aktuell verwendeten Seitentemplates |
elementSeq | int* | 0 | Bei Rückgabewert 1 : Sequenznummer des aktuell verwendeten Seitenelementes |
static int productlist::get_build_trace(
int* on = 0,
int* showNails = 0,
int* showUIDs = 0,
int* showEdges = 0,
float* resolution = 0)
Aktuelle Einstellungen der Aufbauverfolgung erfragen.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
on | int* | 0 | Ist die Aufbauverfolgung an? 0 : Wert ignorieren sonst : Bei erfolgreicher Ausführung ist der Inhalt der Variable 0 (aus) oder 1 (an) |
showNails | int* | 0 | Zeigt die Aufbauverfolgung Nägel und Magnete? 0 : Wert ignorieren sonst : Bei erfolgreicher Ausführung ist der Inhalt der Variable 0 (nein) oder 1 (ja) |
showUIDs | int* | 0 | Zeigt die Aufbauverfolgung Rahmen-UIDs? 0 : Wert ignorieren sonst : Bei erfolgreicher Ausführung ist der Inhalt der Variable 0 (nein) oder 1 (ja) |
showEdges | int* | 0 | Zeigt die Aufbauverfolgung Rahmenkanten? 0 : Wert ignorieren sonst : Bei erfolgreicher Ausführung ist der Inhalt der Variable 0 (nein) oder 1 (ja) |
resolution | float* | 0 | Auflösung der Bilder der Aufbauverfolgung 0 : Wert ignorieren sonst : Bei erfolgreicher Ausführung enthält die Variable die Bildauflösung. |
format | char* oder String | 0 | Das aktive Bildformat. 0 : Wert ignorieren sonst : Bei erfolgreicher Ausführung enthält die Variable das Bildformat. |
static int productlist::set_build_trace(
int on = -2,
int showNails = -2,
int showUIDs = -2,
int showEdges = -2,
float resolution = 0.0)
Aufbauverfolgung (de)aktivieren. Nach Neustart von InDesign® wird die Aufbauverfolgung automatisch deaktiviert!
Die Aufbauverfolgung führt zu wesentlich längeren Aufbauzeiten und hinterläßt mglw. sehr viele Daten. Bilder werden immer im Ordner $CACHE/BuildTrace abgelegt. Sie sollten diesen Ordner von Zeit zu Zeit löschen!
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode | |
on | int | -2 | Aufbauverfolgung aktivieren? -2 : Unverändert lassen -1 : Toggle 0 : Aus >0 : An |
showNails | int | 0 | Nägel und Magnete zeigen? -2 : Unverändert lassen -1 : Toggle 0 : Nein >0 : Ja |
showUIDs | int | 0 | Rahmen-UIDs zeigen? -2 : Unverändert lassen -1 : Toggle 0 : Nein >0 : Ja |
showEdges | int | 0 | Rahmenkanten zeigen? -2 : Unverändert lassen -1 : Toggle 0 : Nein >0 : Ja |
resolution | float | 0 | Auflösung der Bilder der Aufbauverfolgung 0.0 : Wert ignorieren sonst : Bildauflösung in px/pt. Auflösungen werden automatisch auf ganze Werte abgerundet. Werte werden auf den Bereich [20.0 - 600.0] begrenzt. |
format | char* oder String | 0 | Bildformat der Ausgabedateien. 0: Unverändert lassen. Default ist "jpg". Gültige Werte: "jpg", "JPG", "png", "PNG" |
Hier ein einfaches Javascript mit einem Produktaufbau des Comic-Showcases.
var gOptions = app.comet.ping () + ";-1;"; var myPath = "/Users/paul/Desktop/aaa.indd";
var gScriptID = 2006; var gScript = "gray">"\ \ #include \"internal/types.h\"\ #include \"internal/text.h\"\ #include \"internal/products.h\"\ \ int main() \ {\ productlist::set_build_trace (1, 1, 1, 0, 56.7);\ return 0;\ }\ ";
app.comet.setEnvironment ("/DATA/CometEnvironment", 2, ""); // Hier muss sich connections.xml befinden app.comet.use ("demo", "", "", false, ""); // Diesen Eintrag aus connections.xml verwenden
app.comet.documentOpen (myPath, true, gOptions);
app.comet.eval (gScript, '', '');
var gItemsXML ="gray">"\ <item><ID>1</ID><ID2>0</ID2><ID3>0</ID3><stringID>109007</stringID><pageitemID>1</pageitemID></item>\ <item><ID>1</ID><ID2>0</ID2><ID3>0</ID3><stringID>116507</stringID><pageitemID>1</pageitemID></item>\ <item><ID>1</ID><ID2>0</ID2><ID3>0</ID3><stringID>105507</stringID><pageitemID>1</pageitemID></item>\ <item><ID>1</ID><ID2>0</ID2><ID3>0</ID3><stringID>110007</stringID><pageitemID>1</pageitemID></item>\ </items>" ;
app.comet.build (myPath, // document path Scope.SPREAD, // Scope.SPREAD | Scope.PAGE 0, // spread or page index gItemsXML, // items xml 0.0, 0.0, // x / y gOptions);
app.comet.documentSave (myPath, gOptions); app.comet.documentClose (myPath, gOptions);
#include "internal/products.h"
int main () { ProductList li; Product p; int i;
li = productlist::get ("watched [id3 = 1 or id3=6]"); if (!li) { showmessage ("Keine Produkte"); return 0; }
showmessage ("-- %d --", productlist::length (li)); for ( p = productlist::first (li); p; p = productlist::next (li)) { showmessage ("%d : %s (Template %d)", product::get (p, kID), product::gets (p, kRow1), product::get (p, kPageitemid)); }
return 0; }
Alphabetic index HTML hierarchy of classes or Java