Definition of the data pool for placeholder.
Definition of the data pool for placeholder. Datat for placeholder can come form various pools:
If you have set up a database connection in InDesign®, a call by datapool::set_dbc (pool, 0) hides all calls to the connected database. For example, the function document::place_items would therefore not attempt to read your required data (the description of the templates) from the database, but from the currently defined XML file instead. If you change this setting too by using datapool::set_files (pool, "neuer Pfad"), the templates will be retrieved from this path.
static DataPool alloc()
Create a new variable from the datapool data type. The variable will be automatically filled with the current settings in InDesign®. The database connection contains the value of sql::dbconnection. The file connection contains the value xml::app_path. The variable must be deleted again using datapool::release.
Name | Type | Default | Description |
Return | DataPool | A new object of type DataPool |
DataPool pool = datapool::alloc ();
: datapool::release (pool);
static int release(DataPool pool)
Delete a variable of the datapool type. Following the call of this function, the value of the variable may not longer be accessed.
Name | Type | Default | Description |
Return | DataPool | A new object of type DataPool |
DataPool pool = datapool::alloc ();
: datapool::release (pool);
static int type(DataPool pool = 0)
Type of the (current) database connection.
Name | Type | Default | Description |
Return | int | kNotConnected kDBCConnection kXMLConnection kSOAPConnection |
|
pool | DataPool | 0 | From which database connection is the type to be derived? 0 - current connection Otherwise - Defined data pool |
static int get_vendor(DataPool pool = 0)
Database vendor of the data connection. For ODBC connections, the value previously set with datapool::set_vendor is returned. Otherwise, the function returns the value -1.
Please note that the vendor is not automatically set in ODBC connections either!
Name | Type | Default | Description |
Return | int | For ODBC connections, the value previously set with datapool::set_vendor otherwise : -1 |
|
pool | DataPool | 0 | From which data connection should the vendor be determined? 0 - Current data connection otherwise - Defined data connection |
static int set_vendor(DataPool pool = 0, int vendor = -1)
Set the database vendor of the data connection. The function only has an effect with ODBC connections, otherwise the call is ignored.
Name | Type | Default | Description |
Return | int | 0 : For ODBC connections otherwise : noDatabaseErr (= 400) |
|
pool | DataPool | 0 | In which data connection should the manufacturer be set? 0 - Current data connection otherwise - Defined data connection |
vendor | int | -1 | 1 : Oracle 2 : Sybase 3 : mySQL 4 : DB2 6 : PostGre 7 : SAP -1 : Undefined |
static int set_dbc(DataPool pool, int* dbc)
Set the database connection of the datapool. The command has the particular function of suppressing the storing and writing of data to/from the database, even though the database connection has been created via InDesign®. For the database connection only 0 or the currently valid connection (sql::dbconnection) may be used.
Name | Type | Default | Description |
Return | int | 0 or ErrorCode | |
pool | DataPool | - | Defined datapool |
dbc | int*, DBC or SOAP | - | Database connection or 0 For the database connection only 0 or the currently valid connection (sql::dbconnection, soap::connection). |
DataPool pool = datapool::alloc ();
datapool::set_dbc (pool, 0);
: datapool::release (pool);
static int set_files(DataPool pool, char* fpath)
Set the file source of the datapool. For the file pool a folder must be specified, which corresponds to the definitions of Werk II.
You will find the correct definition of the file pool and its place in the folder structure from the document of the functions which use a datapool.
Name | Type | Default | Description |
Return | int | 0 or ErrorCode | |
pool | DataPool | - | Defined datapool |
fpath | String or char* | - | File source of the pool |
DataPool pool = datapool::alloc (); char myxmlpath[4069];
document::folder (myxmlpath); strcat (myxmlpath, "/"); strcat (myxmlpath, "xmldata"); datapool::set_files (pool, myxmlpath);
: datapool::release (pool);
static int* get_dbc(DataPool pool)
Ascertain the database connection of the datapool. On basis of datapool::alloc this value is the current database connection of Indesign® and corresponds to the result of the function sql::dbconnection.
Name | Type | Default | Description |
Return | int*, DBC oder SOAP | Database connection of the pool. On basis of datapool::alloc this value is the current database connection and corresponds to teh result of the function sql::dbconnection bzw. soap::connection | |
pool | Datapool | - | Defined datapool |
static char* get_files(DataPool pool, char* result)
Ascertain the database connection of the datapool. On basis of datapool::alloc this value is the current database connection and corresponds to the result of xml::app_path.
Name | Type | Default | Description |
Return | String or char* | (Depends on parameter result) File connection of the pool. Based on datapool::alloc this value is the current database connection and corresponds to the result of xml::app_path. Same as parameter result | |
pool | DataPool | - | Defined datapool |
result | String or char* | - | Reserved memory for the result |
static int get_products(
char* statement,
List l1,
List l2 = 0,
List l3 = 0,
StringList s1 = 0,
int flags = 0,
int checkTemplates = 0)
Depending on the current selection in the product panel, one or more lists of product IDs will be ascertained. In doing so, sub-entries can be automatically ascertained. To load the sub-entries exactly the same algorithm will be used, which is also executed in the product panel when opening an entry. The sequence in the result lists corresponds to the sequence in the product research panel.
The command requires the product research plugin. The product research must be opened.
The selection of products can be defined using the parameter statement. The following image describes the syntax of the statement using the so called EBNF notation.
If you not familiar with the syntax, it's quite easy:
Part | Default | Description |
Panel | empty | The list of products is retreived from the panel Product pool by default. With ItemPool given as panel, the products are loaded from the panel Products & Items. |
Base | watched |
Product Pool panel Which visible objects of the product pool are to be processed?
selected : All selected products from the list (list selection). Be carefull in this case, the selection is updated automatically if the document selection changes! clean : It' a reorganization call. More options [since v3.3 R3303, 26.11.2012] You may wish or not to remove double entries from the result list.
|
[Expand] {Expand} |
empty | This part of the statement typically is the hardest. You define the conditions to check, whether products should load their sub entries or not:
Conditions can be written in the usual syntax or in SQL or xml query, e.g. id1 > 0 and level > 0. See the next table for a list of supported attributes. Condition1 ? Condition2 If the condition Condition1 for an object is fulfilled, it will be assumed into the result list. If the condition condition1 is not fulfilled, the condition Condition2 will be tested. If the condition condition2 is fulfilled, the sub-entry will be loaded. The condition2 condition serve as an interruption criterium but it is possible that the product tree will indeed form circles. Hints If you use {...} you should use the option "with doubles allowed" too. Otherwise product pool selections containing products AND sub products of this products will lead to lists containing the sub products twice. |
Proof | empty | After all the products (and sub-products) have been ascertained using the condition condition3, a check can be made to see if the object is at all to remain in the list. If condition3 is not fulfilled, the object will again be removed from the results list. |
Name | Type/value | Description |
id | int | ID of the object comprised of 3 numbers and a (optional) string |
id2 | ||
id3 | ||
stringid | char* | |
pageitemid | int | The template ID stored in the object |
docid | int | The document ID stored in the object |
masterpage | char* | The parent page stored in the object |
grid | char* | The grid stored in the object |
gridid | int | The gird ID stored in the object |
element | char* | The gird element stored in the object |
elementid | int | The gird element ID stored in the object |
needsrequest | int [0, 1] | Are the placements in the object complete? |
defined | int [0, 1] | Are the placements in the database connection possible? |
level | int | Nesting depth in the product tree, uppermost level in 0 |
relative_level | [ab v3.2.3 R2440] Releativ nesting level from the base list entries (list, selected, watched) | |
substatement | int | ID of the panel statement to load the sub-object |
classid | int | Class number of the object |
row1 | char* | Text of the first column of the panel |
row2 | char* | Text of the second column of the panel |
pre_ruleid | int | Prehandler of the object |
pre_ruleparams | char* | Parameter for the prehandler |
post_ruleid | int | Posthandler of the object |
post_ruleparams | char* | Parameter for the posthandler |
adparams | char* | Parameter for the placement of ad banners |
Name | Type | Default | Description |
Return | int | 0 or ErrorCode | |
statement | String or char* | - | siehe oben |
l1 | List | - | Allocated list for the IDs of the detected objects. |
l2 | List | 0 | Allocated list for the ID2s of the detected objects. |
l3 | List | 0 | Allocated list for the ID3s of the detected objects |
s1 | List | 0 | Allocated string list for the StringIDs of the detected objects |
flags | int | 0 | Unused |
checkTemplates | int | 0 | Shall be checked if the products have defined templates? 0 : No, no check necessary 1 : Yes, please check. Products without a defined template in the Product Pool are then will not be added to the results lists. |
Here is an example for a statement, with which all products and sub-products of the current selection (marked, not watched!) can be collected. In this the object will automatically be dived into if the template of the object has not been defined. The attempt will be ended with a nesting depth of 10. From the resulting list all entries the IDs of which <= 0 will be removed.
selected [pageitemid > 0 ? level < 10] id2 > 2
Get the IDs of the selected products having a template defined.
int main () { int result; List l1 = list::alloc (); int i;
if (gRun != 0) return 0;
result = datapool::get_products ( "selected [pageitemid > 0]", l1); if (result && result != -1199 { showmessage ("Error %d", result); } else { for (i=0; i < list::length (l1); i++) { showmessage ("%d: %d", i+1, list::get (l1, i)); } }
return 0; }
The third example demonstrates the differences between class-id based stringlists and string lists without any class id allocated. Mark some entries of the product panel with an eye, and select some other entries of the list by hiliting.
int main () { int id1, id2, id3; int num = 0; List prod = list::alloc(); List prod2 = list::alloc(); List prod3 = list::alloc(); StringList prod4 = stringlist::alloc (); // StringList without Class-ID StringList ppp = stringlist::alloc (3, 1); // StringList with Class-ID char strid[4000]; char name[4000]; char temp[4000];
if (gRun > 1) return 0; // only once
datapool::get_products ("selected ", prod, prod2, prod3, prod4); while (num<list::length(prod)) { id1 = list::get (prod ,num,0); id2 = list::get (prod2,num,0); id3 = list::get (prod3,num,0); stringlist::gettext (prod4, num, "", strid);
strcpy (temp, "get_products %d : \n\n"); strcat (temp, "id1=%d\n"); strcat (temp, "id2=%d\n"); strcat (temp, "id3=%d\n"); strcat (temp, "stringid via stringlist::gettext='%s'\n"); strcat (temp, "stringid via stringlist::get='%s'");
showmessage(temp, num+1, id1, id2,id3, strid, stringlist::get (prod4, num));
num = num+1; }
num = 0; while (num<stringlist::length(ppp)) { stringlist::gettext (ppp, num, "StringID", strid); stringlist::gettext (ppp, num, "Num", name);
strcpy (temp, "alloc by class 3 : entry %d\n\n"); strcat (temp, "stringid='%s'\n"); strcat (temp, "name='%s'");
showmessage(temp, num+1, strid, name);
num = num+1; }
list::release (prod); list::release (prod2); list::release (prod3); list::release (prod4); return 0; }
static int* login(
int type,
char* dsn,
char* user = 0,
char* password = 0,
char* dbOrLang = 0,
char* client = 0,
int lazy = 1,
int charset = 0)
Create or change a database connection. Login/Logout is only necessary for InDesign® Server batches, they retreive batch and user data from different sources.
Name | Type | Default | Description |
Return | int*, DBC, SOAP | Database connection or 0 (for XML paths) | |
type | int | - | connection type 1 : ODBC 2 : XML 3 : SOAP |
dsn | String or char* | - | depends on connection type ODBC : DSN XML : path SOAP : Host. |
user | String or char* | 0 | User name, ignored for XML connections |
password | String or char* | 0 | password, ignored for XML connections |
dbOrLang | String or char* | 0 | database name (ODBC) or language (SOAP), ignored for XML connections |
client | String or char* | 0 | Mandant / Client |
lazy | int | 1 | Do only (re)connect, if the login data defers from the current connetion |
charset | int | 0 | Used Charset 0 : System character set 1 : Unicode 2 : Unicode 32Bit 3 : UTF-8 |
static int logout(int type)
Finish current data connection.
Name | Type | Default | Description |
Return | int | 1 Okay 0 : Error |
|
type | int | - | connection type 1 : ODBC 2 : XML 3 : SOAP |
static int suppress_warnings(int state = -1)
For internal use only Suppress warning dialogs.
Suppressing warnings can lead to errors in the document content and should not be used in productin environments under any circumstances! The function is for test purposes only and should only be used when the placeholder content does not need to be updated.
In the priint:comet plugins there are currently warning dialogs and notices in exactly 1510 places. Please note that the function only suppresses dialogs for missing or incorrect scripts and queries (xmlquery, SQL, soapquery). All other warnings and hints remain active.
Name | Type | Default | Description |
Return | int | Previous value of the setting | |
state | int | -1 | 0 : Show all dialogs again 1 : Suppress script and query errors 2 : Do not warn missing and incorrect placeholder actions 3 : 1 and 2 otherwise : Get current setting The setting is reset when the current data connection is terminated. |
static int get_main_template(
int pid,
int* l = 0,
int* u = 0,
int* r = 0,
int* cl = 0,
int* cu = 0,
int* cr = 0)
Get the main template and (optionally) the sub templates of a template.
Name | Type | Default | Description |
Return | int | ID of main template or 0 in case of some errors | |
pid | int | - | template ID |
l, u, r, cl, cu, cr | jeweils int* | 0 | IDs of sub templates. (0 or pointer to an integer variable) Templates without page restrictions l : 0 u : TemplateID r: 0 cl: 0 cu : Continuing template or 0 cl: 0 Page specific templates l : left pages u : 0 r: right pages cl: continuing template for left pages or 0 cu : 0 cl: continuing template for right pages or 0 |
Get the template that inserted a frame into the document and collect its sub entries.
int main () { char ename [2000]; int tid; int ttid, l, m, r, cl, cm, cr;
tid = frame::get_template (gFrame); ttid = datapool::get_main_template (tid, &l, &m, &r, &cl, &cm, &cr);
wlog ("", "# Frame %d\n", item::getint (gFrame)); wlog ("", "# Template : %d of %d (%s) with [%d, %d, %d, %d, %d, %d]\n", tid, ttid, datapool::get_template_name (tid), l, m, r, cl, cm, cr);
return 0; }
static char* get_template_name(int pid)
Get a templates name.
Name | Type | Default | Description |
Return | char* | Name of template.
The return value is read only, do NOT CHANGE. The result will be overridden on following calls to the function. See here to learn more about functions returning r/o char* values. |
|
pid | int | - | ID of template |
Get the template that inserted a frame into the document and collect its sub entries.
int main () { char ename [2000]; int tid; int ttid, l, m, r, cl, cm, cr;
tid = frame::get_template (gFrame); ttid = datapool::get_main_template (tid, &l, &m, &r, &cl, &cm, &cr);
wlog ("", "# Frame %d\n", item::getint (gFrame)); wlog ("", "# Template : %d of %d (%s) with [%d, %d, %d, %d, %d, %d]\n", tid, ttid, datapool::get_template_name (tid), l, m, r, cl, cm, cr);
return 0; }
static int aem_get_list(
PublicationList pli,
char* url,
char* user,
char* password,
char* assetpath = 0,
int inclRenditions = 0)
EXPERIMENTAL! Get the list of contents of a folder of an AEM® (Adobe Experience Manager®).
Name | Type | Default | Description |
Return | int | 0 or ErrorCode | |
pli | PublicationList | - | Destination list for the list of contents. List must be allocated before using
publication::publicationlist::alloc. If the table of contents could be read
successfully, the list is emptied automatically before refilling. You can read the entries of the list using publication::gets: kName : Name of entry kType : Type of entry, "assets/folder" oder "assets/asset" kPath : Path of entry inside the asset component of AEM® |
url | String oder char* | - | URL of AEM® |
user | String oder char* | - | User name to login into AEM® |
password | String oder char* | - | Paasword of user |
assetpath | String oder char* | - | Complete path of asset in the asset component of the AEM®. Non-existent folders
are created automatically. Existing folders remain unchanged. 0 or empty : root folder ("/") |
inclRenditions | int | 0 | Insert renditions into the result list? 0 : No 1 : Yes |
#include "internal/publications.h"
char stHost [] = "http://192.168.0.208:4502"; char stUser [] = "admin"; char stPwd [] = "***";
int main () { PublicationList pl = publication::publicationlist::alloc (); Publication p; int i;
wlog ("", "==== /my folder ====\n"); datapool::aem_get_list (pl, stHost, stUser, stPwd, "/my folder", 0); for (i = 0; i < publication::publicationlist::length (pl); i++) { p = publication::publicationlist::get (pl, i); wlog ("", "Name : %s\n", publication::gets (p, kName)); wlog ("", "Type : %s\n", publication::gets (p, kType)); wlog ("", "Path : %s\n", publication::gets (p, kPath)); wlog ("", "\n"); }
publication::publicationlist::release (pl);
return 0; }
Alphabetic index HTML hierarchy of classes or Java