Visual CUT

View, Export, Burst, Email, and Schedule Crystal Reports

 

www.MilletSoftware.com

 

Version 7.5.3
November 2024


Millet Software

5275 Rome Ct.
Erie, PA 16509-3951
ido@MilletSoftware.com
(814) 825-6009

 

 

 

Disclaimer:  This software is provided as-is by Millet Software without assuming any responsibility for harm to computer systems, software, or data with which these files are used.

 

The following individuals were instrumental in providing suggestions and support leading to enhancements: Ken Hamady, Dave Clutter (Reed Manufacturing), Nancy Peterson (JobMark.com), David Parker (VendorsInfo.com), Jim Woodin (Diamond V Mills), Dave Hawkins (Orbitz), José Alsina (Innovatec), Jorge Vazquez (Merck), Mike Marsten (UCSF), Helen Hiebert (Independent Consultant), Dave Neubauer (Bekaert Specialty Films), Nathaniel Wetherbee (PFPC), Ben Pomeranz (WorldCom), Shawn Wright (Shawnigan Lake School), Bernard Paes (Flag Choice Hotels), Larry Bodie (Kelsan), Abbas Rostami (Cubic Corporation), Rick Scero (SITEL), Jon Palmbak (LeBoeuf, Lamb, Greene & MacRae), Bill Arruda (Pragmeta), Larry Bates (Syscon), Lori Fraticelli (K. Hovnanian Enterprises), Vik Mohindra (Spryer Soft), Blaise Masse (University of New Hampshire), Greg Davis (Act Solutions), Don Gilsdorf (Gain Focus Technologies), Tim Dunevant (The Matworks), Chris Kell (Washington State University), Ken Rickard (EMU), Jonathan Washam (Independent Portfolio Consultants), Greg Scharer (Upstate), Sharon Mone (Fujitsu), Tom Cook (Grotenhuis), David Leland (Johnson Corporation), Ron Ruth (TIB Bank of the Keys), Jim Stickley (TraceSecurity), Dave Atkins (The Matchett Group), Egil Stenberg (Flextronics), Peter Sclafani (Daiwa Securities America), Kelly Serge (DataSafe), Walid El Khazen (Wolfram Research), Bill Loucks (Westminster College), David Hopaluk (Here2Help Solutions), Frank Schwarz (Orbitz), Dixie Folzenlogen, Denise Hirata (Retirement.org), Sateesh Annangi (Keenan), Todd Erickson (Technology Navigator), Peter Enman (RCMP), Gene Juhos (Sysmatics), Adam Peter Butt (APBReports), Dwight Wyse (Campwise), Laurie Weaver (Campwise), Mario Blasius (Globetrotter Corporate Travel), Angelo Claustro (Kelso-Burnett), Steve Jones (Kokatat), Mark Schultze (Lamons), Wim Rippen (Petrovlis-H olland), Paul Contreras (R.B. Zack & Associates), Brian Orr (U.S. Sterling Capital), Tim Cortis (Wayne J. Griffin Electric), Mick McCann (Worldmark International Ltd.), Praveen Rao (Brighthouse Networks), Jon Leeds (Carolina Software), Elliott R Pickar (Continuum Health Partners), Erwin Ponce (ELP Aviation), Terry Thurgood (Foresight Technology), Jeff Schwartz (Bell Nursery USA), Nitzan Neeman (SeniorCare EMS), John Gilson (Tupperware), Jim Black (Art Gallery of Ontario), Anthony Volpe (The LLB Group), Peter Bond (Scientific Games), John Fagan (Revco Solutions)...

 




 

Introduction & Key Benefits. 15

Install / Remove.. 18

Selecting a Version:  8.5, 9, or 11 (XI R2) 18

Step 1: Select Report Tab.. 20

Main Buttons. 20

The Report List Grid.. 21

Right-Click Menu for Column Headers. 21

Right-Click Menu for Report Rows. 22

Launching a Report. 23

Step 2: Preview... 24

Remember Parameter Values from a previous Session.. 25

Save Date Parameter Values as Date Tokens. 25

Speeding Up Report Previews. 26

Changing Processing Options without Previewing.. 26

Changing Login, Report Paths & Other Settings without Previewing.. 26

Find & Replace Report Paths and other Saved Settings. 27

Disabling Find & Replace Categories. 27

Save and Reuse Named Parameter Sets. 28

Step 3: Export/Burst/Email…... 30

Group Values Area.. 30

Fields & Formulas Area.. 31

Exporting/Bursting Options. 32

Exporting to Multiple Files/Formats in a Single Pass. 32

Skipping Exporting (VC_Skip_Export) 33

Replacing Illegal Characters in Dynamic File Names. 34

Incrementing Export File Name Counter. 35

Default Behavior 35

Customized Behavior 35

Printing Options. 36

Bursting to Printer. 36

Setting Custom Text for each Print Copy.. 37

Interweaving Burst Printouts From Multiple Reports. 38

Printer Job Name Functionality.. 39

Email Options. 40

Combining Static & Dynamic Content. 40

Specifying SMTP Server. 41

Sending Emails via Office365. 42

SMTP AUTH Option (simple) 42

OAuth Option (complex) 42

Sending Emails via Gmail. 42

Embedding Special Content. 43

Embedding Report as Image in Email (old approach) 43

Embedding Report as Image(s) in Email (new approach) 44

Embedding Pivot Tables in Email Message Body. 46

Embedding HTML Export in Email Message Body. 47

Embedding TEXT Export in Email Message Body. 48

Embedding File(s) Content in Email Message Body. 48

Embedding Images inside the HTML email body (old email engine – no longer available) 49

Embedding Images inside the HTML email body (new email engine) 49

Custom Email Headers. 49

Email Priority. 49

Including Emoji in Email Subject 49

Sending Message Text as HTML.. 50

Using Cascading Style Sheets (CSS) in HTML messages. 51

Integrated HTML Editor. 52

Email Merge using Report Fields/Formulas. 52

Integrated Spell Checker 53

Copy & Paste from Other Software. 53

CSS considerations. 53

Enter Key Behavior 54

Auto-Generated HTML Tables for Report/Group Data.. 55

Excluding Columns. 56

Parsing Requirements. 57

Notes: 58

Dynamic Tables inside HTML Email Messages. 59

Applying Alternating Row Color 62

Embedding Hyperlinks to Reports/Files inside HTML Email Messages. 63

File Attachments. 64

Attaching Multiple Files. 64

Attaching Optional Files. 64

Email Addresses. 65

Specifying Multiple (Simple/Composite) Email Addresses. 65

Specifying Email Distribution Lists in Text Files. 65

Specifying Email Distribution Lists in SQL Queries. 66

Specifying Bursting email Addresses in a Formula. 67

Force Email_From to Match Email_User_ID.. 67

New Email  Engine. 68

Settings & Arguments for Advanced Email Features. 68

Queuing Emails & The smtpQ Service. 70

If the smtpQ Service Fails to Start 70

Monitoring Email Queuing. 70

Operating Logic. 71

smtpQ Administration. 72

Slowing Down Outgoing Emails. 73

Naming Scheme of .eml Files. 73

smtpQ Service Failure Action Properties. 74

Generating Twitter or SMS Messages via Email. 75

Other Options. 77

Specifying an Email Reconnect Option for Email Bursting. 77

Specifying a Different Character Set 77

Skipping Emails (VC_Skip_Email) 77

‘Start Process’ button and Progress Window... 78

Scheduling.. 79

Scheduling Area.. 79

Scheduling String. 79

Scheduled Printing. 79

Arguments. 80

Control Processing Options When Encountering Zero Records. 81

Adding Scheduled Tasks. 82

Place the command line in a batch file. 83

Command Line Wizard (Parameters & Skip Zero Records) 83

Management & Monitoring of Scheduled Tasks. 85

Fixing Issues. 86

Failure to Add a Scheduled Task. 86

Failure to Refresh Status in Monitoring Grid. 86

Mapped à UNC File Paths. 87

Processing of Multiple Reports in a Single Batch (.BAT) File. 87

Execute Multiple Reports in a Single Process. 87

Execute all Command Files in Queue Folder 88

Scheduling (old approach) 88

Call the Batch file from Windows Task Scheduler. 88

Scheduling Issues. 94

Windows 7+ Task Scheduler 94

Hide Batch (Command) Windows. 95

E-mailing Alert Messages and Exception Reports. 96

Using Command Line Arguments. 97

Arguments to Specify Parameter Values. 97

Range and Multi-Value Parameters. 98

Request User Input for Certain Parameters. 98

Null Values. 98

Date Constants. 99

Custom Calendars. 100

Adjusting Date Constants for Day of Week. 101

Number Constants. 102

Reports with More Than 8 Parameters (restriction removed, 6.2002) 103

Using Parm8 to Specify all Extra Parameter Values. 103

Using PowerShell to Set Relative Date Parameters and Call Visual CUT.. 104

Argument to Set Formula Expressions. 105

Argument to Set Extra Record Selection Logic. 105

Arguments to Specify Printer Destination.. 106

Printing to Multiple Printers. 106

Using a Text File to Specify Multiple Printers. 106

Arguments to Specify Printer Bursting Destination.. 107

Specifying Number of Copies. 107

Arguments to Specify User ID & Password.. 108

Setting Encrypted Password Entries. 108

Argument to avoid Login Dialog.. 108

Database Choice Functionality (Command Line / GUI) 109

Selecting an Alternative ODBC Data Source. 109

Overriding the Database Specified in the Report or ODBC DSN.. 111

Overriding ODBC Table Location (.CSV Files as Data Source) 111

Overriding the Server in Native Oracle Connection. 112

Selecting an Alternative SQL Server – OLE DB Data Source. 112

Changing Folder Location for Access/Excel/Pervasive/ACT! Files. 113

Arguments to Specify Export Format. 114

Releasing File Locks on Exported Files. 114

Delaying Processing After Export. 114

Argument to Specify Email Priority.. 115

Argument to Specify Email Headers. 115

Argument to Specify Email Subject Emoji 116

Arguments to Specify Export/Email Options. 117

Arguments to Process Reports with No Settings. 117

Calling Visual CUT From Another Application.. 118

Specifying Arguments from the GUI. 119

Referring to Saved Encrypted Passwords. 120

Other Options and Features. 121

Using Saved Data.. 121

Global Option to Use Saved Data In Command Line Processing. 121

Command Line Argument for Saved Data Action. 121

Use_Saved_Data_Recent Command Line Argument 121

Partially Delegating Exporting/Bursting to DataLink Viewer 2011. 122

Proxy Processing Using a Data Snapshot 124

Fully Delegated Processing (Preview/Export/Burst) 124

Right-Click Menu to Toggle Delegation. 124

Triggering a Batch File with Dynamic Content Before/After Export. 125

Triggering Reports Based on Database, File, and Email Events. 126

Update a Database After a Successful Process. 126

Update a Database Before Report Runs. 126

Extract Files Stored in Database. 127

Upload Files to a BLOB column in a Database. 128

Call a Web Service. 128

ZIP and Password Protect Files. 129

Global Tokens from INI File. 130

Load ini Values into Parameters. 131

Securing Reports against Unauthorized Use. 131

FTP/SFTP. 132

Exporting to an FTP Server (old approach) 132

Uploading to an FTP Server (new approach) 133

Uploading to an SFTP Server 134

Downloading from an FTP Server 135

Downloading from an SFTP Server 136

SharePoint. 137

Uploading Files to SharePoint 137

File Location Functionality.. 138

Direct Processing of a Report to Use a Different Settings Folder 138

Write Main Files Folder Location to a Text File. 138

Automatic Handling of Write-Protected Application Folders. 139

Directing the Visual CUT database to Another DBMS. 140

Export/Import Report Processing Options. 141

Updating DataLink_Viewer.ini  via a Delta File. 142

Restricting User Actions. 143

Integrated Interactive Authentication.. 144

Integrated Authentication ("Remember Me") 144

Shared Machine Authentication. 145

Google Functionality.. 146

Add Events to Google Calendar(s) 146

Adding Events to Multiple Calendars. 146

Upload Files to Google Drive. 147

Auto-Refreshing Web Dashboards. 149

Web Dashboard Expert. 149

iFrame Approach.. 150

Multi-Panel Dashboard Layout. 151

Multi-Panel Dashboard with Drill-Across. 152

Preventing File Locking.. 153

Case Study.. 153

Hyperlinks. 153

Tooltips. 153

Generating HTML via Email Message Body.. 154

Cleaning png File References. 154

Restricting Access to Web Dashboards. 154

Web Widget Features. 155

Web Grid Export. 156

Functionality (see video demo) 156

Processing Logic. 157

Conditional Formatting. 158

Format URLs as hyperlink icons. 158

Monitoring SQL Server Health. 158

Use HTML as Column Content 158

Notes: 159

Web Pivot Table/Chart Export. 160

Functionality (see video demo) 160

Reports Functionality. 162

Drill-Down. 164

Chart Options. 165

Processing Logic. 166

Notes. 166

Web Schedule Export. 167

Processing Logic. 167

Web Page Options & Upload Expert. 170

PDF Functionality.. 171

Creating Bookmarks (Group Tree) in Exported PDF Files [Old Approach] 171

Controlling PDF Bookmark Colors (& Text) 172

Controlling How Many Bookmark Levels Are Initially Expanded. 173

Guarding Against Null Bookmark Values. 173

Generating PDF Bookmarks from within Subreports. 174

Adding Bookmarks Using Crystal Formulas as Tags [New Approach] 175

Setting Up a Crystal Report with pdf formula tags. 175

Making PDF Files Accessible. 177

Adding a Table of Content to a PDF File. 178

Advanced Table of Content Options. 179

Adding Page Numbers to a PDF File. 180

Adding Text to a PDF File. 181

Adding Web/File/email Hotspot to a PDF File. 182

Adding an Images with an Optional Hotspot to a PDF File. 183

Adding Links to Files/URL/eMail/Pages Using Formulas as Tags. 184

Setting Up a Crystal Report with pdf field tags. 184

Formula Example from the Sample Report 185

Embedding Files as Attachments inside a PDF File. 186

Adding Links and Embedded Files Using Crystal Formulas as Tags. 187

Setting Up a Crystal Report with Link_Tag Formulas. 187

Formula Example from the Sample Report 188

Generating ZUGFeRD Invoices. 189

Adding Links to Files by Detecting File References in PDF Text. 190

Detecting Additional File References Using Wild Card Tokens. 191

Adding Digital Signature to a PDF File. 192

Using a Digital Certificate Token. 192

Redacting Text in a PDF File. 193

Highlighting Text in a PDF File. 194

Encrypting & Protecting a PDF File. 195

Merging PDF Files. 196

Dynamic File Names. 197

Using a Text File to Specify Files for Merging. 198

Using Wild Cards to Specify Files for Merging. 198

Controlling Merged Bookmark Colors. 198

Specifying Bookmarks when Merging PDF Files. 199

Using the Merged File Names to Generate Bookmarks. 201

Using the Merged Folder & File Names to Generate 2-Level Bookmarks. 202

Using the Merged File Names to Generate Multi-Level Bookmarks. 203

Merging 1-Page PDF Files into Layers in a Single PDF File. 204

Dynamic File Names. 204

Using a Text File to Specify Files for Merging. 205

Controlling Layer Name & Visibility. 205

Printing PDF Files. 206

PDF_Print 206

PDF_Clone_And_Print 207

Printing PDF Files To Multiple Printer Trays. 208

Controlling Print Quality/Speed. 210

Adding Back-Pages. 211

Saving PDF Files to Image Files. 212

Adding Form Fields & Submit Buttons to PDF Files. 213

Sample PDF File with Form Fields & Submit Buttons. 213

Sample Crystal Report with Formulas as Form Field Tags. 214

Setting Up a Crystal Report with pdf field tags. 214

Formula Example from the Sample Report 214

Adding a Digital Signature Form Field. 216

Populating Form Field Text or Description via ODBC Query. 218

Filling PDF Forms. 219

Setting Up a Crystal Report to Act as a PDF Form Filler 219

Setting Up the Report in Visual CUT.. 219

Setting PDF Document Properties after Export (Automatic) 220

Setting PDF Document Properties. 221

Flatten PDF Files. 222

Building an Index PDF Documents. 223

Adding an Index File to a PDF Document. 224

Adding Named Destinations to a PDF Document. 225

Adding Multimedia to PDF Document. 226

Importing Multi-Page TIFF Files into PDF Files. 227

Inserting Image/PDF Files as New Pages (Tag Approach) 227

Splitting PDF Files. 229

Splitting By Bookmarks. 229

Splitting By Embedded Tags. 231

Splitting and Emailing PDF Files By Embedded Tags. 232

Splitting, Protecting, and Emailing PDF Files By Embedded Tags. 233

Splitting and Protecting PDF Files By Embedded Tags. 234

Compress PDF Files. 236

Set PDF/A Mode. 237

Linearize (web-enable) PDF Files. 238

Export to PDF via MS WORD.. 239

SQL Functionality.. 240

Email Bursting from SQL Data.. 241

Dynamic Column Tokens. 241

HTML Table Tokens. 241

Convert SQL Data to Web Schedule, Grid, or Pivot Tables/Charts. 242

Bursting Excel Data to Multiple Web Outputs. 242

Mail Merging SQL Data into MS Word Templates. 243

Update a Database After Success (After_Success_SQL) 244

SQL Server Example 1. 245

SQL Server Example 2. 245

Update a Database Before Report Runs (Before_Report_Run_SQL) 246

Excel Functionality.. 247

Email Bursting from Excel Workbooks. 247

Dynamic Column Tokens. 247

HTML Table Tokens. 247

Convert Excel Data to Web Schedule, Grid, or Pivot Tables/Charts. 248

Bursting Excel Data to Multiple Web Outputs. 248

Mail Merging Excel Data into MS Word Templates. 249

Exporting to Excel 2007 (.xlsx) Files. 250

Combining Excel Bursting Exports into a Single Multi-Tab Spreadsheet. 251

Adding Excel Exports as Tabs in Existing/New Spreadsheets (Briefing Books) 252

Appending or Replacing Data for Existing Tabs. 252

Controlling Excel Tab Colors. 253

Setting Up Print Properties for Excel Workbooks. 254

Auto Filter & Freeze Panes in Excel Exports. 255

Format Data as Excel Tables. 256

Auto Fit in Excel Exports. 257

Auto fit Column Widths. 257

Auto Fit Row Heights. 257

Remove Blank Rows. 257

Password Protecting Excel Workbooks. 258

Protecting Excel Worksheets against User Viewing/Editing.. 259

Using Excel Automation (old and limited way) 259

Without Excel Automation (new way) 260

Inserting File Exports into Excel Templates. 261

Video Demo of Refreshing Data in Excel Dashboard. 262

Sample Input & Output 263

Splitting Workbook & Inserting into a Template (faster method) 264

Keeping the Template File Small 264

Notes. 264

Token Substitution. 265

Inserting Crystal Values into Excel Templates. 266

Specifying Named Ranges in the Excel Template and Matching Formulas in Crystal 266

Crystal Formula Content for Multi-cell and multi-row Named Ranges. 267

Populating Multiple Named Ranges. 268

Before & After Images. 269

Transferring Tabs To Another Workbook.. 270

Splitting Excel Workbooks by Tabs. 271

Splitting Excel Workbooks by First Column.. 272

Merging Excel Workbooks. 273

Generating Excel Pivot Tables. 274

Refreshing Data (Queries, Pivot Tables) from all Connections. 277

Running an Excel Macro.. 278

Modifying Excel Files. 279

Replacing Content in Excel Files. 280

Exporting Formula Expressions to Excel, and Activating Them... 280

Find & Replace Content in Excel Columns. 281

Convert XLS/CSV Files to XLSX (and merging sheets) 282

Convert Excel Files to PDF. 283

Convert Excel Files to HTML.. 284

Convert Excel Files to CSV.. 286

Convert Excel Files to TEXT.. 287

Convert Excel Files to JSON.. 288

Upload Excel/CSV Data to Database. 290

Notes. 290

Adding Columns On The Fly. 291

Upload Excel Tabs to Google Sheets. 292

Notes. 292

MS Word Functionality.. 293

Protecting MS WORD Files. 293

Mail Merging Values into MS Word Templates. 294

Using the GUI. 294

Using a Command Line. 294

Specifying Field/Formula References (tags) in the Word document 295

Populating Word Tables with Crystal Formula Data. 296

Replace Formatting in MS WORD Files. 298

Printing MS WORD Files. 299

Printing MS WORD Files with Watermarks. 300

Convert WORD Files to PDF. 301

Text Functionality.. 302

Splitting Text Files by Embedded Tags. 302

Merging Text Files. 303

Replacing Content in Text Files. 304

Removing Blank or Short Lines in Text Files. 305

Removing GUIDs from png Files Referenced in HTML Exports. 306

Replacing Content in Text/HTML Files – Token Approach.. 307

Sorting Text File by Content in Specified Column Positions. 309

Inserting Base64-Encoded Files Inside Text/XML.. 310

Changing Text File Encoding.. 311

ODBC Export Functionality.. 312

Append Functionality. 312

Replace Functionality. 312

Capturing & Processing Incoming Emails. 314

Use Scenarios. 314

Triggering Email Capture. 317

[Email_Get] ini Section.. 317

Email Get Directive Sections. 318

Capturing Emails. 319

Phase 1: Header Download & Filtering. 319

Phase 2: Targeted Download & Database Capture. 320

Monitoring Results of the Process. 320

Email Capture Table Structure. 321

MS Access Table Structure. 321

SQL Server Table Structure. 322

Oracle Table Structure. 323

Inspect & Update Report Designs. 324

Report Inspection Grid.. 325

Find & Replace Text and Expressions. 326

Using a List of Find & Replace Pairs (Report Translation Use Case) 327

Generate & Import Formulas from Excel. 328

Generate & Import Field Format Expressions from Excel. 329

Update Data Source in Multiple Reports. 330

Update Owner or Catalog/Owner Property of Tables. 330

Remove Catalog and Owner 330

Mass Update Server Name. 330

Update Commands. 330

Update Fonts. 331

Re-import Subreports. 331

Handling of Bad Import Path. 331

Monitoring Visual CUT Processing.. 332

Failure Log.. 332

Silent Unattended Failure Option. 332

Silent Attended Failure Option. 333

Failure Alerts via Email. 333

Adding Custom Text to Failure Email Alerts. 334

Using Different Email Settings for Failure Messages. 335

Log Email Activity.. 336

Avoiding Duplicate Processing.. 337

Avoiding Too Many Active Visual CUT Instances (Queuing) 338

Handling Missing Parameter Values. 338

Job Status Functionality.. 339

Record Processing to an ODBC Database. 340

MS Access Database Sample. 340

SQL Server Instructions. 341

Process Logging Settings in Options Dialog. 342

Update a Database After Success. 343

Update a Database Before Report Runs. 343

Call a Web Service after Success (After_Success_HTTP) 344

Sending SMS Messages. 344

Trigger Dynamic Batch File after Success (After_Success_Batch) 345

Dynamic References to Fields/Formulas within the Batch File. 345

Logging to a text file. 345

Table of Command Line Arguments. 346

Data Source Options. 346

Report Parameters/Formulas. 346

Printing Options. 347

Export Options. 347

Email Options. 348

PDF Options (processed in this order) 349

Excel Options. 350

MS Word Options. 351

Text/HTML Options. 351

Miscellaneous. 352

Update History.. 353

Version 7.5.3: Entered Testing November 6, 2024. 353

Key Features. 353

Web Features. 353

Excel Features. 354

Other Features. 354

Fixes. 354

Version 7.5.1: Released May 11, 2024. 356

Key Features. 356

Web Features. 356

Excel Features. 356

Other Features. 357

Scheduling Features. 357

Fixes. 358

Version 7.4.1: Released June 29, 2023. 359

Key Features. 359

Web Features. 360

Excel Features. 360

Excel Workbook as Data Source (instead of Crystal report) 361

Other Features. 361

Fixes. 361

Version 7.3.1: Released November 8, 2022. 363

Key Features. 363

Report Inspector Features. 364

PDF Features. 364

Excel Features. 365

Delegated Processing Features. 366

Other Features. 367

Email Features. 369

Fixes. 370

Version 7.2.1: Released December 19, 2018. 373

Key Features. 373

Email Features. 373

Excel Features. 374

PDF Features. 374

Scheduled Tasks Features. 374

Other Features. 375

Fixes. 376

Version 7.1.1: Released November 11, 2017. 378

Key Features. 378

PDF Features. 378

Excel Features. 379

Other Features. 380

Fixes. 381

Version 7.0.1: Released November 26, 2016. 383

Key Features. 383

PDF Features. 383

Excel Features. 383

Email Features. 384

Other Features. 385

Fixes. 387

Version 6.9001: Released November 21, 2015. 389

Key Features. 389

Excel Features. 390

PDF Features. 391

Email Features. 391

Other Features. 392

Fixes. 392

Version 6.8001: Released November 16, 2014. 393

Web Dashboard and FTP/SFTP Features. 393

PDF Features. 393

Excel Features. 394

Email Features. 394

Other Features. 395

Fixes. 397

Version 6.7001: Released December 01, 2013. 398

Email Features. 398

PDF Features. 399

Excel Features. 399

Web Dashboard & FTP/SFTP Features. 399

User Interface Enhancements. 400

Command Line Arguments. 400

Fixes. 401

Other 401

Version 6.6001:  Released December 31, 2012. 402

Version 6.5001:  Released January 26, 2012. 407

Version 6.4001:  Released June 01, 2011. 412

Version 6.3001:  Released July 02, 2010. 418

New PDF Features. 421

Version 6.2001:  Released November 28, 2009. 423

Version 6.1001:  Released March 10, 2009. 427

Version 6.0000:  Released 11/23/2008. 430

Known Issues and Limitation.. 471

Introduction & Key Benefits

 

Visual CUT lets you schedule periodic and exception reports (Crystal, Excel, or SQL statements) for exporting, bursting, e‑mailing, and printing. E-mail messages, export file names and folders, number of copies, and many other options can incorporate dynamic content from fields/formulas in the report via a drag & drop user interface.  The main benefits of Visual CUT include: 

 

1.      E-mail a dynamic-content message from reports/Excel/SQL data as a whole or for each Group. Include auto‑generated HTML tables of report/group data in the email message. A variety of options are supported including queued, archived, secured (NTLM, CRAM-MD5, SSL, STARTTLS), encrypted, and signed messages. Message bodies and options (subject, From, To, cc, bcc, priority, attachments) can incorporate dynamic content from fields/formulas in the report (via a drag & drop user interface) and can be formatted as HTML.

 

2.      Export the report as a whole or Burst each Group Level-1 to a variety of file formats, save the results to dynamically named disk files/folders and include them as attachments to email messages. 

3.      Schedule exporting, bursting, emailing, and printing of reports based on parameters and options you specify (and save) during an interactive session. 

4.      Generate Auto-Refreshing Web Dashboards, Grids, and Pivot Tables from Crystal or Excel data.

5.      Control and Invoke processing of Crystal reports, Excel workbooks, or SQL statements using command line arguments. A full command line interface allows calls from batch files, schedulers (including the free Windows Task Scheduler), desktop shortcuts, or any other program.

6.      E-mail Alert Messages and Exception Reports by scheduling exception reports with an option that aborts processing when the report has zero selected records.

7.      Special Capabilities include:

§  HTML exports (including charts & logos) can be embedded in email message bodies.

§  PDF exports can include Color-Coded Bookmarks & Table of Contents for easy online & hardcopy navigation. 

§  PDF exports can be password protected (128-bit or 256-bit AES encryption) and/or restricted (for example, prevent editing).

§  PDF files can be split and emailed based on bookmarks or embedded text tags.

§  PDF files can be Merged (and bookmarks added) to create mixed page layouts, combine & staple output.

§  PDF files can be merged to create multiple Layers inside a single pdf file.
Within Acrobat reader, users can then turn the visibility of each layer on or off.
This is particularly useful for map layers. You can control the naming and initial visibility of each layer.

§  PDF files can be linearized (web-enabled) for faster opening from a web url.

§  Export/Burst to BMP, JPEG, WMF, EMF, EPS, PNG, TIF or GIF Image Files
(via an option to convert PDF files to image files).

§  Add web, email, or file links (hotspots) with optional text to PDF files.

§  Add an image with an optional hotspot to PDF files.

§  PDF Forms can be Filled (and optionally flattened) using Crystal formula values.

§  PDF Exports cangenerate Form Fields based on report formulas. This means that you can use Crystal Reports to design pdf forms, and Visual CUT to generate and distribute these forms

§  PDF files with embedded files and drill-down links can be created.

§  Bursting to Excel can generate either a separate excel workbook file for each Group or multiple sheets (tabs) within a single workbook. 

§  Excel exports can be inserted as tabs in a specified excel file to create briefing books.

§  Excel exports can display auto filter interface.

§  Excel exports can be password protected.

§  Excel pivot tables can be generated automatically.

§  Multi-tab excel exports (due to 65,536 row limitation) can be merged and converted into single-tab .xlsx files.

§  MS Word template documents can be mail-merged with Crystal/Excel data & tables and saved/emailed to dynamic destinations.

§  Text exports can be embedded in email message bodies.

§  Text exports or files can be merged into new or existing files.

§  Export to multiple file formats in a single pass.

§  Print to multiple printers in a single pass.

§  Print Burst so each Group Level-1 becomes a separate print job.

§  Split the printout of a pdf file to different printer trays.

§  FTP files to dynamically named web server folders using simple or secure connection.

§  Report Inspector allows mass-update of formulas, expressions, fonts, subreports, and Data Sources.

§  Zip and password protect files for secure single-file emailing of report exports.

§  ODBC Exports can replace or append to existing tables, This provides ETL (Extract, Transform, Load) and scheduled data snapshot functionality.

§  Capture incoming emails into a database and use them to trigger reports and database updates.

§  Inspect and Mass-Update reports.




Install / Remove

 

Selecting a Version:  8.5, 9, or 11 (XI R2)

In most cases, you should install Visual CUT 11.  It can run all .rpt file versions, including 7, 8, 8.5, 9, 10, XI, 2008, 2011, 2013, 2016, and 2020. 

Running a Crystal 2008-2020 report in Visual CUT 11 like running it in Crystal XI R2. New features degrade gracefully. You can support new features by delegating exporting/bursting to DataLink Viewer 2011.
A free DataLink Viewer license is available for that purpose.

Installation:
Make sure you install while being logged in as an Administrator on that PC.
1. Extract the .zip file to the local hard drive using the provided password.  
It results in an msi file and a batch (VC11_Uninstall_Install_RClick_Run_As_Admin.cmd) file.
Don't run the msi file from within the zip file. Make sure the .msi file is placed on the LOCAL hard drive (not a CD or a mapped drive). Installation (.msi) files have self-repair and on-demand installation (for other users) functionality. Do not delete/move the msi file unless you removed the software.
2. Right-click the .cmd file and select Run as Administrator. It will take care of various aspects such as checking for and stopping/uninstalling previous versions.

urlmon.dll message
You can ignore and click OK to continue if the installer shows a message about not being able to update urlmon.dll.

Important steps After Installation
In post-XP Windows versions, the application folder (e.g., c:\Program Files (x86)\...) is write-protected by default. When Visual CUT gets loaded for the 1st time, it redirects the key files (Visual CUT.mdb, DataLink_Viewer.ini, ReportList.txt, ReportList.grd) to a MilletSoftware folder under \ProgramData or \AppData. The best way to navigate to this location is to click the Version Information button, and double-click the path information at the bottom of that window. Be sure to give other users modify permissions to that folder. Otherwise, Windows will automatically manage a dedicated version of these files for each user under a virtual store folder: users\user name\appdata\local\VirtualStore\Program Files...  (this can lead to odd behaviors whereby saved settings are not available to other users or scheduled processing).
You can see an explanation of this at: http://www.west-wind.com/WebLog/posts/5584.aspx.

To allow administration of the smtpQ service, you may need to Right-click the Visual CUT.exe and set it (Properties, Compatibility tab) to Run as Administrator (set the option to apply to all users).

PDF Processing Errors
If you get one of these errors: Error 429: ActiveX component can't create object , iSED.exe registration error , 'error accessing ole registry' , 'Automation error The system cannot find the file specified' or 'Out of Memory'
Some pdf processing options require the use iSED.exe as a component, which must be registered while you are logged in as an Administrator.
Use Notepad to place the following command line in a batch (.bat) or command (.cmd) file:
"c:\Program Files\Visual CUT 11\ised.exe" -regserver
or, on a 64-bit machine:
"c:\Program Files (x86)\Visual CUT 11\ised.exe" -regserver
Right-click the batch file and select 'Run as administrator'

Avoid Installation on a Machine acting as a Crystal Reports Server (Crystal Reports Server, BOE, SBS, MAS90, SAGE 100):
Due to the risk of runtime component conflicts, you should avoid installing the software on a machine acting as a Crystal Reports Server.

Changing a Version (between 8.5, 9, or XI):
If you installed one version and then you decide to REMOVE it and install another version, be sure to first rename the old Visual CUT.mdb file, since it is not identical across all versions.  To transfer settings from an old Visual CUT.mdb to the new one, follow these steps:

  1. Open both Visual CUT.mdb files (old and new) in MS Access and copy all tables except for Export_Opt from the old to the new.
  2. If you installed to a new folder, copy ReportList.txt, ReportList.grd and DataLink_Viewer.ini from the old folder to the new one.

 

Step 1: Select Report Tab

 

After starting Visual CUT, you would see the following screen:

image

 

Main Buttons

 

Use image to browse for and open a report for the first time. Previously selected reports are listed in a grid and can be launched by double-clicking or by Right-Clicking and selecting ‘Preview Report’ from the popup menu.

Use image to reload a report (if changed and saved in Crystal).

 

Use image to set various options, which are maintained in DataLink_Viewer.ini    


Use image to open this User Manual form my web site. Shift-click attempts to open the local pdf version.    


Use image to access a dialog with Version (and system) information. That dialog also displays the paths to the folder where settings are maintained. Double-click that text area to open the folder in File Explorer.

 

Use image to manage and monitor scheduled tasks.

Use image to view the failure log. Color changes to red if new failures were logged since last used.

 

Use image to exit Visual CUT.




The Report List Grid

Visual CUT can open and schedule processing for Crystal Reports, Excel workbooks, or SQL statements. The grid provides easy access and information about previously opened .rpt, .xlsx, or .sql files.

The grid information in maintained in a plain text file (ReportList.txt).
Copies of that file are periodically saved to the Recycle Bin in case you need to restore a previous version.

When opening a report for the first time, it gets added to the grid and Visual CUT populates the title and subject columns automatically if it finds that information in the summary information for the report.
You can set that information for the .rpt file in Crystal (under the file menu). Or you can manually enter that information into the grid.

To sort the grid, click the column headers.
To group the grid, drag column headers to the group area above.
To order the columns, drag the column headers to a different position.
To resize the grid columns, drag the borders between the column headers. 

Right-Click Menu for Column Headers

As shown in an earlier image, right-clicking column headers provides a menu with options to change font size, hide/show the grouping area, and hide/show certain columns.

Right-Click Menu for Report Rows

image


When you right-click a report row in the grid, the popup menu shown above is displayed.

The Delete Row option deletes the report only from the grid but not from the hard drive (and not from the saved settings for the report in the Visual CUT.mdb file).

 

Copy .rpt and Settings allows you to clone the rpt and its saved settings to a new report or to an existing report.

Export .rpt and Settings à ZIP allows you to package an rpt and its saved processing options to a ZIP file that you can copy to another machine and place in a folder where you wish to extract the rpt file.
Using Visual CUT on that other machine you can then use Import.rpt and Settings à ZIP to import the rpt and its settings. This is useful when you need to replicate processing options for a report across multiple machines.

Generate HTML Tables instructs Visual CUT to auto-generate {@HTML_Table_All_Rows} and {@HTML_Table_Group} tokens for Inserting HTML Tables with Report/Group Data into Email Messages.

 

 


 

Launching a Report


You can launch a report using one of these methods:

1)      Selecting that row and clicking the Preview Tab, or

2)      Right-Clicking that row and selecting Preview, or

3)      Double-clicking the row.

Note: the sample reports expect to find the Xtreme sample database and an ODBC DSN for connecting to that database on your PC.  If you don’t have that database, simply elect to NOT refresh the data. That would load the report with  saved data stored in the .rpt file.

image









Step 2: Preview 

 

The Preview Tab is an integrated viewer that would prompt you for any report parameters and logon information required by the report. 

image


 

Remember Parameter Values from a previous Session

Visual CUT remembers the parameter values used for the same report (and same path). Those values are automatically used during scheduled/unattended processing. For interactive processing, when you preview the same report again, this dialog allows you to reuse some or all of these values. You simply mark those parameters that you wish to change:

image 

 

Save Date Parameter Values as Date Tokens

If you frequently run reports with data parameters that should typically be set to Today or Yesterday, add the following entry to the [Options] section of DataLink_Viewer.ini:
Save_Date_Parameters_As_Tokens=||Today||Yesterday||


Such date parameter values would then be saved and reused in scheduled/unattended processing as well as in interactive use, as Today or Yesterday date constants.

For example, here is a selective parameter refersh dialog with saved dates matched to Today and Yesterday:
image

 

 

 


 

Speeding Up Report Previews   

If you are opening a report in Visual CUT, you may wish to cut the time it takes to preview the report so you can get to the business of changing some settings.  This can be achieved by saving the report with data in Crystal.  When you open a report with saved data in Visual CUT, you get the option to preview the report without refreshing the data. 

 

Changing Processing Options without Previewing  

All processing options are stored in Visual CUT.mdb. You can use MS Access to open that database and edit processing options in the Report_Opt and Report_Export_Options tables.

 

Changing Login, Report Paths & Other Settings without Previewing  

Visual CUT stores login information (strongly encrypted) for each report in the Login_Opt table within Visual CUT database.  Imagine your password to a data source used by 20 reports has changed. Instead of previewing each of these reports just so that the new logging information is captured, use the Options dialog, Process tab, to ‘Change Stored Login Information’ for all reports. Similarly, use the 'Find & Replace Report Paths and other Saved Settings' button to
update Report Paths (in the database as well as in the grid) or other saved settings.

image


 

Find & Replace Report Paths and other Saved Settings

This dialog allows you to search specific types of saved setting for string replacements.
For example, as shown below, if you turn on the 'Parameters' checkbox, only saved parameter values would be targeted for Search & Replace:

image

 

Disabling Find & Replace Categories

In some scenarios you may wish to block the user from some or all of the Find & Replace categories. To do so, you can set the following entry in the [Options] section of a Master_DataLink_Viewer.ini file in the application folder:

 

[Options]

// Use ALL some combination of: Report_Paths, Email_Addresses, Email_Information,
// Export_and_Email_Attach_Files, Saved_Arguments, and Parameters delimited by '||'.

// For example, the following entry would disable only 2 categories:

Disable_Find_and_Replace_Categories= Email_Addresses||Email_Information

 

Save and Reuse Named Parameter Sets

If you click the refresh button for a report that has at least 8 parameters (Options dialog allows you to change that number), a Save button becomes visible in the following dialog: 

image

If you click Save, the following dialog allows you to save the current parameters value set to DataLink_Viewer.ini under a unique name for this report.

image



 

The next time you load this report, you would get a dialog that allows you select and reuse any of the saved named parameter sets for this report:

image

 

Double-clicking any of the entries (or selecting an entry and clicking the OK button) would launch a dialog allowing you to reuse that set of saved parameter values or selectively change some of these saved parameter values.

This functionality was designed to address scenarios where reports with many parameters are used in one of several parameter patterns. By saving and naming these patterns, the user can reuse them.

Note: if you are a report developer, you can deliver these saved parameter patterns to a user machine by copying the [Named_Parameter_Sets] section in your DataLink_Viewer.ini file to the user’s DataLink_Viewer.ini file.

 

 


Step 3: Export/Burst/Email… 


The 3rd tab of the application is where the real magic occurs.  Let’s review how each area on this screen is used.

Group Values Area

Visual CUT automatically detects Group Level 1 in the selected report and, if grouped on a Text or Numeric field/formula, populates this area with all group values.  The name of the Group Level-1 field or formula is presented at the top of exporting options area, where the exporting burst option can be activated.  

Note: the Group Values area is visible when 2 bursting conditions are met:

1) The report must be grouped at level 1 on a Text or Numeric field/formula and
2) That field/formula must be placed (can be suppressed) in the Group Header/Footer (can be suppressed).

 

image

 


 

Fields & Formulas Area 

image

Visual CUT automatically detects & lists in this area all fields & formulas in Report or Group Level-1 Headers and Footers (even if the objects/sections are suppressed).
Hovering your mouse over a field provides a tooltip reflecting the dynamic value associated with that field for:
a) the whole report (if in a report-level section), or
b) the selected group in the Group Values area (if in a Group1 section)
For example, hovering over the {@Subject} formula produced the tooltip shown in the image above.

 

You can double-click to insert (or drag & drop) these fields & formulas into the processing options area to specify options that change values based on report/group data. 


Also listed in that area are main report parameters that are in use. For example, {?01?Year} is the {?Year} parameter. The 01 indicates the position of the parameter in the list of parameters.  That position is important in constructing parameter arguments such as "Parm1:2015". The dynamic string values provided for parameter fields are converted to text from the data type of the parameter (Boolean, date, datetime, time, number, currency, or string). Multi-value parameters are returned as comma separated values. Range parameters are returned as [from-to] strings. If you need more control over the values returned from parameters, create a formula that returns the parameter value in the desired format (typically using the ToText() function), and place the formula (suppressed) in the report header or footer.

Since adding current day, month, and year values to options such as export file names and email subject are common needs, Visual CUT includes in the Fields & Formulas area a list of current date values (day, month, year) with various variations (number, name, length).  This allows you to avoid creating formulas in your report just to pass current date values to Visual CUT. Similarly, this area also lists the following tokens:

{%UserName%} – provides the Windows User ID
{[ODBC_DSN:]} – provides the ODBC DSN used to override the default DSN for the report.
{[User_ID:]} – provides the user id used for login (blank otherwise).


Notes:

·         Text objects containing fields/formulas are not included in this process.

·         Even if the field/formula or its report section is suppressed the field/formula is recognized.

·         Report Header/Footer subsections a,b,c,d,and e participate in field/formula detection.

·         Group Header/Footer Level-1 subsections a & b (GH1a, GH1b, GF1a, GF1b) participate.

 

Exporting/Bursting Options

 

image

 

This area allows you to specify the Exporting format (all file export formats are available) and whether you wish to export the whole report or burst each Group Level-1 into its own file. 

 

When bursting, you should typically specify a dynamic Export File Name option by dragging fields/formulas from the report into the export file name. If you hover your cursor over any option, a tooltip displays the dynamic value corresponding to the group currently selected in the Group Values area.
The image button provides export options for some export formats.
The image button provides a grid preview of the export files to be generated by bursting.

 

Note: when exporting, if the target file exists, it is first deleted and moved to the Recycle Bin.
To avoid invalidating hyperlinks to cloud drives (e.g. OneDrive) you can turn off this behavior by going to the Options dialog, Process tab, and turn off the ‘Save Overwritten Exported Files in Recycle Bin’ option.

Exporting to Multiple Files/Formats in a Single Pass

Imagine that you need to export and email a report in two or more file formats. Visual CUT allows you to do this in a single pass.  You can specify multiple export file names (separated by a semi-colon) and Visual CUT will export to all of them without retrieving the report multiple times.  For example: c:\temp\test.xlsx;c:\temp\test.pdf


The multiple export file names can either be entered into the export file name option or specified in the "Export_File" command line argument. 

 

Visual CUT automatically uses the appropriate export format for files with different extensions (.pdf, .xls, .doc, .htm, .txt, .csv, or .rpt) than the extension of the first file name.

The first export file extension should match the export format selected for the report. Since some export formats, such as .xls and .txt, have extra options, it makes sense to select that export format as the first file to be exported (allowing saved settings to control the extra options).  Export formats that have no variations (such as .pdf and .rpt) should be specified as the extra export files.

Note: this applies even to bursting, so each bursting cycle can generate multiple exports.

Skipping Exporting (VC_Skip_Export)

You may wish to skip exporting of the report in some cases such as using a dummy report as an excuse to apply special processing for an existing file. Or perhaps you have a scheduled process where even with zero records
(-E vs –e) you still want to email but avoid exporting.

 

For the first case, where you always want to skip exporting, you can simply set the export file to VC_Skip_Export (note there's no path).

 

For the 2nd case, you can use a Crystal formula to control exporting. For example
IF IsNull({Order.Order_ID}) THEN "VC_Skip_Export" ELSE "C:\Temp\" & {Order.Order_ID} & ".pdf"

 

Place that formula in the Report Header (so Visual CUT can recognize it) and suppress it.
In Visual CUT, you can then place that formula as the dynamic value of the Export File.

If the report sees zero records, the formula would return VC_Skip_Export, and the export would be skipped.

Note: to skip emailing, there's a similar constant (VC_Skip_Email). That can be used as the static or dynamic value of the Email_To option.



 


 

Replacing Illegal Characters in Dynamic File Names

Starting November 2011, you no longer need to worry about illegal and non-printing characters in file names unless:

a)      your export file names contain the illegal characters ‘*’ or ‘?’ (those characters are not replaced because they may be used in wild card selection of email attachments)

b)      you wish to apply your own logic for character substitution

Visual CUT takes care of replacing illegal characters in export file names, email file attachments, and .eml files (.eml files are used in email queuing). Visual CUT also removes non-printing characters from these options. The logic of illegal character substitutions is shown in the sample formula below. When hovering your mouse over the export file name or email attachment option, the tooltip shows the corrected dynamic value.

If you need to override the automated handling and control what legal characters substitute for what illegal characters, you can use a Crystal formula like the one shown below. Remember to place that formula in the RH/RF or GH1/GF1 section of the report so that it becomes available for drag & drop within Visual CUT.

 

// illegal Characters for windows file names include: ?/\|<>:"*

// Note: change InputFileName to your file name field or formula

Local StringVar InputFileName := "Test?/\|<>:""*" ;

Local StringVar OutputFileName ;

OutputFileName := Replace(InputFileName, "?", "_");

OutputFileName := Replace(OutputFileName, "/", "_");

OutputFileName := Replace(OutputFileName, "\", "_");

OutputFileName := Replace(OutputFileName, "|", "_");

OutputFileName := Replace(OutputFileName, "<", "{");

OutputFileName := Replace(OutputFileName, ">", "}");

OutputFileName := Replace(OutputFileName, ":", "_");

OutputFileName := Replace(OutputFileName, """", "'");

OutputFileName := Replace(OutputFileName, "*", "x");

// If destination is web server, replace spaces with "_"

//OutputFileName := Replace(OutputFileName, " ", "_");

 

 


 

Incrementing Export File Name Counter

Dragging the {[v]} token from the list of Fields/Formulas into the Export File Name adds a file version counter to the file name, ensuring the export file is new and doesn't overwrite previous versions. Note that in most cases this should not be needed because you can make the file name dynamic using Crystal fields/formulas or using date/time-stamp tokens.


Default Behavior

If the file doesn't exist, the {[v]} token is replaced with a blank text ("").
If the file exists, the {[v]} token is replaced by the first entry in the sequence of _1, _2, _3 …
that results in a new file. For example, if C:\Export.pdf and C:\Export_1.pdf already exist, then
an Export File set to C:\Export{[v]}.pdf would result in C:\Export_2.pdf being exported.

 

Customized Behavior

If you add an entry such as this:
{[v]}_Format=N(8)
to the [Options] section of DataLink_Viewer.ini, the {[v]} token always gets replaced with the first counter value that doesn't exists in a zero padded sequence starting with 00000001 where the number of digits is controlled by the number inside the parentheses.
In the example above 8 causes the number to have 8 digits.

 


 

Printing Options

 

Bursting to Printer

You may want to burst a report directly to a printer.  For example, you may want each group to become a separate print job so it gets stapled.

There are 3 options for achieving this.

Method 1

Use Printer_Burst or Printer_Burst_Only command line arguments. For detail, see:
Using Command Line Arguments to Specify Printer Bursting Destination

 

Method 2

Burst to PDF files and use PDF_Print command line arguments to print them. For detail, see:
Printing PDF Files

 

Method 3

Export to Printer (Default) or Printer (Specified) as the export format.
This allows print bursting to be initiated/stopped interactively.  If the Rename_Printer_Jobs option in the DataLink_Viewer.ini file is set to True, the printer queue shows the group value for each burst cycle print job.

When using Printer (Specified) as the export format, the export file name option controls the name of the printer.  Since this option can be dynamic (contain field/formula reference), this means that each group can be printed to a different printer.


Users who don’t see these export format options in the drop-down should add two new rows to the Export_Opt table in the Visual CUT.mdb Access database:

Export Constant

Export Name

Printer_Default

Printer (Default)

Printer_Specified

Printer (Specified)

 

 

 

 


 

Setting Custom Text for each Print Copy

When printing directly to a printer (not via PDF_Print), each print copy can have custom text. Simply place a formula called {@Print_Copy_Template} on the report canvas. For each printed copy, Visual CUT updates the text in that formula by replacing [[N]] with the copy number and [[M]] with the total number of copies.
For example, "Copy [[N]] of [[M]]" would become 'Copy 1 of 2', 'Copy 2 of 2’ like this:
https://www.milletsoftware.com/images/DataLinkViewer/Millet_Software_Custom_Text_for_each_Print_Copy.png

Visual CUT would also:
a) Replace references to fields/formulas with their dynamic values. Example: "Copy [[N]] of {@G1_Count}"
b) Replace [[{StartCount}+N]] with the dynamic value of a {@StartCount} formula + copy number. 
    Note: the token does not include the @ symbol in the formula name.

To dynamically control number of copies use "Print_Copies" argument like "Print_Copies:{@ Quantity}" or place field/formula in the Copies option as shown below:

https://www.milletsoftware.com/images/visualCut/Visual_CUT_Print_Copy_Template_with_Dynamic_Copies_Quantity.png
 

Interweaving Burst Printouts From Multiple Reports

Imagine that you need to burst a report such that each group results in a check printed on special paper using Landscape orientation followed by supporting documentation using Portrait orientation on another type of paper.  Or perhaps you need to burst 3 different reports (sales, commissions, and product returns) to sales representatives and you want the output to be sorted by report output within Sales Rep (rather than by Sales Rep within report output).

The After_Burst_Batch command line argument allows you to insert batch file operations after each successful export burst step (and waiting for that batch file to complete processing).

You can embed within the command lines inside the batch file field/formula names just as you can within the Visual CUT 3rd tab options.  Visual CUT substitutes the appropriate values (those associated with the current processing cycle) for these field/formula names before launching the batch file processing.  This allows synchronized interweaving of group bursting printouts from multiple reports without the limitations of subreports (subreports don’t support different paper trays, different paper orientations, and nested subreports)

For example, using the following scheduling string (or batch file):
------------------------------------------------------------------------------------------------------------

"C:\Program Files\Visual CUT\Visual CUT.exe" -e "C:\Program Files\Visual CUT\Visual_CUT.rpt" "Printer_Burst_Only:\\PS\Laser1"   
 "After_Burst_Batch:C:\VC_Prod_Type.bat>>Show>>Wait"

------------------------------------------------------------------------------------------------------------

would cause Visual CUT to:

1.      Start processing the Visual CUT.rpt and burst the first group value ("Competition")

2.      Before bursting the next group value ("Mountain"), Visual CUT looks into the  VC_Prod_Type.bat file to see if recognized fields/formula names should be temporarily replaced with dynamic values. 
Parm1:{Product_Type.Product Type Name} is then replaced with Parm1:Competition

image

3.      The dynamic/temporary copy of the batch file is then triggered for processing, causing a secondary instance of Visual CUT to process the After-Bursting request.

4.      Visual CUT then resumes the cycle with the next group value ("Mountain")


NOTE: in cases where paper tray choices within the reports don't seem to be honored during the processing, I recommend you add the same Printer to your Windows setup a 2nd time with a different name and a different paper tray as the default.  Then set each report to use the printer "clone" that has the desired tray as the default.

Note that in the example above 2 optional arguments are specified: (>>Show>>Wait).
You can hide the batch file window by setting the 1st optional argument to Hide instead of Show.  You can tell Visual CUT to not wait for the batch file to finish by setting the
2nd optional argument to NoWait instead of Wait.

 

 

Printer Job Name Functionality

When printing reports, Visual CUT names the print job according to the export file name option (even when only printing, and no exporting, takes place).  Since the export file name can be a mixture of static text and field/formula values, this allows you to have a very fine control over the printer job names showing up in the printer job queue.  For example, during print bursting, you can have each group printed under a different job name, allowing you to abort printouts for certain groups. 

In cases where you don't have permissions to rename jobs in the printer queue, you should disable this functionality by setting the following option in the DataLink Viewer.ini to False:
[Options]
Rename_Printer_Jobs=FALSE




 

Email Options

 

image

 

If you wish to generate a single Email from the selected report, turn on the "Single Email" option.  To generate an Email message for each Group Level-1, either in conjunction with export bursting or as simple email bursting, turn on the "Email for Each Group Level 1" option. 
The image button provides a grid preview of email bursting.

 

Combining Static & Dynamic Content

In all options, you can combine static text and dynamic values you drag from the fields/formulas area on the right. Moving the cursor over any of these options results in a tooltip display combining the static text with the dynamic content of the fields/formulas (based on the selected Group Value).

For example, in the example shown above, the email subject line resolved the text:
{@Year_Parameter} Sales for {Product_Type.Product Type Name}

into the dynamic content of:
2004 Sales for Competition 
This allows you to see what dynamic content you are building into your processing options.


Specifying SMTP Server

While you may specify the SMTP Server in the Export/Email tab settings for an individual report, you should do so ONLY when you need to override the default smtp server setting.

The defaults SMTP Server is specified in the global Options dialog

image

 

 


 

Sending Emails via Office365

You can use simple SMTP AUTH (user id and password) or OAUTH (Client Credentials Flow) when emailing via Office365

 

SMTP AUTH Option (simple)

1.    Open the Microsoft 365 admin center and go to Users > Active users.

2.    Select the user, and in the dialog that appears, click Mail.

3.    In the Email apps section, click Manage email apps.

4.    Set Authenticated SMTP as checked.

5.      Save changes.

In the Visual CUT Options dialog (Email tab), simply set the Email User ID and Password.

OAuth Option (complex)

Please contact Millet Software for detailed instructions.

 

 

Sending Emails via Gmail

To email via Gmail when 2-factor authentication is enabled, the simplest option is to
c
reate a Gmail Application-Specific Password: 

Login to Google using the same user id as the email sender account:

1. In https://myaccount.google.com/ select Security.

2. Click App password 

3. Select Mail as app and Windows Computer as device.

4. Generate and copy the password.
5. Set it as the email password (Visual CUT Options dialog, Email tab).

If email from Visual CUT still fails, visit the Display Unlock Captcha page and
click 'Continue' to remove the security block.

 


 

Embedding Special Content

Embedding Report as Image in Email (old approach)

Imagine you need to embed an image of the report's 1st page inside the email message body. The email recipient would see the report without needing to open an attachment.  First, export the report to pdf and use PDF_Save_As to convert to an image. For example, bursting to: c:\temp\Sales for {Product_Type.Product Type Name} in {@Year_Parameter}.pdf
the argument would be:
"PDF_Save_As:c:\temp\Sales for {Product_Type.Product Type Name} in {@Year_Parameter}.pdf> c:\temp\Sales for {Product_Type.Product Type Name} in {@Year_Parameter}.png>PNG>96"
Each page is saved with page number added at the end, so the 1st page from Sales for Competition in 2004.pdf would create a png file called: Sales for Competition in 20041.png

Then, embed a reference to the png image file inside the HTML message body. For example:
…<BODY>

Hi Ido, <br><br>

Here is your Sales Report for {Product_Type.Product Type Name} in {@Year_Parameter}: <br>

<IMG src="file:///C:/TEMP/Sales for {Product_Type.Product Type Name} in {@Year_Parameter}1.png">

</BODY></HTML>

image

Embedding Report as Image(s) in Email (new approach)

An Image export format converts report pages to images. You place an {[HTML_IMG_Src]} token in the HTML email message, and Visual CUT replaces it with the HTML img source directives for all the image files generated (one image per page). See video demo.

For example, for a report resulting in 3 pages, this HTML email message raw text:

…<BODY>Here is your Sales Report for {@Year_Parameter}: <br>

{[HTML_IMG_Src]}

</BODY></HTML>

may result in dynamic value substitutions that look like this:

…<BODY>Here is your Sales Report for 2020: <br>

<IMG src="file:///C:/temp/Sales1.png"><br><br>
<IMG src="file:///C:/temp/Sales2.png"><br><br>
<IMG src="file:///C:/temp/Sales3.png"><br><br>

</BODY></HTML>

And the email will show all pages of the report as images within the email message (sample):
https://content.screencast.com/users/IdoMillet/folders/Jing/media/456d5273-8aa1-4cfa-bdb1-08050b2acb5a/Visual%20CUT_%20Embed%20Crystal%20Report%20in%20Email.png

 

Depending on Border, Crop, Pad, and Separator options you set in the Image_Export_Options ini entry or a command line argument, Visual CUT crops, pads, borders, and separates the image source directives to improve the layout. The options dialog for the Image export format makes it easy to adjust these options and insert the resulting directive into the Argument area.
https://content.screencast.com/users/IdoMillet/folders/Jing/media/7b6cbffa-db8f-445a-b184-2c7cd6ec8c44/Visual%20CUT_%20Image%20Export%20Format%20Options.png

The sample image above shows an email with page images that were cropped, padded (3 pixels), and bordered. The <br><br> provided vertical separation between the images.

Notes:

1.      ini default is Image_Export_Options=|Border|Crop|Pad=3|Sep=<br><br>|
 

2.      Supported image file extensions are png, bmp, jpg, and jpeg.

 

3.      To add the Image export format to existing Visual CUT installation, you need to add Image to the list of export formats in the Export_Opt table in the Visual CUT database:

Export Constant

Export Name

Image

Image

 

-          Click Version Info button, and double-click text area at bottom to open the folder where the Visual CUT database is located.

-          Close Visual CUT and open the Visual CUT database in MS Access

-          Open Export_Opt table and add the row shown above.

Embedding Pivot Tables in Email Message Body

To embed a Pivot Table inside the email message body, follow these steps:

a) Use XLS_Save_As to target the pivot table for conversion to HTML. For example, using the sample Pivot_Data.rpt, the following XLS_Pivot_Table and XLS_Save_As arguments would generate the After_Pivot.xlsx workbook with a tab called Revenue Pivot Table and a pivot table with the same name. The XLS_Save_As argument would then save the pivot table into an html file (c:\temp\Revenue_PivotTable.htm).

image


b) Embed a reference to the html file inside the HTML message body. For example:
<BODY>The attached Excel Workbook contains the <STRONG>Revenue</STRONG> and <STRONG>% Late</STRONG> <STRONG><FONT color=#ff0000>pivot table</FONT></STRONG>.

image
Or, here is the Pivot Table as HTML: [[Insert_File:c:\temp\Revenue_PivotTable.htm]] </BODY></HTML>




Embedding HTML Export in Email Message Body

Imagine you need to export a report to HTML but you wish to embed the resulting content (including charts and images) inside the email message body.  To do this you need to observe the following simple rules:

b)      The email message body must be left completely blank.

c)      The first attached file name must be the html file to embed as the HTML email message (typically, it’s the report export to HTML).  That file name must end with .htm or .html

d)     Use HTML 40 as the export format


Limitations:

·         email clients typically corrupt the formatting of complex HTML messages when users attempt to Reply to or Forward the email message. 

·         Outlook 2007 is very limited in rendering HTML content. Use an older version of Outlook if you need HTML embedding in email messages or instruct Outlook 2007 users to open HTML emails in a full window (double click), and then click the "Other actions" toolbar button and choose "View in browser."

To avoid these limitations, a different method of sending report content as HTML is described in the following sections:
Sending Message Text as HTML
Embedding Images inside the HTML email body
Dynamic Tables inside HTML Email Messages
Using Cascading Style Sheets (CSS) in HTML messages

  


Embedding TEXT Export in Email Message Body

Imagine you need to export a report to Text but you wish to embed the resulting content inside the email message body.  To do this you need to observe the following simple rules:

  1. The email message body must be left completely blank.
  2. The text file (probably the file exported by Visual CUT, but it can be any other file as well) to embed in the message body  must be either the only specified attachment or the first file in the attachment list (reminder: multiple file attachments are separated by a ";" without spaces).
  3. The text file name must end with .txt, .prn, or .text

Embedding File(s) Content in Email Message Body

Imagine you need to insert a standard header and footer into the email message body, or you wish to give the user an easy way to modify the content of a specific paragraph by editing a text file, or you are specifying the email body via a command line and wish to refer to the body content via a file rather than by including the full content in the command line itself.  To do any of the above, you can embed within the message a references to a file using the following structure:  <<Insert_File:File_Path_and_Name>>
For example, <<Insert_File:c:\temp\MyFile.htm>>

  1. For HTML email messages, you should use [[Insert_File:]]
  2. When Visual CUT encounters such a "file token" it replaces it with the content of the specified file (if such a file exists).
  3. References to report fields/formulas are replaced with their dynamic content.
  4. You can use as many file tokens as you wish within a single message body.
  5. You can use a Crystal formula that results in such a token and embed the reference to that formula in the message body.  Visual CUT would first resolve the formula reference into the token and then replace the token with the file content. A typical use for this would be to embed a different paragraph in an email message depending on the number of days an account is overdue.
  6. If an inserted file has embedded file tokens, they would be replaced as well
    (the process is recursive).

 

 


Embedding Images inside the HTML email body (old email engine – no longer available)

In order to include an image as an embedded file, the HTML syntax of your message would include something like:
<p><font color="#000080"><img border="0" src="file:///C:/Program%20Files/Visual%20CUT/logo.gif"
width="211" height="69"></font></p>

You would need to attach that file to the email message. 
The attachment would be specified as something like
C:\Program Files\Visual CUT\logo.gif
(separated from other attachment by ";")

You don't need to attach the image if it is a reference to an image available on the web.


Embedding Images inside the HTML email body (new email engine)

If you are using the GUI HTML editor for the email message body, just insert an image and Visual CUT would take care of embedding it in the email message.

If you are manually creating the reference to the image, use the following structure:
<IMG src="file:///image_file_path_and_name">

For example,  <IMG src="file:///C:/Pictures/My_Logo.jpg">

The path and name of the image file must point to an existing file.  Of course, it may include a dynamic reference to a Crystal field or formula.  For example:
<IMG src="file:///C:/Pictures/{Product_Type.Picture_Path}.jpg">


You should not specify the image file as an attachment.

 

 

Custom Email Headers

See details in Argument to Specify Email Headers.

 

 

Email Priority

See details in Argument to Specify Email Priority.

 

 

Including Emoji in Email Subject

Including an emoji (e.g. ) in the email subject line can improve response rates and recognition of your emails.
You can dynamically set the subject emoji using a formula that returns one of several paths to a text file containing the emoji of choice. See video demo.  For detail, see Argument to Specify Email Subject Emoji.


Sending Message Text as HTML

Visual CUT ensures that e-mail messages that starts with <HTML> and ends with </HTML> are sent as HTML messages.

 

You can use the integrated HTML editor to create the message and drag and drop dynamic content into appropriate locations within the resulting HTML text.

 

<html>

<b>Hi, </b>&nbsp;<br>

<br>

Here's your <big><font color="#990000"><b>annual sales report</b></font></big>

for <big><b><i><font color="#3333ff">{Product_Type.Product Type Name}</font></i></b></big>

products.<br>

<br>

Please Contact Ido Millet (814 898-6262) if you have any questions.<br>

<br>

Regards,<br>

- TCW (The Crystal Wizard)

</html>

 

The message body above resulted in the following e-mail message body:

image



Using Cascading Style Sheets (CSS) in HTML messages

Just like any other HTML document, you can use CSS directives by embedding them in the header section of the HTML document. 

 

For example, assume you are embedding dynamic HTML tables inside the email message (see previous section for a detailed description of that technique. You may wish to control the font type and font size of table element (identified as td in HTML).

Here is an example of using CSS to achieve this:

 

<html>

<head>

            <title>Reseller Balance Report for (@Product_Param}</title>                                         

            <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">

 

<style type='text/css'>

td{font-family:Verdana; font-size:8pt;}

</style>

</head>

 

<body>

<font face="Verdana, Arial, Helvetica, sans-serif" size="2">
Hi {Reseller.First_Name},<br><br>

             This message shows your <b>{@Product_Param} </b>purchases, transfers,

and balance as of {@Nice_Date}. <br>  <br>

 

<hr width="100%" size="2">
<b><big>Your Purchases:</big></b><br><br>

   {@HTML_Table_Sub}<br><br>

    

<hr width="100%" size="2">
<b><big>License Transfers and Balance:</big></b><br><br>

  {@HTML_Table_3_GF1}<br><br>

</font>  

</body>

</html>

 


 

Integrated HTML Editor

imageJust to the left of the email message body, you can click on button to start an integrated HTML editor. If the message is not already in HTML syntax, clicking the button will add the necessary HTML syntax including a few useful cascading style sheet options (defaulting the message body text as well as any Table text to Verdana).

The editor allows you to change formatting, insert tables, images and links, check spelling, and edit the text, all from an intuitive word processing interface. It also allows you to preview the resulting email messages with dynamic values substituted for Crystal field/formula references.

 

Email Merge using Report Fields/Formulas

You can double-click or drag & drop dynamic fields to embed them in the email message:

 
image

 


 

Integrated Spell Checker

Starting in 2021 a new html editor provides inline spell-checking, similar to the experience you get when editing documents in MS Word.

 

Copy & Paste from Other Software

In most cases, you can copy and paste content into the HTML editor, while preserving formatting, from other software such as Microsoft Word or Excel.

CSS considerations

When Visual CUT starts a new html message in the html editor, it injects default css directives into a <Style> subsection within the <HEAD> area of the html. You can delete, modify or add directives to the default css.

 

<HEAD>

 <title>Your Order has Shipped</title>

 <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">

 <style type="text/css">

  body{font-family: Verdana, Geneva, sans-serif; font-size:10pt;}

   th, td{font-family: Verdana, Geneva, sans-serif;font-size:10pt; border:#585858 1px solid; min-height: 1em}}

   table{border-collapse: collapse; border:#585858 1px solid;}

   p{margin-top: 10px; margin-bottom: 10px;}

   ol,ul{margin-top: -10px; margin-bottom: -10px;}

 </style>

</HEAD>

Note: some email clients do not fully support css declarations in the <Head> area.
For example, Gmail styles tables properly only if you use Inline CSS rather than Header CSS.
To get around this limitation, you can use the inline-styled HTML tables auto-generated by Visual CUT (see video demo) or use Crystal formulas to generate an inline-styled HTML tables (see video demo).


 

Here is an image demonstrating this approach, which reduces the effort involved in setting colors, borders, and styling options:

 

image



 

Enter Key Behavior

Starting 2022, the editor handles Enter as a new line (<br>) and Shift-Enter as a new paragraph (<p>). 

If you wish to reverse those assignments, please locate the Email_Enter_Key_as_Paragraph ini option and set it to True instead of False.

The title of the editor window shows the behavior assigned to Enter and Shift-Enter.



 

Auto-Generated HTML Tables for Report/Group Data

See Video demonstration

Visual CUT can auto-generate HTML tables for the report data and for each group level 1 data.

Right-Click the report row in the grid and turn on the option to Generate HTML Tables.
image

 

This causes the tokens highlighted in the image below to be generated and populated with Report/Group data:
image

Switching to Preview mode confirm the token is indeed replaced by the HTML table for the current group:

image




Excluding Columns

The column names in the HTML table are generated based on the column headers in the report's Page Header section. You can exclude columns from the HTML table by starting their column header name with a space.  For example, in the sample report the Country and Web Site columns were excluded by setting the column headers to ' Country' and ' Web Site':
image

 




 

Parsing Requirements

The HTML tables are populated by Visual CUT by automatically generating an Excel (Data Only) export and "cleaning" it to remove blank columns, Blank Rows, and Non-Detail Rows. For a Grouped report, this requires that you avoid placing data directly above or below (GH1/GF1) the grouped-on column.
However, to support typical subtotal scenarios, you may place numeric content (e.g. group totals) above/below a string grouped-on column as demonstrated in the image below:

 

image
  

If you want to generate HTML tables for each group at level 1, the Group field/formula cannot have spaces within its name.  Use underscores instead.

Column headers cannot repeat. If your report spans multiple pages, place column headers in the
Report Header rather than the Page Header.


Notes:

·         The {@HTML_Table_Group} token is generated only if
a) the report is grouped, and
b) the column the report is grouped on is in the report details section and its column header matches the name of the column (if you need a better looking name, use a formula instead of the raw column)

·         If you need more control over the content of the HTML table (e.g. conditional formatting, HTML table from a subreport, or hierarchical HTML tables) you can use the technique described in the following section.

·         If you need column data to act as a hyperlink, use a formula that returns the full syntax of an anchor tag. For example:
"<a href=""" + {@URL} + """>" + {@Label} + "</a>"





 

 

 


 

Dynamic Tables inside HTML Email Messages

See Video demonstration.

HTML tables are very useful, particularly when sending email messages to mobile devices. Because the width of an HTML table and its columns can be specified as percentages of the available screen width, the information would adapt itself to the device displaying the message.

 

It is very easy to create static HTML tables (use the integrated HTML editor). However, this section describes a powerful technique for using Crystal formulas to create dynamic HTML tables (with information from your Crystal report).  You can then embed the formula containing the full table syntax in the email message body

 

The general idea is to use:
1) one formula (in a Report or Group header section) to set the value of a string variable to the
     table header syntax (<Table>….
2) P another formula (in a Detail or Group section) would repeatedly append table rows

3) a final formula (in a Report or Group Footer section) would provide the table footer and close
     the table syntax (using …</Table>)    

The Visual CUT 11.rpt sample report demonstrates this technique (and email bursting) using:
HTML_Table_1_GH1 (formula placed in GH1):


// In order to capture multi-section detail into an HTML table string

// (called HTML_Table), this report uses 3 Formulas:

// HTML_Table_1_GH1 sets the variable to the Table Header info

// HTML_Table_2_GF2 appends a row of data (for each Group Footer level 2)

// HTML_Table_3_GF1 Closes the Table

 

// Place this formula in GH1 to set formatting, column names, widths, etc.

WhilePrintingRecords;

Stringvar HTML_Table;
// Reset the string variable only if this is not a repeated group header

IF NOT InRepeatedGroupHeader THEN

HTML_Table := "<table width=""100%"" border=""1"" cellpadding=""5"" cellspacing=""0"" bordercolor=""#0033CC"">" +

            "<tr bgcolor=""#66CCFF"">" +

              "<td width=""60%"" align=""left""><strong><big>Product</big></strong></td>" +

              "<td width=""20%"" align=""right""><strong><big>Revenue</big></strong></td>" +

              "<td width=""20%"" align=""center""><strong><big>Days<br>To Ship</big></strong></td>" +

            "</tr>"

 


HTML_Table_2_GF2 (placed in GF2):

 

// Place this formula in GF2 to append Table Row Information

WhilePrintingRecords;

Stringvar HTML_Table;

HTML_Table := HTML_Table +

"<tr>" +

// Here we add the Product Name column

// (note that where we need to have " we must specify "")

"<td><div align=""left"">" +

{Product.Product Name} +

"</div></td>" +

// Here we add the total Revenue column:

"<td><div align=""right"">" +

"<b>$" + ToText(Sum ({@value}, {Product.Product Name}),0) + "</b>" +

"</div></td>" +

// Here we add the Average Days to Ship:

"<td><div align=""center"">" +

(

IF Average ({@Days_To_Ship}, {Product.Product Name}) > 5 THEN

// Slow shipping, so format as Red

"<b style=""color: rgb(255, 0, 0);"">" +

ToText(Average ({@Days_To_Ship}, {Product.Product Name}),1) +

"</b>" 

ELSE IF Average ({@Days_To_Ship}, {Product.Product Name}) < 3 THEN

// Fast shipping, so format as Green

"<b style=""color: rgb(4, 180, 4);"">" +

ToText(Average ({@Days_To_Ship}, {Product.Product Name}),1) +

"</b>"

ELSE

// Intermediate level of performance. Format as Blue

"<b style=""color: rgb(0, 0, 255);"">" +

ToText(Average ({@Days_To_Ship}, {Product.Product Name}),1) +

"</b>"

)  +

"</div></td>" + 

"</tr>"

 


HTML_Table_3_GF1 (used in Visual CUT to embed the HTML Table in email body):


// Place this formula in GF1 to "close" the HTML Table

WhilePrintingRecords;

Stringvar HTML_Table;

HTML_Table := HTML_Table + "</table>"

 

In Visual CUT, the report is set to burst and the {@HTML_Table_3_GF1} formula (because it was placed in a GF1 section) is available for drag & drop into an email message body:

 

<HTML>

Here is {@Year_Parameter} sales data for {Product_Type.Product Type Name}:<br><br>

 

{@HTML_Table_3_GF1}<br><br>

Cheers,<br>

- Ido
</HTML>


The resulting email message provides the dynamic content with an embedded HTML table:

image


Applying Alternating Row Color

To create an alternating background color effect to the HTML table rows, use the bgcolor attribute of the tr (table row) html tag. [Note: see Default CSS with Table Formatting for an easier approach!]

For example, the following HTML email message used the same approach described in the previous section, except that instead of a static "<tr>" to start each data row (GH2 formula), a string variable called ls_alternating_color_TR is used to alternate between "<tr>"  (no color) and  "<tr bgcolor=""#E0FFFF"">" (a light blue background color):

WhilePrintingRecords;

Stringvar HTML_Table;

// instaed of using "<tr>" to start each row, alternate row colors between "<tr>" and "<tr bgcolor=""#E0FFFF"">"

Stringvar ls_alternating_color_TR;

IF ls_alternating_color_TR = "<tr>" THEN

       ls_alternating_color_TR := "<tr bgcolor=""#E0FFFF"">"

ELSE

    ls_alternating_color_TR := "<tr>"

 

HTML_Table := HTML_Table +

Chr(10) + ls_alternating_color_TR + …

 

image



Embedding Hyperlinks to Reports/Files inside HTML Email Messages

Instead of attaching reports to email messages, you can use the email message to provide hyperlinks to the report files located on shared or web folders.

Visual CUT would export the reports directly to shared folders or upload them to web folders using FTP_Upload or SFTP_Upload arguments. Then, instead of attaching the files to the outgoing email message, you can use Visual CUT’s HTML email message editor to embed a hyperlink to the report file.  The hyperlink can be simple text or an icon of your choice.

 

Here is an email example of combining this approach with the HTML table technique described in the previous section. The pdf and excel icons act as hyperlinks for opening report files
.

image

If you’d like me to send you a sample report demonstrating how Crystal formulas can dynamically construct the hyperlinks and the references to the icons, please send me an email request. I can also send you the pdf and excel icons used in this example. 

 


 

File Attachments

 

Attaching Multiple Files

To attach multiple files to a single email message, simply specify multiple files and separate  them with a semi-colon (;) Without any spaces. 

If all files are under the same folder, it's enough to specify the full path only for the 1st file. 
For example: c:\temp\Sales.pdf;Returns.pdf

You can also specify file names using wild cards
For example, in a bursting scenario, to send all pdf files in the current month folder under the current customer:

C:\VC_Exports\{customer.customer_id}\{@Month}\*.pdf

and to send all files that start with the current Customer ID:

C:\VC_Exports\{customer.customer_id}*.*

 

Attaching Optional Files

You can indicate that an email attachment is optional by prefixing <Opt> to the file path & name.  For example, if you need to email Sales.pdf (always) and Returns.pdf (if it exists), use: c:\temp\Sales.pdf;<Opt>c:\temp\Returns.pdf 
- or -
c:\temp\Sales.pdf;<Opt>Returns.pdf




 

Email Addresses

Specifying Multiple (Simple/Composite) Email Addresses

You specify multiple email address destinations in the To, CC, or BCC emailing options, by separating them with a semi-colon (;) Without any spaces. 
You can also specify composite (display name as well as address) email destinations. 
For example: "Ido Millet" <ido@MilletSoftware.com>;"Jane Doe" <Jane@aol.com>

Specifying Email Distribution Lists in Text Files

To facilitate emailing to a long list of recipients, you can specify in the
To, CC, and BCC emailing options a file name containing a distribution list.   
For example, using Notepad you can create a file such as:

image

You then specify that Visual CUT should use that file as a distribution list by entering
File:c:\temp\test_email_list.txt  
in the To, CC, or BCC emailing options.

Notes:

·         you use the word "File:" followed by the path & name of the text file containing the email addresses.  Each address should be on a separate line and it can be specified as an email address only or as a composite (display name and address) as shown in the example above.

·         As always, you can include references to dynamic fields and formulas.  For example,
File:c:\distribution_lists\Department_{@DeptID}.txt
would allow you to burst a report by department and use a different distribution list for each department.



Specifying Email Distribution Lists in SQL Queries

In cases where you wish to dynamically retrieve the list of email addresses using an SQL query against an ODBC data source, you can specify in the To, CC, and/or BCC emailing options an expression such as:

MS Access Example:
ODBC:Customers::User_ID::Password::SELECT [email] FROM [Contacts] WHERE [Customer_ID] = '{Customer_ID}'

 

SQL Server Example:

ODBC:CONTACTS::sa::xxxxx::SELECT DISTINCT AHD.ctct.c_email_addr FROM

AHD.ctct where AHD.ctct.c_email_addr IS NOT NULL

 

The expression starts with ODBC: followed by 4 elements separated by ::

1. ODBC DSN (Note: could be different from the DSN used for the Crystal report)

2. User ID (use a single space if not needed)

3. Password (use a single space if not needed)

4. SQL Statement

Notes:

§  If the SQL statement returns multiple rows, Visual CUT takes care of concatenating the email addresses from all the rows to a single string with semi-colon as the delimiter.

§  The SQL statement syntax depends on your database.  For example, as shown in the samples above, MS Access uses [ ] around field/table names but SQL Server doesn't.

§  You can embed dynamic fields/formula values anywhere inside the expression.
In the MS Access example, the list of contacts for the Customer in the current bursting cycle would be retrieved. This offers powerful email distribution management options...




 

Specifying Bursting email Addresses in a Formula

In bursting scenarios, if the database doesn’t contain an email address for each Group Level 1, you can use a suppressed Crystal formula (in GH1 or GF1 sections) to return a different email destination for each Group. For example:

 

Select {Branch_Manager.ID}

   Case 101:

      "Jim@Acme.com"

   Case 103:

      "Amy@Acme.com;Don@Acme.com"

   Case 204:

      "Veronique@Acme.com"

   Default:

            "serge@Acme.com";



Force Email_From to Match Email_User_ID

To block impersonation, many email servers accept messages only when the Email_User_Id (used to authenticate) matches the Email_From address. To avoid failures, you can set the following entry in the [Options] section of the ini file:
[Options]
Email_User_ID_Override_Email_From = True


During processing, this would automatically set the Email_From to the Email_User_ID even if a user sets the Email_From option to something else. Note that the user would be free to set the email from name to whatever they want (e.g. "My Preferred Name" <from email address>).


 

New Email  Engine 

Starting 2011, extra options are available via the ‘Email 2’ tab  in the Options dialog:

image

Settings & Arguments for Advanced Email Features

When sending messages to multiple recipients, if the SMTP server rejects one of the recipients as a bad email address the process still continues emailing to the other recipients

 

You can also use secure connections to the SMTP server (NTLM, CRAM-MD5, SSL, STARTTLS).

The StartTLS option allows you to communicate securely with SMTP servers that require that option. Note: use the Email_StartTLS command line argument ("True", "False", or dynamic reference) to override the default specified in the Options dialog.

 

The Encrypt Email Messages option allows you to encrypt the message so that only the recipient can open it. Visual CUT automatically searches for and uses the public key found in the first non-expired certificate matching the recipient's email address (the recipient will be using their private key).  The search for matching key includes the Current User’s personal certificate store and then the Local Machine's personal certificate store.  Use the Email_Send_Encrypted command line argument ("True", "False", or dynamic reference) to override the default specified in the Options dialog. 

 

The Sign Email Messages option allows you to sign (using your private key) the message so that the recipient can verify (using your public key) that a) you are the true sender of the message, and b) the message content hasn’t been altered.  Note: use the Email_Send_Signed command line argument ("True", "False", or dynamic reference) to override the default specified in the Options dialog.

 

The SMTP Domain option allow you to specify a domain in cases where the SMTP server used integrated authentication.  Note: use the Email_SMTP_Domain command line argument (static or dynamic reference) to override the default specified in the Options dialog.

 


 

Queuing Emails & The smtpQ Service

With the new email engine, you can queue outgoing email messages in an ‘Outgoing’ folder monitored by a new smtpQ service.  If you enter any path in the Outgoing Folder option in the ‘Email 2’ tab, Visual CUT would use that approach. You can also activate this behavior by using the command line argument of "Email_Outgoing_Folder:Path_to_Some_Folder".

 

A special smtpQ Service (a separate process that always runs in the background) is responsible for handling the email messages queued in the ‘Outgoing’ folder.  You can install, start/stop, and administer the smtpQ Service by clicking on the ‘Administer smtpQ Service’ button or by double-clicking the status labels on the right:

image

If the smtpQ Service Fails to Start

You need to have Administrator rights to manage the smtpQ service. You may also need to Right-click the Visual CUT.exe and set it (Properties, Compatibility tab) to Run as Administrator (set the option to apply to all users).You may also need to lower the Windows ‘User Access Control’ security settings before the machine allows Visual CUT to manage the smtpQ service without causing a popup window each time Visual CUT starts.

If the service still doesn't start, download and install the VC++ 2015 runtime from Microsoft.

Monitoring Email Queuing

If an Outgoing Folder is specified, Visual CUT shows the number of email messages in the Outgoing and Undeliverable folders  in the first 2 panels of the status bar. 
The panel showing the number of messages in the Outgoing Folder, also indicates if the smtpQ service is Not Installed, Stopped, or Running. The information is refreshed every 5 seconds:

image

 

image

 

image


If the Visual CUT & smtpQ Folder don’t match, the status bar indicates there is a problem:
image 

As an added convenience, you can open the Outgoing folder or the Undeliverable folder in
File Explorer by double-clicking their panel.




Operating Logic

 

As soon as a new .eml file appears in the Outgoing Folder,  the smtpQ Service will attempt to send it. If it succeeds, it will either move the file to a Sent folder  or you can elect to have successful messages deleted. If after several minutes of repeated retries, the service fails to send the message, it will move it to an Undeliverable folder

 

These email messages are deposited as .eml files that can be opened in Windows Mail or Outlook Express. You can also manually move these files between folders. For example, if you copy .eml files from the ‘Sent’ folder to the ‘Outgoing’ folder, they will be emailed again.  This can be useful in cases where the receiver junked your original message by mistake. 

Among other benefits, this allows you to archive outgoing emails and easily recover from email service disruptions. For example, your email server may be down or your email service provider may not allow more than 100 messages per hour.


After making changes to the options in the smtpQ Service Manager dialog, you should click the Apply button, and then stop and restart the service to have these changes take effect. 

 


 

smtpQ Administration

Clicking on the Administer smtpQ Service button brings up the following window:

image

 

The Install Service button installs the service so that each time your computer starts the service will start automatically. Once the service is installed, you can Start or Stop the service using the appropriate buttons.  You can also stop and start the service from the Windows Control Panel, Administrative Tools, Services.. (it will show up as Chilkat SMTPQ):
 
Important: while the Outgoing Folder  option in Visual CUT controls where Visual CUT deposits outgoing email messages (as .eml files), the Outgoing Folder  option in the smtpQ Service controls what folder is monitored by the service. Obviously, these two options should point at the same folder if you wish to actually send emails automatically. 

 

Keep the Max Threads option low unless you are sure the SMTP server would allow you to send a high volume of emails through many concurrent sessions.


 

The Max Retries option allows you to specify how many attempts would be made to send a failing email message (for example, if connectivity to your SMTP Server was lost). The delays before each retry keep increasing from 1 to 10th {5 sec, 10 sec, 15 sec, 1 min, 1.5, 2, 5, 10, 15,
20 minutes}.

 

Slowing Down Outgoing Emails

 

If your SMTP service provider imposes a limit on how many emails you are allowed to send within a given time period, you may need to slow down the email queuing process. The Sleep After Send option (see image above) allows you to do that.  If set to a value greater than 0, the service “sleeps” for a specified number of milliseconds.


For example, A value of 10000 milliseconds would cause 10 seconds of sleep after each successful email.

To disable sleep mode, leave that value as zero.


Naming Scheme of .eml Files

To facilitate the process of locating specific messages, the .eml files are named using three parts:
a)         the name and address of the first email recipient

b)         [the Subject of the email message]

c)         {the date and time the message was generated}
d)         [The group number being processed]

Remember that these .eml files can be opened using software such as Windows Live Mail, Outlook Express, etc..


Here’s an example:

image


 

smtpQ Service Failure Action Properties

Each time the smtpQ service is installed or reinstalled, it is a good idea to set Recovery properties in case it fails. Locate Chilkat SMTPQ in the Component Services panel in Windows:

image 


Right-click the service, select ‘Properties’ and go to the Recovery tab.  Change the failure options from ‘Take No Action’ to ‘Restart the Service’:

image 

Generating Twitter or SMS Messages via Email 

You can send SMS messages from Visual CUT using email. If you know the number & carrier, you simply email to the phone number and a domain associated with the carrier.
For example, 1234567890@txt.att.net  see list of domains here.
If you don't know the carrier associated with the phone number, you can use an email-to-SMS gateway service such as: https://www.textlocal.com/integrations/email-to-sms/ or my CUT Light UFL (see example here).

Or direct emails to a Zapier account with a business rule that triggers an SMS via Twilio.

SMS via Visual CUT -_ Zapier -_ Twilio.png (1484×679)

Sample Zapier rule to send SMS via Twilio upon receiving the email from Visual CUT:

 

https://content.screencast.com/users/IdoMillet/folders/Jing/media/9c429bc3-5b6f-45aa-8a51-2ee8dc791d45/Visual%20CUT%20email%20to%20Zapier%20triggesr%20SMS%20via%20Twilio.%20%20Phone%20number%20passed%20via%20Subject%20line..png

 

In order to send tweets via Visual CUT, you can send email messages via a service that acts as a bridge to Twitter. The text below was provided by a Systems Analyst at a Fire Department that asked to remain nameless:

 

Our Fire Department uses Visual CUT to send various tweets via Twitter based on specific call for service data. Visual CUT is set up via a scheduled task to run every minute and looks for any newly-created records qualifying for tweeting. If a qualified record is found, Visual CUT sends an email to a specified email address that automatically posts to twitter. This is a free service provided by Twitter Counter (http://twittercounter.com/pages/twittermail/). 
 
 As part of the same process, Visual CUT also exports some data fields via ODBC to another table. This keeps track of which incidents were tweeted about. The same process also uses that table to determine if a previously tweeted incident has been cleared. This allows us to also use Visual CUT to send an all clear Twitter message.
  
 We don’t tweet out every incident, as many of our incidents are medical. We use a separate Visual CUT process at the end each month to send a count of the total number of incidents. This way our residents are aware of a total volume as opposed to just a couple of calls a day that get tweeted about.

 

image

 

 

 

 


 

Other Options

Specifying an Email Reconnect Option for Email Bursting

During Email bursting, the default behavior is to disconnect from the email server after each message. This avoids scenarios where the SMTP server imposes a limit on how many messages can be sent within a single connection. If you know your server doesn’t impose such a limitation, or if the number of emails you are sending during a burst operation is always below that limit, you can set an Email_SMTP_Disconnect_After_Send option (in DataLink_Viewer.ini) to FALSE.

 

 

Specifying a Different Character Set

In order to override the default character set (iso-8859-1) you should add an entry to the [Options] section of DataLink_Viewer.ini.  For example, in order to support Chinese characters, you should add the following entry:
Email_Char_Set=big5

 

 

Skipping Emails (VC_Skip_Email)

If you wish to skip the sending of an email message, you can include the text VC_Skip_Email anywhere inside the Email_To option. For example, you can create a formula that, depending on customer or order status skips the email messages to certain customers. In those cases, instead of returning the customer’s email address, the formula would return "VC_Skip_Email". You can drag that formula into the Email_To option and Visual CUT would then skip the emails for those cases. 
The advantage of this approach, compared to filtering the report, is that you may want the skip just the emailing while keeping exporting or printing functionality.


‘Start Process’ button and Progress Window

This button simply starts the process of Bursting, Exporting, and Emailing as specified by the options above.  During the process, a window traces the progress of the operation:

 

image

 

While in progress, instead of a Close button, you will see a STOP button allowing you to abort the operation.

Tip: at the end of a process, if you double-click the export file name field
(in the export/email tab) , Visual CUT will open that folder in file explorer for you. 


 

Scheduling


Version 6.9002 has an integrated task scheduling GUI (Windows Scheduler used as engine). 

See 9-minute video demo
Note: to disable this functionality, see Restricting User Actions.

Scheduling Area 

image

 

Scheduling String

The scheduling string text provides the necessary command line to trigger Visual CUT processing for this report.  The button to the right allows you to select or create a batch file to hold this command line.

 



Scheduled Printing

This area also shows what printer is currently associated with the report. Visual CUT sends reports scheduled for printing to that printer. Within Crystal, you can associate each report with a different printer using the File, Printer Setup… dialog. As explained later, you can override the  printer destination when scheduling or invoking Visual CUT via command lines.

 

The number of copies option can be dynamic (drag & drop a formula into that option) or static (enter a value). You can also specify the collation option.

 

Note that these printing options apply only for scheduled (command line) invocations of Visual CUT.  if you want the report to be printed during an interactive session, you should simply print it from the Preview tab). 


 

Arguments

The argument field allows you to specify and save extra processing directives. The list of available directives is provided in the table of command line arguments at the end of this user manual.

These arguments allow you to tackle many use scenarios that are impossible to address with other tools. By specifying the arguments in this field, you remove the need to specify them in the command line. You can then test and benefit from these options even during interactive processing.

 

A double-click on the arguments area, or a click on the button to its right, launches an 'Edit Arguments' window that makes it easier to review/edit the arguments: 

image

 

You can drag & drop or double-click the report fields/formulas to insert them into the arguments. As demonstrated by the tooltip, the dynamic values of these fields/formulas are used during processing.

The Rich Text Format allows you to switch to plain text formatting. In Rich Text Format mode, arguments that are acceptable in the GUI are highlighted in blue. For example, Parm arguments are not recognized at this stage because we reach the Preview phase only after the report data is retrieved.

The paper scroll button launches a browser to the table of command line arguments in the online user manual.


 

Control Processing Options When Encountering Zero Records

The command line is constructed as the name and path of the executable (surrounded by quotes),
followed by  –e or -E  and the path and file name of the report (surrounded by quotes):

"C:\Program Files\Visual CUT\Visual CUT.exe" -e "C:\Program Files\Visual CUT\Visual_CUT.rpt"  

Specifying –e or E in the string above causes automatic "Execution" based on encrypted and stored logon information, stored parameter values, and the various processing options specified & saved during an interactive session in Visual CUT.

 
–e aborts processing of empty reports while E doesn’t.

Specifying –s in the string above causes automatic "Show" (Preview Tab) based on logon and parameters specified & saved during a previous session in Visual CUT. 
You can also use this to create a simple shortcut for quick viewing of a report.

If no processing option (-e, -E, or –s) is specified in the Scheduling string, the application’s Preview Tab would open for the specified report prompting for Parameters and Logon information if required.

 


 

Adding Scheduled Tasks

In the Export/Email tab, a button to the right of the scheduling string launches a dialog that allows:

a)      Viewing and modifications of the command line

b)      Inserting the command line into a new/existing batch file

c)      Creating a scheduled task for the command line or the batch file

image

Inserting multiple command lines into a single batch file allows a single scheduled task to trigger multiple processes. Consider naming the batch file to reflect the schedule logic (for example, "Morning Reports.cmd" or "Every Hour.bat"). If you are scheduling a new batch file, turn on the '& Schedule' checkbox. You would be prompted to set the task trigger options
(see image). Then, the task is automatically created with all other options set to recommended defaults. You may then use the task management &  monitoring window to review/edit those options.


 

Place the command line in a batch file

The "Scheduling String" in Area 5 provides you with the command line needed to run a report via Visual CUT in unattended mode.  You may copy and paste that command line into a batch file but a better approach is to click the  image  button to the right of the scheduling string. 
This  prompts you to enter a new batch file (.cmd / .bat) name or select an existing batch file.

The command line is then inserted into the new/existing batch file and you can elect to immediately view/edit the batch file inside Notepad.

You can test the process by double-clicking the batch file.  This should trigger processing of the report in Visual CUT.

 

Command Line Wizard (Parameters & Skip Zero Records)

If the report has parameters, the  image  button to the right of the scheduling string starts a dialog with options to include parameters in the initial command line. If the report has Date or DateTime parameters, the dialog defaults to including them. You can then edit the static values in Notepad, and replace them with Date Constants such as Yesterday, Start_Month_Minus_1, etc. (see Date Constants section in the user manual).
  image



 

If you select ‘ALL parameters’ from the drop-down, all active parameters are included.
Note: you should include parameter arguments only if you need to override the parameter values saved when you previewed the report in Visual CUT.
(Parm1 is not included in the case below because it is an unused parameter):

image

 

If you uncheck the ‘Skip 0 Records’ option, the execute flag in the command line changes from ‑e to -E.  With the default of ‑e Visual CUT skips processing if the main report has zero records (allowing easy implementation of exception reports and email alerts).



 

Management & Monitoring of Scheduled Tasks

A button on the first tab launces a window for managing & monitoring scheduled tasks.
The targeted tasks are those that call batch files, Visual CUT or DataLink Viewer

Compared to the Windows Task Scheduler dialog, this window has several key advantages:

·         Task status is updated automatically without needing to click Refresh (and is color-coded)

·         Mass update of login information for all tasks that belong to a specified user.

·         Suspend/Resume all enabled tasks (leaving Disabled Tasks untouched)

·         Easily update batch file tasks to avoid failure (insert missing Start-in folder) or
to run in an invisible window

·         RenameCloneEditExport & Import tasks.

·         Arrange the grid: sorting, grouping, filtering, visible columns…

 
image

 


 

Fixing Issues

Failure to Add a Scheduled Task

If you get an error message indicating 'Failed to register with given user id…Access is denied…',

right-click the Visual CUT.exe and set it (Properties, Compatibility tab) to Run as Administrator (use the option to apply to all users). Do the same for Visual_CUT_Helper.exe. You may also need to use Windows 'Change User Account Control Settings' and lower UAC to 'Never Notify'.

You can see background information about this here: https://www.devopsonwindows.com/create-scheduled-task/ 

Note, in particular, the following text:

--------------------------------------

However, if you try to run the task manually, it will fail with an “access is denied” exception (assuming you have User Account Control enabled). To address this, either disable UAC (always a valid option in my book), or you can configure the task to effectively “run as administrator”:


Note that you will need to run the application that creates the task as an administrator as well if you use this approach.

--------------------------------------

Failure to Refresh Status in Monitoring Grid

If the monitoring grid doesn't update status and doesn't show newly added tasks:

1.      Make sure the tasks were saved under the ‘Task Scheduler Library’ root folder of the Windows Task Scheduler. Not under a subfolder.

2.      Make sure Task History is not disabled in Windows Task Scheduler options. Start Windows Task Scheduler and change the settings to match what is shown in this image.

 

 


 

Mapped à UNC File Paths

The task scheduler, given that it runs under the local SYSTEM account, may not recognize mapped network drives. Visual CUT automatically convert mapped paths to UNC paths when you open an rpt from a mapped folder, or when you set up export file locations.
For example: \\server123\ixm7\{@Year}\Sales for {Product_Type.Name}.pdf
Instead of:   P:\{@Year}\Sales for {Product_Type.Name}.pdf
But if the report uses a mapped drive in the data source setup, you should change the data source definition to use a UNC path instead.

Processing of Multiple Reports in a Single Batch (.BAT) File

You can use several command lines inside a single batch (.bat or .cmd) file to trigger processing (manually or via scheduling) of multiple reports.  For example, double-clicking (or scheduling) the following Ido.bat file would trigger processing, one after the other, of Report1.rpt and then  Report2.rpt:


image
  

 

Execute Multiple Reports in a Single Process

You can execute multiple Visual CUT command lines found inside a batch file (or any text file) in a single process. This avoids multiple starts and improves performance.
You specify the target batch/text file using the following command line:

"C:\Program Files (x86)\Visual CUT 11\Visual CUT.exe" "Batch:C:\Test\My.cmd>>0>>"
or

"C:\Program Files (x86)\Visual CUT 11\Visual CUT.exe" "Batch:C:\Test\My.txt>>0>>"

Visual CUT then executes all the relevant command lines (those that call Visual CUT) found inside the specified file. 

 

Notes:

 

·         The '>>0>>' portion of the command line argument is reserved for future use.

·         While the single process is running, the tooltip for the Visual CUT status bar icon shows the progress (e.g. Visual CUT [1/4]: Invoices.rpt...).

·         In cases where you need the process to redirect to a non-default Main Files folder, add the Main_Files_Folder command line argument to the command line above, not for each command line, because this directive gets processed once upon initial load. This avoids the need to specify this directive for each command line.

 

Execute all Command Files in Queue Folder

To execute all Visual CUT command lines in all batch/text files found inside a folder (acting as a queue folder for processing requests) and move those files to another folder (to avoid repeat executions) use a command line such as this:

“C:\Program Files (x86)\Visual CUT 11\Visual CUT.exe" “Batch:QFolder_P1>>0>>"

 

Instead of specifying a file name, as in the section above, QFolder_P1 specifies a DataLink_Viewer.ini section that should look like this:
[QFolder_P1]

QFolder= C:\Users\jxd7\OneDrive - MS\Requests\

XFolder=C:\temp\Xecuted\

 

The section name must start with QFolder_
QFolder
specified the folder to scan for (and execute) all .cmd/.bat/.txt files
XFolder specifies the folder where the files should be moved to (to avoid duplicate processing)
XTimeStamp (True or False) specifies whether a date & time stamp should be added to the file.
                            for example, Test.cmd  è Test_20210123_111242.cmd
 
You can use my ActionQ software to trigger processing when a file appears in a folder.

 

Scheduling (old approach)

 

By clicking on the Save button, all report processing options, parameters, and logon information (encrypted) are saved for later use by Visual CUT.  This allows the application to process any report in unattended mode by simply invoking the executable (Visual CUT.exe) with a proper command line (using a *.Bat file, a RUN command, a desktop shortcut, or a call from any other application). 

 

The typical approach, if you are not using the New method described in the previous section,
is to
1) place the command line in a batch (.bat) file, and
2) call the batch file from the Windows Task Scheduler

 

Call the Batch file from Windows Task Scheduler

While there are many commercial schedulers, the free Windows Task Scheduler (already installed as part of your Windows operating system) is capable of handling most scheduling requirements.  Here’s how you can go about scheduling a batch file:

 

  1. In Windows, click on Start, Settings, Control Panel, Scheduled Tasks
  2. Double-Click Add Scheduled Task
  3. In the Scheduled Task Wizard, click the Browse button,
    and select the Batch file containing the Visual CUT command line(s).
    image
  4. Specify Name and Frequency for the scheduled task:

    image

  5. Specify Schedule options.  These options vary depending on the frequency you selected above. 

    image


  6. Specify your password: 

    image

 

  1. Select the option to Open advanced properties and click Finish.

    image

 


  1. The Schedule tab in the advanced properties dialog provides an Advanced button:

    image

    Clicking on that button, provides various advanced scheduling options:

    image




 

 

9.      Using the Settings Tab, you can specify other advanced options such as minimum idle time requirement before the scheduled task is allowed to begin. 

Be sure to turn on the option of "Wake the computer to run this task."
For a description of why this setting is important (in the context of the Vista operating system), see: http://support.microsoft.com/kb/930133.

image

10.  After the task is scheduled, it is listed and tracked under the Scheduled Tasks folder.
By double- or right-clicking-clicking any task in the Scheduled Tasks folder, you can bring up the scheduling dialog, change settings, rename, run, or disable a task.
 
image



Scheduling Issues

Windows 7+ Task Scheduler

Turn on the "Run with highest privileges" task property (‘General’ tab).
The user account that is setting up the task should be a local administrator.

On the actions tab, set action to Start a program

 

You can simply browse and select the batch file (*.bat or *.cmd).
Or set the Program/script as cmd.exe
and
the arguments as: /C C:\Some_Folder\Your_Bat_File.bat
 


 

Hide Batch (Command) Windows

To avoid being distracted by the batch file window each time it gets triggered, save the following line as invisible.vbs (use Notepad Save As... All Files):

CreateObject("Wscript.Shell").Run """" & WScript.Arguments(0) & """", 0, False


In task scheduler, follow this example (use actual paths to invisible.vbs and to your batch file).

The application in this case is wscript, and the arguments to it are the invisible.vbs followed by the batch file. Here is a link to an explanation and other options.

image

Another option to hide the task process is to set it to 'Run whether user is logged on or not'.

 image


 

 

E-mailing Alert Messages and Exception Reports


Imagine managers at your company wish to receive daily reports showing exceptions such as orders with very low profit margins, products with very low inventory levels, late shipments, or production runs with very high scrap rates. In most days these exception reports should be empty and should not reach the managers. 

Using Visual CUT you can schedule these reports to run as frequently as you wish, but with  
–e rather than –E in the command line. This would ensure that during each scheduled processing cycle, the e-mail message, and (optionally) the attached report would be sent only if exceptions were indeed found.  If no records pass the record selection criteria, exporting, e‑mailing, and printing of the report are simply aborted.

This logic applies to the main report.  A case of no records in the main report but some records in a subreport is still considered as no records.

Note: to avoid repeating the same exception email, see Avoiding Duplicate Processing.  

Management By Exceptions and Business Activity Monitoring (BAM) are powerful approaches to management, and Visual CUT makes them easy  J


Using Command Line Arguments

Arguments to Specify Parameter Values

When you open a report in Visual CUT, the values you specify in response to parameter prompts are saved in the internal database (Visual CUT.mdb).  In some cases, you may want to invoke Visual CUT processing via command line calls while overriding some or all of these stored  parameter values.  You can do this by specifying additional command line arguments.

 

So far, the string used to schedule or launch processing of reports was described as:

"C:\Program Files\Visual CUT\Visual CUT.exe" -e "C:\Program Files\Visual CUT\Visual_CUT.rpt"  

or

"C:\Program Files\Visual CUT\Visual CUT.exe" -E "C:\Program Files\Visual CUT\Visual_CUT.rpt"  

 

You can add optional arguments to the command lines, which identify the parameter (by its number) and specify its value.  For example, using the following string would override the first parameter value saved by Visual CUT with the value of 1988 (in the sample Visual_Cut.rpt report, the first parameter is the YEAR). 

"C:\Program Files\Visual CUT\Visual CUT.exe"
-e "C:\Program Files\Visual CUT\Visual_CUT.rpt" "Parm1:1998"  

 

The value of a date parameter would be specified as:

"C:\Program Files\Visual CUT\Visual CUT.exe" -e "C:\Program Files\Visual CUT\Visual_CUT.rpt" "Parm1:3/10/2003"  

 

Note that the syntax is constructed as the word "Parm", followed by the number of the parameter (according to the order of parameters shown in Crystal), followed by a colon and the value. 

 

Here’s how you would specify the 1st and 3rd parameter values:

"C:\Program Files\Visual CUT\Visual CUT.exe" -e "C:\Program Files\Visual CUT\Visual_CUT.rpt" "Parm1:1998" "Parm3:Ido Millet"  

 

Notes:

·         Visual CUT handles the necessary data type conversion to match the parameter data type.

·         All command line arguments must be enclosed in double quotes and separated by a single space.


Range and Multi-Value Parameters

Visual CUT supports all parameter types including multi-value, range, and mixed parameters.  To learn how such parameter values can be specified via command line arguments, save the report settings in Visual CUT, open Visual CUT.mdb in MS Access and observe the parameter values saved in the Report_Opt table. 

 

A multi-value discrete parameter value is specified as follows:

---------------------------------------------------
...  "Parm1:Competition:::Gloves:::Helmets"
---------------------------------------------------


A range parameter (in this case a date range) is specified as follows:
---------------------------------------------------
...  "Parm1:7/15/1996>>>7/15/2003>>>3"
---------------------------------------------------
The 3 at the end indicates the start and end points are included.
A 0 at the end would indicate the start and end points are NOT included.
A 2 at the end would indicate the start point is included and the end point is not.
A 1 at the end would indicate the start point is not included and the end point is.

Add 4 to these values if there is no Upper Bound. 

Add 8 to these values if there is no Lower Bound.

For example, this would indicate all dates up to, and including 7/15/2003:
---------------------------------------------------
...  "Parm1:12:00:00 AM>>>7/15/2003>>>9"
---------------------------------------------------
The 12:00:00 AM value is just a place-holder. Any date value would work (will be ignored).


Request User Input for Certain Parameters

You can use "ParmN:[?]" command line arguments to indicate that Visual CUT should prompt the user for certain parameter values. For example,
---------------------------------------------------
...  "Parm1:Today" "Parm3:[?]"
 ---------------------------------------------------
Would set the first parameter to today's date, prompt the user for the 3rd-parameter, and use saved parameter values for all other parameters. This is useful when Visual CUT is called from a command line and the user needs to interactively override saved parameter values.


Null Values

Null parameter values (for Stored Procedures) are specified in command lines by using the constant [VC_NULL].  For example, to specify that the first parameter value is null, use:
"Parm1:[VC_NULL]"


Date Constants

When scheduling reports that have Date or DateTime parameters, you can set the parameter to dates relative to the current date.  Visual CUT can do this for discrete or range date parameters. 

The supported constants are:

  1. TODAY  -or-  YESTERDAY
  2. TODAY_PLUS_ -or-  TODAY_MINUS_ -or- 
    TODAY_PLUS_N_PLUS_M  -or- TODAY_MINUS_N_MINUS_M  -or-
    TODAY_PLUS_N_PLUS_M_EOM –or- TODAY_MINUS_N_MINUS_M_EOM  -or-
    TODAY_PLUS_N_PLUS_M_SOM –or- TODAY_MINUS_N_MINUS_M_SOM

  3. START_MONTH_PLUS_ -or-   START_MONTH_MINUS_M
  4. END_MONTH_PLUS_ -or-  END_MONTH_MINUS_M

  5. START_YEAR_PLUS_ -or-  START_YEAR_MINUS_Y
  6. END_YEAR_PLUS_ -or-  END_YEAR_MINUS_Y
  7. Nth_N_PLUS_M –or- Nth_N_MINUS_M
  8. LAST_MM_DD –or- NEXT_MM_DD

  9. Now_Plus_S  -or- Now_Minus_S  -or- Now_GMT_Plus_S -or- Now_GMT_Minus_S
  10. YMD=+Y/Month/Day_of_Month or YMD=-Y/Month/EOM

Where N=days, M=Months, Y=Years, and S=seconds to be added or subtracted.

For example, if the current date is March 6, 2004 then:

Today = 3/6/04

Nth_16_MINUS_1 = 2/16/04 (the 16th of the previous month)

Today_Minus_3 = 3/3/04

Last_04_01 = April 1, 2003  

End_Month_Minus_1 = 2/29/04

Start_Year_Plus_0 = 1/1/04

Start_Year_Minus_1>>>Today>>>3 = Inclusive range of [1/1/03 to 3/6/04]
YMD=-1/6/15 = 6/15/2003 (-1 indicates 1 year prior).
YMD=+0/6/EOM = 6/30/2004 (must use + or after the = sign). EOM = End of Month.

 

In the case of Today_Minus_N_Minus_M, N is the Days and M is the Months, so:

            Today_Minus_1_Minus_2 = 1/5/2004  (one day and two months earlier)

Adding _EOM or _SOM to the end of a Today_Minus_N_Minus_M constant returns the
End-of-Month or Start-of-Month, so:
Today_Minus_1_Minus_2_SOM = 1/1/2004  (Start of Month for 1/5/2004)
Today_Minus_1_Minus_2_EOM = 1/31/2004  (End of Month for 1/5/2004)

For DateTime parameters, Now_Plus_S or Now_Minus_S, returns the current datetime adjusted by the number of specified seconds.  For Time parameters, this argument returns just the current time adjusted by the number of specified seconds.  For example, if the current datetime is
June 17, 2008, 5:22:38 PM then Now_Minus_3600 returns
June 17, 2008, 4:22:38 PM for a DateTime parameter and 4:22:38 PM for a Time parameter.

One way to use a date constant is to specify it as the parameter value in a command line invocation of Visual CUT.  For example:
   "C:\Program Files\Visual CUT\Visual CUT.exe" -e "C:\Test\Report.rpt"     
   "Parm1
:Today"

Another option is to open Visual CUT.mdb and entering it directly in the appropriate parameter column within the Report_Opt table.   Note that such a manual entry in the Report_Opt table would be overwritten if you interactively open the report in Visual CUT and click SAVE.

Benefits: these date constants allow you to use the same report interactively (specifying any date as the parameter value) as well as in scheduled mode.  This can also lead to faster report execution since using date functions in the record selection formula within the report can force record selection to be performed by Crystal instead of by the DBMS. 

 

Note: for DateTime parameter, the Time portion of the parameter value is set by these constants to 12:00:00 AM (start of the day).  To set a DateTime parameter to the end of the day (11:59:59 PM), you must include the parameter name in a DataLink_Viewer.ini entry
under the [Options] section like this (the parameter names are separated by ||):
--------------

[Options]
Date_Constants_EndofDay_Parameters={?To_Date}||{?EndDate}

-------------
 

Custom Calendars

If you need to set Date or DateTime parameters to the start or end date of custom periods (for example, Fiscal Weeks or Quarters) relative to a current or shifted date, you specify just the start dates of the periods in the DataLink_Viewer.ini as follows:

[Custom_Calendars]

FiscalQ =1/1/2013>>4/1/2013>>7/1/2013>>10/1/2013>>1/1/2014


For this FiscalQ custom calendar example, you can specify parameter values like this:  "Parm1:FiscalQ_Start_RelativeTo_Yesterday"
FiscalQ is the name of the custom calendar, Start requests the start date of the period within which the relative date falls. If you specify End, the parameter is set to 1 day before the next start period (at 11:59:59 if DateTime parameter).
RelativeTo is a fixed word. The date constant can be any date constants as described in the Date Constants section above.  Assuming today is 6/7/2013:
"Parm1:FiscalQ_Start_RelativeTo_Today" would return 4/1/2013
"Parm1:FiscalQ_End_RelativeTo_Today_Minus_5" would return 6/30/2013
"Parm1:FiscalQ_End_RelativeTo_Start_Year_Minus_1" would return 3/31/2012

If the relative date falls outside the boundaries of the calendar, the custom calendar years are shifted until the relative date is within the calendar.  This allows you to set the custom calendar and not worry about updating it again (if the dates remain the same across years).



Adjusting Date Constants for Day of Week

Visual CUT allows you to set a date parameter to the first day of week (DOW) before or after a specified date constant.  For example, the first Monday in the previous month. 

 

The syntax options are as follows:

DayOfWeek[>]Date_Constant   for first target DOW after the date constant.

DayOfWeek[<]Date_Constant   for first target DOW before the date constant.

 

Or, same as above except that date returned from date constant is used if it falls on target DOW:

DayOfWeek[>=]Date_Constant 
DayOfWeek[<=]Date_Constant 

 

Examples, assuming today is Tuesday, March 10, 2015

 

"Parm1:Wednesday[>]Today"            => March 11, 2015
"Parm1:Wednesday[<]Today"            => March 04, 2015

"Parm1:Tuesday[>]Yesterday"           => March 10, 2015
"Parm1:Tuesday[>=]Today"               => March 10, 2015


 

Number Constants

When scheduling reports that have a Number (not currency) or String parameter, you may want to set the parameter to a constant reflecting a year or a month relative to the current year or the current month.
Visual CUT can do this for discrete or range number parameters. 

 

The supported constants are:

 

  1. MONTH_PLUS_ -or-   MONTH_MINUS_N
  2. YEAR_PLUS_ -or-  YEAR_MINUS_N
  3. YEAR_AT_PLUS_MONTHS_N  -or-  YEAR_AT_MINUS_MONTHS_N
  4. YearMonth_AT_PLUS_MONTHS_N –or- YearMonth_AT_MINUS_MONTHS_N 


Where N is the number of months/years to be added/subtracted from the current month/year.


For example, if the current date is January 6, 2005 then:

Month_Plus_0 = 1

Month_Minus_1 = 12

Year_Plus_0 = 2005
Year_Minus_2 = 2003
Year_AT_Minus_Months_1 = 2004
YearMonth_AT_MINUS_MONTHS_3 = 200410   (year=2004 and month = 10)

One way to use a Number constant is to specify it as the parameter value in a command line invocation of Visual CUT.  For example:
   "C:\Program Files\Visual CUT\Visual CUT.exe" -e "C:\Test\Report.rpt"     
   "Parm1
:Year_Plus_0"
Note: For a string parameter, you must enclose the constant with square brackets like this:  "Parm1:[Year_Plus_0]"

Another way of doing this is by opening Visual CUT.mdb and entering it directly in the appropriate parameter column within the Report_Opt table.   Note that such a manual entry in the Report_Opt table would be overwritten if you interactively open the report in Visual CUT and click SAVE.

Benefits: these constants allow you to use the same report interactively as well as in scheduled mode.  This can also lead to faster report execution since using formulas within the report can force record selection to be performed by Crystal instead of by the DBMS. 


 

Reports with More Than 8 Parameters (restriction removed, 6.2002)

This restriction is removed starting March 19, 2010.  Any parameters beyond the first 7, including unlinked subreport parameters, are now saved inside the Parm8 column (in the Report_Opt table) for later handling by Visual CUT. You may still specify main report parameters via command line arguments such as
…."Parm9:Some Values" "Parm10:Some Values"


Using Parm8 to Specify all Extra Parameter Values

Let’s refer to all independent (unlinked) subreport parameters as well as all parameters beyond the first 7 main report parameters as "Extra" parameters. As mentioned above, starting with version 6.2002, all extra parameter values are saved inside the Parm8 column inside the Report_Opt table in Visual CUT.mdb.  The syntax for holding these values looks like this:

[Parm_8]:Suppress
-----
[Parm_9]:2010
-----
[Parm_10]:4/1/2010>>>4/30/2010>>>3
-----

[Parm_11]:Competition:::Gloves:::Helmets
-----
[Parm_1_{Subreport1Name.rpt}]:2010
-----
[Parm_2_{SomeSubreport1Name.rpt}]:101

 

As you can see, main report parameters are identified by their number and independent (unlinked) subreport parameters are also specified by the subreport name.  The parameters are separated by "-----" delimiters.

 

If you wish to use command line arguments to override the stored Parm8 values, you can use the Parm8 command line argument using the same syntax.  For example (all in 1 line of course):

 

"Parm8:[Parm_8]:Suppress-----[Parm_9]:2010-----[Parm_10]:START_MONTH_MINUS_1>>>END_MONTH_MINUS_1>>>3-----[Parm_11]:Competition:::Gloves-----[Parm_1_{Subreport1Name.rpt}]:2010-----[Parm_2_{SomeSubreport2Name.rpt}]:101"

 

Alternatively, if you need to specify only main report parameters (no subreport parameters), you can simply use their position in the main report parameter list like this:
…."Parm9:Some Value(s)" "Parm10:Some Value(s)"





Using PowerShell to Set Relative Date Parameters and Call Visual CUT

The following PowerShell code sample was contributed by Roger Dearnaley, IT Manager at Sataria. It demonstrates how PowerShell calls Visual CUT (using the & symbol to trigger the command line) after applying relative date logic to set parameter values.

Similar logic can be achieved using regular batch files, but this sample may help other users who are interested in moving from batch files to PowerShell files.

 

<#

emp perf reports.ps1  Roger Dearnaley, Sataria, November 2013

this script will call two Crystal Reports using Visual CUT

It will pass the previous weekday (i.e. Saturday=Friday, Sunday=Friday, Monday=Friday, Tuesday=Monday.....Friday=Thursday)

the daily report will run on Monday-Friday and weekly will only run on Monday

#>

 

[DateTime]$now = ([DateTime]::Now)

[DateTime]$prevWorkDay = $now

switch (($now.DayOfWeek))

    {

        "Sunday"  

             { $prevWorkDay = $now.AddDays(-2) }

        "Monday"

             { $prevWorkDay = $now.AddDays(-3) }

        default

             { $prevWorkDay = $now.AddDays(-1) }

    }

 

$exe = "C:\Program Files (x86)\Visual CUT 11\Visual CUT.exe"


#run daily report

[Array]$params = '-e', '"\\Mufasa\Publicdocs\WMS Reports\Operations\daily emp perf.rpt"', [string]::Format('"Parm1:{0:MM/dd/yyyy}"',$prevWorkDay)

& $exe $params;

 

#run weekly report on Monday only

if ($now.DayOfWeek -eq "Monday")

{

    [Array]$params = '-e', '"\\Mufasa\Publicdocs\WMS Reports\Operations\weekly emp perf.rpt"', [string]::Format('"Parm1:{0:MM/dd/yyyy}"',$prevWorkDay)

    & $exe $params;

}

 


Argument to Set Formula Expressions

You can set formula expressions via a command line argument provided that:

·         The formula name(s) must begin with a ^ character. 

·         Any double-quotes are specified as [dblq]

·         Only main report formulas are targeted

 

The command line argument starts with Set_Formulas1: followed by pairs of Formula Names and Formula Expressions. The name is separated from the expression by >>>. Each pair is separated from the following one by ||| like this:

…  "Set_Formulas1:Name1>>>Expression1|||Name2>>>Expression2"


For example, the following command line argument would set the first specified formula expression to the string "Ido" and the second formula to the numeric expression of 2 + 2:

…  "Set_Formulas1:{@^MyName}>>>[dblq]Ido[dblq]|||{@^TwoAndTwo}>>>2+2"


Note: this functionality is not available in Visual CUT 8.5


Argument to Set Extra Record Selection Logic

You can use the Xtra_Record_Selection command line argument to append an extra expression to the main report record selection formula via a command line argument. This provides flexibility in filtering the report beyond parameter logic. The change applies only to the process triggered by the command line.

If the report already has a record selection formula the logic becomes:
(old expression) AND (extra expression).
Otherwise, the extra expression simply becomes the temporary record selection formula.

Here is an example:
…"Xtra_Record_Selection:{Product.Product Name} <> [dblq]Triumph Vertigo Helmet[dblq]"

 
Notes:

·         any double-quotes in the expression must be specified as [dblq]

·         this functionality is currently available only for Visual CUT 11

 


 

Arguments to Specify Printer Destination

If you turn on the "Print (if scheduled)" option, Visual CUT sends the report to the printer associated with the report.  You can override the printer destination by specifying a different printer name using a command line argument:

 

"C:\Program Files\Visual CUT\Visual CUT.exe" -e "C:\Program Files\Visual CUT\Visual_CUT.rpt" "Parm1:1998" "Printer:HPLaser1" 

 

Note that the syntax is constructed as the word "Printer:" followed by the printer name.

 

If you use "Default" as the printer name, the report gets printed to its default destination.

If instead of "Printer:…" you use "Printer_Only:….", Visual CUT limits the processing to printing only.  Exporting, bursting, and e-mailing options saved for the report in Visual CUT are ignored.  This allows you to invoke Visual CUT processing for printing only via one command line and invoke full processing via another command line.

 

When a Command Line includes "Printer:" or "Printer_Only:" argument, Visual CUT always sends the report to the printer even if the "Print (if scheduled)" option is turned off for this report.

 

Printing to Multiple Printers

If you need to schedule or invoke printing of the same report to multiple printers on your network, you can specify an unlimited number of "Printer_Only:" command line arguments and Visual CUT would send the report to all these printers. This improves performance compared to specifying each printer destination in a different command line because the report gets retrieved and processed only once.

Using a Text File to Specify Multiple Printers

If you have a text file containing a list of printer destinations, such as shown below, you can instruct Visual CUT to print the report to all these printers using the key word "List_File:" followed by the path & name of the text file.
"Printer:List_File:c:\temp\Supervisor_Printers.txt"

 

As usual, you can dynamically control the list of printers to be used by referencing field or formula names from the Crystal report.  For example:
"Printer_Only:List_File:{@Printers_File}"


image

Arguments to Specify Printer Bursting Destination

If you need each group level 1 of your report to be printed separately (e.g., to a fax printer driver or for automatic stapling), you must have the Export and Burst options turned on in the Visual CUT saved settings for that report.  Then, use the following command line argument structure:

"C:\Program Files (x86)\Visual CUT\Visual CUT.exe" -e "C:\Program Files\Visual CUT\Visual_CUT.rpt" "Parm1:1998" "Printer_Burst:\\pc10\hp04" 

 

Note that the syntax is constructed as the word "Printer_Burst:" followed by the printer name.

If instead of "Printer_Burst:…" you use "Printer_Burst_Only:….", Visual CUT will skip the export bursting processing and would just burst the report to the printer. 

 

If you use "Default" as the printer name, the report gets printed to its default destination.

 

The printer name argument is dynamic (field/formula names are replaced with values from the report). This means you can create a formula that returns a different printer name for different group values, place that formula (suppressed) in GH1 or GF1, embed that formula as the printer name argument, and sent the printouts for different groups to different printers.  For example:
"C:\Program Files (x86)\Visual CUT 11\Visual CUT.exe" -e "C:\Program Files\Visual CUT\Visual_CUT.rpt" "Parm1:1998" "Printer_Burst_Only:{@Group_Printer_Name}"

Specifying Number of Copies

To control the number of printed copies, you can use a "Print_Copies" argument. The syntax is constructed as the word “Print_Copies”, followed by a colon and the number of desired copies. For example: "Print_Copies:3"


As always, you can also make the number of copies dynamic by referring to a report field or formula:
"Print_Copies:{@Quantity}"

 


 

Arguments to Specify User ID & Password

In some rare cases you may want to override the (encrypted) User_ID & Password information that Visual CUT stores for each report.  You can do this by specifying Command Line arguments:

 

"C:\Program Files\Visual CUT\Visual CUT.exe" -e "C:\Test\Report.rpt" "user_id:dba" "password:sql"

 

Setting Encrypted Password Entries

The Encrypted_Password_Set_Entry command line argument can automate encrypted storage (within DataLink_Viewer.ini) of passwords.  This allows an administrator to set or change encrypted passwords for DataLink Viewer or Visual CUT that can later be referenced from command line arguments.

Note: a much easier way to achieve this is described in the section about 'Referring to Saved Encrypted Passwords’.

To generate such entries in a targeted ini file, you call Visual CUT using a command line
(all in 1 line) argument as follows:

"C:\Program Files (x86)\Visual CUT 11\Visual CUT.exe" "Encrypted_Password_Set_Entry: H:\DataLink_Viewer.ini>>Options>>Encrypted_Password_FTP>>sesame"

After the Encrypted_Password_Set_Entry key word and the colon, the 4 arguments are separated by “>>” as a delimiter:

1.      The path & name of the ini file

2.      The ini section name (typically 'Options')

3.      The Password Name

4.      The Password to be Encrypted

 

Argument to avoid Login Dialog

If most of your reports use a data source requiring authentication, you probably have the 'Attempt_Logon_Without_Password' option (Options dialog, Database tab) set to False. To override that global option for specific reports, add this argument to the command line:
 … "Attempt_Logon_Without_Password:True"


Database Choice Functionality (Command Line / GUI)

In some cases, you may want to use the same report to connect to different data sources, such as a testing or production server.  While each report stores connection properties for only one default data source, Visual CUT allows you to use Command Line arguments to specify a different data source.   

The command line argument structure is as follows:

 

Selecting an Alternative ODBC Data Source

"ODBC_DSN:Data Source Name"
or

"ODBC_DSN_From_To:Old_DSN1>>New_DSN1||Old_DSN2>>New_DSN2"

The ODBC_DSN argument overrides all ODBC DSNs used in the report by the new DSN
The ODBC_DSN_From_To argument overrides only tables that use the old DSN.


Notes:

  1. You can combine this functionality with the user_id & password command line arguments described in a previous section.

 

  1. The target Data Source Name must exist on the PC running Visual CUT.  If it doesn't, Visual CUT reverts back to running the report against the ODBC DSN the report was designed for (a warning message is added to the failure.log file).

 

  1. ODBC_DSN_From_To support multiple pairs separated by "||" as shown in the example above.  This addresses scenarios where a report uses multiple ODBC DSNs (e.g. when subreports use different DSNs).

 

  1. The ODBC_DSN_From_To is not available in the Crystal 8.5 version of Visual CUT.

 

  1. You can specify ODBC_DSN_From_To as a global entry in the [Options] section of DataLink_Viewer.ini. In cases where a global transition from old DSN to new DSN are desired, this removes the need to specify ODBC_DSN_From_To as a command line argument. The entry can have multiple pairs separated by "||".

 

 


  1. If you don't specify User_ID & Password command line arguments, and the data source requires a user id & password, you should let Visual CUT "load" the authentication information by running the report against the alternative ODBC data source.  You can do that by clicking the button to the right of the Server name in the login dialog.  This expands the display to include a listing of all available ODBC data sources (grouped by ODBC driver type). The original ODBC data source is initially selected and the driver group it belongs to is expanded (and prefixed with a "!"). 

    image

  2. If you select another ODBC data source, Visual CUT explains the functionality:

    image


Overriding the Database Specified in the Report or ODBC DSN

 

For ODBC data sources, you can enter a database name into the login dialog if you wish to override the database specified in the ODBC data source or in the report itself.  This is useful for situations where the same database (e.g., MS SQL Server) contains multiple databases each with the same table structure.  If the number of such databases is large, creating a dedicated ODBC DSN for each and using the select ODBC DSN functionality may be too tedious.  Instead, you can directly type in the database name in the login dialog.

To enable database name input into the database field in the login dialog, you need to set the Override_ODBC_DSN_Database entry under the [Options] section in the DataLink_Viewer.ini file to TRUE, like this: 


[Options]

Override_ODBC_DSN_Database=TRUE

 

Note that if that option is set to TRUE, the database specified in the ODBC DSN can no longer override the database specified in the report (if the user doesn't type in a Database, the specified Database remains the one used in the report. 
Note: This functionality is not available in the Crystal 8.5 version of Visual CUT.

 

Overriding ODBC Table Location (.CSV Files as Data Source)

This functionality was added for a user who needed to call DataLink Viewer from his application via a command line.  The data source was .csv files via ODBC and a command line argument was needed to control what .csv file should be used (.csv files gets generated and named uniquely by another application).
For example, a report designed to use Risk.csv, the following command line argument:
…  "Table_From_To:Risk.csv>>Risk2.csv||old.csv>>new.csv"

would cause Visual CUT to retrieve the data from Risk2.csv instead.

 

Within each pair of From/To directives, the ‘From’ location is separated by a ‘>>’ from the ‘To’ location. The pairs are separated by a "||" from each other.


Notes:

1.      If any of the From table name is not found in the report, the process generates a failure message indicating what From table name were unmatched with report tables.

2.      New Table Name should not contain dots (before the .csv). Underscores are fine.

3.      This functionality is not available in Visual CUT 8.5

 


Overriding the Server in Native Oracle Connection

 

When a report uses a native connection to Oracle, you can edit the Server name in the login dialog and run the report against a different server (rather than the one the report was designed against).

 

Alternatively, if you are launching a report from a command line, you can override the Oracle server name by using the "Oracle_Server:" command line argument.  For example:

__________________________________________________________________
-v "C:\temp\test.rpt" "user_id:dba" "password:sql" "Oracle_Server:Server2"
__________________________________________________________________

 

Note: This functionality is not available in the Crystal 8.5 version of Visual CUT.



Selecting an Alternative SQL Server – OLE DB Data Source

 

"Connect_To_SQLOLEDB:DataSource>>InitialCatalog>>Integrated_Auth"

The parameters (after the ":") are separated by a ">>" and are as follows:

1. DataSource is the Server Name the report should connect to.

2. InitialCatalog is the Database Name within the given server.

3. Integrated_Auth is a True or False argument indicating if Integrated Authentication should be used (if TRUE, user_id & password are ignored).
 

Note: This functionality is not available in the Crystal 8.5 version of Visual CUT.


 

Changing Folder Location for Access/Excel/Pervasive/ACT! Files

If your report uses the native connection to MS Access, Excel, or Pervasive (ddf), you can control the location of the database files using the following section in DataLink_Viewer.ini
----------------------------------------------------------------------
[Database_Path_Selection]

Paths = C:\Old\xtreme.mdb>>C:\New\xtreme.mdb||C:\a\test.mdb>>?

// Or, in the case of Pervasive ddf files:

// for ACT! .pad files: Paths = E:\DB1\DB1.pad>>E:\DB2\DB2.pad
//
Paths = E:\Jobtrack\FILE.DDF>>?

----------------------------------------------------------------------
Alternatively, you can specify the desired change using a command line argument such as
"Database_Path:C:\Prop1\FILE.DDF>>c:\Prop2\File.DDF"

As demonstrated above, the Paths entry may contain multiple pairs of old>>new paths.
Each pair specifies the old path followed by a ">>" separator, followed by the new path.

The pairs are separated by "||"

If the new path is blank, or if it contains just a question mark, Visual CUT will prompt the user to select a new path.  If the directive is from the ini file (rather than from a command line argument), the user choice will be recorded in the ini file and the new path will be used without prompting the user in future runs of reports that use the source path.  If the new path has one question mark (?) followed by a valid path, that path will be the default location in the dialog asking the user to select a path. If instead of a single question mark, the new path starts with a double question mark (??), DataLink Viewer will always prompt the user to select a path each time a report using the old path runs.  The user choice will be added after the ?? and will become the new default value in the path selection dialog. 

If the report uses a database file that can’t be found on the machine, and no command line argument or ini entry was provided, Visual CUT prompts the user to select a valid location, creates the [Database_Path_Selection] section (if it doesn’t already exist) and creates/adds the pair information to the Paths entry.

 

Note: this functionality is not available in the Crystal 8.5 version of Visual CUT.


Arguments to Specify Export Format

If you need to export a report to format and file name that are different from those saved for the report within Visual CUT, you can use the Export_Format in combination with the Export_File command line argument. For example:

 

"C:\Program Files\Visual CUT\Visual CUT.exe" -e "C:\Program Files\Visual CUT\Visual_CUT.rpt" "Export_Format:Excel 97" "Export_File:c:\temp\test.xls" 

 

The syntax is constructed as the word "Export_Format:" followed by the export format name (see valid export format options in the Visual CUT drop-down list for export formats). 

 

Dynamic Export Format: you can use field/formula names within the Export_Format command line argument (just like you drag & drop fields & formulas into the various options in the 3rd tab within Visual CUT).  The dynamic content of these fields/formulas would be substituted into the command line argument. For example, you could use the following command line:
"C:\Program Files\Visual CUT\Visual CUT.exe" -e "C:\Program Files\Visual CUT\Visual_CUT.rpt" "Export_Format:{@Format}"

The {@Format} formula may return different export formats for different groups, so using a parameter (that influences the {@Format} formula) or during bursting, you can dynamically control what export format is used.  For example, you may burst invoices to some customers as PDF and to other customers as Excel files.
In such situations, you will need to construct the export file name to include a formula for controlling the file extension to match the export format.  For example:

"C:\Program Files\Visual CUT\Visual CUT.exe" -e "C:\Program Files\Visual CUT\Visual_CUT.rpt" "Export_Format:{@Format}" "Export_File:c:\temp\Invoice_for_{CustName}.{@ext}" 

Releasing File Locks on Exported Files

You can set the Release_Shared_File_Before_Export option via the Options dialog if you wish to always attempt to unlock the exported file from shared use by network users who may have a prior version of the file opened in a shared network destination folder. To override the default behavior controlled by that option for a specific report, use this command line argument:
"Release_Shared_File:True"

 

Delaying Processing After Export

In rare cases, a delay may be needed after exporting to a network drive and before doing post-processing. An ini file option called After_Export_Delay sets the default delay period in milliseconds. To override or set a delay for a report, use this command line argument:
"After_Export_Delay:100"       note: 100 milliseconds =  1/10 of a second.

Argument to Specify Email Priority

Email priority can be specified via a command line argument using the following syntax:

"Email_Priority:Priority_Constant"
The syntax is constructed as the word "Email_Priority:" followed by one of the following priority constants: Highest, High, Normal, Low, or Lowest


As usual, you can dynamically control the email priority by creating a formula within the report that would determine the email priority (for example, if the information shows an extreme exception, increase the email priority to 'Highest').  Then, refer to the formula in the command line argument and Visual CUT would substitute the value of that formula.  For example:
"Email_Priority:{@Message_Priority}"


 

 

Argument to Specify Email Headers

Custom Email headers can be specified via a command line argument using the following syntax:

"Email_Header:header1:::header2:::header3"
The syntax is constructed as the word "Email_Header:" followed by one or more custom email headers.  If you are specifying more than one header, they must be separated by ":::".

For example:

"Email_Header:Sensitivity: Private"

"Email_Header:Sensitivity: Private:::X-Sensitivity: 3"

 

As usual, you can dynamically control the content of the custom email headers by referencing field or formula names from the Crystal report.  For example:
"Email_Header:Sensitivity: {@email_Sensitivity}"
or, for return-receipt request, which asks the receiving email server to confirm receipt:
"
Email_Header:Return-Receipt-To:{@CRM_Email}"
or, to ask for confirmation the email has been opened by the recipient:

"Email_Header:Disposition-Notification-To:{@CRM_Email}"




 

Argument to Specify Email Subject Emoji

Prefixing the email subject with an emoji can improve response rates and recognition of your emails. Visual CUT allows you to dynamically set the subject emoji using a formula that returns one of several paths to a text file containing the emoji of choice. See video demo.

To create such a file, use a site such as https://emojipedia.org/ to select and copy an emoji. Paste the select emoji into a new notepad file and save as a txt file. Notepad should automatically set the file encoding to uft-8.  Here’s what Notepad looks like with a checkmark emoji pasted in:
image

To add an emoji to the start of an email subject, use an argument such as:

"Email_Subject_Emoji:c:\temp\Emoji_Check.txt"

As usual, you can dynamically control the selected emoji file by creating a formula within the report that would determine the file path to the matching emoji. Then, refer to the formula in the command line argument. For example:
"Email_Subject_Emoji:{@Emoji_File}"

 

Here is what an email with a checkmark emoji looks like:

image

 

Note: Visual CUT’s HTML email editor reflects the dynamic emoji in Preview mode.

 


Arguments to Specify Export/Email Options

If you need to override the values specified in the emailing options in the 3rd tab of Visual CUT you can use the following command line arguments:

1.                  Export_File

2.                  Export_Format   e.g. "Adobe Acrobat (pdf)"

3.                  Export_Mode  ("Burst" or "Whole" or blank)     

4.                  Email_To      

5.                  Email_From

6.                  Email_Reply_To

7.                  Email_CC

8.                  Email_BCC

9.                  Email_Attach

10.              Email_Subject

11.              Email_Message

12.              Email_Mode  ("Burst" or "Whole" or blank)

13.              Email_SMTP_Server

14.              Email_User_ID

15.              Email_Password

 

For example, to override the export file and email_to option, use a command line such as:

"C:\Program Files\Visual CUT\Visual CUT.exe" -e "C:\Program Files\Visual CUT\Visual_CUT.rpt" "Parm1:1998" "Export_File:c:\temp\test.pdf" "Email_To:ixm7@psu.edu" 


To override a saved value with a blank, use [VC_Blank] as in:  …  "Email_CC:[VC_Blank]"

Arguments to Process Reports with No Settings

Imagine you have an application that needs to trigger Visual CUT processing for reports that have no saved settings within Visual CUT.  Visual CUT can handle such cases provided all the necessary options are specified via command line arguments.

 

For example, the following command line (all in one line) would trigger exporting and emailing of Sample.rpt.  The highlighted arguments (Export_Mode and Email_Mode) control what exporting and/or emailing process is required.  They accept values of "Burst" or "Whole" and if one of them is omitted, then that aspect of processing will simply not take place. 

 

"C:\Program Files\Visual CUT\Visual CUT.exe" -e "C:\Test\Sample.rpt" "Parm1:1997" "Export_Format:Adobe Acrobat (pdf)" "Export_File:c:\temp\{Product_Type.Product Type Name}.pdf" "Export_Mode:Burst" "Email_Mode:Burst" "Email_From:ixm7@psu.edu" "Email_To:ixm7@psu.edu" "Email_Subject:Sales Information for {Product_Type.Product Type Name}" "Email_Attach:c:\temp\{Product_Type.Product Type Name}.pdf" "Email_SMTP_Server:127.0.0.1"


Calling Visual CUT From Another Application

Using command lines allows other applications to trigger Visual CUT processing. 

 

Here's a code example of calling Visual CUT from a Visual Basic application and specifying a parameter value.  Note that double quotes are "escaped" by using  "" instead of  ".
__________________________________________________________________
Dim ls_temp As String
ls_temp = "c:\Program Files\Visual CUT 9\Visual CUT.exe " & _
"-e ""c:\temp\Sales.rpt"" ""Parm1:2005"""

RetVal = Shell(ls_temp)
__________________________________________________________________


Here's another code example for calling Visual CUT from a vba event and dynamically setting the report path, name, and parameter value:
__________________________________________________________________
Private Sub Combo0_AfterUpdate()
Dim rs As Object
Set rs = Me.Recordset.Clone
rs.FindFirst "[txtReportName] = '" & Me![Combo0] & "'"
If Not rs.EOF Then Me.Bookmark = rs.Bookmark

Dim myreport As String
Dim stAppName As String
Dim myvalret As String
' me.fullrep is a field that concatenates the report path & name
myreport = Me.fullrep
myvalret = Str(MyCaseno)
stAppName = "C:\Program Files\Visual CUT 9\Visual CUT.exe" & _
           " -e """ & myreport & """ ""Parm1:" & myvalret & """"
DoCmd.Close
Call Shell(stAppName, 1)
End Sub
__________________________________________________________________


Note: your application can monitor success/failure of the command line call using the functionality described in the "Job Status Functionality" section of this user manual.


 

Specifying Arguments from the GUI

You can save and apply command line arguments through the GUI. 
The Arguments field shown below gets saved into the "Arguments" (memo) column in the Report_Opt table in Visual CUT.mdb.

 

image


A minor benefit is that you can simplify command lines in batch files by using the minimal command line and storing all the arguments in the database.

 

A major benefit is that you can take advantage of these arguments even during interactive use. For example:

·         Use Skip_Recent to avoid duplicate emails during interactive processing

·         Use any of the PDF, XLS, Word, … options such as password-protecting files during interactive processing

·         Request printing (e.g., "Printer_Burst:Default") while also Exporting and Emailing

·         Etc.

 

Notes:

1.      A double-click on the Arguments field opens the text in a multi-line editing mode. This makes it easier to view and change the arguments.  When clicking OK, the content gets saved to the field as a single line.

2.      Command line processing honors these saved arguments but can override them.

3.      Users of prior versions who wish to take advantage of this new feature should add an Arguments column (Memo data type) to the Report_Opt table in Visual CUT.mdb


 

Referring to Saved Encrypted Passwords

This section describes how to centralize and protect passwords by avoiding specifying them directly inside command line argument. Instead, you can name, encrypt and store the passwords inside DataLink_Viewer.ini. Besides protecting your passwords, this also allows you to change the passwords in one location, instead of in multiple command line arguments.

Visual CUT already encrypts passwords for connecting reports to data sources, sending emails, exporting to ODBC, and capturing incoming emails. But plain password might be used in the following command line argument: After_Success_SQL, Email_Password,  FTP_Upload, SFTP_Upload, Password, PDF_Protect, PDF_Merge, Word_Protect, XLS_Protect, XLS_Protect_Sheets, XLS_Modify_Protect, ZIP_Files.  In addition, Email_To, Email_CC, and Email_BCC can contain passwords when using the option to get email addresses via an ODBC call.

 

To protect and centralize password in the later scenarios, go to the Process tab in the Options dialog and click on the 'Encrypt & Save Password' button.  This provides the following dialog:

image


In the case above, I named the password for my SFTP_Upload as SFTP.

The ini file entry is always named as "Encrypted_Password_" followed by the password name you specify.   So in my case, the full name is Encrypted_Password_SFTP

 

From that point on, command line arguments can refer to Encrypted_Password_SFTP and Visual CUT would make the appropriate substitution.  For example:
"SFTP_Upload:22>>{@server}>>PW>>ido>>Encrypted_Password_SFTP>>>>>>c:\temp\*.html>>>>10"

If you need to change a previously saved password, use the drop-down to select the previously saved password name and enter a new password.



Other Options and Features

Using Saved Data

When you open an rpt with saved data in Visual CUT, you are asked if you wish to use the saved data or refresh. In some cases, you may wish to avoid retrieving the data from the database. For example, the rpt may be exported to a Crystal Report format (an rpt with saved data) and you wish to process that data as-is. 

 

Global Option to Use Saved Data In Command Line Processing

To set that default globally, turn on the checkbox shown in the Options dialog below:
image

 

Command Line Argument for Saved Data Action

To override the global option when processing a specific report, use a command line argument:
… "Use_Saved_Data:True"    or  …"Use_Saved_Data:False"

Use_Saved_Data_Recent Command Line Argument

… "Use_Saved_Data_Recent:60" tells Visual CUT to use saved data only if it is not older than 60 minutes. Otherwise, fresh data is retrieved.
A typical use scenario is to export a report over itself (refreshing the saved data inside the report) as well as exporting and/or emailing a requested format (Visual CUT can export to multiple semi-colon separated files). Future requests for the same output avoid repeated data retrievals if the saved data is fresh enough.
Note: if the source rpt/rpz file is included in the semi-colon separated list of export files, and the process uses saved data (due to this command line argument), then the export of the source rpt/rpt file over itself is skipped if it's not the first file in the list.


Partially Delegating Exporting/Bursting to DataLink Viewer 2011

You can delegate exporting/bursting operations to DataLink Viewer 2011 in order to support Crystal 2008/2011/2013/2016/2020 features:

·         Calculated CrossTab members

·         Dissociate Formatting Page Size and Printer Paper Size

·         Auto-Arrange option for chart layouts

·         The group expert options of 'New Page After N Visible Groups'

·         Mixed portrait & landscape sections

·         Embedded Flash objects.

·         Optional Parameters.


The argument to request this is "Proxy:DLV".  If you wish to use saved data in the source report, specify dlv in lower case, like this: "Proxy:dlv".

All the parameters and login info used for running the report in Visual CUT are automatically applied to the DataLink Viewer 2011 process as well. During bursting, the DataLink Viewer 2011 process communicates back to the Visual CUT progress window. For example:

image

 

Note: to export to rptr file format, use 'Crystal Report' as export format and set the export file extension to '.rptr'.


 

Proxy Processing Using a Data Snapshot

If you wish to save the report -- as currently previewed in Visual CUT -- to a snapshot for proxy processing, use "Proxy:dlv_snapshot". This allows you to retrieve the data only once and ensure the data processed by DataLink Viewer is as fresh as the data seen by Visual CUT. Note that such snapshot processing doesn't support features from later Crystal versions because the snapshot report is a version XI R2 report.
 

Another way to retrieve the data only once is to include in your batch file:
Step 1: a call to DataLink Viewer to export the report to rpt (or rpz) so the data is fresh
Step 2: a call to Visual CUT to process the report with "Use_Saved_Data:True" and a proxy call with lower-case argument ("Proxy:dlv"), so that both Visual CUT and the proxy processing by DataLink Viewer use the same saved data that was refreshed in step 1. This is a bit more involved but supports features from later versions of Crystal.

 

Fully Delegated Processing (Preview/Export/Burst)

To avoid preview failure in cases such as crosstabs with embedded summaries, you can delegate all processing (including report preview) to DataLink Viewer 2011.

You indicate which reports should be delegated using the following section in the ini file. The targeted reports are delimited by '||' like this:
[Delegated_Processing]

Reports=||Your_Special_CrossTab.rpt||Visual_CUT_11.rpt||

To target all reports, you can specify ||ALL||
but, it is suggested you target only specific reports.


When a targeted report is launched via a command line or a double-click from the report grid the Visual CUT Preview tab is hidden. Instead of being previewed and exported by Visual CUT, those aspects are handled by DataLink Viewer 2011.

 

Right-Click Menu to Toggle Delegation

When you right-click a report row in the grid, a Delegate menu option (see image) allows you to turn on or off delegation for that report. That option is currently visible only if the ini file has a [Delegated_Processing] section with a Reports entry. Toggling the option takes care of updating the ini file.

 


 

Triggering a Batch File with Dynamic Content Before/After Export

Imagine that you need to export some reports and then trigger some command line processing such as packaging the files into a .RAR archive before uploading the archive to an FTP server. 

The After_Export_Batch or After_Success_Batch command line arguments allow you to insert batch file operations after exporting or processing a report. After_Burst_Batch does the same after each group export step).  Visual CUT then waits for the batch file to complete processing before continuing with any other Visual CUT processing such as emailing or uploading to FTP.

The Before_Export_Batch command line argument does the same before Visual CUT exports the report. A typical use is to archive previously exported files.

The key feature is that you can embed field/formula names within the batch file just as you can within the Visual CUT 3rd tab options.  Visual CUT substitutes the appropriate values for these field/formula names before launching the batch file processing.  A typical use for this is to make sure dynamic export file names are used within the batch file.   

For example, using the following command line (all in one line):
------------------------------------------------------------------------------------------------------------

"C:\Program Files\Visual CUT\Visual CUT.exe" -e "C:\test.rpt" "After_Export_Batch:C:\test.cmd>>Show>>Wait" "FTP_Upload:Passive_1>>ftp://server1.RSB.com>>user1>>Pass1>>
c:\test{[yy]}{[MM]}{[dd]}.rar>>MyFolder"
------------------------------------------------------------------------------------------------------------

would cause Visual CUT, after exporting test.rpt, to:

1.      Look into the c:\test.cmd batch file to locate and temporarily replace Crystal fields/formula references with their dynamic values.
For example, the following batch file:

"C:\Program Files\WinRAR\rar.exe" a "c:\test{[yy]}{[MM]}{[dd]}.rar" "c:\temp\*{[yy]}{[MM]}{[dd]}.txt"

Would be executed as if it was

"C:\Program Files\WinRAR\rar.exe" a "c:\test101014.rar" "c:\temp\*101014.txt"

 

2.      Execute the batch file with its dynamically replaced content. 

Note that in the example above 2 optional arguments are specified: (>>Show>>Wait).
You can hide the batch file window by setting the 1st optional argument to Hide instead of Show.  You can tell Visual CUT to not wait for the batch file to finish by setting the
2nd optional argument to NoWait instead of Wait.

3.      Visual CUT would then continue by executing the FTP upload the resulting RAR file.

 

Note: for scheduled processing under Windows 2008 you may need to set the batch file properties to: ‘Run this program in compatibility mode for’ Windows XP (Service Pack 3).
Use the option (a button in the Properties dialog) to set the compatibility for all users.


Triggering Reports Based on Database, File, and Email Events

The After_Export_Batch or After_Success_Batch arguments allow one report to monitor a database, file, or email (Crystal can use the file system or Exchange folders as data source), and locate new entries based on record selection logic or based on Skip_Recent (or process log) logic. Then, if a new and valid Database/File/Email event is detected, export to a dummy file and trigger a second report, passing to it (via a batch file) parameters from the first report.

Note: starting August 2020 the ActionQ software provides a better solution for this use case.

 

 

Update a Database After a Successful Process

See details in Update a Database After Success (After_Success_SQL).

 

 

Update a Database Before Report Runs

See details in Update a Database Before Report Runs (Before_Report_Run_SQL).

 

 


 

Extract Files Stored in Database

Databases can store images, documents, and media in binary column data types. You may need to extract such files to the file system for further processing (merging, emailing, etc.). Visual CUT can automate this using the SQL_Extract_Files command line argument:

"SQL_Extract_Files:DSN>>User ID>>Password>>Column>>Folder>>
File Name>>Extention>>SQL Statement>>Unzip?"


The parameters (after the ":") are separated by a ">>" and are as follows:

1.      DSN: The ODBC DSN pointing to the database. Doesn’t have to match DSN used in report.

2.      User ID: Leave blank if no user id is needed to connect.

3.      Password: Leave blank if no password is needed. May refer to named encrypted password.

4.      Column: column name (in the SQL result set) storing the file content.

5.      Folder: Path to folder where file is extracted (VC creates missing folders on the fly).
Note: can refer to a column name.

6.      File Name: Name for extracted file. If this includes the path, leave the previous option blank.
Note: can refer to a column name.

7.      File Extension: leave blank if File Name above already contains extension.

Note: can refer to a column name.

8.      SQL Statement: the SQL statement to execute. Typically references Crystal fields/formulas. If statement returns multiple rows, one file is extracted for each row.

9.      Unzip?: If 'True' the binary content is assumed to be zipped, so it gets unzipped.
Note: can refer to a column name.

 

For example, the following command line argument
----------------------------------------------------------------

… SQL_Extract_Files:DSN1>>>>>>St_Picture>>c:\temp\>>St_Name>>.png>>
Select * From Students Where Major=
'{@Major}'>>False"

----------------------------------------------------------------

Would trigger a SQL statement through the DSN1 ODBC DSN, without user id and password, and materialize all Student images stored in the St_Picture column into the c:\temp\ folder as .png files named according to the St_Name column.

The Folder, File Name, File Extension, and Unzip? Parameters may refer to database column names in the result set. This allows a result set with multiple rows to extract each file to a different name (or even to a different folder) and to unzip the content only when needed. Alternatively, they may be static text or references to Crystal fields/formulas.


As always, you can use report field/formula names within the command line argument.
The dynamic content of these fields/formulas would be substituted into the argument.
For example, the command line above is referring to the {@Major} formula.

 

Upload Files to a BLOB column in a Database

Databases can store images, documents, and media in binary column data types. For example, you may need to upload an exported PDF or XML File to a varbinary(MAX) column in a SQL Server table.
Visual CUT can automate this using the SQL_Insert_File command line argument:
 
"SQL_Insert_File:DSN>>User ID>>Password>>SQL Statement>>FilePath>>"

The parameters (after the ":") are separated by a ">>" and are as follows:

1.      DSN: The ODBC DSN pointing to the database. Doesn’t have to match DSN used in report.

2.      User ID: Leave blank if no user id is needed to connect.

3.      Password: Leave blank if no password is needed. May refer to named encrypted password.

4.      SQL Statement: the INSERT SQL statement to execute. Typically references Crystal fields/formulas.
Use a ? character as the token for the file content to upload.

5.      FilePath: the path and name of the file to upload into the BLOB column

6.      Options: leave blank

 

For example, the following command line argument
----------------------------------------------------------------

SQL_Insert_File:DSN1>>>>>>
INSERT into Sigs (Delivery_ID, Signature, Status) Values ({@ID},
?, 'New')
>>C:\Temp\Signature_{@ID}.pdf>>"

----------------------------------------------------------------

Would insert a new row into the Sigs table and populate the Signature column with the binary content of the dynamically referenced pdf file.

As always, you can use report field/formula names within the command line argument.
The dynamic content of these fields/formulas would be substituted into the argument.
For example, the command line above is referring to the {@ID} formula.


 

Call a Web Service

See detail in Call a Web Service after Success (After_Success_HTTP).




ZIP and Password Protect Files

You can instruct Visual CUT to ZIP and, if you provide a password, password protect any number of files. This can be particularly useful when emailing files that need to be protected or combined into a single attachment. The zip processing occurs before emailing processing.
The command line argument structure is as follows:

"ZIP_Files:File_List>Password>Zip_File"

Or, if you wish to use stronger encryption:
"ZIP_Files:File_List>Password>Zip_File>AES256"


The parameters (after the ":") are separated by a ">" and are as follows:

 

1.      File_List: comma separated list of the files you wish to zip.
If all files share the same folder, you can specify the full path just for the first file.
If a file is not found, a warning is written to Failure.log and that file is skipped.
Note: you can specify file names using wild cards

 

2.      Password: leave this option blank if you don't need to password protect the zip file.  When avoiding password protection, the command line look like this:
"ZIP_Files:File_List>>Zip_File"

 

3.      Zip_File: The path and name of the target zip file.  If the specified path doesn't exist, Visual CUT would create it on the fly.

 

4.      [optional, but recommended] encryption method. Specify AES or AES256 to use the stronger and more standard AES 128-bit or AES 256-bit Deflate encryption instead of Zip 2.0 encryption (AKA "password-protected" zip).
 

Important Note: you can use field or formula names within the command line arguments. 
The dynamic content of these fields/formulas would be substituted into the command line. Among other things, this allows you to easily zip and protect file exports with different passwords for each group you are bursting.  For example (all in one line):

"ZIP_Files:c:\temp\{@Product} Sales.pdf,{@Product} Returns.pdf>
             {@Password}>c:\temp\{@Product} Reports.zip>AES"

 


 

Global Tokens from INI File

You can add to the list of dynamic fields & formulas global tokens. This is useful, for example, if you want to store & reuse email distribution lists across multiple reports. The names and values of these tokens are stored in the [Tokens] section of the ini file.

 

[Tokens]

{[eml_Admin]}=ido@MilletSoftware.com;ixm7@psu.edu

{[eml_Sales]}=jd@acme.com;rn@acme.com

{[eml_Signature]}=<br>Regards, <br>- Ido <br><A href="http://www.acme.com/">www.acme.com</A>


Visual CUT makes it easy to add, delete, and modify these global tokens.
Simply click the ellipsis button as shown in the image below:

image

 


 

Load ini Values into Parameters

By naming parameters in a certain way, you can ask Visual CUT to automatically load their values from ini file entries. 


One possible use may be for reports where some parameters change only once per quarter. Another case could be a situation where you develop and sell reports (probably .rpt files converted to .rpz files) to clients in a vertical market. These reports are designed to work against a known database structure, but each client may need to customize the reports with text elements, conditional formatting, or record selection criteria without changing the report design. Or perhaps you wish to restrict use of your reports to only paying customers by providing a license code that must match (using secret logic) the company name in the customer’s database.

 

Instructions:

 

First, add to the [Options] section in DataLink_Viewer.ini (in the application folder) an entry with a key name (Company) and value (Millet Software) of your choice.  For example:
[Options]
  …
 Company=Millet Software

Then, add a String Single-Value parameter named "DLV_INI_Option_KeyName" to the report. Visual CUT automatically sets the value of such parameters to the value found for the Key Name under the [Options] section of DataLink_Viewer.ini. So, in the case above,
the parameter value of DLV_INI_Option_Company would be set to "Millet Software".

Notes:

·         The  user never gets prompted for the value of such parameters.

 

Securing Reports against Unauthorized Use

If you wish to secure your reports against unauthorized use, you can provide authorized users a  License Key string for the ini entry. Within the report (later distributed to clients as an .rpz file) you design a record selection criterion that returns true only if the license key matches a condition, such as  the company name in the database.  As a simple example, you could check the number of characters in the license key is equal to the length of the actual company name (in the database) plus the number of R’s in that company’s name.

 


 

FTP/SFTP

Exporting to an FTP Server (old approach)

One option for exporting to an ftp server is to map the target FTP folder into a "drive" letter on the machine where Visual CUT is running.  From that point on, Visual CUT can simply export to that drive as if it’s exporting to a local drive. 

 

In cases where due to security or operating system restriction the mapping can’t be done using Windows, you can use specialized utilities that take care of this mapping.

 

One such utility is free:  FTPDrivehttp://www.killprog.com/fdrve.html

 

Another is WebDrive ($69.95): http://www.southrivertech.com/products/webdrive/index.html

 

Note: if you are exporting a PDF file to an FTP drive, and you don’t need the extra PDF file properties and bookmark functionality provided by Visual CUT, consider turning that option off (in the Options dialog within Visual CUT).  This functionality requires Visual CUT to reach out and handle the exported PDF file.  In the case where that file sits on an FTP drive, this can slow down processing.  Alternatively, you can use 2 command lines in the batch file: the first to export to the local hard drive, and the 2nd line that simply copies the resulting file to the FTP destination.


 

Uploading to an FTP Server (new approach)

You can instruct Visual CUT to FTP files to a web server. This can be particularly useful when you wish to export reports but email only a link to the exported file (avoiding the need to attach the export file).

The FTP Upload process occurs before emailing but after exporting and post-export processing.  This allows you, for example, to merge pdf files, add bookmarks, table of content, and page numbers, and then upload the final pdf file so users can access it via the web.

The command line argument structure is as follows:
…"FTP_Upload:Mode>>Server>>User>>Password>>file(s)>>directory"

The parameters (after the ":") are separated by a ">>" and are as follows:

 

1.      FTP Connection Mode.  Possible Values are:

a.       Passive_1

b.      Active_1

c.       AUTH_SSL/TLS_1
Visual CUT will detect server options and automatically selects SSL 3.0 or TLS 1.0 known as "AUTH SSL" or "AUTH TLS" 

d.      FTPS_1  (known as "Implicit SSL")

2.      FTP Server: the Name or IP address of the FTP host

3.      User _ID for authenticating to the ftp server

4.      Password for authenticating to the ftp server (can reference Encrypted Password Name)

 

5.      File_List: comma separated list of the files (path & name) you wish to upload. You can specify file names using wild cards, and Visual CUT will upload all matching files. 

 

6.      Target directory:  The destination folder for the uploaded file(s). 
For example :  Sales/{@Year}/{@Product}
If some target folder levels don't exist they are created by Visual CUT.

 

7.      Maximum_Age_In_Minutes (optional). If specified, older files are skipped. Useful when specifying files via wild card expressions and targeting newly created files.


As always, you can use report field/formula names within the command line argument.
The dynamic content of these fields/formulas would be substituted into the argument.
For example:
…"FTP_Upload:Passive_1>>74.220.207.67>>user>>pass>>{@Export_File}>>/public_html/Download"

or

…"FTP_Upload:Passive_1>>74.220.207.67>>user>>pass>>{@Export_File}>>/public_html/Download>>10"


 

Uploading to an SFTP Server

You can instruct Visual CUT to upload files via the SFTP protocol using SFTP_Upload command line argument. SFTP and FTP are two completely different protocols
Don’t confuse FTP_Upload (described in the prior page) with SFTP_Upload.

The SFTP_Upload process occurs before emailing but after exporting and post-export processing.  This allows you, for example, to merge pdf files, add bookmarks, table of content, and page numbers, and then upload the final pdf file so users can access it via the web.

The command line argument structure is as follows:
…"SFTP_Upload:Arguments"

The arguments (after the ":") are separated by a ">>" and are as follows:

 

1.      FTP Port.  Typically 22

2.      FTP Server: the Name or IP address of the SFTP host

3.      Authentication Mode: PW (Password), PK (Private Key), PWPK (Both)

4.      User _ID for authenticating to the server

5.      Password for authenticating to server (leave blank if Authentication Mode is PK)

6.      Private Key File e.g., MyPrivateKey.pem (leave blank if Authentication Mode is PW)

7.      Private Key File Password needed only for encrypted Private Key Files. Blank otherwise

8.      File_List: comma separated list of the files (path & name) you wish to upload. You can specify file names using wild cards, and Visual CUT will upload all matching files. 

 

9.      Target directory (can be blank) The destination folder for the uploaded file(s).
Specified as absolute path or as relative to the user’s account home directory.
If this argument is left blank, the file would be placed in the user’s account home directory.
If some target folder levels don’t exist they are created by Visual CUT.

 

10.  Maximum_Age_In_Minutes (can be blank). If specified, older files are skipped. Useful when specifying files via wild card expressions and targeting newly created files.


As always, you can use report field/formula names within the command line argument.
The dynamic content of these fields/formulas would be substituted into the argument.
For example:
…"SFTP_Upload:22>>ms.com>>PW>>user1>>pass1>>>>>>{@Export_File}>>public_html/Download>>"
or
"SFTP_Upload:22>>ms.com>>PK>>user1>>>>c:\keys\ido_dsa>>>>{@Export_File}>>public_html/Download>>10"

 


 

Downloading from an FTP Server

The FTP Download process occurs before emailing but immediately after exporting.
The command line argument structure is as follows:
…"FTP_Download:Mode>>Server>>User>>Password>>file(s)>>directory"

The parameters (after the ":") are separated by a ">>" and are as follows:

 

1.      FTP Connection Mode.  Possible Values are:

a.       Passive_1

b.      Active_1

c.       AUTH_SSL/TLS_1
Visual CUT will detect server options and automatically selects SSL 3.0 or TLS 1.0 known as "AUTH SSL" or "AUTH TLS" 

d.      FTPS_1  (known as "Implicit SSL")

2.      FTP Server: the Name or IP address of the FTP host

3.      User _ID for authenticating to the ftp server

4.      Password for authenticating to the ftp server (can reference Encrypted Password Name)

 

5.      File_List: semi-colon (;) separated list of the files (path & name) you wish to download. You can specify file names using wild cards (*), and Visual CUT will download all matching files. 

 

6.      Target directory The local destination folder for the downloaded file(s). 
For example :  c:\temp\
If some target folder levels don't exist they are created by Visual CUT.

 

As always, you can use report field/formula names within the command line argument.
The dynamic content of these fields/formulas would be substituted into the argument.
For example:

This downloads 2 specific files (if source folder remains the same, can specify it only once):

"FTP_Download:Passive_1>>www.MilletSoftware.com>>milletso>>Encrypted_Password_SFTP>>/public_html/Download/Sales/{@Year_Parameter}/Sales for Hybrid in 2004.pdf;Sales for Locks in 2004.pdf>>c:\temp\FTP_Download"


This uses wild card (*) expression to download multiple files:
"FTP_Download:Passive_1>>www.MilletSoftware.com>>milletso>>Encrypted_Password_SFTP>>/public_html/Download/Sales/{@Year_Parameter}/*.pdf>>c:\temp\FTP_Download"

Downloading from an SFTP Server

The SFTP Download process occurs before emailing but immediately after exporting.
The command line argument structure is as follows:
…"SFTP_Download:Arguments"

The arguments (after the ":") are separated by a ">>" and are as follows:

 

1.      FTP Port.  Typically 22

2.      FTP Server: the Name or IP address of the SFTP host

3.      Authentication Mode: PW (Password), PK (Private Key), PWPK (Both)

4.      User _ID for authenticating to the server

5.      Password for authenticating to server (leave blank if Authentication Mode is PK)

6.      Private Key File e.g., MyPrivateKey.pem (leave blank if Authentication Mode is PW)

7.      Private Key File Password needed only for encrypted Private Key Files. Blank otherwise

8.      Match_Patterns: list of file patterns separated by semicolons (e.g. *.txt;*.csv)
If left blank, all files would be targeted. 

 

9.      Remote directory (e.g. inv/test)relative to HOME directory of user account.

 

10.  Local directory (e.g. c:\temp) The destination folder for the uploaded file(s).

 

11.  Mode (files to download). 0: all files, 1: missing in local folder, 2: newer/missing, 3: newer files (ignore missing) 5: missing or different size, 6: missing, different size, or newer files


For example:
…"SFTP_Download:22>>ms.com>>PW>>user1>>pass1>>>>>>*.csv;*.xls>>inv/test>>c:\temp>>0"
This downloads all csv files (aged up to 24 hours) found in the Invoices folder under the user's home folder.


 

SharePoint

Uploading Files to SharePoint

The SharePoint_Upload process occurs before emailing but after exporting and post-export processing.

The command line argument structure is as follows:
 … "SharePoint_Upload:Files>>Folder>>URL>>User>>Pwd>>MaxAge>>Options"

The arguments (after the ":") are separated by a ">>" and are as follows:

 

1.      File_List: comma separated list of the files (path & name) you wish to upload.
You can use wild cards and Visual CUT will upload all matching files. 

2.      Target_Folder: e.g., Shared Documents/Sales_Dashboard

3.      Target_Site_URL: e.g., https://mycompany.sharepoint.com/sites/mysit

4.      User _ID for authenticating to the server

5.      Password for authenticating to server (leave blank if Authentication Mode is PK)

6.      Maximum_Age_In_Minutes (can be left as blank or 0). If more than 0, older files are skipped.
Useful when specifying files via wild card expressions and targeting newly created files.

7.      Options: Leave blank


As always, you can use report field/formula and Visual CUT tokens within the command line argument.
The dynamic content of these references would be substituted into the arguments.
For example:
"SharePoint_Upload:{[Export_File]}>>Shared Documents/Dash>>
                                              https://acme.sharepoint.com/sites/Sales>>
me@acme.com>>abc123>>0>>"



 


 

File Location Functionality

Visual CUT uses several files to store user preferences, report processing options & information:

1.      Visual CUT.mdb stores report processing options

2.      DataLink_Viewer.ini stores general options and user preferences

3.      ReportList.txt stores information about previously opened reports for use in the 1st tab grid

4.      ReportList.grd stores grid style information (grouping, column visibility, font size, etc.)

5.      Failure.log records processing failure information

6.      Visual_Cut.log records email communications with the SMTP server

 

By default, these files are in the common application data folder.  However, for security or other reasons you may direct Visual CUT to use a different folder location for these main files. To do so, open DataLink_Viewer.ini in the application folder and add a line such as:

[File_Locations]

Main_Files_Folder=c:\Visual CUT\


The specified folder must exist and the user should have full permissions on it.
When Visual CUT starts, if it doesn’t find Visual CUT.mdb, DataLink_Viewer.ini,  ReportList.txt, and ReportList.grd in the specified folder, it will attempt to copy these files from the application folder to the specified folder.


Direct Processing of a Report to Use a Different Settings Folder

To direct command line processing to use a different Main_Files_Folder, you can use a command line argument like this:
… "Main_Files_Folder:some path to a folder"
This is useful in scenarios where a centralized scheduler triggers processing on behalf of multiple users who maintain settings in their own folders.


Write Main Files Folder Location to a Text File

If you develop an application that needs to find out the location of the main files folder, add to an existing command line the following argument:
… "Write_INI_Location:c:\temp\VC_ini_Location.txt"
The location of DataLink_Viewer.ini would be then written to the specified text file, where your application can access it.

 

 


 

Automatic Handling of Write-Protected Application Folders

When a user doesn’t have write permissions to the application folder (typical of Vista and Windows 7 machines), Visual CUT handles that scenario as follows:
 
On load, if the user can't write to the DataLink_Viewer.ini, and the ini file doesn't already have a "Main_Files_Folder" entry in the [File_Locations] section then use DataLink_Viewer.ini if found in one of the following locations:
-  common appdata (ProgramData) folder (common to all users), under "MilletSoftware\VC_11\"
-  local appdata folder (local to the user), under "MilletSoftware\VC_11\"
-  roaming appdata folder (follows the user to other machines), under "MilletSoftware\VC_11\"

Otherwise, this is probably the first time VC was started on that machine so we::

    a) create a common appdata folder (e.g., c:\ProgramData\MilletSoftware\VC_11\

    b) copy the DataLink_Viewer.ini to that folder
    c) set its Main_Files_Folder option to that path
    d) copy all the main files to that folder

    e) provide a message to the user indicating the main files have been redirected

 

Note: The version information dialog shows the paths to the main files. Double-Click that text area to open the folder in File Explorer.


image

Directing the Visual CUT database to Another DBMS

By default, Visual CUT uses Visual CUT.mdb (or Visual CUT.accdb) as its repository for report processing settings. However, if you would like to use a more robust DBMS, particularly if you want multiple users to concurrently update report processing options in the same centralized database, you may redirect Visual CUT to use any OLE DB compliant database.

First, you need to create or import 4 required tables into your database (Report_Opt, Login_Opt, Export_Opt, and Report_Export_Options).
For SQL Server, send me an email requesting the SSMS script to create the tables and instructions for using an Import Data task to easily complete the migration.


Specifying a Connection String

Use the [Options] section in the DataLink_Viewer.ini to specify the connection string

Example 1 - connecting to SQL Server Express using NT Authentication:
Connection_String="Provider=SQLNCLI11;Server=Srv1\SQL2;Database=Visual CUT;Trusted_Connection=yes;"

Example 2 - using SQL Server Authentication:
Connection_String="Provider=SQLNCLI11;Server=Srv1\SQL2;Database=Visual CUT;Uid=ido;Pwd=shhh;"

Example 3 - protecting password by referring to VC_Password_Encrypted
Connection_String="Provider=SQLNCLI11;Server=Srv1\SQL2;Database=VC;Uid=ido;Pwd=@VC_Password_Encrypted@;"

The ini file should have either a manually created entry named VC_Password_Encrypted, such as this:

VC_Password_Encrypted= F13210C40859455851BD7BE84880241A18BAFEE0E349C8ED
- or -
an entry called Encrypted_Password_VC generated via
Options dialog, Process tab,
Encrypt & Save Password button with a name of VC:

Encrypted_Password_VC=F13210C40859455851BD7BE84880241A18BAFEE0E349C8ED

 

image

 

 

 


 

Export/Import Report Processing Options

The report grid right-click menu provides options to export/import reports along with their processing options:  

·         Export .rpt and Settings à ZIP allows you to package an rpt and its saved processing options to a ZIP file that you can copy to another machine and place in a folder where you wish to extract the rpt file. Using Visual CUT on that other machine you can then use 

 

·         Import.rpt and Settings ß ZIP to import the rpt and its settings.

 

This is useful when you need to replicate processing options for a report across multiple machines.

 


 

Updating DataLink_Viewer.ini  via a Delta File

You may want to automate the process of updating some of the DataLink_Viewer.ini settings. You can do that by placing a DataLink_Viewer_Delta.ini file in the application folder.  Any entries found in that file will update DataLink_Viewer.ini when the application is launched. 

Here is an example of a DataLink_Viewer_Delta.ini file:

[Delta_Options]

Delete_After=NEVER

//USE or NEVER or Some Date specified as yyyyMMdd 

// if entry above not found, then default is USE

Update_Master_INI=False

// if entry above not found, then default  is False

Update_Slave_INI=True

// if entry above not found, then default is True

 

[Options]

Attempt_Logon_Without_Password=False
Strip_Table_Qualifiers=True

Saved_Data_Action=Display
Parameter_Values_Remember_Max_Chars=900

Saved_Parameter_Set_Minimum_N=5


[Integrated_Authentication]

Enable_Integrated_Authentication=True

 

The [Delta_Options] section is used only to control the following aspects of the process:

·         The Delete_After option controls when the Delta ini file is deleted:

o   NEVER          - the file will not be deleted

o   USE                - the file is deleted after being used once

o   yyyyMMdd     - the file is deleted after the specified date

·         Update_Master_INI  controls whether the Master ini file is updated.
 

·         Update_Slave_INI  controls whether the User ini file is updated.
  


 

Restricting User Actions

In some scenarios you may wish to restrict what the user is allowed to do with Visual CUT. For example, as an Administrator, you may want to set things up so users can run only some reports and process them only with saved settings.

You can elect to specify some or all of the following restricting options in the [Options] section of a Master_DataLink_Viewer.ini file in the application folder:

 

[Options]

// Disable Preview Buttons

Disable_Print_Button=TRUE

Disable_Export_Button=TRUE

Disable_Select_Button=TRUE

Disable_Search_Button=TRUE

Disable_Refresh_Button=TRUE

 

// Disable Visual CUT Buttons

Disable_Options_Dialog=TRUE

Disable_Browse_Dialog=TRUE

Disable_Version_Info=TRUE

Disable_Check_for_Updates=TRUE

 

// Make Processing Options Read Only

Processing_Options=Read_Only

// Disable the 'Log Email Activity' checkbox and hide the Notepad button to open the log Disable_Email_Log_Activity_GUI=True
// Hide Email Queue (smtpQ) panels in the status bar
Disable_Email_Statusbar_GUI=True

 

// Disable certain Search & Replace categories

Disable_Find_and_Replace_Categories= Email_Addresses||Email_Information

// Disable/Hide the Scheduler GUI
Disable_Scheduler_GUI=True

 


 

Integrated Interactive Authentication

While command line processing relies on encrypted login information stored in
Visual CUT.mdb, some users may also wish to avoid repeated logins during interactive use.


Integrated Authentication ("Remember Me")  

To support interactive integrated authentication, the database login information is stored, highly encrypted, inside DataLink_Viewer.ini as shown below:

image

 

To ensure full security, this encrypted format includes an internal identification of which Windows User & PC this login information belongs to.  Visual CUT uses this encrypted database login information only after checking that the same Windows user is running from the same PC.  In other words, users cannot break the login security by attempting to copy and paste the encrypted information to their own ini file entry).

 

For example, in the example shown above integrated authentication has been enabled. This can be done via a checkbox in the Option dialog (Process Tab). The user (ixm7) then logged in to a secure database by providing a database user id & password. The user turned on the "Rememebr Me" option (visible only when integrated authentication is enabled):

image

 

The information was then saved for the ixm7 user, running on the SOBPC02 PC  as shown in the ini file above.  From that point on, the same user (ixm7), once logged to the same PC (SOBPC02), doesn't need to manually login to the same data source.

The same user can turn on the "Remember Me" option for unlimited number of secure data sources and the information for all of them would be maintained inside the encrypted entry. The Options dialog allows each user to delete their own integrated authentication information by clicking a button.

Shared Machine Authentication

This section describes how one user can elect to share their integrated authentication information with any other user who successfully logged in to the same machine.

Step 1: First, add the entry in bold to the DataLink_Viewer.ini file:
-------------------------------------------------
[Integrated_Authentication]
Enable_Integrated_Authentication=TRUE
ixm7@SOBPC02=18CB9CAE3D8BF3484000123301DD155638EAD4AD6B4D622C04DF125B7404BCBC4717A5DA2FBCD94314A7CE63BBF7357E
Enable_Shared_Machine_Authentication=TRUE
-------------------------------------------------

Step 2: Then, as the "key" user who will share integrated authentication, run a report and get to a login dialog. Note: if you already have integrated authentication for yourself, use Forced Login. 
Alternatively, discard your integrated authentication (using the Trash Can button in the Options dialog). Make sure you turn on the Remember Me option in the login dialog, just like setting up integrated authentication for yourself.

Step 3: Because of the Enable_Shared_Machine_Authentication=TRUE
you would get a dialog asking you if you wish to share your integrated authentication functionality with other users who logged in to the same machine. This ensures a user can’t be tricked into sharing integrated information without their knowledge and expressed consent.
Click YES. If you then open the DataLink_Viewer.ini file you would notice this process generated a new entry (in bold):
-------------------------------------------------
[Integrated_Authentication]
Enable_Integrated_Authentication=TRUE
ixm7@SOBPC02=18CB9CAE3D8BF3484000123301DD155638EAD4AD6B4D622C04DF125B7404BCBC4717A5DA2FBCD94314A7CE63BBF7357E
Enable_Shared_Machine_Authentication=TRUE
Shared_Machine_Authentication=C8B6CD373D5D5ADDC6FE9F379521C7318FA297CB595B992C
-------------------------------------------------
That entry, in my particular case, points to the ixm7@SOBPC02 integrated authentication entry.

Notes:
1. There can be only one shared machine authentication entry.  If you need to change to another administrator, delete the Shared_Machine_Authentication line and let the new administrator go through the Remember Me and dialog step.

2. If the administrator adds data sources and login information to their integrated authentication information, all the machine users would have access to the new data sources. This is because the entry is really a "pointer" to whatever that administrator has accumulated in their entry.

3. If you interactively switch between DSNs and you want Integrated Authentication functionality, set Enable_Integrated_Authentication_For_DSN_Changes to True
This is a rare scenario so, for more detail, contact Millet Software.

Google Functionality

 

Add Events to Google Calendar(s)

You may want to insert an event to Google Calendars and, optionally, invite others to confirm participation. To automate this type of workflow, you can use the Calendar_Add_Event command line argument. The argument structure is as follows:
"Calendar_Add_Event:Google_Calendar_1"

 

Google_Calendar_1 refers to a DataLink_Viewer.ini file section that looks like this:

[Google_Calendar_1]

JSON_Key_Path=C:\Visual CUT\Google\milletsoftware-0e770c5970d5.json

Template_Path=C:\Visual CUT\Google\Event_Sample.json

Send_Notifications=True


JSON_Key_Path points to the location of a text file downloaded by first using this link to create a Google API project and enable access to the Googler Calendar API. Then, following steps 1-5 in Creating a service account here. The downloaded json key file is used for authentication.

Template_Path points to the location of a text file providing the calendar event properties. Here's an example of such an event template file:

{

    "start": {"dateTime": "2017-09-23T19:15:00", "timeZone": "America/New_York"},

    "end":  {"dateTime": "2017-09-23T20:15:00", "timeZone": "America/New_York"},

    "description": "Complete Job Quote for {Product_Type.Product Type Name} and\nThen  
                              email it to the customer.\n\nSubject of quote: {@Subject}",

    "attendees": [{ "email": "jane.doe@gmail.com" }, { "email": "joe.doe@acme.com" }],

    "summary": "Job Quote for {Product_Type.Product Type Name}"

}


Items highlighted in yellow demonstrate how you can embed dynamic references to Crystal fields/formulas inside the template. They get replaced with their actual values doing processing.
\n are used to insert new lines in the event text.

You may add other properties, such as location as described in Google's documentation here.

Send_Notifications – if set to True – sends email invitation to attendees, allowing them to confirm attendance. Here is a sample image of such a notification. The email recipient can simply click to confirm/deny participation. Those choices are then reflected by the calendar


Adding Events to Multiple Calendars

If you wish to insert multiple calendar events, separate the ini file sections with ^^^^ like this:
"Calendar_Add_Event:Google_Calendar_1^^^^Google_Calendar_2"

 

Upload Files to Google Drive

You can use Google_Drive_Upload argument to upload a file under the "Shared with me" section of the Google Drive. The uploaded file is shared with you by the service account, which you need to create as described in the previous section (Calendar_Add_Event). Similarly, you need to enable the Google Drive API. 


The argument structure is as follows:
"Google_Drive_Upload:Google_Drive_Upload_1>>c:\temp\Sales in {@Year}.pdf"

 

Google_Drive_Upload_1 refers to a DataLink_Viewer.ini file section that looks like this:

[Google_Drive_Upload_1]

JSON_Key_Path=C:\Visual CUT\Google\milletsoftware-0e770c5970d5.json

Template_Path=C:\Visual CUT\Google\Drive_Upload_Sample.json

Share_With=joe@acme.com||jane@acme.com


JSON_Key_Path points to the a file used for authentication. See detail in previous section.

Template_Path points to the location of a text file providing upload properties. Here's an example of such an upload template file:

{ "parents":

[ { "id": "0B27Dz6f0a81TXEhlSnJvclFOS2c" } ],

"description": "A test upload for {Product_Type.Product Type Name}"

}


Items highlighted in yellow demonstrate how you can embed dynamic references to Crystal fields/formulas inside the template. They get replaced with their actual values doing processing.

The id property is the identifier of a Google Drive folder. If you right-click a folder on Google Drive and select 'Get Shareable link', the id is at the end of the link: https://drive.google.com/open?id=0B27Dz6f0a81XTEhlSnJvclFOS2c


 



Auto-Refreshing Web Dashboards

 

You can use Visual CUT to easily implement auto-refreshing dashboards on a web server.  This allows users with only a web browser to monitor relevant information.  See video demo.

Web Dashboard Expert

When exporting to HTML 40, the options button  image  launches a window allowing you to set various options for post-processing the HTML file. These options include: a) adding an auto-refresh behavior, b) Setting hyperlinks to launch to new tabs, c) Specifying tab titles & icons, d) Removing GUIDs from referenced.png image files, and e) SFTP Uploading HTML and Other files to the web server.

You can copy the generated command line arguments to the ‘Arguments’ area in the Export/Email tab.
A web dashboard using that approach is available at: https://www.milletsoftware.com/Labs/Labs.html

 

The dynamic tokens panel on the right allows you to embed dynamic values into these options. For example, the web page tab in the browser can reflect the date/time or the name of the sales rep in a current burst step.

 

image


 

iFrame Approach

Alternatively, Visual CUT can export a report to HTML "display" page every N seconds. A "dashboard" web page, visited by the users web browser:
a) reloads itself every N seconds using an HTML tag such as:
            <META http-equiv=refresh content=30>
b) loads the html "display" page into an IFrame areas
     (think about an iFRame as a picture frame for displaying another HTML page).

Using iFrames allows the hosting page to display multiple reports and use various GUI elements (Menus, Tabs, Accordions, and Data Tables). A sample web dashboard using that approach is available at: http://www.milletsoftware.com/dash/dash_demo_tabs.html
user id & password: demo
 

Visual CUT keeps refreshing the HTML display page by exporting to it every N seconds, and the dashboard page keeps refreshing itself and reloading the HTML display page.  Hence, the user experiences an auto-refreshing dashboard by simply having that page open in a browser.

Here is a free web page that makes it easy to generate code for an iFrame with various options:
https://www.iframe-generator.com/

 

Here is what the dashboard HTML page may look like:


<HTML><HEAD><TITLE>Backlog Dashboard</TITLE>

<META http-equiv=Content-Type content="text/html; charset=windows-1252">

<META http-equiv=refresh content=30>

<META content="MSHTML 6.00.2900.3314" name=GENERATOR></HEAD>

<BODY>

<P><IFRAME border=0 name=I1

src="E:\Dashboards\Dashboard_1.html"

frameBorder=0 width=1048 height=20000>

</body>

</html></IFRAME></P></BODY></HTML>

 


 

Multi-Panel Dashboard Layout

The iFrame approach plus a JavaScript widget for dashboard layout (such as this) can produce a multi-panel auto-refreshing web dashboard. Please visit this live sample.
Each panel contains an iFrame whose source is a Crystal Report exported to html by Visual CUT:

image

 


 

Multi-Panel Dashboard with Drill-Across

As demonstrated by this dashboard sample, clicking a hyperlink in one panel cam load details in a related panel.
A click on the employee name in the left panel loads a report for that employee into the right panel.


image

To do this, you need to:

1. Assign a name to the target iFrame. Here's the right panel info in the hosting web page. 

    <div class="e-panel-container">
          <iframe src="https://www.milletsoftware.com/Dashboard_TopN_Customers_for_King.html
                     name="Employee_Detail"></iframe>  </div>


2. Set the iFrame name as the target property for the Crystal report hyperlinks. Visual CUT can replace the _self target assigned by Crystal by default to hyperlinks with the name of the target iFrame:

"TXT_Replace:C:\Web_Dashboards\Multi_Panel_Dash\Upload\
        Revenue_and_Delivery_By_Employee2.html||||target="_self">>target="Employee_Detail"||"

 

 


 

Preventing File Locking

In order to prevent any chance of file locking, Visual CUT can export the reports to one folder and then copy (or FTP) the resulting HTML file to the web folder. Here is an example of a simple batch file that executes the Visual CUT export and then copies the resulting HTML page:

"C:\Program Files\Visual CUT 11\Visual CUT.exe" -E "c:\Reports\Dash1.rpt"

Copy c:\temp\Dashboard_1.html E:\Dashboards\Dashboard_1.html



Case Study

Phillip Scheel, a data analyst at CPS Energy, was kind enough to provide a pdf file describing the approach and several dashboards he has developed.

Hyperlinks

To allow users to click and open other web pages or any other document type you can assign to any report object within Crystal a hyperlink expression.

 

A typical approach is to have Visual CUT export a dashboard report, say a summary report of Sales By Product Type,  to one HTML page as the main web dashboard. The batch file triggering the process can have another command line to trigger bursting of another report, creating one HTML page showing Sales by Product within each Product Type:
Detail_ for_{Product_Type.Product Type Name}.html
You would then set the hyperlink expression for the Product Type field in the main dashboard report to dynamically point to its related detailed HTML page. The user can then click on each Product Type field in the main dashboard to drill-down into the detailed information in the bursted HTML pages. In a similar manner, drill-downs to related PDF or Excel files can be provided. 

Note: use the Web Dashboard Expert to change hyperlink properties so that they open related web pages in a separate Window rather than replacing the content in the dashboard frame.

Tooltips

To provide users with related information when hovering over elements in the web dashboard, simply specify a dynamic tooltip expression for these objects in Crystal.
By inserting a line break character in these expressions, as in:
{@Cust} +  Chr(10) + {@Cust_Info}
you can present that content as multiple lines
note: Firefox seems to be the only browser that doesn’t honor such line breaks. 

 


 

Generating HTML via Email Message Body

Instead of relying on Crystal’s HTML export, you may take advantage of the email message HTML editor and Visual CUT’s ability to embed dynamic values from report fields/formulas in the message body.

You can instruct Visual CUT to save the email message body to an HTML file using the Email_Message_Save command line argument. You can also skip the actual emailing by specifying "VC_Skip_Email" in the Email_To option.

 

This technique provides you with full control over the HTML being generated. As shown in the video demo above, it allows tables in your web dashboard to adjust to the browser screen size. It also allows you to directly add CSS and JavaScript to the generated HTML page.

Cleaning png File References

When the exported report contains images, Crystal generates uniquely named (using GUIDs) png files, which are referenced from within the HTML file. In many cases, you may wish to "clean" these file references by removing the GUIDs from the file references and renaming the png files. Visual CUT provides two command line arguments to achieve this: TXT_DeGUID_png and TXT_Replace_Tokens. See the following user manual sections for more detail:

·         Removing GUIDs from png Files Referenced in HTML Exports

·        Replacing Content in Text/HTML Files – Token Approach


Restricting Access to Web Dashboards

If you wish to restrict access to your web dashboards, a simple and secure method is described here: http://www.javascriptkit.com/howto/htaccess3.shtml

 


 

Web Widget Features

 

You can use Visual CUT to export report/Excel/SQL data directly to a web page (.html file extension) hosting the data in a JavaScript widget such as Web Grid or Web Pivot Table. See video demo

 

As shown in the image below, Visual CUT takes care of several intermediate steps:

1.                  Export to Excel (Data Only).

2.                  Convert the data in the Excel file to JSON file for consumption by the web widget

3.                  Copying the master template from the installation folder to the export folder.
This step is skipped if the template file already exists in the export folder.
You may modify the template file in the export folder to suit your needs for extra content or different design/options.

4.                  Creating the web page (.html file) based on the template file in the export folder.
This step is skipped if: a) the page already exists, and b) the TXT_Replace directive does not contain {AsOf} text (indicating a need to refresh Date/Time info).
The process copies the template file (in the export folder) to the export html file and injects into it:

·                     Column definitions based on the data and its formatting in the excel export

·                     Design choices based on your export options dialog choices
(favicon, title, auto-refresh, default color theme, etc.)

·                     Widget tweaks to tie it to this particular export

5.                  SFTP upload (if so desired) the JSON file and html file. Note that the html file typically doesn’t change so its upload can be skipped based on file age.

 

image

 

 


 

Web Grid Export

image

 

The WebGrid export format generates a web page with an interactive grid allowing grouping, sorting, filtering, column selection, etc. The grid adjusts to accommodate different screen sizes. Here is a live sample.

 

Functionality (see video demo)

1.      Grouping: Drag column header(s) to the grouping area to group the grid.

2.      Filtering: Each column has a Filter button, allowing you to select/unselect certain values or to create a value filter expression.
 

3.      Column Selection: The Columns drop-down provides a dialog for removing/adding columns to the grid.

 

4.      Column-Reorder: Drag column headers to reorder them.

5.      Printing/Exporting: Use the Print/Export buttons.

6.      Color Theme selection: a toolbar drop-down provides a choice of color scheme.

7.      Single-Column Sort: Click column headers to sort Ascending, Descending, or Unsort.

8.      Persistence: the browser remembers your layout and theme choices.

9.      Multi-Column Sort: Ctrl-Click a column header adds it to the sort logic.
A number reflects the position of the column in the sort logic.
In this case, the grid (using Bootstrap4 color theme) is grouped on Product Type within Employee. The sort within this grouping is by Value descending and within that by Discount.

image

 

10.  Paging: a paging control at the bottom of the grid supports page navigation and changing number of rows per page.

 

Processing Logic

The export process uses a WebGrid_Template.html file as a basis for generating the exported HTML file. The template file is also copied to the export folder where you may tweak it for use by subsequent uses (if you wish to override default styling/content).

 

The process actually generates 3 files:
1.         HTML file specified by you as the export file (e.g. c:\temp\mygrid.html)

6.                  JSON file holding the exported data (e.g. c:\temp\mygrid_Data.js)

7.                  Excel (Data Only) version for reviewing the export (c:\temp\mygrid.xlsx)


The creation of the HTML file (based on the WebGrid_Template.html) occurs only if the HTML file doesn’t already exist or if {AsOf} token is detected in TXT_Replace argument..
Otherwise, only the data files are refreshed. This allows you to schedule the process and use SFTP_Upload to refresh just the JSON file on your web server.

 

 


 

Conditional Formatting

By adding a few CSS & JavaScript lines to the template, you can add conditional formatting. See sample:


image 



Format URLs as hyperlink icons.

If a column contains nothing but URLs (or blanks), it gets rendered as a hyperlink icon, as shown in the image above. If you'd rather display the URL text, concatenate a space to its start or ending.

 

Monitoring SQL Server Health

Using the free sp_Blitz stored procedure (from Brent Ozar), and a sample report (available upon request), you can use Visual CUT to monitor the health of your SQL Servers (see image above).
This video demo explains how Visual CUT can populate an auto-refreshing web grid and send you email alerts when critical issues are found.


Use HTML as Column Content

You can use HTML tags to control the rendering of grid cells. For example, the Product column in the grid below was populated using the following formula:
Replace({Product.Product Name}, "Crochet", "<Mark>Crochet</Mark>")

image

 

Notes:

1.      To add the WebGrid export format to existing Visual CUT installation, you need to add it to the list of export formats in the Export_Opt table in the Visual CUT database:

Export Constant

Export Name

WebGrid

WebGrid

 

-          Click Version Info button, and double-click text area at bottom to open the folder where the Visual CUT database is located.

-          Close Visual CUT and open the Visual CUT database in MS Access

-          Open Export_Opt table and add the row shown above.

 

2.      The report should not suppress column headers. This is because column headers in the intermediate Excel (Data Only) export are needed to generate the column definitions for the JavaScript widget.
Avoid special characters in the column header names (though ‘%’ ‘#’ ‘/’ and ‘&’ characters are tolerated).

3.      Keep the report to a single level of details (no Grouping).


 




 

Web Pivot Table/Chart Export

The WebPivotTable export format generates a web page with an interactive pivot table/chart.

Here is a sample web page generated by Visual CUT using this export format:

 

image

 

Functionality (see video demo)

This Widget has many useful options such as:

1.      Toolbar buttons to switch from Pivot Table to Pivot Chart: image

2.      Toolbar button to export to Excel, PDF, or CSV: image

3.      Toolbar buttons to control visibility of subtotals and grand totals: image
(the sample hides grand totals)

4.      Toolbar button to apply number formatting and conditional formatting: image
(the sample shown highlights average discounts above 2%)

5.      Color Theme selection: a toolbar drop-down provides a choice of color scheme (persisted across sessions):
image

 

6.      Top-Right corner toolbar button: image for creating/modifying Pivot Tables:

image

 


Pivot Table Design:
On first-time viewing in a browser, since the pivot table needs a layout defined, this dialog displays automatically so the user can design the Pivot Table. That design is persisted for future sessions by that user & browser. But the user can click image to revisit and change the design.

 

Number Formatting: Visual CUT takes care of configuring number formatting and precision for all numeric data fields (e.g. Currency, Percent, or regular numbers) to match their formatting in the Crystal report. You can override these options using the toolbar button for formatting: image  That drop-down also supports Conditional Formatting.


Sort rows by Value: in the sample shown earlier, note that the rows are sorted by the grand total value. This was done by simply clicking the column header for the grand total.

 

Filtering: filtering (for example, to a subset of Years or Product Classes is available via the filter icons: image 

Grouping: via a right-click menu



 

Reports Functionality

You can manage and switch between report layouts. These layout definitions are not saved with data. Instead, they apply the layouts to the latest data (<pageName>_Data.js file).  See video demo

image


The drop-down shows 5 saved report layouts. The first two are user reports, created by the user and saved to their own browser’s localStorage. The last three are master reports provided via a <pageName>_Reports.js file and available to all users. This allows you to deploy the web pivot with pre-populated master reports.

 

If you do not wish to use this functionality, contact MilletSoftware for instructions on how to revert to the simplified GUI (shown in the video demo in the previous section).

The toolbar buttons to the left of the reports drop-down: image

Allow the user to:
1.         Create a new report layout

2.                  Save the current report layout

3.                  Save the current report layout under a new name

4.                  Rename the current report layout

5.                  Download all report layouts to a new <pageName>_Reports.js file
(this allows you to create, and later deploy, that file)

6.                  Delete the current report layout.



Creating <pageName>_Reports.js file

 

When Visual CUT is installed, the following file is included:
"C:\Program Files (x86)\Visual CUT 11\WebPivotTable_Template_Reports.js"
It initializes the masterReports variable to an empty array: var masterReports = [];

On export to a Web Pivot Table (assuming the export file name is x.html), if the target export folder doesn’t already contain a file named x_Reports.js, the template file gets copied & renamed to that file. You include that file in the SFTP_Upload. 

image

 

After saving some report layouts, they are available only to you (since they are stored only in your browser’s localStorage and not in the x_Reports.js file.
But you can turn your “private” layouts to master layouts by using the imagebutton to download and replace the old x_Reports.js with a new x_Reports.js file (see yellow arrow in the diagram above). You then upload the new x_Reports.js, which now contains report layout definitions, to establish them as master report layouts available to anyone with access to your web (or shared) folder.




 

Drill-Down

A double-click allows you to drill-down and display the detail rows for a single pivot table summary cell or chart element.

By default, only the columns included in the Rows, Columns, Filters, and Summary value are displayed. But you can use the Columns drop-down to add any other columns from the data set.

 

You can also use the Export buttons to download the drill-down data to Excel, PDF, or CSV.

image

Chart Options

The chart drop-down provides a choice of chart types and options. In the example below, the Discount metric is selected. Note: double-clicking a riser would provide a drill-down grid.
image 

 


 

Processing Logic

The export process uses a WebPivotTable_Template.html file as a basis for generating the exported HTML file. The template file is also copied to the export folder where you may tweak it for use by subsequent uses (if you wish to override default styling/content).

 

The process actually generates 4 files:

1.                  HTML file specified by you as the export file (e.g. c:\temp\Sales_PivotTable.html)

2.                  JSON file holding the exported data (e.g. c:\temp\Sales_PivotTable_Data.js)

3.                  <name>_Reports.js file for storing master reports (see next section for explanation)

4.                  Excel (Data Only) version for reviewing the export (c:\temp\Sales_PivotTable.xlsx)

 

The creation of the HTML file (based on the WebPivotTable_Template.html) occurs only if the HTML file doesn’t already exist.  If the target HTML file already exists, only the data files are refreshed. This allows you to schedule the process and use SFTP_Upload to refresh just the JSON file on your web server, since the html file didn’t change.

 

Notes

1.                  To add the WebPivotTable export format to existing Visual CUT installation, you need to add it to the list of export formats in the Export_Opt table in the Visual CUT database:

Export Constant

Export Name

WebPivotTable

WebPivotTable

 

-          Click Version Info button, and double-click text area at bottom to open the folder where the Visual CUT database is located.

-          Close Visual CUT and open the Visual CUT database in MS Access

-          Open Export_Opt table and add the row shown above.

2.                  The report should not suppress column headers. This is because column headers in the intermediate Excel (Data Only) export are needed to generate the column definitions for the JavaScript widget. Avoid special characters in the column header names ( ‘%’ ‘#’ ‘/’ and ‘&’ characters are tolerated).

3.                  Keep the report to a single level of details (no Grouping).

 


 

Web Schedule Export

The WebSchedule export format generates a web page with Calendar Schedule.
Here is a sample web page generated by Visual CUT using this export format:

 

image

 

Processing Logic

The report must have the following columns. Column header names are case-sensitive!
image

 

The Color column is optional. It controls the background color of appointments (in hex).
This allows you to assign different appointment types different colors.

The Description is available in a detail popup when clicking on an events. It can use HTML syntax to offer hyperlinks. For example, if the Description contains this text:

<A href="https://www.MilletSoftware.com">MilletSoftware</A> User Group Agenda:

    <ol>

    <li><a href="https://www.milletsoftware.com/ActionQ.htm">ActionQ</a>: New Software</li>

    <li><a href="https://www.milletsoftware.com/CUT_Light.htm">CUT Light</a>: Barcode Functions</li>

    <li><a href="https://www.milletsoftware.com/DataLink_Viewer.htm">DataLink Viewer</a>: Desktop Shortcuts</li>

    </ol>

A click on that event in your browser shows this:

image


The export process uses a WebSchedule_Template.html file as a basis for generating the exported HTML file. The template file is also copied to the export folder where you may tweak it for use by subsequent runs. For example, you can change the default view from ‘Week’ to ‘WorkWeek’.

 

The process actually generates 3 files:

1.                  HTML file specified by you as the export file (e.g. c:\temp\MySchedule.html)

2.                  JSON file holding the exported data (e.g. c:\temp\MySchedule_Data.js)

3.                  Excel (Data Only) version for reviewing the export (c:\temp\MySchedule.xlsx)

 

The creation of the HTML file (based on the WebSchedule_Template.html) occurs only if the HTML file doesn’t already exist.  If the target HTML file already exists, only the data files are refreshed. This allows you to schedule the process and use SFTP_Upload to refresh just the JSON file on your web server, since the html file didn’t change.


Notes:

1.                  To add the WebSchedule export format to existing Visual CUT installation, you need to add it to the list of export formats in the Export_Opt table in the Visual CUT database:

Export Constant

Export Name

WebSchedule

WebSchedule

 

-          Click Version Info button, and double-click text area at bottom to open the folder where the Visual CUT database is located.

-          Close Visual CUT and open the Visual CUT database in MS Access

-          Open Export_Opt table and add the row shown above.

2.                  The report should not suppress column headers. This is because column headers in the intermediate Excel (Data Only) export are needed to generate the column definitions for the JavaScript widget. Also, avoid special characters in the column header names.

3.                  Keep the report to a single level of details (no Grouping).

 


 

Web Page Options & Upload Expert

To facilitate deployment and to boost the functionality, you can click the ellipsis button to the right of WebGrid, WebPivotTable, and WebSchedule export formats:

image    This results in the following dialog:

image

This facilitates setting options and SFTP uploading the web page and its data file to a web server.

Notes:

·         Use the dynamic tokens panel on the right to embed references to dynamic report fields/formulas in the web page tab name and other options.  The tooltips reflect the dynamic values of such references.

·         SFTP Uploads File(s) option automatically includes the HTML file and its corresponding DATA.js file.

·         If the page needs to show refresh date/time (sample), use the checkbox to add ::{AsOf}|>>|{@AsOf} to the TXT_Replace directives. Place {AsOf} text in your html template and {@AsOf} formula in the report’s RH/RF section. Example: ToText (CurrentDateTime, "MMMM dd, HH:mm")
Detecting {AsOf} in TXT_Replace argument causes html page to be recreated from template.




PDF Functionality

Creating Bookmarks (Group Tree) in Exported PDF Files [Old Approach]

Visual CUT can create a "Group Tree" of bookmark inside exported pdf document.

It allows users to easily navigate through large PDF files. 

You specify the Bookmark label & page by inserting a string formula in each Group Header that contributes a level to the "Group Tree."  The formula/section can be suppressed.

 

Naming the Bookmark Formulas:

For Group Header Level 1, the name of the formula must be VC_pdf_bookmark1 , …
For Group Header Level 5, the name of the formula must be VC_pdf_bookmark5  
Note: you can add other formulas at the same level (in the same section or split section) by adding a digit between 1 and 9.  For example, if you used VC_pdf_bookmark2 for GH2a you can use VC_pdf_bookmark21 in GH2b and VC_pdf_bookmark22 in GH2c.

Structuring the Formulas:

The formulas must return a string structured as the Bookmark Label, followed by "::" and ending with the Page Number where the formula was evaluated.

 

The sample report (Visual CUT.rpt) demonstrates this functionality:

¨    On Group Header 1 the VC_pdf_bookmark1 formula is defined as:

IF InRepeatedGroupHeader THEN ""
        ELSE {Product_Type.Product Type Name} + "::" + Cstr(PageNumber,0,"")

¨    On Group Header 2 the VC_pdf_bookmark2 formula is defined as:
IF InRepeatedGroupHeader THEN ""
  ELSE GroupName ({Product.Product Name}) + "::" + Cstr(PageNumber,0,"")

 

After a PDF export, the resulting file has a 2-level hierarchy of Bookmarks and
clicking on any bookmark takes you to the page associated with that bookmark:

image

 

 

Controlling PDF Bookmark Colors (& Text)

If you include (anywhere) in the Bookmark Label the color constants of crRed, crBlue or crGreen (note: case sensitive) Visual CUT would set the color of the bookmark text accordingly (and remove the color constant text from the label). 
This functionality is useful for indicating item performance or status visually (e.g., red color indicating poor performance).  Note: remember that since you control (via a formula) the bookmark text, you can also add various label indicators such as [+], [~], [!], or [-].     

 

The level 2 bookmark formula (VC_pdf_bookmark2) in the sample report demonstrates this approach as follows:

WhilePrintingRecords;

IF InRepeatedGroupHeader THEN ""

ELSE

(

IF Average ({@Days_To_Ship}, {Product.Product Name}) > 5.0 THEN
"[!]crRed " + GroupName ({Product.Product Name}) + "::" + Cstr(PageNumber,0,"")

ELSE IF Average ({@Days_To_Ship}, {Product.Product Name}) < 3.0 THEN
"[+]crGreen " + GroupName ({Product.Product Name}) + "::" + Cstr(PageNumber,0,"")

ELSE
"[~]crBlue " + GroupName ({Product.Product Name}) + "::" + Cstr(PageNumber,0,"")

);


Controlling How Many Bookmark Levels Are Initially Expanded

By default, the resulting PDF file will show only 1 (the top) level of bookmarks expanded, so that level-2 bookmarks (if there are any) are visible. Obviously, users can expand/collapse the bookmarks by clicking on the + or – nodes within the Adobe Acrobat reader.  However, you may wish to present the users with a pdf where only the top-level bookmarks are initially visible or where more levels are initially expanded.
 
To change the default number of expanded levels for all processed reports, change the value of the PDF_Bookmarks_Open_Levels option in the DataLink_Viewer.ini

For example:
[Options]

PDF_Bookmarks_Open_Levels=0

 

To override the default number of expanded levels when processing a specific report, use the PDF_Bookmarks_Open_Levels command line argument as follows:


"PDF_Bookmarks_Open_Levels:N"

Where N is the number of levels to be initially expanded. 

For example, to have only the top bookmarks visible, use:
"PDF_Bookmarks_Open_Levels:0"



Guarding Against Null Bookmark Values

If the field(s) used to control the bookmark label is Null, the whole formula would result in a Null value and bookmark processing would be compromised.  If this is a possibility given your data you should guard against it using a formula like this:

WhilePrintingRecords;

IF InRepeatedGroupHeader THEN

""

ELSE

IF IsNull({Product_Type.Product Type Name}) THEN

" " + "::" + Cstr(PageNumber,0,"")

ELSE

{Product_Type.Product Type Name} + "::" + Cstr(PageNumber,0,"");




Generating PDF Bookmarks from within Subreports

As an alternative to generating bookmark information from Group Header sections in a main report (as described above), Visual CUT allows you to specify bookmarks for a given PDF file by providing a text file (PDF_Bookmarks.txt) containing the bookmark information.  This file must be located in the Visual CUT  application folder and must be structured as follows:

1.      The 1st line must match the RPT file name of the report being processed

2.      The following lines provide 4 data elements separated by a "::" delimiter:

1.      Bookmark Level

2.      Bookmark Label

3.      Page Number

4.      Group Level 1 Value (used only in bursting operations)


 image

 

Using "CUT Light" (a User Function Library described on my web site) or any other UFL that adds the ability to append text to text files from within Crystal formulas, you can generate this text file automatically by embedding formulas in any report or subreport sections. 

 

Note that this provides functionality that goes beyond the Group Tree limitations of Crystal reports.  Crystal can’t generate Group Tree information based on information within subreports.  However, using this technique you can generate Group Tree information as PDF bookmarks based on information from both main as well as subreports! 

 

There are 2 main steps in the process:

  1. Visual CUT runs the report and, because the report has special UFL formulas, the PDF_Bookmarks.txt file gets populated with bookmark information,
  2. Visual CUT export the report to PDF, detects the presence of PDF_Bookmarks.txt and uses it to generate the bookmarks in the exported pdf file.

 

If you are interested in using this functionality, I can e-mail you a sample report (demonstrating the formulas needed to generate the text file information). I can also e-mail you download instructions for evaluating CUT Light (UFL allowing Crystal formulas to create and add data to text files).


Adding Bookmarks Using Crystal Formulas as Tags [New Approach]

Using a command line argument, you can instruct Visual CUT to look for invisible tags inside the pdf file (Crystal formulas with font color set to background color) and to use their content to generate bookmarks. Compared to the old approach (described in the previous section), this new technique has several advantages:

1.      The bookmarks link to the exact vertical location (on the linked page) where the rendered formula is located.  In the old approach, bookmarks only pointed to at the top of the page.

2.      You can easily generate bookmarks from within subreport and from any report section (not just Group Headers). For example, you can generate bookmarks from Detail Sections or Group Footers.

3.      You can control the bookmark text color more completely (instead of a few color constants, you can specify any color using RGB (Red/Green/Blue) values.

4.      You can control the expanded/collapsed state of each bookmark node

5.      You can control the style of the bookmark node (Regular, Bold, Italics, Bold&Italic)

6.      No need to worry about PageNumber resets, Keep Together, and WhilePrintingRecords properties that can cause headaches with the old approach. This is because the new approach doesn’t require specifying a page number and doesn’t depend on the evaluation time of the bookmark formulas.

7.      You can avoid the need to use a command line argument by setting PDF_Bookmark_Tags_Default=True
under the [Options] section of  DataLink_Viewer.ini (only applies to files < 100MB)
Visual CUT would then process bookmark tags within an exported PDF file.
 

Here's an example of the command line argument structure:

"PDF_Bookmark_Tags:c:\temp\Sales in {@Year_Parameter}.pdf"  Or

"PDF_Bookmark_Tags:Source_pdf_file>target_pdf_file"

If only one pdf file is specified (as in top example), the source file becomes also the target file.

The Crystal formulas act as tags for controlling the level, vertical location, text, color, expand/collapse status, and style (regular/bold/italic) of the desired pdf bookmarks. 

 

Setting Up a Crystal Report with pdf formula tags

You can download a sample report demonstrating the technique from:
www.milletsoftware.com/Download/Visual_CUT_PDF_Bookmark_Tags.rpt

And the resulting pdf file from:
www.milletsoftware.com/Download/Visual_CUT_PDF_Bookmark_Tags.pdf


The sample report uses 3 formulas to generate bookmarks:
{@Bookmark_L1} is placed in the Group Header level 1 to generate Product Type Name bookmarks with bold blue text.  These level 1 nodes are expanded.

{@Bookmark_L2} is placed in the Group Header level 2 to generate Product Name bookmarks with bold text.  These level 1 nodes are collapsed
.

{@Bookmark_L3} is placed inside the subreport in the Group Header level 1 to generate Customer Name. Bookmarks with text colored in different shades of red or green depending on the average time it takes to ship orders of that product to the customer.

 

The generated bookmarks link not only to the page where the formula was rendered, but also to the exact vertical position on that page (minus 20 millimeters to provide some margin).  The bookmarks are created for each rendered instance of the formula. For example, if you place the formula in a Group Header 1 you will generate a bookmark for each Group at level 1.

 

The formula text must be rendered within the formula boundaries in a single line.  Use small font sizes: 2 or even 1 to achieve this.  Then, turn the font color to White (or same color as the background) to make the formula invisible or, keep the PDF_Tags_Delete_Default option in DataLink_Viewer.ini as True and Visual CUT would remove the tag text after processing it. See box below for Sample formula.


Notes:

1.      As always, you can use field or formula names within the command line argument. The dynamic content of these fields/formulas would be substituted into the argument.
For example, {@Bookmark_L3} (inside the subreport) dynamically sets the color of the bookmark based on the performance of records in that node. Similarly, you may dynamically expand the bookmarks for groups with extreme performance measure to focus the manager’s attention on those areas.

2.      Visual CUT can remove pdf processing tags from the pdf file after processing those tags.  This is controlled by an entry called PDF_Tags_Delete_Default under the [Options] section of DataLink_Viewer.ini. By default, this option is set to True.  To ensure all tags are removed, use the Replace() function in Crystal to change double quotes into single.  For example, the expression for the title in PDF_Bookmark_Tags could be:
Replace({Customer.Customer Name},"""","'")

3.      In Crystal, use non-proportional font for the tag formula (avoid Calibri and Bold/Italic)

Here is the commented {@Bookmark_L2} formula from the sample report at: 
www.milletsoftware.com/Download/Visual_CUT_PDF_Bookmark_Tags.rpt

 

 

 

// Make the font size very small (2 or even 1 point) so content fits in a SINGLE line.

// The vertical location of the tag (minus default margin of 20 millimeters) controls the vertical
//     location of bookmark page target.  You can override the margin using an optional argument.

// The formula always starts with "#BM_Tag::" and ends with "#"

"#BM_Tag::" +

"2" +  "||" +  // Bookmark Level. During bursting, levels are shifted up automatically

Replace({Product.Product Name},"""","’") + "||" +  // Bookmark Text (" >> ‘)

"-" + "||" +  //"Expand Status:  + to open the bookmark or - to collapse it. 

"1" + "||" + // Text Style:  0=regular  1=Bold   2=Italic   3=Italic Bold

"0;0;0" +  // Color as RGB:  3 numbers between 0 and 255 separated by ";"
// "||10" + // [Optional] Vertical Margin.  Leave commented or uncomment to
               //    override the default of 20 millimeters.

"#"





 

Making PDF Files Accessible

Accessible pdf files make it easier for people with disabilities to read the document using assistive technology such as a screen reader. Using Visual CUT, you can generate an accessible pdf export by:

 

1.                 Ensuring the pdf export includes bookmarks.
This is typically achieved by Adding Bookmarks Using Crystal Formulas as Tags.

2.                 Using the command line argument of "PDF_Export_Options:Tagged"

3.                 Setting the natural language property of the pdf file using a command line like this:
"PDF_Properties:c:\temp\test.pdf>Ido> test>test>>MS>Visual CUT>Normal>1>100>/Lang::en-US"

You can test the accessibility of the resulting file using this web service: http://checkers.eiii.eu/en/pdfcheck/

Here is an example of test results:

image




 

Adding a Table of Content to a PDF File

You can generate a Table of Contents (TOC) inside a PDF file based on its Bookmarks.
Bookmarks are used during online viewing – a TOC is more useful for a printed document.

The command line argument structure is as follows:
"PDF_TOC:1>40>11>6>5>2>pdf_file_path_and_name"

The parameters (after the ":") are separated by a ">" and are as follows:

1. Page where the TOC is inserted. 1 is a typical choice. Specify 999999 to insert as last page(s).
Note: you can specify two numbers separated by two vertical bars in cases where you want to offset the page numbers shown in the TOC.  For example, 2||1 would insert the TOC in page 2 (after a title page perhaps) but refer to page #2 as page #1 and apply a similar offset to all other page numbers that are displayed in the TOC.

2. The right (& left) page margin (in millimeters).  40 is a typical choice
3. The font size (in points).  11 or 12 are typical choices.
4. The row spacing (in millimeters).  6 is a typical choice.
5. The indentation (in millimeters) added to each hierarchy level.  5 is a typical choice.
6. The Minimum Bookmark Level below which bookmarks are ignored.  2 is a typical choice.
7. OPTIONAL: The PDF file path & name (for example, c:\temp\other_file.pdf). 
    Leaving this argument blank, would default processing to the file being exported. 
    Providing a file name would direct processing to the specified file (even if it's not the
    exported PDF file. 

Overriding the default "Table of Contents" Header Text
You can control the "Table of Contents" header text by adding/updating the [Text_Change] section in the DataLink_Viewer.ini file. For example:

[Text_Change]

Table of Contents=Table des matières

Table of Contents (cntd)=Table des matières (suite)


Notes:

·         In DataLink_Viewer.ini, find and set this entry to True:  PDF_Bookmark_Tags_Default=True

·         If you enter no text after the equal sign, Visual CUT will suppress the header text.

·         A "Table of Contents" (or the equivalent text as per the section above) is set to the 1st page where the Table of Contents was inserted (regardless of the page number specified by you).

·         Visual CUT assigns the top level of the TOC a bold font and a slightly larger row spacing and assigns level 3 and below a smaller font and a smaller row spacing. 

·         If the TOC requires more than 1 page, Visual CUT inserts additional pages for the TOC.

·         The TOC rows (just as Bookmarks) are linked to the specified page so clicking on a TOC row takes you to that page. Regardless of the number and location of the inserted TOC pages, all page links (bookmarks and TOC rows) are adjusted accordingly.
The process takes care of generating a bookmark for the Table of Contents.


Advanced Table of Content Options

You can add page header images and gain fine control of font type, font size, font color, row spacing, bullets, indents, page orientation, and vertical page margins for the Table of Content by specifying these options in a [PDF_TOC] section inside DataLink_Viewer.ini.

For example, the following section starts by specifying vertical page margins for the first and continued Table of Content pages. It then specifies the images (with web hot links) to be inserted at the top of these pages.  The rest of the items control font type, size, color, bullets, spacing, and indentation for each level in the Table of Content hierarchy.  

 

[PDF_TOC]

// the Page_Margin_Top entry is required to enable this functionality

Page_Margin_Top=50

Page_Margin_Top_Continued=30

Page_Margin_Bottom=30
Page_Orientation=Portrait

 

// elements are: Left>Top>Width>Height>web link>image file>border (0=no border, 1=border)
// Left, Top, Width and height are all in millimeters. Left & Top are relative to top corner of the page

Top_Image_1st=0>0>216>40>http://www.MilletSoftware.com>C:\temp\header.jpg>0

Top_Image_Continued=0>0>216>20>http://www.milletsoftware.com/Visual_CUT.htm>C:\temp\VC.jpg>0

 

// True Type font specified as TT||Font Name||point size||Style: Regular/Bold/Italic/BoldItalic||RGB color

Default_Font=TT||Garamond||11||Regular||0;0;0

// Standard font specified as:

// = ST||Font Name: Helvetica/Courier/TimesRoman||point size||Style: Regular/Bold/Italic/BoldItalic||RGB color

 

Header_Font=TT||Garamond||16||Bold||16;78;139

 

Level_1_Font=TT||Garamond||12||Bold||225;0;0

Level_1_Row_Spacing=8

Level_1_Bullet=

Level_1_Bullet_Spaces=

Level_1_Indent=

 

Level_2_Font=TT||Garamond||11||Regular||0;0;0

Level_2_Row_Spacing=6

Level_2_Bullet=149

Level_2_Bullet_Spaces=3

Level_2_Indent=1


You can see a sample pdf generated using these options at:
www.MilletSoftware.com\Download\VC_PDF_Table_of_Contents_Sample.pdf


To override the settings above for a specific report, create a similar section and call it:
[PDF_TOC_YourReport.rpt]

Note: you can use field or formula names within the ini entry values, just like you drag & drop fields & formulas into the various options in the 3rd tab within Visual CUT.  The dynamic content of these fields/formulas would be substituted into the ini values. For example, this allows a different image to be used for the Table of Contents header depending on data in the report.


Adding Page Numbers to a PDF File

You can instruct Visual CUT to add page numbers to the exported PDF file.  This is useful when also adding a Table of Contents (as described above) since in such a case the page numbers from Crystal would be wrong. The command line argument structure is as follows:
"PDF_PAGE_N:2>10>10>11>Bottom>Center>Page_NofM>pdf_file>TimesBold"
or
"PDF_PAGE_N:2>10>10>11>Bottom>Center>Page_NofM>pdf_file>TT||Garamond||Bold||225;0;0"

The parameters (after the ":") are separated by a ">" and are as follows:

1. Starting with Page: 2 is used in cases where the 1st title page shouldn’t be numbered.
* specify two numbers separated by || (N||M) to start page numbering on page N with the number M. For example, 2||1 would start numbering on page 2, but with the number 1. 
* specify 3 numbers separated by || (N||M||X) to start page numbering on page N with the number M, but skip the last X pages. For example, 3||2||1 would start numbering on page 3, with the number 2, but skip 1 last page. 

2. Horizontal page margin (in millimeters). Doesn’t apply to Centered layouts. 10 is typical.

3. Vertical page margin (in millimeters). 10 is typical.


4. The font size (in points).  11 or 12 are typical.

5. The vertical position on the page (Top or Bottom).  Bottom is typical.

6. The horizontal position on the page (Left, Center, or Right).  Center is typical.


7. The format (N, Page_N, or Page_NofM). Page_NofM is typical (e.g., Page 3 of 210).


8. OPTIONAL: The PDF file path & name (for example, c:\temp\other_file.pdf). 
    Leaving this argument blank, would default to processing the file being exported. 
    Providing a file name would process the specified file. 

 

9. OPTIONAL: The font type (default is Helvetica). 
    Possible font types:

    Courier, CourierBold, CourierBoldItalic, CourierItalic

    Helvetica, HelveticaBold, HelveticaBoldItalic, HelveticaItalic

    TimesRoman, TimesBold, TimesItalic, TimesBoldItalic 
    * or * any TrueType Font specified as 4 elements separated by || like this::
    TT||FontName||Style||Red;Green;Blue
    TT constant indicating this is a True Type font (target machine should have it installed)
    Font Name such as Garamond
    Style: Regular, Bold, Italic, or BoldItalic
    Color as RGB:  3 numbers between 0 and 255 separated by ";"
        Black=0;0;0  Maroon=225;0;0 etc. (see RGB #s at: http://web.njit.edu/~kevin/rgb.txt.html )
    For example: TT||Garamond||Bold||225;0;0

Adding Text to a PDF File

You can instruct Visual CUT to add text to PDF pages. A typical scenario is date stamping, adding content after merging files, or targeting files generated by other processes.  The argument structure is as follows:
"PDF_Add_Text:2>10>10>11>Bottom>Center>{@SomeText}>pdf_file>TimesBold"
or
"PDF_Add_Text:2>10>10>11>Bottom>Right>{Customer.Name}>pdf_file>TT||Garamond||Bold||225;0;0"

The parameters (after the ":") are separated by a ">" and are as follows:

1. Starting with Page: 2 is used in cases where the 1st title page shouldn’t be numbered.
    l Specify 2 numbers separated by || (N||M) to start adding the text on page N but skip the last M pages.
       For example, 3||1 would start numbering on page 3, but skip 1 last page. 
    l To target a single page, specify a large M value. For example 3||9999

2. Horizontal page margin (in millimeters). Doesn’t apply to Centered layouts. 10 is typical.

3. Vertical page margin (in millimeters). 10 is typical.


4. The font size (in points).  11 or 12 are typical.

5. The vertical position on the page (Top or Bottom).  Bottom is typical.

6. The horizontal position on the page (Left, Center, or Right).  Center is typical.


7. The Text to add.


8. The PDF file path & name (for example, c:\temp\other_file.pdf). 

 

9. The font type.  Possible font types:

    Courier, CourierBold, CourierBoldItalic, CourierItalic

    Helvetica, HelveticaBold, HelveticaBoldItalic, HelveticaItalic

    TimesRoman, TimesBold, TimesItalic, TimesBoldItalic 
    * or * any TrueType Font specified as 4 elements separated by || like this::
    TT||FontName||Style||Red;Green;Blue
    TT constant indicating this is a True Type font (target machine should have it installed)
    Font Name such as Garamond
    Style: Regular, Bold, Italic, or BoldItalic
    Color as RGB:  3 numbers between 0 and 255 separated by ";"
        Black=0;0;0  Maroon=225;0;0 etc. (see RGB #s at: http://web.njit.edu/~kevin/rgb.txt.html )
    For example: TT||Garamond||Bold||225;0;0

Notes:

·         You can use multiple PDF_Add_Text arguments in a single command line.
Or simply separate multiple directives with "^^".

·         As usual, you can refer to field/formula names.

Adding Web/File/email Hotspot to a PDF File

You can instruct Visual CUT to add a rectangular hotspot to a pdf file that acts as a web browser link to a web URL, email address (mailto), or a file on your local machine.

The command line argument structure is as follows:

"PDF_LinkToWeb:c:\test.pdf>1>99>40>60>50>10>http://www.MilletSoftware.com>>>0"

The parameters (after the ":") are separated by 10 ">" and are as follows:

1. pdf file to which the hotspot would be added.

2. Starting with Page

3. Ending with Page: use a very large number if you want to apply the hotspot to all pages and you don’t know how many pages are in the document).

4. Left (in millimeters): The left edge of the hotspot rectangle (relative to top left corner of the page).

5. Top (in millimeters). The top edge of the hotspot rectangle (relative to top left corner of the page).

6. Width (in millimeters). The width of the hotspot rectangle

7. Height (in millimeters). The height of the hotspot rectangle.

8. Link. for example: "http://www.MilletSoftware.com" or "mailto:ido@MilletSoftware.com" or "file:///c:\\temp\\helloworld.bat"


9. Text: the text to add inside the hotspot rectangle (the text font size will be adjusted to automatically fit the text inside the rectangle area. Leave blank (as demonstrated above) if you don’t want to add any text.  Do not include the character ‘>’ inside the text.

10. Text Vertical Alignment: Top, Center, or Bottom. Leave blank (as demonstrated above) if you don’t want to add any text.

11. Border: 1 for visible border, 0 for no border  (default for missing or invalid value is 1)

Notes:

You can have multiple PDF_LinkToWeb command line arguments in a single command line.

 

You can use field or formula names within the command line argument (just like you drag & drop fields & formulas into the various options in the 3rd tab within Visual CUT.  The dynamic content of these fields/formulas would be substituted into the command line argument. For example (all in one line):
"PDF_LinkToWeb:{@pdf_file}>1>99>40>60>50>10>{@Link}>{@Text}>Center>1"
 


Adding an Images with an Optional Hotspot to a PDF File

You can instruct Visual CUT to add an image with an optional hotspot (a link to a web page, email, or a local file.  This can be useful when you wish to use a button image as a hotspot indication or when you wish to add a company logo to a range of pages.    

The command line argument structure is as follows:

"PDF_AddImage:c:\test.pdf>1>99>40>60>50>10>http://www.IBM.com>c:\temp\IBM.png>0"

The parameters (after the ":") are separated by 10 ">" and are as follows:

1. pdf file to which the hotspot would be added.

2. Starting with Page

3. Ending with Page: use a very large number if you want to apply the hotspot to all pages and you don’t know how many pages are in the document).

4. Left (in millimeters): The left edge of the hotspot rectangle (relative to top left corner of the page).

5. Top (in millimeters). The top edge of the hotspot rectangle (relative to top left corner of the page).

6. Width (in millimeters). The width of the hotspot rectangle (image will be resized to fit)

7. Height (in millimeters). The height of the hotspot rectangle (image will be resized to fit)

8. Link. for example: "http://www.MilletSoftware.com" or "mailto:ido@MilletSoftware.com" or "file:///c:\\temp\\helloworld.bat" or "c:/temp/my_media_file.wmf"  
Leave blank if you don’t want the image to act as a hotspot.


9. Image File: the path and name of the image file.  You can use images of the following types:
                         BMP, TIFF, JPEG, PNG, GIF, WMF and EMF.

10. Border: 1 for visible border, 0 for no border  (default for missing or invalid value is 1)

Notes:

You can have multiple PDF_LinkToWeb command line arguments in a single command line.

 

You can use field or formula names within the command line argument. The dynamic content of these fields/formulas would be substituted into the argument. For example (all in one line):
"PDF_AddImage:{@pdf_file}>1>99>40>60>50>10>{@Link}>{@Logo}>1"

You can use this site to create .png button images with text of your choice:
http://nyphp.org/content/presentations/GDintro/gd26.php        
image


Adding Links to Files/URL/eMail/Pages Using Formulas as Tags

Using a command line argument, you can instruct Visual CUT to look for invisible tags inside the pdf file (Crystal formulas with font color set to white) and to replace them with links (hotspot with optional image) to other files, web urls, email, or another PDF page. Here's an example of the command line argument structure:

"PDF_Link_Tags:c:\temp\Sales in {@Year_Parameter}.pdf"  Or

"PDF_Link_Tags:Source_pdf_file>target_pdf_file"
If only one pdf file is specified (as in the top example), then the source file becomes also the target file. The Crystal formulas act as tags for controlling the location, size, border, image, and behavior of the desired links. 

 

Setting Up a Crystal Report with pdf field tags

You can download a sample report demonstrating the technique from:
www.milletsoftware.com/Download/Visual_CUT_9_PDF_Link_Tag.rpt
Sample pdf output is at: www.milletsoftware.com/Download/Link_Test.pdf

 

The sample report uses a {@PDF_Link_Tag_Sample} formula to demonstrate a File link to an image file and a {@PDF_Link_To_Page_N_Plus_1} formula to demonstrate a Page link to another page in the same document. There are no restrictions on the number or names of the formulas you can use. 

 

The location of the link tag formula on the report layout controls the location of the file links it would generate. The links would be created for each rendered instance of the formula. For example, if you place the formula in a Group Footer you will generate a link for each Group.

 

The location (top left corner) of the rendered formula instances controls the location of the hyperlink in the pdf file.  The width and height of the hyperlink hotspot is controlled by the formula text, not by the formula field size.

 

The formula text must be rendered within the formula boundaries in a single line.  Use very small font sizes (even 2 or 1) to achieve this.  Set font color to White to hide the formula or, if you keep the PDF_Tags_Delete_Default option as True, Visual CUT removes the tag text after processing it.
The following page demonstrates (and comments on) the structure of the required formula text.


Notes:

As always, you can use field or formula names within the command line argument. The dynamic content of these fields/formulas would be substituted into the argument.
Also, Report/Group L1 tags may refer to fields/formulas (e.g. "#Link_Tag::{@Tag_GF1_Info}#"). But keep in mind that the referenced field/formula must be placed on Report or Group-level section to be recognized. And also remember that if you are not bursting the report, you should not be referencing only Report-level fields/formulas.

The hyperlink hotspot rectangle created by Visual CUT doesn’t provide any text.  You can provide the text within the Crystal report or you can include a directive to fit an image into the hotspot rectangle.  This can provide an intuitive button for the user to click & follow the hyperlink.  There are several free web sites that generate.png button images with text of your choice.

In Crystal, use non-proportional font for the tag formula (avoid Calibri and Bold/Italic).
Avoid Paragraph spacing option of "Exact".

Visual CUT can remove pdf processing tags from the pdf file after processing those tags.  This is controlled by an entry called PDF_Tags_Delete_Default under the [Options] section of DataLink_Viewer.ini. By default, this option is set to True. 

 

Formula Example from the Sample Report

Here is the {@PDF_Link_Tag_Sample} formula from the sample report at: 
www.milletsoftware.com/Download/Visual_CUT_9_PDF_Link_Tag.rpt

// Make the font size very small (2 or even 1 point) so that the whole

   // content displays within the formula boundaries in a SINGLE line.

// The location (top left corner) of the rendered formula instances

   // control the location of the link.

// link to pdf file in same folder: "file name"

// link to non-pdf file in same folder: ".file name"

// link to non-pdf file in 1-level higher folder: "..file name"

 

// The formula always starts with "#Link_Tag::" and ends with "#"

"#Link_Tag::" +

"PDF" +  "||" +  // Link Type: "PDF" for links to a page in another pdf file. 
                                // "Page" for links to a page in same pdf file

                                // "File" for links to other file types.

                                // "MAIL" for mailto.

                                // "HTTP" for web link.  Instead of file, specify URL (e.g. www.abc.com)
                                    // ""  (blank) for other types of links (e.g. Tel:)

{Product.Product Name} + ".pdf" + "||" + // The file/url to link to. Blank if Link Type = "Page"
"" + "||" + // [optional] file to test it exists, and abort otherwise.

"1" + "||" +   // page destination in target file (ignored if not pdf).  Zoom is inherited.
                    // to specify both PageN & Zoom,
                    // use a "
;" separator: "1;100" (page 1, zoom 100%)
                    // -1 zoom value = Fit Page
                    // -2 zoom value = Fit Width

"70;20" + "||" +   // hot spot boundaries in points: width;height

                                // (note: if 4 arguments are provided,

                                // they are treated as: shift_x;shift_y;width;height)                  

"1" + "||" +   // New Window Option. 1: opens target pdf file in a new Window

                                                         // 0: opens target in current window)

"0" + "||" + // Border Option: 1: Show Border.  0: No border

"c:\temp\Click_to_View.png" +  // [optional] path & name of Image File to fit

                                // You can use images of the following types:

                                // BMP, TIFF, JPEG, PNG, GIF, WMF and EMF.

"#"

Embedding Files as Attachments inside a PDF File

Note: in most cases, you should skip this page. The following section describes a more powerful technique that not only embeds files, but also provides links to them.

 

Using a command line argument, you can instruct Visual CUT to embed files as internal attachments inside a given pdf file.   The command line argument structure is as follows:

"PDF_Embed:PDF_File<<file1::Mime Type::title||file2::Mime Type::title…"

The parameters (after the ":") begin with

1. PDF_File: The PDF file within which you wish to embed files.

Then, after a "<<" separator, you can specify any number of embedded files separated by "||"
Each embedded file is specified as 3 arguments separated by "::"
 

1. File Path and Name
    Note: If a path is not specified, the path from a previous embedded file is used


2. The MIME Type of the file.  For example, application/pdf or image/jpg, etc.
    see http://www.w3schools.com/media/media_mimeref.asp for a list of MIME types
    If you leave blank, Visual CUT would detect the MIME type based on file extension.

3. The Title to uniquely identify the embedded file.

For example:
"PDF_Embed:c:\temp\test.pdf<<c:\temp\INV.pdf::application/pdf::Invoice||Sig.jpg::image/jpg::Signature"
 

Important Note: you can use field or formula names within the command line argument (just like you drag & drop fields & formulas into the various options in the 3rd tab within Visual CUT).  The dynamic content of these fields/formulas would be substituted into the command line argument.






 

Adding Links and Embedded Files Using Crystal Formulas as Tags

A command line argument can instruct Visual CUT to look for tags inside the pdf file (text from Crystal formulas). When a Link_Tag with EMBED directive is found, the file specified in the tag is embedded inside the pdf file and a hotspot area designated with an icon, in the location of the tag, is created to link to that embedded file. Any file can be embedded, and embedded pdf files can have their own embedded files, which supports multi-level drill-down scenarios.  See video demo: www.milletsoftware.com/Download/Visual_CUT_PDF_Embed/Visual_CUT_PDF_Embed.html


This allows you to deliver a PDF with drill-down or added content that the user can bring up by double-clicking a link.  This is like on-demand subreports, except that:
1. the content has been pre-rendered
2. the subreports can contain their own subreports
3. the embedded files can be any file type (pdf, excel, Word, image, audio, video ...) 
4. the container pdf can be password protected and/or digitally signed by Visual CUT

If the embedded file is a pdf file, PDF Xchange Viewer opens it as new tab inside the main pdf. Other viewers, such as Acrobat Reader 9 open the embedded pdf in a new viewer window. 

Here's an example of the command line argument structure:

"PDF_Link_Tags2:c:\temp\Sales in {@Year_Parameter}.pdf"

Or

"PDF_Link_Tags2:Source_pdf_file>target_pdf_file"
If only one pdf file is specified the source file becomes also the target file.

 

Setting Up a Crystal Report with Link_Tag Formulas

You can download a sample report demonstrating the technique from:
www.milletsoftware.com/Download/Visual_CUT_PDF_Link_Tag_File_Embed.rpt

Sample pdf output is at: www.milletsoftware.com/Download/Visual_CUT_PDF_Embedded_Drill_Down_Sample.pdf

 

The sample report uses a {@PDF_Link_Tag_1} formula in Group Header 1 to demonstrate a file embedding link. There are no restrictions on the number or names of the formulas you can use. 

 

The location of the link tag formula on the report layout controls the location of the hotspot and link icon  it create for each rendered instance of the formula. The top left corner of the rendered formula instance controls the location of the hyperlink in the pdf file.  The width and height of the hyperlink hotspot is controlled by the formula text, not by the formula field size.

 

The formula text must be rendered all within the formula boundaries in a single line.  Use very small font sizes: 2 or even 1 to achieve this.  Then, turn the font color to White to make the formula invisible or, if you keep the PDF_Tags_Delete_Default option in DataLink_Viewer.ini as True, Visual CUT removes the tag text after processing it.

 

The following page demonstrates (and comments on) the structure of the required formula text.



As always, you can use field or formula names within the command line argument. The dynamic content of these fields/formulas would be substituted into the argument.

Visual CUT can remove pdf processing tags from the pdf file after processing those tags.  This is controlled by an entry called PDF_Tags_Delete_Default under the [Options] section of DataLink_Viewer.ini. By default, this option is set to True. 

 

Formula Example from the Sample Report

Here is the {@PDF_Link_Tag_Sample} formula from the sample report at: 
www.milletsoftware.com/Download/Visual_CUT_PDF_Link_Tag_File_Embed.rpt

// Make the font size very small (2 or even 1 point) so that the whole

   // content displays within the formula boundaries in a SINGLE line.

// The location (top left corner) of the rendered formula controls the location of the link.

// The formula always starts with "#Link_Tag::" and ends with "#"

"#Link_Tag::" +

"Embed" +  "||" +  // Link Type. Use lower case "embed" to ignore (skip) missing files

"c:\temp\Sales for " + {Product_Type.Product Type Name} + ".pdf" + "||" + // The file to embed

"" + "||" + // MIME Type of the file to embed.  Leave blank for automatic identification

"Double-Click to See" + "||" +             // Hotspot Tooltip Header Line

"Detail for " + {Product_Type.Product Type Name} + "||" + // link description (tooltip 2nd line)

"18;18" + "||" +   // hot spot boundaries in points: width;height
                            // (4 arguments instead of 2 are treated as: shift_x; shift_y; width; height)                   

"0" + "||" +       // Icon Option for the link:
//          0 = Standard Icon (push-pin)

                        //          1 = 28x28 disk image

                        //          2 = No icon

                        //          3 = Graph

                        //          4 = Paperclip

                        //          5 = Tag
//          6
= Solid white rectangle

                        //          You may add 1000 to 1100 for transparency of 0% to 100%
//            the last digit indicates the icon. 10
74 = 70% transparent Paperclip  

"" +                  // [optional] Image File to fit as background e.g. c:\temp\file.png

                                //supported types: BMP, TIFF, JPEG, PNG, GIF, WMF and EMF.

"#"




 

The sample PDF:
www.milletsoftware.com/Download/Visual_CUT_PDF_Embedded_Drill_Down_Sample.pdf

demonstrates a case of embedded pdf files within embedded pdf files. It was created using a batch file with 3 command lines:
1st line bursts a report to generate the lowest-level pdf files (one file for each Product).

2nd line bursts a report to Product Type PDFs and embed in them the Product PDFs.

3rd line exports the Master PDF and embeds in it the Product Type PDFs.

"C:\Program Files\Visual CUT 11\Visual CUT.exe" -e "C:\temp\DrillDowns2_By_Product.rpt"

 

"C:\Program Files\Visual CUT 11\Visual CUT.exe" -e "C:\temp\DrillDowns1.rpt"
           "PDF_Link_Tags2:c:\temp\Sales for {Product_Type.Product Type Name}.pdf"

 

"C:\Program Files\Visual CUT 11\Visual CUT.exe" -e "C:\temp\Master.rpt"
          "PDF_Link_Tags2:c:\Temp\Visual_CUT_PDF_Embedded_Drill_Down_Sample.pdf"

 

Note: the PDF_Compress command line argument can reduce the resulting pdf file size.

 

Generating ZUGFeRD Invoices

Visual CUT can generate PDF invoices following the ZUGFeRD electronic data exchange standard. It embeds the XML file (providing the invoice data as machine readable format) and also sets up the document as PDF/A-3b according to the ZUGFeRD specification.

You achieve this by using the same PDF_Link_Tags2 command line argument as above. For example: "PDF_Link_Tags2:c:\temp\invoice.pdf>c:\temp\ZUGFeRD_invoice.pdf".
You also use the same "#Link_Tag:: …" content in the tag formula but instead of 'Embed' you use 'Embed_ZUGFeRD' as shown in this example:

 

"#Link_Tag::" +

"Embed_ZUGFeRD" +  "||" +  // Link Type

"c:\temp\ZUGFeRD-invoice.xml" + "||" + // The file to embed

"" + "||" + // MIME Type of the file to embed.  Leave blank for automatic identification

"Double-Click to Open" + "||" +             // Hotspot Tooltip Header Line

"Invoice" + "||" + // link description

"18;18" + "||" +   // hot spot boundaries

"0" + "||" + // Icon Option

"c:\temp\Yellow_BackGround.png" + // [optional] Image File to fit as background

"#"




 

Adding Links to Files by Detecting File References in PDF Text

Using a command line argument, you can instruct Visual CUT to look for file references in the text of a pdf file and automatically add colored hotspots over these file references that link to the specified files.  Here's an example of the command line argument structure (all in 1 line):

"PDF_Auto_File_Link:c:\In.pdf>>.>>.pdf;.mp3>> (>>0>>)>>255;255;0>>True>>c:\Out.pdf"


The parameters (after the ":") are separated by ">>" and are as follows:

1. Source pdf file to process

2. Base Path where the linked files are found. There are several options here:
    a) no base path (leave blank) if the file references in the pdf are specified with full paths
    b) simple base path (e.g., c:\my archive\) to prefix any file reference
    c) relative path: . (for same folder as the pdf file) .. (for parent folder), etc.

3. File Extensions to process (separated by a semi-colon).

4. Start Text indicating start of file reference.  In the example above, file references are assumed to always start after a  (  

5. Number of characters to include in the file reference from the Start Text. In the example above, no text (0 characters) from the Start Text is included. However, there can be many cases where some text should be included. For example, if the Start Text is (c:\ then the number of characters to include should be 3.

6. End Text indicating end of a file reference. In the example above, file references are assumed to always end with a )    (note: can be left blank)

7. Color of Hot Spot in RGB Values (e.g., yellow: 255;255;0).  Note: drawn with 80% transparency, so use strong colors. (see RGB #s at: http://web.njit.edu/~kevin/rgb.txt.html )

8. True/False: Should Visual CUT check for file existence of the file references and generate a failure message listing missing files (note: the output file with the generated links is generated, but the process will report a failure and further actions such as emailing would be aborted).


9. The Output PDF File. If left blank, the source pdf file would be updated.


Notes:

-          Machine must have at least one printer installed

-         Here is an example of yellow hotspots & links generated for file references detected inside a pdf file:
image                                  

Detecting Additional File References Using Wild Card Tokens

The approach above relies on start and end strings. However, there are scenarios where the text to be detected doesn’t have consistent start and end strings.  Instead, the target text may have a predictable structure such as DOC##### where the text always starts with ‘DOC’ and continues with 5 digits (e.g., ‘DOC01207’). 

When a command line already has a PDF_Auto_File_Link argument, you can direct Visual CUT to search for and generate links for additional targets by adding a command line argument such as this:
…"PDF_Auto_File_Link_Tokens:..\Multimedia\MM#####.wmv||..\Documents\DOC#####.pdf"


Alternatively, you can set this as a global option by adding the following entry in DataLink_Viewer.ini (under the [Options] section):

PDF_Auto_File_Link_Tokens=..\Multimedia\MM#####.wmv||..\Documents\DOC#####.pdf

 

Additional target are separated by ‘||’ and include the relative or absolute path to the target files.

The process attempts to locate text targets with the specified file extension as well as without it. In the examples above, the first additional target is any text containing a pattern matching:
a) MM#####.wmv  (for example MM12345.wmv)

Or, 
b) MM##### (for example MM12345)

Note: the only wild cards allowed for this option are:

1.      # : matched any single digit in that position

2.      ? : matches any single character (including digits) in that position




 

Adding Digital Signature to a PDF File

You can instruct Visual CUT to add a digital signature to a PDF file. The command line argument structure is as follows (as always, it must be all in one line):

"PDF_Sign:Input_File>>Output_File>>Open_Password>>Sig_Field
                             
 >>pfx_File>>pfx_Password>>Reason>>Location>>Contact"

The parameters (after the ":") are separated by ">>" and are as follows:
1. Input File: path and name of the pdf file to sign
2. Output File: leave blank if you wish to overwrite the original pdf file

3. Open_Password: if the pdf file is not password protected, leave this option blank
4. Signature Field Name: if the field doesn’t already exist, Visual CUT creates it
5. pfx File: path and name of the PKCS#12 certificate/private key file (.pfx file)
6. pfx_Password: password to open the pfx file
7. Reason: optional text indicating reason for signing
8. Location: optional text indicating where the document was signed (e.g., New York)
9. Contact: optional text indicating contact information for the signer

Notes:

As always, you can use field or formula names within the command line argument (just like you drag & drop fields & formulas into the various options in the 3rd tab within Visual CUT.  The dynamic content of these fields/formulas would be substituted into the command line argument.

 

Using a Digital Certificate Token

To sign using a usb token (e.g. AATL digital certificate signature token from Globalsign), replace the pfx File argument with the cn (Subject Name) of your certificate
(e.g. Development). And leave the pfx_Password argument as blank.

To avoid repeated prompts for token password, set the token options to remember the password. For example, using SafeNet Authentication Client Tools, go to Settings, Client Settings, Advanced tab, and set the option of Automatic logoff after token inactivity to 'Never'. See image.


 

Redacting Text in a PDF File

To redact text in a PDF file, the command line argument structure is as follows (as always, it must be all in one line):

"PDF_Redact:Input_File>>Output_File>>Open_Password>>Target_Strings
                             
 >>Target_Wild_Cards>>Target_Regular_Expressions>>
                             
  >>Color>>Options "

The parameters (after the ":") are separated by ">>" and are as follows:
1. Input File: path and name of the source pdf file
2. Output File: leave blank if you wish to overwrite the original pdf file

3. Open_Password: if the pdf file is not password protected, leave this option blank
4. Target_Strings: literal strings separated by ‘||’
5. Target Wild Cards: wild card expressions separated by ‘||’
6. Target Regular Expressions: separated by ‘||’
7. Color: e.g. Black or Silver
8. Options: leave blank (for future use)

Example: "PDF_Redact:C:\temp\Source.pdf>>C:\temp\Redacted.pdf>>
                          >>trump||clinton>>???@gmail.com>>\d{3}-?\d{2}-?\d{4}>>Silver>>"

See Video Demo. See Sample image.

Notes:

1.                  As always, you can use field or formula names within the command line argument.

2.                  Regular Expressions are more powerful and more predictable than wild cards.
Here is a good resource for experimenting with Regular Expressions.

3.                  The redaction provided by Visual CUT is true redaction, as opposed to fake redaction. Visual CUT truly removes the underlying text as opposed to just drawing black boxes over it. Read about how lawyers used fake redaction by mistake.

Highlighting Text in a PDF File

To highlight text in a PDF file, the command line argument structure is as follows
(as always, it must be all in one line):

"PDF_Highlight:Input_File>>Output_File>>Open_Password>>Target_Strings
                             
 >>Target_Wild_Cards>>Target_Regular_Expressions>>
                             
  >>Color>>Options "

The parameters (after the ":") are separated by ">>" and are as follows:
1. Input File: path and name of the source pdf file
2. Output File: leave blank if you wish to overwrite the original pdf file

3. Open_Password: if the pdf file is not password protected, leave this option blank
4. Target_Strings: literal strings separated by ‘||’
5. Target Wild Cards: wild card expressions separated by ‘||’
6. Target Regular Expressions: separated by ‘||’
7. Color: e.g. Black or Silver
8. Options: leave blank (for future use)

Example: "PDF_Highlight:C:\temp\Source.pdf>>C:\temp\Redacted.pdf>>
                          >>trump||clinton>>???@gmail.com>>\d{3}-?\d{2}-?\d{4}>>Silver>>"

See Sample pdf with resulting highlights.

Notes:

1.                  As always, you can use field or formula names within the command line argument.

2.                  Regular Expressions are more powerful and more predictable than wild cards.
Here is a good resource for experimenting with Regular Expressions.

3.                  The Sample pdf provides a table of colors and names.

4.                  The color highlights are actually pdf annotations that the recipient can click to add notes to (and others can reply to).

Encrypting & Protecting a PDF File

You can instruct Visual CUT to protect (using advanced 128/256-bit AES encryption) the exported (or any other) PDF file.  The command line argument structure is as follows:

"PDF_PROTECT:Owner_Pass>User_Pass>1>1>0>1>1>pdf_file_path_and_name"

The parameters (after the ":") are separated by a ">" and are as follows:

1. Owner_Password: Keep this password to yourself.  It provides full control over the PDF file.
 

2. User_Password: Give this password to the recipient. The following arguments control
     what the user can do with the PDF file.
     NOTE: If you wish to protect the file but not prompt the user for a Password, leave the
     User_Password option blank.
     For example: "PDF_PROTECT:Owner_Pass>>1>1>0>1>1>"

3. Allow User to Print the File: (1=Yes, 0=No) 1 is typical.
4. Allow User to Copy Text & Images from the File: (1=Yes, 0=No) 1 is typical.
5. Allow User to Edit/Change the File: (1=Yes, 0=No) 0 is typical.
6. Allow User to Add Notes to the File: (1=Yes, 0=No) 1 is typical.
7. Allow User to Print in Full Resolution: (1=Yes, 0=No) 1 is typical.
    Setting this to zero would force low-resolution printing, preventing the document from being
    distilled into a new unrestricted PDF document.

8. OPTIONAL: The PDF file path & name (for example, c:\temp\other_file.pdf). 
    Leaving this argument blank, would default to processing the file being exported. 
    Providing a file name would direct processing to the specified file (even if it's not the
    exported PDF file. 
9.   OPTIONAL: Allow user to Fill Form Fields (if blank, assigned same value as #5 above)

10. OPTIONAL: Allow Copy for Accessibility (if blank, assigned same value as #4 above)
11. OPTIONAL: Allow user to assemble document  (if blank, assigned same value as #5 above)
12. OPTIONAL: New PDF file path & name (for example, c:\temp\protected.pdf)

      When left blank, the protected version is saved under the original file path & name. 
      Specify a new file here if you wish to retain the original unprotected version.
-- option below is new in 6.4002 ---
13. OPTIONAL: Encryption Strength:   128 = Default 128-bit AES (requires Acrobat 7 or later)
                        256 = 256-bit AES (requires Acrobat 9 or later), 256B (requires Acrobat X or later)
for example:
   "PDF_PROTECT:123>{@Pass}>1>1>0>0>1>c:\test.pdf>1>1>0>c:\protected.pdf>256"

Note: you can use field or formula names within the command line argument (just like you drag & drop fields & formulas into the various options in the 3rd tab within Visual CUT.  The dynamic content of these fields/formulas would be substituted into the command line argument. Among other things, this allows you to easily protect individual PDF exports with different passwords for each group.  For example (all in one line):
…"PDF_PROTECT:my_pass>{@Emp_Pass}>1>1>0>1>1>c:\{@Year} Archive\Sales
 For {Emp_Name} in {@Month_Name}.pdf"



Merging PDF Files

Using a command line argument, you can instruct Visual CUT to merge any number of PDF files.  While each Crystal report is limited to a single paper orientation (either portrait or landscape), this feature allows you to combine multiple report outputs even if they have different paper orientations.  The command line argument structure is as follows:

"PDF_MERGE:PDF_File_List>PDF_File_Target"

The parameters (after the ":") are separated by a ">" and are as follows:

1. PDF_File_List: comma separated list of the source files in the order they should be merged.
    If all source files share the same folder, you may specify the full path just for the first file.
    As discussed in the next few pages, you can use wild cards, file lists in text files, and 
    dynamic references to specify the files to be merged.
    

2. PDF_File_Target: the file path & name for the resulting merged PDF file.

3. Optional: BM_By_FileName add a bookmark for each file according to its file name.

 

4. Optional: leave blank or specify: M1 , M2, or M3
    These codes direct Visual CUT to use alternative merge methods that differ in their speed and approach. If the default approach is not 100% successful, try one of these alternatives. 

5. Optional: owner password in case one or more of the source files is password protected. All the encryption settings (owner and user passwords, and protection settings) of the last protected file in the list of source files would be applied to the resulting merged document.
Note: If the owner password is blank, specify VC_BLANK as the password.

Notes:

·         If a source file is not found, a warning is written to Failure.log and the process continues after skipping that file. 

·         specifying the 4th / 5th optional argument requires that you also specify the 3rd / 4th arguments
 (you can leave the 3rd /4th arguments blank as in: file list>target>>M2>>sesame). For example:
   "PDF_MERGE:c:\temp\F1.pdf,F2.pdf,F3.pdf>c:\temp\Result.pdf>>M2>sesame"

·         M2 is fast but may have problems with input files that have different page orientations.

·         M3 should not be used when using the techniques described in "Specifying Bookmarks when Merging PDF Files" or in "Using the Merged File Names to Generate Bookmarks". It is useful in cases where M2 fails to handle certain malformed pdf files.

 






 

Dynamic File Names

You can use field or formula names within the command line argument. The dynamic content of these fields/formulas would be substituted into the command line argument.

For example, you can use Visual CUT to:
1. burst Sales information (Portrait) by Product Type into individually named pdf files
2. burst Returns information (Landscape) by Product Type into individually named pdf files
3. burst Complaints information (Portrait) by Product Type into individually named pdf files  
    AND at that stage, use a command line argument to merge the 3 outputs for each Product
    Type, by using the following command line argument
    (Note: you should have no line breaks in the actual command line):


"PDF_MERGE:C:\temp\Sales_{@Prod_Type}.pdf,Returns_{@Prod_Type}.pdf,
      Complaints_
{@Prod_Type}.pdf>c:\temp\{@Prod_Type}.pdf"


   If the current bursting cycle is for a Product_Type of "Gloves," the command line argument then gets processed as:

"PDF_MERGE:C:\temp\Sales_Gloves.pdf,Returns_Gloves.pdf,Complaints_Gloves.pdf>
     c:\temp\
Gloves.pdf"

You can then e-mail (or staple-print) the combined PDF file to each Product Type manager.


Using a Text File to Specify Files for Merging

If you have a text file containing the list of files to be merged, such as shown below, you can instruct Visual CUT to use the text within that file as the list of files to be merged using the key word "List_File:" followed by the path & name of the text file. For example:
"PDF_MERGE:List_File:c:\temp\FileList.txt>c:\temp\Result.pdf"

image


Using Wild Cards to Specify Files for Merging

You can also specify file names using wild cards

For example, to send all pdf files in the current month folder under the current customer:

"PDF_MERGE:C:\VC_Export\{customer.cust_id}\{@Month}\*.pdf>c:\temp\Result.pdf"

 

and to merge all pdf files that start with the current Customer ID:

"PDF_MERGE:C:\VC_Export\{customer.cust_id}*.pdf>c:\temp\Result.pdf"


Controlling Merged Bookmark Colors

Note: these instructions are no longer needed.  From November 9, 2009, Visual CUT keeps bookmark colors during merging of pdf files. Only for backward compatibility, the older functionality below is preserved.

During the merging process, bookmark colors (see Controlling PDF Bookmark Colors (& Text) on page 172) from the first file in the merged list are maintained.  To apply colors to the merged bookmarks from any file, you include (anywhere) in the Bookmark Label the color constants of crMrgRed, crMrgBlue or crMrgGreen (note: case sensitive). Visual CUT would then set the color of the bookmark text accordingly (and remove the color constant text from the label). 


Specifying Bookmarks when Merging PDF Files



During the merge process, you may want to add bookmarks for each input pdf file, so that the user can easily navigate the merged pdf file. To demonstrate how this can be done with Visual CUT, imagine you need to merge 4 pdf files:

image


2 pdf files with information about sales:
    Product_Sales.pdf
    Region_Sales.pdf

2 pdf files with information about profits:
    Product_Profits.pdf
    Region_Profits.pdf

You want the merged pdf to include bookmarks linking to the starting page of each of these 4 sections.  The bookmarks should look like the example above.

Visual CUT allows you to specify, for each pdf file being merged, a chain of bookmark levels to which the content would be linked. 

Let's assume you use the option to specify the list of files to merge using a text file (c:\temp\my_list.txt).  The command line may look like this: 


… "PDF_MERGE:List_File:C:\temp\my_list.txt>c:\temp\result.pdf"

and the c:\temp\my_list.txt would look like this:

c:\temp\Product_Sales{BM:Sales||+||1||225;0;0>>By Product||-||0||0;0;0}.pdf

c:\temp\Region_Sales{BM:Sales||+||1||225;0;0>>By Region||-||0||0;0;0}.pdf

c:\temp\Product_Profits{BM:Profit||+||1||225;0;0>>By Product||-||0||0;0;0}.pdf

c:\temp\Region_Profits{BM:Profit||+||1||225;0;0>>By Region||-||0||0;0;0}.pdf

 

The information about the top-level bookmarks associated with each file is embedded within an optional {BM: } tag, just before the ".pdf" ending the file name. 

 

Each node in the top-level bookmark chain is separated by >>  and contains 4 elements separated by || (2 vertical bars):

1. Title: the text to appear as the label of the bookmark
2. Expand Status:  + to open the bookmark or to collapse it.
3. Style0=regular  1=Bold   2=Italic   3=Italic Bold
4. Color as RGB:  3 numbers between 0 and 255 separated by ";"
    Black=0;0;0  Maroon=225;0;0 etc. (see RGB #s at: http://web.njit.edu/~kevin/rgb.txt.html )


So the first line in the file merges Product_Sales.pdf and link its starting page to a "Sales" bookmark (expanded, bold, Maroon) and, below that, a "By Product" bookmark (collapsed, regular, Black).  The second file uses the same top node and adds a "By Region" Bookmark.
Notes:

  1. If the top nodes in the chain already exist, only the lower new nodes would be created.  This is why in the example above, the Sales and Profit nodes are each created only once. 
  2. If the merged pdf file contains bookmarks, they will be transferred under the lowest node in the specified node chain for the file.
  3. The resulting bookmarks are detected by the PDF_TOC command line argument, so you can automatically create a table of contents based on them.
  4. You can use field or formula names within the PDF_Merge command line argument (just like you drag & drop fields & formulas into the various options in the 3rd tab within Visual CUT.  You can even do the same with the content of the text file specifying the files to merge.  The dynamic content of these fields/formulas would be used.  In the case of specifying bookmarks during the merge process, this means that the title, style, and color of these bookmarks can be controlled via the Crystal report fields, parameters, and formula logic.

 

Using the Merged File Names to Generate Bookmarks

Particularly when using wildcards to merge files, but also when wishing to avoid the effort of manually specifying bookmark labels and styles, you can simply instruct Visual CUT to add bookmarks based on the file name of each merged pdf file.

To enable this functionality, you add a 3rd part to the PDF_MERGE command line argument:

… "PDF_MERGE:c:\{@Branch}\*.pdf >c:\temp\{@Branch} Reports.pdf>BM_By_FileName"

As shown in the example above, you simply add >BM_By_FileName to the end of the command line argument. 

In the example above, several reports may be bursted to different {@Branch} folders.  The last report may include a PDF_Merge command line argument so that each bursting step for that report will also take care of merging all the pdf files in the currently processed Branch and add bookmarks based on the file names being merged.

Obviously, the bookmark labels do not include the path to the pdf file nor the ‘.pdf’ extension.




 

Using the Merged Folder & File Names to Generate 2-Level Bookmarks

If you specify multiple folders in your merge process, you may want to generate a 2-level bookmark structure whereby:
a) the bottom folder name sets the level-1 bookmark name and
b) the file name controls the level-2 bookmark name.

This is similar to the previous section except that instead of BM_By_FileName you need to specify BM_By_Folder_FileName like this:

"PDF_Merge:c:\tmp\Accessories\*.pdf,c:\tmp\Bikes\*.pdf>c:\tmp\My.pdf>BM_By_Folder_FileName"

Here is the resulting bookmark structure:

image

Notes:
a) lowest-level folders specified explicitly in the list of files do NOT generate a bookmark if the first letter in the folder name is spelled with a lower-case letter in the argument (it doesn't matter if the first letter in the actual name of the folder is upper case).
b) lowest-level folders located via wildcard search (e.g. *.pdf) do NOT generate a folder bookmark if their name starts with a lower case letter.
c) wildcard searches are recursive, so sub-sub… folders are searched as well. But currently, lowest-level folders (regardless of how deep they are) simply become t1st-level bookmarks.

 

Using the Merged File Names to Generate Multi-Level Bookmarks

Imagine you need to merge 6 employee files into a PDF with 3-level bookmarks.  However, you want to avoid using a text file to specify the multi-level bookmarks:

image

To do this, you embed the multi-level bookmark information inside the pdf file names like so:

image

 

The Bookmark information is contained within the [BM{}] portion. You can use the rest of the text in the file name for other purposes.  In the example above, the numbers at the start of the file name are used to ensure proper alphabetical sorting when using wildcards to specify the files to be merged.  For example: 
... "PDF_MERGE:c:\temp\0?? [BM{*.pdf>c:\temp\Merge_result.pdf>BM_By_FileName"

Each Bookmark level is specified inside a {} and has 4 elements separated by a ^ character:

1. Title: the text to appear as the label of the bookmark
2. Expand Status:  + to open the bookmark or to collapse it.
3. Style:  0=regular  1=Bold   2=Italic   3=Italic Bold
4. Color as RGB:  3 numbers between 0 and 255 separated by ";"
    Black=0;0;0  Maroon=225;0;0 etc. (see RGB #s at: http://web.njit.edu/~kevin/rgb.txt.html )


Merging 1-Page PDF Files into Layers in a Single PDF File

Using a command line argument, you can instruct Visual CUT to merge several PDF files into multiple layers inside a single pdf file.  This is particularly useful for mapping applications where users wish to turn on or off the visibility of certain map layers. 

Here is an example of such a merged file, opened in Adobe Acrobat reader  with the visibility of layers 1 (Streets Layer) & 3 (Stores) turned on:

image

 

 

The command line argument structure is as follows:

"PDF_MERGE_Files_to_Layers:PDF_File_List>PDF_File_Target"

The parameters (after the ":") are separated by a ">" and are as follows:

1. PDF_File_List: comma separated list of the source files in the order they should be merged.
    If all source files share the same folder, you can specify the full path just for the first file.
    If a source file is not found, a warning is written to Failure.log and that file is skipped. 

 

2. PDF_File_Target: the file path & name for the resulting merged PDF file.

For example:
"PDF_MERGE_Files_to_Layers:c:\temp\File1.pdf,File2.pdf,File3.pdf>c:\temp\Result.pdf"


Dynamic File Names

As always, you can use field or formula names within the command line argument (just like you drag & drop fields & formulas into the various options in the 3rd tab within Visual CUT. 


Using a Text File to Specify Files for Merging

If you have a text file containing the list of files to be merged, such as shown below, you can instruct Visual CUT to use the text within that file as the list of files to be merged using the key word "List_File:" followed by the path & name of the text file. For example:
"PDF_MERGE_Files_to_Layers:List_File:c:\temp\FileList.txt>c:\temp\Result.pdf"

image


Controlling Layer Name & Visibility

By default, the name of each layer is set to its source file name (without the .pdf portion) and the visibility of each layer is turned on. You can override these default settings by embedding the desired information inside a {OCG: }  token as demonstrated by the text file sample above. 

The OCG token is inserted just before the ".pdf" portion of each source file. 

The token contains 2 elements separated by || (2 vertical bars):

1. Layer’s name
2. Layer’s initial visibility (True or False).


 

Printing PDF Files

Using a command line argument, you can instruct Visual CUT to print a PDF file. This is useful in combination with the previously discussed option of merging PDF files (see page 196). 
It allows you to merge multiple reports, even if they use different page orientations, and then print and staple the combined output as a single print job.

 

PDF_Print

The command line argument structure is as follows:
"PDF_PRINT:PDF_File>Printer_Name>Page_Scaling>Auto_Rotate_and_Center"

The parameters (after the ":") are separated by a ">" and are as follows:

1. PDF_File: The PDF file you wish to print.
 

2. Printer_Name: the Windows name of the printer.
    Note: If you use "Default" as the printer name, the report gets printed to the default printer.

3. [Optional] Page Scaling: None, Fit, or Shrink (to fit paper size)

4. [Optional] Auto Rotate & Center: True or False


For example:
"PDF_PRINT:c:\temp\Result.pdf>\\myprintsrvr\LASER 02"

or

"PDF_PRINT:c:\temp\Result.pdf>\\myprintsrvr\LASER 02>Shrink>True"

 

Important Note: you can use field or formula names within the command line argument. The dynamic content of these fields/formulas would be substituted into the command line argument.
For example, after you burst and merge multiple reports into a single PDF file for each Product Type (as described in Merging PDF Files), you can print and staple the resulting PDF file for each Product Type using the following command line argument:
"PDF_PRINT:c:\temp\{@Product_Type}.pdf>\\myprintsrvr\LASER 02>Shrink>True"

 If the current bursting cycle is for a Product_Type of "Gloves," the command line argument then gets processed as:
"PDF_PRINT:c:\temp\Gloves.pdf>\\myprintsrvr\LASER 02>Shrink>True"


and the combined output for just Gloves from 3 different reports (with different page orientations) would then be printed and stapled together.  The process would then continue to print and staple the output for the next Product Type.

Notes:
To control number of copies printed, use the Print_Copies command line argument. If the dynamic value is zero, the printout would be skipped.
To control print quality/speed, use the PDF_Print_Mode command line argument.

Shared printers should be named like this: \\SEEMORE3\HP LaserJet P2035n
rather than like this: HP LaserJet P2035n on SEEMORE3


PDF_Clone_And_Print

You may need to print multiple copies within a single print job (perhaps you wish to staple all these copies together). In such cases you can use the PDF_Clone_And_Print argument.
It is identical to PDF_Print except for the addition of number of copies as the last element.

The command line argument structure is as follows:
"PDF_Clone_And_Print:PDF_File>Printer_Name>Page_Scaling>
          Auto_Rotate_and_Center>Copies"

For example:
"PDF_Clone_And_Print:\temp\Result.pdf>\\myprintsrvr\LASER 02>4"

or

"PDF_Clone_And_Print:\temp\Result.pdf>\\myprintsrvr\LASER 02>Shrink>True>4"

 

Important Note: you can use field or formula names within the command line argument (just like you drag & drop fields & formulas into the various options in the 3rd tab within Visual CUT.  The dynamic content of these fields/formulas would be substituted into the command line argument, including the number of copies.
For example:
"PDF_Clone_And_Print:\temp\Result.pdf>\\myprintsrvr\LASER 02>{@Copies}"




 

Printing PDF Files To Multiple Printer Trays

You can instruct Visual CUT to split the printout of a single PDF file to multiple printer trays. For example, you may want to print the first page of a pdf file using a tray containing your company's letterhead, while the rest of the printout should use regular paper from another tray. 

 

Visual CUT provides two ways to split the printout of a PDF file to multiple printer trays:

  1. Use the PDF_Print_Split command line argument to specify the page ranges
  2. Use the PDF_Print_Split_Tag command line argument to indicate that Crystal (or any other process) has embedded text tags (#Tray::tray_name/number#) in the pdf on each page or on each page where a tray change should occur.

 

Using PDF_Print_Split

 

This command line argument structure is as follows:
"PDF_PRINT_SPLIT:c:\temp\Test.pdf>1::\\srv2\Laser3::Top||2to5::\\srv2\Laser3::Tray 2 ||6to999::\\srv2\Laser3::Bypass Tray"

The parameters (after the ":") are as follows:

1. PDF_File: The PDF file you wish to print.
 

2. Page_Range::Printer_Name::Tray_Name

The 2nd element can be repeated as many times as you need, with different page ranges, different trays, and even different printers.  Use "||" to separate each instance from the instance following it.


Page range can be specified as a single page or as a range, using 'to' to separate the numbers.

 

If you use "Default" as the printer name, the report gets printed to the default printer.

Trays can be specified using their names or using their internal numbers.

 

Important Note: you can use field or formula names within the command line argument (just like you drag & drop fields & formulas into the various options in the 3rd tab within Visual CUT.  The dynamic content of these fields/formulas would be substituted into the command line argument. This allows you to dynamically control the page ranges that are sent to each printer tray!

To control print quality/speed, use the PDF_Print_Mode command line argument.


Using PDF_Print_Split_Tag

 

The advantage of this option is its ability to dynamically control paper trays using formula logic from within Crystal reports.  For example, it makes it easy to print the first and last pages in each group using one tray and print the rest of the pages from another tray. 
 

This command line argument structure is as follows:
"PDF_PRINT_SPLIT_TAG:c:\temp\Test.pdf>\\srv2\Laser3"

The parameters (after the ":") are as follows:

1. PDF_File: The PDF file you wish to print.  

2. Printer_Name  (use "Default" to print to the default printer)

Visual CUT searches each page in the pdf document for text tags that look like:
#Tray::2# (in a case where the tray number is used) or
#Tray::Bypass Tray# (in a case where the tray name is used)

Typically, these tags would be placed as Crystal formulas on the report being exported to pdf. 

For example, this formula (placed in the page header of the report) would cause the 1st page to use tray 3 and the rest of the pages would alternate between Tray 2 and Tray 1:

WhilePrintingRecords;

Global StringVar gs_Printer_Tray;

 

IF gs_Printer_Tray = "" THEN gs_Printer_Tray := "3"

ELSE gs_Printer_Tray := Cstr(Remainder(PageNumber,2) + 1,0);

 

"#Tray::" & gs_Printer_Tray & "#";


Notes:

1.      set the font color of the formula to white, the tag would be invisible on the report as well as on the pdf file, but Visual CUT would still have access to it. Alternatively, if you keep the PDF_Tags_Delete_Default option in DataLink_Viewer.ini as True, Visual CUT removes the tag text after processing it.  Use non-proportional font for the tag formula (avoid Calibri and Bold/Italic).

2.      The tag doesn't have to appear on every page of the report.  Pages that don't have the tag would be printed to the paper tray last specified in previous pages.

 

3.      Tray numbers are not always obvious; "Tray 2" could actually be Tray #3 internally.  Hence, you should probably use Tray Names instead of Tray Numbers in the Tags.

4.      Visual CUT sets the print job names shown in the printer queue to reflect the page range and tray name.  This makes it easy to monitor the process.

5.      Make sure the printer is not setup to automatically select the paper source.

6.      To control print quality/speed, use the PDF_Print_Mode command line argument.


Controlling Print Quality/Speed

You can use the PDF_Print_Mode command line argument to control print quality and speed. The command line argument structure is as follows:

"PDF_Print_Mode:Quality_Option"

The possible Quality_Option values (after the ":") are
1 for Normal quality
2 for high quality
3 for highest quality


 

Adding Back-Pages

In some scenarios, you may need to add to each page in the exported pdf a standard back-page.  For example, invoices may require some legal language on the back of each page.
Assuming you have the standard back-page as a single-page pdf file, Visual CUT can automate the process of:

a)      Exporting the report to a pdf file

b)      Using the PDF_Insert_BackPage command line argument, Inserting the standard
back-page after each page and saving to a new or to the original pdf export 

c)      Printing the resulting pdf file via PDF_Print command line argument.

 

Since the PDF_Print command line argument is already described in the sections above, this section explains how the PDF_Inseret_BackPage command line argument is used:


Using PDF_Insert_BackPage

This command line argument structure is as follows:

"PDF_Insert_BackPage:c:\temp\Export.pdf||c:\temp\BackPage.pdf||c:\temp\Result.pdf"

The parameters (after the ":") are as follows:

1.                  PDF_File: The PDF file that needs a back-page added  to each page.

2.                  BackPage File: The 1-page PDF file to be inserted into the first file.

3.                  The Final File: (that’s the file you would use with PDF_Print)

 

Notes:

  1. If a Final File option is not specified, the process will simply update the source PDF_File.  For example: 
    PDF_Insert_BackPage:c:\temp\{Invoice_N}.pdf||c:\temp\BackPage.pdf"

  2. As always (as demonstrated in the example above), you can use field or formula names within the command line argument (just like you drag & drop fields & formulas into the various options in the 3rd tab within Visual CUT. 

 


 

Saving PDF Files to Image Files

Using a command line argument, you can instruct Visual CUT to take a PDF file and save it to an image file.  The supported image types are: BMP, JPEG, WMF, EMF, EPS, PNG, GIF, or multi-page TIFF.  Here's an example of the command line argument structure:

"PDF_Save_As:c:\temp\Invoice.pdf>c:\temp\Invoice.bmp>BMP>96"

The parameters (after the "PDF_Save_As:") are separated by a ">" and are as follows:

  1. The path & name of the PDF file (typically, this would be the exported file, but you can convert any PDF file).

  2. The path & name of the target image file

    Multi-Page Note: for TIF and G4 TIF export types, a multi-page pdf file results in a Multi-Page TIFF file. For all other image types, an image file for each page would be created with the page number at the end of the file name.  For example, if the Invoice.pdf file in the example above had 3 pages, Visual CUT would create 3 bitmap files: Invoice1.bmp, Invoice2.bmp, and Invoice3.bmp

  3. Image Type: BMP, JPEG, WMF, EMF, EMF+, EPS, PNG, GIF, HTML5, TIF, G4 TIF

  4. Image Quality in Dots Per Inch (DPI): start with 96 and use multiples of that for better quality (but larger file).

 

Notes:

TIF and G4 TIF are not supported on Windows XP or earlier versions.

 

as usual, any of these arguments can contain references to fields or formulas and Visual CUT would dynamically replace the reference with the value in the report.  For example:
"PDF_Save_As:{@export_File_Name}.pdf>{@export_File_Name}.bmp>BMP>96"

 

For PNG, BMP, and JPEG image formats, Visual CUT crops, pads, and borders the images as per global options specified in the Image_Export_Options ini file entry. For detail, see: Embedding Report as Image(s) in Email (new approach).


Adding Form Fields & Submit Buttons to PDF Files

Using a command line argument, you can instruct Visual CUT to look for invisible tags inside the pdf file (Crystal formulas with font color set to background color) and to replace them with form fields such as Text, Checkboxes, Drop-Downs, Digital Signature, and even Submit Buttons (to send form data as XML via email or URL). This means that you can use Crystal Reports to design pdf forms, and Visual CUT to generate and distribute these forms.

 

Here's an example of the command line argument structure:

"PDF_Form_Tags:c:\temp\Sales in {@Year_Parameter}.pdf"
or, to save to a new file:  
"PDF_Form_Tags:{@SourceFile}.pdf>{@TargetFile}.pdf"

The Crystal formulas act as tags for controlling the location, size, and content of these form fields.  Visual CUT adds the form fields and any required JavaScript code.  Users can then enter information into the pdf file, submit (via email or url), print, or save the completed form.

Sample PDF File with Form Fields & Submit Buttons

You can download a sample of such a pdf export with form fields at: 
www.milletsoftware.com/Download/Visual_CUT_PDF_Form_Tags_Unsigned.pdf

image 

Sample Crystal Report with Formulas as Form Field Tags

You can download a sample report demonstrating the technique from:
www.milletsoftware.com/Download/Visual_CUT_PDF_Form_Tags.rpt

 

The sample report uses several formulas:

PDF_Form_Field_Product_Comment (GF2) provides short text area for each Product

PDF_Form_Field_Product_Checkbox (GF2) provides a checkbox to indicate if performance is OK

PDF_Form_Field_Product_Type_Comment (GF1) provide multi-line text area for each Product Type. 
PDF_Form_Field_Product_Type_DropDown (GF1) provides a DropDown to indicate required Action

PDF_Form_Field_Submit_Button_Email_XML (RF) Button to submit form data as XML via email 
PDF_Form_Field_Submit_Button_URL_XML (RF) Button to submit form data as XML via url 


PDF_Form_Field_Text_Secret (RH) provides a hidden form field (to include in XML)
PDF_Form_Field_Text_URL (RH) provides a visible but uneditable form field

PDF_Form_Field_Date (RF) provides a Date Picker (in Acrobat Reader) to select (and enforce) a valid date.
PDF_Form_Field_Signature (RF) prompts for, accepts and displays the user's digital signature.

 

Setting Up a Crystal Report with pdf field tags

There are no restrictions on the number or names of the formulas you can use.  However, each rendered instance must provide a unique form field title (avoid dots). The formula text must be rendered all within the formula boundaries in a single line.  Use very small font sizes: 2 or even 1 to achieve this. 
Use non-proportional font for the tag formula (avoid Calibri andBold/Italic).

Obviously, you may not want to show the formula text on the resulting pdf file. You can turn the font color to White (or same as section background) to make the formula invisible. Better yet, if you keep the PDF_Tags_Delete_Default option in DataLink_Viewer.ini as True, Visual CUT removes the tag text after processing it. In order to allow Visual CUT to remove the tag text after it has been processed, be sure to replace any double quotes or parentheses in the tag text with single quote or square brackets.

 

Each formula instance (Group Footer/Header as well as Page Header/Footer formulas may have many instances) can trigger the creation of a pdf form field. The location (top left corner) of each rendered formula instance controls the location of the pdf form field.  The width and height of the form field is controlled internally -- not by the formula field size.

 

Note: besides Acrobat Reader, there are several 3rd-party PDF Viewers that allow saving PDF files after filling form fields. For example:
http://www.tracker-software.com/product/pdf-xchange-viewer



Formula Example from the Sample Report

The following page demonstrates and comments the structure of the required formula text for one of the formulas in the sample report. You can open the sample report to see the fully-commented syntax for the other form field types.


 

Here is the {@PDF_Form_Field} formula from the sample report at: 
http://www.milletsoftware.com/Download/Visual_CUT_PDF_Form_Tag.rpt

// Make the font size small (even 1 point). Text must stay in formula boundaries in SINGLE line!

// Turn the font color to White to make the formula invisible. Or, if PDF_Tags_Delete_Default in
// DataLink_Viewer.ini is True, tag text is removed automatically after processing.

// Location (top left corner) of the rendered formula instance control location of pdf form field.

 

// The formula always starts with "#Form_Tag::" and ends with "#"

"#Form_Tag::" +

"350;50" + "||" +   // field boundaries in points: width;height (or shift_x;shift_y;width;height)

{Product_Type.Product Type Name} + "_Comments" + "||" + // UNIQUE title of form field

"TEXT" + "||" + // type of form field: TEXT/Date/DropDown/CheckBox/Submit_Button/Signature
"0" + "||" + // For TEXT, max length (0 is no limit). For DropDown, list of values delimited by :::
"NotComb" + "||" + // "Comb" or "NotComb" field (if Comb, specify max number of characters
                                   // above to create an equally spaced "comb" field effect)

"Left" + "||" +             // alignment:  "Left", "Center" or "Right"

"1;Inset;0;0" + "||" +    // Field Border: line width;style (Solid, Dashed, Beveled, or Inset);
                                        // length of dash;length of dash space 

"230;230;230" + "||" +             // Border color using RGB (0;0;128 = Navy Blue)

"255;255;255" + "||" + // Background Color ("255;248;220" = cornsilk1, "255;255;255" = White)

"0;0;0" + "||" +             // Text Color ((0;0;0 = Black)

// Possible font types: Courier, CourierBold, CourierBoldItalic, CourierItalic

                                                // Helvetica, HelveticaBold, HelveticaBoldItalic, HelveticaItalic

                                                // TimesRoman, TimesBold, TimesItalic, TimesBoldItalic

"CourierBold;10" + "||" + // Font type and size

// Initial Field Text Value (Use "" to specify an empty field)

iif({Product_Type.Product Type Name} in ["Saddles", "Locks"], "", "Comments on the information for " + {Product_Type.Product Type Name} + ": ") +  "||" +

"NoScroll" + "||" +       // Scroll or NoScroll

"MultiLine" + "||" +     // SingleLine or MultiLine

"SpellCheck" + "||" +   // SpellCheck or NoSpellCheck

// --- new options in 6.2002: ---

// tool tip shown when hovering over field. Use "Same_As_Text" to display Field Text value

"Product Type Comments [Mandatory if Action is 'Meeting' or 'Conference Call']" + "||" +

"False" + "||" + // Read Only status. If True, user can see but not change the value

"False" + // Hide Field? Useful when user should not see a submitted value

"#"          // The formula always ends with "#"

 

·         VC removes pdf processing tags from the pdf file (after processing) if PDF_Tags_Delete_Default under the [Options] section of DataLink_Viewer.ini is left as True.  To ensure all tags are removed, use Replace() to change double quotes into single.  For example, the form field title can be:
Replace({Product_Type.Product Type Name},"""","'") + "_Comments"

·         To accommodate more text in the tag, you may embed references to fields/formulas in it.

·         To specify child form fields, specify a title of Parent_Field_title.Child_Field_Title.


 

Adding a Digital Signature Form Field

As demonstrated by the sample report, one of the supported form fields is a digital signature. The formula for the digital signature field is simple:

"#Form_Tag::" +

"250;50" + "||" +   // field boundaries in points: width;height

                   // (note: if 4 arguments are provided, they are treated as: shift_x;shift_y;width;height)

"Signature1" + "||" + // title of form field. Use something unique

"Signature" + "||" + // type of form field

"#"


When opening the pdf, the user is prompted by the field to digitally sign the document:


image 

 

After clicking the field and providing a digital signature:

image



 

the user has the option to Lock the Document (so no other changes can be made to it without invalidating the signature):
image

 

 
After saving the PDF to a new file, the field looks like this:

image




Populating Form Field Text or Description via ODBC Query

When dealing with multiline text form fields, you may need to populate the text of the field with very long text that might cause the tag content to spill over more than 1 line.  To address that scenario you may embed a directive to execute a SQL Query via ODBC inside the options for Initial Text or Field Description (tooltip) and Visual CUT would replace the directive with its dynamic result.

 

Here is an example of what the Crystal formula may look like:

"#Form_Tag::" + "350;50" + "||" +  {Product_Type.Product Type Name} + "_Comments" + "||" +  "TEXT" + "||" + "0" + "||" + "NotComb" + "||" + "Left" + "||" + "1;Inset;0;0" + "||" + "230;230;230" + "||" + "255;255;255" + "||" + "0;0;0" + "||" + "CourierBold;10" + "||" +

// Initial Field Text Value (populated via SQL Query

"{ODBC:Customers:: :: ::SELECT [Name] FROM [CUST] WHERE [Cust_ID] = 6}" +  "||" +

"Scroll" + "||" + "MultiLine" + "||" + "SpellCheck" + "||" +

"Product Type Comments [Mandatory if Action is 'Meeting' or 'Conference Call']" + "||" +

"False" + "||" + "False" +"#"  

 

The expression starts with {ODBC: followed by 4 elements separated by :: and

ends with }

1. ODBC DSN (Note: could be different from the DSN used for the Crystal report)

2. User ID (use a single space if not needed, as shown above)

3. Password (use a single space if not needed, as shown above)

4. SQL Statement

MS Access Example:
{ODBC:Customers::User_ID::Password::SELECT [email] FROM [Contacts] WHERE [Customer_ID] = '301'}

 

SQL Server Example:

{ODBC:CONTACTS::sa::xxxxx::SELECT AHD.ctct.Comments FROM

AHD.ctct where AHD.ctct.Comments IS NOT NULL}


Notes:

§  If the SQL statement returns multiple rows, Visual CUT takes care of concatenating the text from all the rows to a single string with carriage return and line feed as the delimiter.

§  The SQL statement syntax depends on your database.  For example, as shown in the samples above, MS Access uses [ ] around field/table names but SQL Server doesn't.

§  You would typically build the expression while using some field/formula values (not names) to control the WHERE clause.


 

Filling PDF Forms

Using a command line argument, you can instruct Visual CUT to fill the fields in a given PDF Form and save the result into a new PDF file.  Here's an example of the command line argument structure:

"PDF_FORM:c:\temp\MyForm.pdf>False"

The parameters (after the "PDF_FORM:") are separated by a ">" and are as follows:

1. The path & name of the PDF form file (used as a template).
 

2. Flatten form fields (True or False)?  If True, as field values get substituted by formula values from the Crystal report, Visual CUT turns the form field into a static portion of the PDF file.  This means the field will no longer act as a field in the new pdf file.  It will simply behave as a static portion of the new PDF file.

Setting Up a Crystal Report to Act as a PDF Form Filler

Each field in a PDF form has a name ("title" in pdf lingo).  In order to fill (or substitute) the value of such a field, your Crystal report should have a string formula with the same name as the PDF form field.  For example, if you desire to fill a PDF form field called "f1-1", you should create a Crystal formula called "f1‑1" providing the desired value for that field. In order to supply a value for a checkbox field (as shown below), use "Yes" as the value for checked and "No" for the value for unchecked.
image
 

The Crystal formulas should be placed in the report header/footer if the value is the same for all records in the report.  It should be placed in Group Level 1 Header/Footer if the value changes for each Level 1 group and you are bursting (generating a different PDF file for each Level 1 Group).  As usual, you may suppress the formulas. 

 

Setting Up the Report in Visual CUT

In Visual CUT, simply set the report to export to PDF and specify the export file name. As usual, you may make the export file path and/or name dynamic (reflecting field/formula values from the report.  Note that if you use the PDF_FORM command line argument, Visual CUT will not export the report to PDF.  Instead, Visual CUT would substitute the form fields in the Form File (specified in the command line argument) and then save the result to the specified export file name.

 


Setting PDF Document Properties after Export (Automatic)

 

After PDF exports, Visual CUT sets the PDF document summary information according to the summary information set for the report in Crystal.     

image



This functionality, as well as the PDF Bookmarks functionality described in the previous section, are enabled by default.  To turn it off, use the Options dialog and uncheck the option of "PDF Exports include Document Properties and Bookmark Processing."


 

Setting PDF Document Properties

You can specify the pdf document properties via the command line argument of PDF_Properties. Here's an example of the command line argument structure:

"PDF_Properties:c:\test.pdf>Ido>{@Invoice_N}>Invoice>Invoice>Ido>Millet Software"

The parameters (after the "PDF_Properties:") are separated by a ">" and are as follows:

  1. PDF file(s):  comma separated list. Can use wild cards!
  2. Author of the PDF file
  3. Title
  4. Subject
  5. Keywords
  6. Creator
  7. Producer
    ----------------------------------------------------------------------
  8. Page Mode:   Normal (or blank)/Outlines/Thumbnails/FullScreen/OCG/Attachments
  9. Open Page      (1 is default)
  10. Zoom               (75 for 75%, 0 for default, -1 for fit in window, -2 for fit width)

----------------------------------------------------------------------

11.  Custom Properties (Name1::Value1||Name2::Value2)
For example, "…>Case Type::Abduction||Case Manager::Officer Krupke"
Any number of pairs delimited by || with a :: separating Key Name from Key Value.

Notes:

       …"PDF_Properties:c:\Inv\*.pdf,c:\test.pdf>Ido>>{@Invoice_N}>>>>Outlines>1>100"

·        Specifying Custom Properties is the same as manually specifying them in Acrobat Pro using File, Properties, Custom Tab. These properties show up in the list of document properties and can be useful for users and for document management systems.

Flatten PDF Files

You can flatten form fields and annotations in pdf files via the command line argument of PDF_Flatten. Here's an example of the command line argument structure:

"PDF_Flatten:c:\Before\*.pdf>>MyPassword>>c:\After\"
or  (for a case with no password):

"PDF_Flatten:c:\Before\*.pdf>>>>c:\After\"    
or (for a case without target folder:

"PDF_Flatten:c:\Before\*.pdf>>MyPassword>>"
or (for a case without password and no target folder:

"PDF_Flatten:c:\Before\*.pdf>>>>"

The parameters (after the "PDF_Flatten:") are separated by a ">>" and are as follows:

  1. PDF file(s) comma separated list. Can use wild cards!
  2. Password (leave blank if the pdf files are not password protected)
  3. Target Folder (leave blank if the flattened pdf files should replace the original files)

 


 

Building an Index PDF Documents

You can build a full-text index for multiple pdf files via the command line argument of PDF_Build_Index. Here's an example of the command line argument structure:

"PDF_Build_Index:c:\temp\dir1||c:\temp\dir2>c:\temp\Index.pdx>"

The parameters (after the "PDF_Build_Index:") are separated by a ">" and are as follows:

  1. List of folders (separated by "||") containing pdf files to be indexed
    Notes:
    1. All pdf files found in these folders and all subfolder (recursive) will be indexed.
    2. Do not include a backslash at the end of each folder path.

  2. Index (.pdx) file path and name
    Notes:
    1. The pdx file will be deleted, if it already exists, when the process starts
    2. If an "Index" folder exists under the folder destination for the pdx file, that folder is deleted when the process starts because this folder needs to be created from scratch by the indexing process.
  3. Options: leave blank.  Reserved for future needs such as specifying maximum amount of time the process should require.  The default is 2 hours.

Notes:

On the Visual CUT machine, Acrobat Pro must be installed and the build index button must be located on the toolbar like this:
image

As usual, any of these arguments can contain references to fields or formulas and Visual CUT would dynamically replace the reference with the value in the report.  For example:
"PDF_Build_Index:{@Folders}>c:\temp\Index.pdx>"


 

Adding an Index File to a PDF Document

You can add an index (.pdx file) reference to a pdf document via the command line argument of PDF_Add_Index. Here's an example of the command line argument structure:

"PDF_Add_Index:c:\test.pdf>c:\textMyIndex.pdx>PDX"

The parameters (after the "PDF_Add_Index:") are separated by a ">" and are as follows:

  1. PDF file path & name
  2. Index (.pdx) file path and name (on the machine where the pdf file will be used)
  3. Index Label (must always be "PDX" - Other values would be converted to "PDX")

Note: Index file path can be specified as relative to the PDF file location. 
          For example:   ..\Index.pdx

 


 

Adding Named Destinations to a PDF Document

You can add named destinations to a pdf document based on its bookmarks.
A typical benefit from this is that a url link to the PDF can then direct the browser to open the pdf and position to the page where the named destination is located. For example:
http://www.milletsoftware.com/Download/test_Add_Destinations.pdf#Mountain__SlickRock


Here's an example of the command line argument structure:

"PDF_Add_Destinations:c:\temp\{@Region_Sales}.pdf>>>>BM>>"

The parameters (after the "PDF_Add_Destinations:") are separated by a ">>" and are as follows:

  1. Source PDF file (with bookmarks) path & name
  2. Target PDF path & name. If left blank, as in example, source file gets updated.
  3. BM (indicated the method used to add Destinations)
  4. Options (leave blank)

Notes:

·         Destination names reflect the bookmark hierarchy by chaining the labels with 2 underscores ('__') as separators. For example,  Mountain__SlickRock was assigned for the bookmark 'SlickRock' located under the top-level bookmark of 'Mountain'.

·         PDF_Bookmark_Tags is always processed beforePDF_Add_Destinations, so you can include both in a single command line.

·         The browser needs to be set to Open rather than download PDF files in order to handle specified destinations.

Adding Multimedia to PDF Document

You can ask Visual CUT to add a sound file to be played when the pdf file is opened in Acrobat Reader via the command line argument of PDF_Add_Media. Here's an example of the command line argument structure:

"PDF_Add_Media:Pdf_In>>Pdf_Out>>Media_File>>1>>X>>Y>>Width>>Height>>Options"

The parameters (after the "PDF_Build_Index:") are separated by a ">>" and are as follows:

  1. PDF File to open
  2. PDF File to Save As (leave blank if same as source file above)
  3. Media File (e.g. c:\temp\Greeting.mps)
  4. Page where the multimedia box would be added (currently, must be 1)
  5. X: horizontal offset of the multimedia box
    Note: relative to drop-down highlighted in image below. Can be negative (e.g. -20)
  6. Y: vertical offset of the multimedia box
  7. Width of multimedia box
  8. Height of multimedia box
  9. Media Type: currently must be "Sound"
  10. Options: leave blank.  Reserved for future needs.

Notes:

Acrobat Pro must be installed and the Add Multimedia dropdown must be located on the toolbar at the position indicated in the image below:
image

You may need to experiment with the coorindates (X, Y, Width, Height) to avoid conflict with existing objects on the page.
 

As usual, any of these arguments can contain references to fields or formulas and Visual CUT would dynamically replace the reference with the value in the report. 
For example (all in 1 line):
"PDF_Add_Media:{@Catalog}>>{@Catalog_with_Greeting}>>c:\temp\Greeting.mp3>>
     1>>-20>>100>>140>>16>>Sound>>"


Importing Multi-Page TIFF Files into PDF Files

Imagine you wish to use Visual CUT to burst a Crystal report and email customers invoices as PDF files.  The customers wish to see documentation (scanned as multi-page TIFF files) included at the end of each invoice.  Since Crystal can only display the first page of such TIFF files, you need a way to append the related TIFF file at the end of each invoice, before emailing the resulting pdf file to the customer.

 

Using a command line argument, you can instruct Visual CUT to take a multi-page TIFF file and turn it into a pdf file or append it to the end of an existing pdf file. 
Here's an example of the command line argument structure:

"PDF_From_TIFF:c:\tmp\Invoice_{@Inv_N}.pdf>{@Tiff_File}>0>True>True"

The parameters (after the "PDF_From_TIFF:") are separated by a ">" and are as follows:

  1. The path & name of the PDF file (typically, this would be the exported file, but you can use any PDF file). In bursting scenarios, you would typically refer to the dynamic exported file name by embedding a reference to a field or formula (marked in blue in the example above).  

  2. The path & name of the TIFF file(s)
    A semi-colon (;) separated list of the TIFF files in the order they should be merged into the pdf file.  If all source files share the same folder, you can specify the full path just for the first file. If a source file is not found, a warning is written to Failure.log and that file is skipped. 
    Typically, you would use a field or a formula (marked in blue in the example above) from the report to dynamically provide the path and name of the TIFF file(s) related to the Group Level 1 in the current bursting step.  

  3. Scaling relative to original image size:   100 = original size. 120 = 20% larger.
    0 = requests automatic scaling of the image to fully occupy the page size.

  4. Append (True/False): set to true if the TIFF should be appended to the pdf file, if that target file already exists. Otherwise, if the pdf file already exists, it would be transferred to the recycle bin and the TIFF content would be used to create a new version of that pdf file. When Append is set to False, page dimensions are controlled by the TIFF image dimensions and scaling, rather than by the page dimensions of the "receiving" pdf file.

  5. Critical (True/False): controls what should happen if the TIFF file is not found.  If set to TRUE, Visual CUT processing would be aborted.  If set to False, only a Warning is logged but processing continues (if the Invoice pdf can't find a matching TIFF file, it would be emailed without that content).

 

Note: as usual, any of these arguments can contain references to fields or formulas and Visual CUT would dynamically replace the reference with the value in the report. 

Inserting Image/PDF Files as New Pages (Tag Approach)

Imagine Visual CUT burst an invoices report to PDF for emailing to each customer. Each customer may have multiple invoices and you wish to insert at the end of each invoice an image, multi-page TIFF file and/or a related pdf file  reflecting a scanned proof-of-delivery. Visual CUT can do this if you include on the last page for each invoice a tag specifying the image, multi-page TIFF, or pdf files that should be inserted after that page in the exported pdf file.

Supported pdf or image file types include: PDF, PNG, GIF, BMP, JPEG/JPG, PNG, GIF, WMF, EMF, TIF/TIFF

 

Here's an example of the command line argument structure:

"PDF_Insert_Pages_Tags:c:\temp\{@Cust}_Invoices.pdf"

Or

"PDF_Insert_Pages_Tags:c:\temp\{@Cust}_Invoices.pdf>>c:\temp\{@Cust}_Invoices.pdf"


If only one pdf file is specified (as in the top example), then the source file becomes also the target file. Otherwise, the resulting file is saved to the 2nd pdf file.

 

You can download a sample report demonstrating the technique from:
http://www.milletsoftware.com/Download/VC11_PDF_Insert_Pages_Tags.rpt


The formula acting as a tag can be placed anywhere on the report. It specifies what image files should be inserted as following pages.  In this sample report, the tag formula is called {@Insert_Pages_Tag} and is located in the page footer.  The formula name doesn't matter, but the logic should follow this example:

"#Insert_Pages_Tag::" +

"C:\temp\sample1.jpg;sample2.pdf;sample3.tif" + // list of files. Wild cards OK.  

"||" +  // Separator

"100" + // Scaling: 100 = original. 120 = 20% larger, etc. 0 = auto-fit to page.

"#"

 

The formula text must be rendered all within the formula boundaries in a single line.  Use very small font sizes: 2 or even 1 to achieve this.  You may turn the font color to White (or same color as the background) to make the formula invisible.  

Notes:

1.      Scaling argument is ignored for inserted pdf files.

2.      To ignore (rather than fail) cases where an image file is not found, use:
"PDF_Insert_Pages_Tags:c:\temp\Source.pdf>>Resulting.pdf>>[Ignore_Missing_Files]"

3.      In Crystal, use non-proportional font for the tag formula (avoid Calibri and Bold/Italic)

4.      As always, you can use field or formula names within the command line argument. The dynamic content of these fields/formulas would be substituted into the argument.

5.      In the list of files, if path is same, you may specify just the file name for subsequent files.

6.      The list of files can use wild cards (e.g. c:\scans\{cust_id}\*.tiff).

7.      Visual CUT can remove pdf processing tags from the pdf file after processing those tags.  This is controlled by an entry called PDF_Tags_Delete_Default under the [Options] section of DataLink_Viewer.ini. By default, this option is set to True.


 

Splitting PDF Files

Visual CUT provides two ways to split pdf files:

1.      Using pdf bookmarks, VC can create a new pdf file for each bookmark at a specified level and name the pdf file based on the bookmark labels and as well as based on Crystal report formulas.

2.      Using invisible text tags placed on the pdf pages (typically Crystal formulas with font color to make them invisible). These tags act as split directives indicating file names for the pages starting with the tag location and ending with the next tag. These tags can also direct Visual CUT to encrypt the resulting pdf files with different passwords. Visual CUT takes care or removing these tags from the resulting pdf files.

 

Splitting By Bookmarks

Imagine you have a pdf file with bookmarks at 2 levels: Product Type & Product. The bookmarks were generated during a Crystal report export by Visual CUT, or perhaps they are part of an existing pdf file.  Using the command line argument of PDF_Split_By_Bookmarks you can direct VC to Split the pdf to a separate pdf file for each bookmarks at a specified level, name the file based on the bookmark label, and even place the resulting file in a dynamically specified/created folder based on the bookmark name.
image

Here's an example of the command line argument structure (all in 1 line):
"PDF_Split_By_Bookmarks:c:\Sales.pdf>>2>>
c:\{[Bookmark_Name]}\Sales for {[Bookmark_Name]} in {[yyyy]}.pdf

 

The parameters (after the "PDF_Split_By_Bookmarks:") are separated by a ">>" and are as follows:

  1. The path & name of the source PDF file  
  2. The targeted bookmark level (level 2 in this example targets the Product level)
  3. The path & name of the split pdf file to create for each targeted bookmark

 

A {[Bookmark_Name]} reference gets replaced by the bookmark label. For example, Mozzie

A {[Bookmark_Chain_A]} reference gets replaced by a hyphen-separated sequence of bookmark labels leading to/including the targeted node. For example: Competition – Mozzie

 

 Notes:

·         For each targeted bookmark, a separate pdf is created from the page associated with the bookmark up to (but not including) the page associated with the next targeted bookmark.

·         If the target folder doesn’t exist, VC creates it on the fly.

·         Invalid file name characters are automatically substituted with valid ones.

·         If a path to the target folder is not specified, the path to the source file is used.

·         As usual, any of these arguments can contain references to fields or formulas, and VC would dynamically replace the reference with the value in the report. In the example above, the {[yyyy]} gets replaced with the current year.

·         The process is very fast


 

Splitting By Embedded Tags

Using a command line argument, you can instruct Visual CUT to look for invisible tags inside the pdf file (Crystal formulas with font color set to background color) and to split the file into multiple pdf files. The following situations can benefit from this splitting of a pdf file (as opposed to bursting the Crystal report directly to multiple pdf files):

1.      Speed of bursting is VERY fast, particularly for huge pdf files with many group values.

2.      You can split the main pdf file based on any logic (e.g., level 4 grouping).

3.      You can split any pdf file, even if it was not exported from Visual CUT.

4.      You can "Print" reports to pdf before splitting (avoiding pdf export font issues) 

5.      Using {ppp} token, you can include number of pages in the name of each split file.
See sample image.
 

Here's an example of the command line argument structure:

"PDF_Split_Tags:c:\temp\Sales.pdf>>True>>True>>False"

The parameters (after the "PDF_Split_Tags:") are separated by a ">>" and are as follows:

  1. The path & name of the PDF file  
  2. Compress the split pdf files? (set to False for faster execution)  
  3. Create missing folders? (set to False for faster execution)
  4. Assume Tag is always Nth text object on page? (set to True for faster execution) 

Within the pdf file, you should embed text tags (Crystal formulas) that indicate the page locations for starting a new split pdf file, and the path & name of that new file. 

Notes:

-          If the target folder of the split files does not exist, Visual CUT creates it on the fly.

-          In Crystal, use non-proportional font for the tag formula (avoid Calibri and Bold/Italic)


Here is an example of such a formula that can be placed, for example, in a Group Header section

// Set small font. Text must display within the boundaries in a SINGLE line.

// The page where the tag is detected becomes the first page of the split pdf

// The last page of the split pdf is the page before the next tag.

// If a single page has 2 Split Tags, only the first one is detected.

// {ppp} gets replaced by zero-padded number of pages in the split file (2 pages = '002')

// The formula always starts with "#Split_Tag::" and ends with "#"

"#Split_Tag::" +

"c:\" + {@Folder} + "\" + {Product_Type.Product Type Name} + ".pdf" + // Split PDF File

"#"


Notes: Visual CUT can remove pdf processing tags from the pdf file after processing those tags.  This is controlled by an entry called PDF_Tags_Delete_Default under the [Options] section of DataLink_Viewer.ini. By default, this option is set to True.  To ensure all tags are removed, use the Replace() function in Crystal to change double quotes into single quotes.  For example, the expression for the file name could be:
Replace({Product_Type.Product Type Name},"""","'")

 

Splitting and Emailing PDF Files By Embedded Tags

See video demo.


This option uses the same command line argument as the previous section.
The email destination for each split pdf is specified at the end of the text tag embedded in the pdf like this: 

// Set small font. Text must display within the boundaries in a SINGLE line.

// The page where the tag is detected becomes the first page of the split pdf

// The tag always starts with #Split_Tag:: and ends with #

// The email destination is specified after a || delimiter

#Split_Tag::c:\temp\Invoice_2466.pdf||ido@MilletSoftware.com#


You can use a PDF file that is not exported from a Crystal report. Simply use a dummy report and set the export to a dummy file or to VC_Skip_Export

 

You can use the GUI of the Export/Email tab to set the email options for Email From, CC, BCC, Subject, and Message.

 

Set the Email Attach option to {[PDF_Split_Tags_File]} .  Visual CUT will populate that token with the file name for each split pdf..

 

Set the Email To option to {[PDF_Split_Tags_Email_To]} .  Visual CUT will populate that token with the email destination specified in the text token for each split pdf file.

 

Use {[PDF_Split_Tags_FileName_NoExtension]} to embed the file name (without path and without extension) in the email subject or in the message body.

 

Notes

·         In the text tag, after the || delimiter, leave the email address blank to skip emailing for some files.

·         Use email queing to increase speed and facilitate testing.



 

Splitting, Protecting, and Emailing PDF Files By Embedded Tags

This option is identical to previous section, except that the tag also provides a password for protecting the pdf file against unauthorized access. The password protection uses a strong AES 256B encryption.
 
The email destination for each split pdf is specified at the end of the text tag embedded in the pdf like this: 

// Set small font. Text must display within the boundaries in a SINGLE line.

// The page where the tag is detected becomes the first page of the split pdf

// The tag always starts with #Split_Tag:: and ends with #

// The email destination is specified after a || delimiter
// The
password is specified after a second ||delimiter

#Split_Tag::c:\temp\Invoice_2466.pdf||ido@MilletSoftware.com||Sesame123#


Notes

·         In the text tag, leave the email address blank to skip emailing for some files.

·         In most cases, dynamic email address and password would be concatenated into the tag using a formula expressions such as:
"#Split_Tag::" +

"c:\temp\Direct_Deposit_" + {@Emp} + ".pdf" +    // Split PDF File

"||" + {@Emp_Email} +                            // email address
"||" + {@Emp_Password}  +                        // password

"#"



Splitting and Protecting PDF Files By Embedded Tags

Note: if all you need is strong password protection against opening the file by unauthorized users, the previous section describes a newer and simpler approach. Use this option only if you need control over document permissions.

to This option iUsing a command line argument, you can instruct Visual CUT to look for invisible tags inside the pdf file (Crystal formulas with font color set to background color) and to split the file into multiple protected pdf files. The following situations can benefit from this splitting of a pdf file (as opposed to bursting the Crystal report directly to multiple pdf files):

5.      Speed of bursting is incredible, particularly for huge pdf files with many group values.

6.      You can split the main pdf file based on any logic (e.g., level 4 grouping).

7.      You can split any pdf file, even if it was not exported from Visual CUT. 
 

Here's an example of the command line argument structure (all in 1 line):

"PDF_Split_Protect_Tags:c:\temp\Sales.pdf>>False>>True>>False…
        >>Owner_Password>>1>>1>>0>>1>>1>>1>>1>>0"


The parameters (after the "PDF_Split_Protect_Tags:") are separated by a ">>" and are as follows:

  1. The path & name of the PDF file
  2. Compress the split pdf files? (set to False for faster execution) 
  3. Create missing folders? (set to False for faster execution)
  4. Assume Tag is always Nth text object on page? (set to True for faster execution) 
  5. Owner_Password: Keep this password to yourself.  It provides full control over the PDF file.   Note: user password is provided in the Tag embedded in the pdf.
  6. Allow User to Print the File: (1=Yes, 0=No) 1 is typical.
  7. Allow User to Copy Text & Images from the File: (1=Yes, 0=No) 1 is typical.
  8. Allow User to Edit/Change the File: (1=Yes, 0=No) 0 is typical.
  9. Allow User to Add Notes to the File: (1=Yes, 0=No) 1 is typical.
  10. Allow User to Print in Full Resolution: (1=Yes, 0=No) 1 is typical.
    Setting this to zero would force low-resolution printing, preventing the document from being distilled into a new unrestricted PDF document.
  11. Allow user to Fill Form Fields: (1=Yes, 0=No) 1 is typical.
  12. Allow Copy for Accessibility: (1=Yes, 0=No) 1 is typical.
  13. Allow user to assemble document: (1=Yes, 0=No) 0 is typical.

 

Within the pdf file, you should embed text tags (Crystal formulas) that indicate the page locations for starting a new split pdf file, and the path & name of that new file. 

Notes:

-          If the target folder of the split files does not exist, Visual CUT creates it on the fly.

-          In Crystal, use non-proportional font for the tag formula (avoid Calibri and Bold/Italic)


Here is an example of such a formula that can be placed, for example, in a Group Header section

// Set small font. Text must display within the boundaries in a SINGLE line.

// The page where the tag is detected becomes the first page of the split pdf

// The last page of the split pdf is the page before the next tag.

// If a single page has 2 Split Tags, only the first one is detected.

 

// The formula always starts with "#Split_Protect_Tag::" and ends with "#"

"#Split_Protect_Tag::" +

"c:\" + {@Folder} + "\" + {Product_Type.Product Type Name} + ".pdf>>User_Password"

// NOTE: to protect but not prompt the user for a Password, leave User_Password as blank. +

"#"


Notes: Visual CUT can remove pdf processing tags from the pdf file after processing those tags.  This is controlled by an entry called PDF_Tags_Delete_Default under the [Options] section of DataLink_Viewer.ini. By default, this option is set to True.  To ensure all tags are removed, use the Replace() function in Crystal to change double quotes into single quotes.  For example, the expression for the file name could be:
Replace({Product_Type.Product Type Name},"""","'") 

 


 

Compress PDF Files

Using a command line argument, you can instruct Visual CUT to compress a pdf file.   
Here's an example of the command line argument structure:

"PDF_Compress:c:\tmp\Inv_{@N}.pdf>>c:\tmp\Inv_{@N}_New.pdf"

The parameters (after the "PDF_Compress:") are separated by a ">>" and are as follows:

  1. The path & name of the existing PDF file (typically, this would be the exported file, but you can use any PDF file). In bursting scenarios, you would typically refer to the dynamic exported file name by embedding a reference to a field or formula (marked in blue in the example above). 

  2. [optional] The path & name of the new PDF file
    If you leave this part blank, Visual CUT would simply overwrite the pdf file with its new compressed version. For example:
    "PDF_Compress:c:\tmp\Inv_{@N}.pdf"
    Use that approach only if you have a way to recreate or restore the original file because the compress process might fail.

Notes:

As usual, any of these arguments can contain references to fields or formulas, and Visual CUT would dynamically replace the reference with the value in the report.

 

PDF_Compress occurs before PDF_Protect to allow compressing and protecting in one command line.


 

Set PDF/A Mode

Converting pdf files to PDF/A mode means they follow an international standard for long-term archiving of electronic files. See: https://en.wikipedia.org/wiki/PDF/A

Using a command line argument, you can convert a PDF file to a PDF/A file.    
Here's an example of the command line argument structure:

"PDF_A_Mode:c:\tmp\Inv_{@N}.pdf>>c:\tmp\Inv_{@N}_New.pdf>>Pass>>3b"

The parameters (after the " PDF_A_Mode:") are separated by a ">>" and are as follows:

  1. The path & name of the existing PDF file (typically, this would be the exported file, but you can use any PDF file). In bursting scenarios, you would typically refer to the dynamic exported file name by embedding a reference to a field or formula (marked in blue in the example above). 

  2. The path & name of the new PDF file
    If you leave this part blank, Visual CUT would simply overwrite the pdf file with its new linearized version. For example:
    "PDF_A_Mode:c:\tmp\Inv_{@N}.pdf>>>>Password>>3b"
    Use that approach only if you have a way to recreate or restore the original file because the linearization process might fail. For example, while pdf exports from Visual CUT seem to go through the linearize process without a problem, I’ve seen some cases where pdf exports of the same report from Crystal Designer fail the linearize process.

  3. Password: Leave blank if the file is not password protected.  For example:
    " PDF_A_Mode:c:\tmp\Inv_{@N}.pdf>>>>3b"

 

  1. Mode:  2 or 3b (3b is a later standard, supporting embedded files). 

Notes:

As usual, any of these arguments can contain references to fields or formulas, and Visual CUT would dynamically replace the reference with the value in the report.

 

Occurs after all other pdf operations such as PDF_Merge andPDF_Protect.


 

Linearize (web-enable) PDF Files

A linearized pdf file can be opened faster from a url link because it is designed to open the 1st page even before the full document has been downloaded by the browser.

Using a command line argument, you can instruct Visual CUT to linearize a pdf file.   
Here's an example of the command line argument structure:

"PDF_Linearize:c:\tmp\Inv_{@N}.pdf>>c:\tmp\Inv_{@N}_New.pdf>>Password"

The parameters (after the "PDF_Linearize:") are separated by a ">>" and are as follows:

  1. The path & name of the existing PDF file (typically, this would be the exported file, but you can use any PDF file). In bursting scenarios, you would typically refer to the dynamic exported file name by embedding a reference to a field or formula (marked in blue in the example above). 

  2. [optional] The path & name of the new PDF file
    If you leave this part blank, Visual CUT would simply overwrite the pdf file with its new linearized version. For example:
    "PDF_Linearize:c:\tmp\Inv_{@N}.pdf>>>>Password"
    Use that approach only if you have a way to recreate or restore the original file because the linearization process might fail. For example, while pdf exports from Visual CUT seem to go through the linearize process without a problem, I’ve seen some cases where pdf exports of the same report from Crystal Designer fail the linearize process.

  3. [Optional] Password.  Leave blank if the file is not password protected.  For example:
    "PDF_Linearize:c:\tmp\Inv_{@N}.pdf>>>>"

Or you may simplify this to:
"PDF_Linearize:c:\tmp\Inv_{@N}.pdf"

 

Notes:

As usual, any of these arguments can contain references to fields or formulas, and Visual CUT would dynamically replace the reference with the value in the report.

 

PDF_Linearize occurs after all other pdf operations such as PDF_Merge and PDF_Protect.


 

Export to PDF via MS WORD

When exporting to PDF, the Crystal runtime might shrink and mishandle certain fonts. Exporting via Word fixes that issue and also adds options for generating Tagged pdf files and files that conform to the PDF/A standard.
Here is a comparison of two pdf exports, showing font shrinking problem (box in red) in PDF export from Crystal compared to no shrinking when exporting via MS Word:

image

 

You may elect to default to PDF exporting via MS Word by using the Options dialog: image

Alternatively, you can use a "PDF_Export_Options" command line argument to override the global (ini) setting.  For example:
"PDF_Export_Options:Word"

The options are:

  1. "" or Default – Uses the Crystal Runtime to export
  2. Word – Use MS Word to export to PDF (after internally exporting to MS Word)
  3. Tagged – Same as 2, but export as a Tagged pdf file
  4. PDF/A – Same as 2, but export as a PDF/A file
  5. Tagged and PDF/A – Same as 2, but export as a Tagged PDF/A file

 

For pdf exporting format, the options button  image  launches a PDF Export Options window showing the global (ini) setting, and providing choices for generating and saving the command line argument (if you need to override the global ini setting).

image

Notes:

If you specify Tagged or PDF/A options, the default behavior of setting PDF file properties and processing bookmark and link tags in the generated pdf file is skipped. This is because such post-processing would lose compliance with the PDF/A standard. So, unless you truly need a PDF/A file, you should use the lower-level options such as "Word" or the default Crystal Runtime pdf export. 

The machine must have MS Word with ability to save to pdf.

SQL Functionality


You can save the syntax of an SQL statement in a text file with a .sql extension. Visual CUT can open that file and preview the resulting data. Here's the sample Employees.sql file after clicking Preview:

image

This dialog allows you to set the ODBC DSN, User ID (optional), Password (Optional).
The Burst By dropdown is populated by column names from the data set. For example, selecting Supervisor results in grouping the data by Supervisor and allows bursting of exports and emails by supervisor:

image

 

These settings are saved and associated with that .sql file for future previews and scheduled processing.


 

Email Bursting from SQL Data

See video demo with very similar functionality for Excel data: [https://www.milletsoftware.com/images/youtube_16c.png]

You can use SQL data to email messages for a) each row, b) each group of rows, or c) all rows.

Dynamic Column Tokens

When bursting for each row, Visual CUT automatically generates dynamic {Column_Name} tokens referring to the value of each column. When bursting for each group of rows with the same column value, Visual CUT automatically generates dynamic {GrFirst_Column_Name} and {GrLast_Column_Name} tokens referring to the values of each column in the first and last row within each group.
You can to embed those tokens in options such as email_to, subject, message, and attachments.

HTML Table Tokens

Visual CUT automatically generates dynamic {HTML_Table_Group} and {HTML_Table_All_Rows} tokens for easy embedding of the data as nicely-formatted HTML tables in the email messages.

 

To exclude a column from the HTML tables, simply start its column name with an underscore (e.g. '_Salary').




 

Convert SQL Data to Web Schedule, Grid, or Pivot Tables/Charts

 

See video demo with very similar functionality for Excel data: [https://www.milletsoftware.com/images/youtube_16c.png]

You can convert SQL data to interactive Web Schedules (sample), Web Grids (sample), or Web Pivot/Chart with master & user-defined layouts (sample).

 

Bursting Excel Data to Multiple Web Outputs

You can group the data by any column and burst it to multiple web outputs – one for each group. For example, the image below shows how Excel data grouped by the Manager column is used to generate a separate web schedule for each manager:
image

 

 


 

Mail Merging SQL Data into MS Word Templates

This video demo: [https://www.milletsoftware.com/images/youtube_16c.png] demonstrates using Visual CUT to mail merge excel data into Word template containing a table and individual tokens, converting to pdf, and emailing to dynamic email destinations.
The same functionality also applies to SQL data.

For more detail, see Mail Merging Values into MS Word Templates.

image





 

Update a Database After Success (After_Success_SQL)

After Visual CUT successfully exported, printed, or emailed a report, you may want to update your database to reflect that information. For example, after bursting invoices to customers, you may want to update the records for these jobs to reflect the date of invoicing or the fact that an invoice was emailed. Besides providing useful information, these columns may also be used to avoid duplicate processing by incorporating them into the record selection formula in your reports.

 

To update a database after successful processing, you use the After_Success_SQL command line argument. The argument structure is as follows:
"After_Success_SQL:Type>>ODBC DSN>>User ID>>Password>>SQL Statement"
or to trigger multiple statements (each using a different ODBC DSN) repeat the 5 elements after a ^^^^ delimiter:
"After_Success_SQL:Type>>DSN1>>User1>>Pass1>>SQL1^^^^Type>> DSN2>>User2>>Pass2>>SQL2"

The parameters (after the ":") are separated by a ">>" and are as follows:

1.   Type: the type of success step: Burst or Whole. Any other text (Skip) skips processing.

7.      ODBC DSN: The ODBC DSN providing access to the target database.  Note that the target database doesn’t have to be the same as the one used for the report.
Note: can use any OLEDB Connection String as an alternative to ODBC DSN.

8.      User ID: Leave blank if no user id is needed to connect to the ODBC DSN

9.      Password: Leave blank if no password is needed to connect to the ODBC DSN

10.  SQL Statement: the SQL statement to execute.  This typically include embedded references to fields/formulas that Visual CUT would replace with their dynamic values.
NOTE 1: if the SQL statement is blank, it simply gets skipped (no failure message).
Note 2: to specify multiple statements simply separate them with a '; '

 

For example, the following command line argument
----------------------------------------------------------------

 … "After_Success_SQL:Burst>>xTreme>>>>>>Update "JOBS" SET "Processed" = True, "Date Processed" = Date() WHERE "Job Name" = '{@Job}'"

----------------------------------------------------------------

Would trigger a SQL statement through the xTreme ODBC DSN, without user id and password, every time a bursting step is completed successfully. The statement would find the matching record in the JOBS table by comparing the Job Name column to the value of a {@Job} formula in the report. If one or more matching records are found, their "Processed" column is set to TRUE, and their "Date Processed" column is set to the current date. 

Note that the syntax above conforms to MS Access.  For other databases you may need to adjust the syntax.  For example, MS Access provides a Date() function.  MS Access also requires enclosing table and column names with double quotes, and literal strings with single quotes (as done around the value of the {@Job} reference).

 


 

SQL Server Example 1

Here is a simple SQL Server example (note the double quotes around table/column names and single quotes around string values:
"After_Success_SQL:Burst>>SQL2>>>>>>UPDATE "TCM93"."dbo"."VC_ship_notify" SET GF1_DASH_Update = CURRENT_TIMESTAMP WHERE "VC_ship_notify"."gf1_company_code" = 'PSI' and "VC_Ship_Notify"."GF1_ID_Ord" = '{@Order_ID}'"

 

SQL Server Example 2

Here is an example using SQL Server syntax. In this case, the user needed to INSERT a record into a SQL Server table after each bursting step.  The command line argument used was:

"After_Success_SQL:Burst>>CR_DSN>>>>>>{@SQL_Formula}"

No user id or password were specified above because the connection used NT Authentication rather than SQL Server authentication.


The {@SQL_Formula} was placed in Group Footer 1. Note that you must surround string values with explicit single quotes. For example:  "'" & {@Some_Text} & "'"

'insert into CrTestDatabase.dbo.NewRenewalFees ( ' &

   'DOC_YEAR, ' &

   'BUSINESS_NO, ' &

   'BUS_LIC_NO, ' &

   'CODE, ' &

   'CLASSIFICATION, ' &

   'NUMUNITS, ' &

   'NUMSEATS, ' &

   'RenewalFee, ' &

   'HOCCRDue, ' &

   'RenewalId, ' &

   'HOCCRId, ' &

   'REPORT_ID ' &

') ' &

'SELECT  ' &

  {@Year}                   & " as DOC_YEAR, " &

  {@BusNo}               & " as BUSINESS_NO, " &

  {@BusLicNo}          & " as BUS_LIC_NO, " &

  {@Code}                  & " as CODE, " &

  {@Classification}     & " as CLASSIFICATION, " &

  {@NUMUNITS}     & " as  NUMUNITS, " &

  "0.00 as NUMSEATS,  " &     

  {@RenewFee}         & " as RenewalFee, " &

  {@HOCCRFee}       & " as HOCCRDue, " &

  {@RecIdRenewal}   & " as RenewalId, " &

  {@RecIdHOCCR}   & " as HOCCRId, " &

  {@ReportId}            & " as REPORT_ID"

 

Update a Database Before Report Runs (Before_Report_Run_SQL)

Before Visual CUT runs the report (but just after any Email Capture processes), you may want to update a database. For example, the report may use a temporary table that gets created via your SQL statement. The structure and logic of the Before_Report_Run_SQL command line argument is identical to After_Success_SQL earlier argument except that:
a) you may not refer to report fields/formulas, and

b) There is no Type (Whole/Burst) element.

The argument structure is as follows:
"Before_Report_Run_SQL:ODBC DSN>>User ID>>Password>>SQL Statement"
or to trigger multiple statements (each could use a different ODBC DSN) repeat the 4 elements after a ^^^^ delimiter:
"Before_Report_Run_SQL:DSN1>>User1>>Pass1>>SQL1^^^^DSN2>>User2>>Pass2>>SQL2"

 

Note: can use any OLEDB Connection String as an alternative to ODBC DSN.




 

 

 


 

Excel Functionality

 

Email Bursting from Excel Workbooks

See video demo: [https://www.milletsoftware.com/images/youtube_16c.png]

You can use Excel workbook data to email messages for a) each row, b) each group of rows, or c) all rows.

Dynamic Column Tokens

When bursting for each row, Visual CUT automatically generates dynamic {Column_Name} tokens referring to the value of each column. When bursting for each group of rows with the same column value, Visual CUT automatically generates dynamic {GrFirst_Column_Name} and {GrLast_Column_Name} tokens referring to the values of each column in the first and last row within each group.
You can to embed those tokens in options such as email_to, subject, message, and attachments.

HTML Table Tokens

Visual CUT automatically generates dynamic {HTML_Table_Group} and {HTML_Table_All_Rows} tokens for easy embedding of the data as nicely-formatted HTML tables in the email messages.

 

To exclude a column from the HTML tables, simply start its column name with a space (e.g. ' Email').
To exclude a row from processing, use a false value in an ' Include' column.

image

Convert Excel Data to Web Schedule, Grid, or Pivot Tables/Charts

You can convert Excel data to interactive Web Schedules (sample), Web Grids (sample), or Web Pivot/Chart with master & user-defined layouts (sample). See video demo: [https://www.milletsoftware.com/images/youtube_16c.png]

 

Bursting Excel Data to Multiple Web Outputs

You can group the data by any column and burst it to multiple web outputs – one for each group. For example, the image below shows how Excel data grouped by the Manager column is used to generate a separate web schedule for each manager:

image

 


 

Mail Merging Excel Data into MS Word Templates

This video demo: [https://www.milletsoftware.com/images/youtube_16c.png] demonstrates using Visual CUT to mail merge excel data into Word template containing a table and individual tokens, converting to pdf, and emailing to dynamic email destinations.

For more detail, see Mail Merging Values into MS Word Templates.

image

 

 

Exporting to Excel 2007 (.xlsx) Files

 

If you specify an export file name with a .xlsx file extension, even though the specified export format is Excel 97, Visual CUT takes care of producing an Excel 2007 .xlsx file.

 

The process actually starts by exporting to a temporary .xls file. If there are more than 65,536  rows in the export, the content will be split across multiple tabs inside the temporary .xls file.
Visual CUT then converts the temporary .xls file to an Excel 2007 .xlsx file and merges all tabs into the first tab. The extra tabs are removed, and the temporary .xls file is deleted.

The overall effect is that when you specify a .xlsx file extension, you get an export to Excel 2007 format, supporting more than a million rows in a single tab and consuming much less disk space.

Combining Excel Bursting Exports into a Single Multi-Tab Spreadsheet

Visual CUT can create an Excel workbook with a separate tab (sheet) for each group:
image

 

Tip: right-clicking the VCR buttons to the left of the tab names launches a tab navigation list. This helps when the number or size of tab labels forces a scroll in order to see all of them.
 
The key to using this optional functionality is the naming of the export files:

¨    The name of the tab used for the individual sheets exported from each group is specified after the keyword ‘Tab!’
(within the export file name and before the ".xls" file extension). 
Note: Visual CUT ensures tab names are acceptable to Excel by truncating long (>31) names and converting :\/?*[] characters to "legal" alternatives.

¨    The name of the spreadsheet file holding these individual sheets is determined by what’s left when removing the ‘Tab!sheet name’ from the export file name.

 

For example, here is the export file name option used to generate the Excel file above:

c:\temp\Sales in {@Year} Tab!{Product_Type.Product Type Name}.xls

 

In this case, the highlighted area determines the sheet name inside the "master" spreadsheet and the rest of the text determines the "master" spreadsheet file name.
As usual, Visual CUT allows you to drag and drop any available fields or formulas to act as dynamic components in creating the file and sheet names.

 

If you want Visual CUT to e-mail the resulting file, then select the "Single Email" rather than the "Email for Each Group Level 1" option and specify the resulting file name in the Attach option. For the case above, the resulting file name is:  c:\temp\Sales in 1997.xls 


Adding Excel Exports as Tabs in Existing/New Spreadsheets (Briefing Books)

Besides bursting a single report into multiple tabs in a single excel file, Visual CUT can also export a whole report or burst a report and add the resulting excel sheet(s) to existing excel files. This allows you to schedule several reports (typically using a batch file) and generate "briefing books" of several reports in multiple tabs within a single excel file.  You would typically email the resulting excel file (at the end of the last scheduled step) to the recipients.
Note: you can use a Macro Enabled workbook (.xlsm) to host the tab, for further automation.

 

Let’s assume you need to burst 10 reports to 100 agents. You would start the first report (about Commissions) with a burst into an export file name option such as:

c:\temp\Monthly Reports for {Agent_Name} in {@Month_Year} TabInNewFile!Commission.xlsx

 

This would result in 100 excel files named like:

Monthly Reports for Richard Roper in April 2004.xlsx

Monthly Reports for Ido Millet in April 2004.xlsx

etc.

Each of these workbooks will have a single tab (Commission) showing the Commission information for that agent. Note: as always, the tab name can also be dynamic by dragging & dropping fields/formulas to the area directly after TabInNewFile! key word (case sensitive).

 

You would then schedule the next report (about Policy Cancellations) to burst using an export file name option such as:

c:\temp\Monthly Reports for {Agent_Name} in {@Month_Year} TabInOldFile!Cancellations.xlsx

 

The TabInOldFile! ensures the Cancellations tab with the report information would be added to the excel workbook created in the previous step.

 

Note: When using TabInOldFile!, if the workbook file doesn't exist, it would be created.

 

You would continue in the same way with the other 8 reports (scheduled in that order in a single batch file.  In the first 9 reports you will have no emailing but in the last one you will enable burst emailing so each agent gets their own "briefing book" as a multi-tab excel workbook instead of 10 separate excel files.

 

The scenario above assumes a bursting operation, but you can use the same exact approach in exporting whole reports to generate "briefing books".

 

Appending or Replacing Data for Existing Tabs

If TabInOldFile! encounters an existing tab, the export gets appended to the end of content in that tab.  If you use TabInOldFile_Replace! Visual CUT inserts the tab if it doesn't already exist, but replaces the content of the tab if it already exists. This allows other sheets to refer to the content (periodically refreshed by Visual CUT) of that tab.

Note: the file & tab naming conventions that apply to this functionality are the same as described in the previous section.


Controlling Excel Tab Colors

 When you specify tab names in excel exports via any of the methods described above, you can control the color of the excel tab by preceding the tab name with an RGB directive like this:
RGB225000000
The 3 sets of 3 digits following the RGB text specify the Red, Green, and Blue values (ranging from 0 to 255).  See RGB color values at sites such as: http://web.njit.edu/~kevin/rgb.txt.html

 

Visual CUT then takes care of coloring the excel tab according to the directive (and removing the directive from the tab name).

 

Here is an example of an export file name:

c:\temp\Sales Tab!RGB225000000{Product_Type.Product Type Name}.xls

 

The real power behind this feature is that the color directive can be a formula that dynamically sets the tab color based on performance as reflected in the report data.  For example:

c:\temp\Sales Tab!{@RGB_Tab_Color}{Product_Type.Product Type Name}.xls

For example:

Select Sum ({@value}, {Product_Type.Product Type Name})

Case is > 1000000: "RGB000255000"

Case is > 300000:  "RGB000150000"

Case is > 11000:   ""

Case is <= 11000:  "RGB225000000"

default:        ""




image

 

Setting Up Print Properties for Excel Workbooks

You can instruct Visual CUT to change the print setup properties of an Excel workbook or a specified tab (sheet) inside that workbook.  The command line argument structure is as follows:

"XLS_Print_Setup:Excel_File>Tab>…"

The parameters (after the ":") are separated by a ">" and are as follows:

 

  1. Excel_File: the full path and name of the excel file.
  2. Tab: the tab (sheet) name.  Use 1 to target the first tab. Leave blank to target all tabs.
  3. Orientation:  Portrait, Landscape, or leave blank for no change.
  4. N Pages Wide: for example, use 1 to fit into 1 page wide.  Leave blank for no effect.
  5. N Pages Tall: for example, use 1 to fit into 1 page tall.  Leave blank for no effect.
  6. Left Margin: in inches.  For example, 0.25.  Leave blank for no effect.
  7. Right Margin: in inches.  For example, 0.25.  Leave blank for no effect.
  8. Top Margin: in inches.  For example, 0.25.  Leave blank for no effect.
  9. Bottom Margin: in inches.  For example, 0.25.  Leave blank for no effect.
  10. Header Margin: in inches.  For example, 0.25.  Leave blank for no effect.
  11. Footer Margin: in inches.  For example, 0.25.  Leave blank for no effect.
  12. Center Horizontally: Y for Yes.  Any other value, including blank, for no effect. 
  13. Center Vertically: Y for Yes.  Any other value, including blank, for no effect. 
  14. Print Grid Lines: Y for Yes.  Any other value, including blank, for no effect.

 

Note: you can use field or formula names within the command line arguments. 
The dynamic content of these fields/formulas would be substituted into the command line.

 

For example (all in one line):
"XLS_Print_Setup:c:\temp\{Customer.Country}.xls>>>1>1>>>>>>>>>"

 

The command line above would be typical of cases where you burst a report to multiple excel files, and you wish to fit the printout (when a user opens the file in Excel) into a single page.

 

Note: since there are 14 elements, there should always be 13 instances of '>' separators.   

 


Auto Filter & Freeze Panes in Excel Exports

You can instruct Visual CUT to turn on the Auto Filter behavior within exported excel files.
The command line argument structure is as follows:
"XLS_AutoFilter:True"
For more advanced options, use the following command line argument structure:
"XLS_AutoFilter:A1>>A2"

 

The arguments are separated by >> and are as follows:

Spreadsheet Cell for Applying Auto Filter (Use Top-Left cell of the range)
Spreadsheet Cell for Applying Freeze Panes -- Rows above and Columns to the left get frozen.
                                                                               A2 freezes just the 1st row)

Note: leaving one of the two elements blank would result in processing only the non-blank argument

 

To process a file that is not the one being exported, specify the target file as the first argument:
"XLS_AutoFilter:c:\temp\test.xls>>True"
or
"XLS_AutoFilter:c:\temp\test.xls>> A1>>A2"

To target a workbook tab, change the first argument to target file||target tab like this:
"XLS_AutoFilter:c:\temp\test.xls||target tab>>True"
or
"XLS_AutoFilter:c:\temp\test.xls||target tab>> A1>>A2"



 

Format Data as Excel Tables

You can instruct Visual CUT to turn data in excel into a nicely formatted tables. This adds sorting and filtering options via column header menus.  Here is an example of an excel tab before setting the table:

image

And here is the same excel tab after setting a table (The process also auto-fits column widths):

image

Here is an example of how the command line argument is structured:

"XLS_SetTable:C:\temp\start.xlsx>>C:\temp\end.xlsx>>Sheet1>>A1>>Medium2>>"

 

The elements (after the "XLS_SetTable:") are separated by a ">>" and are as follows:
1. Source excel file.

2. Resulting excel file.  Can leave blank if same as source

3. Target tab name (if left blank, the process adds tables to all the tabs in the source workbook)

4. Top-Left cell to start the table
5. Table style using the standard table style supported by excel (e.g. Light16, Medium2, Dark8).

6. Options: leave blank


Notes:

The process automatically assigns a table name based on the tab name prefixed with ‘t’ (tSheet1, tDavolio, etc.).




 

Auto Fit in Excel Exports

You can instruct Visual CUT to automatically fit the column widths and/or Row Height in exported excel files.  This is useful in "Data Only" exports. 

 

Auto fit Column Widths

To auto-fit column widths, the command line argument structure is as follows: 
"XLS_AutoFit:True"

For more advanced options, use the following command line argument structure:

"XLS_AutoFit:MaxColumnWidth>>31>>False"

 

The 3 elements after the ":" are separated by >> and are as follows:

MaxColumnWidth – fixed text

Maximum column width – a number between 1 and 255

Wrap Text True or False.  Control whether columns adjusted down to the specified maximum width should wrap their text.

To automatically auto-fit column widths in Excel (Data Only) exports to xlsx (when using the V3 component) set the following ini file option (default value is False):
V3_Data_Only_xlsx_Export_AutoFit=True

You can override the ini option using a command line argument, like this:
"V3_Data_Only_xlsx_Export_AutoFit:True"

 

Auto Fit Row Heights

To automatically auto-fit column widths in Excel (Data Only) exports to xlsx (when using the V3 component) set the following ini file option (default value is False):
V3_Data_Only_xlsx_Export_AutoFitRowHeight=True


You can override the ini option using a command line argument, like this:
"V3_Data_Only_xlsx_Export_AutoFitRowHeight:True"

Note: this functionality applies only to Excel (Data Only) exports.

 

Remove Blank Rows

Blank rows are a typical problem caused by subreports when exporting to Excel (data Only).
To automatically delete such blank rows (when using the V3 component) set the following ini file option (default value is False):
V3_Data_Only_xlsx_Export_Delete_Blank_Rows=True

You can override the ini option using a command line argument, like this:
"V3_Data_Only_xlsx_Export_Delete_Blank_Rows:True"

 

 


Password Protecting Excel Workbooks

You can instruct Visual CUT to protect any number of Excel files.  The command line argument structure is as follows:

"XLS_PROTECT:Excel_File_List>Password2Open"
or

"XLS_PROTECT:Excel_File_List>Password2Open>Password2Modify>RecommendRO"


The parameters (after the ":") are separated by a ">" and are as follows:

 

  1. Excel_File_List: comma separated list of the Excel files you wish to protect.
    If all files share the same folder, you can specify the full path just for the first file.
    If a file is not found, a warning is written to Failure.log and that file is skipped.
    Note: you can specify file names using wild cards.

 

  1. Password2Open: [optional] up to 15 characters in length (to open the workbook).

 

  1. Password2Modify: [optional] up to 15 characters in length (to modify the workbook).

 

  1. RecommendRO: TRUE causes an opening dialog to suggest Read Only mode.

 

Important Note: you can use field or formula names within the command line arguments. 
The dynamic content of these fields/formulas would be substituted into the command line. Among other things, this allows you to easily protect individual Excel exports with different passwords for each group you are bursting.  For example (all in one line):

"XLS_PROTECT:c:\temp\{@Acct}.xlsx>>{@Mod_Pass}>TRUE"

 

In the example above, The open password was left blank. In such a case, the workbook is password protected only against modifications.


Protecting Excel Worksheets against User Viewing/Editing

Using Excel Automation (old and limited way)

As described at: http://spreadsheets.about.com/od/excel2007tips/qt/080428_lockcell.htm
Protecting data from change in Excel is a two-step process.

  1. locking/unlocking specific cells in your spreadsheet.
  2. applying the Protect Sheet option. Until step 2 is completed, all data is vulnerable to change.

Visual CUT allows you to automate step 2 using the XLS_Protect_Worksheets command line argument.
 
Note: while XLS_Protect provides workbook access protection, XLS_Protect_Worksheets hides and protects cells from user editing. 

 

You will typically use XLS_Protect_Worksheets afterVisual CUT has populated an excel template worksheet with Crystal formula data (using XLS_Range_Insert).
 
The command line argument structure for XLS_Protect_Worksheets is as follows:

"XLS_Protect_Worksheets:Source_File>>Target_File>>Password"

The parameters (after the ":") are separated by a ">>" and are as follows:

 

  1. Excel Source File (path & name).

  2. [Optional] Excel Target File (path & name).  If none specified, source file is updated.

 

  1. Password: up to 15 characters in length. If left blank, the user doesn’t need a password to unprotect the worksheets.

 

You can use dynamic references to field or formula names within the command line argument. For example (all in one line):

"XLS_Protect_Worksheets:c:\temp\{@Branch}.xls>>{@Password}"



 

Without Excel Automation (new way)

This method does not use excel automation and allows you to define specific options for what the user is allowed to do. The command line argument structure is as follows:

"XLS_Protect_Worksheets_v2:Source_File>>Target_File>>Options"

The parameters (after the ":") are separated by a ">>" and are as follows:

 

  1. Excel Source File (path & name).

  2. [Optional] Excel Target File (path & name).  If none specified, source file is updated.

 

  1. Options: four '||' delimited items as follows:
    1. Type of protection: currently, only 'SHEET' is supported
    2. Sheet Name (or 'ALL_SHEETS' if you wish to target all of them
    3. Password
    4. Flags (delimited by &&) indicating protection options.
      Allowed flags are: All, Content, DeletingColumns, DeletingRows, Filtering, FormattingCells, FormattingColumns, FormattingRows, InsertingColumns, InsertingHyperlinks, InsertingRows, LockedCells, None, Objects, Scenarios, Sorting, UnlockedCells, UsingPivotTables

Note: to specify different protection options for different sheets, you can specify multiple 4-element options protection Options separated by ^^ Like this:
SHEET||Sheet1||sesame||Filtering^^SHEET||Sheet2||sesame||Sorting&&Filtering



For example, the following arguments would apply auto-filter and protect the workbook to allow users only to filter and sort the data:
…"XLS_AutoFilter:c:\temp\{@File}.xlsx>>True" …
"XLS_Protect_WorkSheets_v2:{@File}.xlsx>>SHEET||Sheet1||{@Pass}||Sorting&&Filtering"


 

Inserting File Exports into Excel Templates

Using XLS_Range_Insert_File command line argument, you can instruct Visual CUT to insert Excel (Data Only) exports into pre-formatted excel templates. See sample image1 & image2.

This approach has several advantages compared to XLS_Range_Insert (see next section):

1.      XLS_Range_Insert inserts data from formula values (limited to 65,534 characters). XLS_Range_Insert_File inserts data from files that can contain much more data

2.      If the target cell is not empty, the content is appended to the first empty area below.

3.      The method automatically detects the template row based on the target cell and the number of columns in the exported data. The format of all columns in the template row as well as the row height are applied to all inserted data.

4.      You can elect to also clone content from all other columns in the template row. This allows you to clone formulas that can refer to content in the inserted rows!

 

Here is an example of how the command line argument is structured:

"XLS_Range_Insert_File:C:\TEMP\Template.xlsx>>C:\TEMP\Template_Filled.xlsx>>
    c:\temp\export1.xlsx||Sheet1||B5||[Clone_Template_Row][Remove_Content_Top_Row]"

 

The elements (after the "XLS_Range_Insert_File:") are separated by a ">>" and are as follows:
1. Template excel file.

2. Resulting excel file.  In append scenarios, can be same as template file

3. Data source & insert instructions consisting of 4 "||" delimited elements:

a)      Excel (data Only) export file to be inserted

b)      Target sheet in template

c)      Target cell in template

d)     Options (may leave blank):

[Clone_Template_Row] is useful for cloning formulas outside template columns.
[Remove_Content_Top_Row] skips the top row of the inserted data.
[REPLACE] discards the data found starting with the target cell (instead of appending)
[USE_SOURCE_FORMATTING] to use data source formatting.


Notes:

a)      If the template range is a Table with sort and filter conditions, these choices are reapplied after the insert, so the populated table is sorted and filtered just as in the template.
See sample image1 & image2.

b)      If your template Table contains formula columns, sparklines, or any other content you wish to clone rather than overwrite, include a corresponding blank column in the excel export. You can use a formula that returns "" in Crystal to create such a blank column.

c)      You can specify multiple data source & insert instructions separated by a "^^" delimiter.

d)     Content below target cell gets pushed down as data is inserted.

e)      Row height of target cell is cloned to all inserted rows

f)       As always, the files path & name can contain dynamic references. For example:
"XLS_Range_Insert_File:c:\myTemplate.xlsx>>{@Result}>>{@DataFile}||Sales||E8||"

g)      You can fill templates in hidden sheets

h)      At the end of the process, Visual CUT restores the focus in the workbook to the original sheet and original selections in all sheets.

i)        The process can automatically handle cases where a Table contains a summary row.

j)        The process takes care of resetting data sources for pivot tables to the resulting workbook (instead of the original template workbook). This supports templates with pivot tables and charts. However currently this doesn't support cases where a Slicer is applied to multiple Pivot Tables/Charts. You can use PowerPivot tables to overcome that limitation.

k)      The [REPLACE] option allows you to maintain a template with prototype data. This ensures that design choices such as TopN filtering for Pivot Tables are not lost due to removing data from the template.

l)        Include [USE_SOURCE_FORMATTING] if your template file does not contain formatted data rows.


Video Demo of Refreshing Data in Excel Dashboard

Using the functionality above (in particular, the [REPLACE] option, an Excel dashboard with Pivot Charts, Pivot Tables, Filters, and Slicers can be refreshed with data exported from a Crystal report. To support keeping Pivot Slicers in sync when saving the template workbook into a new workbook, use PowerPivot as the source data for the pivot tables and pivot charts.

A 6-minute video demo of this approach is available here.

Other aspects, such as cloning conditional formats and formulas are demonstrated by the next section.
 


 

Sample Input & Output

image

The template workbook above contains conditional formatting for Revenue (Color Bars) and Lead Time (color scale from red to green) and is filled with data from an Excel (Data Only) export (with 7 columns) that looks like this:

image

While the Excel export contains 7 columns, the template workbook has an 8th column (column I) with a formula flagging late cases (Shipped date >= Required date).

Using the command line argument of:
"XLS_Range_Insert_File:C:\temp\Template.xlsx>>C:\Temp\Filled.xlsx>>
c:\temp\Data.xlsx||Sheet1||B5||[Remove_Content_Top_Row][Clone_Template_Row]"
the resulting workbook looks like this:
image


 

Splitting Workbook & Inserting into a Template (faster method)

If you need to burst one report and insert many resulting files into a template, XLS_Range_Insert_File_Split provides a faster process by processing a single Excel file as a source data and splitting it by the values in the first column of the spreadsheet.
Expect speeds of about 40 files per second.

Here is an example of how the command line argument is structured:

"XLS_Range_Insert_File_Split:C:\TEMP\Template.xlsx::9500>>
C:\TEMP\[1stColumnValue].xlsx>>c:\temp\DataSource.xls
||Sheet1||B5||[Remove_Content_Top_Row]"

 

The elements (after the "XLS_Range_Insert_File_Split:") are separated by a ">>" and are as follows:
1. Template excel file followed by :: and the last data row number in the template file. 

2. Resulting excel file.  The [1stColumnValue] token is replaced by the value in the 1st column, allowing each resulting file to have a dynamically controlled path & name.

3. Data source & insert instructions consisting of 4 "||" delimited elements:

a)      Excel (data Only) export file to be inserted (can be xls or xlsx)

b)      Target sheet in template

c)      Target cell in template

d)     Options (may leave blank):

[Remove_Content_Top_Row] skips the top row of the source data excel file.
[No_Shrink] skips the process of removing surplus rows from the template.

 

Keeping the Template File Small

The template file must be populated by at least as many rows as in the largest set of inserted rows. The process removes surplus rows. Template files with less rows keep the process faster. You can use a Crystal formula in GF1 to establish the maximum rows in any group:

NumberVar MaxRows;

Local NumberVar GroupRows := Count ({Employee.Last Name}, {Employee.Last Name});

IF GroupRows > MaxRows Then MaxRows := GroupRows;

And in Visual CUT refer to a Report Footer formula to dynamically point the process at a differently sized template:

NumberVar MaxRows;

Select MaxRows

Case is < 100: "C:\XLS_Range_Insert_File\Template99.xlsx::99"

Case is < 991: "C:\XLS_Range_Insert_File\Template990.xlsx::990"

Default: "C:\XLS_Range_Insert_File\Template9976.xlsx:9976"  ;

 

Notes

a)      The data in the 1st column is used only to drive the process (splitting and naming of the resulting files. It does not get inserted into the template.

b)      This functionality is currently available only in Visual CUT 11.

c)      Use Auto-Filter rather than Table in the template.

d)     Summary formulas below the template data range should use INDIRECT() to refer to the last cell in a column.  For example:
SUM(E5:INDIRECT("E" & ROW()-1)) instead of SUM(E5:E9776)

e)      Save the template file with the selected cell at the top rather than the bottom of the sheet.

f)       Performance is faster if report groups are sorted in Descending order of number of records per group.

 

Token Substitution

If you wish to replace the text content of certain cells in the template with dynamic information from each data slice, you can do so by expanding the content of the 1st data column like this:
Sales by Leverling^^[[Title]]->Leverling||[[Rows]]->46

 

The first part, before the ^^ is the content that would drive the new file names using the [1stColumnValue] token.
The following text is treated as From->To pairs, separated by || delimiters.

Here is an image demonstrating the tokens being substituted:

image

The Crystal report acting as the Excel (Data Only) export data source was sorted by Employee.  
The Suppress expression for the 1st column makes it visible only for first employee record:

IF OnFirstRecord Then False

ELSE {Employee.Last Name} = Previous({Employee.Last Name});


image

Inserting Crystal Values into Excel Templates

Using a command line argument, you can instruct Visual CUT to replace named ranges inside MS Excel spreadsheets with values of formulas with matching names. The file can then be saved to a new dynamically named file and emailed as part of a bursting Visual CUT process.

The advantage of this technique over directly exporting/bursting a Crystal report to excel spreadsheets is that you can keep and control all elements in the template spreadsheet. For example, the template spreadsheet may have formulas, conditional formatting, hidden columns, and macros.   

 

 Here's an example of the command line argument structure:
"XLS_Range_Insert:c:\template.xls>>c:\target.xls"

The arguments (after the "XLS_Range_Insert:") are separated by a ">>" and are as follows:

1. The path & name of the template XLS file (containing named ranges).
 

2. [optional] The path & name of the resulting XLS file.  If the command line specifies only a template file, that file will simply be updated.

As always, the files path & name can contain dynamic references. For example:
… "XLS_Range_Insert:C:\temp\Master.xls>>c:\temp\{Faculty.Faculty_Name}_{[yyyy]}.xls"


Or, if the source file needs to be updated (without creating a new file:

… "XLS_Range_Insert:c:\temp\{Faculty.Faculty_Name}_{[yyyy]}.xls"

Specifying Named Ranges in the Excel Template and Matching Formulas in Crystal

To create a named range in excel, simply select the cell(s) and type a name for the range in the cell address area above column A.

To identify a formula in a Crystal report that should provide the value(s) for a named range, the formula name must start with VC_XLS_Range_Insert_  followed by the range name. 
For example, the formula VC_XLS_Range_Insert_Ref_J would insert values into a named range called Ref_J .


Notes:
- Visual CUT can handle named ranges even if they reside inside hidden tabs.
- Crystal’s formula string length is limited to 65,534 characters.
- In order for Visual CUT to recognize the value of the Crystal formula, it must be placed in:
   1. The Report Header or Footer or
   2. Group Header 1 or Group Footer 1 if the report is being burst by Visual CUT.

The named ranges must have a Workbook scope. If you create a named range and then make a copy of the sheet within the same workbook, you will need to use the Name Manager within Excel to rename and set the scope of the named range to ‘Workbook’.

Crystal Formula Content for Multi-cell and multi-row Named Ranges

For a single cell named range, the Crystal formula can simply return the desired text.

 

For multiple cells in a single row named range, the formula value must be a string delimited according to the following structure:
- Multiple cells should be separated with a "||" delimiter.
- Multiple rows should be separated with a "&&" delimiter


The named range doesn’t need to have as many row cells as elements in the formula row. Visual CUT starts inserting cells in the left-most column of the named range and continues with as many cells there are in each formula row. 

The named range the template Excel spreadsheet should have at least 2 rows if the formula will provide more than one row of data.  Visual CUT will expand the named range to accommodate the number of rows.

Blank cell values should be provided as [vc_null]


Here is an example of this approach in the context of populating a named range (Ref_J) with faculty refereed journal publications.  The final formula simply returns the value of a global string variable that has been accumulated via other formulas:

GH1 Formula to reset the global string variable:

WhilePrintingRecords;

Global stringvar Range_Values := "";


Detail Formula
to accumulate the information into the Range_Values string variable:

 

WhilePrintingRecords;

Global stringvar Range_Values;

Local StringVar New_Range_Values;

Local stringvar ls_REF_J_Date;

IF IsNull({REF_J.Date}) Then

    ls_REF_J_Date := "[vc_null]"

else

    ls_REF_J_Date := {REF_J.Date}; 

 

New_Range_Values :=

{REF_J.Title} & "||" &

{REF_J.Journal Name} & "||" &

ls_REF_J_Date & "||" & 

"[vc_null]" & "||" &

ls_REF_J_Points ;

 

IF Len(Range_Values) = 0 Then

Range_Values := New_Range_Values

Else

Range_Values := Range_Values & "&&" & New_Range_Values;

 

 

Group Footer Formula:  {@VC_XLS_Range_Insert_Ref_J}
 with a name matching the named range in the spreadsheet:

WhilePrintingRecords;

stringvar Range_Values;

 

Populating Multiple Named Ranges

To populate multiple named ranges, you simply need to have multiple formulas in the Crystal report.  Each formula must be named (as explained above) to match the desired named range in the excel spreadsheet.

Visual CUT loops through all named ranges in the excel workbook and, if it can find a matching Crystal report formula, it will undertake populating the range with the formula value(s). 


In some cases, the data for different named ranges may require formulas in different Crystal reports.  You can simply create a multi-line batch file that calls one report and populates some named ranges, and then calls another report to populate other named ranges.

Notes:

 

 


 

Before & After Images

 

Here is what a portion of a template spreadsheet may look like
with a named range (Ref_J) selected:

 

image

 

 

 

And here is that same range in the resulting excel file after Visual CUT automatically populated and expanded it with data from the {@VC_XLS_Range_Insert_Ref_J} Crystal formula:

 

image


 

Transferring Tabs To Another Workbook

Using a command line argument, you can transfer tabs from one workbook to another and even rename the transferred tabs based on Crystal fields/formulas.  This is particularly useful when bursting report information into named ranges in a template workbook, and then gathering the resulting tabs into a single workbook with multiple tabs.

 

 Here's an example of the command line argument structure:
"XLS_Transfer_Tabs:[c:\my.xls||Tab1::Tab2]>>[c:\{@WB}.xls}||{@Tab1}::{@Tab2}]"

The arguments (after the XLS_Transfer_Tabs:) are grouped into two main parts, each surrounded by square brackets and separated by a ">>":

1. The first part specifies the source excel workbook and, after a || delimiter, the list of tab names (separated by :: from each other) that should be transferred to the target workbook. 

2. The second part specifies the same information, but for the target workbook.


Notes:

a)                  The target tabs can specify different names than the source tabs.  Renaming occurs based on the position within the list of tabs.

b)                  If the target workbook doesn’t exist, it gets created.

c)                  If a target tab already exists in the target workbook, it gets replaced.

d)                 Since this argument executes after XLS_Range_Insert, the two processes can be chained into one command line.

e)                  As always, the files path & name can contain dynamic references.

f)                   If the Use_Excel_Component_v3 option is set to True, this argument is handled by an internal component (without needing Excel).

Splitting Excel Workbooks by Tabs

Using a command line argument, you can split an Excel workbook so each tab becomes a separate PDF or Excel file.

 Here's an example of the command line argument structure:
"XLS_Split_Tabs:c:\my.xlsx||PDF||c:\new_[Tab_Name].pdf||Landscape||True"

The parameters (after the ":") are separated by a "||" and are as follows:

  1. Source_WorkBook: path & name of the source excel file (e.g. c:\temp\Sales.xls)
  2. Target File Format: PDF or XLSX
  3. Target File: the path and name of the target file for each tab. The [Tab_Name] token gets replaced with the name of the tab.
  4. PDF Page Orientation: Landscape or Portrait
  5. Ignore Print Areas: True (include all content) or False (include Print Areas Content)

 


Notes:

a)                  Blank/Hidden tabs and skipped

b)                  If a target file for a given tab already exists, it gets replaced

c)                  Missing folders for target files are created automatically

d)                 For PDF format, the content of each tab gets fitted into a single PDF page

e)                  As always, the argument may contain dynamic references to fields/formulas.
for example:
…"XLS_Split_Tabs:c:\temp\Sales_in_{@Year_Parameter}.xlsx||PDF||
              c:\temp\Sales_in_{@Year_Parameter}_for_[Tab_Name].pdf||Landscape||True"

 

 


 

Splitting Excel Workbooks by First Column

Using a command line argument, you can instruct Visual CUT to split the first worksheet in an Excel Workbook so that the rows for each unique value found in the first column are split to a different workbook named based on the unique value.

For example, the following spreadsheet:

 image

would be split according to the unique values in the 1st column to create 2 workbooks called:
Job1.xlsx (with 3 rows) and
Job2.xlsx (with 2 rows)
The advantage over regular bursting is that the process is faster.

 

Here's an example of the command line argument structure:
"XLS_Split_ByColumn:c:\my.xls||XLSX||c:\temp\||0||Replace||True||"

"XLS_Split_ByColumn:c:\temp\Maintenance_Summary_Page_for_Split.xls||XLSX||c:\temp\test3\||0||Replace||True||"


The parameters (after the ":") are separated by a "||" and are as follows:

  1. Source_WorkBook: path & name of the source excel file (e.g. c:\temp\Sales.xls)
  2. Target File Format: XLSX
  3. Target Path: the path (ending with a '\') to where the split files would be created. The names of the generated workbooks are based on the values in the first column of the Source Workbook
  4. Number of Header Rows in the Source Workbook. 
    note: can be 0 if the source workbook has no header rows..
  5. Action if target spreadsheets exist: Replace or Append
  6. Delete 1st Column?: True (delete it) or False (don't delete it)
  7. Options:
    - include the text [AutoFit] if you want to AutoFit column widths in resulting workbooks.


Notes:

a)                  Header rows (based on item 4 above) are transferred to all target files.

b)                  Missing target folder is created on the fly

c)                  As always, the argument may contain dynamic references to fields/formulas.

 


 

Merging Excel Workbooks

Using a command line argument, you can instruct Visual CUT to merge worksheets (collect all the tabs) from multiple workbooks (specified explicitly or using wild cards) into a single workbook.

Here's are a few examples of the command line argument structure:
"XLS_Merge:c:\AR.xlsx;AP.xlsx>c:\Merged.xlsx>"

with wild cards:
"XLS_Merge:c:\Dash\title.xlsx;c:\Dash\KPI*.xlsx>c:\Merged.xlsx>"

 

With wildcards and dynamic formula reference:
"XLS_Merge:c:\Dash\{@CustID}_*.xlsx>c:\Merged.xlsx>"



The parameters (after the ":") are separated by a ">" and are as follows:

  1. Source_WorkBook: path & names of the source excel files separated by semi-colons. These could be a mix of xls and xlsx files.
    If they share same path, you can specify path just for the first file.
    Any file in the list can also use wild cards. For example. C:\temp\Merge\*.xlsx

  2. Merged file path and name.

  3. Options: leave blank (for future use)

Notes:

As always, the argument may contain dynamic references to fields/formulas. For example,

Generating Excel Pivot Tables

Visual CUT can automatically generate an Excel Pivot Table based on an existing or newly exported (Data Only) excel worksheet. This can be very valuable in cases where you want to give users an easy and familiar way to Slice & Dice the data.

The command line argument structure is as follows:
"XLS_Pivot_Table:Source_WorkBook>New_WorkBook>Tab>…"

The parameters (after the ":") are separated by a ">" and are as follows:

  1. Source_WorkBook: path & name of the source excel file (e.g. c:\temp\Sales.xls)
  2. New_WorkBook: path & name of file to create (e.g. c:\temp\Sales_and_Pivot.xlsx)
    • if left blank, the Pivot table gets added as 1st tab in the existing WorkBook
    • if the style argument is not blank, the destination file should have .xlsx extension
      and the machine should have Excel 2007 or later
  3. Tab: the sheet name in the source workbook where the data block is. Typically: Sheet1
  4. Range Name: [Optional]. If blank, data with column headers is assumed to start at A1.
  5. Pivot/Tab Name: Pivot Table and New Worksheet Tab.   To Target an existing Tab, specify: PivotName||TabName||Cell_Address (for example, Pivot1||Sales||D20)
  6. Row Elements: field names separated by "||".  For example, "Country||City" would use Country as level 1 row group and City as level 2 row group
  7. Row Element Sort: a sort code for each row element specified above, separate by "||"
    • A for Ascending, D for Descending, N for No Sort
    • T# for TopN (for example T7 for Top 7), B# for BottonN (B12 for Bottom 12)

Last element (after "||") must specify the CAPTION name of the Column Controlling the Sort (e.g., "Revenue"). For example: "T5||D||Revenue" would show Top 5 countries and within that cities in Descending order based on "Revenue"

  1. Column Elements: field names separated by "||".  ("Employee||Product Name")
  2. Column Element Sort: same logic as for Row Element Sort
  3. Page Filter Elements: field names separated by "||".  ("Product Class||Product Type")
  4. Data Elements: separated by "||" and providing 4 sub-elements separated by "::"
    1. Field name – the column header from the raw data block (e.g. "Value")
    2. Caption - a user-friendly name. For example, "Revenue"
    3. Summary Type – current options include: Sum, Count, Average, Max, Min, or Var
    4. Format String – for example:  $#,##0,K or 0.0%
    For example: "Value::Revenue::Sum::$#,##0,K||Late::% Late::Average::0.0%"
    specifies 2 pivot table metrics. The ‘Revenue’ metric is a sum of the Value field, and is  formatted as thousands of dollars.  The ‘% Late’ metric is an average of the Late field and is formatted as percent. 
  5. Show Grand Totals: "Both", "None", "Rows", or "Columns"
  6. Show Subtotals: "None", "Bottom", or "Top"
  7. Style: same style names as in Excel, but without spaces (e.g. "PivotStyleMedium23"
  8. Show Bands: "Both", "None", "Rows", or "Columns"
  9. Show Blank Rows: "Yes" to insert a blank line after each group level 1 row.
  10. Hide Data Tab: "No", "Yes" (allow unhide), "YES" (no GUI option to unhide).
  11. Hide Field List: Yes hides the field list on the right side of the screen.
  12. Data Orientation: (optional)"Rows" (Default) or "Columns" (to show metrics side-by-side)
  13. Options (optional): various options separated by ‘||’ (e.g. Report_Layout=Tabular)

Let’s take as an example the following command line argument (all in 1 line):

"XLS_Pivot_Table:c:\temp\Before_Pivot.xls
>c:\temp\After_Pivot.xlsx>Sheet1
>>Revenue Pivot Table
>Country>T7||Revenue>Employee>D||Revenue>Year||Prod_Class||Prod_Type
>Value::Revenue::Sum::$#,##0,K||Late::% Late::Average::0.0%
>Both>Bottom>PivotStyleMedium23>Rows>Yes>YES>False"


That command line argument tells Visual CUT to take the "Before_Pivot.xls" file (which was generated by Visual CUT as an Excel Data Only export) and convert it to a new "After_Pivot.xlsx" excel 2007 file.  The data found in the Sheet1 tab

image


is used to generate a Pivot Table in a new tab called "Revenue Pivot Table":
image

Country>T7||Revenue
  set the rows to Top 7 Countries by Revenue
Employee>D||Revenue set the columns to Employees sorted Descending by Revenue
Year||Prod_Class||Prod_Type set the Page filters (top-left drop-downs)
Value::Revenue::Sum::$#,##0,K||Late::% Late::Average::0.0% set Revenue & % Late as metrics
PivotStyleMedium23>Rows>Yes set the style, banded rows, and a space after each row group
The YES>False at the end hides the tab for the raw data and doesn’t hide the field list.

Notes:

1.      A wizard for generating the command line argument is available for download from:
http://www.milletsoftware.com/Download/Pivot_Table_Wizard.xlsx

 

2.      Visual CUT takes care of auto-fitting column widths for both the raw data block for the pivot table as well as for the pivot table itself.

3.      If the information is sensitive, you can also password protect the workbook using a command line argument such as:  "XLS_Protect:c:\temp\After_Pivot.xlsx>sesame"

4.      XLS_Pivot_Table is always processed before XLS_Protect so you can generate the workbook with the pivot table, password-protect it, and email it using a single Visual CUT process.

5.      To support Style & Banded effects, the Visual CUT machine must have
Excel 2007 or later.

6.      The last Options argument currently supports only 3 Report_Layout directives:

Report_Layout=Compact / Report_Layout=Outline / Report_Layout=Tabular

Tabular uses field names instead of generic ‘Row Labels’ and ‘Column Labels.’

 

7.      The "Top" value for the ‘Show Subtotals’ option applies only to cases where the Pivot Table has a single Data element.  It also applies a compact Outline layout to the resulting Pivot Table.

8.      Sample report for exporting (to Excel Data Only) as a basis for generating a pivot table is available for download at:
http://www.milletsoftware.com/Download/Pivot_Data.rpt

9.      To handle excel exports that require more than 65,536 rows of data, you can simply specify a file extension of .xlsx (instead of .xls). For other situations (where the excel file is not exported from Visual CUT), you may use the XLS_to_XLSX command line argument described in the next section.

10.  You may specify multiple "XLS_Pivot_Table:…" arguments and Visual CUT will execute all of them in the order they are specified. If you wish to hide the data tab, set that option to Yes only on the last process that needs access to it.

 

 


Refreshing Data (Queries, Pivot Tables) from all Connections

Excel workbooks can use external data for Queries and Pivot Tables. You may need to automate the process of refreshing that data (causing all connections used by the workbook to retrieve the data from external sources such as databases or web services).
The command line argument structure is as follows:
"XLS_Refresh:Source_WorkBook>>New_WorkBook>>Sleep_Seconds"

Or, if you don't wish to save the updated source file:

"XLS_Refresh:Source_WorkBook>>>>Sleep_Seconds"
Or, if you if wish to save the updated source file and there's no need to wait for the data retrieval to complete (the query option of 'Enable Background Refresh' is disabled):
"XLS_Refresh:Source_WorkBook"

The parameters (after the ":") are separated by a ">>" and are as follows:

  1. Source_WorkBook: path & name of the source excel file (e.g. c:\temp\Sales_Before.xls)
  2. New_WorkBook: path & name of file to create (e.g. c:\temp\Sales_After.xlsx)
  3. Sleep_Seconds: number of seconds to wait after initiating the refresh (before saving)

 

Note: if New_Workbook is left blank, the process saves the source workbook after the refresh.

 



Running an Excel Macro

After exporting a report to Excel, you may wish to trigger a global excel macro (a macro that was created as logic that can apply to any open workbook) to process the generated data. Or perhaps you used TabInOldFile_Replace! to insert the excel export as a tab inside an existing workbook that has a Macro you wish to trigger.

The command line argument structure is as follows:

"XLS_Run_Macro:
Source_WorkBook>>New_WorkBook>>Macro_WorkBook>>Macro"

Or, if you don't wish to save the updated source file:

"XLS_Run_Macro:Source_WorkBook>>>>Macro_WorkBook>>Macro"

If the Macro is available through an add-on or resides in the source workbook, leave the Macro_Workbook argument blank:
"XLS_Run_Macro:Source_WorkBook>>New_WorkBook>>>>Macro"

Or, if there is no saving to a target file):

"XLS_Run_Macro:Source_WorkBook>>>>>>Macro"

The parameters (after the ":") are separated by a ">>" and are as follows:

  1. Source_WorkBook: path & name of the source excel file (e.g. c:\temp\Sales_Before.xls)
  2. New_WorkBook: path & name of file to create (e.g. c:\temp\Sales_After.xlsx)
  3. Macro_WorkBook: path & name of the workbook containing the Macro
  4. Macro: the name of the Macro to run

 

Notes:

1.      You may need to add the location of the source excel file to the list of trusted locations (using Excel’s Trust Center).

2.      If New_Workbook is left blank, the process does not save the source workbook after the process.  So if you want to save the updated workbook to the same path and file name, you must specify it.

3.      As usual, you can embed field/formula references in the command line argument.
For example,

"XLS_Run_Macro:{@Exported}>>>>C:\Excel\Global_Macros.xls>>MyMacro"





Modifying Excel Files

Currently, this command line argument supports only the option to hide gridlines. The structure is as follows:
 
"XLS_Modify:InFile>>OutFile>>Options"

The parameters (after the ":") are separated by a ">>" and are as follows:

1. InFile: the file path & name for the source Excel file. 

 

2. OutFile: the file path & name for the resulting Excel file. 

            - If no OutFile is specified, the source file gets updated
            - if the target folder doesn’t exist, Visual CUT creates it
            - if no path is specified (just name) the path of the source file is used


4. Options: Specify [NoGrid] to hide gridlines.

For example:
"XLS_Modify:c:\temp\test.xls>>c:\temp\test_NoGrid.xlsx>>[NoGriod]"
 
Dynamic Field Names

As usual, you can refer to field or formula names within the command line argument.


 

Replacing Content in Excel Files

Using a command line argument, you can instruct Visual CUT to replace any number of strings in an Excel file with specified substitutions. The replacement logic can use dynamic values from a Crystal field or formula. Also, by forcing a re-evaluation of the content in cells with replaced content, exported content in a cell can be turned into a dynamic Excel formula.
The command line argument structure is as follows:

"XLS_Replace:InFile||OutFile||find1>>replace1::find2>>replace2||Options"

The parameters (after the ":") are separated by a "||" and are as follows:

1. InFile: the file path & name for the source Excel file. 

 

2. OutFile: the file path & name for the resulting Excel file. 

            - If no OutFile is specified, the source file gets updated
            - if the target folder doesn’t exist, Visual CUT creates it
            - if no path is specified (just name) the path of the source file is used

3. Find & Replace Pairs: unlimited number of find and replace elements.
Each "find" element is separated from its "replace" element by a ‘>>’. 
Each pair is separated from the next pair by a ‘::

- To specify special string characters, such as Carriage Return or Line Feed,
    use Chr() expressions (e.g., Chr(10) or Chr(13).
- To remove strings, specify them in the ‘find’ and leave the ‘replace’ as blank


4. Options: Specify [TargetHyperlinks] to target only hyperlink addresses of cells. Note: that option is
    supported only when the ini file has Use_Excel_Component_v3=True (which is the default).


For example, to replace ^= with = (useful for turning formula expressions into formulas, if in Crystal you export the expression starting with "^=", use this command line argument:
"XLS_Replace:c:\temp\Input.xlsx||||^=>>=||"
 
Dynamic Field Names

As usual, you can refer to field or formula names within the command line argument.

Exporting Formula Expressions to Excel, and Activating Them

Imagine you wish to export a Crystal report to Excel, and some of the cells in the export contain formula expressions like this: "=ROUND(C3*(1+($D$2/100)),2)"
The excel export would treat such cells as TEXT rather than as a formula that refers to other cells in the exported file. To activate the cell so it becomes an Excel formula, change the expression in Crystal so it starts with something unique. For example: "^=ROUND(C3*(1+($D$2/100)),2)"
Then, use "XLS_Replace:c:\temp\MyFile.xlsx||||^=>>=||" to activate the formula.


Find & Replace Content in Excel Columns

Using a command line argument, you can instruct Visual CUT to find & replace content in specified columns of an excel file. This is currently restricted to cases where you wish to replace blank values with numeric zero. This ensures the column is treated as a numeric data type when the file is later used as an ODBC data source.

The command line argument structure is as follows:
"XLS_Replace2:Input_File>>Output_xlsx_File>>Merge_Tabs?>>
                                                                                                 Find^^Replace^^Columns"

The parameters (after the ":") are separated by a ">>" and are as follows:

  1. Input_ File: path & name of the source .xls, .xlsx, or .csv file (e.g. c:\temp\Sales.csv)
  2. Output_xlsx_File: path & name of .xlsx file to create (e.g. c:\temp\Sales.xlsx)
  3. Merge_Tabs?: use a value of True to request that all tabs be merged into the first tab (tabs 2 and later are then removed).
  4. Find & Replace directive structured as 3 elements separated by ^^ delimiters:
    a) Find What? Currently, only [Blank] is supported
    b) Replace with what?  Currently, only [0] is supported (a numeric zero)
    c) Target what columns for search? Specified as column names separated by ||

    For example:  …>>[Blank]^^[0]^^N||AK" would replace blanks in the used range with 0, but only within the used range in the first sheet and only for columns N and AK.
    The full command line would look like this:
    "XLS_Replace2:c:\temp\Before.csv>>c:\temp\Master-ODBC.xlsx>>False>>
                                                                                                       [Blank]^^[0]^^N||AK"


Notes:
This argument is supported only when the ini file has
Use_Excel_Component_v3=True
(which is the default).



Convert XLS/CSV Files to XLSX (and merging sheets)

Using XLS_to_XLSX command line argument, you can ask Visual CUT to convert a file from .xls or .csv to .xlsx format. The key benefits are:

·         .xlsx files are not limited to 65,536 rows per sheet.  During exports to .xls, Crystal and Visual CUT create multiple tabs inside the workbook when there are more than 65,536 rows. The conversion to .xlsx can merge these multiple tabs into one tab

·         .xlsx files are smaller.  For example, an export to .xls that created two tabs (one tab with 65,536 rows and one tab with 56,027 rows) resulted in a 11.3MB .xls file.  After converting and merging to a single-tab .xlsx file (with 121,563 rows), the file size dropped to just 2.7MB.

 

The command line argument structure is as follows:

"XLS_to_XLSX:Input_xls_File>>Output_xlsx_File>>Merge_Tabs?"

For example: "XLS_to_XLSX:c:\temp\out.xls>>c:\temp\out.xlsx>>True"


The parameters (after the ":") are separated by a ">>" and are as follows:

  1. Input_xls_File: path & name of the source .xls or .csv file (e.g. c:\temp\Sales.xls)
  2. Output_xlsx_File: path & name of .xlsx file to create (e.g. c:\temp\Sales.xlsx)
  3. Merge_Tabs?: use a value of True to request that all tabs be merged into the first tab (tabs 2 and later are then removed).


Notes:

1.      If you simply specify an export file name with an.xlsx extension, Visual CUT executes an implicit XLS_to_XLSX conversion (it exports to a temporary .xls file, converts and merges sheets into the specified .xlsx file, and deletes the temporary .xls file. This means you do not need to explicitly specify an XLS_to_XLSX argument.

2.      To ensure proper merging of multiple tabs, make sure the first column in the excel export is not blank.

3.      XLS_to_XLSX is executed before XLS_Pivot_Table. This allows a single command line to trigger exporting of a large data set to a multi-tab .xls file, conversion to a
single-tab .xlsx file, generation of a pivot table, and emailing of the resulting workbook.

4.      If the xlsx file name contains 'ODBC' Visual CUT automatically adds a named range called 'VC_DATA' pointing at the used range in the first tab. This facilitates using the resulting workbook as an ODBC data source for other reports.


 

Convert Excel Files to PDF

You can save an Excel file to a PDF File. Here's an example of the command line argument structure:

"XLS_Save_As:c:\temp\Invoice.xls>c:\temp\Invoice.pdf>PDF>0>1>Competition"

The parameters (after the "XLS_Save_As:") are separated by a ">" and are as follows:

  1. The path & name of the Excel file (xlsx files are supported as well)
  2. The path & name of the target PDF file
  3. Save As Format (PDF)
  4. Optimized For Screen (1/0)
    a value of 0 would create a higher-quality (optimized for print) but larger pdf file.
  5. Ignore Print Areas: 1-True, 0=False
  6. Save Scope: Tab Name, or  0=Workbook, or Tab Number: 1=1st worksheet, 2=2nd, …
    note: currently, only a single value between 0 and 9 is acceptable,
    so you can save either the whole workbook or one of the first 9 tabs.

 

Notes:

 

If you wish to fit the tab content into a single pdf page, you may need set the Print properties for the tab to ‘Fit Sheet on One Page’.

As usual, any of these arguments can contain references to fields or formulas and Visual CUT would dynamically replace the reference with the value in the report.  For example:
"XLS_Save_As:{@file_name}.xlsx>{@file_name}.pdf>PDF>0>0>1"

The machine must have MS Excel 2007 or higher.  If 2007, it must have the
"2007 Microsoft Office Add-in: Microsoft Save as PDF or XPS AddOn" which allows Microsoft Excel to save documents as PDF.  If you don’t already have that option enabled in MS Excel, you can download it from:
http://www.microsoft.com/downloads/details.aspx?FamilyId=4D951911-3E7E-4AE6-B059-A2E79ED87041&displaylang=en

 

 


 

Convert Excel Files to HTML

You can save an Excel file to a HTML File and display it in an email using an [[Insert_File:]] directive.
image


For example, export & generate a Pivot Table, and embed the pivot table in the email message body.
Or fill a range or cell values in an excel template with report data. Then, embed the resulting HTML file as an

Here are examples of the command line argument structure:
to convert the Competition tab:
"XLS_Save_As:c:\temp\Invoice.xlsx>c:\temp\Invoice.htm>HTML>0>0>Competition"
to convert a Pivot Table called Revenue, residing on a Revenue tab. No title:
"XLS_Save_As:c:\temp\After.xlsx>c:\temp\Revenue.htm>HTML>>Revenue>Revenue"

"XLS_Save_As:c:\temp\After_Pivot.xlsx>:c:\temp\Revenue_PivotTable.htm>HTML>0>Revenue Pivot Table>Revenue Pivot Table"


The parameters (after the "XLS_Save_As:") are separated by a ">" and are as follows:

  1. The path & name of the Excel file (xlsx files are supported as well)
  2. The path & name of the target HTML file
  3. Save As Format (HTML)
  4. Pivot Table Title: Ignored if not targeting a Pivot Table. Set to blank to avoid a title.
  5. Pivot Table Name: Leave as blank or 0 if not targeting a Pivot Table
  6. Save Scope: Tab Name or 0=Workbook, or Tab Number: 1=1st tab, 2=2nd
    note: you can save either the whole workbook or one of the first 9 tabs.

Notes:

·         If the save scope is not 0 (Workbook), the machine must have MS Excel installed.

·         As usual, any of these arguments can contain references to fields or formulas and Visual CUT would dynamically replace the reference with the value in the report.  For example:
"XLS_Save_As:{@file_name}.xlsx>{@file_name}.htm>HTML>>0>1"

Or, if targeting a Pivot Table:

"XLS_Save_As:c:\temp\After.xlsx >c:\temp\Revenue.htm>HTML>{@Pivot_Title}>Revenue>Revenue"


 

Convert Excel Files to CSV

You can save an Excel file to a CSV File. Here are example of the command line argument structure:
"XLS_Save_As:c:\temp\Invoice.xlsx>c:\temp\Invoice.csv>CSV>>>0"

The parameters (after the "XLS_Save_As:") are separated by a ">" and are as follows:

  1. The path & name of the Excel file (xlsx files are supported as well)
  2. The path & name of the target CSV
  3. Save As Format (CSV)
  4. Options. Leave blank or specify options:
    1. To use a '~' as delimiter, use Delimiter:~   for example: "XLS_Save_As:c:\temp\Data.xlsx>c:\temp\Data.csv>CSV>Delimiter:~>>0"
      To specify a hidden character such as Tab, use the Chr code for it. Tab is Chr(9), so use:
      "XLS_Save_As:c:\temp\Data.xlsx>c:\temp\Data.csv>CSV>Delimiter:Chr(9)>>0"

    2. To qualify all text elements inside double quotes, use Qualifier:True   for example: "XLS_Save_As:c:\temp\Data.xlsx>c:\temp\Data.csv>CSV>Qualifier:True>>0"
      note: this option is available only via Use_Excel_Component_v3

    3. To specify character encoding, use Encoding:EncodingType
      Supported Encoding Types:
      ASCII, Unicode, utf7, utf8, utf8-No-BOM, utf32, BigEndianUnicode

    4. To specify multiple options, separate them with || like this:
      Delimiter:~||Qualifier:True||Encoding:ASCII

  5. Leave Blank
  6. Save Scope: Tab Name, or  0=Workbook, or Tab Number: 1=1st worksheet, 2=2nd, …
    note: currently, only a single value between 0 and 9 is acceptable,
    so you can save either the whole workbook or one of the first 9 tabs.

Notes:

·         To avoid using Excel automation for this, Save Scope must be set to 0 and the ini option of Use_Excel_Component_v3 must be set to True.

·         A typical use scenario is to use Visual CUT to export a report that contains a subreport. Such cases don't export well directly to CSV, but exporting first to Excel (Data Only) and then converting to CSV solves the problem.

·       As usual, any of these arguments can contain references to fields or formulas.


 

Convert Excel Files to TEXT

You can save an Excel file to a TEXT File. Here are example of the command line argument structure:
"XLS_Save_As:c:\temp\Invoice.xlsx>c:\temp\Invoice.txt>TXT>Windows>NoQuotes >1"

The parameters (after the "XLS_Save_As:") are separated by a ">" and are as follows:

  1. The path & name of the Excel file (xlsx files are supported as well)
  2. The path & name of the target text file
  3. Save As Format (TXT)
  4. Text Format: MS-DOS or Windows
  5. Options: Leave Blank or use 'NoQuotes' to remove extra double quotes added by the excel export.
  6. Save Scope: Tab Name, or  0=Workbook, or Tab Number: 1=1st worksheet, 2=2nd, …
    note: currently, only a single value between 0 and 9 is acceptable,
    so you can save either the whole workbook or one of the first 9 tabs.

Notes:

·         The machine must have MS Excel installed. To avoid using Excel automation for this, Save Scope must be set to 0 and the ini option of Use_Excel_Component_v3 must be set to True.

·         A typical use scenario is to use Visual CUT to avoid wide text truncation when exporting to TEXT. By exporting first to Excel (Data Only) and then converting the result to a text file you avoid loss of data.

·         As usual, any of these arguments can contain references to fields or formulas.




 

Convert Excel Files to JSON

This is useful when you need JSON for web dashboards widgets or for data exchange.
Here are example of the command line argument structure:
"XLS_Save_As:c:\temp\Data.xlsx>c:\temp\Data.txt>JSON>>>0"

Or

"XLS_Save_As:c:\temp\Data.xlsx>c:\temp\Data.txt>JSON>Variable:customers>>0"
Or

"XLS_Save_As:c:\temp\Data.xlsx>c:\temp\Data.txt>JSON>Variable:Data||QuoteNames:False>>0"

Here is what the output from the 2nd example looks like. The Variable:customers directive prefixes the json output inside an array variable named "customers". This structure can be easily consumed by web dashboard widgets such as dynamic grids and charts:

image

The parameters (after the "XLS_Save_As:") are separated by a ">" and are as follows:

  1. The path & name of the source Excel file
  2. The path & name of the result file
  3. Save As Format (JSON)
  4. Directives: 2nd example above encloses output in a variable name called "customers". QuoteNames:False directive removes double quotes from property names.
  5. Options: Leave blank
  6. Save Scope: must be 0

Notes:

·         The process automatically detects and applies the correct data types. For example, in the image above, dates are formatted as dates and numbers are not enclosed in quotes.

·         Missing values are set to null as shown in the image above for the Color property.

·         The ini option of Use_Excel_Component_v3 must be set to True.

·         As usual, any of these arguments can contain references to fields or formulas.

·         The default is to enclose property names in double quotes.

·         Multiple directives are separated by || as demonstrated by the 3rd example above.

·         Use Nested{}:Unquote directive to fix cases where the excel column contains nested objects. With this directive an excel column called tooltip containing:
{text: "Millet Software, Erie PA 16509"}
would be converted to a nice:
{text: "Millet Software, Erie PA 16509"}
but without this directive, it would be converted to:
tooltip: {text: \"Millet Software, Erie PA 16509\"}

·         Use Remove_.0 directive to remove .0 from integer values (e.g. "Quarter": 3.0, …)

·         Use Remove_T0 directive to remove T00:00:00 from dates
(e.g. "Order Date": "2004-09-30T00:00:00", …)






 

Upload Excel/CSV Data to Database

You can Replace, Insert or Upsert (if a record with matching columns exists, update it; otherwise, insert) data from Excel or CSV files into a database. This bulk process is blazingly fast but is currently restricted to SQL Server. The operation runs as an atomic transaction (all or nothing).  See video demo.


The workbook could be the result of Visual CUT exporting a Crystal report to Excel (Data Only)
or it could be an externally provided workbook (e.g. attached to an email captured by Visual CUT).

Here is an example of the command line argument:

"XLS_2DB:SQL Server>>C:\temp\Data.xlsx>>Sheet1>>A1>>Data Source=.;Initial Catalog=ActionQ_Mirror;Integrated Security=True;>>TableName>>Order Date->Order_Date||Year->Order_Year>>
DOW||Cst_Qs>>"">>False>>Insert>>True>>5000>>"

 

The elements (after the "XLS_2DB:") are separated by a ">>" and are as follows:
1. SQL Server (the DBMS type. Currently, only SQL Server is supported)

2,3,4. excel/csv file>>Source tab name>>Top-Left cell of the source data (including the column headers)
5. Connection String
6. TableName
7. Column Name mappings (excel column name->DB Column Name). Separate the pairs by ‘||’.
    needed only for unmatched names)
8. Excluded Column Names, separated by ‘||’ (these are the excel columns that should be ignored)
9. Key Columns (separated by ‘||’): used to check record-match for Update rather than Insert.
     for example "Order_ID" or "Order_ID||Line_Number"
     Specify only for UPSERT operation. Otherwise, leave as blank ("").
10. ‘Key Column Auto Increment’ (for later use). Set as False
11. Operation Type: set as Insert or Upsert     note: to Replace, see [TruncateTargetTable] in Options.
12. Rebuild_Indexes (currently ignored). Set as True or False.
13. Batch Size (leave as zero to use default)
14. Options: to delete all existing data rows in the target database table before inserting the new data,
      specify [TruncateTargetTable]   Note: think twice before using this option.  

Notes

·         For CSV files as input, use Sheet1 as tab name and A1 as starting cell for the data.

·         During interactive use, the progress dialog shows how many data rows were involved.
image


Adding Columns On The Fly

You may need to add a column with data reflecting global values such as the current date or the name of the data source file. If so, add to the Options argument a directive such as this example:

"[AddColumns:File||String||data.xlsx^^Version||Integer||1^^Insert_Date||DateTime||#04-21-2021#]"

Each added column is specified using 3 elements:

1.                  The column name (should already exist in the database).

2.                  The column data type (String, Integer, DateTime…)   note: use DateTime for Date.

3.                  The column value (it will be the same value for all rows).

 

Multiple column specifications are separated by a ‘^^’ delimiter.

As usual, any of these elements can be a dynamic field/formula reference. For example:
"[AddColumns:File||String||@File^^Version||Integer||@Version^^Insert_Date||DateTime||{@Now}]"




 


 

Upload Excel Tabs to Google Sheets

See video demo: [https://www.milletsoftware.com/images/youtube_16c.png].

You can upload Excel Workbook data to create/update Google Sheets documents. Example:

"XLS_2GoogleSheets:C:\temp\Data.xlsx>>>>1Lj2JakMFCxd334o4eRJbLaABYk>>
AutoFit-Columns>>Open_In_Browser>>"

 

The elements (after the "XLS_2GoogleSheets:") are separated by a ">>" and are as follows:
1. Excel file

2. JSON file containing the Google Project Client Secret info. If you need help to establish this file, contact Millet Software for instructions or consulting. Leave blank if it matched the default of:
C:\ProgramData\MilletSoftware\VC_11\client_secret_Google_Sheets.json

3. Google Sheets document name (to create a new one) or document ID (to update an existing one).
can leave blank to create a new document with the excel workbook name.
For existing document, the example below, highlights the document ID portion: https://docs.google.com/spreadsheets/d/1Lj2JakMFCxd334o4eRJbLaABYk/edit#gid=207168125


4. FormatOptions : AutoFit-Columns (to fit column widths to content) or leave blank.

5. Options : Leave blank or use [Open_In_Browser] (to open the Google Worksheet in your browser)
                   [Clear_Sheet] to delete the Google Sheets content of matching tabs before uploading the Excel data.
                  

Notes

·         If document ID is NOT specified, a new Google Worksheet version (with a unique document ID) is created with all the tabs from the source Excel file. If repeated, you will see multiple files with the same name in your Google drive.

·         If document ID is specified, all tabs in the source workbook are created or replaced in the Google Worksheet. Unmatched tabs that already exist in the target Google Workbook are left untouched.

·         Visual CUT generates a {[GoogleSheets_URL]} global token, making it easy to reference the resulting Google Worksheet in an email message.

·         Visual CUT displayes the resulting URL and Google document ID in the progress dialog.

·         If Open_In_Browser option is specified, the document ID is copied to the clipboard (to facilitate use via Ctrl-V). Otherwise, the URL of the Google document is copied to the clipboard.

 

·         To avoid a need to re-authorize the application every 7 days, use the console page for your project
to confirm the app is "Internal" (if you have a Google Workspace account). Otherwise, you would need to PUBLISH APP (requires approval by Google).


·        

MS Word Functionality


Note: PC must have MS Word installed for some of these features.


Protecting MS WORD Files

Using a command line argument, you can instruct Visual CUT to:
a) allow viewing of a Word document only for user who knows the Open Password.
b) restrict the type of editing a user is allowed, unless the user knows the Modify Password.

A typical use scenario is when you have as a template document with form fields.  Visual CUT takes care of populating content in this template document using Word_Replace_Tags. Before emailing the resulting file to a customer, you may need to restrict the customer to only form fields modifications.

 

Here's an example of the command line argument structure:

"WORD_Protect:c:\in.doc>>c:\out.docx>>OpenPass>>ModifyPass>>ModType"

The parameters (after the "WORD_Protect:") are separated by a ">>" and are as follows:

  1. The path & name of the source file
  2. The path & name of the Save-To file (this can be same as the original file)
  3. Open Password required to view the file
  4. Modify Password required to remove the modify restrictions
  5. Modify Type allowed for users without Modify Password. Valid options:
    1. Allow_Only_Form_Fields (user can only modify form fields
    2. Allow_Only_Comments (user can only add comments)
    3. Allow_Only_Revisions (user can only add revisions)


Notes:

 

as usual, any of these arguments can contain references to fields or formulas and Visual CUT would dynamically replace the reference with the value in the report.  For example:
"WORD_Protect: {@in}>>{@out}>>Sesame>>mod123>>Allow_Only_Form_Fields"


 

Mail Merging Values into MS Word Templates

Besides doing simple mail merge operations using individual tokens in Word templates, Visual CUT can also populate Word tables while maintaining their formatting and trimming extra rows. The data can come from a Crystal report or from an Excel workbook. See video demo for Excel data source.

Using the GUI

When selecting Word_Replace_Tags as the export format, the ellipsis button launches a dialog for selecting the template document. This dialog also allows you to specify what should happen if the export file already exists. The default is to overwrite it. If you wish to append, turn on the checkbox:
image
 

Using a Command Line

Using a command line argument you can instruct Visual CUT to replace references to Crystal field or formulas inside MS Word documents with values of these formulas.  The file can then be saved to a new dynamically named file and emailed as part of a bursting Visual CUT process.

The advantage of this technique over directly exporting/bursting a Crystal report to a Word document is that Crystal exports to Word tend to have formatting and editing problems. By creating your own Word document to act as a template, you ensure precise formatting and problem-free editing.

 

 Here's an example of the command line argument structure:

"WORD_Replace_Tags:c:\template.doc>c:\Contract_{Cust_Name}.doc>NoAppend"

The parameters (after the "WORD_Replace_Tags:") are separated by a ">" and are as follows:

1. The path & name of the original MS Word file (containing references to Crystal formulas).
 

2. The path & name of the target MS Word file (after replacing references with values).
Note: if the target document is .docx the process is much faster and doesn't use MS Word.

3. optional Append (or NoAppend) directive: if you specify "…>Append" at the end of the command line argument, the populated template document content will be appended to the end of the target file,  if the target file already exists. If the target file doesn’t already exist, the target file is created.

Specifying Field/Formula References (tags) in the Word document

If, for example, you wish to reference a Crystal formula called {@Customer_Name}, you should use the following text inside your MS Word document:  #{@Customer_Name}# .   In other words, simply enclose the formula name in # symbols. 

Note that in order for Visual CUT to replace the reference with the value of the field/formula during processing, the field or formula must be placed in:
1. The Report Header or Footer if the report is processed Whole by Visual CUT, or
2. Group Header 1 or Group Footer 1 if the report is being burst by Visual CUT.

Notes:

 


 

Populating Word Tables with Crystal Formula Data

During WORD_Replace_Tags processing (see section above), you can instruct Visual CUT to also populate tables with data from Crystal formulas.  To populate the 1st table you name the formula Word_Replace_Table_1. To populate the Nth table in the document, name the formula Word_Replace_Table_N

Remember to place the formula in RH/RF section if not bursting or in GH1/GF1 section if the formula provides different data for each Group level 1 during bursting.  As always, the formula or the section may be suppressed.

 
The formula should contain a string delimited according to the following structure:
- Table Rows should be separated with a "][" delimiter.
- Table cells should be separated with a "||" delimiter


The table in the template Word document should already have at least as many rows as you expect to populate.  Visual CUT will delete the extra rows.  This way, any formatting you applied to the table would be maintained.

 

In most cases, the final formula would simply return the value of a global string variable that has been accumulated via other formulas. For example, if you are bursting the sample report Visual_Cut_11.rpt and wish to populate the 1st Table in a Word document with information about the Product Name (1st column) and Revenue (2nd Column), you may use the following 3 formulas:

GH1 Formula to reset the global string variable:

WhilePrintingRecords;

If NOT InRepeatedGroupHeader THEN Global StringVar Table_1 := "";

 

GH2 section Formula to accumulate the information into the Table_1 string variable:

WhilePrintingRecords;

Global stringvar Table_1;

IF Len(Table_1) = 0 Then

// First table row. Separate cell values with "||"

Table_1 := {Product.Product Name}+ "||" + "$" + ToText(Sum ({@value}, {Product.Product Name}),0)

ELSE

// Additional row, so add it to the accumulated string variable (Table_1)

// after a "][" to indicate a new row

Table_1 := Table_1 + "][" + {Product.Product Name}+ "||" + "$" + ToText(Sum ({@value}, {Product.Product Name}),0)

 

Group Footer Formula to pass the string to Visual CUT:

WhilePrintingRecords;

Global StringVar Table_1;

 


Using the above scenario, a template document (c:\temp\Template.doc) that looks like this:


image


Can be used via the following command line (all in 1 line):

"C:\Program Files\Visual CUT 11\Visual CUT.exe" -e "C:\Program Files\Visual CUT 11\Visual_CUT_11.rpt" "WORD_Replace_Tags:c:\temp\template.doc>c:\temp\{Product_Type.Product Type Name}.doc>NoAppend"


In this case, you should set Visual CUT to burst this report. Any format would do since you would ignore the export and use the Word documents. Here’s what Gloves.doc looks like:

image

Replace Formatting in MS WORD Files

Using a command line argument, you can instruct Visual CUT to find and replace a specified format throughout a Word document.

This functionality was developed to allow an export from Crystal to Word to result in Double Underline (typical for totals in accounting reports). Since Crystal doesn’t have a double-underline, you can apply a Strikethrough in Crystal, and then convert it to Double Underline in the resulting MS Word export.

Here's an example of the command line argument structure:

"WORD_Replace_Format:c:\in.doc>c:\out.doc>Strikethrough>DoubleUnderline"

The parameters (after the "WORD_Replace_Format:") are separated by a ">" and are as follows:

  1. The path & name of the source file
    (typically, this would be the exported file but you can convert any WORD file).
  2. The path & name of the Save-To file (this can’t be same as original file)
  3. Format to search for (currently, only Strikethrough is supported)
  4. Format to replace with (currently, only DoubleUnderline is supported)

 

Notes:

 

as usual, any of these arguments can contain references to fields or formulas and Visual CUT would dynamically replace the reference with the value in the report.  For example:
"WORD_Replace_Format:{@in}>{@out}>Strikethrough>DoubleUnderline"


 

Printing MS WORD Files

Using a command line argument, you can instruct Visual CUT to print a specified MS Word file. Using field/formula references, you can dynamically set the file to be printed, the printer to be used, and the number of copies.

Here's an example of the command line argument structure:

"WORD_Print:{@Word_File}>>{@Printer_Name}>>{@Copies}"
or

"WORD_Print:c:\temp\test.docx>>Default>>1"

The parameters (after the "WORD_Print:") are separated by ">>" and are as follows:

  1. The path & name of the MS Word file
  2. The name of the destination printer, or Default
  3. The number of copies


Notes:

as usual, any of these arguments can contain references to fields or formulas and Visual CUT would dynamically replace the reference with the value in the report.


 

Printing MS WORD Files with Watermarks

You can print exported Word files with dynamic watermarks for each printed copy
(e.g. "Copy 1 of 4"). See sample image.

If you also need to export to another file format, simply specify multiple export file names.
For example, c:\temp\{@Invoice}.pdf;c:\temp\{@Invoice}.doc


The command line argument structure:
"WORD_Print_Watermark:{@Word_File}>>{@Printer_Name}>>{@Copies}>>
       WatermarkText>>Font>> Bold>>Italic>> FontSize>>Width>>Height>>
       Rotation>>Transparency>>Options"


Example 1: (stretching to Watermark to length of 7.5 inches and height of 1.3 inches):

"WORD_Print_Watermark:c:\test.docx>>Default>>2>>Copy [[N]] of [[M]]>>
Calibri>>False>>False>>12>>1.3>>7.5>>315>>0.5>>"


Example 2 (62 point font size without width/height stretching):

"WORD_Print_Watermark:c:\test.docx>>Default>>2>>Copy [[N]] of [[M]]>>
Calibri>>False>>False>>62>> >> >>135>>0.5>>"


The parameters (after the "WORD_Print_Watermark:") are as follows:

  1. The path & name of the MS Word file
  2. The name of the destination printer, or Default
  3. The number of copies
  4. The Watermark text. Visual CUT replace [[N]] with the copy number and [[M]] with number of copies, so Copy [[N]] of [[M]] becomes Copy 1 of 4, Copy 2 of 4, etc. 
  5. Font (e.g. Calibri)
  6. Bold: True or False
  7. Italic: True or False)
  8. Font Size: in points. Note: gets stretched if Width and/or Height are specified!
  9. Width: in inches.  Stretches text to desired width. Leave blank or space to ignore
  10. Height: in inches.  Stretches text to desired height. Leave blank or space to ignore
  11. Rotation: Clockwise rotation in degrees. use 315 for diagonal, 0 for horizontal etc
  12. Transparency: from 0 to 1.  0.5 = semi-transparency
  13. Options: leave blank

Notes:

as usual, any of these arguments can contain references to fields or formulas and Visual CUT would dynamically replace the reference with the value in the report.


 

Convert WORD Files to PDF

Using a command line argument, you can instruct Visual CUT to save a WORD file to a PDF File. Here's an example of the command line argument structure:

"WORD_Save_As:c:\temp\Invoice.doc>c:\temp\Invoice.pdf>PDF>0>0>0>1>0"

The parameters (after the "WORD_Save_As:") are separated by a ">" and are as follows:

  1. The path & name of the WORD file (typically, this would be the exported file or the File you created using WORD_Replace_Tags, but you can convert any WORD file).
  2. The path & name of the target PDF file
  3. Save As Format (PDF)
  4. Optimized For Screen (1/0): a value of 0 would create a higher-quality (optimized for print) but larger pdf file.
  5. Create Bookmarks (0=No, 1=by Word Section Headings, 2=by Word Bookmarks)
  6. Create Tagged (structured) PDF (1=Yes, 0=No)
  7. Substiture Bitmaps for Missing Fonts (1=Yes, 0=No)
  8. Use PDF/A Standard (for archiving purposes) (1=Yes, 0=No)

 

Notes:

 

as usual, any of these arguments can contain references to fields or formulas and Visual CUT would dynamically replace the reference with the value in the report.  For example:
"WORD_Save_As:{@file_name}.doc>{@file_name}.pdf>PDF>0>0>0>1>0"

In Visual CUT 11, if the last 4 options (Bookmarks, Tags, Bitmaps, PDF/A) are not used, and the source file is .docx (rather than .doc), then the process doesn't need MS Word, otherwise, the machine must have MS Word 2007 or higher. For Word 2007 you may need to download the "2007 Microsoft Office Add-in: Microsoft Save as PDF or XPS AddOn" from:
http://www.microsoft.com/downloads/details.aspx?FamilyId=4D951911-3E7E-4AE6-B059-A2E79ED87041&displaylang=en

 

 

 


Text Functionality

 

Splitting Text Files by Embedded Tags

Using a command line argument, you can instruct Visual CUT to look for tags inside a text file and to split the file into multiple files. The process is faster than regular bursting and can be useful for generating many thousands of files.

 

Here's an example of the command line argument structure:

"TXT_Split_Tags:c:\temp\ToolTips.txt>>Replace"


The parameters (after the "TXT_Split_Tags:") are separated by a ">>" and are as follows:

  1. The path & name of the text file you wish to split
  2. Desired action when split file already exists: Replace or Append

 

[[#Split_Tag::c:\temp\Some_File_Name.htm#]]<HTML>

</HTML>

[[#Split_Tag::c:\temp\Another_File_Name.htm#]]<HTML>

</HTML>

 

 

Within the text file, you should embed text tags that indicate the split file path & name that should apply for the following text.  The structure and location of the tags should follow this example:

Notes:

-          The tag [[#Split_Tag:: … #]] comes before the text that would be written to that split file.

-          If the target folder of the split files does not exist, Visual CUT creates it on the fly.

 


 

Merging Text Files

Using a command line argument, you can instruct Visual CUT to merge any number of text files.  For example, this feature allows you to append text or csv exports to an existing files.  Another typical use scenario is to append a csv export (which doesn’t include column headers) to a single-line text file that provides the column headers.
The command line argument structure is as follows:

"TXT_MERGE:Text_File_List>Text_File_Target>Top_Rows_To_Remove>Options"

The parameters (after the ":") are separated by a ">" and are as follows:

1. Text_File_List: comma separated list of the source files in the order they should be merged.
    If all source files share the same folder, you can specify the full path just for the first file.
    If a source file is not found, a warning is written to Failure.log and that file is skipped. 
    You can use wild-card expressions.

 

2. Text_File_Target: the file path & name for the resulting merged file. If the path is the same as the first source file, you may specify just the file name.


3. Top_Rows_To_Remove: the number of top rows to remove from each file being merged into the first file. This is useful if the first file already provides column headers that should be removed from the following files.  Use ‘0’ to indicate no rows should be removed.

4. Options: leave blank or
    [Inject_CrLf] to inject CrLf between the files to force the added files to start on a new line.

For example:
"TXT_MERGE:c:\temp\File1.txt,File2.csv,File3.csv>c:\temp\Result.csv>0>"



Dynamic Field Names

You can use field or formula names within the command line argument (just like you drag & drop fields & formulas into the various options in the 3rd tab within Visual CUT.  The dynamic content of these fields/formulas would be substituted into the command line argument.



Replacing Content in Text Files

Using a command line argument, you can instruct Visual CUT to replace any number of strings in a text file with specified substitutions.  For example, this feature allows you to remove a Carriage Return and Line Feed at the end of csv file exports.
The command line argument structure is as follows:

"TXT_Replace:InFile||OutFile||find1>>replace1::find2>>replace2||Options"

The parameters (after the ":") are separated by a "||" and are as follows:

1. InFile: the file path & name for the source text file.  

 

2. OutFile: the file path & name for the resulting text file. 

            - If no OutFile is specified, the source file gets updated
            - if the target folder doesn’t exist, Visual CUT creates it
            - if no path is specified (just name) the path of the source file is used

3. Find & Replace Pairs: unlimited number of find and replace elements.
    Each "find" element is separated from its "replace" element by a ‘>>’ (or by '|>>|'). 
    Each pair is separated from the next pair by a ‘::

    - To specify special string characters, such as Carriage Return or Line Feed,
       use Chr() expressions (e.g., Chr(10) or Chr(13).
    - To remove strings, specify them in the ‘find’ and leave the ‘replace’ as blank

    - To insert file content instead of token references to the files, use [[Insert_File:…]]
      as the "find" element and "File" as the "replace element. If the file contains dynamic
      references to fields and formulas, use "File_Dynamic" as the "replace" element. For example:
          "TXT_Replace:c:\temp\Export{@Product.txt||||[[INSERT_FILE:...]]>>File_Dynamic||"
      In the text file, use tokens such as [[Insert_File:c:\temp\File2Insert.txt]] or
      [[Insert_File:c:\temp\{@File}]] to indicate where & what files should be inserted.
      Note:
If an inserted file has file tokens, they are replaced as well (the process is recursive).


4. Options: Leave blank, unless you wish to use a special option. 

-          Specify END if you wish the substitution to occur only at the end of the file.

 

For example, to remove Carriage Return and Line Feed at the end of a text file, use this command line argument:
"TXT_Replace:c:\temp\Input.csv||Result.csv||Chr(10)>>::Chr(13)>>||End"
 
Note: you may use '|>>|' instead of '>>' for cases where specified strings end/start with '>'.

Dynamic Field Names

You can use field or formula names within the command line argument (just like you drag & drop fields & formulas into the various options in the 3rd tab within Visual CUT.  The dynamic content of these fields/formulas would be substituted into the command line argument.


 

Removing Blank or Short Lines in Text Files

Using a command line argument, you can instruct Visual CUT to remove blank or short lines in text files. This is typically useful when one of the text export formats generates a file with unwanted blank lines or lines with just delimiters.
The command line argument structure is as follows:

"TXT_Remove_Short_Lines:InFile||OutFile||Max_Length_To_Remove"

The parameters (after the ":") are separated by a "||" and are as follows:

1. InFile: the file path & name for the source text file. 

 

2. OutFile: the file path & name for the resulting text file. 

            - If no OutFile is specified, the source file gets updated
            - if the target folder doesn’t exist, Visual CUT creates it
            - if no path is specified (just name) the path of the source file is used

3. Max_Length_To_Remove: Lines with that specified length or shorter would be removed.


For example, to remove all lines that are only 3 characters or shorter:

"TXT_Remove_Short_Lines:c:\temp\Input.csv||Result.csv||3"
 
Dynamic Field Names

You can use field or formula names within the command line argument (just like you drag & drop fields & formulas into the various options in the 3rd tab within Visual CUT.  The dynamic content of these fields/formulas would be substituted into the command line argument.


 

Removing GUIDs from png Files Referenced in HTML Exports

This approach is designed to address a use scenario where each time you export a report to HTML, image files are created (charts, logos, etc.) with different names. The references to these files use a GUID to make the file name unique, like this:
<img src="Sales{EF6A442D-0DDA-436A-A178-2410853A7E05}.png"
Where the Sales portion is based on the export file name.

 

In most cases, the image files actually don’t need unique GUIDy names and we can DeGUID (remove the GUID portion) from the file reference and from the actual png file name.

 

The DeGUID process detects if each png file is unique or a clone of another image within the same report (typical in cases of logos repeating on each page). If the png is not a clone (typical in reports with multiple charts), the GUID is replaced by an incrementing number (Sales_1.png, Sales_2.png, etc.). This ensures the local and web folders don’t accumulate unique GUIDy names each time the scheduled process runs. It also saves space because while Crystal exports the same logo on different pages as multiple png files, the DeGUID process in Visual CUT automatically consolidates these clones as a single file.

You can elect to either delete the GUIDy png files (typical in cases the images are static (logos).
Or you can elect to rename the png files to match the renamed references in the HTML source.

 

The command line argument structure is as follows (all in 1 line):
"TXT_DeGUID_png:InFile||Options"

The parameters (after the ":") are separated by a "||" and are as follows:

1. InFile: the file path & name for the source HTML file. 

 

2. Options:

DeleteLinkedFile to delete the referenced png files (Scenario 1 above)
RenameLinkedFile to rename (DeGUID) the referenced png files (Scenario 2 above).
Otherwise, None

For example, the following directive:

    "TXT_DeGUID_png:c:\temp\Sales.htm||RenameLinkedFile"
Would remove all GUIDs from png file references in the HTML export. It will also rename the referenced png files by removing the GUIDs from their file names.
To ensure old image files are not served from the browser cache, it appends a parameter with current date & time to image references like this: img src="Sales.png?20190521123925"

 

More complex scenarios (you wish to rename references to a logo image to a static name that doesn’t depend on the export file name) can be handled by the more complex command line argument described in the next section (TXT_Replace_Tokens).

Dynamic Field Names

As always, you can use field or formula names within the command line argument.

Replacing Content in Text/HTML Files – Token Approach

This approach allows you to change the content of exported TEXT or HTML file.

The command line argument structure is as follows (all in 1 line):
"TXT_Replace_Tokens:InFile||OutFile||Start1^^End1^^replace1^^Location1^^Options1
::Start2^^End2^^replace2^^Location2^^Options2||Global_Options"


The parameters (after the ":") are separated by a "||" and are as follows:

1. InFile: the file path & name for the source text file. 

 

2. OutFile: the file path & name for the resulting text file. 

            - If no OutFile is specified, the source file gets updated
            - if the target folder doesn’t exist, Visual CUT creates it
            - if no path is specified (just name) the path of the source file is used

3. Find & Replace Directives: find and replace directives (separated from each other by "::").
Each directive has 5 elements separated by a ‘^^’:
- Start Token (in the example above, this would be <img src="

- End Token (in the example above, this would be "

- Replace with: text to replace the text found between start and end tokens
- Location: LAST for last found match, ALL for all, 1 for 1st found match, 2 for 2nd …

- Options: RenameLinkedFile if you want to rename a matching file.
                  DeleteLinkedFile to delete a matching file (if clean file name already exists).
                  Otherwise, None

4. Global Options: Leave blank

 

 


 

For example, the following directive:

 

    "TXT_Replace_Tokens:c:\temp\Sales.htm||||<img src="^^" border="0" width="52px"   
                                        height="32px"></div>^^LionHead.png^^ALL^^RenameLinkedFile||"
you can replace multiple image files, typically named as variations of:
Output_File{1A49A55D-544F-472F-B40F-5B7062C3D47A}.png   with a single image file.



 "TXT_Replace_Tokens:c:\temp\Sales.htm||c:\temp\Sales.htm||<img src="^^
" border="0" width="52px" height="32px"></div>^^MyLogo.png^^ALL^^RenameLinkedFile||"


 will change all references to an image with dimensions of 52x32 with a single static reference to MyLogo.png.  Due to the RenameLinkedFile directive all the temporary matching files such as
Output_File{1A49A55D-544F-472F-B40F-5B7062C3D47A}.png  

Will be renamed to MyLogo.png

This has 2 effects:

1.                  Less clutter in the export folder because multiple image files may be replaced by a single image file

2.                  Less files need to be attached to an email message or uploaded to a web server

3.                  The web server and the client browser can cache MyLogo.png, improving performance



Dynamic Field Names

You can use field or formula names within the command line argument (just like you drag & drop fields & formulas into the various options in the 3rd tab within Visual CUT.  The dynamic content of these fields/formulas would be substituted into the command line argument.

 




 

Sorting Text File by Content in Specified Column Positions

A typical use case is when TXT_Merge is used to combine exports from multiple reports to a flat file with fixed column widths. You may need to sort that file before sending it for processing.

The command line argument structure is as follows (all in 1 line):
"TXT_File_Sort:InFile||OutFile||Column_Widths||Sort_Directive||FirstRowIsHeader||
                              
SkipEmptyRows||Append_2_OutFile||Options"

The parameters (after the ":") are separated by a "||" and are as follows:

1. InFile: the file path & name for the source text file.  

2. OutFile: the file path & name for the resulting text file (must be different from InFile). 

3. Column_Widths: a ^-delimited list of column widths.
                                  For example, "2^2" is for a file consisting of 2 columns, each 2 characters wide.
4. Sort_Directive: a string showing the columns you wish to sort by.
                                  For example: "{2} DESC" or "{2} DESC, {1} ASC"

5. FirstRowIsHeader: True or False (does the file have a header row?)

6. SkipEmptyRows: True or False (get rid of empty rows?)

7. Append_2_OutFile: True or False (If True, sorted content would be appended if OutFile exists).
8. Options: leave blank ("") or specify [Do_Not_Trim_Columns] to avoid trimming column content.
                                 

For example, imagine you need to sort a text file as shown below:

image 

You would use an argument such as (all in one line):

TXT_File_Sort:C:\temp\Unsorted.txt||C:\temp\Sorted.txt||
             
2^2||{1} ASC, {2} DESC||False||True||False||"




 

Inserting Base64-Encoded Files Inside Text/XML

This option was developed for a customer who needed to export invoice data to an XML file containing an embedded image encoded with Base64 (a method that converts from binary to text  representation). The XML file is then transmitted to a business partner using SFTP_Upload.

The process takes the following steps:

1.                  A TEXT export creates the XML file with a reference to a file that should be embedded at a particular location.  The reference has the following structure:
[Insert_File_Base64:file_path_and_name]]
for example,
[Insert_File_Base64:C:\Temp\Invoice_32556_image.pdf]]

2.                  Using a TXT_Replace_Base64 command line argument directs Visual CUT to search the XML file, locate such references, and replace them (including the surrounding tags) with the Base64 encoding of the specified file.

The command line argument structure is as follows (all in 1 line):
"TXT_Replace_Base64:InFile||OutFile||Options"


The parameters (after the ":") are separated by a "||" and are as follows:

1. InFile: the file path & name for the source text file. 

 

2. OutFile: the file path & name for the resulting text file. 

            - If no OutFile is specified, the source file gets updated
            - if the target folder doesn’t exist, Visual CUT creates it
            - if no path is specified (just name) the path of the source file is used

3. Options: Leave blank



Notes:

·         You can have any number of references embedded in the exported text file. Visual CUT will replace all of them.

·         You can use field or formula names within the command line argument (just like you drag & drop fields & formulas into the various options in the 3rd tab within Visual CUT.  The dynamic content of these fields/formulas would be substituted into the command line argument.


 

Changing Text File Encoding

This option was developed for a customer who needed to change the encoding of a text export from ANSI to UFT-8.

The command line argument structure is as follows:

"TXT_Encode:InFile||OutFile||fromEncoding>>toEncoding||Options"

The parameters (after the ":") are separated by a "||" and are as follows:

1. InFile: the file path & name for the source text file. 

 

2. OutFile: the file path & name for the resulting text file. 

            - If no OutFile is specified, the source file gets updated
            - if the target folder doesn’t exist, Visual CUT creates it
            - if no path is specified (just name) the path of the source file is used

3. The original and new encoding, separated by a ‘>>’. 

4. Options: Leave blank

 

For example, to convert from ANSI to UTF-8:

"TXT_Encode:c:\temp\ {@invN}.xml||c:\temp\{invN}.xml||windows-1252>>utf-8||"
or

"TXT_Encode:c:\temp\ {@invN}.xml||||windows-1252>>utf-8||"

Notes:

·         Valid encoding codes: us-ascii,unicode,unicodefffe,ebcdic,iso-8859-1,iso-8859-2,iso-8859-3,iso-8859-4,
iso-8859-5,iso-8859-6,iso-8859-7,iso-8859-8,iso-8859-9,iso-8859-13,iso-8859-15,windows-874,windows-1250,
windows-1251,windows-1252,windows-1253,windows-1254,windows-1255,windows-1256,windows-1257,
windows-1258,utf-7,utf-8,utf-32,utf-32be,shift_jis,gb2312,ks_c_5601-1987,big5,iso-2022-jp,iso-2022-kr,euc-jp,
euc-kr,macintosh,x-mac-japanese,x-mac-chinesetrad,x-mac-korean,x-mac-arabic,x-mac-hebrew,x-mac-greek,
x-mac-cyrillic,x-mac-chinesesimp,x-mac-romanian,x-mac-ukrainian,x-mac-thai,x-mac-ce,x-mac-icelandic,x-mac-turkish,x-mac-croatian,asmo-708,dos-720,dos-862, ibm01140,ibm01141,ibm01142,ibm01143,ibm01144,ibm01145,ibm01146,
ibm01147,ibm01148,ibm01149,ibm037,ibm437,ibm500,ibm737,ibm775,ibm850,ibm852,ibm855,ibm857,ibm00858,
ibm860,ibm861,ibm863,ibm864,ibm865,cp866,ibm869,ibm870,cp875,koi8-r,koi8-u

·         You can use field or formula names within the command line argument (just like you drag & drop fields & formulas into the various options in the 3rd tab within Visual CUT).  The dynamic content of these fields/formulas would be substituted into the command line argument.


ODBC Export Functionality


Visual CUT (for Crystal 9 and above) provides ODBC Export options that are not available in Crystal alone. As shown below, the ODBC Export Options dialog allows you to select Abort (default Crystal action), Append, or Replace as the action when the target table already exists:
image 

 

Note: the Table Name is controlled by the Export File Name (that option is not on the dialog shown here but on the main email/export processing options tab of Visual CUT). Since that option accommodates dynamic content, you can control the table name using fields/formulas in the report…



Append Functionality

By selecting append, you can add data to an existing table.  One use for this is for recording snapshots of data over multiple periods of time. For example, your database may show current inventory levels or current account balances but it is very difficult to generate a report that shows inventory levels or account balances at the end of each month for the last few years. By scheduling Visual CUT to run at the end of each month and append information reflecting the inventory levels or the account balances at that time, you enable easy tracking of that information over time.  In Data Warehousing jargon, this is called a snapshot data warehouse.

 

Another use scenario is to record the fact that certain records were processed by Visual CUT and to avoid duplicate emails.  For example, as orders arrived throughout the day, you can schedule Visual CUT to run every 5 minutes and email order confirmation messages to the customers. By appending to an ODBC table, you can record which orders have already been confirmed.  Alternatively, you can use the Skip_Recent command line argument described in the section 

Avoiding Duplicate Processing on page: 52.  

 

Another use scenario is to Extract, Transform, and Load (ETL) data into a data warehouse or across data sources without needing expensive ETL tools or consultants.  

 

Replace Functionality

A typical use for the Replace option is to generate temporary tables for use by other processes or crystal reports.  For example, Crystal Reports can't aggregate other aggregate values (e.g., average group totals) and can't sort groups based on formulas that use aggregate values. However, you can create a batch file that calls Visual CUT twice: first to export a report with aggregate values to a temporary table and then to process a 2nd report that uses the temporary table as input.


Capturing & Processing Incoming Emails


Visual CUT can automatically capture incoming emails from your email server to a database table. A Crystal report using the data in that table can then be processed in Visual CUT to trigger reactions to that email, such as:

·         Export/Print/FTP/Email information or reports

·         Update databases using After_Success_SQL

·         Trigger other applications or Visual CUT processes using After_Burst_Batch

Use Scenarios

Here are a few examples of the types of workflow automation this enables:

·         Requesting a Report via a Simple Web Form or via Email:

o   A manager, employee, customer, or supplier can use a simple web form (no web application required) to request a report.

o   The information gets emailed to your email server

o   Visual CUT captures the email into the EMAIL_CAPTURE table.

o   A Crystal report using that table inside Visual CUT uses After_Burst_Batch to trigger another Visual CUT process by specifying a report to run, parameters, email destination, etc.

o   The triggered Visual CUT report runs and emails the output to the requesting employee/customer.

Note: using­ the same exact process, you can let customers request information or reports by sending an email. For example, a customer may request information about the status of their order, the balance in their account, etc.

 

Here is a sample email from ABP Reports’ Boomerang system, which uses this technique, allowing users to request reports via email by simply clicking on a hyperlink:

image


 

 

·         Updating a Database via a Simple Web Form:

o   A manager, employee, customer, or supplier can provide information (for example, complete a registration for an event or provide order status information) using a simple web form (no web application required).

o   A Submit button triggers an email with the form information to your email server.

o   Visual CUT captures the email into the EMAIL_CAPTURE table

o   A Crystal report using that table inside Visual CUT uses After_Burst_SQL to update another database table (for example, inserting the information into a REGISTRATION table. 

·         Collecting Customer Feedback & Updating a Database via Email Links:

o   You can use Visual CUT to burst Customer Satisfaction survey emails when a purchase, course, visit, RFQ, event, or tech support case is closed.

o   Inside the HTML email message you embed 5 mailto hyperlinks corresponding to ratings of: Poor, Fair, Good, Very Good, and Excellent

o   This allows the customer to simply click on one of these links to trigger an email back to you with the appropriate ratings.

o   Visual CUT captures the email into the EMAIL_CAPTURE table.

o   A Crystal report using that table inside Visual CUT uses After_Burst_SQL to insert feedback records into a CUSTOMER_FEEDBACK table.

·         Importing Data from Email Attachment into a Database Table:

o   Email with excel file attachment is captured and Visual CUT extracts the attachment to a specified folder.

o   1st Crystal report reads records from the Email_Capture table and bursts to a dummy VC_Skip_Export.

o   After_Burst_Batch triggers a 2nd report that uses Excel as data source, but redirects it (using Database_Path command line argument) to retrieve data from the email attachment file.

o   Visual CUT exports the data from the Excel file via ODBC and appends it to a specified table.

·         Requesting & Capturing Management Decisions Via Email:

o   Imagine you have a PO table with Purchase Order records that are first inserted with a status of ‘Requested’.

o   You can use Visual CUT to burst and email to the manager in charge of each department Approval Requests for these POs.

o   Attached to each emails you would provide a PDF file with detailed information about the requested Purchase Orders.

o   Inside the HTML email message body, you embed 2 mailto hyperlinks allowing the manager to trigger a Reject or Approve email back to you.
Note: APB Reports (a BI Consulting firm with impressive record of leveraging Visual CUT for a variety of use scenarios) implemented such a process for one of their clients. Here is what the email message looks like:
image

o   Here is the email message resulting from clicking on the Approve hyperlink:

image

o   Note that the email message contains an encrypted text. This ensures the integrity of the emailed information can’t be compromised on its way back to us. 

o   The encrypted text contains all the necessary data to identify the PO and indicate rejection or approval (each hyperlink has a different decision code embedded in the encrypted text).

o   The encrypted text for each emailto hyperlink is generated via a Crystal formula using the BlowFishEncrypt() function provided by the CUT Light UFL.

o   The email triggered by clicking on the Reject or Approve hyperlink gets sent to your email server

o   Visual CUT captures the email into the EMAIL_CAPTURE table.

o   A Crystal report using that table inside Visual CUT decrypts the text in the email message body (or subject line) using the BlowFishDecrypt() function provided by the CUT Light UFL.

o   Using After_Burst_SQL, Visual CUT then updates the status of the Purchase Order to ‘Approved’ or ‘Rejected’. The SQL statement may look something like this:
 'UPDATE PO SET PO_Status = '& {@NEWSTATUS} & ','& (IF {@NEWSTATUS} = '8' THEN (' PO_COMMENT = '& "'PO approved by "& {@EMAIL} & "'")ELSE(' PO _COMMENT = '& "'PO rejected by "& {@EMAIL} & "'"))&' WHERE PO_ID = ' & {@PO_ID} & ' AND  PO_STATUS = 6'


 

Triggering Email Capture

An Email Capture process gets triggered by running a report in Visual CUT using a command line with an "Email_Get:Directives_Key"argument.  For example (all in 1 line):
"C:\Program Files\Visual CUT 11\Visual CUT.exe" -e "C:\Test\Email_Capture.rpt" "Email_Get:P2"

 

The Directive key is used to look up in the DataLink_Viewer.ini a matching key under the [Email_Get] section.

[Email_Get] ini Section

Each Directives Key can specify multiple directives separated by a ‘||’ delimiter:
---

[Email_Get]

P1=Get_PO_Decisions

P2=Get_Evaluation_Requests||Get_Camp_Feedback||Get_Booking_Requests

---

Notes:

1. The Email_Get process gets triggered BEFORE the report retrieves data from the database. 

2. The ODBC DSN used by the report is automatically used as the ODBC DSN target for loading captured emails into the target table. Visual CUT reuses the saved login information for the report in order to update the target email capture table. 

3. The target table is specified in the directive ini section (see next page).

4. The tables used by the report are not restricted to the email capture target table.

5. By default, processing is aborted if no new emails where inserted into the database and the previous run also resulted in zero inserted records (to protect against cases where the last data insert is not yet recognized by the report that immediately runs in the same automated process). To change that behavior, set Abort_Report_Process_If_No_New_Emails in the directive ini section to False.

6. For Office365, using POP3 requires OAuth. Please contact Millet Software for detailed instructions.


 

Email Get Directive Sections

Each email capture directive must have its own ini section as follows:
---

[Get_Evaluation_Requests]

//   Required Entry.  Not case sensitive.  Example: Filter=To = "ido@MilletSoftware.com"

//   Filter=(Subject contains "test" AND From like "*@MIlletSoftware.com*") OR (body Contains "test")

Filter=(Subject contains "evaluation request")
// optional. Default is 50 body lines downloaded for filtering. Reduce if no body filter. Increase if HTML message.
Body_Lines=1

//   Required Entry.  with 1440, only messages sent in the last 24 hours are captured

Message_Sent_in_Last_N_Minutes=1440

Server=mail.milletsoftware.com

// set PopSSL to True if TLS/SSL (encrypted communication) is used when getting emails from the server

PopSSL=False

// set Pop3STLS to True (and PopSSl to False) if unencrypted connection (typically port 110)
//         automatically converts  to a secure TLS connection via the STLS command.

Pop3STLS=False

// Set Pop3SPA to True to use SPA authentication

Pop3SPA=False

Port=110

//   If email server User id is not specified, it is assumed to be same as SMTP setting

User_ID=ido@MilletSoftware.com

//   copy from [Options] section or leave blank to use same. If you need a different password, temporarily set the
//     default SMTP password to the desired password. Save. Copy the encrypted Password, and then reverse.

Email_Password_Encrypted=ECDC1AABC705D61F04F6A16F61
//   should captured emails (if successfully inserted into the table), be deleted from the email server?

Delete_Email_From_Server=True

//   if specified, captured emails get saved as eml files to this folder (Safety Measure if you delete captured emails)

Save_As_EML_To_Folder="C:\VC\Captured_Emails\"

//   if specified, attachments are saved as files to this folder. By default, if the file already exists, it gets overwritten.

Save_Attachments_To_Folder="C:\VC\Captured_Email_Attachments\"
//   optional. Default is False. If set to True, instead of overwriting, 4 characters are added to make the name unique
//             note: if set to True AttachmentList info captured to the database table would reflect the unique names

Save_Attachments_To_Unique_File_Names=True

//   Table where email records are to be inserted. NOTE: If an existing record is found from
//       same Sender, same Subject, and same sending DateTime, the record doesn’t get inserted a second time.

Table=Email_Capture

Last_Success=12:14:56-12:15:13=00:00:17 InBox:11 / Targeted:8 / Inserted:6

---


 

Capturing Emails

The process targets email messages that are stored at the specified email server for the specified User ID. Obviously, each capture process may want to target only a subset of these messages. To keep the process as efficient as possible, the capture progresses through two main phases:

·         Header Download & Filtering

·         Targeted Download & Database Capture

 

The following sections provide more detail about these phases.

Phase 1: Header Download & Filtering

Visual CUT first downloads just the email headers (including first 50 lines of the message body) for all messages stored on the mail server for the specified User ID. While this process avoids the need to also download attachments, if you wish to keep the process fast, don’t let the Inbox for that User grow to too many messages.  You can manually delete old email messages in the server  Inbox,.  You can also set Delete_Email_From_Server to True, to automatically delete emails from the server after Visual CUT inserts them into the specified database table.

 

For backup purposes, particularly if you are just starting to use this process, if you elect to delete emails from the server, you should set the Save_As_EML_To_Folder option. Visual CUT would then deposit all processed emails (those that survived the Filter and Message_Sent_in_Last_N_Minutes  conditions) as eml files. These files can be opened in the free  Windows Mail or Outlook Express. All file attachments are embedded inside the eml files, so you can be secure in knowing you have an archive of the whole message.

 

The Filter and Message_Sent_in_Last_N_Minutes  take the initial set of partial downloads and produce a targeted subset of email messages that are then downloaded with full body as well as attachments. 

 

The Filter condition allows you to apply simple or composite conditions to any email property such as From, To, Subject, and Body. Here are a few examples:

Filter=Body like "Report Request*"
Filter=(Subject contains "PO Approved" OR Subject contains "PO Rejected") AND 
From contains "@MilletSoftware.com"
 

The expressions are not case sensitive
Supported operators: CONTAINS, LIKE, =, < ,>, <=, >=, <>

The "*" wildcard matches 0 or more occurrences of any character.

Parentheses can be used to control the logic.
 

 


 

Phase 2: Targeted Download & Database Capture

After establishing a subset of targeted emails, Visual CUT downloads the full content of these emails.  For each of these fully downloaded emails, Visual CUT takes the following steps:

 

1.      If Save_As_EML_To_Folder is specified, the full email message (with embedded attachments) is archived to the specified folder

2.      A connection is established to the database server used by the report via the ODBC DSN used by the report and the encrypted login information stored for the report.

3.      The existence of the specified table for capturing email information is confirmed

4.      If the same email message (same subject, send DateTime, and From info) doesn’t already exist in the table, the email information is inserted into the table.

5.      If the message got inserted into the table, and you set the Delete_Email_From_Server option to True, Visual CUT asks the email server to delete the message. 

 

 

Monitoring Results of the Process

If a failure occurs during the process, the usual failure alerts and logging processes apply.

If no failure occurs, Visual CUT updates the ini section for the processed directive with an entry such as this:
--------------------------------------
Last_Success=12:14:56-12:15:13=00:00:17 InBox:11 / Targeted:8 / Inserted:6
--------------------------------------
This allows you to see:

·         Start Time, End Time, and Total Time,

·         Number of Messages In the InBox

·         Number of Messages Targeted after applying Filter & Message_Sent_in_Last_N_Minutes  

·         Number of Messages Inserted to the Table (after skipping existing records)





 

Email Capture Table Structure

You can name a different table for each email capture directive.  But an email capture table must have the same data structure.

 

MS Access Table Structure

Here is the table structure for MS Access:

 

image

 

This table is included in the Visual_CUT_Log_Sample.accdb available from:

http://www.milletsoftware.com/Download/Visual_CUT_Log_Sample.accdb




SQL Server Table Structure

You can use Microsoft SQL Server Migration Assistant for Access: https://www.microsoft.com/en-us/download/details.aspx?id=54255
to move the structure & data of this table from MS Access to SQL Server.

 

Or, here is a script (provided by APB Reports) for creating the table structure in SQL Server:

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

SET ANSI_PADDING ON

GO

IF (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES

         WHERE TABLE_NAME = 'APB_DW_EMAIL_CAPTURE') IS NULL

BEGIN

CREATE TABLE APB_DW_EMAIL_CAPTURE

(

[Email_N] [NUMERIC](15,0) IDENTITY(1,1)PRIMARY KEY CLUSTERED,

[Status] [VARCHAR](100) DEFAULT 'CAPTURED',

[CaptureDateTime] [VARCHAR](100) NULL,

[LocalDateTime] [VARCHAR](100) NULL,

[UTCDateTime] [VARCHAR](100) NULL,

[Subject] [VARCHAR](500) NULL,

[FromCombo] [VARCHAR](200) NULL,

[FromAddr] [VARCHAR](200) NULL,

[FromName] [VARCHAR](200) NULL,

[ReplyTo] [VARCHAR](200) NULL,

[ToList] [text] NULL,

[ToAddrList] [text] NULL,

[ToNameList] [text] NULL,

[ccList] [text] NULL,

[ccAddrList] [text] NULL,

[ccNameList] [text] NULL,

[BccList] [text] NULL,

[BccAddrList] [text] NULL,

[BccNameList] [text] NULL,

[PlainTextBody] [text] NULL,

[HTMLBody] [text] NULL,

[Header] [text] NULL,

[AttachmentList] [text] NULL);

END

GO


 

Oracle Table Structure

 

Here is a script (provided by APB Reports) for creating the table structure in Oracle:

CREATE TABLE EMAIL_FEEDBACK_CAPTURE

(

"EMAIL_N" NUMBER NOT NULL,

"STATUS" VARCHAR2 (100) DEFAULT 'CAPTURED',

"CAPTUREDATETIME" VARCHAR2 (100) NULL,

"LOCALDATETIME" VARCHAR2 (100) NULL,

"UTCDATETIME" VARCHAR2 (100) NULL,

"SUBJECT" VARCHAR2 (500) NULL,

"FROMCOMBO" VARCHAR2 (200) NULL,

"FROMADDR" VARCHAR2 (200) NULL,

"FROMNAME" VARCHAR2 (200) NULL,

"REPLYTO" VARCHAR2 (200) NULL,

"TOLIST" CLOB NULL,

"TOADDRLIST" CLOB NULL,

"TONAMELIST" CLOB NULL,

"CCLIST" CLOB NULL,

"CCADDRLIST" CLOB NULL,

"CCNAMELIST" CLOB NULL,

"BCCLIST" CLOB NULL,

"BCCADDRLIST" CLOB NULL,

"BCCNAMELIST" CLOB NULL,

"PLAINTEXTBODY" CLOB NULL,

"HTMLBODY" CLOB NULL,

"HEADER" CLOB NULL,

"ATTACHMENTLIST" CLOB NULL,

"REC_DELETED" NUMBER DEFAULT 0,

CONSTRAINT APB_DW_EMAIL_CAPTURE_PK PRIMARY KEY (EMAIL_N) USING INDEX TABLESPACE IPSINDEX

)

TABLESPACE IPSDATA;

 

CREATE SEQUENCE EMAIL_N_SEQ START WITH 1 INCREMENT BY 1;

 

CREATE OR REPLACE TRIGGER EMAIL_CAPTURE_INSERT

BEFORE INSERT ON EMAIL_FEEDBACK_CAPTURE

FOR EACH ROW

BEGIN

    SELECT EMAIL_N_SEQ.NEXTVAL INTO :NEW.EMAIL_N FROM DUAL;

END;

/

 

COMMIT;


 

Inspect & Update Report Designs


Visual CUT 11 provides an integrated tool for inspecting and updating report designs.
See 4-minute video. It also supports generating & importing formula from excel into multiple Crystal reports (video), mass update a data source (video), mass-update fonts (video), and mass reimport subreports (video)

To enable this option, contact Millet Software. Once enabled, right-clicking a report in the Visual CUT grid would provide an Inspect & Update… option. As shown in the image below, this allows you to target a single report, selected reports, or all reports in a directory tree:

image


 

Report Inspection Grid

After selecting reports to be inspected, the results are presented in a grid allowing grouping, sorting, searching, exporting, and filtering. The grid shows various objects and expressions such as: Fields, Field Headings, Formulas, Groups, Group Formats, Running Totals, Sections, Selection Formulas, SQL Expressions, Subreports, and Text objects.

image

Each object can have multiple rows indicating its section locations within the report or subreports and documenting various expressions associated with it. The grid allows you to sort and filter on each of the column headers. For example, you can use the Expression Type column header to restrict the rows to specific expression types such as: Background Color, Database Field, Display String, Enable Can Grow, Enable Keep Together, Enable New Page After, Enable New Page Before, Enable Reset Page Number After, Enable Suppress, Enable Suppress If Blank, Enable Underlay Section, Evaluate Condition, Field Heading, Filter, Formula, Group Name, Group Number per Page, Running Total, Sort Direction, Special Field, SQL Expression, Text, Tooltip Text, etc.

As shown in the image above, formulas that fail to compile are presented with an error message.
In this case, the expression "test" + 1 fails to compile because 1 is a number rather than a string.

The 'Export' option (top menu bar) allows you to export the grid to Excel.

Find & Replace Text and Expressions

See video demo.  The 'Update Formulas' option provides two sub-menu options:
image

The image below shows the Find & Replace option in action:

image

The result is updated text and formula expressions as shown below. The 'Pending' status and the light blue background color for the modified expression indicate the change hasn't been committed.

image


After selecting 'Update RPTs & Save to Temp Folder,the updated version of all modified reports is saved to a Date-Time stamped temp folder, and the grid reflects the status of those updates:
image 

Using a List of Find & Replace Pairs (Report Translation Use Case)

In cases such as translating text objects in the report design, you may want to use a long list of translation pairs.

Each pair should be specified using the following delimiters: find^|^replace^|^ .

For example, when translating from English to Portuguese, you can specify a list of pairs like this:

image

 

As shown in the example above, you can target text objects that contain not only static text but also embedded database fields.

 

Notes:

·         You insert the list of pairs into the Find area, leaving the Replace area blank.

·         You can extract all target text expressions by mass-inspecting multiple reports, filtering to show only text expressions, exporting to Excel, and removing duplicates.

·         You can translate all the target text expressions by inserting the list into a Google Sheet and using the Google Translate() function. For example: =GOOGLETRANSLATE(A3, "en", "pt")

 

 

 

 


 

Generate & Import Formulas from Excel

As demonstrated by this 6-minute video, the report inspector allows you to export formulas and sql expressions to excel, edit and generate new expressions, and import the results back into multiple Crystal reports. This is useful when you need to generate many formulas with simple variations in their expressions.

image 


To serve as a source for formula import, the excel file must be structured similarly to this image.
Columns C, D and E must host the information about the Object (the formula name),
Object Type ('Formula' or 'SQL Expression'), and Expression.

When initiating an import of formulas, Visual CUT would ask you how to handle cases where a formula with that name already exists. The options are to update the expression of the existing formula or to skip.


 

Generate & Import Field Format Expressions from Excel

The same import menu option described above can also be used to import field format expressions from excel and apply them to field objects on your reports.

Referring to a Crystal formula as a field object might be confusing, so an explanation is in order. When you place a database column or a formula on the report canvas, you are creating a report field. For example, when you place a Crystal formula called {@Test} on the report canvas, you create a field object called Test1. If you use the Visual CUT report inspector to import the following spreadsheet, it would apply to that field object conditional expressions for its font color and background color.

image


Notes:

To see what Expression Type name should be used for a desired property, use the Report Inspector to scan a report that already uses an expression for that property. The Expression Type column shows the name for that property. See image.

 


 

Update Data Source in Multiple Reports

The report inspector allows you to update the data source of multiple reports to match the data source of another report. See 4-minute video.

Note: one user found out that the mass update works better when the machine is not connected to the network, so that existing database connections cannot interfere with the process.

 

Update Owner or Catalog/Owner Property of Tables

SQL Server tables have an schema property (referred to as 'owner' by Crystal), which you may need update while changing a report data source. To do this, open the DataLink Viewer 2011 (not Visual CUT) ini file and set a section such as this:
[Mass_Update_Data_Source]

Qualified_Name_From_To=.dbo.||.Finance.

This would replace the owner property of  'dbo' with 'Finance'.

To target based on Catalog, use an entry such as:
Qualified_Name_From_To=NorthWind.dbo.||NorthWind.Finance.

Remove Catalog and Owner

If you need to remove the Catalog and Owner properties from all tables, open the DataLink Viewer 2011 (not Visual CUT) ini file and set a section such as this:
[Mass_Update_Data_Source]

Remove_Table_Catalog_and_Owner=True

Mass Update Server Name

Imagine you develop a report library that needs to be deployed to many customer sites, each with a different server name. Even if you don't have access to a client's server, you can generate copies of your master reports with the server name updated. To do this, open the DataLink Viewer 2011 (not Visual CUT) ini file and set a section such as this:
---
[Mass_Update_Data_Source]

ServerName_From_To=support-06||support-05
---

This would update server name from support-06 to support-05 as shown in this image.


Update Commands

The report inspector allows you to update the SQL of Commands in main report as well as subreports.
See 3-minute video demo.

Update Fonts

The report inspector allows you to update multiple fonts across multiple reports. You can select the font name and size combinations that should be targeted for change and specify a new font name and/or font size to replace them with. See 2-minute video demo.


Re-import Subreports

The report inspector allows you to re-import subreports into all inspected reports.
See 2-minute video demo.

The process targets subreports that have an import path but are not set to re-import automatically each time the report is loaded (see image of targeted subreport format properties).

 

Handling of Bad Import Path

If the subreport is not found in its original import path, the report inspector looks for it:

 

a)      In folder specified in DataLink Viewer’s ini file, [Options] section, Subreports_Folder_for_Reimport.  For example,

Subreports_Folder_for_Reimport=C:\Crystal\Subreports

b)      In the same folder as the main report

 

Otherwise, the dialog displaying the results of the process lists all the subreports that were not found or failed to get re-imported:

 



Monitoring Visual CUT Processing


Visual CUT provides several ways to monitor, log, and alert users about processing failures:

§  An email alert can be sent to a specified address when a failure occurs. 

§  Processing can be recorded in an ODBC database

§  Failures can be recorded in a Failure.log text file or presented in Message boxes

§  Email communications with the SMTP server can be logged to Visual_Cut.log

§  Job status information can be monitored by other applications by asking Visual CUT to signal successful or failed processing via text job status files.


This section discusses how you can use these options. 

 

Failure Log

By default, Visual CUT logs unattended (command line, batch file…) failures to a Failure.Log file.
You can open the failure log using the NotePad button in the Log/Alert tab of the Options dialog:

image

 

 

Silent Unattended Failure Option

When Visual CUT processes a report it may encounter various problems such as missing destination e-mail address, non-existing or invalid report file names, and missing export file names.  Such cases halt the execution and trigger an appropriate message box.  To ensure Scheduled/Unattended processing doesn’t stop when encountering such cases, leave that default behavior turned on.

image




Silent Attended Failure Option

This option is identical to the Silent Unattended Failure option discussed in the previous section.  The difference is that it applies to cases where Visual CUT processing is invoked interactively (by pressing the START button).  This may be useful in cases when the processing takes a long time and the user doesn’t want to be tied to the screen.

 

When this option is turned on, any errors (e.g., one of the Groups didn’t have an e-mail address associated with it) are recorded the Failure.log instead of halting the execution with a message box.

 

Failure Alerts via Email

The Visual CUT Option dialog, Log/Alert tab allows you to specify email address(es) that should receive a message whenever Visual CUT encounters a processing failure. Here is an example of such a message:

image




 

Adding Custom Text to Failure Email Alerts

To add custom text to failure email alerts, place a text file called Failure_Message.txt in the same folder as DataLink_Viewer.ini. Here is an example of an email with such added text:

image


 

Using Different Email Settings for Failure Messages

If you wish to use default email settings for failure messages, even though your process specifies command line arguments that override these defaults, add the following entry to the DataLink_Viewer.ini under the [Options] section:
Email_Use_Defaults_For_Failure_Alerts=True


If you wish to use non-default email settings for failure messages, set that entry to:

Email_Use_Defaults_For_Failure_Alerts=Failure_Options
And also add to the ini a new [Failure_Options] section like this (with the settings you wish to use for failure alerts):


[Failure_Options]

Email_User_ID=

Email_Password_Encrypted=

Email_Default_SMTP_Server=

Email_SMTP_Port=

Email_Outgoing_Folder=

Email_StartTLS=

Notes: to set the encrypted password, enter it in the GUI (Options dialog, 1st tab), and copy the resulting entry in the ini file from the regular [Options] section to the [Failure_Options] section. Then, go back to the GUI and enter the default email password.


 

Log Email Activity

This option, located at the bottom-right corner of the Export/Email tab results in logging of all e-mail activity (unless emailing is handled by the smtpQ service, which maintains its own daily logs).

image

The log file is typically placed at: C:\ProgramData\MilletSoftware\VC_11\Visual_Cut.log
The NotePad button opens the log automatically.


image

 

 


 

Avoiding Duplicate Processing 

Imagine you need to email "Order Received" (or "Order Shipped") confirmations to your customers.  You use Visual CUT to schedule bursting of a report grouped by Order_ID, selecting all orders that were received in the current day.  You wish to run the report every 30 minutes without repeating emails.

 

To solve this problem, you can use a command line argument that instructs Visual CUT to skip processing if the target export file already exists and was created less than N minutes ago.

For example, using the following scheduling string (or batch file):
______________________________________________________________________________
"C:\Program Files\Visual CUT\Visual CUT.exe" -e "C:\Program Files\Visual CUT\Visual_CUT.rpt" "Skip_Recent:2880"

 

would cause Visual CUT to start processing the Visual CUT.rpt and burst the first group value ("Competition").  However, Visual CUT would skip this bursting step (and continue to the next group value) if the target export file exists and was created in the last 48 hours (2880 minutes).

In your 'Order Received' notification, you may not need to export and attach any file to the email notification.  However, in order to use the Skip_Recent functionality, you would instruct Visual CUT to export in each bursting step to a file name containing the Order_ID.  This file would then be used by the Skip_Recent logic, even though you will not attach the file to the email message.

Always Skip if Export File Already Exists (999999)

The maximum value you can provide is 2147483647 (more than 4K years). To skip processing if the export file already exists, regardless of its age, use the special value of 999999.

 

Non-Bursting Scenario:
You can take advantage of this functionality even in cases where no bursting is taking place by having the exported file name reflect the count or  maximum record number in a table. Using the Skip_Recent command line argument, you can then ensure that unless a new record has been added to the table (and hence the target export file name is new) Visual CUT processing would be aborted.

 

Alternative Approaches:
As alternatives to using Skip_Recent you can:

  1. Turn on the option to log Visual CUT processing using the functionality described in: "Record Processing to an ODBC Database" and, in your report, outer join to the MS_Log table to check if the current group value has already been successfully processed.    

  2. Use After_Success_SQL to generate an UPDATE sql statement to set the value of a "Processed" or "Date Sent" column.   

 

Avoiding Too Many Active Visual CUT Instances (Queuing)

Many Visual CUT users have increased their use of the tool to the point where several instances of Visual CUT may be actively processing reports at any given time.  In most cases, you can reduce the number of concurrent instances by simply combining multiple command lines into a single batch file.  In other cases, you can control the maximum number of active Visual CUT instances using the following DataLink_Viewer.ini entry:
-------------------------------------
[Options]

Maximum_Allowed_Active_Instances=3

-------------------------------------

Due to a limitation in the Crystal Reports runtime, the default and recommended value is 3.
When launching a new Visual CUT instance via a command line, if the number of active Visual CUT instances reached that maximum number, the new instance is placed into sleep. It "wakes up" every 5 seconds to check if it can launch. Once the number of active instances drops below the maximum allowed level, a new instance is allowed to launch.

 

 

Handling Missing Parameter Values

During command line processing, the default behavior is to prompt the user for missing parameter values. This is by design, to allow use cases where an automated process expects parameter input from a user.

To override that default behavior and force a failure to be triggered, set the following ini entry:
[Options]
Fail_On_Missing_Parameter_Value = True


This addresses a problem that could cause unattended Visual CUT processes to hang: some users add parameters to the design of a Crystal report but then forget to run the report interactively in Visual CUT and saving settings. This can cause a scheduled report to wait (and hence “hang”) for user input for a missing parameter value.





 

Job Status Functionality

During unattended/scheduled processing, Visual CUT generates a job status text file, located by default in the main files folder, and named:
VC_Job_Status_N.txt (containing the error message) if a failure occurred
- or - 
VC_Job_Status_Y.txt if processing was successful. 
Visual CUT erases these files (if they exist) at the start of each unattended processing. 

Other applications that trigger Visual CUT processing via a command line call can check for the existence of these job status files as an indicator for processing status.  For example, a web application can use this option to invoke Visual CUT processing (e.g., an export to a PDF file with bookmarks) and then keep checking for one of the job status file names before continuing. If the success file (VC_Job_Status_Y.txt) is found, redirect the user’s browser to the resulting PDF file – if the failure file is found (VC_Job_Status_N.txt), present the user with the error message inside that text file. 


In order to support job status monitoring in cases where multiple instances of Visual CUT may be processing report requests at the same time, your application can specify a unique job status file name for each call to Visual CUT
For example, if your command line invocation of Visual CUT is:
"C:\Program Files\Visual CUT\Visual CUT.exe" -e "C:\Test\Report.rpt"     
   "JOB_STATUS_ID
:4523"
then the resulting job status file for that call would be 4523_Y.txt or 4523_N.txt

A DataLink_Viewer.ini file option (Job_Status_Path) under a [File_Locations] section allows you to override the default location (Visual CUT application folder) for the Job Status indicator files.  For example:
------------------------------------
[File_Locations]
Job_Status_Path=C:\Temp\
------------------------------------

Note: this functionality is disabled if the 'Generate Success and VC_Job_Status Text Files' option is turned off as in this image.


Record Processing to an ODBC Database

In order to log processing to an ODBC database, you must create a table called MS_Log in the target database. This can be in MS Access, SQL Server, Oracle, etc.

 

MS Access Database Sample

image

Above is the table structure required for this table, when implemented under MS Access: A sample MS Access database is available for download. That sample database contains a form (with a subform) showing how you can view processing information, including bursting steps:

image


 

SQL Server Instructions

Here is a script for creating the table in SQL Server:

CREATE TABLE [dbo].[MS_Log](

      [LogN] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,

      [Parent_LogN] [int] NULL,

      [Rpt_Path_Name] [nvarchar](255) NULL,

      [Proc_Start] [nvarchar](255) NULL,

      [Proc_End] [nvarchar](255) NULL,

      [Group_1_Value] [nvarchar](255) NULL,

      [Status] [nvarchar](255) NULL,

      [Failure_Reason] [nvarchar](max) NULL,

      [Warning] [nvarchar](max) NULL,

      [Export_File_Name] [nvarchar](max) NULL,

      [Email_To] [nvarchar](max) NULL,

      [Email_Subject] [nvarchar](255) NULL,

      [Command_Line] [nvarchar](max) NULL,

      [User_ID] [nvarchar](255) NULL,

      [PC_ID] [nvarchar](255) NULL,

 CONSTRAINT [PK_MS_Log] PRIMARY KEY CLUSTERED ([LogN] ASC))

 

SQL Server notes:

·         You can use Microsoft SQL Server Migration Assistant for Access: https://www.microsoft.com/en-us/download/details.aspx?id=54255
to move the structure & data of this table from MS Access to SQL Server.

·         Make sure the User ID you use can access that table

You can create Crystal reports against this table.  You can even schedule these reports in Visual CUT to alert you about bad email addresses, failing, and slow (using the Proc_Start and Proc_End columns) reports.  

Note: periodically, you may want to purge old records from the MS_Log table.

 


 

Process Logging Settings in Options Dialog

The following Visual CUT Options dialog allows you to specify the ODBC Data Source Name (DSN) where the MS_Log table resides and the User ID & Password (stored encrypted), if the data source requires a login. 

Checkboxes allow you to control whether logging should occur only for processing triggered via command line, only for processing triggered interactively (user clicks the START button), both, or neither. 

You can also specify whether records of successful processing should automatically be deleted (in cases where you wish to record only failures).

Note that Warning messages will not be logged to the database if the "Log Warnings" option is turned off.

 

image

 

 


 

Update a Database After Success

See Update a Database After Success (After_Success_SQL)


 

Update a Database Before Report Runs

See Update a Database Before Report Runs (Before_Report_Run_SQL)



 


 

Call a Web Service after Success (After_Success_HTTP)

After Visual CUT successfully exported, printed, or emailed a report, you may want to trigger a call to a web service. For example, you can use the EzTexting service to send SMS messages without needing to know the carrier associated with the target mobile phone number.

 

To automate this type of workflow, you can use the After_Success_HTTP command line argument. The argument structure is as follows:
"After_Success_HTTP:Type>>URL>>Tokens"

The parameters (after the ":") are separated by a ">>" and are as follows:

1.                  Type: the type of success step: Burst or Whole 

2.                  URL to call the web service: this include any arguments expected by the web service

3.                  Tokens (Optional): if the web service responds with XML text, specifying the names of the XML nodes (separated by '||') allows the process to report back on the returned values of these tokens in the progress dialog (if the process was triggered interactively).

 

Note: if triggered interactively (command line argument is in the GUI), the progress dialog reports back on the status of these calls. Failures are also logged as warnings if Log Warnings is turned on (in the Log/Alert tab of the Options dialog).

 

Sending SMS Messages

For example, using the EzTexting service (500 free SMS messages per month) you can send SMS by following the instructions for constructing a url call. An example of such a url is:
https://app.eztexting.com/api/sending/?user=myUserID&pass=myPass&phonenumber=8141234567&subject=New Ticket&message=Printer 4 is down
a similar example using references to Crystal formulas, and skipping the Subject argument, is:
https://app.eztexting.com/api/sending/?user=UserID&pass=myPass&phonenumber={@Phone}&message={@Message}


The full command line argument (can be placed in the GUI area, in a batch file, etc.).
In a case where the full url is constructed as a {@URL} formula, and the optional Tokens argument is skipped, the command line argument (in a case of Burst rather than Whole) would simply be:

----------------------------------------------------------------

 "After_Success_HTTP:Burst>>{@url}"

----------------------------------------------------------------

This would trigger a separate SMS for each bursting step.  Visual CUT automatically inserts a delay (half a second) between each step in order to respect typical limits on message rates.


 



Trigger Dynamic Batch File after Success (After_Success_Batch)

After Visual CUT successfully exported, printed, or emailed a report, you may want to trigger a batch file to execute follow up processes that depend on a successful completion of the prior process. Or perhaps after a successful bursting of shipment notifications, you wish to send an email to the team responsible for handling invoicing.

 

To automate these type of workflows, you can use the After_Success_Batch command line argument. The argument structure is as follows:
"After_Success_Batch:Type>>Batch_File_Path_and_Name>>Show>>Wait"

The parameters (after the ":") are separated by a ">>" and are as follows:

1.                  Type: the type of success step: Burst or Whole 

2.                  Batch_File_Path_and_Name: The path and name of the batch file to trigger

3.                  Visibility (optional): The window visibility Show or Hide.  Show is default.

4.                  Wait for Batch to Finish (optional): Wait (default) or NoWait   

For example, the following command line argument

 "After_Success_Batch:Whole>>c:\Batch\Ship_Burst_Done.bat"
Would trigger the batch file after all bursting steps in the current process completed successfully.
Since the 2 optional arguments (Visibility & Wait) were not specified, the batch file window will be visible and Visual CUT will wait for the batch file process to finish.


Dynamic References to Fields/Formulas within the Batch File

A key feature is that you can embed field/formula names within the batch file just as you can within the Visual CUT 3rd tab options.  Visual CUT substitutes the appropriate values for these field/formula names before launching the batch file processing. 


Logging to a text file

Since a batch file can write to a text file, you can useAfter_Success_Batch to record successful processing to a text file. For example, the following batch file (C:\Batch_Files\Demo_Log_To_Text_File.cmd) uses @ECHO Off to turn off echoing the command lines to the screen, and then logs some text with references to fields/formulas to a specified text file.

@Echo Off

@Echo Sales report for {Product_Type.Product Type Name} in {@Year_Parameter} was processed successfully {[yyyy]}/{[MM]}/{[dd]} {[hh]}:{[nn]} >> "c:\temp\My Log.txt"


This batch file is triggered via a command line argument of:
"After_Success_Batch:Burst>>C:\Batch_Files\Demo_Log_To_Text_File.cmd"
and the bursting steps get logged as follows:

 

Sales report for Competition in 2004 was processed successfully 2015/05/18 07:49

Sales report for Mountain in 2004 was processed successfully 2015/05/18 07:49

Sales report for Hybrid in 2004 was processed successfully 2015/05/18 07:49

 



Table of Command Line Arguments

This table lists the optional command line arguments supported by Visual CUT. The order of the argument is not important, but they should follow the mandatory call to the Visual CUT executable, the execution mode flag (-e or –E) and the path & file name of the rpt file. The arguments should be enclosed in double quotes and be separated by a space.  For example: 
"C:\Program Files\Visual CUT\Visual CUT.exe" -e "C:\Program Files\Visual CUT\Visual_CUT.rpt" "Skip_Recent:2880"

 

Data Source Options

Argument

Purpose

Example

Attempt_Logon_Without_Password

Override the ini setting

"Attempt_Logon_Without_Password:True"

User_ID

User ID

"User_ID:dba"

Password

Password

"Password:sql"

ODBC_DSN

Override all ODBC Data Sources

"ODBC_DSN:Test_Server"

ODBC_DSN_From_To

Override one ODBC Data Source

"ODBC_DSN_From_To:Production_Server>>Test_Server"

Table_From_To

Override Table Location (.csv)

"Table_From_To:Risk.csv >>Risk2.csv||Old.csv>>New.csv"

Database_Path

Set path to Access/Excel/Pervasive

"Database_Path:C:\Prop1\FILE.DDF>>c:\Prop2\File.DDF"

Oracle_Server

Oracle Server (Native Connection)

"Oracle_Server:Test1"

Connect_To_SQLOLEDB

SQL Server OLE DB Data Source

"Connect_To_SQLOLEDB:Server2>>Northwind>>False"

Strip_Table_Qualifiers

Remove table qualifiers

"Strip_Table_Qualifiers:True"



Report Parameters/Formulas

Argument

Purpose

Example

Parm1, Parm2, Parm3…

Set/Override Parameter Values

"Parm3:9/15/2005"

Xtra_Record_Selection

Add Record Selection Criteria

"Xtra_Record_Selection:{Product.Product Name} <> [dblq]Triumph Vertigo Helmet[dblq]"

Set_Formulas1

Set Formula Expressions

"Set_Formulas1:{@^Name}>>>[dblq]Jane[dblq]|||{@^TwoAndTwo}>>>2+2"

 


 

Table of Command Line Arguments (Contd.)

 

Printing Options

Argument

Purpose

Example

Printer

Printer Destination

"Printer:\\server10\hp04" 

Printer_Only

Printer Destination

"Printer_Only:\\server10\hp04" 

Printer_Burst

Print Bursting Destination

"Printer_Burst:\\server10\hp04"

Printer_Burst_Only

Print Bursting Destination

"Printer_Burst_Only:{@Group_Printer_Name}"

Print_Copies

Number of Copies to Print

"Print_Copies:{@Label_Quantity}"

PDF_PRINT

Print a PDF File

"PDF_PRINT:c:\temp\Result.pdf>\\server10\hp04"

PDF_PRINT_SPLIT

Print PDF file across paper trays

"PDF_PRINT_SPLIT:Test.pdf>1::\\s1\HP::Top||2to99::\\s1\HP::Bottom"

PDF_PRINT_SPLIT_TAG

Print PDF file across paper trays

"PDF_PRINT_SPLIT_TAG:c:\temp\Test.pdf>\\s1\HP"

WORD_Print

Print a Specified MS Word File

"WORD_Print:{@Word_Doc}>>Default>>{@Copies}"

WORD_Print_Watermark

Print with dynamic Watermarks

"WORD_Print_Watermark:c:\Invoice.doc>>Default>>>>{@Copies}>>
Copy [[N]] of [[M]]>>Calibri>>False>>False>>12>>1.3>>7.5>>315>>0.5>>"



Export Options

Argument

Purpose

Example

Export_Format

Export Format

"Export_Format:Excel 97"

Export_File

Export File

"Export_File:c:\temp\Invoice_for_{CustName}.xls"

Export_Mode

Export Mode (Burst/Whole or None)

"Export_Mode:Burst"

Release_Shared_File

Avoid export failure when file is in use

"Release_Shared_File:True"

After_Export_Delay

Delay in Milliseconds

"After_Export_Delay:250"



 

 


 

Table of Command Line Arguments (Contd.)

Email Options

Argument

Purpose

Example

Email_Get

Capture Incoming Emails

"Email_Get:P2"

Email_To

Email To

"Email_To:{@Cust_Email}" or "Email_To:File:c:\Reps_Emails.txt"

Email_From

Email From

"Email_From:ixm7@psu.edu"

Email_Reply_To

Email Reply To

"Email_Reply_To:ixm7@psu.edu"

Email_CC

Email Copy To

"Email_CC:ixm7@psu.edu"

Email_BCC

Email Blind Copy To

"Email_BCC:ixm7@psu.edu"

Email_Attach

Email Attachment(s)

"Email_Attach:c:\Invoice_for_{CustName}.xls;c:\Instructions.pdf"

Email_Subject

Email Subject

"Email_Subject:Invoice for {Product_Name}"

Email_Subject_Emoji

Start Subject with Emoji

"Email_Subject_Emoji:{@emoji_file}"

Email_Message

Email Message (can be HTML)

"Email_Message:<html>Hi {customer_first_name}, ...</html>"

Email_Message_Save

Save body to a Text/HTML file

"Email_Message_Save:W:\Dashboards\Sales_Dashboard.html"

Email_Mode

Email Mode (Burst/Whole or None)

"Email_Mode:Burst"

Email_Priority

Priority: Highest/High/Normal/Low/Lowest

"Email_Priority:Highest"  or  "Email_Priority:{@Priority}"

Email_Header

Custom Email Header(s)

"Email_Header:X-Sensitivity: 3"  or  "Email_Header:{@email_header}"

Email_SMTP_Server  

SMTP Server address

"Email_SMTP_Server:127.0.0.1"

Email_SMTP_Port  

SMTP Communications Port

"Email_SMTP_Port:26"

Email_User_ID

Authenticate to SMTP Server

"Email_User_ID:ixm7"

Email_Password

Authenticate to SMTP Server

"Email_Password:my_secret_password"

Email_Auth_JSON_PATH

Set path to OAuth JSON File (Office365/Gmail)

"Email_Auth_JSON_PATH:C:\ProgramData\MilletSoftware\VC_11\Client_Secret_SMTP_Office365.json"

Email_Delay_MilliSeconds

Delay Email Processing

"Email_Delay_MilliSeconds:500"

Email_Send_Encrypted

Should emails be Encrypted

"Email_Send_Encrypted:True "                      

Email_Send_Signed

Should emails be Signed

"Email_Send_Signed:True "                            

Email_StartTLS

SMTP Server Requires StartTLS

"Email_startTLS:True"                                     

Email_SMTP_Domain

for EHLO/HELO sent to SMTP server

"Email_SMTP_Domain:Your_Domain"

Email_HeloHostName

hostname for EHLO/HELO

"Email_HeloHostName:{@HeloHostName}"

Email_Outgoing_Folder

For background (queue) emailing

"Email_Outgoing_Folder:C:\VC\Outgoing"      

Check_Email_Burst_To_Address_Unique

Block email bursting if duplicate Email To is detected

"Check_Email_Burst_To_Address_Unique:True"



 


Table of Command Line Arguments (Contd.)

PDF Options (processed in this order)

Argument

Purpose

Example

PDF_Export_Options

Use MS Word as Export Engine

"PDF_Export_Options:Tagged and PDF/A"

PDF_FORM

Fill Form Fields in a PDF File

"PDF_FORM:c:\temp\MyForm.pdf>False"

PDF_Bookmarks_Open_Levels

Which Bookmarks Levels to Expand

"PDF_Bookmarks_Open_Levels:0"

PDF_LinkToWeb

Add web or email hotspot

"PDF_LinkToWeb:c:\test.pdf>1>99>40>60>50>10>http://www.IBM.com>>>0"

PDF_AddImage

Add an image with optional hotspot

"PDF_AddImage:{@pdf_file}>1>99>40>60>50>10>{@Link}>{@Logo}>1"

PDF_Insert_Pages_Tags

Insert images or pdf files via tags

"PDF_Insert_Pages_Tags:c:\temp\{@Cust}_Invoices.pdf"

PDF_From_TIFF

Import multi-page TIFF into PDF

"PDF_From_TIFF:c:\tmp\Invoice_{@Inv_N}.pdf>{@Tiff_File}>37>True>True"

PDF_MERGE

Merge PDF Files

"PDF_MERGE:c:\temp\File1.pdf,c:\temp\File2.pdf>c:\temp\Result.pdf"

PDF_MERGE_Files_to_Layers

Turn pdf files into layers in a single file

"PDF_MERGE_Files_to_Layers:PDF_File_List>PDF_File_Target"

PDF_Insert_BackPage

Add standard content after each page

"PDF_Insert_BackPage:c:\temp\{Invoince_N}.pdf||c:\Legal_Page.pdf"

PDF_Bookmark_Tags

Add Bookmarks based on formulas

"PDF_Bookmark_Tags:c:\temp\{@customer}.pdf"

PDF_TOC

Add Table of Contents to PDF File

"PDF_TOC:1>40>11>6>5>2>c:\temp\Sales.pdf"

PDF_PAGE_N

Add Page Numbers to PDF File

"PDF_PAGE_N:2>10>10>11>Bottom>Center>Page_NofM>Sales.pdf>Helvetica"

PDF_Add_Text

Add Text to PDF File

"PDF_Add_Text:2>10>10>11>Bottom>Right>{@TextStamp}>TT||Garamond||Bold||225;0;0"

PDF_PRINT

Print (stapled) a merged PDF File

"PDF_PRINT:c:\temp\Result.pdf>\\server10\hp04"

PDF_CLONE_AND_PRINT

Print (stapled) multiple copies

"PDF_PRINT:c:\temp\Result.pdf>\\server10\hp04>2"

PDF_Print_Mode

Set Quality/Speed of Print

"PDF_Print_Mode:2"

PDF_PRINT_SPLIT

Print PDF file across paper trays

"PDF_PRINT_SPLIT:Test.pdf>1::\\s1\HP::Top||6to99::\\s1\HP::Bottom"

PDF_PRINT_SPLIT_TAG

Print PDF file across paper trays

"PDF_PRINT_SPLIT_TAG:c:\temp\Test.pdf>\\s1\HP"

PDF_FORM_Tags

Create Form Fields in a pdf file

"PDF_Form_Tags:c:\temp\Purchasing_List.pdf"

PDF_Flatten

Flatten Annotations and Form Fields

"PDF_Flatten:c:\temp\Forms*.pdf>>myPassword>>c:\temp\Results\"

PDF_Embed

Embeds file(s) in a PDF

"PDF_Embed:c:\Main.pdf<<c:\S1.pdf:: application/pdf::Spec1||c:\D1.jpg::image/jpg::Draw1"

PDF_Link_Tags

Add Link/Image based on formulas

"PDF_Link_Tags:c:\temp\{@customer}.pdf"

PDF_Link_Tags2

Embed & Link to Internal Files

"PDF_Link_Tags2:c:\temp\{@customer}.pdf"

PDF_Auto_File_Link

Detect file references and add links

"PDF_Auto_File_Link:c:\In.pdf>>.>>.pdf;.mp3>> (>>0>>)>>0;255;0>>True>>"

PDF_Auto_File_Link_Tokens

Detect/Add Links Matching Tokens

"PDF_Auto_File_Link_Tokens:..\media\MM##.wmv||..\Docs\DOC##.pdf"

PDF_Save_As

Saves a PDF File to Image File(s)

"PDF_Save_As:Test.pdf>Test.bmp>BMP>96"

PDF_Properties

Set PDF Document Properties

"PDF_Properties:pdf files>Author>Title>Subject>Keywords>Creator>Producer>PageMode>StartPage>Zoom"

PDF_Build_Index

Builds Index for all pdf files in folders

"PDF_Build_Index:c:\temp\dir1||c:\temp\dir2>c:\temp\Index.pdx>"

PDF_Add_Index

Adds an Index File Reference

"PDF_Add_Index:pdf file>index file>Index Label "

PDF_Add_Media

Add embedded Multimedia

"PDF_Add_Media:infile>>outfile>>media_file>>1>>X>>Y>>W>>H >>Sound>>"

PDF_Compress

Reduce Size of PDF File

"PDF_Compress:PDF_File>>PDF_File_Target"

PDF_Split_By_Bookmarks

Split a PDF based on bookmarks

"PDF_Split_By_Bookmarks:PDF_File>>Level>>Split File"

PDF_Split_Tags

Split a PDF based on formulas

"PDF_Split_Tags:PDF_File>>False>>False>>True"

PDF_Split_Protect_Tags

Split & Protect Based on formulas

"PDF_Split_Protect_Tags:c:\My.pdf>>False>>True>>False>>Owner_Password>>1>>1>>0>>1>>1>>1>>1>>0"

PDF_Redact

Redact PDF Text

"PDF_Redact:C:\temp\Source.pdf>>C:\temp\Redacted.pdf>>
                        >>trump||clinton>>???@gmail.com>>\d{3}-?\d{2}-?\d{4}>>Silver>>""

PDF_Highlight

Highlight PDF Text

"PDF_Highlight:C:\temp\Source.pdf>>C:\temp\Highlighted.pdf>>
                        >>trump||clinton>>???@gmail.com>>\d{3}-?\d{2}-?\d{4}>>Yellow>>""

PDF_Sign

Add Digital Signature

"PDF_Sign:InFile>>OutFile>>Open Password>>Sig>>pfx File>> Password>>Reason>>Location>>Contact

PDF_PROTECT

Encrypt/Protect a PDF File

"PDF_PROTECT:Owner_Pass>User_Pass>1>1>0>1>1>c:\Sales.pdf"

PDF_A_Mode

Convert to PDF/A Mode

"PDF_A_Mode:PDF_File>>PDF_File_Target>>Password>>Mode"

PDF_Linearize

Web-enable for faster load in browser

"PDF_Linearize:PDF_File>>PDF_File_Target>>Password"




 

 

 Table of Command Line Arguments (Contd.)

Excel Options

Argument

Purpose

Example

Use_Excel_Component

Override global setting

"Use_Excel_Component:False" (this would cause Excel (Data Only) exports to xlsx to use Excel automation)

Use_Excel_Component_v3

Override global setting

"Use_Excel_Component_v3:False"

XLS_2DB

Upload Data to Database
(Insert or Upsert)

"XLS_2DB:SQL Server>>c:\temp\Data2Insert.xlsx>>Sheet1>>A1>>Data Source=.;Initial Catalog=AQ;Integrated Security=True;>>myTable>>Order Date->Order_Date||Year->Order_Year>>DOW||Cst_Qs>>"">>False>>Insert>>True>>5000>>"

XLS_Print_Setup

Set Excel Print Options

"XLS_Print_Setup:c:\temp\{Customer.Country}.xls>>>1>1>>>>>>>>>"

XLS_Save_As

Save Excel File to a different format

"XLS_Save_As:c:\temp\Invoice.xlsx>c:\temp\Invoice.pdf>PDF>0>0>0"

XLS_AutoFilter

Auto Filter and/or Freeze Panes

"XLS_AutoFilter:True" or  "XLS_AutoFilter:A1>>A2"

XLS_SetTable

Format Data as Excel Tables

"XLS_SetTable:C:\temp\start.xlsx>>C:\temp\end.xlsx>>Sheet1>>A1>>Medium2>>"

XLS_AutoFit

Fit Column Widths in Excel

"XLS_AutoFit:True" or  "XLS_AutoFit:MaxColumnWidth>>31>>False"

XLS_to_XLSX

Convert xls or csv to 1-tab xlsx file

"XLS_to_XLSX:c:\temp\In.xls>>c:\temp\Out.xlsx>>True"

XLS_Modify

Modify Excel Files

"XLS_Modify:c:\temp\test.xls>>c:\temp\test_NoGrid.xlsx>>[NoGriod]"

XLS_Pivot_Table

Generate an Excel Pivot Table

"XLS_Pivot_Tablet:…see user manual for arguments…"

XLS_Range_Insert

Formula Content -> Named Ranges

"XLS_Range_Insert:c:\template.xls>>c:\target.xls"

XLS_Range_Insert_File

Insert Data into formatted templates

"XLS_Range_Insert_File:{@Template}.xlsx>>C:\TEMP\Filled.xlsx>> c:\temp\Data.xlsx||Sheet1||B5||"

XLS_Range_Insert_File_Split

Fast split & insert Data into formatted templates

"XLS_Range_Insert_File_Split:{@Template}.xlsx::9500>>C:\TEMP\Template_Filled.xlsx>>
c:\temp\Data.xlsx||Sheet1||B5||"

XLS_Replace

Replace & Activate formulas

"XLS_Replace:c:\temp\Input.xls||Output.xlsx||^=>>=::ab>>cd||"

XLS_Replace2

Find & Replace in Specified Columns

"XLS_Replace2:c:\temp\Input.csv>>Output.xlsx>>False>>[Blank]^^^[0]^^^N||AK""

XLS_Refresh

Refresh Queries and Pivot Tables

"XLS_Refresh:c:\source.xls>>c:\target.xls>>Sleep Seconds"

XLS_Run_Macro

Run Excel Macro

"XLS_Run_Macro:c:\source.xls>>c:\target.xls>>Macro_Workbook>>Macro_Name"

XLS_Transfer_Tabs

Transfer and Rename Tabs

"XLS_Transfer_Tabs:[{@F1}.xls||Tab1::Tab2]>>[{@F2}.xls||{@Tab1}::{@Tab2}]"

XLS_Split_Tabs

Save each Tab to PDF or Excel file

"XLS_Split_Tabs:{@F1}.xlsx||PDF||{@F1}_[Tab_Name].pdf||Landscape||True"

XLS_Split_ByColumn

Split by unique values in 1st column

"XLS_Split_ByColumns:{@F1}.xls||XLSX||c:\temp\||0||Replace||True||"

XLS_Merge

Merge sheets from workbooks

"XLS_Merge:c:\Dash\{@CustID}_*.xlsx>c:\Merged.xlsx>"

XLS_Protect_Worksheets

Protect content against viewing/editing

"XLS_Protect_Worksheets:Source_File>>Target_File>>Password"

XLS_Protect_WorkSheets_v2

Protect content: better method

"XLS_Protect_WorkSheets_v2:{@File.xlsx}>>SHEET||Sheet1||{@Pass}||Sorting&&Filtering"

XLS_Protect

Password Protect Excel Files

"XLS_Protect:File_List>Password"

V3_Data_Only_xlsx_Export_AutoFit

Auto-Fit Column Widths

"V3_Data_Only_xlsx_Export_AutoFit:True"

V3_Data_Only_xlsx_Export_Delete_Blank_Rows

Delete blank rows in xlsx export

"V3_Data_Only_xlsx_Export_Delete_Blank_Rows:True"






 

Table of Command Line Arguments (Contd.)

 

MS Word Options

Argument

Purpose

Example

WORD_Replace_Tags

Replace Formula tags with Values

"WORD_Replace_Tags:c:\temp\Template.doc>c:\temp\Contract_{Cust_Name}.doc"

WORD_Replace_Format

Replace Formatting

"WORD_Replace_Format:c:\A.docx>c:\B.docx>Strikethrough>DoubleUnderline"

WORD_Print

Print a Specified MS Word File

"WORD_Print:{@Word_Doc}>>Default>>{@Copies}"

WORD_Print_Watermark

Print with dynamic Watermarks

"WORD_Print_Watermark:c:\Invoice.doc>>Default>>>>{@Copies}>>
Copy [[N]] of [[M]]>>Calibri>>False>>False>>12>>1.3>>7.5>>315>>0.5>>"

WORD_Protect

Restrict  Viewing / Modification

"WORD_Protect:{@inFile}>>{@inFile}>pwd1>>pwd2>Allow_Only_Form_Fields"

WORD_Save_As

Save a Word document to PDF

"WORD_Save_As: {@file_name}.doc>{@file_name}.pdf>0>0>0>1>0"





Text/HTML Options

Argument

Purpose

Example

TXT_Split_Tags

Splits a text file into multiple files

"TXT_Split_Tags:c:\temp\File.txt>>Replace"

TXT_Merge

Merges Text Files

"TXT_Merge:c:\temp\File1.txt,c:\temp\File2.csv>c:\temp\Result.csv>0"

TXT_Replace

Replace Content in a Text File

"TXT_Replace:c:\temp\Input.csv||Output.csv||Chr(10)>>::Chr(13)>>||End"

TXT_Remove_Short_Lines

Remove blank or short lines

"TXT_Remove_Short_Lines:InFile||OutFile||Max_Length_To_Remove"

TXT_Replace_Tokens

Replace Content in a Text/HTML File

"TXT_Replace_Tokens:File||OutFile||Start^^End^^replace^^Location^^Options
                          ::Start2^^End2^^replace2^^Location2^^Options2||Global_Options"

TXT_File_Sort

Sort by content is character positions

"TXT_File_Sort:File||OutFile||Column_Widths||Sort_Directive||FirstRowHasHeader||
                            Skip_EmptyRows||Append_2_TargetFile||Options"

TXT_DeGUID_png

Clean png file refs in HTML Exports

"TXT_DeGuid_png:HTML_File||Options"

TXT_Encode

Change text file encoding

"TXT_Encode:c:\temp\{@Invoice}.xml||||windows-1252>>utf8||"




Table of Command Line Arguments (Contd.)

Miscellaneous

Argument

Purpose

Example

Batch

Execute Multiple rpts in single process

"Batch:C:\test\My.cmd>>0>>"

After_Burst_Batch

Interweave Reports Output

"After_Burst_Batch:C:\VC_Prod_Type.bat>>Hide>>NoWait"

After_Export_Batch

Trigger Batch file after export

"After_Export_Batch:C:\temp\Archive_to_RAR.bat>>Show>>NoWait"

Before_Report_Run_SQL

Update DB Before Report  Run

"Before_Report_Run_SQL:MyDSN>>>>>>Update "JOBS" SET "Processed" = 0 WHERE "Email" = 'Not Yet' "

After_Success_SQL

Update DB after Processing

"After_Success_SQL:Burst>>MyDSN>>>>>>Update "JOBS" SET "Processed" = 1, "Date Processed" = Date() WHERE "Job Name" = '{@Job}'"

After_Success_HTTP

Trigger web service

"After_Success_HTTP:Burst>>{@URL}"

After_Success_Batch

Trigger Batch File

"After_Success_Batch:Whole>>c:\temp\Ship_Notifications_Burst_Done.bat>>Show>>Wait"

Before_Export_Batch

Trigger Batch before export

"Before_Export_Batch:C:\temp\Archive_Previous_Exports.bat>>Hide>>Wait"

Calendar_Add_Event

Google Calendar Event: create/invite

"Calendar_Add_Event:Google_Calendar_1"

Google_Drive_Upload

Upload Files to Google Drive

"Google_Drive_Upload:Google_Drive_Upload_1>>c:\temp\Sales in {@Year}.pdf"

SharePoint_Upload

Upload Files to SharePoint

"SharePoint_Upload:{@ExportFile}>>Shared Documents/MyFolder>>https://my.sharepoint.com/sites/site>> myusername@mycompany.com>>myPassword>>0>>"

Encrypted_Password_Set_Entry

Set Named Password

"Encrypted_Password_Set_Entry: H:\DataLink_Viewer.ini>>Options>>Encrypted_Password_FTP>>sesame"

Proxy

Delegate Processing to DLV

"Proxy:DLV" or "Proxy:dlv" or "Proxy:dlv_snapshot"

SQL_Extract_Files

Extract Files from Database

"SQL_Extract_Files:SG>>>>>>Picture>>c:\temp\>>Id>>.png>>Select * From Students>>False"

SQL_Insert_File

Upload Files to BLOB Columns

"SQL_Insert_File:SG>>>>>>Insert into Sigs (Signature, Status) Values (?, 'New')>>c:\temp\mySig.png>>"

Skip_Recent

Avoid duplicate processing

"Skip_Recent:2880"

JOB_STATUS_ID

Control Job Status File Name

"JOB_STATUS_ID:4523"

FTP_Download

Download files from FTP server

"FTP_Download:Passive_1>>www.IBM.com>>milletso>>Encrypted_Password_SFTP>>/public/test/*.pdf>>c:\temp\"

FTP_Upload

Upload Files to FTP Server

"FTP_Upload:Passive_1>>ftp.abc.com>>user>>pass>>{@Export_File}>>/public_html/Download"

SFTP_Upload

Upload Files to SFTP Server

"SFTP_Upload:22>>myserver.com>>PW>>user>>pass>>>>>>{@ExportFile} >>" "

SFTP_Download

Download Files from SFTP Server

"SFTP_Download:22>>myserver.com>>PW>>user>>pass>>>>>>*.csv>>/inv/test >>c:\temp\CSV>>0"

Use_Saved_Data

Use Saved Data in report

"Use_Saved_Data:True"

Use_Saved_Data_Recent

Use Saved Data if not too old

"Use_Saved_Data_Recent:60"

Write_INI_Location

Writes ini File Location to specified file

"Write_INI_Location:c:\temp\VC_ini_Location.txt"

Main_Files_Folder

Specify Location of key mdb & ini files

"Main_Files_Folder:path to folder holding DataLink_Viewer.ini & Visual CUT.mdb "

ZIP_Files

ZIP & Password Protect Files

"ZIP_Files:File_List>Password>ZIP_File>AES"









Update History

Version 7.5.3: Entered Testing November 6, 2024

 

Key Features

¨    Using an SQL Query (.sql file) or Excel workbook (.xlsx file), you can now export/burst to Excel (data only) or CSV(in addition to Web Pivot/Grid/Schedule).  

¨    When using an Excel workbook as a data source, optional ' Include' column can filter 'False' rows, column names starting with a single space are excluded from HTML table tokens, and column names starting with 2 spaces are excluded from both HTML table tokens as well as from Excel (Data Only) and CSV exports.

¨    A new button allows you to preview export bursting in a grid:
image 

¨    Mass-Update of text fields can now accept a list of find & replace pairs and handle composite text objects like Name {Customer.Name}. This facilitate mass translation.
See Using a List of Find & Replace Pairs (Report Translation Use Case) [https://www.milletsoftware.com/images/youtube_16c.png]

¨      Added a SharePoint_Upload command line argument.


 

Web Features

¨    If a Web Grid column contains only URLs, it shows 🔎icon as hyperlink.

¨    Updated WebPivot_Template.html to show an icon in the report layouts dropdown indicating master report layouts. Reminder: unlike user-defined layouts, master layouts cannot be edited, deleted, or renamed by users. Tabular master layouts show a grid icon. Chart master layout show a chart icon. See sample here.

¨    Updated WebPivot_Template.html to add Bootstrap5 (bs5) and bootstrap5-dark (bs5-dark) color themes.

¨    Updated WebPivot_Template.html to display active filter icons in red. This matches the behavior in Web Grids, and makes it easier to spot active filters. See sample here.

¨    Updated WebPivot_Template.html to generate shorter headers for metrics when a pivot table has only row fields (no column fields).

¨    Updated WebPivot_Template.html to provide a 'Group' right-click menu option. It allows hierarchical grouping or rows/columns using ranges, selected elements, or date logic.
For Date fields, the grouping dialog provides predefined grouping options such as
Year, Quarter, Month, Day, and Hour.

¨    The Conditional Formatting dialog for web pivot tables now provides a checkbox (for each condition), allowing you to apply/exempt grand totals from that condition.

¨    Added special handling for web grid/schedule/pivot to format date columns based on the data source formatting (MM/dd/yyyy vs dd/MM/yyyy).

 


 

Excel Features

¨    XLS_Split_ByColumn argument is now executed using an internal component rather than via Excel automation (if the Use_Excel_Component_v3 option is set to True in the ini file).

¨    Faster loading of Excel workbooks as data source.

¨    Added XLS_Modify command line argument. Currently, it supports turning off gridlines.


Other Features

¨    Added new tabs (Excel, Display) and several improvements to the Options dialog.

¨    Options dialog, Email tab now provides an option to select and display the json file for OAuth Emailing via Office365 or Gmail.

¨    The status panel showing number of queued emails is now immediately updated upon completion of interactive emailing (if email queuing is used).

¨    Added support for multiple email ReplyTo addresses (',' or ';' as separator).
Note that most email clients do not support multiple ReplyTo addresses.

¨    Updated the Chilkat component.

¨    The email and export bursting preview grids now provide search functionality:
{Ctrl-F}:Find     {F3}:Next     {Shift-F3}:Previous

¨    The email preview grid displays dynamic emoji as per Email_Subject_Emoji argument.

¨    Email testing from the Options dialog now provides a more detailed error log.

¨    Report Inspector now lists the SQL statements of Commands (in main reports and subreports) and can Mass-Update (Find & Replace) such SQL Statement. [https://www.milletsoftware.com/images/youtube_16c.png]

¨    Report Inspector now has a new Mass Verify feature.


Fixes

¨    Web Pivot Tables/Charts: fixed a recently introduced problem with handling the toolbar option to delete a user-defined report layout.

¨    Web Pivot Tables/Charts: fixed a recently introduced problem with the Export button.

¨    Web Pivot Tables/Charts: you can now filter and sort drill-downs.

¨    Web Pivot Tables/Charts: automatically convert dashes to underscores in a JS variable name for report layouts.

¨    Fixed handling of foreign characters (e.g. Chinese) in the email message HTML editor.

¨    Removed a dll (psapi.dll) from the install that caused problems with very old operating systems.

¨    Disable the 'Show Grid' option in Excel 97 (Data Only) export options dialog. It is not supported for that format. Use the new XLS_Modify command line argument instead.

¨    Fixed handling of bursting auto-generated HTML table tokens ({HTML_Table_Group}) and bursting group tokens for Excel and SQL data sources. This problem impacted only scheduled tasks that were set to 'Run whether user is logged in or not'.

¨    Fixed handling of the decimal separator in cultures where it is not a dot ('.'). This fixes number formatting for such cases in auto-generated HTML tables, web grids, web schedules, and web pivot tables.

¨    Fixed a problem in switching from a report that is set to delegate processing to DataLink Viewer to an undelegated one.

¨    Fixed Mass Update (Find & Replace) of text in field headers (using the report inspector).

¨    Arguments for specifying email user id, password, and outgoing folder are now recognized even when they specify a blank value.

¨    If SMTP Server is specified in the Export/Email settings for a particular report, it now always overrides the server specified in the global settings.

¨    The GUI for monitoring and managing scheduled tasks now recognizes batch files with mixed upper/Lower case file extensions (such as .Cmd or .Bat).

¨    Data-Only exports to .xlsx now recognize extra options, such as delete blank rows and delete blank columns, even when processing is delegated to DataLink Viewer.

¨    Fixed an issue causing out of memory exception in some cases of processing Excel files.

¨    {[Export_File]}, {[Exp_Path]}, {[Exp_FileName]}, and {[Exp_FileName_NoExt]} tokens now target the first specified export file name in cases where multiple files are specified (separated by a ';' delimiter).


 

Version 7.5.1: Released May 11, 2024

Key Features

¨    You can now use a .sql file (text file containing an SQL statement) as the data source. Supported export formats are WebGrid, WebPivot, WebSchedule, and Word_Replace_Tags. Dynamic tokens are generated for columns, HTML tables, and MS Word Tables.
For detail, see SQL Functionality.

¨    You can now email via Office365 using either OAuth or SMTP AUTH.
OAuth is more complex and requires registering an app. Detailed instructions are available.

¨    The Office365 OAuth option can also be used for Capturing & Processing Incoming Emails.

¨    A new button allows you to preview email bursting in a grid: image

Web Features

¨    Excel workbooks can now burst to Web Pivot, Web Grid, and Web Schedule formats.

¨    Improved pdf exports from web pivots.

¨    Improved formatting of numbers in web pivots.

¨    The Web Grid now defaults to showing a search box. This allows easy filtering to rows containing specified text in any of their columns. Search string matches are highlighted.
The search and highlighting is not case sensitive.

¨    The Web Grid, when using material color themes now loads much faster.

¨    The Web grid now defaults to assigning maxWidth of 700 points to string columns.
Truncated content shows an ellipsis and a tooltip shows the full text. You can edit the WebGrid template to word-wrap some of these columns.

¨    The Web Schedule, when on Month view, now defaults to expanding cell height to display all events (rowAutoHeight: true;).  You can elect to set that option to false. Or you can elect to set a maximum number of visible events in a day (maxEventsPerRow).

Excel Features

¨    XLS_Save_As to CSV can now encode to UTF8-No-BOM.
See Convert Excel Files to CSV.

¨    Added code to better handle XLS_Pivot_Table column/row sort directives when using the internal (V3) excel component.

¨    Added code to handle very large files when adding excel exports as tabs in existing/new workbooks.

¨    Autofit column widths in large spreadsheets now targets only the header + several hundred rows to ensure fast processing.

¨    When using an Excel Workbook as a data source for bursting by row, the last column values did not populate into that column's dynamic token. This is now fixed.

¨    XLS_Replace now accepts an optional directive of [TargetHyperlinks] allowing you to find & replace content in the hyperlink address property of cells. This option was created to handle cases where non-standard hyperlinks are corrupted/dropped during export of a Crystal report to Excel. The solution is to use a standard looking hyperlink and convert it in the .xlsx file.

 

Other Features

¨    Added a button for opening the failure log directly from the main screen (no need to go into Options dialog, Log/Alert tab). The button changes color if new failures were logged since the log was last viewed: image à image

¨    When opening the Failure Log, if the file is large (well over 1MB) the top half is cleared. This maintains a reasonable log size.

¨    Increased maximum allowed concurrent active instances from 9 to 100.

¨    Added 5th status panel showing count of processes, if exceeding the max setting.
Double-clicking of that panel triggers a batch file with an option to kill all VC processes.
This allows you to detect & stop hung cases. Such cases are typically caused by:
a) not setting Silent Unattended Failures as True,
b) not turning off UAC (User Access Control) warnings when VC is set to Run As Admin, or c) not setting Fail_On_Missing_Parameter_Value as True.

¨    Improved handling of double-clicking in email address options (from, reply to, to, cc, bcc):
a) if the current value is blank, the most frequent value for that option across all reports is automatically inserted even when the settings database is redirected (e.g. to SQL Server)
b) if the current value is not blank, or if you hold down the Shift key, a form for editing email addresses launches. That form makes it easy to manage long lists of email addresses.

¨    Added Check_Email_Burst_To_Address_Unique argument as an option to block email bursting when duplicate destinations (name + address) are detected.

¨    Clicking the ellipsis button for selecting an export file path & name now automatically populates the Export File Path & Name with a default suggestion (if that option is not yet populated) and launches the file dialog with that path and file name, making it easy to accept or change that suggestion.

¨    {[Export_File]}, {[Exp_Path]}, {[Exp_FileName]}, and {[Exp_FileName_NoExt]} tokens now also apply to export file specified via a command line argument.

¨    Added Txt_File_Sort argument to sort a text file by content in specified column positions.

¨    Updated internal component for converting .docx to .pdf.

¨    PDF_Add_Text can now easily target a single page.

 

Scheduling Features

¨    The GUI for Management & Monitoring of Scheduled Tasks now supports selecting multiple tasks. You can then use the right-click menu to apply batch actions such as Run, Stop, Disable, Enable, Suspend, Un-Suspend, Delete, and Export to all selected tasks.

¨    Removed the need for multiple logins when importing multiple scheduled tasks by a different Windows user id.

 


 

Fixes

¨    When editing arguments in the Rich Text editor, the last few characters (if entered quickly) could be lost when clicking OK to return the text to the Arguments area. This is now fixed.

¨    Fixed a rare problem with dynamic token resolution when a processing option contains a combination of export file token, such as {[Exp_FileName_NoExt]}, and another token.

¨    Fixed an exception when renaming a scheduled task.

¨    The 'Log Email Activity' checkbox is now disabled when the smtpQ service is in charge of emailing. The service always maintains daily email logs.

¨    Fixed an issue in restoring web wizard options for web page tab name and favicon.

¨    Fixed handling of web pivot tables containing a hyphen in the file name.

¨    Added an [Inject_CrLf] option to TXT_Merge.

¨    The Web Grid, when clicking the Print button, now prints all pages.

¨    The Web Grid now persists the sort and hidden status of columns.

¨    Improved/fixed the sample report for PDF_Form_Tags feature.



 

Version 7.4.1: Released June 29, 2023

 

Key Features

¨    Word_Replace_Tags export format can now automate mail merge directly from Excel.
A {@Word_Replace_Table_1} token is automatically added to populate a table in the Word template. See video demo [https://www.milletsoftware.com/images/youtube_16c.png]

¨    You can now use XLS_Save_As to convert Excel tabs or pivot tables to HTML and embed the result in an email message.

¨    Added SQL_Insert_File argument to Upload Files to a BLOB Column in a Database.

¨    Entering in a blank Export File option automatically populates it with a suggestion based on:
a) the Last_Saved_Export_Folder (if not yet set, defaults to 'C:\Temp')
b) the report file name,
c) if bursting, text such as 'for <bursting_field/formula>'
d) file extension based on the export format
A one-time message alerts new users that this is just a suggestion that can be edited.

¨    Added {[Export_File]}, {[Exp_Path]}, {[Exp_FileName]}, and {[Exp_FileName_NoExt]} tokens to dynamically refer to the export file, path, and name with/without extension.
Using these tokens helps in reading/debugging other options and command line arguments.
It also removes the need to update other options when you change the export file.
The tooltip for these token reflect the dynamic value of the export file path & name, even when that option includes other dynamic tokens.

¨    Clicking '=' to set email attachment to export file simply inserts the {[Export_File]} token.

¨    Added orange color highlighting for all {[…]} special tokens in the GUI command line arguments editor. For example: 

image

¨    The scheduled tasks grid now includes relevant tasks even outside the root folder.

¨    The scheduled tasks grid, on first-time use, defaults to hiding less useful columns to avoid overcrowding. Also, columns auto-fit logic is improved.

¨    The scheduled tasks grid now has a right-click menu option to end a task.

¨    Updated the email queuing component (smtpQ).


Web Features

¨    Added Bootstrap5 (BS5) and Bootsrap5-Dark (BS5-Dark) theme options to the WebGrid default export template (WebGrid_Template.html).

¨    PDF export from WebPivot now gets named based on the layout name (instead of 'Default.pdf". It also auto-adjust width and height of the pdf document to fit the pivot table (although that feature is not yet perfect).
For existing exports, be sure to overwrite the template file (WebPivotTable_Template.html) in the export folder with the updated template file in the Visual CUT installation folder.

¨    Improved auto-fit logic for WebPivot in tabular view and for WebGrid.

¨    Updated WebPivotTable_Template.html, WebGrid_Templates.html, and WebSchedule_Template.html with custom minified .js and .css files to reduce load times. To take advantage of these new versions, copy them from the installation folder (C:\Program Files (x86)\Visual CUT 11) to any existing export folders where the older versions of these templates got copied.

¨    The wizard dialogs for web export formats (WebPivot, WebGrid, WebSchedule, HTML 40) now have a dynamic tokens panel on the right to facilitate embedding (Drag & Drop or Double-Click) and tooltips that reflect the dynamic content of embedded tokens.
For example, a web page title option set to Sales [{[MMMM]}]
would show a tooltip such as Sales [August].

¨    The wizard dialogs for web export formats now use the new Export File tokens {[Export_File]}, {[Exp_Path]}, {[Exp_FileName]}, and {[Exp_FileName_NoExt]} to dynamically refer to the export file, path, and name with/without extension.
 This makes it easier to set up arguments and change the export file.
 

Excel Features

¨    XLS_Save_As to PDF is now handled by an internal component for .xlsx files. To revert back to Excel automation, set the ini option of Use_Excel_Component_v3_For_SaveAs_PDF
to False.

¨    Updated Excel component.

 

Excel Workbook as Data Source (instead of Crystal report)

¨    The group Sum and Avg of each numeric column are added as last-row Group tokens.
For example, {GrLast_Amount~Sum} and {GrLast_Amount~Avg}.

Other Features

¨    SFTP_Upload now retries up to 6 times when encountering "An existing connection was forcibly closed by the remote host." The retries are spaced in seconds as [5,20,45,80,125,180].

¨    Visual CUT now remembers the last export folder path used when saving processing options. The last used path is maintained in the ini file like this:
[File_Locations]
Last_Saved_Export_Folder=…

¨    Updated several internal components to later versions.

¨    PDF_Redact can now redact text even when the pdf content is malformed.

¨    PDF_Form_Tags now supports 'Date' form field type. A date picker control provides easy date selection and you can control the date formatting. The control enforces valid date values.
Note: some pdf readers do not support this functionality -- Acrobat Reader does.

 

¨    New logic to block users from overwriting their report file with the export file.

Fixes

¨    Added a missing dll needed for editing scheduled tasks using the Visual CUT GUI.

 

¨    Fixed handling of Boolean columns in generating WebPivotTables and WebGrids.

¨    HTML editor fixed pasting of code into raw syntax editor view (a rare use case).

¨    New version of HTML editor fixes Ctrl-Z behavior

¨    Fixed memory exception issue in processing large reports into web format exports.

¨    Fixed an issue with XLS_Range_Insert_File.

¨    Fixed a rare problem with XLS_Merge (embedded object issue)

¨    XLS_Refresh is now executed before XLS_Save_As

¨    Fixed XLS_AutoFilter problem when only a Freeze Cell (no Filter Cell) is specified.

¨    Fixed conversion for xls to xlsx on old Windows version.

¨    Fixed a problem when a user double-clicks the HTML Editor button.

¨    Fixed web pivot problem in remembering filter values from previous session.

¨    Fixed handling of Excel workbook when the bursting option is set to [Each Row]. Dynamic tokens were populating for a previous column name rather than the current column name.

¨    Fixed column autofit behavior of the grid for managing scheduled tasks.

¨    Fixed a few arguments, such as Email_User_ID, being ignored when placed in the GUI Arguments area (instead of in a command line) if same setting had an INI value.

 


 

Version 7.3.1: Released November 8, 2022

Key Features

¨    A new Millet Software tool called ActionQ allows you to respond within seconds to database, email, and folder events. It can call Visual CUT. See video demo [https://www.milletsoftware.com/images/youtube_16c.png]

 

¨    New Web Page export formats:
o WebSchedule behaves like Google Calendar (sample). see: WebSchedule Export.
o WebGrid (sort/group/filter…). see: WebGrid Export (sample) [https://www.milletsoftware.com/images/youtube_16c.png] 
o WebPivotTable to visualize, slice & dice data via Pivot Tables & Charts (sample).
see: WebPivotTable Export [https://www.milletsoftware.com/images/youtube_16c.png]. Multiple master and user report layouts can be saved and reused. See Reports Functionality. See video demo of 5 web reporting options [https://www.milletsoftware.com/images/youtube_16c.png]
o Simple deployment via shared folder, web folder, or SharePoint.
note: to add these new export formats, run (double-click) this VBScript file:
C:\Program Files (x86)\Visual CUT 11\Update_Visual_CUT_MDB.vbs

 

¨    You can now use Excel workbooks (instead of Crystal Reports) to email each row or each group of rows and embed the data as HTML tables [https://www.milletsoftware.com/images/youtube_16c.png]

 

¨    You can now use Excel data to geberate interactiveWeb Schedules (sample), Web Grids (sample), or Web Pivot/Chart with master & user-defined layouts (sample).  [https://www.milletsoftware.com/images/youtube_16c.png]

¨    A new export format called Image allows you to export the report pages to cropped images and embed them inside email messages. For detail, see Embedding Report as Image(s) in Email (new approach) [https://www.milletsoftware.com/images/youtube_16c.png]
note: to add this new export format, run (double-click) this VBScript file:
C:\Program Files (x86)\Visual CUT 11\Update_Visual_CUT_MDB.vbs

¨    Added an option to Auto-Generated HTML Tables for Report/Group Data.
You can embed these tables inside email messages using {@HTML_Table_All_Rows} and {@HTML_Table_Group} tokens [https://www.milletsoftware.com/images/youtube_16c.png]

 

¨    You can now monitor the health of your SQL Servers via an auto-refreshing web grid and email alerts (sample) [https://www.milletsoftware.com/images/youtube_16c.png]. The sample rpt and web grid template are available on request.

¨    Added user manual section and sample for auto-refreshing multi-panel web dashboards.

 

¨    Added user manual section and sample for multi-panel web dashboards with Drill-Across.

 

¨    Visual CUT can now loop through and executes all relevant command lines (those that use Visual CUT) within a batch/text file. This avoids multiple starts of Visual CUT, reduces the number of user sessions within Task Scheduler, and improves performance. For detail, see Execute Multiple Reports in a Single Process.

 

¨    You can now execute all Visual CUT command lines in any batch/Text files found in a folder. For detail see Execute all Command Files in Queue Folder.
My ActionQ software can trigger this processing when a file appears in a folder.

¨    You can now easily add global tokens to the dynamic Field/Formula value list in the Export/Email tab. This is useful, for example, if you want to store & reuse email distribution lists across multiple reports. See Global Tokens from INI File.

¨    Excel exports can be turned into nicely formatted tables with sorting and filtering options.
See Format Data as Excel Tables [https://www.milletsoftware.com/images/youtube_16c.png].

¨    XLS_2DB argument can Replace, Append, or Upsert (Update or Insert) Excel or CSV data to SQL Server in a very fast bulk process. See Upload Excel/CSV Data to Database [https://www.milletsoftware.com/images/youtube_16c.png].

 

¨    New html email editor supports HTML5 and provides inline spell-checking, html cleanup when pasting from MS Word, and easier table formatting. See Integrated HTML Editor.

¨    You can now Upload Excel Tabs to Google Sheets [https://www.milletsoftware.com/images/youtube_16c.png].



Report Inspector Features

¨    Report inspector can now re-import subreports [https://www.milletsoftware.com/images/youtube_16c.png].

¨    Report inspector can now mass-update fonts [https://www.milletsoftware.com/images/youtube_16c.png].

 

¨    Report inspector now lists ‘Database Name’ and ‘User ID’ for each data connection.

 

¨    Report inspector now lists Printer Driver, Saved Printer name, Dissociate Page Size (True/False), and ‘No Printer’ (True/False) properties.

¨    Report inspector now lists, for each subreport, the following properties: ‘Is Imported’, ‘Import Path’, ‘Reimport When Opening’, and ‘On Demand’.

 

¨    Report inspector now lists, for each subreport link, the main report field, the subreport links, and the linked parameter name.


PDF Features

¨    You can now make pdf files accessible for users with disabilities.

¨    Added PDF_Redact providing true text redaction via literal, wild-card, or Regular Expressions. See: Redacting Text in a PDF File.

¨    Added PDF_Highlight argument to target text for highlighting via literal, wild-card, or Regular Expressions. See: Highlighting Text in a PDF File.

¨    PDF_Split_Tag can now use the embedded tag to email and/or password-protect the split pdf files. See Splitting and Emailing PDF Files By Embedded Tags and Splitting, Protecting, and Emailing PDF Files By Embedded Tags. The PDF file can be generated by any source (does not have to be an export from a Crystal Report) [https://www.milletsoftware.com/images/youtube_16c.png].

 

Excel Features

¨    You can now use an excel file (instead of Crystal report) as a data source for exporting/bursting to emails as well as to Web Schedule/Grid/Pivot exports [https://www.milletsoftware.com/images/youtube_16c.png].

¨    You can now Upload Excel Tabs to Google Sheets [https://www.milletsoftware.com/images/youtube_16c.png].

¨    Optimized opening of xlsx files with many tabs for faster speed and lower memory consumption.

¨    You can now save Excel data to JSON. This is particularly useful for feeding data to web dashboard widgets such as dynamic grids and charts. See Convert Excel Files to JSON .

¨    Generating CSV files via XLS_Save_As, now provides an option to add double quote qualifiers around text columns. See Convert Excel Files to CSV .

¨    Generating CSV files via XLS_Save_As, now provides an option to specify character encoding. See Convert Excel Files to CSV .

¨    Generating CSV files via XLS_Save_As, now provides an option to specify a hidden character such as Tab as the delimiter. See Convert Excel Files to CSV .

¨    Excel Data Only export to xlsx using the V3 component can now AutoFit row heights if you set the following ini file entry under [Options]:
V3_Data_Only_xlsx_Export_AutoFitRowHeight=True
You can also override the default for a given report by setting this new argument:
"V3_Data_Only_xlsx_Export_AutoFitRowHeight:True"

¨    Excel Data Only export to xlsx using the V3 component with both AutoFit and AutoFilter  now fit column headers taking into account the AutoFilter drop-down.

¨    XLS_AutoFilter now also takes care of auto-fitting column widths.

¨    Optimized XLS_AutoFit for faster speed.

¨    XLS_AutoFit directives now apply to scenarios with Tab!, TabInNewFile!, TabInOldFile!, and TabInOldFile_Replace!.

¨    If the Use_Excel_Component_v3 option is set to True, XLS_Range_Insert_File and XLS_Transfer_Tabs are now handled without needing Excel.

¨    Added [USE_SOURCE_FORMATTING] option to XLS_Range_Insert_File.

¨    If the Use_Excel_Component_v3 option is set to True (and save-as format is “pdf” or “xlsx”), XLS_Split_Tabs is now handled without needing Excel.

¨    If the Use_Excel_Component_v3 option is set to True XLS_Pivot_Table is now handled without needing Excel if: a) the resulting file is .xlsx, and b) no use of TopN/BottomN directives.

¨    If a user specifies .xls as the export file extension and clicks to save settings, Visual CUT now provides a reminder dialog suggesting a change to the .xlsx  file extension format.

¨    When exporting to xlsx, if the ini option of
V3_Data_Only_xlsx_Export_Delete_Blank_Rows

is set to True, Visual CUT automatically consolidates column headers staggered across multiple rows into a single row. This is a typical need when exporting reports with CrossTabs to Excel (Data Only).

¨    When exporting to xlsx, if the ini option of V3_Data_Only_xlsx_Export_Delete_Blank_Columns
is set to True, Visual CUT automatically deletes blank columns. This is a typical need when exporting reports with CrossTabs to Excel (Data Only).  

 

¨    XLS_Replace now uses an internal component, removing the dependency on Excel.

¨    XLS_Protect now supports more arguments. You can specify password to open, password to modify, and whether the open dialog should recommend Read Only mode.

Delegated Processing Features

¨    Delegated processing via DLV 2011 can now handle xls, xlsx, and xlsm scenarios with Tab!, TabInNewFile!, TabInOldFile!, and TabInOldFile_Replace!.

¨    When logging unattended delegated (to DLV 2011) processing to ODBC, the logging now starts earlier and sets an initial status of 'Delegated' rather than 'Started'.

¨    Removed the need to load a hidden dummy report in the background.

¨    In interactive use, reports targeted for delegation to DataLink Viewer (via the ini file listing) skip delegation if the user clicks the Visual CUT preview tab rather than double-clicks the report row. A message now alerts the user to that fact if the user clicks the Preview tab.

¨    When you right-click a report row in the grid, a Delegate menu option (see image) allows you to turn on or off delegation for that report. That option is currently visible only if the ini file has a [Delegated_Processing] section with a Reports entry.

 

 

Other Features

¨    The installer now unzips to the usual Visual CUT 11.msi file plus a new VC11_Uninstall_Install_RClick_Run_As_Admin.cmd batch file. Instead of manually going through uninstall & install steps, you can right-click the batch file and '
Run as administrator' to take care of the whole process. The batch file also alerts you to any ongoing Visual CUT or Visual CUT Helper processes and offers to kill such processes or abort. 

¨    Added SFTP_Download argument to download files matching wildcard patterns with advanced processing options. For detail, see Downloading from an SFTP Server.

¨    Added support for new SFTP host key algorithms (ecdsa-sha2-nistp521 & ecdsa-sha2-nistp384).

¨    When generating auto-refreshing web dashboards, the TXT_DeGUID_png argument now ensures older versions of image files are not served from the browser cache. This is done by automatically appending a parameter with current date & time to the image source reference  like this: img src="Sales for 2004.png?20190521123925"

¨    Added two more date token to the drag & drop area for injecting previous month’s month number {[MM-1M]} and previous month’s year number {[yyyy-1M]}

¨    Report grid right-click menu now has options to Export/Import Report Processing Options.

¨    Find & Replace Settings dialog now allows leaving the 'new text' as blank. This addresses Find & Delete use cases such as deleting old email addresses. See image.

¨    Added an option to Remove Catalog and Owner table properties during mass updates for data sources.

¨    Added detection and detailed message directing the user to install Visual C++ distributable if missing when attempting to use the scheduling GUI.

¨    Added a batch file to make mapped drives visible when running app as administrator.

¨    Added a message when Visual CUT files are found in the current user's VirtualStore folder.

¨    Bad/inconsistent values in the Export/Email tab are now highlighted with red background. The arguments area also lists bad arguments in its tooltip.

¨    Added User ID column to the scheduled tasks grid, to show the principal account id set to run each task.

 

¨    “Export_Mode:None” can now be used as alternatives to “Export_Mode:”

 

¨    “Email_Mode:None” can now be used as alternatives to “Email_Mode:”

¨    Packaged with a newer Chilkat component.

¨    User Manual button now defaults to opening the web version.
Shift-Clicks attempts to open the local pdf version (which on some machines might fail).

¨    Added a user manual section and a live sample for Auto-Refreshing Multi-Panel Web Dashboards.

¨    Improved layout of smtpQ options and status indicators.

¨    Increased width of progress dialog.

¨    Logging of Visual CUT processing to a database now includes all email addresses (to, cc, bcc) in the Email_To column of the MS_Log table.

¨    Scheduled Task Manager now maps more error codes to meaningful messages.

¨    Enhanced retry logic for failed connections to Visual CUT database.

¨    The batch file creation dialog now replaces ‘%’ characters in the report file path with ‘%%’.
It also shows a message explaining the need to do this with manually-added directives.

¨    If ini option for Maximum_Allowed_Active_Instances is not found, it is now set to a default of 3. See: Avoiding Too Many Active Visual CUT Instances (Queuing).

¨    Added ini file option to fail command line processing when a missing parameter value is detected. This can avoid cases where Visual CUT processes appear to hang. See Handling Missing Parameter Values.

¨    You can now elect to save data parameter values for today/yesterday as Today/Yesterday tokens for reuse during scheduled/interactive processing. See Save Date Parameter Values as Date Tokens.

Email Features

¨    New email component fixes a recent (October 2022) issue with Office365 SMTP>

¨    The smtpQ Administration dialog now provides a 'Sleep After Send' option to throttle down email throughput by specifying N milliseconds of sleep after each successful email. For detail, see Slowing Down Outgoing Emails or this image.

¨    The Options tab for email settings now provides a dialog for sending a test email.
If a failure occurs, the email log is opened in NotePad to facilitate troubleshooting.

¨    Double-Clicking Email_From, Email_To, Reply_To, CC, or BCC automatically populates that field with the most frequest address used for that field in saved settings across all reports.
Double-Clicking Email_To, CC, or BCC while pressing the Shift-Key opens a dialog for pasting/editing long text (in case you need to use a long list of emails).
Reminder: double-clicking the labels for these fields launches a grid allowing you to select email addresses sorted by frequency of use.

¨    The smtpQ Administration dialog now provides a ' Disconnect After Send' option for cases where a disconnect is needed before the SMTP server actually sends the message. See image .

¨    You can now add a dynamic emoji to the email subject using a static or dynamic path to an emoji text file. See Argument to Specify Email Subject Emoji  [https://www.milletsoftware.com/images/youtube_16c.png].
 

¨    Added more detail to queued email logging and to failure messages.

¨    Removed Email_Bounce_Address property from the GUI. See explanation
You can still set it in the ini file's [Options] section.

¨    Double-clicking the Outgoing Email Folder text, flips between
"c:\Visual CUT\smtpQ\Outgoing" and "c:\Visual CUT\smtpQ\Delayed" but only if the current text is one of these 2 values. See image.
This facilitates easy switching between 'Production' and 'Testing' mode.
Note: double-clicking that option when it is empty, initializes the text to the standard "c:\Visual CUT\smtpQ\Outgoing".

¨    Double-clicking an email address in the list of previously-used addresses now automatically selects that address if the email option is the Email_From.
 

¨    Setting “Email_Outgoing_Folder:…” argument in the GUI now overrides any prior setting.

¨    You can now use different email settings for failure messages. For detail, see  Using Different Email Settings for Failure Messages.

¨    Added an ini file option to force Email_From to match Email_User_ID. This avoids failures in cases where email servers require the email from to match the authenticated user (to avoid impersonation). For detail, see Force Email_From to Match Email_User_ID.

¨    Implemented support for Gmail OAuth2 authentication for Google G-Suite accounts. At this point, this is in testing and only for direct emails (not queued via smtpQ). If interested in testing, please contact Millet Software.

¨    Added color indicator to the email queing status panels to alert cases such as stopped smtpQ service, undelivereable emails, etc.

¨    The html editor now handles Enter as a new line, and Shift-Enter as a new paragraph (<p>). 
See Enter Key Behavior.

Fixes

¨    Servers without a printer no longer trigger Error 484: (Problem getting printer information).

¨    Find & Replace changes to saved settings are now always visible without a need to restart Visual CUT.

¨    Fixed FTP_Upload when a non-standard port is used.

¨    Fixed SFTP_Upload when files without path should “inherit” path of previous files.

¨    Fixed TXT_DeGUID_png process for HTML exports from later versions of Crystal. This allows delegated processing (DLV 2011) to drive auto-refreshing web dashboards.

¨    Fixed handling parameter values (e.g. more than 8 parameters) when processing is delegated to DataLink Viewer.

¨    Processing failures now takes care of closing delegated DataLink Viewer 2011 instances.

¨    Fixed delegated exporting with file extension of .htm instead of .html, command line argument of ODBC_DSN, or multi-tab excel exports.

¨    Fixed issue related to repeated bursting from a single interactive delegated processing session.

¨    Fixed Skip_Recent directive handling when delegating processing to DataLink Viewer.

¨    Fixed PDF_AddText handling of skipped pages.

¨    Fixed handling of XLS_AutoFilter and XLS_AutoFit for certain cases.

¨    Fixed handling of XLS_Range_Insert_File for cases with multiple directives.

¨    Fixed handling for very large exports to .xlsx files.

¨    Fixed tab transfer/renaming problem in XLS_Transfe_Tabs.

¨    Fixed a problem with XLS_Split_ByColumn.

¨    Fixed handling of command lines with –s rare scenario.

¨    Fixed checking of valid email structure when set to VC_Skip_Email.

¨    The checks for export file path and extension are now done when saving settings. This avoids premature warnings while inserting dynamic tokens.

¨    Fixed registration nag screen problem with email html editor.

¨    The form for encrypting and saving passwords now handles changes in the selected password name by detecting if such a named password already has a saved entry.

¨    New custom ChilkatSmtpQ component fixes a rare No Recipients failure.

¨    Fixed a rare problem in handling a saved null value for numeric stored procedure parameter.

¨    Logging to SQL now replaces dot ‘.’ characters in User Name with underscore ‘_’ to avoid logging failures on certain DBMSs.

¨    Fixed duplication in After_Success_Batch processing.

¨    Fixed issue that might cause hanging instances of Visual CUT.

¨    Fixed a scenario that causes export/email burst checkboxes to lose saved settings when switching to another report.

¨    Fixed a rare issue when importing report settings from a zip file.

¨    Process logging to ODBC now handles cases where Windows User ID is returned by the operating system with a special character at the end.

¨    In the window for monitoring scheduled task, the 'Last Result' status for a currently running task shows 'OK' with normal background color. Previously, the background color was red.

¨    In the window for monitoring scheduled task, manually triggering a task now immediately reflects the status of the task as Running.

¨    When setting a DateTime parameter via a date constants pointing to the end of a custom calendar segment, (e.g. "Parm1:FiscalQ_End_RelativeTo_Today"), the time portion of the date is now set to the end of the day (11:59:59).



 

Version 7.2.1: Released December 19, 2018

Key Features

¨    Added support for latest Crystal 2016 features (e.g. CrossTab embedded summaries).
This requires a free DataLink Viewer 2011 license (available upon request) for integration with Visual CUT. See Fully Delegated Processing (Preview/Export/Burst)

¨    Added a mass update feature allowing you to replace a data source in multiple reports with a current data store in an already-updated report. See 4-minute video.

¨    The Report Inspector feature can now capture, update, and even import conditional formatting expressions for field objects (font, border, Date, Numeric, etc.). This allows you, for example, to import from excel font color and background color expressions for multiple formula or database fields on your reports. For detail, see Generate & Import Field Format Expressions from Excel.

¨    The Report Inspector feature now captures data connections, database tables, and parameters (including an indication of use count).

¨    You can now double-click an entry in the field/formula panel (Export/Email tab) to insert it into an option you are editing. Drag & Drop is still supported but double-click is easier.

¨    Arguments editing window now has a right-side panel showing the list of dynamic fields/formulas. You can drag & drop or double-click an item in the list to insert it. A tooltip reflects the dynamic content of the included fields/formulas. See image.

¨    Email HTML editor now has a panel showing the list of dynamic fields/formulas. Drag & drop or double-click an item in the list to insert it into the email message. See image.

Email Features

¨    Email HTML editor now includes default css directives that improve vertical spacing between paragraphs and lists (ordered & unordered). See image.

¨    Updated the smtpQ service component (ChilkatSmtpQ.exe). This ensures support for latest encrypted SMTP protocols.

¨    Email HTML editor window now remembers its last size & position.


 

Excel Features

¨    Added Use_Excel_Component_V3 and Use_Excel_Component arguments for cases where you need to override the global ini file settings. For example, large (more than 300K rows) Excel (Data Only) exports to xlsx files may run out of memory when using the internal component. "Use_Excel_Component:False" solves this by using Excel automation instead.

¨    XLS to XLSX conversion now results in more compact files.

¨    Excel Data Only export to xlsx using the V3 component no longer default to taking the extra step of removing blank rows (a typical problem due to subreports). This improves speed.
If you wish to include blank row removal, set the ini file option of:
V3_Data_Only_xlsx_Export_Delete_Blank_Rows=True
You can also override the default for a given report by setting this new argument:
"V3_Data_Only_xlsx_Export_Delete_Blank_Rows:True"

¨    Excel Data Only export to xlsx using the V3 component no longer default to taking the extra step of Auto-Fitting column widths. This improves speed.
If you wish to include column auto-fit, set the ini file option of:
V3_Data_Only_xlsx_Export_AutoFit=True
You can also override the default for a given report by setting this new argument:
"V3_Data_Only_xlsx_Export_AutoFit:True"

¨    XLS_Print_Setup processing no longer requires Excel automation. An internal component is used instead.

¨    Added XLS_Merge argument to allow merging of sheets from multiple excel workbooks.

PDF Features

¨    Reduced memory consumption when processing PDF files. To allow PDF split operations for large (>200MB) pdf files, process is optimized to further reduce memory consumption.

¨    Tag text at the report or group-1 levels for PDF_Link_Tags operation can now refer to fields/formulas. This allows avoiding using tiny font when the tag content is long.

¨    You can now automate digitally signing pdf files using a digital certificate token.   

Scheduled Tasks Features

¨    Installation now includes a desktop shortcut for the scheduled tasks grid. See image.

¨    The scheduled tasks grid now provides text description for common 'last result' codes.

¨    The scheduled tasks grid now shows the process priority assigned to each task. To change task priority, see this discussion.

¨    The scheduled tasks grid now automatically enables task history. This ensures the grid reflects status changes.

Other Features

¨    Export/Email tab now uses red background highlight to warn users when they specify export file but didn’t enable the export checkbox. Similar warning is provided if the user specified an Email_From but didn’t enable one of the email checkboxes. See image.

¨    Enhanced queue management logic for cases where number of Visual CUT instances exceeds the setting for maximum number of active instances. This should better handle scheduled tasks that are set to run ' Whether user is logged in or not'. Also, maximum number of allowed instances now applies only to command line processing.

 

¨    Report inspector grid now uses column filters for certain columns (Object Type, Expression Type, Section) that facilitate multiple choices via checkboxes.

¨    During mass update of data sources, you can now also Update Owner or Catalog/Owner Property of Tables.

 

¨    During mass update of data sources, you can now also Mass Update Server Name (even if you have no access to the new server).

 

¨    The field/formula panel is now populated even when the report results in no records.
   

¨    Dummy reports (name contains "dummy" AND no main report tables) now skip messages about saved data and zero records. This streamlines using such reports.

¨    Removed DataLink_Viewer_Helper.exe from install to avoid virus protection false positives. It is used for rare PDF_Add_Media and PDF_Build_Index arguments. It also handles auto-closing of Microsoft Outlook popup related to when exporting if the machine doesn't have a default email client installed. If needed, you may download the file to the Visual CUT application folder separately but you might need to exempt it from Windows Defender or other virus protection software.

¨    Added a checkbox to the HTML export Auto-Refreshing Web Dashboard wizard to prevent content caching for the resulting web page. See image.

¨    Removed OLEAUT32 as part of the installation process for Visual CUT 11.

¨    Updated SQL Server MS_Log table instructions (Record Processing to an ODBC Database). Indexing the LogN column allows faster updates when the table grows.

¨    Added Display_DSN_List_in_ODBC_Login option to ini file (as well as to the Database tab in the Options dialog). Setting this option to True causes the login dialog for ODBC data sources to display the list of alternative ODBC DSNs by default.

¨    Added message to help identify cases where, by mistake, user ended a command line argument with an invisible line feed or carriage return character.

¨    Zip_Files now supports 256-bit AES encryption. See ZIP and Password Protect Files.

¨    [Options] section of ini file now allows you to disable warnings about smtpQ Outgoing folder not matching Visual CUT outgoing folder by adding this entry:
Disable_Warning_smtpQ_Folder_Not_Matching=True

¨    Added code to avoid opening the HTML email editor window to an invisible screen location (a no-longer available second screen).

¨    To disable automatic conversion from mapped drive to UNC path for export files, and to avoid the warning about the mapped drive path, set the following entries in the [Options] section of the ini file:
Enable_Auto_Conversion_to_UNC=FALSE
Display_Warning_Export_File_Mapped_Path=FALSE

¨    New installs now default the scheduled tasks grid to a nice layout (less useful columns are hidden, grid is grouped on ‘Next Run Time’ categories, etc.). Existing users can opt into the new layout by deleting: C:\ProgramData\MilletSoftware\VC_11\Scheduler_Grid.xml
(while the monitor window is closed).

¨    You can now add custom text to email alerts about processing failures.
For detail, see Adding Custom Text to Failure Email Alerts.

Fixes

¨    Fixed a problem with password protection of a zip file without a specified encryption type argument.

¨    Fixed a problem with diagnosing email addresses as bad when valid special characters (e.g. '#') are included.

¨    Fixed an issue related to clicking the report refresh button in Preview tab or double-clicking the currently-previewed report in the report grid.

¨    Fixed an issue causing a "do you wish to save changes" reminder after editing email message, clicking Save, and trying to exit the application.

¨    Fixed a fit to page(s) problem with XLS_Print_Setup.

¨    Fixed logging to ODBC in cases where the option to log warnings is turned off or report processing is skipped due to zero records (-e instead of –E).

¨    Fixed handling of xlsx file extension when exporting to multiple files formats in a single pass.
 

¨    Fixed SQL_Extract_Files handling of specifying file extension via reference to SQL column.

¨    Fixed a PDF_Merge problem when a {BM:…} bookmark directive is embedded in missing input files.

¨    Fixed a rare domain/account handling issue in the scheduling GUI.

¨    Fixed End_RelativeTo custom calendar issue when the reference date matches exactly the last element in the custom calendar.

¨    Fixed a rare issue causing "Error 457: This key is already associated with an element of this collection".

 

¨    Fixed an issue with saving stored procedure parameters with null values.

¨    Improved automatic fixing of extra spaces between command line arguments (for example, when a user specifies by mistake two spaces instead of one).

¨    Fixed a problem with exporting the scheduled tasks grid.


Version 7.1.1: Released November 11, 2017

Key Features

¨    PDF_Form_Tags now support the creation of signature fields.
For detail, see: Adding a Digital Signature Form Field

¨    The integrated Report Inspector now supports generating & importing formulas from excel into multiple Crystal reports. See 6-minute video demo.

¨    Released video demo of generating excel dashboards.

¨    Added an option to handle Word (.doc) to PDF file conversion without MS Word Automation. To Enable this, set Use_Word_Component_V3=True in the [Options] section of the ini file.

¨    You can now change the default font in the Visual CUT GUI by setting an ini [Options] entry. For example:
Switch2Font=Arial Narrow 
This can fix text truncation/wrapping problems on some machines.

¨    Visual CUT 11 now automatically converts from mapped to UNC paths for:
a) batch files (specified from the scheduling string wizard) and
b) images embedded in HTML email messages
provided the Enable_Auto_Conversion_to_UNC ini file option is set to True.
Mapped paths can cause failures during scheduled processing.

¨    A Shift-Click on the 'Start Process' button now stops burst processing after the first group. This can be useful for test scenarios.

¨    Skip_Recent argument now handles the special value of 999999 as indication to skip processing if the export file exists, regardless of its age.

¨    Double-clicking Email To, CC, or BCC now provides a large editing window with each address on its own line. Closing that editing window recombines the emails using ; separators. This helps when editing multiple email addresses.


PDF Features

¨    You can now generate PDF invoices following the ZUGFeRD electronic data exchange standard. Visual CUT embeds the XML file (providing the invoice data as machine readable format) and also sets up the document as PDF/A-3b according to the ZUGFeRD specification. For detail, see Generating ZUGFeRD Invoices.

¨    Added PDF_Add_Text argument.

¨    Added PDF_A_Mode argument to convert files to the PDF/A standard.

¨    PDF_Insert_Pages_Tags now also supports inserting pdf files (in addition to image files).

¨    PDF_Protect now supports a more secure Strength option of "256B". Documents protected using this option require Acrobat X or later.

¨    PDF_Link_Tags2 now automatically assigns 100% transparency level when the icon option for the hyperlink to the embedded file is set to 2 ('None'). This ensures the icon is hidden.

¨    PDF_Split_Tags and PDF_Split_Protect_Tags now apply options specified in PDF_Properties to the split pdf files.

¨    PDF_Merge can now generate 2-level bookmarks based on Folder name and File name. For detail, see: 'Using the Merged Folder & File Names to Generate 2-Level Bookmarks'

 

Excel Features

¨    Previously, only Excel 97 (Data Only) exports to .xlsx files were handled using fast internal processing. Now, regular Excel 97 exports to .xlsx files no longer require Excel automation. A new component is used to handle the internal conversion from xls to xlsx, resulting in a faster process that doesn't depend on Excel.
To disable this new option, find and set the following ini file option:  
Use_Excel_Component_v3=False

¨    XLS_to_XLSX now supports CSV as source file format.

 

¨    When converting xls files to xlsx, if the xlsx file name contains 'ODBC', Visual CUT automatically adds a named range called 'VC_DATA' pointing at the used range in the first tab. This facilitates using the resulting workbook as an ODBC data source for other reports. Also, if the first tab name starts with a number, that number gets converted to a letter (e.g. 1 becomes A, 2 becomes B, …) since named ranges inside tab names that start with a number don't work well as ODBC data source.

¨    Added XLS_Replace2 command line argument to replace content in specified columns. This features aims at replacing blanks with numeric zero so that column data type inferred by ODBC connection can remain numeric even when top rows have blank values. For detail, see Find & Replace Content in Excel Columns.

¨    Tab!, TabInOldFile!, TabInOldFile_Replace!, and TabInNewFile! now use a fast internal  component, removing the need for Excel, if Use_Excel_Component_v3=True.

¨    XLS_Save_As to CSV and TXT now no longer requires Excel automation, if scope argument is set to 0 (workbook) and Use_Excel_Component_v3=True.

¨    XLS_Save_As to CSV can now specify the delimiter via an Options argument.

¨    Excel 97 (Data Only) exports to .xlsx files now also auto-fit column widths.
Note: this is true only if Use_Excel_Component_v3 is set to True.

¨    Added XLS_Protect_WorkSheets_v2 as a better method for protecting content in excel worksheets. This method doesn't require excel. It also supports multiple flags for controlling what the user is allowed to do.

¨    XLS_Range_Insert_File now takes care of resetting data sources for pivot tables to the hosting workbook (as opposed to the original template workbook). This allows Visual CUT to populate data for workbooks with pivot tables and charts. Note however that this functionality currently doesn't support use cases where a Slicer is applied to multiple Pivot Tables/Charts. You can use PowerPivot to overcome that limitation. See video demo.

¨    XLS_Range_Insert_File now supports a [REPLACE] option, allowing you to maintain a template with a populated data range. This ensures that design choices such as TopN filtering for Pivot Tables are not lost due to removing the prototype data from the template. The [REPLACE] option directs Visual CUT to replace the template data with the inserted data (instead of appending the inserted records to the end of the data/table range).

Other Features

 

¨    Added Xtra_Record_Selection command line argument to append an extra expression to the main report record selection formula. This provides flexibility in filtering the report beyond parameter logic. For detail, see Argument to Set Extra Record Selection Logic.

¨    Added {[User_ID:]} object to the fields/formulas area for dragging into processing options. Its value is set to the user id used for database login or blank ("") if no login was used.

¨    The fields/formulas area for drag & drop into processing options now include, if the report uses an ODBC DSN (including cases where that DSN was specified via a command line argument or via the DSN choice user interface), an {[ODBC_DSN:]} object for dragging into processing options. This allows emails and other processing options to reflect the actual data source name used by the report. See image.

¨    TXT_Replace now supports '|>>|' separator for Find & Replace pairs to facilitate handling of strings that end/start with a '>' character.

¨    Text export options now default to no pagination and 40 characters per inch.

 

¨    Added a command line argument to override the saved option for Strip_Table_Qualifiers.

¨    After_Success_Batch, After_Export_Batch, After_Burst_Batch, and Before_Export_Batch now delete temp batch files created during processing, if the process is using the 'Wait' option.

¨    Enabled drag & drop for the optional smtp server field in the Export/Email tab.

¨    Command lines with -s (show) flag now handle the command line argument of Connect_To_SQLOLEDB.
 

¨    Visual CUT 11 now supports number constant expressions for string parameters (not just for numeric parameters). For example, "Parm1:[Year_Plus_0]" would set the value of the string parameter to the current year (e.g. '2017').

¨    Added Calendar_Add_Event argument for inserting event to a Google calendar and optionally sending email allowing invitees to confirm/deny participation via a single click.

¨    Added Google_Drive_Upload argument allowing uploading a file to the 'Shared with Me' folder on your Google Drive.

¨    Added customization option to the behavior of the {[v]} file counter token. For detail, see Incrementing Export File Name Counter.

¨    Added YMD= date constant. See detail in Date Constants. Examples (today = Nov 11, 2017):
"Parm2:YMD=+1/6/15" --> June 15, 2018     "Parm2:YMD=+1/6/EOM" --> June 30, 2018

¨    Added Email_HeloHostName command line argument. When this argument is not specified, the local hostname is used for the EHLO/HELO command sent to an SMTP server. Use this argument if you need to override that default behavior.

¨    Added a 'Find (Ctrl-F)' option to the report grid right-click menu.

¨    You can now specify multiple ReplyTo email addresses separated by ';'. When the email recipient clicks Reply, all these addresses would be used as the EmailTo targets.

¨    Added special handling to avoid login prompt for Access/Excel connectivity using ACE.OLEDB connectivity (even when 'Attempt Login without Password' is turned off).

 

Fixes

¨    Scheduling GUI now supports 24-hour formats (Region and Language machine options).

¨    Due to issues related to initial saving of settings for newly opened reports, reverted to prior logic of communicating with the Visual CUT database.

¨    Fixed rare error ('Operation was canceled' followed by 'Consumer's event handler called a non-reentrant method in the provider') when saving processing options for a report.

¨    Fixed a printer detection problem when using Printer (Specified) as an export format.

¨    Fixed a problem causing the new Excel component to fail processing large Excel files.

¨    The auto-refreshing web dashboard wizard now properly reflects SFTP authentication option of both Password and Private Key (PWPK).

¨    Fixed an email queuing problem caused by recipient names containing the ß character.

¨    Fixed an issue causing the Start Process button to remain disabled after skipping a Preview for a report, viewing Export/Email settings, and then going back and previewing the same report.

¨    Fixed an issue related to dragging string parameters with long content into processing options.

¨    Streamlined the report grid update logic when Last_Used column is updated.

¨    Report grid groups now stay expanded when restarting Visual CUT even when the number of rows is more than 100.

¨    Fixed unexpected deletion of After_Success_Batch files when they do not include dynamic references to fields/formulas.

¨    Job Status functionality now also applies to cases where the command line contains unrecognized arguments (after the Job_Status_ID argument).

 

¨    Fixed an issue with generation of PDF Table of Contents (PDF_TOC argument) when the TOC page orientation setting is Portrait but the first page after the TOC is landscape.

¨    Fixed a process hang bug triggered by "XLS_AutoFilter:c:\temp\test.xls>>True"

¨    Fixed 'Number Constants' not being recognized for certain types of parameters.


Version 7.0.1: Released November 26, 2016

Key Features

¨    Visual CUT 11 now offers integrated dialogs for creating, managing, and monitoring scheduled tasks. While the Windows Task Scheduler is used as the engine for these tasks, the dialogs provide significant benefits for ease of use and for avoiding task failures.
For detail, see 'Scheduling (new approach)' or watch this 9-minute video.

¨    Visual CUT 11 can now Search, Update, and Replace text, formulas, and conditional format expressions across multiple reports. See Inspect & Update Report Designs. Or watch this 4-minute video.

¨    Visual CUT 11 now allows you to change saved processing options without first previewing the report. This is supported via a right-click menu option in the report list grid (see image) or by simply clicking on the 3rd (Export/Email) tab without first previewing the report. The 'Start Process' button is disabled and some panels are not populated (see image).

¨    Improved the color scheme for report list and other data grids. To activate the change, existing users need to delete ReportList,grd while Visual CUT is not running.  To open the folder where that file is located, click the version info button, double-click the text area at the bottom of the dialog, and close Visual CUT. Long-time users may also need to delete ReportList.grd from the application folder. See demo image.

PDF Features

¨    Added PDF_Clone_And_Print command line argument. This solves use cases where multiple copies must be printed as a single stapled print job.

¨    Added PDF_Add_Destinations command line argument. This allows you to add named destinations to a pdf document based on its bookmarks. A typical benefit from this is that a url link to the PDF can direct a browser to open the pdf and position to the page where the named destination is located. For example:

http://www.milletsoftware.com/Download/test_Add_Destinations.pdf#Mountain__SlickRock
For detail, see ' Adding Named Destinations to a PDF Document.'

¨    Added [Ignore_Missing_Files] option for PDF_Insert_Pages_Tags.

¨    PDF_Split_Tags can now include the number of pages within the name of each split file.

¨    PDF_Merge now supports cases where owner password of protected input documents is blank. In such a case, use 'VC_BLANK' when specifying the password argument.
 

Excel Features

¨    Added XLS_Range_Insert_File_Split command line argument. This allows fast splitting of a large excel files (by its 1st column) and inserting each 'slice" into an excel template. For detail, see Splitting Workbook & Inserting into a Template (faster method).

¨    Added XLS_Split_ByColumn command line argument. This allows fast splitting of workbook based on unique values found in the first column. For detail, see Splitting Excel Workbooks by First Column.

¨    Visual CUT 11 now exports to Data Only .xlsx files and process XLS_AutoFit & XLS_AutoFilter for xlsx files without Excel automation (process is faster).

¨    Visual CUT 11, when exporting to Data Only .xlsx files, automatically removes blank rows from the resulting file. Such blank rows are a typical problem caused by subreports.

¨    XLS_Save_As can now save to TXT format. This provides a solution to truncations of wide content when exporting to text directly. By exporting to Excel (Data Only) and then converting from Excel to text, you avoid the truncation problem.

 

¨    XLS_AutoFilter can now target a specific Excel workbook tab when Auto Filtering or Freezing Panes. For detail, see Auto Filter & Freeze Panes in Excel Exports.

 

¨    Optimized exporting to xlsx to better support cases with many (>500K) records).

Email Features

¨    The Email To, From, To, CC, and BCC labels now act as buttons that launch a dialog for selecting previously used emails (individual as well as multiple addresses) sorted by frequency of past use. You can use a checkbox or double-click to Select/Unselect addresses. The dialog supports searching. See demo image.

¨    [[Insert_File:…]] directives in email message bodies now handle cases where the specified file is missing by providing a text indicating the file was not found.

¨    The HTML editor now avoids adding unnecessary style directives to the email message body ("style=""BORDER-TOP-COLOR: ; BORDER-LEFT-COLOR: ; BORDER-BOTTOM-COLOR: ; BORDER-RIGHT-COLOR: ").

¨    When command line processing of a report includes an Email_Get directive, if the number of newly captured emails that got inserted into the database is zero, and the previous run also resulted in zero inserted records (to protect against cases where the last data insert is not yet recognized by the report that immediately runs in the same automated process), the process now aborts without wasting time on processing the report (since there are no new records to process). You may override that new default behavior by setting an ini file option. See ' Triggering Email Capture'.

¨    To support cases where Visual CUT generates eml files that are then opened manually in Outlook, and the Email From option needs to be reset, emails with blank Email From are allowed if: a) email queuing is enabled, and b) the Visual CUT outgoing folder is NOT the same as the smtpQ outgoing folder.

¨    If you use command line arguments to override email options (e.g. SMTP server) but wish to use the default email settings for failure alerts, you can now set the following entry in the [Options] section of DataLink_Viewer.ini:
Email_Use_Defaults_For_Failure_Alerts=True

¨    When logging email activity during non-queued email sending, the log now specifies the report file name. This facilitates searching for email log activity for a given report.


Other Features

¨    Added HTML version of the user manual from Shift-Click of User Manual button or: http://www.milletsoftware.com/Visual_CUT_User_Manual
Entries in the Table of Command Line Arguments are now hyperlinked to the user manual section describing them. The Edit Arguments form now has a button for launching the HTML user manual to the Table of Command Line Arguments section.

 

¨    When delegating exporting to DataLink Viewer, you can avoid retrieving data twice by using "Proxy:dlv_snapshot".  For more detail, see Proxy Processing Using a Data Snapshot.

¨    When delegating exporting to DataLink Viewer, you can now export to RPTR file format by selecting 'Crystal Report' as the export format and setting '.rptr' as the export file extension. See 'Delegating Exporting/Bursting to DataLink Viewer 2011'.

¨    Visual CUT now aborts processing if it looks like export/email bursting is turned off by mistake. The message provides detail about what group-level fields/formulas were detected in export/email processing options. The message suggests turning on bursting or moving these fields/formulas from GH1/GF1 sections to RH/RF sections.

 

¨    TXT_Replace can now insert file content instead of [[Insert_File:…]] reference tokens. This is particularly useful for cases where auto-refreshing web dashboard Text exports to html files need to reuse JavaScript or template content. For detail, see 'Replacing Content in Text Files.'

¨    Skip_Recent argument can now supports dynamic references to field/formulas.

¨    In cases where the Visual CUT window opens to an invisible screen location (a no-longer available second screen), holding down the shift key while restarting Visual CUT restores the default window location.

¨    Added support for the following date constant expressions: TODAY_PLUS_N_PLUS_M, TODAY_PLUS_N_PLUS_M_EOM, andTODAY_PLUS_N_PLUS_M_SOM

¨    Added a {[v]} field to the list of Fields/Formulas. When dragged into the export file name and the email attachment file name, this field ensures the export file is new. If the file doesn't exist, the special field is replaced with a blank text ("").If the file exists, the {[v]} is replaced by the first entry in the sequence of _1, _2, _3 … that results in a new file. For example, if C:\Export.pdf and C:\Export_1.pdf already exist, then
an Export File set to C:\Export{[v]}.pdf would result in C:\Export_2.pdf being exported.

¨    Added optional …>>Show>>Wait argument to After_Success_Batch, After_Burst_Batch, After_Export_Batch, and Before_Export_Batch. You can hide the batch file window by setting the 1st optional argument to Hide instead of Show.  You can tell Visual CUT to not wait for the batch to finish by setting the 2nd optional argument to NoWait instead of Wait.

¨    Added detailed failure messages for several cases where command line arguments might be badly structured.

¨    Added TXT_Encode argument to convert the encoding of text files.

¨    When using the "Print_Copies:" argument for direct printing (not via PDF_Print), you can now set custom text on each print copy (such as 'Copy 1 of 2', 'Copy 2 of 2'). Note that the print quantity can be dynamically controlled by a Crystal field/formula. See 'Setting Custom Text for Each Print Copy' and this demo image.

¨    Increased the width of the Copies option to reflect cases where a field/formula is dragged into that option.

¨    During interactive exporting, a "Printer:" directive placed in the Arguments area of the GUI now also triggers printing.

¨    Visual CUT 11 now runs Word_Replace_Tags without MS Word automation, provided the template document is .docx rather than .doc (process is faster).

¨    Visual CUT 11 now runs Word_Save_As to pdf without MS Word automation provided the source document is .docx and extra options such as Tagged or PDF/A format are not used.

¨    Implemented automatic hiding of group tree panel for reports without grouping.

¨    ZIP_Files now allows specifying AES as a stronger encryption alternative. See ZIP and Password Protect Files.

Fixes

¨    Fixed report refresh/reload scenario causing the first group to lose dynamic field/formula values.

¨    Fixed a rare issue causing burst checkbox to lose its state.

 

¨    Fixed an issue with cloning rpt files when the internal settings database is redirected to certain types of DBMSs.

¨    During automatic conversion of illegal characters in export file names, A ':' character is now converted to '_' instead of ';' to avoid multiple export file names handling.

¨    Selective parameter change window now remembers choices for each report.

¨    Fixed a problem with HTML email messages with dynamic references to image files.

¨    Fixed a bug in Today_Plus_N_Plus_M and Today_Plus_N_Minus_M date constants.

¨    Fixed a PDF_Form issue.

¨    Fixed a PDF_Merge issue caused by file names with upper case PDF extension.

¨    Fixed encryption/decryption problem, which seems to be limited to computers at a Russian locale using Cyrillic character encoding. This problem caused database log in failure since user id and passwords are stored encrypted. Visual CUT now automatically uses a new encrypt/decrypt method when detecting this problem. In such a case, it also adds the following entry in DataLink_Viewer.ini under the [Options] section:
Encrypt_Mode_2016 = TRUE
You may elect to use the new method by adding that entry manually. However, I suggest you do that only for new installs. On a machine that already has stored password information, you would need to replace the old authentication information.

¨    Implemented a fix to avoid an error ("The database has been placed in a state by user <username> on machine <machinename>  that prevents it from being opened or locked") when starting multiple instances of Visual CUT at the same time.

¨    Implemented a fix to avoid a hanging error message window. This applies to cases where  Visual CUT detects lost connectivity to the database in midstream (after a successful connection and while retrieving records) or when the report encounters a Division by zero and other unhandled exceptions. The previous version would detect and log such cases as a failure, but the error message window might have lingered as an open instance.

¨    Fixed a problem with converting mapped drive paths to UNC paths in cases where there are multiple export files, multiple email attachments, and optional email attachments.

¨    Fixed a problem causing parameter values to be fed into DataLink Viewer proxy processing even when electing to use saved data.


 

Version 6.9001: Released November 21, 2015

Key Features

¨    Visual CUT 11 can now delegate exporting/bursting to DataLink Viewer 2011 in order to support Crystal 2008/2011/2013 features: a) mixed portrait & landscape sections, b) Dissociate Formatting Page Size and Printer Paper Size, c) Auto-Arrange option for chart layouts, d) 'New Page After N Visible Groups', e) Calculated CrossTab members, and f) embedded Flash objects. See 'Delegating Exporting/Bursting to DataLink Viewer 2011' and this demo image.

¨    Added XLS_Range_Insert_File command line argument to insert Excel (Data Only) exports into pre-formatted excel templates. This allows inserting larger data sets (compared to XLS_Range_Insert, which uses values in Crystal formulas). It also supports appending data and cloning template formulas, conditional formats, and sparklines. See 'Inserting File Exports into Excel Templates.' See demo image.

 

¨    Added After_Success_HTTP command line argument. This allows triggering calls to web services such as sending SMS to mobile phones. See 'Call a Web Service after Success (After_Success_HTTP)' and 'Sending SMS Messages'.

¨    XLS_Save_As can now convert pivot table to HTML. This allows embedding Pivot Tables (generated via XLS_Pivot_Table) inside auto-refreshing web dashboards and inside email message bodies. See 'Embedding Pivot Tables in Email Message Body' and this demo image.

¨    Parameter fields are now listed in the fields/formulas area for dragging into processing options. For example, if the first parameter in the main report is called {?Year} it would be listed as {?01?Year}. The 01 indicates the position of the parameter in the list of parameters. This avoids the need to create formulas for referencing parameter values in processing options. It also makes it easy to know what parameter is referenced by command line arguments such as "Parm1:…"   See demo image.

¨    Added PDF_Export_Options command line argument and a global option to use MS Word as the pdf export engine to overcome font problems and support PDF/A output. The global behavior is set via the Options dialog:
image 
An ellipsis button  image  to the right of the PDF export format choice launches a PDF Export Options window (see image) allowing you to see the global setting, and generate a command line argument to override it for a specific report. See 'Export to PDF via MS WORD.'

¨    Visual CUT now checks email addresses for valid structure before interactive start of processing. The validation process takes into account the dynamic values that would be populated into email addresses during actual processing and bursting (field/formula references, file references to text distribution lists, ODBC queries for email distribution lists).
Detected problems are presented to the user with an option to continue or abort processing. This is particularly useful when bursting emails to many recipients because it allows users to catch problems before the process runs. The Options dialog (Email 2 tab) provides a checkbox allowing users to turn off this option.

¨    Added Before_Report_Run_SQL command line argument to update a database before Visual CUT runs the report (but just after any Email Capture processes).

¨    Added options to set date parameters to the first Day of Week before/after a date constant. For example, the first Monday of the previous month. See 'Adjusting Data Constants for Day of Week.'

¨    Added Word_Print_WaterMark command line argument, allowing printing of exported Word files with dynamic watermarks for each printed copy (e.g. "Copy 1 of 4"). See sample image.

¨    If the report uses an ODBC DSN (including cases where that DSN was specified via a command line argument or via the DSN choice user interface), an {[ODBC_DSN:]} object is added to the fields/formulas area for dragging into processing options. This allows emails and other processing options to reflect the actual data source name used by the report. See image.

¨    The Search & Replace dialog for report paths is now expanded to allow targeting of five other categories of saved settings. See 'Changing Login, Report Paths & Other Settings without Previewing' and this image. This is useful when you need to globally change saved settings for emails, export files, attachments, arguments, or parameters. You may block some or all of these categories (see 'Disabling Find & Replace Categories').

¨    Temp files (~*.tmp, *}.rpt) older than 7 days are now deleted upon exiting Visual CUT.

¨    Added TXT_Split_Tags command line argument allowing fast splitting of a single text file into multiple files based on tags embedded within the text file.

Excel Features

¨    Added XLS_Refresh command line argument to refresh external data used by Excel queries and pivot tables.

¨    Added XLS_Split_Tabs command line argument to generate a separate PDF or Excel file from each excel tab.

¨    When using XLS_AutoFilter to freeze panes in a location deep into an excel worksheet, top rows and left columns no longer become hidden.

¨    You can now specify the excel file for XLS_AutoFilter processing (in the past, only the exported file could be targeted for auto-filter and/or freeze panes options).

¨    XLS_Save_As can now save to CSV format. This is useful for reports that contain subreport because such scenarios don't export well directly to CSV.
 

¨    XLS_Pivot_Table operations now handle cases where wrong number of arguments were provided as a failure rather than as a warning. This ensures the user is aware of the problem.

¨    Visual CUT can now handle multiple XLS_Pivot_Table arguments. This means that a single excel data export can automatically generate multiple pivot tables.

PDF Features

¨    Tag formulas for PDF_Bookmark_Tags now support an optional argument to control the vertical margin above the location of the tag used as the bookmark page location target. This allows you to override the default of 20 millimeters vertical margin.

¨    Added PDF_Flatten command line argument. This allows flattening all form fields and annotations in a list (wild cards are supported) of pdf files.

¨    PDF_Link_Tags can now handle any type of link such as 'https://' and 'Tel:' links.

Email Features

¨    When an email failure occurs, a 1-sentence diagnostic is now added to a) the progress window, b) email log, and c) email failure alert. For example, "Unable to establish a TCP or TLS connection to the SMTP server." This facilitates troubleshooting by avoiding the need to review the verbose email log.

¨    Email queuing is now faster and avoids creating/renaming/moving a temp .eml file.

¨    Preview mode in email message HTML editor now displays dynamically referenced images.

¨    Added a user manual section on "Embedding Report as Image in Email Message Body". See image.

¨    Fixed image file embedding inside an email message when the path contains spaces.

¨    Added group number to the end of .eml file names.

¨    The Email_Failure_Notices_From option can now be set through the Log/Alert tab of the Options dialog. This is useful when the target address is not allowed as a sending address.

¨    When VC_Skip_Email is used, the test for missing attachments is now also skipped.

¨    Added a Disable_Email_Statusbar_GUI option (for Master_DataLink_Viewer.ini) to hide the email queue panels in the status bar.

¨    Added a Disable_Email_Log_Activity_GUI option (for Master_DataLink_Viewer.ini) to disable the 'Log Email Activity' checkbox and hide the Notepad button to open the log file.
 

Other Features

¨    Auto-conversion from mapped to UNC path now also applies when the user select multiple reports loading into the report grid and when copying .rpt file/settings.

¨    When saving command lines to a batch file via the scheduling string dialog, Visual CUT now auto-detects cases where a conversion is needed to the local character set. This is needed because, for example, a European PC using code page 480 encodes ü differently than an American PC using code page 437.
Also, for cases where you need to force the use of a specific code page (consultant working for a foreign customer), added a  Batch_File_Save_CharSet option to DataLink_Viewer.ini.
Note: this makes a difference only when a command line contain special characters.

 

¨    When the Visual CUT database is redirected via a connection string, the Version Info window now reflects that info. For example: VC Database via Connection String [Server=Serv1\sql2].

¨    A new Encrypted_Password_Set_Entry command line argument allows administrators to automate the saving of Encrypted Passwords to targeted ini files. For detail, see 'Setting Encrypted Password Entries.'

 

Fixes

¨    Fixed handling of application load failure scenario that could cause a hanging process.

¨    Fixed FTP_Upload issue caused by trying to create target folders when they already exist.

¨    Fixed interactive use scenario when a parameter is removed from a previously saved report.

¨    Added skip logic for folder testing when Printer (Specified) export uses a printer name that starts with '\' character.

¨    Fixed a bug in After_Success_Batch processing with Burst option. Also, added a description to the user manual of how After_Success_Batch can be used to log processing to a text file. 

¨    Fixed a problem caused by exporting and then navigating to Preview tab and back again.

¨    Fixed [VC_NULL] handling for subreport parameters.

¨    Fixed duplicate processing of some command line arguments in cases where multiple export file names are specified (for example, "c:\temp\Sales.xlsx;c:\temp\Sales.pdf").

Version 6.8001: Released November 16, 2014

Web Dashboard and FTP/SFTP Features

¨    When exporting to HTML 40, the options button  image  launches a Web Dashboard Expert window allowing you to set various options such as a) adding an auto-refresh behavior, b) Setting hyperlinks to launch to new tabs, c) Specifying tab titles and icons, d) Removing GUIDs from referenced.png image files, and e) SFTP Uploading HTML and Other files to the web server. For detail, see Web Dashboard Expert
A web dashboard using that approach is available at:
https://www.milletsoftware.com/Labs/Labs.html  

¨    FTP_Upload connection failure messages now include more detail.
 

¨    FTP_Upload and SFTP_Upload can now handle file names containing commas.

¨    FTP_Upload and SFTP_Upload now create missing target folder levels if the target directory doesn’t exist on the server.

¨    Added FTP_Download command line argument.

¨    Relaxed timeout limits for SFTP_Upload in order to handle slow or very busy servers.

PDF Features

¨    Added a PDF_Insert_Pages_Tags command line argument allowing Crystal formulas acting as invisible tags to specify image files for insertion as pages following the location of the tag. This is useful in cases where related scans or other images need to be inserted in the middle of PDF exports. For detail, see: Importing Image Files as New Pages (Tag Approach).

¨    PDF_Form argument can now use Crystal formula values to fill not only AcroForm fields but also Adobe LiveCycle forms fields.
 

¨    PDF_Save_As can now save also to EMF+, HTML5, and G4 TIFF formats.

¨    The ini entries used to control the layout of the Table of Contents generated using PDF_TOC can now refer to report field/formulas. This allows, for example, a different image to be used for the header depending on data in the report.

¨    When embedding files inside PDF files using PDF_Link_Tags2, you can now ignore (skip) missing files by using a lower case "embed" argument in the tag formula.

¨    Added an optional Owner_Password optional argument for PDF_Merge.  This is useful in cases where one or more of the source files is password protected. All the encryption settings (owner and user passwords, and protection settings) of the last protected file in the list of source files would be applied to the resulting merged document.  This allows Visual CUT to add new information to existing but protected pdf files.

¨    Updated PDF_Linearize logic.

¨    Added PDF_Print_Mode command line argument to set printing quality/speed.

 

Excel Features

¨    Special Excel Tab processing (Tab!, TabInOldFile!, TabInOldFile_Replace!, and TabInNewFile!) can now be used for any of the export files when specifying multiple export files (separated by semi-colon).

¨    Fixed XLS_Pivot_Table compatibility issue with Excel 2013.

¨    XLS_Pivot_Table now accepts an optional Range Name argument.

¨    XLS_Pivot_Table now supports an additional Options argument. This optional argument may support multiple directives in the future but is currently limited to Report_Layout=Compact, Report_Layout=Outline, or Report_Layout=Tabular. Tabular uses field names instead of generic ‘Row Labels’ and ‘Column Labels.’

¨    XLS_Pivot_Table can now target an existing worksheet and cell for the PivotTable insertion.

¨    XLS_Run_Macro now avoids saving the source workbook after the process runs if the Target Workbook argument is left blank.

¨    XLS_Range_Insert can now insert Crystal formula values into hidden Excel tabs.

¨    Added XLS_Replace command line argument. The user manual explains how this can be used to export formula expressions and activate them in the exported workbook.

 

Email Features

¨    Added an option (Email 2 tab in Options dialog) to check email addresses and trigger a detailed failure message when malformed addresses are detected.

¨    Fixed a problem caused by thousands of eml files found in the Outgoing or Undeliverable folders and a scheduled process that completes very quickly. This might cause a "hanging" Visual CUT process.

¨    Email alerts about processing failures now include the User_ID value if specified via a command line argument. This helps when the rpt is used for multiple databases.

¨    Fixed blank and [VC_Blank] value handling for email-related command line arguments.

¨    Added a user manual section on "smtpQ Service Failure Action Properties."

¨    HTML Editor for email messages now supports UNC paths for inserted image files.

¨    Added a Save_Attachments_To_Unique_File_Names option to Email Capture directives (ini sections). When capturing incoming emails and downloading attachments to a specified folder, this avoids overwriting prior attachments with the same name. Instead, 4 characters are added to the new attachments to avoid name conflicts. For detail, see "Email Get Directive Sections."

 

Other Features

¨    The  image  button to the right of the scheduling string now starts a dialog with options to control zero records action (skip or not skip processing), and to override saved parameter values in the initial command line. If the report has Date or DateTime parameters, the dialog defaults to including them. You can then edit the static values in Notepad, and replace them with Date Constants such as Yesterday, Start_Month_Minus_1, etc. (see Date Constants section in the user manual). image

¨    You can now use "ParmN:[?]" command line arguments to indicate that VC should prompt the user for certain parameter values. This is useful when VC is called from a command line and the user needs to interactively override saved parameter values. For detail, see "Request User Input for Certain Parameters."

¨    The Process tab in the Options dialog now has a button called 'Encrypt & Save Password'. It allows you to centralize & protect passwords by avoiding specifying them directly inside command line argument. Instead, you can name, encrypt and store the passwords inside DataLink_Viewer.ini. For detail, see "Referring to Saved Encrypted Passwords."

¨    Added SQL_Extract_Files command line argument. Databases can store files (images, spreadsheets, pdf, audio, etc.) within a database as binary column types. Certain workflow scenario may require extracting these files to the file system for further processing (merging, emailing…). This allows Visual CUT to automate such processes.

¨    Added Use_Saved_Data_Recent command line argument. For example,
"Use_Saved_Data_Recent:60" tells Visual CUT to use saved data if it is not older than 60 minutes. Otherwise, fresh data is retrieved. See 'Using Saved Data.'

¨    Added the ability to change folder location for ACT! (*.pad) data source files. See "Changing Folder Location for Access/Excel/Pervasive/ACT! Files."

¨    Added {%UserName%} to the fields/formulas area for dragging into processing options.

¨    The Main_Files_Folder option (ini setting as well as the command line argument) now supports dynamic substitution for any combination of the following environment variables: %UserName%, %UserProfile%, and %Appdata%

¨    Added TXT_Replace_Base64 command line argument. This allows automating the process of inserting Base64-Encoded Files Inside Text exports. For example, you can export invoice data to an XML file containing a reference to an image or pdf file. VC then replaces the reference to the file with the content of that file encoded as Base64 (allowing conversion from Binary to Text representation). The XML file with the embedded image file can then be transmitted to a business partner using SFTP_Upload. For detail, see: Inserting Base64-Encoded Files Inside Text/XML.

¨    TXT_Merge can now handle cases where the files are merged into the first file (first file is the target file). Also, there is no longer a need to specify the path to the target file if the path is the same as the first source file.

¨    Added a warning when settings for current user are managed under a VirtualStore folder due to lack of permissions on the shared AppData or ProgramData MilletSoftware folder.

¨    The dialog offering automatic conversion from mapped drive to UNC path now applies also to the email attachments option and to cases where Visual CUT is launched by double-clicking an rpt file in File Explorer.

¨    Added a Enable_Auto_Conversion_to_UNC ini option to allow automatic conversion of rpt file, export file, and email attachment file paths from mapped to UNC convention. When this option is set to True (default is False), mapped drive paths are automatically converted to UNC paths after a message box is displayed to the user.

¨    Added a Display_Warning_Mapped_Drive ini option to disable the dialog offering a conversion to UNC path when loading a report from a mapped drive.
 

¨    Word_Replace_Tags is now compatible with Word 2013.

¨    Added Now_GMT_Plus_S and Now_GMT_Minus_S to the date constant functionality. This allows setting parameters to values relative to the current universal (GMT) datetime.

Fixes

¨    VC 11 now logs a failure and closes when a scheduled report loses connectivity to the database in midstream (after a successful connection and while retrieving records). Also, when the report encounters a Division by zero and other unhandled exceptions. This avoids hanging instances of VC when such an event occurs. To disable this option, set Detect_Lost_Connectivity=False in DataLink_Viewer.ini

¨    Fixed a Connect_To_SQLOLEDB command line argument scenario that might cause a process to hang.

¨    Fixed a problem causing the Export Burst checkbox to lose its status after using the right-click report grid menu option of ‘Copy .rpt and Settings’.

¨    Fixed a login issue for subreports when requesting a database server change.

¨    After_Burst_Batch, After_Export_Batch, and After_Success_Batch now generate temporary work files (when the called batch file contains references to fields/formulas) in the temp folder instead of in the Visual CUT main files folder. This avoids failures due to lack of permissions.

Version 6.7001: Released December 01, 2013

Email Features

¨    It is now easier to monitor the status of queued emails. If an Outgoing folder is specified, Visual CUT shows the number of email messages in the Outgoing and Undeliverable folders  in the first 2 panels of the status bar. 
The panel showing the number of messages in the Outgoing Folder, also indicates if the smtpQ service is Not Installed, Stopped, or Running.
The information is refreshed every 5 seconds:
image

 

¨    You can now open the Outgoing folder or the Undeliverable folder by simply double-clicking their status panel.

¨    If the Visual CUT Outgoing Folder doesn’t match the Outgoing folder specified for the smtpQ service, the status bar shows this:
image 

¨    Added a section describing a technique for "Slowing Down Outgoing Emails." This is useful when email queuing through the smtpQ service results in exceeding speed limits imposed by your email service provider.

 

¨    Added a user manual section about ‘Embedding Hyperlinks to Reports/Files inside HTML Email Messages’. A sample report demonstrating this technique is available upon request.

¨    Added a button to the Email HTML Editor to show dynamic field names in Notepad.

¨    When queuing emails, characters (as in OBrien) in the .eml file names are now removed. This protects against emailing failures.

¨    Updated an email processing component.

¨    Improved handling of the optional Email_SMTP_Domain ini setting

¨    Added optional Email_SMTP_Auth_Method ini and command line argument option. In most cases, this setting is not needed since Visual CUT detects and automatically uses the most secure authentication method supported by the SMTP: "NTLM", "CRAM-MD5", "LOGIN", or "NONE".

¨    Updated the procedure for substituting accented characters in eml file names to handle additional Icelandic characters (þ, Þ, æ, Æ).

PDF Features

¨    Added PDF_Split_By_Bookmarks argument, allowing Visual CUT to split a pdf based on a targeted level of bookmarks.

¨    When using the Print_Copies argument to control the number of copies printed via the PDF_Print argument, if the field or formula used to control the number of copies returns a zero, the printing is skipped.  This is useful in bursting scenarios where some recipients do not want a hard copy.

¨    Pdf processing tags are now removed even if they contain parentheses.
 

¨    Fixed an issue in PDF_Auto_File_Link when the text contains literal double-quotes.

Excel Features

¨    Visual CUT can now Replace or Append to an existing excel tab (using TabInOldFile! or TabInOldFile_Replace! directives) even when the tab is hidden.
Also, fixed an issue with repositioning the workbook to its original selected tab.

¨    Added XLS_Transfer_Tabs command line argument, allowing tabs to be transferred and dynamically renamed to a new or existing workbook. This is particularly useful when bursting report information into named ranges (XLS_Range_Insert) in a template workbook, and then gathering the resulting tabs into a single workbook with multiple tabs.

¨    Added XLS_Run_Macro command line argument for triggering an Excel macro.

 

¨    XLS_Range_Insert now creates folders on the fly if the target file path doesn’t exist.

¨    XLS_Save_As can now accept a tab name as a scope argument, so a specified tab name can be saved to a pdf file.

¨    XLS_Save_As can now save Excel files as HTML.

Web Dashboard & FTP/SFTP Features

¨    Expanded user manual section and added a demo of a secure auto-refreshing web dashboard. To access the web dashboard demo use demo as the user id & password.

¨    TheTXT_DeGUID_png command line argument now handles cases where HTML exports reference  multiple image files:
1. Unique image files are renamed with incrementing index to differentiate them.
2. Identical image files (e.g. repeating logos) are consolidated into a single image file.
This avoids accumulating image files in web dashboard folders.

¨    Fixed an FTP_Upload issue when using Active_1 as mode.

¨    Added an ini file option (in the [Options] section) to disable EPSV mode when doing Passive_1 ftp uploads or downloads:
FTP_Disable_EPSV_Mode=True
This aims at fixing timeout problems when the ftp server mishandles EPSV mode.

¨    SFTP_Upload and FTP_Upload can now skip files that are older than N minutes. This allows specifying files via wild card expressions but targeting only new files.

User Interface Enhancements

¨    The text area showing the number of group values is now highlighted in red while Visual CUT is busy loading and counting these group values.

¨    The Option dialog has a new Database tab for setting connectivity options.

¨    Ctrl-Shift-F1 now opens DataLink_Viewer.ini (configuration settings) in Notepad.

¨    When a user selects the option to convert a mapped path to UNC path for a report with saved settings, the process now checks to make sure the UNC path for that report doesn’t already exist with saved settings.

¨    During interactive use, the Progress window now stays on top. This reminds users to close that window before clicking the Start button again.

¨    During forced login scenarios, Integrated Authentication now automatically sets the Password in the login dialog after the User ID is manually set.

Command Line Arguments

¨    Added After_Success_Batch command line argument supporting workflow automation and email notification after a successful completion of a Visual CUT process. Field/formula references within the batch file are dynamically replaced with their content from the processed report before the batch file is triggered. 

¨    Added support for specifying custom calendars as start or end points relative to date constants. For example, this allows you to return the start or end of a the fiscal month relative to yesterday’s date. For detail, see "Custom Calendars".

¨    Added a Main_Files_Folder command line argument for specifying the location of Visual CUT.mdb and DataLink_Viewer.ini.  This is useful in scenarios where a centralized scheduler triggers processing on behalf of multiple users who maintain settings in their own folders.

¨    AddedWord Print command line argument. Using fields/formulas you can dynamically specify the file to be printed, the printer, and the number of copies.

¨    Added a Word_Protect command line argument.  This allows you to:
a) restrict viewing of a document to only users who know the Open Password.

b) restrict editing of a document to only users knows the Modify Password..

¨    Added TXT_Remove_Short_Lines command line argument, allowing you to remove blank or short lines in a text file. This is useful for cases where TEXT exports generate blank lines or lines with just delimiters.

¨    A new Set_Formulas1 command line argument allows setting of formula expressions (provided the formula name starts with a ^ character). For detail, see the user manual section on Using Command Line Argument to Set Formula Expressions.

Fixes

¨    Fixed process logging when failure messages contain single quotes.
 

¨    Fixed double-space handling in command line arguments.

¨    Fixed a rare ‘Row cannot be located for updating’ error (when a report with linked dynamic parameter reports that don’t match the connection properties of the main report) is loaded for the first time. 

¨    Fixed tooltip display for dynamic field/formula values containing ‘&’ symbol.

¨    Fixed handling of selective parameter refresh in an interactive use scenario.

¨    Fixed a scenario causing the export burst checkbox to lose its checked values during interactive use where the same report is refreshed or reloaded a 2nd time.

¨    When closing the application after an interactive session, the ReportList.txt file
(1st tab report grid) is now transferred to the recycle bin approximately once per 10 times. This provides a copy of the file in case it gets erased during abnormal termination of a user session. 

Other

¨    If a linked dynamic parameter report uses an ODBC DSN that doesn’t exist, or if the Set_Parameter_Rpt_to_Main_Rpt_DSN option in the ini file is set to True, the DSN of the parameter report is automatically set to the DSN used by the main report.

¨    You can now direct the Visual CUT database to another DBMS such as SQL Server. This is particularly useful if you want multiple users to concurrently maintain Visual CUT settings in the same database. This is currently available only in Visual CUT 11. For detail, see Directing the Visual CUT database to Another DBMS.



 

Version 6.6001:  Released December 31, 2012

 

¨    Visual CUT can now capture and process incoming emails.
This new features supports a variety of new use scenarios, such as:

·         Requesting a Report via a Simple Web Form

·         Updating a Database via a Simple Web Form

·         Collecting Customer Feedback & Updating a Database via Email Links

·         Importing data from email file attachments into a database table

·         Requesting & Capturing Management Decisions Via Email

For more detail, see the new user manual section on Capturing & Processing Incoming Emails.

¨    You can now queue Visual CUT invocations so that at any point in time, no more than N instances are actively processing reports.  For detail, see:
"Avoiding Too Many Active Visual CUT Instances (Queuing)"

¨    Fixed a problem with handling database connection failures during scheduled processing. This issue could cause Visual CUT instances to hang in memory.

¨    Reduced/improved concurrent connections to the Visual CUT.mdb. This should also fix rare  ‘Error 91: Object variable or With block variable not set’ problems.

¨    Fixed a problem caused by clicking on the Refresh button on the Preview tab. This could cause saved Burst option for the report to be disabled.

¨    After_Success_SQL:
a) Added  support for triggering multiple SQL statements
    (even for different ODBC DSNs)
b) fixed  processing when bursting and ODBC logging is disabled,
c) if the SQL statement is blank, it gets skipped.

 

¨    Added two options to the Report Grid right-click menu:

1.      Open Containing Folder

2.      Open In Crystal
 

¨    Added SFTP_Upload command line argument supporting both regular as well as Private Key authentication.

¨    Visual CUT can now handle cases where the command line arguments are separated by more than a single space.

¨    Fixed a problem when connecting to OLE DB data sources.

¨    Updated several components to latest available versions.

¨    Double-clicking the Arguments field at the top of the Export/Email tab, or clicking a new button to the right of that field, now opens an improved text editing window.  The window allows you to increase/decrease font size, and switch between a Rich and Plain text format.  The Rich text format highlights the names of acceptable command line arguments, as well as typical delimiters. The window remembers its size and settings (font size, text mode).

¨    Fixed a problem with command line arguments containing ‘"^^"

¨    The ‘Change Stored Path Information’ button (Process tab in Options dialog) now also takes care of updating file paths in the report grid (not just in Visual CUT.mdb).  This is useful in cases where you need to change report locations or where you need to move Visual CUT to another server where the relative path to the report files is different.

¨    Fixed an issue with Database_Path ini file entry or command line argument when used to change the location of Excel files as a data source.

¨    Fixed an issue with reading very large ini file entries (saved parameter values).

¨    Added warnings when an export file extension doesn’t match the export format.  You can elect to turn off such future warnings.

¨    Added an option to suppress a warning message when changing ODBC DSN.

¨    The status bar now shows records Read >> Selected >> and Group-Filtered. Improved text message and handling of cases where an interactively loaded report results in zero Selected or Group-Filtered records.

¨    Added Max Retries option to the smtpQ administration window. This allows you to control how many attempts are made if an email queued for delivery fails to be sent. The delay before each subsequent retry keeps increasing (from 5 seconds for the 1st retry up to a maximum of 20 minutes for the 10th retry). The default number of attempts is 7. 

¨    From email address for failure alerts can be set via a Email_Failure_Notices_From entry in the [Options] section of DataLink_Viewer.ini.

¨    Added a user manual section about generating Twitter or SMS messages.

¨    Fixed a bookmark sort issue in PDF_Bookmark_Tags.

¨    Updated pdf processing component provides faster processing and ability to handle malformed pdf files.

¨    When adding page numbers to pdf files, you can now instruct Visual CUT to skip the last N pages.  For detail, see ‘Adding Page Numbers to a PDF File’.

¨    When creating pdf drill-downs by embedding files using PDF_Link_Tags2, the Crystal tag formulas can now specify the header line as well as the body line for the icon tooltip. In the past, only the body line could be specified.
Also the Crystal tag formulas can now specify transparency level and type of icon (including No Icon).

image

¨    The PDF_Properties command line argument now supports specifying custom properties for the pdf document.

¨    Added an ini file option to specify a folder location for dynamic parameter reports.

¨    Added an ini file option allowing users to disable setting initial directory when browsing to open rpt files: OpenFileDialog_Set_Initial_Directory=FALSE
This solved a problem for one user in a Citrix/TS environment.

¨    Fixed a problem with TXT_Replace when the replacing text is a Chr(n) expression.

¨    Added more detail to the Auto-Refreshing Web Dashboards user manual section.

¨    When the login dialog shows alternative ODBC DSNs to select from, if the machine has more than 9 DSNs, the dialog expands and allows you to enter text to search the list of DSN. This makes it easier  to locate a particular DSN in a long list of DSNs.

¨    If you interactively switch between DSNs, Integrated Authentication functionality is now available by setting to True a new ini option of Enable_Integrated_Authentication_For_DSN_Changes.
This is a rare scenario so, for more detail, contact Millet Software.

¨    You may now specify ODBC_DSN_From_To as a global entry in the [Options] section of DataLink_Viewer.ini. In cases where a global transition from old DSN to new DSN are desired, this removes the need to specify ODBC_DSN_From_To as a command line argument. The entry can have multiple pairs separated by "||".

 

¨    Added a command line argument of Attempt_Logon_Without_Password
If most of your reports use a data source requiring authentication, you can set the ini entry by that same name to False. For the few reports that use a data source without authentication, you can now override the ini setting by passing a command line argument such as … "Attempt_Logon_Without_Password:True".

¨    In cases where the report (or subreports) connect to more than 1 data source, Visual CUT 11 now supports a new ini [Options] entry of:
Attempt_Logon_Without_Password_On_New_Server=True
By default, that option is set to True, meaning that after successful connection to one data source, Visual CUT would attempt to connect to a 2nd data source within the same report using the user id & password established for the 1st data source. One customer encountered a problem when the 2nd data source is an ODBC connection to Progress. For such scenarios, users can now set this option to False.
 

¨    Depending on screen size, the selective parameter refresh grids now show more rows (reducing the need to scroll when a report has many parameters).

¨    Added Email_Message_Save command line argument to save the email message body to an HTML or Text file. This allows you to take advantage of the email message HTML editor to generate web pages with dynamic content from a Crystal report without using the HTML export.

 

¨    Added a TXT_DeGUID_png command line argument to remove GUIDs (unique identifiers) from png file references and file names in HTML exports. This can make the process of generating web dashboards faster, cleaner, and simpler. For detail, see "Removing GUIDs from png Files Referenced in HTML Exports."

¨    Txt_Replace_Tokens command line argument now has a ‘DeleteLinkedFile’ option designed for Web Dashboard generation cases where properly named linked image files already exist (and don’t need to be changed). When using this option, after cleaning the HTML references to linked image files, the newly generated image files are simply deleted (instead of renamed). For detail, see ‘Replacing Content in Text/HTML Files – Token Approach.’

¨    If the Email_To option contains the text "VC_Skip_Email", the actual emailing of the message is skipped. This allows you to use a formula that returns an email address or "VC_Skip_Email" to control whether an email will be sent out. It also allows you to use the new Email_Massage_Save command line argument without emailing anything.

¨    When queuing emails as .eml files to an outgoing folder, if the Email_From option contains the text "[VC_Blank_Address]" the email from option is set as blank. This supports rare use scenarios where the user wishes to open the .eml files in Outlook and populate the From address (and the certificate) based on the user’s Outlook settings.
 

¨    When queuing emails, accented characters in the .eml file names are now replaced with unaccented characters. This protects against emailing failures.

¨    XLS_AutoFit now provides arguments for specifying a maximum column width and whether or not the content of maxed-out columns should wrap.  For detail, see "Column Auto Fit in Excel Exports"

¨    XLS_AutoFilter now provides two new arguments. The first argument specifies the cell location where AutoFilter should be applied. This is useful when the tabular range doesn’t start at the top of the spreadsheet.  The second argument specifies a cell location where Freeze Panes should be applied. For detail, see "Auto Filter & Freeze Panes in Excel Exports"

¨    XLS_Range_Insert now takes care of setting the resulting workbook to open to the original sheet and selection that were last set in the source workbook.

¨    Macro-Enabled Excel workbooks (.xlsm) can now be targets for adding or replacing tabs (TabInOldFile or TabInOldFile_Replace functionality). This allows your workbook to apply Macro logic to the refreshed data.

¨    Fixed a problem with specifying RGB color for excel tabs.

¨    The Print_Copies command line argument can now handle field/formula references. For example, "Print_Copies:{@Label_Quantity}"
 

¨    XLS_Pivot_Table can now handle cases where rows or columns have extremely large number of unique values (provided your machine has Excel 2010 installed).

¨    ODBC export with REPLACE option now deletes records (rather than DROPs the table) before the export. If the table has an index, this ensures the index is preserved.



 

Version 6.5001:  Released January 26, 2012

 

¨    Added After_Success_SQL command line argument, allowing you to update a database after each successful bursting step or full report. For example, after bursting invoices to customers, you can update the records for these invoices to reflect the date of invoicing or the fact that an invoice was emailed. For more detail, see "Update a Database After Success (After_Success_SQL)."

¨    The old email engine has been deactivated and the 2009 email engine is now always used.  If your installation used the old engine, you will receive a detailed message about the changeover when you first start the new Visual CUT version.

 

¨    Each time Visual CUT starts it now alerts you if there are new email messages in the Undeliverable folder of the smtpQ service. If you specified an email address in the Log/Alert options dialog, an email goes out to the specified address. Also, if Visual CUT started interactively (not via a command line), a message box is displayed. This provides early detection of situations where the smtpQ service was unable to send email messages.

¨    Visual CUT now takes care of replacing illegal characters and removing non-printing in export file names, email file attachments, and .eml files. For more detail, see: "Replacing Illegal Characters in Dynamic File Names."

¨    If you specify .xlsx file extension for Excel 97 exports, you now get an Excel 2007 (.xlsx) file format, supporting more than a million rows in a single tab and consuming much less disk space For more detail, see "Exporting to Excel 2007 (.xlsx) Files."  Note that this functionality is particularly useful when exporting a large report to Excel as a basis for automatically generating a Pivot Table (XLS_Pivot_Table argument).

¨    XLS_to_XLSX command line argument was added to support file conversion needs beyond direct exports.

¨    XLS_Save_As command line argument was added to support converting excel files to pdf files.

¨    XLS_Pivot_Table has a new optional argument for setting the orientation of multiple data elements to columns instead of rows.

¨    XLS_Pivot_Table now handles cases where specified metric caption is identical to the column name.

¨    XLS_Pivot_Table error messages now provide more specific information to help identify the text element causing the error.

¨    Excel exports with Tab!, TabInOldFile!, TabInOldFile_Replace!, and TabInNewFile!  can now specify .xlsx workbook destinations.

 

¨    Excel workbooks generated with TabInOldFile! or TabInOldFile_Replace! processes now open with the first tab in the workbook as the default tab.

¨    Visual CUT no longer logs processing for bursting steps that are skipped due to Skip_Recent. This speeds up processing and keeps the log table smaller.

 

¨    If the export file name is specified as VC_Skip_Export  (no file extension and no file path) Visual CUT now skips the actual exporting step, saving time in cases where the export is used as an excuse for other special Visual CUT processing.
 

¨    Failure log entries now start with the path and name of the failing report.  Also, when a bursting step fails, the failure log entry and email alert now include the Group Level 1 Value information.

¨    You can now specify (in the DataLink_Viewer.ini) a list of DateTime parameter names that should be set by date constants to the end of the day (11:59:59 PM). For detail, see the Date Constants section in the user manual.

¨    ODBC_DSN_From_To now support multiple pairs separated by "||".
This addresses use scenarios where a report uses multiple ODBC DSNs
(e.g. when the main report DSN is not the same as subreports’ DSNs).

¨    Added Database_Path command line argument (and similar ini entry) to change path to native Access, Excel, and Pervasive (ddf) data sources.  For detail, see "Changing Folder Location for Access/Excel/Pervasive (ddf) Files"

¨    Added a new Txt_Replace_Tokens command line argument to process Text or HTML file exports. A typical use scenario is HTML exports where image files (logos, charts) are generated with random names. This allows you to:
a) replace file names in img src HTML tags with specified file names.
b) optionally, rename linked image files
For example, when using Visual CUT to generate web dashboards (see ‘Auto-Refreshing Web Dashboards’ section), this new functionality removes the need for uploading multiple image files with random file names. It can also improve browsing performance through file caching.
For detail, see ‘Replacing Content in Text/HTML Files – Token Approach.’

¨    Online Version Update functionality was removed due to the component Update.exe being (mistakenly) flagged by virus protection software.


 

¨    You can now automate the process of updating entries in DataLink_Viewer.ini by placing an update file in the application folder. For detail, see "Updating DataLink_Viewer.ini  via a Delta File."

¨    Ctrl-A now select all content in text fields (in export/email tab).

¨    Added automatic removal of leading spaces from options such as export file name, email addresses, etc.  Such leading spaces could cause processing failures.

¨    Fixed an issue caused by record selection formula containing only a comment.

¨    In the report grid, disabled delete action for a group to prevent accidental removal of all report rows belonging to that group.

¨    When changing the grouping of the report grid, if the grid contains more than 100 rows, instead of expanding all group nodes, all group nodes are collapsed.

¨    Fixed a problem when a legacy user who hasn’t added yet the "Arguments" column to the Report_Opt table in Visual CUT.mdb tries to use the menu option to copy report settings from one report to another report.

¨    Added Write_INI_Location command line argument (to write the path to DataLink_Viewer.ini) to a specified text file.

¨    Fixed a connectivity issue (may manifest as "Type mismatch" error) to the Visual CUT.mdb on machines with operating systems earlier than Windows 7 SP 1. 

¨    When exiting the application or moving away from the 3rd (email/export) tab after making changes to report processing options, a message box allows you to elect to save or discard those changes.

¨    Fixed a problem with command line processing when the report has no saved settings.

¨    Fixed a problem in some situations when opening the Options dialog.

¨    Fixed a problem with Before_Export_Batch.

¨    Fixed a problem with specifying a list of printer destinations in a text file.
 

¨    Fixed a recently introduced bug causing failure when bursting very large reports.

¨    The HTML editor, Visual CUT now automatically removes false email links generated while editing a line containing a formula references (due to the ‘@’ symbol). When a link is removed, the cursor moves to the end of the message.

¨    The Preview window in the email HTML editor now shows the dynamic values of email from, to, cc, bcc, attachments, and subject.

¨    If all email destination options (to, cc, bcc) are blank, a failure is triggered to avoid placing such email messages in the outgoing queue.

¨    Fixed a rare email queuing problem (email addresses that start with ‘con.’).

¨    If an export fails due to a long file path and name (> 260 characters), the failure message now indicates this may be the reason for the failure.

¨    Added a Word_Replace_Format command line argument. This functionality was developed to allow an export from Crystal to MS Word to result in Double Underline (typical for totals in accounting reports).

¨    Updated the Known Issues and Limitations user manual section discussing how to improve image resolution when exporting to PDF/RTF/Word.  The instructions and sample .reg files now cover Visual CUT 11 as well.

¨    Fixed a bug in FTP_Upload causing successful wild-card uploads to report a failure.

¨    Added more detailed progress dialog information to several pdf processes.

¨    Updated pdf processing component.

¨    Links to pdf files generated using PDF_Auto_File_Link or PDF_Auto_File_Link_Tokens now open linked pdf files using their default zoom and page layout settings and in a new Window.

¨    Fixed a  problem for some pdf files when using PDF_Form command line argument.

¨    When using PDF_Form_Tags to generate form fields, you can generate child fields by specifying the field title as parent_field_title.child_field_title. This is useful for submitting form data as XML hierarchy.

¨    PDF_From_TIFF now supports merging multiple TIFF files into a PDF file.

¨    Added PDF_Add_Media command line argument allowing you to embed a sound file for auto-play when opening the pdf file. For detail, see "Adding Multimedia to PDF Document."
 

¨    Added PDF_Build_Index command line argument.  For detail, see "Building an Index PDF Documents."

¨    PDF_Properties now supports setting properties for multiple files specified as a comma delimited list.  The files can also be specified using wild cards.

¨    Fixed a problem with PDF_Bookmark_Tags (introduced by the new pdf component).

 

¨    Fixed a problem with PDF_Protect when processed pdf file is not the exported file and not all optional arguments are provided.

¨    Fixed a problem in PDF_Link_Tags.

¨    PDF_Protect now checks to make sure the owner password is not blank.

¨    PDF_Protect now allows you specify encryption strength of 256-bit AES.


¨     

Version 6.4001:  Released June 01, 2011

 

¨    Visual CUT can now generate Excel Pivot Tables. For detail, see
"Generating Excel Pivot Tables" " or watch a video demo.

¨    You can now save and apply command line arguments during interactive use.
A new Arguments field in the 3rd (export/email) tab (and in the Visual CUT.mdb) allows you to specify and save arguments for use during interactive use (click Start Process button) as well as during unattended command line processing. image
A double-click on this field opens the text in a multi-line editing mode.
Command line processing honors these saved arguments but can override them.
Users of prior versions who wish to take advantage of this new feature should add an Arguments column (Memo data type) to the Report_Opt table in Visual CUT.mdb
For more detail, see "Specifying Processing Arguments through the GUI"

¨    When a user interactively loads a report that has saved settings, Visual CUT now provides a dialog that allows the user to reuse all or some of the saved parameter values.  This matches typical use scenarios and removes the need to enter all parameter values each time a user opens the report interactively.

¨    For situations where reports with many parameters are used in one of several parameter patterns, you can now save & reuse Named Parameter Sets. For detail, see "Save and Reuse Named Parameter Sets" or watch a video demo.

¨    Fixed an issue that can cause instances of Visual CUT to remain in memory.

¨    Added After_Export_Batch and Before_Export_Batch command line arguments. Like After_Burst_Batch, this allows you to not only execute batch files but also temporarily replace fields/formula references inside the batch file with their dynamic values from the report. For example, you can archive exported files into a .RAR format before emailing or FTPing. For more detail, see: Triggering a Batch File with Dynamic Content Before/After Export .

¨    Added a user manual section on how to create "Auto-Refreshing Web Dashboards."

¨    Fixed print queue job renaming during bursting.

¨    Added a Release_Shared_File_Before_Export option in DataLink_Viewer.ini. You can turn this on through the Options dialog if you wish to always attempt to unlock the exported file from shared use by network users who may have a prior version of the file opened in a shared network destination folder. If you wish to override the default behavior controlled by that option, you can use a new Release_Shared_File command line argument. For example, if the global option is set to False and you wish to enable it for a specific report, add
"Release_Shared_File:True" to the command line.

¨    Word_Replace_Tags now supports dynamic references to fields and formulas.
It also opens the template document in Read-Only mode.  Also, an issue with Append functionality in Word_Replace_Tags has been fixed.

¨    Added Word_Save_As command line argument. This allows you to convert Word documents to PDF documents. Among other features, this allows you to generate PDF/A documents and to handle special fonts that can’t be handled via direct PDF exports (by first exporting to Word, and then converting to PDF).

¨    Both Word_Replace_Tags as well as Word_Save_As now get processed before any PDF processing command line arguments.  This allows you to convert a Word document to PDF and perform extra processing on the resulting pdf file within a single command line.

¨    Added PDF_Link_Tags2 command line argument.  This allows you to use Crystal formulas as hidden tags that control not only the embedding of files inside a PDF file but also the creation of visible links to these embedded files.  This allows you to deliver pdf files that act as containers for drill-down or other related content. For detail, see "Adding Links and Embedded Files Using Crystal Formulas as Tags" or watch a video demo
For a sample PDF with embedded files for drill-down functionality, see:
http://www.milletsoftware.com/Download/Visual_CUT_PDF_Embedded_Drill_Down_Sample.pdf  

¨    Added PDF_Embed command line argument.  This allows you to embed multiple files as attachments inside a main pdf file. For detail, see "Embedding Files as Attachments inside a PDF File." 

¨    Updated pdf processing component, providing faster processing and better handling of some pdf files that were created by other sources in a malformed manner.

¨    The Form Field Text and Description options in PDF_Form_Tags now support SQL Query directives.  This allows you to stay within the 1 line limitation for the tag but still specify very long text for situations such as long comments. For detail, see "Populating Form Field Text or Description via ODBC Query". Also, specifying "Same_As_Text" for the Field Description option sets the tooltip as the Field text.

¨    Several fixes and enhancements to PDF_Auto_File_Link. One key enhancement is the ability to target text in the pdf file and generate file links for it based on wild card tokens.  For a detailed description, see "Detecting Additional File References Using Wild Card Tokens." 

¨    PDF_LinkTag now handles cases where the tag contains spaces after the closing ‘#’.

¨    Fixed an issue related to detection of text position inside pdf files.

¨    Added file compression to some pdf processes (reduce the need for PDF_Compress).

¨    Fixed color handling issue with pdf Bookmark Tags.

¨    Added a PDF_Split_Protect_Tags command line argument. This is like PDF_Split_Tags but also adds the ability to protect the split pdf files. 
For detail, see "Splitting and Protecting PDF Files".  

¨    Several speed enhancements. Also, PDF_Split_Tags, PDF_Split_Protect_Tags, and setting pdf document properties now consume less memory.

¨    PDF_Print now support two optional argument for a) controlling fitting the printout to the page size and b) automatically rotating and centering the printout.

¨    PDF_TOC now supports a Page_Orientation directive (Poertrait or Landscape).  For more detail, see Advanced Table of Content Options.

¨    PDF_Merge can now generate multi-level bookmarks based on the file names of the merged files. For more detail, see the user manual section on "Using the Merged File Names to Generate Multi-Level Bookmarks."

¨    Fixed a PDF_Merge issue with the old approach (no method argument).

¨    PDF_From_TIFF now automatically matches the TIFF page orientation.

¨    PDF_Protect can now create a new protected file and leave the original file as-is.

¨    Setting the PDF_Bookmark_Tags_Default option to True (in the ini file) now applies only to PDF files that are smaller than 100MB.  This avoids wasted time and rare "out of memory" issues.

¨    Double-click on the export file name opens the folder location in File Explorer. This makes it easy to navigate to the export file location after processing is done.


 

¨    In the Version Information dialog, a double-click on the bottom text area showing paths to main files (DataLink_Viewer.ini, Visual CUT.mdb, ReportList.txt), opens that folder in File Explorer. This is particularly useful when the folder is hidden.  The dialog also shows the ‘Build Date’ of the application.

¨    Fixed an issue with the report list grid not remembering expanded/collapsed state of some report groups.

¨    Fixed a problem with command line exporting to rpz file format.

¨    Fixed an issue with using date constants in multi-value range parameters.

¨    Fixed an issue causing an attempt to set non-string parameters to an empty string when a parameter has no saved value (in Visual CUT.mdb).

¨    Fixed an issue with specifying a simple Parm8 argument when the saved value for Parm8 (in Visual CUT.mdb) is a composite of values for multiple parameters.

¨    Fixed an issue with the ‘copy .rpt and settings’ process.

¨    Job status files now defaults to the location of Main_Files_Folder.  Also, added logic to handle multiple Visual CUT instances updating the same job status file.

¨    During command line processing, connections to the Visual CUT.mdb database are closed more quickly, reducing the chance for conflict between batch files.

¨    Skip_Recent scenarios no longer log the event to Failure.Log.  If you wish to log such events, set Log_Skip_Recent_In_Failure_Log to True under the [Options] section of DataLink_Viewer.ini .

¨    Fixed a bursting issue when selection formula contains strings such as: http://...

¨    Added hours {[hh]}, minutes {[nn]}, and seconds {[ss]} to the list of fields/formulas for drag and drop.

 

¨    When clicking the User Manual button, the user now gets a message about the need to install a pdf file reader if the machine doesn’t have an application associated with the .pdf file extension.

¨    The browse button for selecting a text file to act as an Email To distribution list now remembers the last used folder location.


 

¨    If you add the following line to the [Options] section in DataLink_Viewer.ini:
Email_Warning_On_Folder_Creation=True
Visual CUT would email the address set in Log/Alert tab a notification each time it creates a new folder (for example, in cases where the export folder doesn’t yet exist).

¨    Several GUI enhancements to the ‘email 2’ options tab:

a)      If a user without administrator rights click on the Administer smtpQ button, a message box explains that administering the service may require that the user be logged in with administrator rights.

b)      The status of the smtpQ service (Installed/Not installed, Running/Stopped) is now visible (for users with Administrator rights) without needing to go into the Administer smtpQ Service dialog. Double-clicking these status indicators change the status.  For example, if the smtpQ service is stopped, a double-click would start it. 

c)      Attempts to use a network drive for the Outgoing Folder are blocked with a message box explaining the smtpQ folders must be on the local hard drive.

d)     If the Outgoing Folder option is blank, a double-click sets it to the default of: "C:\Visual CUT\smtpQ\Outgoing"

¨    Added support for relative XML file paths in tables used within RPZ reports.

¨    On first launch of Visual CUT after a 1st-time install, if the main settings folder gets relocated to a common application data subfolder, Visual CUT provides a detailed message about the need to set permissions for that folder. Otherwise, under Vista and Windows 7, different versions of settings might be maintained for each user in individualized \VirtualStore\ folders. To facilitate changing subfolder permissions, the message provides an option to automatically open it in File Explorer. 

¨    Added options for disabling buttons and editing options within Visual CUT.  For detail, see "Restricting User Actions."

¨    The batch file creation dialog now allows selection and creation of command files (*.cmd) in addition to the batch files (*.bat).

¨    Suppressed the large tooltip for email message bodies if they are HTML. Such messages are better previewed via the email HTML editor.

¨    Added a DataLink_Viewer.ini option to automatically close a dialog (Outlook not being default email client) during exporting. To enable, set this option to True:
Auto_Close_Dialogs_During_Export=True
 

¨    The email HTML editor can now handle cases where web links and file links within the email message contain embedded references to Crystal fields and formulas.

¨    Progress Window now shows more detail and clear separation between bursting steps.

¨    Fields and Formulas placed in Report Headers and Footers are now recognized not only in the first section but also in sections b,c,d, and e. This allows you to place a subreport in a higher section (for example in RFa) and use a shared variable formula in a lower section (for example in RFb) to get a value from the subreport and pass it to Visual CUT.
 

¨    The email HTML editor now allows you to move to previous/next groups while previewing the message. This allows you to see how the message changes when bursting to different groups.

 


 

Version 6.3001:  Released July 02, 2010

 

¨    Visual CUT can now save any number of parameters, including subreport parameters. In prior versions, only the first 8 parameters from the main report were saved. For command line processing, parameters 9 and above had to be specified via command line arguments.  Also, in prior versions, independent (unlinked) subreport parameters had to be changed into linked parameters. Note: no change to your Visual CUT.mdb tables structure is needed (all the extra information is stored inside the existing Parm8 column).

¨    Visual CUT can now FTP files to a web server. This makes it easier to provide access to reports via web or email links. For detail, see "Exporting/Uploading to an FTP Server (new approach)" 

¨    Added a powerful HTML editor for composing email messages.  For detail, see the user manual section on "Integrated HTML Editor".

¨    Added a video demonstration of embedding dynamic HTML tables with report information inside an email message body, and using the HTML email editor.

¨    Added functionality and instructions for embedding images in HTML email messages when using the email 2009 engine. Inline images are now embedded using an approach that is better supported by most email clients. When using the new HTML editor, all you need to do is insert the image. For detail, see "Embedding Images inside the HTML email body (2009 email engine)."

¨    You can now control the color of tabs when exporting to excel. For detail, see: "Controlling Excel Tab Colors."

¨    Enhanced multi-line tooltips for displaying dynamic content of export/email options.

¨    In the Select Reports Tab, you can now use Ctrl-F to search for a row in the report list containing specified text.  F3 searches for the next matching row, and Shift-F3 searches for a previous matching row.

¨    Fixed scheduling string handling with report names that contain single quotes.

¨    Fixed alert handling of cases where Printer name is not valid.

¨    Added a detailed message when a user tries to save report processing options to a write-protected visual CUT.mdb file or folder.

¨    When using wildcards for email file attachments, you can now elect to recursively include matching files in lower-level folders  by setting the following entry in DataLink_Viewer.ini:
[Options]
File_Attach_WildCard_SubFolders=TRUE
This is typically useful in cases where email attachments need to adjust to the recipient’s level in an organizational hierarchy.

¨    You can now instruct Visual CUT to avoid registering iSED.exe on each load of the application by setting the following entry in the [Options] section of DataLink_Viewer.ini to False:
[Options]
Register_iSED_On_Load=False

¨    During command line processing, connections to the Visual CUT.mdb database are now set to be Read Only. This should reduce the chance for a rare locking scenario when multiple reports are processed at the same time.

¨    Visual CUT now generates a failure message when a command line argument is not recognized. This allows detection of misspelled command line arguments.

¨    Visual CUT XI now uses a newer version (Service Pack 6) of the Crystal XI R2 runtime components. Users of prior XI versions can’t use the online update option and must go through a Remove & Install process in order to update their version.
Note: this update brings back the missing Cancel button in parameter dialogs.

¨    Updated runtime components related to emailing, file compression and encryption.

¨    Double-clicking the list of Fields & Formula names area in the Export/Email tab, now opens that list in notepad for easy copy & paste into command line arguments and template files.

¨    You can now use the Graphical User Interface to set settings for and trigger Word_Replace_Tags processes. Existing users should add a new row to the Export_Opt table in the Visual CUT.mdb Access database:

Export Constant

Export Name

Word_Replace_Tags

Word_Replace_Tags


Also, open the Report_Export_Options table and add a field called
Extra_Options with a memo Data type.
Note: this new functionality is not available in the 8.5 version of Visual CUT.

¨    Optimized handling of strings in several procedures for greater speed.

¨    Fixed an issue with the Burst Export checkbox showing an incorrect value when switching between reports.

¨    On first-time start of Visual CUT or if the application folder is write-protected (typical with Vista or Windows 7), Visual CUT creates an application settings folder, such as:  \MilletSoftware\VC_11\
in the common application settings directory (e.g., c:\ProgramData) and copies/redirects the locations of Visual CUT.mdb, DataLink_Viewer.ini, ReportList.txt, and ReportList.grd to that folder.  The user is notified when the initial redirect occurs. This removes the need for users to manually redirect the location of these files or to manually add Write permissions to the program folder.

¨    The version information window now provides the current file paths to the Visual CUT.mdb, DataLink_Viewer.ini and ReportList.txt files.

¨    Added YearMonth_AT_PLUS_MONTHS_N and YearMonth_AT_MINUS_MONTHS_N number constant to support cases where users control date ranges with numeric parameters structured as YYYYMM.

¨    Added a Use_Saved_Date command line argument. This is useful in cases where you need to override the global setting in the ini file. For example, if the global option of Use_Saved_Data_in_Scheduled_Reports is set to False, you can add
"Use_Saved_Data:True" to a command line for a specific report.

¨    Added handling of rpz files with embedded expiration date and/or license key requirement (new features provided by DataLink Viewer). 

¨    The Options Dialog (Process tab) now provides a button for initiating batch updates to report paths in 3 key tables within Visual CUT.mdb (Rport_Opt, Login_Opt, and Report_Export_Options).  This helps with situations where the location of the rpt files must be changed.


 

New PDF Features

¨    A new component for pdf processing provides faster processing.

¨    New PDF_Form_Tags processing options:

1.      add Checkbox fieds

2.      add DropDown fields

3.      add Submit button (automatically send form data as XML via email or url)

4.      designate form fields as hidden

5.      designate form fields as Read Only

6.      designate form fields as mandatory

7.      designate form fields as mandatory depending on another field value

8.      Visual CUT automatically adds JavaScript code to the pdf to turn background color of missing mandatory field values red.  Also, when mandatory field values are missing, attempts to submit the form data are blocked and the user gets a message box listing the missing form field values.

Sample: www.milletsoftware.com/Download/Visual_CUT_PDF_Export_with_Form_Fields.pdf
See "Adding Form Fields to PDF Files" for more detail.

¨    Added a PDF_Sign command line argument.  For detail, see "Adding Digital Signature to a PDF File."

 

¨    PDF protection via the PDF_Protect command line argument now usesadvanced 128-bit AES encryption.  Also, 3 more optional protection directives were added (allow form field filling, allow copy for accessibility, and allow document assembly). Acrobat Reader 7.0 or later is needed to open the resulting pdf file.

 

¨    Visual CUT can now remove pdf processing tags from the pdf file after processing those tags.  The main benefit is that text searches and indexing no longer include those tags. It also means you no longer need to set the background color of these tags to make them invisible. This functionality is controlled by an entry called PDF_Tags_Delete_Default under the [Options] section of DataLink_Viewer.ini.
By default, this option is set to True.
Note: to ensure all tags are removed, use the Replace() function in Crystal to change double quotes into single quotes. 
For example, the expression for the title in PDF_Bookmark_Tags could be:
Replace({Customer.Customer Name},"""","'")   

¨    Added a PDF_Bookmark_Tags_Default option to the [Options] section in DataLink_Viewer.ini. If you set it to True, Visual CUT would automatically attempt to generate bookmarks based on tag formulas inside an exported pdf. This avoids the need to trigger the report from a command line with a PDF_Bookmark_Tags argument. Note: using a PDF_Bookmark_Tags command line argument overrides the ini file setting.

¨    Fixed a rare case were order of bookmarks generated by PDF_Bookmarks_Tags  could be wrong.

 

¨    Fixed a ‘Subscript out of range’ issue in PDF_Link_Tags.

 

¨    Fixed ‘Type mismatch’ errors in pdf tag processing on machines where the regional setting for a decimal separator is not a dot.  For example, in French Canada where it is a comma.

¨    Fixed a problem with pdf Table of Contents page targets.

¨    PDF Table of Contents are now generated after the new PDF_Bookmark_Tags processing.  This allows both bookmarks as well as Table of Contents to be generated in a single command line call.

¨    Added two more alternative processing modes (M2 and M3) to PDF_Merge. These options use a newer pdf handling component.

¨    The PDF_Properties command line argument now allows setting of initial viewing properties: visible panel (outline/bookmarks, thumbnails, full screen, optional content group, attachments), initial page number, and zoom.

 

¨    Added a PDF_Compress command line argument to reduce the size of PDF files (particularly after PDF_Merge operations).  For detail, see "Compress PDF Files".

¨    Added a PDF_Auto_File_Link command line argument, allowing Visual CUT to automatically detect file references inside pdf text and automatically add colored hotspots over these file references that link to the specified files

 

¨    Added a PDF_Split_Tags command line argument providing amazingly fast bursting of very large reports.

 

 

 


 

Version 6.2001:  Released November 28, 2009

 

¨    Added PDF_Bookmark_Tags command line argument allowing you to generate bookmarks in pdf files based on invisible Crystal formulas acting as tags. For detail see the section on "Adding Bookmarks Using Crystal Formulas as Tags [New Approach]." Compared to the old approach, this new technique has several advantages:

1.      The bookmarks links to the exact vertical location (on the linked page) where the rendered formula is located.  In the old approach, bookmarks only pointed at the top of the page.

2.      You can easily generate bookmarks from within subreport or from any report section (not just Group Headers).

3.      For each bookmark node, you can dynamically control (using formula logic):

a.         the text color 

b.         the expanded/collapsed state

c.         the style (Regular/Bold/Italics)

4.      No need to worry about Keep Together and WhilePrintingRecords properties that can cause headaches with the old approach.

¨    Added a PDF_Link_Tags command line argument, allowing invisible Crystal formulas (acting as tags) to direct Visual CUT to add file/page links and images to pdf exports.

¨    Added advanced options for generating Table of Contents in exported pdf files. These option allow you to insert web-linked image headers and control font type, color, size, spacing, indentation, and bullets for each level in the table of contents. A sample pdf file is available here. For detail, see "Advanced Table of Content Options". 

¨    Visual CUT nowmaintains bookmark colors during merging of pdf files.

¨    Added PDF_Insert_BackPage command line argument, to support scenarios were static content has to be added to the back of each page before printing the report.

¨    Added PDF_Add_Index command line argument to allow specifying an index file associated with the pdf file.

¨    The PDF_ Page_N command line argument can now specify any True Type font and color. For detail, see "Adding Page Numbers to a PDF File."

¨    The "PDF_Merge:List_File: …" argument now handles cases where the text file specifying the files to be merged contains dynamic references to fields/formulas.

¨    Added a 4th optional "method" argument to PDF_Merge. An alternative merge method solves a rare merging issue when using newer pdf files with form fields. For detail, see "Merging PDF Files".

¨    PDF_Merge operations can now handle cases where file names contain a comma.

¨    Fixed a problem related to generating pdf bookmarks. 

¨    Added XLS_Range_Insert command line argument to replace named ranges inside MS Excel spreadsheets with values of Crystal formulas (providing values for a single cell, single row, or even a tabular range) with matching names. The file can then be saved to a new dynamically named file and emailed as part of a bursting Visual CUT process. The advantage of this technique is that you can keep and control all elements in the template spreadsheet. For example, the template spreadsheet may have formulas, conditional formatting, hidden columns and macros.  For detail, see "Inserting Crystal Values into Excel Templates."

¨    Added XLS_Protect_Worksheets command line argument to allow protection of some spreadsheet content from user viewing/editing. For detail, see: "Protecting Excel Worksheets against User Viewing/Editing."

¨    Added support for exporting to a protected (.rpz) report file. This allows you to schedule exporting to protected Crystal Report files with saved data.  The intended user will be using DataLink Viewer to open and interact with the .rpz file just like an .rpt file (except they will not be able to see or change how the report was designed). Existing users should add two new rows to the Export_Opt table in the Visual CUT.mdb Access database.  The 2nd row is for exporting to rpz files for use by DataLink Viewer 2008 (SP2 or higher):

Export Constant

Export Name

Protected Report (.rpz)

Protected Report (.rpz)

Protected Report 2 (.rpz)

Protected Report 2 (.rpz)



¨    Improved default settings for command line exporting of reports with no saved settings for "Excel 97 (Data only)" format to avoid blank columns (in VC 11) and for "TEXT" format to avoid pagination (in VC 9 & 11).
 

¨    Added warnings when an export file name was specified without a path or without an extension.  The user can elect to turn off such future warnings.


 

¨    Email alerts about processing failures are now using the new email engine (Email 2009) if that email engine was enabled.

¨    Added a warning when doing a whole export and attaching the file to an email burst (perhaps the user forgot to turn on the export bursting option).  You may turn off these warnings from the Options dialog.

 

¨    The following command line arguments now allow blank values:
EXPORT_MODE (to turn off exporting), EMAIL_MODE (to turn off emailing), EMAIL_TO, EMAIL_REPLY_TO, EMAIL_CC, EMAIL_BCC, EMAIL_ATTACH, EMAIL_MESSAGE.
This allows users to turn off (set to blank) these options in cases when the option has a saved setting for that report.

¨    Mapped Drive à UNC Path Functionality:

1.      Added a warning when a report (selected from the Open Folder button) or an export file path uses a mapped drive. The user can elect to automatically replace the mapped drive path with the equivalent UNC path (\\ServerName\Share\…). This avoids failures during scheduled processing when the mapped drive is not recognized by the Local SYSTEM account.

2.      Right-clicking a report row in Select Reports grid provides a new option (visible only for reports that use a mapped drive path) for converting mapped drive paths to UNC (\\ServerName\Share\…) paths.  The conversion occurs in the grid itself as well as for the saved report path settings in Visual CUT.mdb.  Using UNC instead of mapped drive paths avoids failures during scheduled processing when the mapped drive is not recognized by the Local SYSTEM account.

¨    Logging processing to an ODBC table now handles cases where the export file name contains single quote (‘) characters.  Also, cases where connecting to the ODBC target fails are now handled more smoothly.

¨    Email alerts about processing failures are now using the new email engine (Email 2009) if that email engine was enabled.

¨    Fixed an issue with Emails with missing attachments.

¨    Brought back the Refresh button in the Preview tab for Visual CUT 9.

¨    Added support for emailing via a SOCKS proxy. DataLink_Viewer.ini now allows you to specify all the necessary options: Email_SocksHostname, Email_SocksPort, Email_SocksUsername, Email_SocksPassword (supported only when using SOCKS 5), Email_SocksVersion (4 or 5).  This functionality is supported only when using the new Email 2009 engine.

 

 

¨    Added an  Email_SMTP_Disconnect_After_Send option (in DataLink_Viewer.ini). This options applies only when using the new Email 2009 engine.  By default, after an email message is sent, the new email engine disconnects from the SMTP server.  This option, when set to FALSE, allows you to avoid disconnecting.

¨    Fixed a problem with logging processing to MS_Log table when a command line contains single quotes.

 

¨    Fixed two issues related to ODBC exports (one related to MS Access .accdb databases files, and one related to timeouts when processing huge files).

¨    Fixed an issue related to using Skip_Recent and multiple Printer_Burst destinations.

¨    Fixed handling of empty strings in both stored parameter values as well as in command line arguments (for example, …"Parm1:").

¨    Printer_Burst and Printer_Burst_Only can now specify multiple printer destinations using a text file listing the printers. For detail, see "Printing to Multiple Printers."

¨    Added code to silently log special data source failures during command line processing.  This should address rare cases, such as database deadlock situations, causing scheduled processing to hang.

¨    Visual CUT now allows emailing when no Email_To is specified. This accommodates scenarios where Bcc is specified without Email_To.

¨    Enhanced handling of command line processing with switched ODBC DSN data sources (using ODBC_DSN or ODBC_DSN_From_To argument). This allows for cases where the new DSN points at a different database and for cases where the same report was never saved interactively against that new ODBC DSN (provided at least one other report was saved in Visual CUT after interactively using the alternate ODBC DSN.

¨    Added a command line argument and an ini file option (both called After_Export_Delay).  This allows you to delay processing after an export by the specified number of milliseconds.  Typical use is for cases where Visual CUT exports to a network drive and immediately attempts to open it for further excel, Word or pdf processing.  In some rare cases, a delay may be needed to allow the file write to disk operation to complete so the file becomes accessible to the next file open operation.

¨    Updated runtime components in the Crystal 8.5 & XI versions of Visual CUT.  Users of prior versions can’t use the online update option and must go through a Remove, Download & Install process in order to update their version.


Version 6.1001:  Released March 10, 2009

¨    An alternative email engine has been added, which provides significant new email features.  For details, see the user manual section of "2009 Email Engine":

1.         You can now queue outgoing email messages in an ‘Outgoing’ folder monitored by a new smtpQ service. As soon as a new file appears in that folder, the service will attempt to send it. If it succeeds, it will either move the file to a ‘Sent’ folder or you can elect to have successful messages deleted. If after several minutes of repeated retries, the service fails to send the message, it will move it to an ‘Undeliverable’ folder.  These email messages are deposited as .eml files that can be opened in Outlook Express and manually transferred between folders.  For example, if you copy .eml files from the ‘Sent’ folder to the ‘Outgoing’ folder, they will be emailed again (perhaps the receiver junked your original message by mistake).  Among other benefits, this allows you to archive outgoing emails and easily recover from email service disruptions. For example, your email server may be down or your email service provider may not allow more than 100 messages per hour. For more detail, see the user manual section on "Queueing Emails & The smtpQ Service."

2.         When sending messages to multiple recipients, if the SMTP server rejects one of the recipients as a bad email address the process still continues emailing to the other recipients.

3.         Supports secure connections to the SMTP server (NTLM, CRAM-MD5, SSL, STARTTLS).

4.         New ‘Email 2’ tab in the Options dialog as well as new command line arguments (Email_Service:2009) allow you to:

a)      Elect to use the new email engine (Email_Service:2009).

b)      Turn on StartTLS (SSL) functionality in cases where the SMTP server requires it (Email_StartTLS:True).

c)      Specify a destination for bounced messages. (Email_Bounce_Address)

d)     Encrypt the message so that only the recipient can open it. (Email_Send_Encrypted:True)

e)      Sign the message so that the recipient can verify that you are the true sender of the message and that the message content hasn’t been altered.
(Email_Send_Signed:True)

f)       Support cases where the SMTP server uses integrated authentication
(Email_SMTP_Domain).

 

¨    A new PDF_Linearize command line argument allows you to web-enable pdf files so they open faster from a url link because the 1st page is opened even before the full document has been downloaded by the browser.  For detail, see "Linearize (web-enable) PDF Files."

 

¨    The install no longer attempts to create a registry entry that, in rare cases, could cause installation failures.

 

¨    When the Rename_Printer_Jobs options is set to True, Visual CUT now renames print jobs in the printer queue even if the printer is not the default printer.

 

¨    Added support for attaching files to email messages when embedding the HTML export in the email message body.

¨    Fixed an issue when dynamic print copies value is set to zero.

¨    Fixed an issue in the right-click menu option of ‘Copy .rpt and Settings’ in cases where a user attempts to copy the rpt from its mapped drive location to its UNC  path.

¨    Added support for exporting reports to "Report Definition" format. Existing users may add that option by adding a record to the Export_Opt table (in Visual CUT.mdb) with "crEFTReportDefinition" as export constant and "Report Definition" as Export Name.

¨    Added an option (under the Process tab of the Options dialog) to turn off the transfer of files to the recycle bin before they get overwritten by report exports. 

¨    Added a user manual section describing how you can add Dynamic Tables inside HTML Email Messages HTML tables are very useful, particularly when sending email messages to mobile devices. Because the width of an HTML table and its columns can be specified as percentages of the available screen width, the information adapts itself to the device displaying the message.

 

¨    Added Email_SMTP_Port, Email_User_ID, and Email_Password as a command line arguments.

¨    Added a button to the Export/Email tab that copies the export file text into the email attachment option.  This is just a convenience instead of manually copying & pasting.

¨    Added code to handle cases where a user clicks on the button to ‘browse for reports to open’ and the last used rpt folder is not accessible to that user.

¨    Improved warning message for missing pdf source file in PDF_Merge operations.



¨    Using the Word_Replace_Tags command line argument, you can now populate Word tables.  For detail, see: "Populating Word Tables with Crystal Formula Data." Also, tags are now recognized when placed in all Word document areas such as headers, footers, text frames, comments, endnotes, and footnotes.

¨    By naming parameters in a certain way, you can now ask Visual CUT to automatically load their values from ini file entries. One possible use may be for reports where some parameters change only rarely. This also allows report developers who sell their .rpz files in vertical markets to protect their reports from unauthorized use.  It also allows each client to customize the reports with text elements, conditional formatting, or record selection criteria without changing the report design.  For more detail, see the sections on "Load ini Values into Parameters" and "Securing Reports against Unauthorized Use." This functionality was originally developed for DataLink Viewer.

¨    Added a button to the Options dialog to easily open Failure.log in Notepad.

¨    Added a button to the Options dialog (Process Tab) to make a global change in stored login information in Login_Opt table in Visual CUT.mdb.  This is useful in cases where database passwords and/or user ids must be changed.

¨    Added a button to the Export/Email tab to easily open the Email Log.

¨    Improved main window resizing.  Increasing the window width now also increases the width of the list boxes showing the group values and the fields/formulas available for drag & drop.  This helps in cases where fields or formula names are very long.

¨    During command line invocation of Visual CUT processing you can now avoid seeing the brief minimization process of the Visual CUT window and the secondary processing window in the status bar.  This is particularly useful when calling Visual CUT from another application.  To achieve this, you can edit the [Options] section of DataLink_Viewer.ini and set: Suppress_Progress_Window_In_Command_Line_Processing to True.

¨    Visual CUT XI now uses a newer version (Service Pack 5) of the Crystal XI R2 runtime components. Users of prior XI versions can’t use the online update option and must go through a Remove & Install process in order to update their version.

 

 




Version 6.0000:  Released 11/23/2008

¨    Visual CUT can now merge Crystal fields/formula values into a MS Word document containing tags referencing the Crystal fields/formulas.  The resulting new file can then be saved to a new dynamically-named MS Word file (or appended into an existing target file) and emailed to  dynamic destinations.  This is supported during whole report processing as well as during bursting. The advantage of this technique over directly exporting/bursting a Crystal report to a Word document is that Crystal exports to Word tend to have formatting and editing problems. By creating your own Word document to act as a template, you ensure precise formatting and problem-free editing. For detail, see "Inserting Crystal Values into MS Word Documents."

¨    Added Integrated Interactive Authentication functionality.  This allows users to avoid repeated logins during interactive use of Visual CUT.  For detail, see "Integrated Interactive Authentication" in the user manual.

¨    You can now direct Visual CUT to use a different folder for key files (instead of the default location, which is the application folder).  For detail, see the new user manual section on "File Location Functionality."

¨    During merging of pdf files, Visual CUT can now generate bookmarks in the merged pdf file based on the names of the merged files.  For detail, see: ‘Using the Merged File Names to Generate Bookmarks.’

¨    Improved PDF_MERGE handling of cases where wild card handling finds zero files to merge.

¨    Visual CUT XI now uses a newer version (Service Pack 4) of the Crystal XI R2 runtime components. Users of prior XI versions can’t use the online update option and must go through a Remove & Install process in order to update their version.

 

¨    The Print_Copies command line arguments now also applies to scenarios where you use the command line arguments of PDF_Print, PDF_Print_Split, or PDF_Print_Split_Tag. The number of copies specified can be a dynamic reference to a field or a formula in the report. 

¨    Fixed an issue (message box) related to bursting reports with comments in the record selection formula.

¨    Added code to handle cases where users left a space in the cc or bcc email fields.






Version 5.9001:  Released 7/21/2008

¨    The XI version of Visual CUT is now packaged with Crystal XI R2 Service Pack 3 (SP3) runtime components. Users of prior XI versions can’t use the online update option and must go through a Remove & Install process in order to update their version.

¨    The XI version of Visual CUT now supports the new standard (rather than legacy) csv export formatting. To use this option, select "Char Separated Values" rather than "Comma Separated Values".

¨    You can now use the Options dialog (Processing Tab, Display Warning when email Attachment <> Export File checkbox) to disable the warning message when the email attachment is not identical to the export file.

¨    Added new Date Constants (Now_Plus_S & Now_Minus_S), which allow specifying current datetime (for DateTime parameters) or current time (for Time parameters) shifted by a specified number of seconds.  For detail, see the "Date Constants" section of the user manual.

¨    A new PDF_Properties command line argument allows you to set the pdf document properties of Author, Title, Subject, Key Words, Creator, and Producer.
For more detail, see the section "Setting PDF Document Properties via Command Line Argument".

¨    A new PDF_LinkToWeb command line argument allows you to add web browser links to a web site, email address, or local file (e.g., batch file) hotspots (with or without text) to pdf files.  For detail, see "Adding Web/File/email Hotspot to a PDF File."

¨    A new PDF_AddImage command line argument allows you to add an image to a pdf file with an optional link to a web site, email address, or local file.  This can be useful when you wish to use a button image as a hotspot indication or when you wish to add a company logo to a range of pages.     

¨    Visual CUT can now export reports to a multi-page TIFF image file by automating the process of first exporting to PDF and then saving the pdf file as a TIF file.  TIF is now a new format option (in addition to BMP, JPEG, WMF, EMF, EPS, PNG, or GIF) in the PDF_Save_As command line argument. 
For more detail, see "Saving PDF Files to Image Files."

¨    A new PDF_MERGE_Files_to_Layers allows you to merge 1-Page PDF Files into Layers in a Single PDF File.  This is particularly useful for mapping applications where you users wish to turn on or off the visibility of certain map layers.

¨    Fixed an issue causing Table of Content entries in pdf files to lose their link to pages that are 90 degrees rotated and are subject to page numbering operation.

¨    PDF processing can now be done for very large files. With the previous version, problems could be experienced with pdf files that are larger than 150 MB.  

¨    Users can now select which parameters they wish to refresh. The parameter refresh choices are stored for each report and can be easily reused or changed at a later session. Note: independent (unlinked) subreport parameters participate in this process and are listed as [subreport name] -> Parameter Name. 

¨    Fixed a code issue causing repeated login failure messages when command line processing fails to connect due to problems such as wrong password.

¨    Fixed a problem causing linked dynamic parameter reports to require their own login.

¨    Fixed a problem in processing Time parameters.

¨    Fixed a problem caused by blank export file name when using Printer (Default) as the export format.

¨    Fixed an issue caused by users who, by mistake, separate a list of files with two delimiters (for example, ";;") instead of one delimiter (for example, ";").   

¨    Fixed an error when using the same parameter multiple times within a dynamic parameter cascade (when using the special functionality of other reports acting as parameter dialogs).

¨    Fixed an issue related to command line processing of reports that have no tables.

¨    Fixed an issue with printing reports to the default printer when the report was designed in Crystal to use ‘No Printer’ (optimized for screen display).

¨    Fixed an issue related to bursting reports with comments in the record selection formula.

¨    Fixed an issue related to changing ODBC DSN data sources for subreports.

¨    Update.exe, the component providing online update functionality, is no longer marked as an essential component. This means that Symantec AntiVirus may (falsely) quarantine that component without causing the headaches of automatic reinstalls. In order to retain the ability to do online updates to newer versions, you can open Symantec Antivirus, expand the Configure node, select the File System Auto-Protect node, click on the Exclusions button, click the File/Folders button, and select update.exe (in the folder where you installed my software) to be excluded from the virus protection. 

 


Version 5.8001:  Released 11/25/2007

¨    Added a "Copy .rpt and Settings" right-click menu option to the report grid.  This "clones" the report and its settings.  The report file gets copied to a different name or folder, and all its settings (processing options, parameters, login information) are copied over. This lets you move a report to a different folder or from a mapped drive to a UNC path (\\server\folder\). This also lets you process the same report in a different way by changing some settings for the cloned report (as an alternative to using command line arguments to override saved processing options).

¨    Suppressed the distracting export progress window that pops up on each export.  Thanks to Frank Schwarz (Orbitz) for the suggestion. Note: if you wish to see the export popup or if Visual CUT starts misbehaving due to this change, you can edit DataLink_Viewer.ini and set Suppress_Export_Progress_Popup to False.

¨    Several enhancements to the user interface: a) improved screen shortcuts, b) better layout to the email options tab in the Options dialog, c) the Reload button now triggers a Preview of the reloaded report, and d) a single click on the first report row in the report list grid now selects that report for preview.

¨    Added code to avoid rare cases of wrong status shown in the export burst checkbox.

¨    Fixed recognition of Email_Delay_MilliSeconds as a command line argument.

¨    Visual CUT now renames up to 20,000 print jobs (in the Printer Queue).  The prior limit was 255 jobs.

¨    The option dialog now allows you to turn off both the Success.txt as well as the job status files (VC_Job_Status_Y.txt or VC_Job_Status_N.txt) functionality during unattended processing. Previously, that option controlled only Success.txt.

¨    Visual CUT can now open .rpz files created in the new DataLink Viewer version (5.6001 and above) as well as older .rpz files.
 

¨    You can now specify "Default" as the printer name in the command line arguments of "PDF_Print", "PDF_Print_Split", and "PDF_Print_Split_Tag".

¨    You can now use up to 10 (instead of just 1) bookmark formulas for each group level. This is particularly useful in cases where the same group level has multiple (split) group header sections (e.g., GH2a and GH2b) and you wish to generate a bookmark at the start of each split section. The naming requirements for the 9 extra functions are specified in the user manual under the header of: "Naming the Bookmark Formulas."


Version 5.7001: Released 9/27/2007

¨    Visual CUT XI now uses the Crystal XI R2 SP2 (Release 2, Service Pack 2) runtime components.  To take advantage of the new runtime components, users of prior XI versions should go through a Remove (using the old msi file) & Install cycle (do not use the Online Update wizard). 

 

¨    Crystal XI R2 provides two new export options: Outlines in Excel Data Only exports and bookmarks in pdf exports. You can’t specify these two new export options directly in automated Visual CUT processing.  Instead, open the report in Crystal XI R2 and set the options using: 
File, Export, Report Export Options… 
Note: a more powerful (control over bookmark labels and color) PDF Bookmark functionality is already provided by Visual CUT in all versions, but the new functionality allows you to avoid creating a formula for each bookmark level and is a good choice for simple cases.
 

¨    Enhanced merging of pdf files (using the PDF_Merge command line argument).  During the merge process, you can now add bookmarks for each input pdf file, so that the user can easily navigate the merged pdf file. For more detail, see the new user manual section on "Specifying Bookmarks when Merging PDF Files."

¨    When using PDF_Merge, Visual CUT now retains the original expand/collapse status, color, and style (bold/italics) of the merged bookmarks.

¨    Enhanced the command line argument for generating a Table of Contents based on pdf bookmarks (PDF_TOC) so that a bookmark is now generated and linked to the newly inserted Table of Contents.
 

¨    Added an option to specify different text for pdf Table of Contents headers. 
For example, instead of "Table of Contents" you can use "Table des matières".  
For detail see the user manual section on Overriding the default "Table of Contents" Header Text.

¨    Fixed image draw failures that occurred in some pdf exports. 

¨    Improved the way page numbers are added (with the PDF_Page_N command line argument) when the pdf file contains a mixture of rotated (90 degrees) and regular pages.

¨    Fixed an issue when using PDF_Page_N command line argument and specifying the optional pdf file name without the optional font type.

¨    Improved space use in the Export/Email tab when users increase the window size.

¨    For export formats that have an options dialog, a new button is now visible to the right of the export format drop-down.  This button allows users to easily  revisit the export options dialog for the current export format (no need to change to a different export format and then select the original one again).  This applies to versions 9 & XI.  
 

¨    Fixed an issue related to the Printer (Default) and Printer (Specified) export formats.

¨    Added a command line argument (TXT_Merge) for merging text files (before optionally emailing the resulting merged file. This is useful in cases where you wish to append text exports into existing files or when you need to add column headers to a csv export.  For detail, see the section on "Merge Text Files."

¨    Fixed a problem on machines with Excel 2007 when bursting to multiple excel tabs.

¨    Fixed an Excel Tabular export problem in the Crystal 8.5 version of Visual CUT.
 

¨    After inserting worksheet tabs into excel workbooks, Visual CUT now sets the default tab to the first one in the workbook.

¨    Added a command line argument (XLS_AutoFilter) for turning on the auto filter behavior in exported Excel files.

¨    Added a command line argument (XLS_AutoFit) for automatically fitting column widths to content in excel exports.
 

¨    Added a command line (XLS_Print_Setup) to control the print setup of excel files.  For detail, see the user manual section on Setting Up Print Properties for Excel Workbooks.


Version 5.6001: Released 3/31/2007

¨    Added support for other character sets in email messages.  In order to override the default character set (iso-8859-1) you should add an entry to the [Options] section of DataLink_Viewer.ini.  For example, in order to support Chinese characters, you should add the following entry:
Email_Char_Set=big5

¨    Enhanced email signaling for end-of-message.  For one user, this solved cases where messages to Yahoo email addresses remained in the email server queue.
 

¨    Added two new date constants: Last_MM_DD and Next_MM_DD.  For detail, see the section on "Date Constants."

¨    Added a new command line argument for specifying custom email header(s).  For detail, see the section on "Using a Command Line Argument to Specify Email Headers." The request for this feature came from a customer who needed to specify email message sensitivity (as recognized by Microsoft Outlook).

¨    Fixed an issue causing emailing for each group level 1 to stop if one of the groups has a missing attachment.  The corrected behavior skips the emailing for the group with missing attachment and continues to process the rest the groups.  Reminder: use the <opt> "marker" to designate optional attachments.

¨    Added an option to instruct Visual CUT to reconnect to the email server every N messages during email bursting.  This is useful in cases where the email server limits the number of messages that can be sent within a single email connection.  For detail, see the section: "Specifying an Email Reconnect Option for Email Bursting."

¨    Faster export & email bursting.

¨    Only for the 9 & XI versions of Visual CUT: added export dialog options for the Char Separated Values export format.  The dialog and options (string delimiter, field delimiter, number formatting, date formatting) behave just as within Crystal 9 and XI.  To support this change, existing users should add one more column to the Report_Export_Options table in the Visual CUT.mdb Access database:
Field Name: CharStringDelimiter
Data Type: Text
Description: Sets the character used to enclose Strings. The default is double quotes.
Field Size: 1
Default Value: """"     (4 double quotes specify a default value of 1 double quote)

¨    Fixed a problem when opening .rpz files (.rpt files encrypted into .rpz files). 

¨    Fixed a problem related to not recognizing zero selected records due to a Group Selection formula.

¨    Increased field sizes of UserID and Password in Visual CUT.mdb from 50 to 250 characters.  This is needed since the new encryption encoding introduced in version 5.5001 generates longer strings.  Existing users should open Visual CUT.mdb (using MS Access), open the Login_Opt table in design mode, and increase the field size for UserID and Password from 50 to 250.

¨    Fixed an issue (limited to the XI version of Visual CUT) related to scheduling printing of reports that were designed in Crystal to use a specified, rather than default, printer.

¨    Improved pdf processing speed (bookmarks, table of contents, password protection, page numbering, pdf file merging, etc.), reduced size of exported pdf files (compared to pdf exports directly from Crystal), and enabled processing of extremely large pdf files.

¨    Added wildcard functionality for specifying list of pdf files to merge.

 

¨    PDF_Print_Split_Tag functionality is now available in all versions of Visual CUT.

¨    Added a warning message when a user attempts to specify an email 'Reply To' option that includes a regular name. Email processing may fail if the 'Reply To' option contains more than just an email address.

¨    Added a warning message when a user saves non-bursting settings for a report, but uses dynamic fields and formulas (those you drag & drop into various options in Visual CUT) from Group Header/Footer sections in the report.  When processing whole reports in a single step via a command line, dynamic fields/formula values are recognizes only from Report Header/Footer sections.  This is designed to avoid wasting time during processing of scheduled reports. If you are not bursting, then you are processing the WHOLE report in one step -- hence, the dynamic field information should come from report-level sections rather than from Group-level sections.
 

¨    When processing an <<Insert_File:…>> token, after the content of the file is inserted into the email message body, Visual CUT now searches for and replaces references to fields and formulas with their dynamic values from the report.

¨    Fixed database login issues with reports that use multiple data sources, one of them being MS Access direct (DAO) connection.

¨    Failure to connect/logon to a database during command line or scheduled processing (with Silent Failure) is now logged and aborted instead of causing a login dialog.


¨    Added an optional Font Type parameter to the PDF_Page_N command line argument.

 

¨    When triggering printing for report with no saved settings, the number of copies now defaults to 1.  This avoids the need to specify "Print_Copies:1" as a command line argument.

 

¨    Fixed an issue with bursting reports that have more than 32,768 Groups at level 1.

 

¨    Added a button (to the right of the Scheduling String) to automate the process of inserting the command line into a new or existing batch file.  The process also allows the user to automatically open and inspect the resulting batch file in NotePad. The folder used for the last batch file creation/update is stored as a default for future batch file operations.

¨    Added a way to specify multiple printer destinations via a text file.  For detail, see the section on "Using a Text File to Specify Multiple Printers."

¨    Added a command line argument (PDF_From_TIFF) for importing multi-page TIFF files into pdf files.  A typical use scenario is to combine scanned images (e.g., shipping documents) into PDF file exports (e.g., invoices) before emailing to customers.  

¨    PDF Exports can now generate Form Fields based on formulas placed on the report. This means that you can use Crystal Reports to design pdf forms, and Visual CUT to generate and distribute these forms. This functionality is triggered by a new command line argument (PDF_Form_Tags) for adding form fields to PDF exports.  For more detail, see the user manual section on "Adding Form Fields to PDF Files." You can download a sample of such a pdf export with form fields at: 
www.milletsoftware.com/Download/Visual_CUT_PDF_Export_with_Form_Fields.pdf

 

 


Version 5.5001: Released 10/20/2006

¨    You can now invoke processing for reports with more than 8 parameters by providing the parameter values via command line arguments. You could always override up to eight parameter values saved for the report within Visual CUT by specifying them in the command line.  This was limited to the first 8 parameters in the report. This release allows you to specify via a command line the values for an unlimited number of parameters.  For example, if you need to invoke processing for a report with 11 parameters, your command line may now end with:
…."Parm9:Value" "Parm10:Value" "Parm11:Value"
 

¨    Changed encryption encoding to ensure reading and writing encrypted values is not vulnerable to special characters (e.g., new line character).  The change occurs on the fly when you close the Options dialog or log in to your database. 

¨    Fixed a problem causing the list of reports in the 1st tab grid to be deleted when early command line processing encounters an error.
 

¨    Added a command line argument and an ini file option (both called Email_Delay_MilliSeconds).  This allows you to delay email processes by the specified number of milliseconds.  Typical use is for cases where Visual CUT exports to a network drive and immediately emails the file as an attachment.  The network drive may require some time to recognize the new file.

¨    PDF merging now occurs before rather than after the generation of Table of Contents.

¨    Added date constant of Nth_N_PLUS_M and Nth_N_MINUS_M
For example, Nth_16_MINUS_1 returns the 16th of the prior month. 
See "Date Constants" for more detail.

¨    Corrected <<File_Insert:…>> to <<Insert_File:…>> in the user manual.

¨    Added support for printing as an export destination.  This allows print bursting to be initiated/stopped interactively.  If the Rename_Printer_Jobs option in the DataLink_Viewer.ini file is set to True, the printer queue shows the group value for each burst cycle print job. Existing users should add two new rows to the Export_Opt table in the Visual CUT.mdb Access database:

Export Constant

Export Name

Printer_Default

Printer (Default)

Printer_Specified

Printer (Specified)

 


¨    Added a warning message with option to abort in cases where users specify an export file that is identical to, and hence would overwrite, the report file being processed. 

¨    Fixed printing issues in the Crystal XI version.

¨    Fixed After_Burst_Batch processing in cases where Skip_Recent is used and the report is not sorted by time.

¨    Enhanced Email alerts about processing failures.  Such alerts now include cases where a failure occurs early in the command line processing stage.  The email text now includes information about the report being processed.

¨    Added a Default SMTP Server to the Options dialog.  This removes the need to manually enter an SMTP server for each report (in cases where Visual CUT fails to automaticallydetect the correct SMTP server in your network environment).  This also allows email alerts about processing failures at early stages of processing.

¨    You can now use a dynamic SQL query to populate the Email to, cc, or bcc with a list of email addresses.  See "Specifying Email Distribution Lists in SQL Queries" for more detail. 


Version 5.4001: Released 7/30/2006

¨    Fixed an issue causing scheduled processing failure when no user is logged in. Users no longer need to use a more advanced scheduler such as AutoTask 2000 instead of the Windows task scheduler to address such scenarios.

¨    You can now insert file content into the email message body using a text token (or Crystal formula) that references the location and name of that file.  For detail, see "Embedding File(s) Content in Email Message Body".

¨    Fixed logging to ODBC issues related to: a) having email addresses with embedded single quotes, b) using Skip_Recent command line argument, c) updating "Started" status to "OK" when emailing.

¨    Fixed a failure notification loop when the email notifying about the error fails itself.

¨    Fixed an issue when exporting to multiple formats in a single pass (export file name is specified as multiple files separated by ";") and one of the formats is html.

¨    Only for Visual CUT XI: added Excel export option to control whether Grid Lines show in excel exports.  Existing Visual CUT XI users should add a new column to the Report_Export_Opt table in Visual CUT.mdb. The column name is ExcelShowGridLines, Data type: Yes/No,  Default value: No. 

¨    Added two variations to the Date Constant Today_Minus_N_Minus_M:
Today_Minus_N_Minus_M_SOM returns the Start of Month for the resulting date. Today_Minus_N_Minus_M_EOM returns the End of Month for the resulting date.

¨    You can now use the Options dialog (Processing Tab, Display Bursting Requirements (if not met) checkbox to disable the "In Order to Enable Electronic Bursting your report must have…" warning message.

¨    The progress window now show the % Complete in its title.  This allows users to monitor progress even when the window is minimized.

 

¨    Command line arguments can now have embedded double quotes.  For example: "Email_To: "Ido Millet" <Ido@MilletSoftware.com"

¨    When using the TabInOldFile option in Excel exports, if the tab already exist the export gets appended to the end of data in the existing tab.  In the past, such a situation would result in adding a new TabName(2) tab.

 


Version 5.3001: Released 6/3/2006

¨    Added an option to send an email alert to a specified address when a failure occurs. See the new Log/Alert tab in the Options dialog.

Added options to log processing (including bursting detail) to a table in a specified ODBC DSN. See the new Log/Alert tab in the Options dialog.  

 

¨    You can now control how many levels of PDF Bookmarks are visible when a user initially opens the exported file in Adobe Acrobat.  For detail, see "Controlling How Many Bookmark Levels Are Initially Expanded".  

¨    Fixed an issue causing the completed Visual CUT process to remain open when the scheduled process has no access to a desktop.

¨    Fixed an issue with PDF bookmarks.

 

¨    Visual CUT XI only: Added a "Microsoft Word – Editable (RTF)" export format option. Existing users can simply use the "Rich Text" Format (which now exports to the editable RTF format) or add the following record to the Export_Opt table:
Export Constant: crEFTEditableRichText
Export Name: Microsoft Word - Editable (RTF)

 

¨    Fixed a bursting issue when record selection formula contains comments as last lines.

¨    Fixed an issue with Excel Data Only exports in the Visual CUT 11 version.

¨    Fixed an issue with exporting to multiple file formats in a single pass (by specifying multiple export file names separated by a semi-colon).

¨    Fixed a processing issue with the Printer_Burst_Only command line argument.

¨    Fixed a recently introduced issue with multi-value parameters.

¨    Enhanced the user manual and the sample reports to better explain how exported pdf bookmarks can be color coded using Crystal formula logic and how bookmark formulas should guard against Null values.

¨    Fixed embedding of HTML 3.2 exports with multiple images in email messages.

¨    The email password specified in the Options dialog is now stored encrypted in the DataLink_Viewer.ini file. 


Version 5.2001: Released 3/5/2006

¨    Added a command line argument (ZIP_Files) to ZIP and password protect any number of files. This can be particularly useful when emailing files that need to be protected or combined into a single attachment.
For detail, see "ZIP and Password Protect Files."

¨    Added a command line argument (XLS_Protect) to password protect Excel files. For detail, see "Password Protecting Excel Workbooks."

¨    Since including the current date in export file names is a common need, Visual CUT now adds to the Fields & Formulas area a list of current date values (day, month, year) with various variations (number, name, length). This allows you to avoid creating formulas in your report just to pass current date values to Visual CUT.

 

¨    When specifying multiple file attachments for emailing, you can now specify the full path of only the first file, if all other files are at the same folder location.

¨    You can now specify that an email attachment is optional by prefixing <Opt> to the file path & name.  For example, if you need to email Sales.pdf (always) and Returns.pdf (if it exists), use: c:\temp\Sales.pdf;<Opt>Returns.pdf

¨    You can now control email message priorities using a command line argument (Email_Priority).  For detail, see "Using a Command Line Argument to Specify Email Priority."

¨    Added a new parameter date constant (Today_Minus_N_Minus_M) for subtracting days and months from the current date.  For detail, see "Date Constants" on page 99.

¨    Added an "ODBC_DSN_From_To" command line argument
This is useful for cases where a report uses multiple ODBC DSNs and you need to override only one of them.  For detail, see: "Database Choice Functionality (Command Line / GUI)" on page 109.

¨    Fixed a multi-tab excel export issue (problem was limited to the Crystal 9 version).

¨    The PDF_MERGE command line argument now allows you to specify the full path of only the first file in the list of files to be merged, if all other files are at the same folder location.

¨    Added an option for using a text file to provide the list of file names for PDF_MERGE operations.  For detail, see "Using a Text File to Specify Files for Merging" on page 198.

¨    PDF-related command line arguments are now processed even if the report is not exported to pdf and even if the "PDF Exports include Document Properties or Bookmark Processing" option is disabled. 
 

¨    Fixed a problem in processing reports that have a single quote in their rpt file name.

¨    Fixed a problem in saving settings for reports with inactive parameters.

¨    Various improvements to the user manual, including a new table summarizing the functionality of all available command line arguments.

¨    Added an option to avoid attempts to connect to the database without a password.
By default, Visual CUT first attempt to connect to the database without a password.  If all your tables require a password, change the following option in the DataLink_Viewer.ini file from the default of TRUE to FALSE. 
This would reduce potential lockouts and failed login entries in the DBMS log. 
[Options]
Attempt_Logon_Without_Password=FALSE

Note: if some of your data sources do not require authentication, turning this option to False would trigger a logon dialog in Visual CUT when you run a report against them. Simply click OK in the login dialog without providing a user id or password.

¨    Fixed a problem with handling record selection formulas with embedded comments.

¨    Fixed a problem (introduced in prior version) with decimal parameter values.

¨    Fixed a problem with the starting page parameter controlling the generation of Table of Contents in PDF files (PDF_TOC command line argument).

¨    Visual CUT now generates a failure log message when the printer specified in a command line argument is not found. The message lists all the printer names that Visual CUT found as well as the attempted printer name.

¨    During Printer_Burst_Only processing, Visual CUT no longer removes target export file names to the recycle bin (since the report is only printed, there is no danger that exports would overwrite important files).

¨    During Printer_Burst_Only processing, Visual CUT now names each print job according to the export file name for each group. Previously, the print job name was fixed as the export file name belonging to the 1st group. 

¨    You can now specify "Default" as the printer name in the command line arguments of Printer, Printer_Only, Printer_Burst, and Printer_Burst_Only.

¨    When selecting TEXT export format, a new dialog allows you to control the Characters Per Inch.  By increasing this value you can ensure that exported text doesn't get truncated on the right.    

¨    Added a command line argument (PDF_Save_As) to convert PDF files into image files (BMP, JPEG, WMF, EMF, EPS, PNG, or GIF). For detail, see "Saving PDF Files to Image Files."

¨    Significantly faster processing of: a) reports that generate many pdf bookmarks.
b) pdf exports (when the "PDF Exports Include Document Properties and Bookmark Processing" is turned on), and c) pdf merge operations.

¨    Added a PDF_Print_Split_Tag command line argument. The advantage of this option over the older PDF_Print_Split argument is its ability to dynamically control paper trays using formula logic from within Crystal reports.  For example, it makes it easy to print the first and last pages in each group using one tray and print the rest of the pages from another tray.  For detail, see "Using PDF_Print_Split_Tag" on page 209.

 


Version 5.1001: Released 10/14/2005

¨    Faster loading and bursting of large reports with many group values.

¨    Visual CUT can now embed TEXT exports (or any specified .TXT, .TEXT, or .PRN attachment file) directly in the email message body (instead of as an attachment). See "Embedding TEXT Export in Email Message Body".

¨    After a PDF Merge, if there are bookmarks anywhere in the resulting pdf file (even if the first document doesn't have bookmarks), the bookmark window is made visible.

 

¨    Fixed a problem causing some command line arguments in the Crystal XI version of Visual CUT to be treated as static rather than dynamic.

¨    Warning messages are now not logged into the Failure.log file. A new checkbox ("Log Warnings") in the Options dialog allows you to request logging of warnings.

 

¨    Email attachments can now be specified using wild cards in the file name(s). 
For example, to send all files that start with the current Customer ID:
C:\VC_Exports\{customer.customer_id}*.*

 

¨    Data Constants for date and numeric parameters are now supported for range (not only discrete) parameters.  See "Using Command Line Arguments to Specify Parameter Values".

 

¨    When using Printer_Burst or Printer_Burst_Only command line arguments, the printer name argument is now dynamic.  You can create a formula that returns a different printer name for different group values, embed that formula as the printer name argument, and sent the printouts for different groups to different printers.

 

¨    For ODBC data sources, users can now directly enter a database name into the login dialog if they wish to override the database specified in the ODBC data source or in the report itself.  For detail see "Overriding the Database Specified in the Report or ODBC DSN."

¨    When using a Native connection to Oracle, you can now change the Server name in the login dialog.  Also, a new command line argument (Oracle_Server) allows you launch report processing against a specified Oracle server.  See "Overriding the Server in Native Oracle Connection."

¨    Visual CUT can now merge formula values into a PDF Form and save/send the result as new PDF files. See :Saving PDF Files to Image Files."

 


Version 4.9007: Released 7/15/2005

¨    PDF Merge operations now also merge the bookmark information from all files.
The details are discussed in the section "Merging pdf Files"
In particular, read the section on "Using a Text File to Specify Files for Merging."

¨    Fixed an ini file problem causing the Set_PDF_Properties option to be set to TRUE each time Visual CUT was reloaded.

¨    Fixed a multi-tab excel export issue (when using the Tab! Option).

¨    Fixed an issue causing Export_Mode and Email_Mode command line arguments to be ignored if the report has saved settings.

¨    Fixed an issue causing reports with no saved settings to abort processing if no export or email options were specified (for example, in cases where only a printout is desired).

¨    Removed internal validation of email addresses (in case users are using an email-to-fax bridge which requires a non-standard email address).

¨    Fixed an issue causing generation of PDF bookmarks to ignore cases where the report is exported in whole (no bursting) and there's only one requested bookmark.

¨    Added an option to start page numbering of PDF files on a given page and a given number.  For example, start numbering on page 2 with the number 1. See the section on Adding Page Numbers to a PDF File for more detail.

¨    Added an option to adjust page numbers in generated TOC.  For example, if page numbering for the document started with 1 for page 2 (ignoring a title page), then the TOC can also offset the displayed page numbers by 1. See the section on "Adding a Table of Content to the exported PDF File" for more detail.

 




Version 4.9003: Released 4/25/2005

¨    The ODBC Export Options dialog now allows you to select Abort (default Crystal action), Append, or Replace as the action when the target table already exists.
The details are discussed in the section "Text Functionality."
 

¨    Using command line arguments, you can now invoke processing even for reports that have no saved settings in Visual CUT.  The details are discussed in the section "Using Command Line Arguments to Process Reports with No Settings."

¨    New Export_Format command line argument is now available to provide or override the Export Format  saved for the report in the 3rd tab options.

 

¨    New Export_Mode, Email_Mode, and Email_SMTP_Server command line arguments are now available to provide or override the processing options saved for the report in the 3rd tab options.

¨    The Export_File and Email_Attach command line arguments are now dynamic (field/formula names are replaced with values from the report).

¨    You can now export to multiple files and export formats in a single pass.
This applies even to bursting, so each bursting cycle can generate multiple export files and formats. The details are discussed in the section: "Exporting to Multiple Files/Formats in a Single Pass."

 

¨    Fixed a login problem (when subreports connect to a different data source). This problem occurred only in the Crystal 8.5 runtime components version of Visual CUT.

¨    Fixed a problem in changing ODBC DSN sources when running the Crystal 9 runtime components version of Visual CUT with reports from earlier versions of Crystal.

¨    Added a TabInOldFile_Replace! Option in excel export file names.
Visual CUT inserts the exported report as a sheet (tab) in an existing excel file if the tab doesn't yet exist, but replaces the content of the tab if it already exists.
This allows other sheets to refer to the content (periodically refreshed by Visual CUT) of that tab. The details are discussed in the section: Appending or Replacing Data for Existing Tabs
Thanks to Egil Stenberg (Flextronics) for sponsoring this development.


¨    The installer(msi) file now defaults to a per-machine installation, if installed by an Administrator.  This facilitates the deployment of Visual CUT when an Administrator installs the software for use by other users. In the past, such cases would require installation from a command line with an ALLUSERS=1 argument.

¨    Visual CUT 9 now uses a new set of Crystal 9 runtime components that, among other minor fixes, can provide much faster execution of Crystal 8.5 reports in certain cases (one user reported a decrease from 3-5 minutes to 10 seconds).

¨    Added a command line argument (PDF_Print_SPLIT) that allows you to split the printout of a PDF file to multiple printer trays. For example, you may want to print the first page from a tray containing your company's letterhead, and the rest from a regular paper tray.

Version 4.6005: Released 2/17/2005

¨    New Grid for Selecting Reports with enhancements such as:
more columns (path, report, title/description, subject, type, date/time last used)
- sort on any column by clicking the column header
- group on any column by dragging the column header to a Grouping area
- select larger or smaller font size (right-click column headers…)
- hide/show columns (right-click column headers…)
- Select multiple reports and load them into the grid in one step
   

¨    When running reports that use ODBC data sources, you can select which ODBC data source should be used. This is explained in detail in the section: Selecting an Alternative ODBC Data Source .

¨    A new command line argument (ODBC_DSN) allows external control of which ODBC data source is used.  This is explained in detail in the section: Selecting an Alternative ODBC Data Source .

¨    The main window remembers its size from session to session.

 

¨    Added a browse button to allow easy selection of file attachments. 
The dialog allows selection of multiple files and adds the choices (separated by semi-colon) to any choices already specified.  Note: if file attachments are dynamically named (using fields/formulas from the report), you must edit the resulting text because the file browse dialog is restricted to existing files.

 

¨    Added a browse button to allow easy selection of a text (*.txt) file for use as an email distribution list.  After the file is selected, Visual CUT automatically adds the required "FILE:" prefix inside the "Email To" option.

¨    Added Number constants for specifying Year or Month relative to the current year or month.  This is described in the section "Number Constants."  Thanks to Paul MacKenzie (Silberline) for sponsoring this development.

 

¨    Added a Skip_Recent command line argument allowing you to instruct Visual CUT to skip processing of a whole report or a bursting step if the target export file already exists and was created less than N minutes ago.  A detailed description of how this allows you to avoid generating duplicate emails is described in the section "Avoiding Duplicate Processing."

 

¨    Visual CUT can now embed HTML exports directly in the email message body (instead of as an attachment). This allows you to easily generate professional looking email messages that contain logos and charts (invoices, management reports, etc.).

Version 4.1001: Released 12/30/2004

¨    To facilitate emailing to a long list of recipients, you can now specify email distribution lists in text files. The details are discussed in the section: Specifying Email Distribution Lists in Text Files .  

¨    Visual CUT can now handle cases where multiple composite email destinations (display name as well as email address) are specified in the To, CC, or BCC emailing options.  The details are discussed in the "Dynamic Tables inside HTML Email Messages" section.

¨    Visual CUT now creates the directory of a specified merged PDF target file
if the directory doesn't already exist.

¨    PDF Merging operations now succeed even when the pdf file names contain commas.

¨    Fixed a problem with Print_Copies command line argument.

¨    Added DataLink_Viewer.ini options to set 3 lines in the About dialog to text of your choice.  This is useful if you are a consultant installing Visual CUT for a customer and you wish to specify your contact information for technical support.  For example, using the following settings in DataLink_Viewer.ini:
__________________________________________
[Options]
About_Line1=www.acme.com
About_Line2=For Technical Support, contact Jane Doe:
About_Line3=Jane_Doe@acme.com  (888) 1234-4567
__________________________________________
you would get the following About dialog:

image

Note: as demonstrated with the www.acme.com line, entries containing only a url are automatically treated as web links.

 

¨    Fixed an issue related to not storing/reusing login information (encrypted) for reports if they use the same data source and were opened one after the other in the same interactive Visual CUT session.  Thanks to Paul Stewart (Worthington Aviation) for identifying the issue and testing the new version.

 

¨    Using command line arguments, you can now override the server and the database the report connects to.  This is currently limited to SQL Server OLE DB data connections.

 

Version 3.9005: Released 09/29/2004

¨    Visual CUT can now merge (and print if desired) any number of PDF files.
This allows users to combine (for e-mailing, print stapling, etc.) Crystal outputs from multiple reports with different page orientations.

¨    Visual CUT now treats the following command line arguments as "dynamic" in the sense that field/formula names are replaced with dynamic values from the report (just as you drag & drop fields & formulas into the various options in the 3rd tab within Visual CUT):
PDF_MERGE
PDF_PRINT
PDF_PROTECT
PDF_TOC
PDF_PAGE_N

Among other things, this allows you to easily protect individual PDF exports with different passwords for each group.

¨    You can now specify the PDF file name that should be processed by the command line arguments of:  PDF_PROTECT, PDF_PAGE_N, and PDF_TOC. 
This allows you to add a Table of Content, add Page Numbers, and protect any PDF files -- not just the PDF file being exported by Visual CUT.
The default remains to apply these processing steps to the exported PDF file, but if you specify a file name (as the last element in these command line arguments), the requested PDF processing would be directed to that file.
For example, this is useful when using Visual CUT to merge PDF files (using PDF_MERGE) and then protecting the resulting merged file.
Note: this is an optional argument – no need to change existing scheduling strings.

Version 3.8001: Released 08/18/2004

¨    Visual CUT can now generate Color-Coded Bookmarks in exported PDF files
See example at: www.milletsoftware.com/PDF_with_Color_Coded_BookMarks.jpg
The details are discussed in the section: Controlling PDF Bookmark Colors (& Text). This is useful for visually indicating item performance or status (e.g., red color indicating poor performance).

¨    A new command line argument allows you to Encrypt & Protect Exported PDF files (using 128-bit encryption). This allows you to control various aspects such as whether the user would be prompted for a Password and what actions (Print, Copy, Edit, add Annotations,…) are allowed.

¨    A new command line argument allows you to Add a Table of Contents (including hyperlinks to the appropriate pages) to the exported PDF file.
See example at:  www.milletsoftware.com/PDF_with_TOC_and_BookMarks.jpg
This is useful when users need to navigate through hardcopy printouts of large pdf files. Thanks to Jim Stickley (TraceSecurity) who sponsored the development of this functionality.

 

¨    A new command line argument allows you to Add Page Numbers to the Exported PDF file.  This is useful when adding a Table of Contents (as discussed above) since in such cases the page numbers from Crystal would be wrong.  The details are discussed in the section: Adding Page Numbers to a PDF File .
Thanks to Jim Stickley (TraceSecurity) who sponsored the development of this functionality.

 

¨    A new DataLink_Viewer.ini file option (Job_Status_Path) under a [File_Locations] section allows you to override the default location (Visual CUT application folder) for the Job Status indicator files. 
 

¨    A new DataLink_Viewer.ini file option (Rename_Printer_Jobs) under a [Options] section allows you to override the default behavior whereby Visual CUT assigns the (dynamic) export file name option (if specified) to the document name shown in the Printer queue when executing scheduled or command line printouts of reports:
------------------------------------
[Options]
Rename_Printer_Jobs=FALSE
------------------------------------
This is useful in situations where you don't have permissions to name printer jobs.

¨    Fixed an issue with paper source (tray) not being preserved when specific printer destination is specified via command line arguments.

¨    Fixed failed attempts to save settings when changing the number of print copies.

¨    New command line arguments are now available to override the values specified for several 3rd tab options:

Export_File         

Email_To

Email_From

Email_Reply_To

Email_CC

Email_BCC

Email_Attach

Email_Subject

Email_Message

 

¨    Visual CUT can now open and process rpz files (rpt files encrypted by DataLink Viewer).  This allows developers to protect and hide their reports designs (either as an intellectual property issue or as a tech support issue).  They can simply keep the rpt files and distribute only the rpz files (created in DataLink Viewer) to their users.

Within DataLink Viewer as well as Visual CUT, rpz files behave just like rpt files except that, in order to protect the report design, exporting rpz files to "rpt" format or to "report definition" format is blocked. 


Version 3.4301: Released 05/15/2004

¨    Fixed an issue causing processing of Printer_Burst or Printer_Burst_Only arguments to trigger an initial full printout before executing the requested Printer Burst printouts.

Version 3.4201: Released 05/06/2004

¨    Added functionality that allows adding Excel Exports (and/or bursts) as Tabs in existing spreadsheets.  This allows you to create and email multi-tab excel workbooks that contain information from multiple Crystal reports.  For detail see the new user manual section on "Adding Excel Exports as Tabs in Existing Spreadsheets (Briefing Books)."  Thanks to Richard Roper (AIG) for sponsoring this development.

 

Version 3.4001: Released 04/26/2004

¨    Fixed a problem with "Printer:" as a command line argument.

 

Version 3.3901: Released 04/25/2004

¨    Fixed a problem that caused an error message and update failure in some situations after clicking the Export check box and then the SAVE button.
 

Version 3.3801: Released 04/18/2004

¨    Visual CUT now prompts for, and uses, 3 more options for Excel (Data Only) exports: Export Object Formatting, Maintain Column Alignment, and Export Images.  Note: Applies only to the CR 9 runtime components version of Visual CUT.
Thanks to Larry Bodie (Kelsan) for suggesting this enhancement.

 

Version 3.3701: Released 04/06/2004

¨    DateTime parameters can now accept the same date constants that previously were available only for Date parameters (for example, TODAY_MINUS_N, START_MONTH_PLUS_N, END_MONTH_MINUS_N, START_YEAR_MINUS_N). 

When using these constants for a DateTime parameter, the time value is set to the start of that date (12:00:00 AM).  As a reminder, these date constants are described in the "Date Constants" section of the user manual. 

Version 3.3601: Released 03/27/2004

¨    During unattended/scheduled processing, Visual CUT now generates a job status text file, located in the Visual CUT application folder and named:
VC_Job_Status_N.txt (containing the error message) if a failure occurred and
VC_Job_Status_Y.txt if processing was successful. 

¨    Replaced the Online Update component (Update.EXE) with a newer version (fixing an issue with NT 4.0 PCs). 

Version 3.3501: Released 03/24/2004

¨    Fixed an issue whereby changes to the export/e-mail settings in the 3rd tab where saved even without clicking the SAVE button (if the user then selected another report).  Thanks to Jim Woodin (Diamond V Mills) for identifying the issue.

 

Version 3.3301: Released 03/17/2004

¨    Visual CUT now assigns the (dynamic) export file name option (if specified) to the document name shown in the Printer queue when executing scheduled or command line printouts of reports.  Note: to enable this functionality, the "Manage Documents" security option for the printer must be turned on for you.
 

¨    Added more informative error messages when bursting fails due to the record selection formula containing only a comment.

¨    Added an option (in the options dialog) for specifying what Visual CUT should do in scheduled/unattended  execution of reports that were Saved with Data.  By default, the option is set to use the saved data.  By turning this option (check box) off, you can now indicate that Visual CUT should refresh the report with data from the database.
Thanks to Ron Ruth (TIB Bank of the Keys) for suggesting and testing this enhancement.

 


Version 3.3001: Released 03/08/2004

¨    Added a variety of new date constants (for example, TODAY_MINUS_N, START_MONTH_PLUS_N, END_MONTH_MINUS_N, START_YEAR_MINUS_N) for specifying date parameters values relative to the date the scheduled report actually runs. 

These date constants are described in a new section ("Date Constants") in the user manual. 

Thanks to David Leland (Johnson Corporation) for suggesting this enhancement.

 

Version 3.2001: Released 03/04/2004

¨    Fixed an issue causing some changes in the Options dialog to not be saved (to the DataLink_Viewer.ini file).

 

¨    Replaced the Online Update component (Update.EXE) with a newer version. 
Note: this requires that you select the option to restart the PC when you apply this update via the online "Check for Updates" process (since Update.EXE would be detected as a "locked" component during that process.

 

¨    Updated the PDF properties/bookmarks processing dll. My testing shows that the 8.5 runtime components version of Visual CUT can now generate PDF bookmarks when exporting reports with images/charts without getting a warning about font substitution when opening the PDF file. 
To avoid confusion, note that this problem has never affected the Crystal 9 runtime components version of Visual CUT. 

 

¨    Visual CUT can now handle cases where the correct User ID or Password for a secure data source are actually blank.  Thanks to Tom Cook (Grotenhuis) for identifying the issue and testing the fix.

 

Version 3.1001: Released 02/19/2004

¨    Fixed an issue causing an error message when setting excel export options for a report with no groups. Note: this was an issue only with the CR 9 runtime component version.

¨    Fixed a problem when bursting to multiple tabs within a single excel file.
Note: this was an issue only with the CR 8.5 runtime component version.


Version 3.0000: Released 02/10/2004

¨    New User Interface in the Select Report (1st) Tab:

1.      A grid shows three columns: Report Path, Report File Name, and Report Title (from the summary information specified for the report during Design Time) or a user-specified Description (entered by the user by clicking in that cell).

2.      Right-Clicking a row on the grid provides a popup menu with ‘Preview Report
and ‘Delete Row’ options. 

3.      The grid columns resize when the viewer gets resized by the user.

4.      The grid columns can also be resized by the user and "remember" their widths from session to session.

5.      The data is still maintained in ReportList.txt and the new version recognizes and migrates the data in an old ReportList.txt files automatically.

6.      Selecting a report to open via the "Browse for a Report to Open’ button causes an immediate preview (no need to select the Preview Tab).

7.      Double-Clicking a report in the grid of previously opened reports causes an immediate preview (no need to select the Preview Tab).

¨    Added a button in the Version dialog allowing users to check for software updates on my web site and apply those patches quickly and efficiently.  The patch sizes are typically very small since this automated process applies only net changes to files.

 

¨    Added a button to the 1st tab for launching an Options dialog (instead of manually editing DataLink Viewer.ini).

¨    The 8.5 runtime components version of Visual CUT can now generate PDF bookmarks when exporting reports with images/charts without causing a PDF file corruption.  You may still get a warning about font substitution when opening the PDF file. 
To avoid confusion, note again that this problem has never affected the Crystal 9 runtime components version of Visual CUT. 
Older 8.5 versions can always avoid this issue by setting the "Set_PDF_Properties" ini file option to FALSE (as described on the last page of the user manual).

Version 2.8.7000: Released 01/24/2004

¨    A special email processing case that in the past would generate a message of:
"the attempt to connect timed out" is now handled internally to avoid e-mail failures. 

¨    Added support for overriding the number of attempts to connect to the email server (default is 4 times). If your wish to override the default, open DataLink Viewer.ini (located where you installed Visual CUT) and set a new value (between 1 and 20) to the following entry under the [Options] section:
Email_Connect_Retries = 4

¨    Added support for overriding the number of seconds Visual CUT waits for email connection before giving up (default is 40 seconds). If your wish to override the default, open DataLink Viewer.ini (located where you installed Visual CUT) and set a new value (between 5 and 120) to the following entry under the [Options] section:
Email_Connect_Timeout = 40

¨    Added support for overriding the number of seconds Visual CUT waits for an email messages to complete before giving up (default is 60 seconds). If your wish to override the default, open DataLink Viewer.ini (located where you installed Visual CUT) and set a new value (between 10 and 1800) to the following entry under the [Options] section:
Email_Message_Timeout = 60

 

Version 2.8.6000: Released 01/19/2004

¨    Added functionality for adding bookmark information from a text file (PDF_Bookmarks,txt) to exported PDF files.  Using my CUT Light UFL, this can be used to generate bookmark information from within subreports. 
For detail see the section


Version 2.8.5000: Released 12/19/2003

¨    The "To:" and "Copy To:" email options can now be structured as a name enclosed in double quotes, followed by the e-mail address enclosed in "<  >"
For example: "Ido Millet" <ixm7@psu.edu> 

¨    Added special handling for Stored Procedure parameters with Null values.
Null parameter values are now stored as "[VC_NULL]" in the report option table. 
Passing a Null value via a command line argument should be done as "Parm1:[VC_NULL]"
Thanks to Sharon Mone (Fujitsu) and Greg Scharer (Upstate) for identifying the issue and testing the fix.

¨    Fixed "dynamic copies" option not being saved. Thanks to Jonathan Washam (Independent Portfolio Consultants) for identifying the issue and testing the fix.

¨    Changed Excel exports in the Crystal 8.5 runtime version of Visual CUT to use the "Column Headings" option by default (to match the default behavior in Crystal 8.5).
Thanks to Greg Scharer (Upstate) for the suggestion.

 

¨    Fixed Excel "Data Only" exports behaving (on some PCs) as regular Excel exports.  Thanks to Chris Kell (Washington State University) for identifying the issue.

¨    Excel "Data Only" exports now set "Column width based on the objects in the"
Report Header (the default used by Crystal 9).  Applies only to the Crystal 9 runtime component version of Visual CUT.

¨    You can now specify export options for Excel, Excel (Data Only), and Paginated Text exports using dialogs like those you get when exporting from Crystal 9. 
Applies only to the CR 9 runtime components version of Visual CUT.
Thanks to Bernard Paes (Flag Choice Hotels) and to Ken Rickard (EMU) for suggesting this enhancement.

¨    Added the ability to export to ODBC.  A new dialog collects options such ODBC DSN, user id, and password (stored in encrypted format). 
Applies only to the CR 9 runtime components version of Visual CUT.

A Note to Existing Users of Visual CUT (CR 9 Runtime Components Version)

Since the export format options are saved in a new table (Report_Export_Options) in the Visual CUT.mdb database, existing users must copy that table structure into their existing Visual CUT.mdb in order to take advantage of this new functionality:

1.  Download and use MS Access to open Visual_CUT_Export_Opt.mdb: http://www.MilletSoftware.com/Download/Visual_CUT_Export_Opt_Versions.zip

2.  Use MS Access to also open Visual CUT.mdb and copy the Report_Export_Options table from Visual_CUT_Export_Opt.mdb into Visual CUT.mdb

 

3.  Add the ODBC export option to the Export_Opt table in Visual CUT.mdb
 

Export Constant

Export Name

CrEFTODBC

ODBC


Version 2.7.8000: Released 10/25/2003

¨    Fixed a recently introduced wrong version of export format options (Export_Opt table in Visual CUT.mdb) in the 8.5 runtime components version of Visual CUT.

Existing users of that version of Visual CUT (8.5 runtime components) were not impacted because, in order to preserve your settings, Visual CUT.mdb doesn’t get changed when running REMOVE and then reinstalling newer versions. 

If you recently installed for the 1st time Visual CUT with the 8.5 runtime components version (or if you switched between the 9.0 and the 8.5 versions) you can check to see if you have the correct export format options by opening the Export_Opt table in Visual CUT.mdb.  Your Export_Opt table should contain the older export format options for Excel (for example, crEFTExcel50) while the Crystal 9 runtime components version has the newer export formats (for example, crEFTExcel97).

If you have the wrong version of the Export_Opt table:

1.      Download and use MS Access to open Visual_CUT_Export_Opt.mdb: http://146.186.176.195/CUT/Visual_CUT_Export_Opt_Versions.zip

2.      Use MS Access to also open Visual CUT.mdb and rename the Export_Opt table to Export_Opt_90_Version

3.      Copy the Export_Opt_85_Version table from Visual_CUT_Export_Opt.mdb into Visual CUT.mdb and rename it as Export_Opt

 

¨    Since switching between the 8.5 and the 9.0 runtime version of Visual CUT can lead to the same issue as described above (Visual CUT.mdb from the previous version remains with the wrong version of Export_Opt table) Visual CUT now contains two more tables (Export_Opt_85_Version and Export_Opt_90_Version) to facilitate renaming and using the correct version. 

Version 2.7.7000: Released 10/20/2003

¨    The "From:" email option can now include a meaningful name besides the e-mail address, provided it is structured as a name enclosed in double quotes, followed by the e-mail address enclosed in "<   >"
For example: "Ido Millet" <ixm7@psu.edu> 
Thanks to Dave Clutter (Reed Manufacturing) for suggesting this enhancement.

Version 2.7.6000: Released 10/12/2003

¨    Added a button for launching the user manual from the 1st Tab of Visual CUT.

¨    The ini file (DataLink_Viewer.ini) now shows all options even if they are blank or left at their default values.  This makes it easier to identify and set these options.

 

¨    Incorporated an updated e-mail component (vbSendMail version 3.65 instead of 3.54) providing the following relevant improvements:

·         Removed extra blank line from the beginning of the message body

·         Changed login authentication code to improve compatibility

·         Other minor bug fixes

¨    Added support for e-mail authentication options (User ID & Password).  This change aims mainly at avoiding the need to set the Email Server to allow Relay.
Instead, the server authenticates the sender (Visual CUT).  You specify e-mail authentication information by opening DataLink Viewer.ini (located where you installed Visual CUT) and add 2 entries to the [Options] section:
Email_User_ID = your_User_ID
Email_Password = your_Password


Thanks to Greg Davis (Act Solutions) for suggesting and testing this enhancement.

¨    Added support for "POP First" authentication. Some servers (e.g., yahoo.com) require POP3 authentication before allowing SMTP transactions. In such cases, besides providing the Email_User_ID  and Email_Password  ini file options (as shown above), you also need to specify an Email_POP3_Server address (in 123.45.678.9 format or as a domain name, such as mymailhost.com).  For example:
Email_POP3_Server = mymailhost.com

 

¨    Added support for overriding the SMTP Port (default is 25). If your SMTP server is not using port 25, open DataLink Viewer.ini (located where you installed Visual CUT) and add 1 entry to the [Options] section:
Email_SMTP_Port = your_port_number

¨    Added a browse button to allow easy selection of export file names.
Thanks to Don Gilsdorf (Gain Focus Technologies) for the suggestion.

¨    Fixed an issue with single-pass printing to multiple Printers.

¨    Removed the size limitation (250 characters) on the total length of export file name, email to, email copy to, email blind copy to, and parameter values. 

Since installing new versions of Visual CUT doesn’t replace the Visual CUT.mdb file in existing installations, those users who desire these changes for their existing database should open their Visual CUT.mdb file (using MS Access) and change the data type of the following fields in the Report_Opt table from TEXT to MEMO:
   Export_File_Name
, Email_To, CC_To, BCC_To,
   Parm1, Parm2, Parm3, Parm4, Parm5, Parm6, Parm7, Parm8

Thanks to Tim Dunevant (The Matworks) for the suggestion.

¨    Added a new After_Burst_Batch command line argument for launching a batch file after each bursting cycle (and waiting for that batch file to complete processing).
Embedded field/formula names in the batch file are temporarily replaced with dynamic values (just as other options in the 3rd tab). 

Among other uses, this allows synchronized interweaving of group bursting printouts from multiple reports without the limitations of subreports (subreports can’t use different paper trays, different paper orientations, and nested subreports).  For full detail, see the new section on: "Interweaving Burst Printouts From Multiple Reports."

¨    Added support for specifying, in the command line, number of copies for printouts using a "Print_Copies" argument.  For example, using:
   "C:\Program Files\Visual CUT\Visual CUT.exe" -e "C:\Test\Report.rpt"     
   "Print_Copies
:3"
would override the "number of copies" option saved in Visual CUT’s 3rd tab and print 3 copies of the report. 

 

¨    Added dynamic control of print copies (whole report or each group burst). 
Imagine, for example, that your report (grouped by Order_ID) needs to print labels for each order according to how many line items the order contains. You can place a (suppressed) formula returning the count of line items in the Group header or footer. In the 3rd tab of Visual CUT, drag that formula into the print copies option (and delete the number that was there before).
If you now invoke Print Bursting (using Printer_Burst or Printer_Burst_Only command line argument), the label for each order will be printed the appropriate number of times.

Since installing new versions of Visual CUT doesn’t replace the Visual CUT.mdb file in existing installations, existing users who desire to take advantage of this change should open their Visual CUT.mdb file (using MS Access) and change the "Copies" field size in the Report_Opt table from 3 to 50.

Version 2.6.0000: Released 8/17/2003

¨    Added an option to combine multiple worksheets resulting from bursting exports to Excel into a single excel worksheet with a separate tab for each group export.
See the "Combining Excel Bursting Exports into a Single Multi-Tab Spreadsheet" section in the user manual for more detail.

Thanks to Vik Mohindra (Spryer Soft Inc.) for suggesting and testing this enhancement.

¨    Changed the default excel export format from fixed to variable column widths (based on objects in the ‘Whole Report’), matching the default behavior in Crystal.
(Note: applies only to the CR 9 runtime components version of Visual CUT).

¨    Added an option allowing you to ask Visual CUT to supply yesterday or today’s date as the parameter value for a discrete date parameter. 
This allows you to use the same report interactively (specifying any date as the parameter value) as well as in scheduled mode.  
It can also lead to faster report execution since using currentdate within the report can force record selection to be performed by Crystal instead of by the DBMS. 

One way of doing this is to specify Yesterday or Today as the parameter value in a command line invocation of Visual CUT.  For example:
   "C:\Program Files\Visual CUT\Visual CUT.exe" -e "C:\Test\Report.rpt"     
   "Parm1
:Today"

Another way of doing this is by opening Visual CUT.mdb and entering Yesterday or Today in the appropriate parameter column within the Report_Opt table.
Note that such a manual entry in the Report_Opt table would be overwritten if you interactively open the report in Visual CUT and click SAVE.

Thanks to Blaise Masse (University of New Hampshire) for suggesting and testing this enhancement.


Version 2.5.3800: Released 7/15/2003

¨    This version fixes a problem causing Visual CUT to ignore new parameter values when exporting a report opened interactively by the user if the report has previously saved settings with different parameter values (and the START button is clicked without first clicking SAVE). Instead, the parameter values last saved with the report in Visual CUT were used.

Thanks to Lori Fraticelli (K. Hovnanian Enterprises) for identifying the problem and testing the new version.

 

¨    Minor improvements to exporting speed.

 

¨    Minor enhancements to error messages.

¨    Compiled using recently updated runtime Merge Modules
(applies only to the CR 9 runtime components version of Visual CUT).

 

Version 2.5.3700: Released 7/07/2003

¨    Fixed a PDF bookmark issue (duplication/misplacement of bookmarks) when generating the group tree of bookmarks in PDF exports.

Thanks to Larry Bates (Syscon) for identifying the problem and testing the fix.


Version 2.5.3600: Released 6/12/2003

¨    Fixed an overflow problem when bursting a report with more than 326 different group values at Level 1. 

Thanks to Bill Arruda (Pragmeta) and Ben Pomeranz (WorldCom) for identifying the problem and testing the fix.

Version 2.5.3500: Released 5/25/2003

¨    Visual CUT can now create a "Group Tree" of bookmark inside exported pdf document. This functionality allows users to easily navigate through large PDF files.

You specify the desired Bookmark labels (and the page they point to) by inserting one formula for each Group Header that contributes a level to the "Group Tree".

For more information, see the section on Creating a "Group Tree" of Bookmarks in Exported PDF Files  in the Visual CUT User Manual. 

 

¨    After PDF exports, Visual CUT now sets the summary information of the resulting pdf document according to the summary information set for the report in Crystal.
These properties include Author, Title, Subject, and Keywords.

For more information, see the section on  Setting PDF Document Properties After Export  in the Visual CUT User Manual.

 

¨    For export and/or e-mail bursting processes, the progress window now shows a progress bar and a counter:


Thanks to Jon Palmbak (LeBoeuf, Lamb, Greene & MacRae, L.L.P.) for suggesting and testing these enhancements.

 

¨    Added an Export Format option of HTML 40 (Page Navigation)
This option exports each page to a separate HTML file
(under the specified export file folder) and adds HTML page navigation links to the page footers.

To enable this option, users with existing Visual CUT installations should add the following highlighted record to the Export_Opt table in Visual CUT.mdb

image


Thanks to Subu Swayam (Clark County Washington) for suggesting and testing this enhancement.

 

Version 2.5.3400: Released 4/16/2003

¨    The Silent Failure option for Scheduled/Unattended Execution via Command Lines or Batch Files (see Update History for Version 2.5.0) now avoids message boxes in cases where e-mail processing failed.  Instead, the error message is recorded in Failure.log

¨    A new Silent Failure option for Attended Execution (user presses the START button interactively) was added.  This option allows users to hit the START button and walk away when the processing takes a long time.
When this option is turned on, any errors (e.g., one of the Groups didn’t have an e-mail address associated with it) are recorded in Failure.log instead of halting the execution with a message box.

Here is an example of such an error message in the Failure.log: 
--------------------------------------------------------------------------------------------------------------------------------------
An attempt to send e-mail failed for the following reason(s): No Recipient E-mail Address Specified
C:\Program Files\Visual CUT\Visual_CUT_with_Deliberate_Email_Problems.rpt: 4/9/2003 1:06:43
--------------------------------------------------------------------------------------------------------------------------------------

You turn on this option by opening DataLink Viewer.ini (located where you installed Visual CUT) and specifying the following option:
[Options]
Silent_Attended_Failure=TRUE


Thanks to Jon Palmbak (LeBoeuf, Lamb, Greene & MacRae, L.L.P.) for suggesting and testing these changes.

 

¨    Fixed a problem with redundant prompting for Parameters with Currency data type (during interactive as well as scheduled processing of reports).

Thanks to Helen Hiebert (Independent Consultant) for identifying the problem and testing the fixed version.

¨    Initial attempt to connect (before prompting user) is now made without the User ID stored by Crystal for each table.  This avoids logon problems against certain data sources (e.g., SQL Server) when the data source uses integrated (NT) authentication or when the ODBC data source includes saved settings for User ID & Password.. 

Thanks to Dave Neubauer (Bekaert Specialty Films) for identifying the problem and testing the fixed version.

¨    E-mail message text that starts with <HTML> and ends with </HTML> is now interpreted as HTML allowing fancy formatting effects.
Thanks to Nathaniel Wetherbee (PFPC) for the suggestion.


Version 2.5.3200: Released 3/29/2003

¨    Burst-exporting to Crystal RPT files (with saved data) results in files as big as the original (non-bursted) file size, even though these files show only the bursted portion.  Visual CUT can now take an extra step that shrinks the size of these RPT files.
You turn on this option by opening DataLink Viewer.ini (located where you installed Visual CUT and automatically created the 1st time you run Visual CUT) and specifying the following option:
[Options]
Shrink_Burst_to_RPT_Files=TRUE


¨    Added a Command Line option to burst a report to a printer (to take advantage of automatic stapling or faxing).

¨    Fixed a problem where unattended processing of reports using Oracle Stored Procedures failed with a logon prompt (unless the scheduling string specified the user_id & password). 

Thanks to Ben Pomeranz (WorldCom) and Shawn Wright (Shawnigan Lake School) for suggesting and testing these changes.

Version 2.5.102: Released 2/27/2003

¨    Removed the size limitation (250 characters) on the total length of e-mail Attachment file names. 
Since multiple files can be attached to a single e-mail (using ‘;’ to separate the file names), one user ran into a need to specify file names that add up to more than 250 characters. 
The new version has no size limit on that option.

Current users should simply open their Visual CUT.mdb and change the data type of the  Attachments field in the Report_Opt table from TEXT to MEMO.

Thanks to Bernard Paes (Flag Choice Hotels) for suggesting the change.

Version 2.5.101: Released 2/10/2003

¨    Removed domain name checking from e-mail addresses.  This is due to a variety of new domain names being added to the internet over time. 

Thanks to Larry Bodie (Kelsan, Inc.) for suggesting the change.

Version 2.5.1: Released 1/22/2003

¨    Fixed an issue with batch file scheduling of reports for printout only.

Thanks to Mike Marsten (UCSF) for identifying the issue and testing the fix.

 

Version 2.5.0: Released 12/17/2002

¨    Reports that result in zero records can now be viewed and set up interactively.
Thanks to Abbas Rostami (Cubic Corporation) for suggesting this functionality.

¨    Schedule/Unattended Execution via Command Lines or Batch Files now allows silent  logging of any failures and avoiding message boxes.  The details about the failure get logged into a text file (Failure.Log) located where you installed Visual CUT.  You turn on this option by opening DataLink Viewer.ini (located where you installed Visual CUT and automatically created the 1st time you run Visual CUT)
and specifying the following option:
[Options]
Silent_Unattended_Failure=TRUE


¨    In order to respond (for example via Batch File IF THEN logic) to Success or Failure of Visual CUT processing, you can now check for the existence of Success.txt (in the same directory where Visual CUT is installed) after each invocation of Visual CUT processing via a command line. 

You turn on this option by opening DataLink Viewer.ini (located where you installed Visual CUT and automatically created the 1st time you run Visual CUT)
and specifying the following option:
[Options]
Create_Success_File=TRUE

 

Thanks to Mike Marsten (UCSF) for suggesting and testing this enhancement.


Version 2.4.8: Released 12/10/2002

¨    Fixed a recently-introduced bug causing exporting failure ("The remaining text does not appear to be part of the formula") when Bursting a report that doesn’t have a Record Selection Formula.
Thanks to Rick Scero from SITEL for catching the problem.

¨    Added functionality to allow command line arguments to override the (encrypted) login information saved for the report in Visual CUT
(for example, … "user_id:dba" "password:sql"). 
In cases where different users own different schemas in the same database, this allows dynamic switching between these schemas.
Thanks to Abbas Rostami (Cubic Corporation) for suggesting this functionality.

¨    Modified the Login_Opt table in Visual CUT.mdb to allow handling of cases where the Crystal runtime components return a blank Server Name in the connection properties of a table.  Note: if you already have Visual CUT installed you need to do the following before installing this new version:

1.    Before installing,
rename your Visual CUT.mdb file (to Visual CUT OLD.mdb)
to allow the install to include the new Visual CUT.mdb file. 

2.    Run REMOVE and INSTALL using the new msi file

3.    Open Access twice: one instance with Visual CUT OLD.mdb
and the other instance with Visual CUT.mdb 

4.    Select and copy (Ctrl-C) the records in the old Login_Opt table

5.    Switch to the new Visual CUT.mdb, open the new Login_Opt table
and append (Edit, Paste Append) the records into it.
this allows you to retain the (encrypted) login information for the reports you added to Visual CUT.

6.    Copy the Report_Opt table from Visual CUT OLD.mdb
over (overwrite) the same table in Visual CUT.mdb
this allows you to retain the information about the reports you added to Visual CUT.

¨      Implemented an improvement to exporting speed.

 


Version 2.4.4: Released 11/21/2002

¨    Added dll files for exporting to HTML on PCs that may be missing those files.

¨    The new version tolerates command line arguments that end with spaces.

Version 2.4.3: Released 11/15/2002

¨    Added support for exporting to and dynamically creating subdirectories using UNC in addition to Mapped Network Drive references. For example:
\\server123\ixm7\{@Year}\Sales for {Product_Type.Name}.pdf
Instead of
P:\{@Year}\Sales for {Product_Type.Name}.pdf
Thanks to Mike Marsten (UCSF) for suggesting and testing this enhancement.

Version 2.4.0: Released 11/11/2002

¨    Fixed a bug causing failures when saving (interactive mode) and using (scheduled or command line mode) the encrypted logon information for reports.

¨    When exporting to non-existent or non-permissible drive & directory, the user (during an interactive session) now gets a message box explaining the problem, an indication that exporting failed (in the progress window) and a clean return to the third tab.

¨    Fixed a problem of failed scheduled printing without command line Printer argument.

¨    When clicking Cancel from a log-in dialog box, Visual CUT now avoids repeated attempts (log-in windows) to log-in to each table in the main report as well as in the subreports.
Thanks to Mike Marsten (UCSF) for identifying and testing most of the issues above.

 Version 2.3.5: Released 11/02/2002

Added support for single-pass distribution of Crystal reports to multiple printers on the network: 

¨    "Printer_Only:" argument (e.g., "Printer_Only:\\sobpc10\sobhp04") now allows you to schedule printing and skip any exporting, bursting, and e-mailing options saved for the report in Visual CUT.  This allows you to save the report once in Visual CUT and control which functionality (printing or exporting & e-mailing) via command line arguments.

¨    Visual CUT can now accept an unlimited number of "Printer" and/or "Printer_Only" command line arguments and send the report to all these printers. This improves performance, compared to specifying each printer destination in a different command line, because the report gets retrieved and processed only once.

Version 2.3.0: Released 10/31/2002

¨    Added functionality to allow a command line argument (for example, "Priner:\\sobpc10\sobhp04") to specify the Printer destination.  This allows you to save a Crystal report once within Visual CUT but schedule printouts to different printer destinations on your network. 

Version 2.2.0: Released 10/30/2002

¨    Added functionality to allow command line arguments (for example, "Parm1:1998") to override the parameter values saved for the report in Visual CUT. 
This allows external control of parameter values without the need to open the report in Visual CUT, specify new parameter values, and save the new settings each time new parameter values are needed.
Thanks to Jorge Vazquez (Merck) and Mike Marsten (University of California San Francisco) for the enhancement idea.

 

¨    Corrected the Tab sequence in the login dialog (used for secure data sources). 

Version 2.1.0: Released 10/21/2002

¨    Fixed electronic bursting problem when grouping on text with single quotes (for example, O’Keefe). The new version can handle any number of single quotes embedded in the text of the field/formula used for Grouping at level 1).

Thanks to Dave Hawkins from www.orbitz.com for catching the problem.

Version 2.0.0: Released 10/10/2002

¨    Added compatibility with Crystal Reports Version 9.0

¨    Modified Print button to allow selection of printers.

 

Version 1.4.0 Released 9/28/2002

¨    Implemented new functionality allowing users to control how empty reports (zero selected records) are handled during scheduled execution:

Using the e command line argument aborts execution of such reports silently (no message boxes that could interfere with continued processing of other scheduled repots). This is the correct choice if you have reports that should be e‑mailed to users only if they contain records.  This is a typical approach for exception reports.

Using the new E command line argument forces execution of empty reports. This is the correct choice if you have reports that should be exported and e-mailed to the users even if empty. 

Thanks to Jim Woodin  (Diamond V Mills) for the enhancement idea.

¨    The Status Bar now shows the number of records selected in the report instead of number of records read from the database.

¨    Visual CUT can now be installed on PCs without a Crystal Reports installation.

Version 1.3.3 Released 9/07/2002

¨    Integrated the functionality of DataLink Viewer  into Visual CUT.
This allows you to select parameter values based on live data in the database. You can experience the new functionality by simply using Visual CUT to view the following sample report: DataLink_Viewer_Year_and_Product_Prompts.rpt report  
For more detail, see the DataLink Viewer user manual at www.MilletSoftware.com

¨    Added Minimize & Resize capabilities to the Progress Window.

¨    Blocked the display of Group Level 1 fields & Formulas on the 3rd Tab in cases where the bursting option is disabled.  Only fields from the Report Header or Footer are available in such cases.  The logic is that if no bursting is possible, only values for the whole report are relevant in specifying e-mailing options.

¨    In cases were scheduled or unattended processing is initiated (using the e command line argument) the main form as well as the progress window are now minimized as icons on the Task Bar.  You can restore the progress window (by clicking the Visual CUT icon on the Task Bar) in case you want to observe or stop the unattended processing.   Thanks to Jim Woodin  (Diamond V Mills) for the enhancement idea.

¨    Changed the user interface (hourglass icons, status bar messages, incrementing group value count) to clarify to the user what is going on when opening of a report takes a long time.  Very large reports or reports with lots of subreports  take some time to a) open in the Preview Tab, and b) Process Group Level 1 values and formulas when moving to the processing (3rd) tab.   Thanks to José L. Alsina (Innovatec) for the enhancement idea.

 

Version 1.2.5 Released 8/09/2002

¨    Tab 3 now shows what printer was associated with the report in Crystal (using the File, Printer Setup… dialog).  Visual CUT sends reports scheduled for printing to that printer.  Within Crystal, you can associate each report with a different printer using the File, Printer Setup… dialog.
Thanks to Jim Woodin  (Diamond V Mills) for the enhancement idea.

¨    Fixed an issue with the "scheduling string" on tab 3 not being refreshed.

¨    Stopped a warning message that appeared when scheduling a report only for printing.

¨    Minor enhancements to user interface, including better use of space when user increases the size of the window.

 

Version 1.2.4 Released 8/05/2002

¨    The progress window now shows a STOP button allowing you to abort the exporting/emailing process. 

¨    Modified the software installation to rely on whatever exporting dll’s are installed for Crystal Reports. This means that if you plan to use the exporting functionality of Visual CUT, your PC must have Crystal Reports installed.  This change aims at removing exporting failures on some PC installations due to dll conflicts between Visual CUT and Crystal Reports.

Version 1.2.3 Released 8/02/2002

¨    The path (not just the name) of the exported file name can now be dynamic (drag-and-drop fields and formulas).  If the specified subdirectory structure doesn’t exist, it is created automatically.  This allows for easy archiving of exported reports into dynamically specified directory (or web site) structures. Thanks to Jim Woodin  (Diamond V Mills) for the enhancement idea.

 

¨    If a report with Saved Data is opened interactively, Visual CUT now asks the user if current data from the database should be retrieved.  If the user answers ‘No’, the Saved Data is used. This allows processing of reports without connection to a database.  Thanks to David Parker of VendorsInfo.Com for the enhancement idea.
Note: Scheduled reports with saved data use the saved data.

¨    Solved an Issue with processing options not being saved the first time.

Version 1.2.0: Released 7/30/2002

¨    Capture report-level and group level-1 fields & formulas of any data type provided they are placed in report or group level-1 headers and footers. The fields & formulas are captured even if they, or even the section as a whole, are suppressed.

¨    Support electronic bursting if Group Level-1 is Text or Numeric field/formula.

¨    Print Scheduling ability (including multiple copies and collating options).

¨    Manage reports that are not designed for bursting.  Useful in cases where you simply want to schedule a report for printing or full exporting and e-mailing. 

¨    Save and apply (for scheduling) multi-value parameters information
(discrete, range, and even mixed type values can now be saved for later scheduling).

¨    Fixed HTML export issue.

¨    Improved speed of multiple e-mail operations.

¨    Improved the display of processing progress and added elapsed time information.

Version 1.1.0: Released 6/25/2002

¨    Added prompting and encrypted management of Logon information for
multiple data sources and subreports.

¨    Added Scheduling support.  

Version 1.0.0: Released 6/14/2002


Known Issues and Limitation

 

1.      The Application stores Logon information in a strongly encrypted format to allow scheduled operations). While this information is NOT available during interactive use of the application, it allows scheduling (-e switch in RUN command line) using this stored logon information.  Hence, make sure your PC is accessible only to those who have access rights to all reports managed by Visual CUT.

 

2.      Reports that use a Business Objects UNIVERSE as a data source can’t be refreshed in Visual CUT.  Instead, use the BO platform to schedule exports of such reports to a Crystal Report format.  This provides an rpt file with saved data. You can then burst/process these reports via command line processing in Visual CUT, provided you turn on 'Use Saved Data in Scheduled Reports' in the Options dialog or include ..."Use_Saved_Data:True" in the command line. 

 

3.      Burst-exporting to Crystal RPT files format results in files with saved data for the whole report because the applied filter only hides data.  To ensure the resulting rpt files include only the data for each group, you can instruct Visual CUT to generate the rpt files by discarding their saved data and retrieving only the data for each group.  This takes more time but ensures that recipients can't gain access to data that doesn't belong to the exported group and that file sizes are smaller.  To use this option, turn on the "Shrink Bursted RPT Files" in the Options dialog. Note: this problem doesn’t affect any other export format. This means you should not worry about this when exporting to pdf, excel, etc.

 


4.      Patrick Pettibon from MatchMarketing (www.matchmarketing.com)

has identified  a problem and a solution to image quality issue when previewing or exporting (PDF/RTF/Word) Crystal Reports that have charts, pictures, subreports, or OLE objects. 

You basically need to set the value of two keys in the registry:

1.         BitMapMagnifDenominator   (value should be 1)

2.         BitMapMagnifNumerator       (value should be 4)

 

-------------------------------------------------------------------------------------------------

For Crystal 8.5:

HKEY_CURRENT_USER\SOFTWARE\SEAGATE SOFTWARE\CRYSTAL REPORTS\EXPORT  

 

For Crystal 9:

HKEY_CURRENT_USER\SOFTWARE\CRYSTAL DECISIONS\9.0\CRYSTAL REPORTS\EXPORT
-------------------------------------------------------------------------------------------------

However, when running a  tool such as Visual CUT, similar settings are also required

under a different registry folder. Here are the required settings for Visual CUT 11:

image

 

You can download a zip file with detailed instructions, Before/After images, and REG files (one each for 9.0, 8.5, and XI R2 versions) that can be imported into the registry in order to set the required keys from: http://www.milletsoftware.com/Improving_Image_Quality.zip

The usual warnings about editing the registry apply.


 

 

5.      Exports to pdf may result in smaller font size.  This is a Crystal issue, and can be fixed using some registry entries. See blog by Ken Hamady. The simplest solution is described here.

A more complex solution is to set the following registry keys:

HKEY_LOCAL_MACHINE\SOFTWARE\Business Objects\Suite 11.5\Crystal Reports\Export\PDF\TruncationAdjustment (=2)

HKEY_LOCAL_MACHINE\SOFTWARE\Business Objects\Suite 11.5\Crystal Reports\Export\PDF\UsePrecisePositioningForText (=1)

This enlarges the font and also eliminate the truncation in most cases, and when it doesn’t, you can increase the TruncationAdjustment from 2 to 3 (or higher) until the problem is resolved.

 

Note: On a 64-bit machine, the registry paths would start with
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\...
like this:

image