Modules
ODBC Data Provider no longer connects after upgrading to macOS X Ventura 13.3
After upgrading to macOS X Ventura 13.3, the ODBC Data Provider will no longer be able to connect to the database, reporting a message such as ‘Driver’s SQLAllocEnv() failed’.ย This is due to a change to security permissions in macOS, and should now be fixed in the 18.0.1 version of EasyCatalog for Adobe InDesign 2023.ย […]
Developing an ImageLink Provider Script
This is intended to describe how to write a provider script. Overview The Plug-in enables connection to any DAM or online image resource via a provider script that manages interaction with its REST API. This is a single script containing a number of key callback functions, prefixed with cb_. Scripts are stored in locally in […]
Formatting Rule Regeneration Options
Regeneration options determine when the Formatting Rule is rebuilt. They can be rebuilt based on 3 options: When the rule changes. If the Formatting Rule has been updated since originally placed, it will be rebuilt. When the data changes. If any fields or records that make up the rule have been updated, it will be […]
Support for Custom Salsify Channels
For custom channels, EasyCatalog allows the creation of scripts that take channel data and turn into a record set which EasyCatalog can load. ย Scripts are written in Lua. They take raw channel JSON and return a RECORDSET object. The name of the file should match the name of the channel, with a.lua extension. Scripts should […]
Applying Table Cell Attributes
The Table->Cell Options dialog box includes the ability to Apply Cell Style Named In. This allows a field to be defined that contains the name of a cell style. In addition to this, the field content can be prefixed to apply a specific cell attribute: TINT: Apply a tint value to the cell SWATCH: Apply […]
Custom Data Providers
Overview Through optional modules EasyCatalog provides a number of data providers (ODBC, XML, Excel, CSV, Sqlite). ย The Enterprise Data Provider also provides additional connections to a number of third party systems. ย For connections to other systems, such as JSON or REST APIs, the Enterprise Data Provider enables the ability to create custom data providers. Creating […]
Custom Menus and Dialogs
Overview Lua scripts can be integrated with EasyCatalog to provide custom menus and dialog boxes. User Interface is provided by the the InDesign Scripting DOM, which offers dialog creation and control. Details on how to access this from Lua are here. Creating a Custom Menu Option Adding a custom menu option is a case of […]
Accessing the InDesign Scripting DOM via Lua
Overview The InDesign Scripting DOM provides full access to the creation and manipulation of all content within InDesign. By combining this the speed of Lua with the data access and control facilities of EasyCatalog, it’s possible to create data driven content in virtually any format. Accessing The InDesign Scripting DOM can be accessed via Lua […]
What is a Matrix Table?
A matrix table is a table that expands both horizontally and vertically. The amount of rows and columns is determined by the number of unique values in the specified fields. Matrix tables are generally ‘look up’ tables. In the following example, the two products are available in three ‘colours’, two ‘finishes’ (‘gloss’ and ‘matt’) and […]
Matrix Table Configuration Dialog
EasyCatalog provides the ability to a create a matrix table โ a table that expands both horizontally and vertically, populating data at the intersection of each column and row. A new dialog is available on the Table menu (on the data panelโs pop-out menu) to specify the more common matrix table parameters. Additional parameters are […]
Creating a Calendar using LUA
This example code creates a calendar tabular field using data where each record is an event on a calendar. The data has fields contain the month and year. ย GROUPSCRIPT is used to call the script for each month group. This data can then be paginated using Master based pagination.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | -- GROUPSCRIPT gets passed a 'recordset' object. -- the 'Month', 'Year' and 'Day' are fields in the data -- Each cell is filled with 'Title' and 'Time' imonth = tonumber(recordset:getrecord(1):field('Month'):content()); iyear = tonumber(recordset:getrecord(1):field('Year'):content()); function get_day_of_week(dd, mm, yy) dw=os.date('*t',os.time{year=yy,month=mm,day=dd})['wday'] return dw,({"Sun","Mon","Tue","Wed","Thu","Fri","Sat" })[dw] end function get_days_in_month(month, year) local days_in_month = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } local d = days_in_month[month] -- check for leap year if (month == 2) then if year % 4 == 0 then if year % 100 == 0 then if year % 400 == 0 then d = 29 end else d = 29 end end end return d end function populate_cell(row, col, day_of_week) for record=1, recordset:size() do myrecord = recordset:getrecord(record); data_day = tonumber(myrecord:getfield('Day'):content()); if data_day == day_of_week then this_entry = "<p>" .. myrecord:getfield('Title'):content() .. "</p>" .. "<p>" .. myrecord:getfield('Time'):content() .. "</p><br/>" table:cell(row,col):setcontent(table:cell(row,col):getcontent() .. this_entry); end end end table = TABLE.new(); table:cell(1,1):setcontent("Sunday"); table:cell(1,2):setcontent("Monday"); table:cell(1,3):setcontent("Tuesday"); table:cell(1,4):setcontent("Wednesday"); table:cell(1,5):setcontent("Thursday"); table:cell(1,6):setcontent("Friday"); table:cell(1,7):setcontent("Saturday"); days_in_month = get_days_in_month(imonth, iyear); first_day_in_month = get_day_of_week(1,imonth,iyear); for day=1,days_in_month do offset = (day-1) + first_day_in_month; row = math.floor((offset-1) / 7) column = math.floor(offset-1) % 7; table:cell((row*2)+2,column+1):setcontent(day); populate_cell((row*2)+3,column+1, day); end; table:present(); |
Custom Image Import
For images that are sourced externally but are not URL or File based, the “Custom” option can be chosen in the picture location section of the field options. When this is set, EasyCatalog looks for a file called ‘CustomImageImport.jsx’ in the ‘Scripts’ folder of a data source. Here’s a simple example that displays the field […]
Can I automatically rename an InDesign form field during pagination?
EasyCatalog can automatically rename form field items during pagination using a configuration specified using InDesign’s Script Label panel. Show the “Script Label” panel from the “Window > Utilities” menu Select the button form field in the document Paste the following into the “Script Label” panel
1 2 3 4 5 | <ecscript> <formfield> <name field="Stock Code"/> </formfield> </ecscript> |
Deselect the form field in the document (deselecting ‘writes’ […]
Custom Relinking of Fields
The standard “Adopt Fields” method of relinking assumes field names and key field values are consistent between the existing links and the new data. ย It was designed to link fields from one data source to another, and as such is limited to changing the key element of a link. In some circumstances it may be […]
Matrix Tables
EasyCatalog provides the ability to a create a matrix table โ a table that expands both horizontally and vertically, populating data at the intersection of each column and row. Matrix tables are defined using commands in an XML format, specified using the Script Label panel with the table selected. There are three required nodes in […]
Using LUA commands to create an index/glossary
Consider a data source with the following data. This example creates a glossary of all the words in the ‘Glossary’ field, showing the pages theyย appear on. The words are sorted alphabetically and the pages are numerical within each word. The resulting output looks something like: big – p 13,14, bill – p 13, black […]
Accessing Guide Based Pagination Progress on InDesign Server
There is a script called โPaginationProgress.jsxโ which you can place in the Data Sources โScriptsโ folder. This is passed script arguments: โdatasource” ย : The Data Source Name โstepindexโ ย : Current Step Index โstepcountโ : ย Total Number of Steps โstep messageโ : Related Message You can accessย them like this: var stepCount = Number(app.scriptArgs.getValue(“stepcount”));
EasyCatalog Server and Salsify
The Enterprise Data Provider supports direct connections to a Salsify Data Sources. ย The normal login procedureย uses OAuth based authentication, which uses a browser to login to Salsify. InDesign Server does not allow user interaction, so an alternative method method is supported where a static ‘access token‘ can be used as part of the data source […]
Adding user defined parameters to an ODBC data source
ODBC data sources normally use a hard-coded query to retrieve data. ย However, EasyCatalog allows elements of theย query to be user definable or ‘parameter’ based. ย These parametersย are shown on the ‘info’ dialog box, accessible from the binocular icon on the data panel. ย Any changes made are applied the next time the data is synchronized. Parameters are […]
Advanced Conditional Processing Using Lua
EasyCatalog supports an embedded version of theย Luaย programming language. ย When text is processed, any commands between ย delimiters [[ and ]] are processed using Lua. EasyCatalog supplements Lua withย functions to make data access easier. For example:
1 | [[if (field('new') == '1') then;]]NEW![[end;]] |
In this example, if the contents of the ‘new’ field are equal to ‘1’ the text NEW! will be output. […]
Reapplying Pagination Rules during Update Document
By default, Pagination Rules are not re-applied during an Update Document operation.ย However,ย holding down a keyboard modifier while selecting the ‘Update Document’ menu can force them to be reapplied: Shift key: if a box contains any field that has been updated its Pagination Rules will be reapplied Shift + Alt key: Pagination Rules will […]
Importing XML Data that contains varying levels of grouping
XML data that contains categories and sub categories can be imported into EasyCatalog using the XML Data Provider module.ย Sometimes, records may appear at different levels in the hierarchy of the XML (e.g. some products may be in a category > sub category > sub-sub category structure, others may be in at the category > […]
Using EasyCatalog to Create a Cross Table of XML Data
A common requirement is to construct a so-called Crosstab, in which multiple attributes are incorporated in a single table. For example, this data represents sets of trousers, with waist, length and price elements. XML Data:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <group> <record> <Product name="Yummy-Yeans" ArtNo="102" Beschreibung="fรผr Damen" /> <Langtext>Diese Yeans sprengt alle Grenzen des bisher Gekannten.</Langtext> <Merkmale> <Merkmal waist="28" length="30" price="129" /> <Merkmal waist="28" length="32" price="132" /> <Merkmal waist="28" length="34" price="134" /> <Merkmal waist="28" length="36" price="133" /> <Merkmal waist="28" length="38" price="133" /> <Merkmal waist="28" length="40" price="138" /> <Merkmal waist="28" length="42" price="140" /> <Merkmal waist="28" length="44" price="138" /> <Merkmal waist="30" length="32" price="139" /> <Merkmal waist="30" length="33" price="145" /> <Merkmal waist="30" length="34" price="152" /> <Merkmal waist="30" length="36" price="142" /> <Merkmal waist="30" length="38" price="144" /> <Merkmal waist="30" length="40" price="146" /> <Merkmal waist="30" length="42" price="147" /> <Merkmal waist="30" length="44" price="149" /> <Merkmal waist="32" length="28" price="150" /> <Merkmal waist="32" length="30" price="148" /> <Merkmal waist="32" length="32" price="152" /> <Merkmal waist="32" length="34" price="147" /> <Merkmal waist="32" length="36" price="153" /> <Merkmal waist="32" length="38" price="149" /> <Merkmal waist="32" length="40" price="148" /> <Merkmal waist="32" length="42" price="160" /> </Merkmale> </record> <record> <Product name="Yummy-Yeans" ArtNo="103" Beschreibung="fรผr Herren" /> <Langtext>Diese Yeans sprengt alle Grenzen des bisher Gekannten.</Langtext> <Merkmale> <Merkmal waist="28" length="30" price="29" /> <Merkmal waist="28" length="32" price="32" /> <Merkmal waist="28" length="34" price="34" /> <Merkmal waist="28" length="36" price="33" /> <Merkmal waist="28" length="32" price="33" /> <Merkmal waist="28" length="34" price="38" /> <Merkmal waist="28" length="36" price="40" /> <Merkmal waist="28" length="38" price="38" /> <Merkmal waist="30" length="32" price="39" /> <Merkmal waist="30" length="33" price="45" /> <Merkmal waist="30" length="34" price="52" /> <Merkmal waist="30" length="36" price="42" /> <Merkmal waist="30" length="38" price="44" /> <Merkmal waist="30" length="40" price="46" /> <Merkmal waist="30" length="42" price="47" /> <Merkmal waist="30" length="44" price="49" /> <Merkmal waist="32" length="28" price="50" /> <Merkmal waist="32" length="30" price="48" /> <Merkmal waist="32" length="32" price="52" /> <Merkmal waist="32" length="34" price="47" /> <Merkmal waist="32" length="36" price="53" /> <Merkmal waist="32" length="38" price="49" /> <Merkmal waist="32" length="40" price="48" /> <Merkmal waist="32" length="42" price="60" /> </Merkmale> </record> <record> <Product name="Yummy-Yeans" ArtNo="104" Beschreibung="Unisex" /> <Langtext>Diese Yeans sprengt alle Grenzen des bisher Gekannten.</Langtext> <Merkmale> <Merkmal waist="38" length="32" price="29" /> <Merkmal waist="38" length="33" price="32" /> <Merkmal waist="38" length="34" price="34" /> <Merkmal waist="38" length="36" price="33" /> <Merkmal waist="38" length="35" price="33" /> <Merkmal waist="38" length="34" price="38" /> <Merkmal waist="38" length="36" price="40" /> <Merkmal waist="38" length="38" price="38" /> <Merkmal waist="40" length="32" price="39" /> <Merkmal waist="40" length="33" price="45" /> <Merkmal waist="40" length="34" price="52" /> <Merkmal waist="40" length="36" price="42" /> <Merkmal waist="40" length="40" price="44" /> <Merkmal waist="40" length="40" price="46" /> <Merkmal waist="40" length="42" price="47" /> <Merkmal waist="40" length="44" price="49" /> <Merkmal waist="42" length="28" price="50" /> <Merkmal waist="42" length="30" price="48" /> <Merkmal waist="42" length="42" price="52" /> <Merkmal waist="42" length="34" price="47" /> <Merkmal waist="42" length="36" price="53" /> <Merkmal waist="42" length="38" price="49" /> <Merkmal waist="42" length="40" price="48" /> <Merkmal waist="42" length="42" price="60" /> </Merkmale> </record> </group> |
The target layout involvesย a table with the distinct lengths horizontally, distinct waist sizes verticallyย and prices inย each cell. This can […]
Computed Fields and Complex Tables
The movie below shows an XML Fragment being used to populate a series of fields and an entire table. Theย data sources is created with just two fields – one for the “Product ID” and one to contain the contents of the “ProductAttributes” node structure. XML Example:
1 2 3 4 5 6 7 8 9 10 | <Product> <SKU id="1234"/> <ProductAttributes> <Attribute Name="Height" Value="100"/> <Attribute Name="Width" Value="50"/> <Attribute Name="Length" Value="200"/> <Attribute Name="Pack Size" Value="5"/> <Attribute Name="Voltage" Value="240"/> </ProductAttributes> </Product> |
Variations on the following “Computed Field” command areย used […]
Get the name of the selected data source
While you can get the selected panel (DSV) object. To get the name of the data source, the parent object needs to accessed:
1 2 3 4 | var ec = app.easycatalogObject; var myDSV = ec.selectedDataView(); var myDS = myDSV.parent; alert(myDS.dataSourceName); |
Setting pagination options via a script
The options shown on the “Paginate” dialog can all be set using the ‘setPaginationOption‘ scripting method which is available on the datasource object.ย This method takes two parameters: the name of the option to set and the value to set it to.
1 | myDS.setPaginationOption("templatedocumentpath","Macintosh HD:mytemplate.indd"); |
The value used for the ‘name‘ parameter can be determined by examining […]
Referencing a field in a CALLSCRIPT script
Here’s an example CALLSCRIPT script that references record data passed to it:
1 2 3 4 5 6 7 8 9 10 11 | var myFieldContents = myRecord["Store List ID"]; var mySplitContents = myFieldContents.split(","); var myNbrOfChunks = mySplitContents.length; var myCodeList = "" for (thisChunk = 0;thisChunk < myNbrOfChunks;thisChunk++) { var myChunk = mySplitContents[thisChunk]; var myCode = String(myChunk.substring(myChunk.length - 2, myChunk.length)) var myCodeList = myCodeList + " " + myCode } myCodeList; |
Using a post image import script to manipulate an image
After EasyCatalog imports an image, it looks for a script called “PostImageImport.jsx” in both the Data Source->Scripts folder and the EasyCatalog Workspace Folder->Scripts folder. This can be used to manipulate an image after import. The example below applies the DETECT EDGES clipping path setting:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | // Sample script to change the clipping path to detect edges // These can be used to extract the field name and content of the image field: //alert(app.scriptArgs.getValue("field")); //alert(app.scriptArgs.getValue("fieldContent")); // Get the internal ID of the container, passed in from EasyCatalog var myID = Number(app.scriptArgs.getValue("id")); // Get the frame var myFrame = app.activeDocument.pageItems.itemByID(myID) // Get the image var myImage = myFrame.allGraphics[0]; // Set the clipping path myImage.clippingPath.clippingType = ClippingPathType.DETECT_EDGES; // Re-fit the image myFrame.fit(FitOptions.proportionally); |
Do you have an example URL based XML data source?
Here’s a link to some sample XML data which can be loaded into the XML data provider: http://www.w3schools.com/xml/plant_catalog.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 | <!-- Edited by XMLSpy --> <CATALOG> <PLANT> <COMMON>Bloodroot</COMMON> <BOTANICAL>Sanguinaria canadensis</BOTANICAL> <ZONE>4</ZONE> <LIGHT>Mostly Shady</LIGHT> <PRICE>$2.44</PRICE> <AVAILABILITY>031599</AVAILABILITY> </PLANT> <PLANT> <COMMON>Columbine</COMMON> <BOTANICAL>Aquilegia canadensis</BOTANICAL> <ZONE>3</ZONE> <LIGHT>Mostly Shady</LIGHT> <PRICE>$9.37</PRICE> <AVAILABILITY>030699</AVAILABILITY> </PLANT> <PLANT> <COMMON>Marsh Marigold</COMMON> <BOTANICAL>Caltha palustris</BOTANICAL> <ZONE>4</ZONE> <LIGHT>Mostly Sunny</LIGHT> <PRICE>$6.81</PRICE> <AVAILABILITY>051799</AVAILABILITY> </PLANT> <PLANT> <COMMON>Cowslip</COMMON> <BOTANICAL>Caltha palustris</BOTANICAL> <ZONE>4</ZONE> <LIGHT>Mostly Shady</LIGHT> <PRICE>$9.90</PRICE> <AVAILABILITY>030699</AVAILABILITY> </PLANT> <PLANT> <COMMON>Dutchman's-Breeches</COMMON> <BOTANICAL>Dicentra cucullaria</BOTANICAL> <ZONE>3</ZONE> <LIGHT>Mostly Shady</LIGHT> <PRICE>$6.44</PRICE> <AVAILABILITY>012099</AVAILABILITY> </PLANT> <PLANT> <COMMON>Ginger, Wild</COMMON> <BOTANICAL>Asarum canadense</BOTANICAL> <ZONE>3</ZONE> <LIGHT>Mostly Shady</LIGHT> <PRICE>$9.03</PRICE> <AVAILABILITY>041899</AVAILABILITY> </PLANT> <PLANT> <COMMON>Hepatica</COMMON> <BOTANICAL>Hepatica americana</BOTANICAL> <ZONE>4</ZONE> <LIGHT>Mostly Shady</LIGHT> <PRICE>$4.45</PRICE> <AVAILABILITY>012699</AVAILABILITY> </PLANT> <PLANT> <COMMON>Liverleaf</COMMON> <BOTANICAL>Hepatica americana</BOTANICAL> <ZONE>4</ZONE> <LIGHT>Mostly Shady</LIGHT> <PRICE>$3.99</PRICE> <AVAILABILITY>010299</AVAILABILITY> </PLANT> <PLANT> <COMMON>Jack-In-The-Pulpit</COMMON> <BOTANICAL>Arisaema triphyllum</BOTANICAL> <ZONE>4</ZONE> <LIGHT>Mostly Shady</LIGHT> <PRICE>$3.23</PRICE> <AVAILABILITY>020199</AVAILABILITY> </PLANT> <PLANT> <COMMON>Mayapple</COMMON> <BOTANICAL>Podophyllum peltatum</BOTANICAL> <ZONE>3</ZONE> <LIGHT>Mostly Shady</LIGHT> <PRICE>$2.98</PRICE> <AVAILABILITY>060599</AVAILABILITY> </PLANT> <PLANT> <COMMON>Phlox, Woodland</COMMON> <BOTANICAL>Phlox divaricata</BOTANICAL> <ZONE>3</ZONE> <LIGHT>Sun or Shade</LIGHT> <PRICE>$2.80</PRICE> <AVAILABILITY>012299</AVAILABILITY> </PLANT> <PLANT> <COMMON>Phlox, Blue</COMMON> <BOTANICAL>Phlox divaricata</BOTANICAL> <ZONE>3</ZONE> <LIGHT>Sun or Shade</LIGHT> <PRICE>$5.59</PRICE> <AVAILABILITY>021699</AVAILABILITY> </PLANT> <PLANT> <COMMON>Spring-Beauty</COMMON> <BOTANICAL>Claytonia Virginica</BOTANICAL> <ZONE>7</ZONE> <LIGHT>Mostly Shady</LIGHT> <PRICE>$6.59</PRICE> <AVAILABILITY>020199</AVAILABILITY> </PLANT> <PLANT> <COMMON>Trillium</COMMON> <BOTANICAL>Trillium grandiflorum</BOTANICAL> <ZONE>5</ZONE> <LIGHT>Sun or Shade</LIGHT> <PRICE>$3.90</PRICE> <AVAILABILITY>042999</AVAILABILITY> </PLANT> <PLANT> <COMMON>Wake Robin</COMMON> <BOTANICAL>Trillium grandiflorum</BOTANICAL> <ZONE>5</ZONE> <LIGHT>Sun or Shade</LIGHT> <PRICE>$3.20</PRICE> <AVAILABILITY>022199</AVAILABILITY> </PLANT> <PLANT> <COMMON>Violet, Dog-Tooth</COMMON> <BOTANICAL>Erythronium americanum</BOTANICAL> <ZONE>4</ZONE> <LIGHT>Shade</LIGHT> <PRICE>$9.04</PRICE> <AVAILABILITY>020199</AVAILABILITY> </PLANT> <PLANT> <COMMON>Trout Lily</COMMON> <BOTANICAL>Erythronium americanum</BOTANICAL> <ZONE>4</ZONE> <LIGHT>Shade</LIGHT> <PRICE>$6.94</PRICE> <AVAILABILITY>032499</AVAILABILITY> </PLANT> <PLANT> <COMMON>Adder's-Tongue</COMMON> <BOTANICAL>Erythronium americanum</BOTANICAL> <ZONE>4</ZONE> <LIGHT>Shade</LIGHT> <PRICE>$9.58</PRICE> <AVAILABILITY>041399</AVAILABILITY> </PLANT> <PLANT> <COMMON>Anemone</COMMON> <BOTANICAL>Anemone blanda</BOTANICAL> <ZONE>6</ZONE> <LIGHT>Mostly Shady</LIGHT> <PRICE>$8.86</PRICE> <AVAILABILITY>122698</AVAILABILITY> </PLANT> <PLANT> <COMMON>Grecian Windflower</COMMON> <BOTANICAL>Anemone blanda</BOTANICAL> <ZONE>6</ZONE> <LIGHT>Mostly Shady</LIGHT> <PRICE>$9.16</PRICE> <AVAILABILITY>071099</AVAILABILITY> </PLANT> <PLANT> <COMMON>Bee Balm</COMMON> <BOTANICAL>Monarda didyma</BOTANICAL> <ZONE>4</ZONE> <LIGHT>Shade</LIGHT> <PRICE>$4.59</PRICE> <AVAILABILITY>050399</AVAILABILITY> </PLANT> <PLANT> <COMMON>Bergamot</COMMON> <BOTANICAL>Monarda didyma</BOTANICAL> <ZONE>4</ZONE> <LIGHT>Shade</LIGHT> <PRICE>$7.16</PRICE> <AVAILABILITY>042799</AVAILABILITY> </PLANT> <PLANT> <COMMON>Black-Eyed Susan</COMMON> <BOTANICAL>Rudbeckia hirta</BOTANICAL> <ZONE>Annual</ZONE> <LIGHT>Sunny</LIGHT> <PRICE>$9.80</PRICE> <AVAILABILITY>061899</AVAILABILITY> </PLANT> <PLANT> <COMMON>Buttercup</COMMON> <BOTANICAL>Ranunculus</BOTANICAL> <ZONE>4</ZONE> <LIGHT>Shade</LIGHT> <PRICE>$2.57</PRICE> <AVAILABILITY>061099</AVAILABILITY> </PLANT> <PLANT> <COMMON>Crowfoot</COMMON> <BOTANICAL>Ranunculus</BOTANICAL> <ZONE>4</ZONE> <LIGHT>Shade</LIGHT> <PRICE>$9.34</PRICE> <AVAILABILITY>040399</AVAILABILITY> </PLANT> <PLANT> <COMMON>Butterfly Weed</COMMON> <BOTANICAL>Asclepias tuberosa</BOTANICAL> <ZONE>Annual</ZONE> <LIGHT>Sunny</LIGHT> <PRICE>$2.78</PRICE> <AVAILABILITY>063099</AVAILABILITY> </PLANT> <PLANT> <COMMON>Cinquefoil</COMMON> <BOTANICAL>Potentilla</BOTANICAL> <ZONE>Annual</ZONE> <LIGHT>Shade</LIGHT> <PRICE>$7.06</PRICE> <AVAILABILITY>052599</AVAILABILITY> </PLANT> <PLANT> <COMMON>Primrose</COMMON> <BOTANICAL>Oenothera</BOTANICAL> <ZONE>3 - 5</ZONE> <LIGHT>Sunny</LIGHT> <PRICE>$6.56</PRICE> <AVAILABILITY>013099</AVAILABILITY> </PLANT> <PLANT> <COMMON>Gentian</COMMON> <BOTANICAL>Gentiana</BOTANICAL> <ZONE>4</ZONE> <LIGHT>Sun or Shade</LIGHT> <PRICE>$7.81</PRICE> <AVAILABILITY>051899</AVAILABILITY> </PLANT> <PLANT> <COMMON>Blue Gentian</COMMON> <BOTANICAL>Gentiana</BOTANICAL> <ZONE>4</ZONE> <LIGHT>Sun or Shade</LIGHT> <PRICE>$8.56</PRICE> <AVAILABILITY>050299</AVAILABILITY> </PLANT> <PLANT> <COMMON>Jacob's Ladder</COMMON> <BOTANICAL>Polemonium caeruleum</BOTANICAL> <ZONE>Annual</ZONE> <LIGHT>Shade</LIGHT> <PRICE>$9.26</PRICE> <AVAILABILITY>022199</AVAILABILITY> </PLANT> <PLANT> <COMMON>Greek Valerian</COMMON> <BOTANICAL>Polemonium caeruleum</BOTANICAL> <ZONE>Annual</ZONE> <LIGHT>Shade</LIGHT> <PRICE>$4.36</PRICE> <AVAILABILITY>071499</AVAILABILITY> </PLANT> <PLANT> <COMMON>California Poppy</COMMON> <BOTANICAL>Eschscholzia californica</BOTANICAL> <ZONE>Annual</ZONE> <LIGHT>Sun</LIGHT> <PRICE>$7.89</PRICE> <AVAILABILITY>032799</AVAILABILITY> </PLANT> <PLANT> <COMMON>Shooting Star</COMMON> <BOTANICAL>Dodecatheon</BOTANICAL> <ZONE>Annual</ZONE> <LIGHT>Mostly Shady</LIGHT> <PRICE>$8.60</PRICE> <AVAILABILITY>051399</AVAILABILITY> </PLANT> <PLANT> <COMMON>Snakeroot</COMMON> <BOTANICAL>Cimicifuga</BOTANICAL> <ZONE>Annual</ZONE> <LIGHT>Shade</LIGHT> <PRICE>$5.63</PRICE> <AVAILABILITY>071199</AVAILABILITY> </PLANT> <PLANT> <COMMON>Cardinal Flower</COMMON> <BOTANICAL>Lobelia cardinalis</BOTANICAL> <ZONE>2</ZONE> <LIGHT>Shade</LIGHT> <PRICE>$3.02</PRICE> <AVAILABILITY>022299</AVAILABILITY> </PLANT> </CATALOG> |
Here are the data source configuration settings required to load this data:
I’ve just upgraded to InDesign CC and my ODBC data source isn’t working
InDesign CC is a 64bit application, whereas previous versions were 32bit. As such a 64bit ODBC driver is required, which needs to be configured in the ODBC Administrator. 32bit only drivers will not work in a 64bit application.
Adding a fake key to an XML data source
Enter [[[INDEX]]] as the Xpath EasyCatalog will just take the index number of the record in the XML.
Is there any way to work with smaller sets of ODBC-based data?
ODBC Data Sources can be configured to accept parameters which are included as part of the data-retrieval SQL. Parameters should be placed in {{ braces }} for example:
1 | SELECT * FROM customers WHERE name LIKE '%{{Name}}%' LIMIT {{No Of Records}} |
This will create two parameters that user can change: “Name” and “No Of Records”. ย Up to fiveย can be specified. The values for these parameters will be […]
Why are fields shown in red?
Fields are red because the record they relate to cannot be identified. Normally the column ‘rowid’ use used to link the query result data back to original record, but in certain queries this isn’t possible – when using the DISTINCT clause for instance. In this case the field is marked in red and once placed […]
Loading XML into a field
EasyCatalog has the ability to load fragments of source XML into a field. This is specified using the “Load as XML Fragment” check box as shown on the “Field Configuration” dialog: When this is checked the entire XML structure at the specified location is loaded into a field. This can be used by the complex […]
Using a Relational Data Source in an XML Data Source
Data sources created with the Relational Module can be used as sources of XML Data. The heirarchy modelled in the relational data source is rendered into XML, which can then be used in a regular EasyCatalog panel via the XML data provider.
A new page could not be inserted because the page being paginated into does not have a master applied
This is displayed because EasyCatalog is trying to paginate into a page that does not have a master applied ([None]).
A quick way to retrieve a list of data sources
A quick way to retrieve a list of data sources…
Exporting a CSV file from an ODBC Data Source in EasyCatalog
A CSV file can be exported from an EasyCatalog Panel that is using an ODBC Connection by holding down Shift + Alt and selecting…
How do I retrieve an XML file from a URL?
Navigate to ‘File > New > EasyCatalog Panel > New XML Data Source’; this will open up the…
Iterate down a book, checking documents for changes and updating the panel
Choose a book, choose a datasource, iterate through the book checking documents for changes and updating the panel with the changes…
Iterate down one data source, filtering another panel based on the contents of a field
Iterate down one data source, filtering another panel based on the contents of one of the fields…
Iterate through a data source, exporting one document per record
Iterate through a data source, exporting one document per record in the panel…
Newly added XML fields are not showing in the panel
When adding fields after the initial data source setup they will not appear in the panel until a ‘Synchronize with Data Source’ has been executed.
A new page was inserted but it does not contain any intersecting guides
This is displayed because EasyCatalog has inserted a new page however there is no intersecting guides to define where…
ODBC Data Provider not loading on Macintosh
The following only applies to versions CS5.5 and below…
ODBC Driver architecture mismatch
InDesign CC installs as a 32bit and 64bit version on Windows, so a 32 or 64bit ODBC data source needs…
Open data source and output contents of a named field
Open a data source, create a view for it and then output to the JavaScript console the contents of a named field…
Open data source, sync with data source, open document and paginate at guide positions
Open a data source, close all the panels for it, synchronize with new data, open a new panel, open a document, paginate at guide positions…
Open document, update furniture and save under new name
Open a document, open a data source, update furniture, close data source, save document to a new name…
A new page was inserted but the amount of overset text was not reduced
This is caused by EasyCatalog trying to insert an item into the text flow that is deeper than the frame…
Search and Replace multiple fields
This script shows a dialog that allows for up to 10 search and replace fields to be done at one time…
What does ‘Group Repeats Hierarchically’ mean?
This option is used when the group represents a hierarchical structure that can contain an unknown number of levels…
Setting up a FileMaker datasource
Open the ODBC Administrator found in ‘Applications > Utilities’ and select ‘Add’, this will bring up a dialog listing…
An invalid numeric value was used in a Pagination Rules action: ‘XXXX’
This is displayed because a numerical operator is being used in a Pagination Rules Action however the value specified is non numeric…
An unknown group was specified in the ‘Group Name’ attribute for the library item ‘XXXX’
When you set the Pagination Rules of a library item to ‘Once Per Group’ and specify the group in…
‘Grow and Flow’ could not find a frame to continue paginating into in the library item ‘XXXX’
This is displayed when EasyCatalog cannot find a frame to ‘Grow and Flow’ into when using the ‘Continuation’ option…
No intersecting page guides are defined on page X
In order for EasyCatalog to paginate an item when using Guide Based Pagination it must be able to find a guide intersection…
No positions available on page X
This will only be displayed when using Master Based Pagination. When items have been placed…
Pages cannot be automatically inserted because you are not paginating into a master text frame
This is displayed because the document is being paginated into the Master Spread…
Setting up EasyCatalog to use an ODBC data source
Setting up EasyCatalog to use an ODBC Data Source is a straight forward process aslong as the data source has been configured correctly…
Pagination cannot commence, as the pagination library could not be opened
This is displayed because EasyCatalog cannot open the library specified in the ‘Paginate…’ dialog…
Pagination cannot occur on a master page
This is displayed because the document is being paginated on the master spread, use the ‘Pages’ panel…
Pagination could not start because there were no items available to paginate the selected records
This is displayed because EasyCatalog cannot find a library item to use in the pagination…
Setting up a document for Guide Based Pagination
To use Guide Based Pagination guides must be created so that EasyCatalog knows where to paginate the items…
The EasyCatalog Pagination plug-in is not compatible with the current version of EasyCatalog
This is caused by a version number mismatch between the Pagination plug-in and the EasyCatalog Base Module…
The item is set to insert ‘Frame Contents’, but has no text boxes
This is displayed because the ‘Insert’ attribute is set to ‘Frame Contents’ on an object that is not a text box…
The library item ‘XXXX’ does not fit within the bounds of the page at the next guide intersection
A library item that overlaps the margin of the page causes this, the error message shows the location where this error occurred…
The “Group Name” has not been specified
This is displayed because a library item is set to ‘Paginate’ ‘Once Per Group’ but no ‘Group Name’ has been specified…
The paragraph style “XXXX” could not be found in the pagination document
This is displayed when EasyCatalog cannot find a paragraph style in the document that is specified in the Pagination Rules…
Unable to apply master page ‘XXXX’
This will only be displayed if the ‘Apply Master Named In’ option is being used in the ‘Paginate…
Which ODBC Driver should I get?
There are many ODBC Drivers out there on the market both free and commercial; here is a list…
Why is my pagination slow?
Pagination can become slow for many reasons, one of the most common…