Internet Document Server Guide

Save this PDF as:
 WORD  PNG  TXT  JPG

Size: px
Start display at page:

Download "Internet Document Server Guide"

Transcription

1 Start Oracle Documaker Internet Document Server Guide version 2.3 Part number: E November 2011

2 Notice Copyright 2009, 2011, Oracle and/or its affiliates. All rights reserved. The Programs (which include both the software and documentation) contain proprietary information; they are provided under a license agreement containing restrictions on use and disclosure and are also protected by copyright, patent, and other intellectual and industrial property laws. Reverse engineering, disassembly, or decompilation of the Programs, except to the extent required to obtain interoperability with other independently created software or as specified by law, is prohibited. The information contained in this document is subject to change without notice. If you find any problems in the documentation, please report them to us in writing. This document is not warranted to be error-free. Except as may be expressly permitted in your license agreement for these Programs, no part of these Programs may be reproduced or transmitted in any form or by any means, electronic or mechanical, for any purpose. If the Programs are delivered to the United States Government or anyone licensing or using the Programs on behalf of the United States Government, the following notice is applicable: U.S. GOVERNMENT RIGHTS Programs, software, databases, and related documentation and technical data delivered to U.S. Government customers are "commercial computer software" or "commercial technical data" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the Programs, including documentation and technical data, shall be subject to the licensing restrictions set forth in the applicable Oracle license agreement, and, to the extent applicable, the additional rights set forth in FAR , Commercial Computer Software--Restricted Rights (June 1987). Oracle USA, Inc., 500 Oracle Parkway, Redwood City, CA The Programs are not intended for use in any nuclear, aviation, mass transit, medical, or other inherently dangerous applications. It shall be the licensee's responsibility to take all appropriate fail-safe, backup, redundancy and other measures to ensure the safe use of such applications if the Programs are used for such purposes, and we disclaim liability for any damages caused by such use of the Programs. The Programs may provide links to Web sites and access to content, products, and services from third parties. Oracle is not responsible for the availability of, or any content provided on, third-party Web sites. You bear all risks associated with the use of such content. If you choose to purchase any products or services from a third party, the relationship is directly between you and the third party. Oracle is not responsible for: (a) the quality of third-party products or services; or (b) fulfilling any of the terms of the agreement with the third party, including delivery of products or services and warranty obligations related to purchased products or services. Oracle is not responsible for any loss or damage of any sort that you may incur from dealing with any third party. Oracle, JD Edwards, and PeopleSoft are registered trademarks of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.

3 THIRD PARTY SOFTWARE NOTICES This product includes software developed by Apache Software Foundation ( THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Copyright The Apache Software Foundation. All rights reserved. This product includes software distributed via the Berkeley Software Distribution (BSD) and licensed for binary distribution under the Generic BSD license. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Copyright 2009, Berkeley Software Distribution (BSD) This product includes software developed by the JDOM Project ( THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE JDOM AUTHORS OR THE PROJECT CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Copyright (C) Jason Hunter & Brett McLaughlin. All rights reserved. This product includes software developed by the Massachusetts Institute of Technology (MIT). THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 2009 MIT This product includes software developed by Jean-loup Gailly and Mark Adler. This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Copyright (c) Jean-loup Gailly and Mark Adler

4 This software is based in part on the work of the Independent JPEG Group ( This product includes software developed by the Dojo Foundation ( THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Copyright (c) , The Dojo Foundation. All rights reserved. This product includes software developed by W3C. Copyright 2009 World Wide Web Consortium, (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, Keio University). All Rights Reserved. ( This product includes software developed by Mathew R. Miller ( Copyright (c) ComputerSmarts. All rights reserved. This product includes software developed by Shaun Wilde and distributed via Code Project Open License ( THIS WORK IS PROVIDED "AS IS", "WHERE IS" AND "AS AVAILABLE", WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES OR CONDITIONS OR GUARANTEES. YOU, THE USER, ASSUME ALL RISK IN ITS USE, INCLUDING COPYRIGHT INFRINGEMENT, PATENT INFRINGEMENT, SUITABILITY, ETC. AUTHOR EXPRESSLY DISCLAIMS ALL EXPRESS, IMPLIED OR STATUTORY WARRANTIES OR CONDITIONS, INCLUDING WITHOUT LIMITATION, WARRANTIES OR CONDITIONS OF MERCHANTABILITY, MERCHANTABLE QUALITY OR FITNESS FOR A PARTICULAR PURPOSE, OR ANY WARRANTY OF TITLE OR NON-INFRINGEMENT, OR THAT THE WORK (OR ANY PORTION THEREOF) IS CORRECT, USEFUL, BUG-FREE OR FREE OF VIRUSES. YOU MUST PASS THIS DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE WORK OR DERIVATIVE WORKS. This product includes software developed by Chris Maunder and distributed via Code Project Open License ( THIS WORK IS PROVIDED "AS IS", "WHERE IS" AND "AS AVAILABLE", WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES OR CONDITIONS OR GUARANTEES. YOU, THE USER, ASSUME ALL RISK IN ITS USE, INCLUDING COPYRIGHT INFRINGEMENT, PATENT INFRINGEMENT, SUITABILITY, ETC. AUTHOR EXPRESSLY DISCLAIMS ALL EXPRESS, IMPLIED OR STATUTORY WARRANTIES OR CONDITIONS, INCLUDING WITHOUT LIMITATION, WARRANTIES OR CONDITIONS OF MERCHANTABILITY, MERCHANTABLE QUALITY OR FITNESS FOR A PARTICULAR PURPOSE, OR ANY WARRANTY OF TITLE OR NON-INFRINGEMENT, OR THAT THE WORK (OR ANY PORTION THEREOF) IS CORRECT, USEFUL, BUG-FREE OR FREE OF VIRUSES. YOU MUST PASS THIS DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE WORK OR DERIVATIVE WORKS.

5 This product includes software developed by PJ Arends and distributed via Code Project Open License ( THIS WORK IS PROVIDED "AS IS", "WHERE IS" AND "AS AVAILABLE", WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES OR CONDITIONS OR GUARANTEES. YOU, THE USER, ASSUME ALL RISK IN ITS USE, INCLUDING COPYRIGHT INFRINGEMENT, PATENT INFRINGEMENT, SUITABILITY, ETC. AUTHOR EXPRESSLY DISCLAIMS ALL EXPRESS, IMPLIED OR STATUTORY WARRANTIES OR CONDITIONS, INCLUDING WITHOUT LIMITATION, WARRANTIES OR CONDITIONS OF MERCHANTABILITY, MERCHANTABLE QUALITY OR FITNESS FOR A PARTICULAR PURPOSE, OR ANY WARRANTY OF TITLE OR NON-INFRINGEMENT, OR THAT THE WORK (OR ANY PORTION THEREOF) IS CORRECT, USEFUL, BUG-FREE OR FREE OF VIRUSES. YOU MUST PASS THIS DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE WORK OR DERIVATIVE WORKS. This product includes software developed by Erwin Tratar. This source code and all accompanying material is copyright (c) Erwin Tratar. All rights reserved. THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. USE IT AT YOUR OWN RISK! THE AUTHOR ACCEPTS NO LIABILITY FOR ANY DAMAGE/LOSS OF BUSINESS THAT THIS PRODUCT MAY CAUSE. This product includes software developed by Sam Leffler of Silicon Graphics. THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE Copyright (c) Sam Leffler Copyright (c) Silicon Graphics, Inc. This product includes software developed by Guy Eric Schalnat, Andreas Dilger, Glenn Randers-Pehrson (current maintainer), and others. ( The PNG Reference Library is supplied "AS IS". The Contributing Authors and Group 42, Inc. disclaim all warranties, expressed or implied, including, without limitation, the warranties of merchantability and of fitness for any purpose. The Contributing Authors and Group 42, Inc. assume no liability for direct, indirect, incidental, special, exemplary, or consequential damages, which may result from the use of the PNG Reference Library, even if advised of the possibility of such damage. This product includes software components distributed by the Cryptix Foundation. THIS SOFTWARE IS PROVIDED BY THE CRYPTIX FOUNDATION LIMITED AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE CRYPTIX FOUNDATION LIMITED OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE Copyright The Cryptix Foundation Limited. All rights reserved.

6 This product includes software components distributed by Sun Microsystems. This software is provided "AS IS," without a warranty of any kind. ALLEXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANYIMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BELIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. Copyright (c) 1998 Sun Microsystems, Inc. All Rights Reserved. This product includes software components distributed by Dennis M. Sosnoski. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS'" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Copyright Dennis M. Sosnoski. All Rights Reserved It also includes materials licensed under Apache 1.1 and the following XPP3 license THIS SOFTWARE IS PROVIDED "AS IS'" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Copyright 2002 Extreme! Lab, Indiana University. All Rights Reserved This product includes software components distributed by CodeProject. This software contains material that is The Ultimate Toolbox, all rights reserved. This product includes software components distributed by Geir Landro. Copyright Geir Landro JavaScript Tree

7 This product includes software components distributed by the Hypersonic SQL Group. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS'" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE Copyright by the Hypersonic SQL Group. All Rights Reserved This product includes software components distributed by the International Business Machines Corporation and others. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright (c) International Business Machines Corporation and others. All rights reserved. This product includes software components distributed by the University of Coimbra. University of Coimbra distributes this software in the hope that it will be useful but DISCLAIMS ALL WARRANTIES WITH REGARD TO IT, including all implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. In no event shall University of Coimbra be liable for any special, indirect or consequential damages (or any damages whatsoever) resulting from loss of use, data or profits, whether in an action of contract, negligence or other tortious action, arising out of or in connection with the use or performance of this software. Copyright (c) 2000 University of Coimbra, Portugal. All Rights Reserved. This product includes software components distributed by Steve Souza. THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS'" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Copyright 2002, Steve Souza All Rights Reserved. This product includes software developed by the OpenSymphony Group ( Copyright The OpenSymphony Group. All Rights Reserved.

8 PANTONE (R) Colors displayed in the software application or in the user documentation may not match PANTONE-identified standards. Consult current PANTONE Color Publications for accurate color. PANTONE(R) and other Pantone LLC trademarks are the property of Pantone LLC. (C) Pantone LLC, Pantone LLC is the copyright owner of color data and/or software which are licensed to Oracle to distribute for use only in combination with Oracle Documaker. PANTONE Color Data and/or Software shall not be copied onto another disk or into memory unless part of the execution of Oracle Documaker.

9 Contents Chapter 1, Processing Documents Using the Internet 2 Overview 5 Architectural Changes in Version 2.x 6 Required Components 6 Components Available from Oracle Insurance Chapter 2, Using the Internet Document Server 11 Overview 13 Creating Front-End Solutions 13 Using JSP 14 Using the IDSJSP JavaBean 14 Using ASP 15 Using the IDSASP Object 17 Sending and Receiving Attachment Fields 19 Showing a PDF File 22 Using the HTTP Parsing and Uploading APIs 26 Using the XMLSession Rules 26 IDSASP Methods 28 IDSJSP Methods 30 XMLSession Rules 33 Using IDSXML 34 XMLTransformErrors 35 XMLTransformErrors2 36 XMLLoadINI 37 XMLLoadXML 37 XMLLoadXSL 38 XMLGetGroupOptionValue 38 XMLGetValue 38 XMLGetGroup 39 XMLUpdateGroup 41 XMLBuffer 41 XMLLoadProcessor ix

10 41 XMLAddParameterToXSL 42 XMLTransformWithXSL 43 XMLProcessWithXSL 43 XMLUpdateFormset 44 XMLProcessFormset 46 Using Multiple Servers 47 Determining if Your Transactions are CPU or I/O Intensive 48 Performance Measurements when Using Multiple Servers 49 Setting Up Additional Servers 50 Setting Up a Windows NT Service 51 Handling Multi-threaded Requests 53 Using the Java Test Utility 54 Using Rules Written in Other Scripting Languages 55 Using IDS as a Client to Another IDS 56 Using the IDSClientRule 60 Monitoring IDS with SNMP Tools 61 Monitoring Requests 62 Managing IDS Instances 71 Sending Results and Receiving Requests in Multiple Formats 72 Configuring and Deploying Marshallers 74 Logging and Tracing 77 Naming Logging Messages 80 Using Logging Categories 83 Logging Information about Requests 87 Querying Transaction Information 88 getmetadata 89 QueryTranLogs 90 Monitoring Performance Statistics 91 Generating a Logging Configuration File 91 Using Logging Categories to Access the Internal Format of Requests 93 Configuring IDS 94 Running IDSConfig 94 Creating New Files 94 Adding Nodes 94 Adding Nodes with Text x

11 95 Editing Nodes 95 Copying Nodes 95 Moving Nodes 95 Adding Attributes 96 Adding Comments 96 Adding Text 96 Adding a Request or Function 96 Adding an IDS Function 97 Converting DOCSERV.INI or DOCCLIENT.INI Files into XML Format 97 Adding a Section or Entry 97 Locating Text 97 Importing Configuration Information 98 Configuring MQSeries Buffer Sizes 99 Testing File Transmission 100 Referencing Attachment Variables 101 Using Unicode in Attachment Variables 102 Using the Message Queues 102 Choosing the Right Queuing Options 103 Understanding the Router Process 104 How HTTP Queues are Handled 104 Using the Router Section 106 Using Multiple Queuing Systems 108 Using the Java Message Service (JMS) 108 Setting up JMS 111 Using WebSphere MQ 112 Setting Up WebSphere MQ 113 Using MSMQ 118 Using Security Exits 119 Using Client Connection Definition Tables 119 Using SSL Connections 120 Using the ReplyToQueueName and ReplyToQueueManagerName Properties 120 Suppressing Queue Error Messages 121 Persisting Queue messages 122 Purging Cached Files 124 Using HTTP xi

12 128 Using Multiple Bridges 130 Submitting Batch Requests 131 Printing in Duplex Mode to PCL Printers 132 Using IDS to Distribute 132 Modifying the docserv.xml Configuration File 133 Modifying the DAP.INI File 135 Attachment Variables Used by Rules 136 Using Rules 138 Using the Bus 141 Attaching Documents to Documaker Transactions 141 File with the Name and Type in IDS Attachment Variables 142 File Sent to IDS in the Message 142 File Accessible by Documaker Bridge 143 Document in the Documanage Repository 144 Error Messages 144 Specifying Duplex Options for the Attached Form 145 Debugging 147 Using IDS to Run Documaker 148 Setting Up IDS 149 Setting up Multiple Internet Document Servers 149 Controlling Documaker 152 Setting Up Documaker 154 Naming Conventions for Output Files 155 Creating DPW Files 156 Accessing IDS Attachment Variables in GenData 156 Using TCP/IP Communications 158 Customizing the Execution of Documaker 161 Using the XML Messaging System 163 Client Request Messages 166 Server XML Response Messages 167 Using XML SOAP Outside of Messaging Systems 169 Connecting to an SQL Database 170 Differences between Microsoft s ADO and IDSSQL 170 Setting up IDSSQL 170 IDSSQL Classes 170 IDSSQL.ADO xii

13 171 IDSSQL.IDSRC 171 Example Script 174 Using the Thin Client Forms Publisher 175 Pausing IDS 175 DSIQueryStatus 176 DSISetStatus 178 Executing Request Types at Run Time 180 Publishing Your Forms on the Web 181 Formatting Text with XML Markup 182 Encrypting and Decrypting Data Files 183 Using Multiple Attachment Values with the Same Name 185 getentries 186 Converting XML Files Using a Template 190 Customizing Your System 193 Handling Security Issues 193 Using Firewalls 193 Implementing Security for Web Applications 195 Using LDAP Support 196 Using Default Time-outs for DSILIB-Based Client Applications 198 Running Timed Requests 199 In-Process Rendering for DPAView 199 DRLGetConfig 200 Using DAL Functions for WIP Column Access 202 Using Enterprise Web Processing Services 203 Determining the Patch Level Chapter 3, Creating Output Files 206 Creating PDF Files 207 Creating HTML Files 208 Creating XML Output xiii

14 Chapter 4, Using Docucorp Publishing Services 212 DPS Object Properties 218 Setting Default Parameters 220 Sample VB Code 221 Sample C Code 223 Sample Java Code 225 Setting Up IDS 227 Setting Up Documaker Chapter 5, Customizing idocumaker, ipps, and WIP Edit 230 Setting Up a Favorites List for idocumaker 232 Attaching Files to Transactions as Forms 232 Specifying the File Name and Type in IDS Attachment Variables 233 Sending the File to IDS in a Message 233 Storing the File on a Disk Accessible to Documaker Bridge 234 Storing the File in a Documanage Repository 235 Error Messages 235 Specifying Duplex Options for the Attached Form 236 Debugging 238 Designating Read-Only Multiline Text Field Paragraphs 239 Printing on Your Workstation Printer 240 Preventing the Session from Expiring 241 Passing WIP Record IDs to the MergeWIP Rule 242 Automatically Updating idocumaker 242 Configuring IDS to Update idocumaker 243 On the Client Side 244 Additional Utilities 244 Checking Version Information 246 Using the WIP Edit Plug-in 250 Controlling the Interface 258 Setting Up Custom Functions xiv

15 259 Changing the User Associated with a Document 259 Sending Passwords 260 Requesting a Dictionary 261 Trapping Events 261 Tracking Session Information 263 Setting Up Printers Chapter 6, Using the DP.DLL ActiveX Interface 268 Requirements 269 Setting Up the Configuration File 271 Properties 272 Methods 273 AddNameValuePair 273 Bin2Unicode 273 CleanCache 274 FileExists 274 GetMsg 274 GetUniqueString 274 Initialize 275 InitializeDefaults 275 ProcessTrn 275 PutMsg 276 ReadIniOptions 276 RequestValue 277 ResultValue 277 SetGUID 277 SOAPAddAttachment 278 SOAPGetAttachment 278 SOAPGetAttachmentAsBuffer 278 SOAPLoadAttachment 279 SOAPUnloadAttachment 279 Terminate 279 Trace 279 Unicode2Bin xv

16 280 WriteBinFile 280 WriteToLog 281 Examples Appendix A, System Files 286 IDS Configuration Files 289 Sample Output Files Appendix B, Error Messages 296 Displaying Error Messages 300 AFP Error Messages 302 Error Message Listing Appendix C, Choosing a Paper Size 332 US Standard Sizes 333 ISO Sizes 336 Japanese Standard Sizes 337 Printer Support for Paper Sizes 341 Paper Sizes for AFP Printers 343 Index xvi

17 Chapter 1 Processing Documents Using the Internet Oracle Insurance offers a comprehensive range of scalable high-performance products for every step in the life cycle of a document. These include... Creation Solutions to capture data and create forms Publishing Solutions to volume produce personalized documents Archival Solutions to intelligently store and retrieve documents Management Solutions to control and network documents Development Tools to customize your Oracle Insurance solutions Oracle Insurance s Management Solutions give you the ability to move and view your documents across the enterprise. In addition to advanced document networking communication products, Oracle Insurance has Internet solutions for managing your documents. Docupresentment s Internet Document Server (IDS) helps manage the flow of your documents. IDS lets you access your documents with a web browser from your intranet or the Internet. The standard web browser interface includes security features, document database lookup, and document viewing in PDF format using the Adobe Acrobat Reader. This chapter provides an overview of IDS, its concepts, what it can offer you, as well as how it fits into the Oracle Insurance s family of solutions. 1

18 Chapter 1 Processing Documents Using the Internet OVERVIEW For many years Oracle Insurance has been creating document solutions capable of handling the high-volume, automated assembly needs of customers like you. Through products such as Documaker and Documerge, Oracle Insurance has provided clients in industries as diverse as insurance, finance, and utilities, with high-volume document creation, processing, printing, and archiving solutions. These solutions have typically concentrated on printed output although the real focus has always been to deliver the high quality documents in the most cost-effective manner, and to eliminate paper where ever possible. The rapid acceptance of the Internet and in-house intranets has created a new and costeffective way to provide the timely, on-demand delivery of critical documents to remote end-users equipped with only a minimum of standard software. To address the need for Internet document processing, as well as other new technologies, Oracle Insurance developed a line of products which support distributed documents. These new products are collectively called Document Management Solutions and include interfaces to document storage and retrieval systems, as well as WYSIWYG document publishing and delivery via the Internet or your in-house intranet. The foundation for document publishing and delivery, is Docupresentment s Internet Document Server. The server works with front-end thin clients via the Internet (or an intranet) and executes back-end document processing applications. Internet Browser Web Server Internet Docupresentment s Internet Document Server Docupresentment bridges, rules, runtimes, and templates Network File Server Data Docupresentment supports several installable components, called bridges. These bridges provide the software, interface document templates, and runtimes, necessary to process, store, publish, and deliver your documents. 2

19 Overview Currently, Oracle Insurance has released several bridges, such as the one to the Documaker archive and the one to Documanage. These bridges provide retrieval and PDF publishing of archived Documaker document sets and a bridge to Metacode and AFP print streams. In addition, Oracle Insurance also provides a way to distribute documents produced by the GenPrint program, the print component of the Documaker system. With the PDF Print Driver, Oracle Insurance gives Documaker users several ways to distribute documents via the Internet: From Documaker s archive component (the GenArc program) From Documaker s print component (the GenPrint program) The Internet Document Server and the bridges to Documaker and Documanage are the first in a series of new products from Oracle Insurance. Over time, new product offerings from Oracle Insurance will provide additional solutions in these areas. Internet and intranet-based document processing Client-server processing Workflow management Integration with existing document management and storage subsystems...as well as other specialized applications that integrate with Windows and Microsoft s BackOffice. The product architecture uses a layered hierarchy that provides for backward compatibility to existing systems, while positioning for future product offerings. Management Solutions Internet Document Processing Future products Bridges Bridge Bridge Bridge Existing applications Documanage Documaker Other products Management Solutions. Some components will provide totally new stand-alone systems and capabilities, while others focus on leveraging and extending existing Oracle Insurance applications. Internet Document Processing is an example of a new component that can be used to leverage existing applications and data with extended functionality. Docupresentment Bridges. These components are designed for use with existing applications or other custom built interfaces. Oracle Insurance offers a wide range of technical and professional services for designing and building custom bridges. Existing applications. These components cover a wide range of new and existing products and applications from Oracle Insurance s various divisions, as well as other in-house or legacy systems. 3

20 Chapter 1 Processing Documents Using the Internet HTML vs. PDF The standard underlying delivery mechanism of the Internet and the World Wide Web is HTML documents delivered via HTTP. HTML (Hyper-text Markup Language) files are essentially simple text files, marked up with formatting commands which appear alongside the text. The problem is that HTML focuses primarily on maintaining document content and not the exact look-and-feel of the document. The challenge for Oracle Insurance is to deliver a standardized solution in an area that is Oracle Insurance s strength reproducing the exact look-and-feel of a document set, not just the content, across multiple platforms. In addition, another challenge is to provide a solution that supports the growing body of thin client workstations attached to the Internet, requiring only a minimum of end-user software. To meet these and other challenges, Oracle Insurance stores and creates files in Portable Document Format (PDF). the PDF file fomat is the industry standard, providing a searchable, open format that maintains the look-and-feel of the original documents and works across a variety of platforms. In addition, using Adobe Software s Acrobat Reader, a free application anyone can download from the Internet, thin-client end users can easily view and print complete document sets which are identical to the original documents. NOTE:You can read more about Adobe s Portable Document Format and download the Adobe Acrobat Reader from Adobe s web site at 4

21 Overview ARCHITECTURAL CHANGES IN VERSION 2.X The core architecture of Internet Document Server changed in version 2.0 to allow major enhancements of current and future functionality. The single-tasking architecture of Internet Document Server version 1.8 was replaced with a multitasking one that can handle several tasks at once, allowing greater throughput and fewer pauses. Tasks now handled concurrently include Handling of certain types of requests. Rules for requests that are written in a threadsafe manner can be run at the same time in one instance of IDS. Purging of cached files that have expired. When processing requests, IDS can produce temporary files, which are given a length of time to exist before they are automatically deleted. IDS version 1.8 had to stop processing requests to periodically purge these files; IDS version 2.x does not pause request processing to purge files. Receiving requests from a messaging queue. Sending results back to a different messaging queue. Handling multiple incoming and outgoing HTTP requests. Watching the running rules to see if they are taking too long. Looking for changes to the configuration file and restart IDS. Looking for changes to logging configuration and incorporate changes without restarting IDS. In addition to using HTTP as a transport of SOAP messages, IDS can respond to requests formatted as a URL from a browser and display results in HTML. The XML result produced by IDS is transformed by XSLT templates into HTML; there can be a different XSLT template for each request, or a default will be used. In addition to HTTP, WebSphere MQ and MSMQ, IDS version 2.x can use Java Messaging Service (JMS) queues for sending and receiving messages. JMS is a standard for messaging used by J2EE application servers, such as WebSphere, WebLogic and JBoss. You can configure IDS version 2.x to handle requests from both message queues and from HTTP in the same instance; version 1.8 could only do one or the other. The format of requests coming in to IDS is configurable and extensible. If a third-party application wants to send requests in formats other than SOAP, custom translators can be installed in IDS. When IDS receives a request it will recognize the format and the result will be sent back in the same format as it was received. IDS can be monitored by the Simple Network Management Protocol (SNMP). This is the standard protocol used by manufacturers of networking hardware (such as routers), printers and computers to monitor uptime and usage statistics. IDS appears as another piece of equipment to SNMP monitoring applications. Version 2.x also enhances IDS s error logging and tracing capabilities. Logging messages can be assigned a severity level (DEBUG, INFO, WARN, ERROR or FATAL) and logging messages can be routed to multiple destinations including the console screen, files, the Windows event logger, the UNIX syslog daemon, and . Logging options can be changed without restarting IDS, making the diagnosing of problems easier. Details on these features can be found in this manual and in the SDK Reference. 5

22 Chapter 1 Processing Documents Using the Internet REQUIRED COMPONENTS Provided by the enduser Provided by the Oracle Insurance licenseholder To use Oracle Insurance s Internet document processing solution, you need several components. Some components are included in Oracle Insurance s Internet Document Server, while others are included in the various bridges. Other required components must be provided by the end-user or the license-holder. The basic components are: WEB BROWSER. An end-user workstation must have a working web browser that supports Adobe Acrobat Reader version 7.0 or higher. Oracle Insurance has tested successfully with Microsoft Internet Explorer 6.0 and higher. To download a copy of Adobe Acrobat Reader, go to: INTERNET ACCESS. An installed and working Internet (or intranet) connection, including the necessary hardware and software, Internet provider account, modem, and so on. The access should provide acceptable performance when downloading large files. JAVA RUNTIME ENVIRONMENT. Java and the Java runtime environment (JRE) are only required if you are using Java rules or a Java client. A Java Runtime Environment (JRE) or the Java Software Development Kit (JDK), version 1.5 ( Java 5 ) is recquired. You can download a free runtime environment at: To run certain rules, the Java Cryptography Extension is required. It is included in Java runtimes version 1.5 and later. SERVER. An installed and working server, such as Microsoft Windows (2000 or XP). WEB SERVER. An installed and working web server, such as a web server with Windows 2000 Server or Windows 2003 Server and Microsoft Internet Information Server 5.0 (or higher). While you can use Windows XP for development and testing purposes, do not use it as a production web server. NOTE:All of these components should be installed and working before you install IDS. In general, end-users will be supported and trained on these applications by their own experienced in-house Internet support group. Contact your Oracle Insurance sales representative to inquire about the services and consulting packages Oracle Insurance offers. Components Available from Oracle Insurance Internet Document Server This component includes: Internet Document Server Sample programs written in Java and C++ Sample programs, rules and ActiveX components written in Microsoft Visual Basic. (Windows only) Sample Microsoft Active Server Page (Windows only) Sample Java Server Page programs 6

23 Required Components Documentation (see Using the Internet Document Server, beginning on page 9) Documaker Bridge This optional component includes: The bridge PDF generator Subset Documaker runtime to support archive/retrieve rules Rules to support Documerge Metacode and AFP output Utility for creating graphics files Utilities for creating and checking fonts Documentation (see the separate manual entitled, Using the Documaker Bridge) Documanage Bridge (only for Windows) Docuflex Bridge This optional component includes: The bridge PDF generator Documentation (see the separate Documanage manuals entitled, General Reference for the Documanage Bridge and Rules Reference for the Doucmanage Bridge) This optional component includes: An IDS rule DLL (DFLXRULE.DLL) Documentation (see the separate manual entitled, Using the Docuflex Bridge) PDF print driver HTML print driver DSI SDK Package This component includes tools which let you convert output from Documaker s GenPrint program into PDF files, which can be viewed using an Internet browser. For more information, see Creating PDF Files, beginning on page 206. This component lets you create HTML files by simply printing to the HTML print driver. For more information, see Creating HTML Files on page 207. This component includes: Software Developer Kit for the various bridges Source code to archive retrieval rules API documentation and technical reference for writing custom rules, Visual Basic programs, Active X components and ASP components (see Using the Internet Document Server SDK in the SDK Reference). Users and customers need to be aware that due to the varying nature of browsers and their continuously changing levels of support for the evolving HTML language, the use of certain HTML tags in the templates and dialogs might limit the ability of users to display certain aspects of the customized pages. 7

24 Chapter 1 Processing Documents Using the Internet 8

25 Chapter 2 Using the Internet Document Server This chapter provides information on the capabilities of the Internet Document Server and its architecture. This chapter also tells you how to set up the Internet Document Server. NOTE:For information on installing IDS, see the IDS Installation Guide. You ll find this information: Overview on page 11 Using Multiple Servers on page 46 Setting Up a Windows NT Service on page 50 Handling Multi-threaded Requests on page 51 Using Rules Written in Other Scripting Languages on page 54 Using IDS as a Client to Another IDS on page 55 Monitoring IDS with SNMP Tools on page 60 Managing IDS Instances on page 62 Sending Results and Receiving Requests in Multiple Formats on page 71 Logging and Tracing on page 74 Configuring IDS on page 93 Referencing Attachment Variables on page 100 Using the Message Queues on page 102 Using the Java Message Service (JMS) on page 108 9

26 Chapter 2 Using the Internet Document Server Using WebSphere MQ on page 111 Using HTTP on page 124 Using Multiple Bridges on page 128 Submitting Batch Requests on page 130 Printing in Duplex Mode to PCL Printers on page 131 Using IDS to Distribute on page 132 Attaching Documents to Documaker Transactions on page 141 Using IDS to Run Documaker on page 147 Using the XML Messaging System on page 161 Connecting to an SQL Database on page 169 Using the Thin Client Forms Publisher on page 174 Pausing IDS on page 175 Executing Request Types at Run Time on page 178 Publishing Your Forms on the Web on page 180 Formatting Text with XML Markup on page 181 Encrypting and Decrypting Data Files on page 182 Using Multiple Attachment Values with the Same Name on page 183 Converting XML Files Using a Template on page 186 Customizing Your System on page 190 Handling Security Issues on page 193 Using LDAP Support on page 195 Using Default Time-outs for DSILIB-Based Client Applications on page 196 Running Timed Requests on page 198 In-Process Rendering for DPAView on page 199 Using DAL Functions for WIP Column Access on page 200 Using Enterprise Web Processing Services on page 202 Determining the Patch Level on page

27 Overview OVERVIEW The Internet Document Server lets users connect to the server via the Internet. Executing back-end applications, however, requires additional components. These additional components are called bridges. These bridges provide bridge components, software rules, document templates, and other files necessary to process documents. The Internet Document Server lets users communicate via standard Internet methods using a standard web browser. No other specialized client software is required to use the Internet Document Server; however, additional bridge components may require additional browser plug-ins, such as Adobe s Acrobat Reader. The Internet Document Server runs on a Microsoft Windows or Sun Solaris server running a web server package. NOTE:See Processing Documents Using the Internet on page 1 for more information on Oracle Insurance s related products. Keep in mind, as you read through the following examples, that XML standards as defined by the W3C require you to substitute text characters that are not in XML tags (for example, between <entry> and </entry> tags) as escape sequences. The characters that require substitution are listed in the following table. If you cut and paste an XML example from this or other Docupresentment documentation into an XML configuration file, you will have to manually make these substitutions. For this character Use this escape sequence < (less than) < > (greater than) > & (ampersand) ' (apostrophe) & &apos; (quotation mark) " The following diagram shows you how the system operates. 11

28 Chapter 2 Using the Internet Document Server Distributed Clients World Wide Web Client Intranet Client World Wide Web Client Local or Batch Client Web Server Front-end components talk to IDS via the DSI API. These components provide communications and an interface which gather client requests, translate those requests for IDS, and then translate the results for the client s use. Front-End (Client) Components Custom Client Module Java Server Pages (JSP) Custom Client Module Java-based Custom Client Module Active Server Pages (ASP) Custom Client Module (Windows) ActiveX-based Custom Client Module (Windows) Internet Document Server DSI API Document Processing Server DSI API Back-end components include the bridges to other applications, rules which process the data, the data or archives being processed, and document sets. These components communicate with IDS via the DSI API. Bridges Back-End Components Processing Rules Data, Document Sets or Archives 12

29 Overview CREATING FRONT-END SOLUTIONS You can use either JSP (Java server pages) or ASP (active server page) to create front-end solutions, as shown in the previous illustration. NOTE:Keep in mind ASP is a Microsoft product and is not available on Solaris. Internet Document Server ASP Internet Information Server (IIS) Internet Document Server JSP JSP-enabled application server (such as Tomcat or WebSphere) USING JSP With JSP, the HTML content is included in the JSP page. There is no separate template. To help you more quickly create your front end solutions, we provide the DSI JavaBean to communicate with Internet Document Server. This bean is in IDSJSP.jar. Browser Browser Browser Application server with JSP support (such as Tomcat, WebLogic, or WebSphere) JSP AddRequest ClearRequest ProcessRequest The DSI JavaBean (IDSJSP.jar) Internet Document Server 13

30 Chapter 2 Using the Internet Document Server USING THE IDSJSP JAVABEAN As shown in this illustration, the IDSJSP bean collects requests and results. The bean has the following properties and methods. Properties Property waittime timeout Description The time in between tries for ProcessRequests. The total time to wait for the ProcessRequest. Methods Method AddRequest AddAllRequest ProcessRequest GetResult ClearRequest ClearResult Description AddRequest(Object key, Object value) Adds name/value fields to the record to send to the IDS rule. AddAllRequest(javax.servlet.ServletResponse request) Adds all name/value fields from the request objects to the records to send to the IDS rule. ProcessRequest() Sends all the name/value and request types to IDS rules. Processes the IDS rule and gets return records from the IDS rule and returns them as type HashMap. GetResult(Object key) Gets the return record value from the IDS rule index using the key from the internal result. ClearRequest() Clears attachment variables out of the request. Use after ProcessRequest and before the next set of AddRequest calls. ClearResult() Clears the result. Using ASP With ASP, the HTML page is included with the ASP page. There is no separate template. Furthermore, the processing is done in each ASP page instead of in DCLTW32.EXE. On the other hand, ASP also requires more coding effort. To help you more quickly create your front end solutions, we created IDSASP (IDSASP.DLL). Internet Document Server IDSASP ASP Internet Information Server (IIS) With IDSASP, you can use the ASP Session Collector and ProcessQ or you can bypass the Session Collector using ProcessRQ, as shown in the following illustration. 14

31 Overview Browser Browser Browser Internet Information Server (IIS) ASP Session Collector AddReq ClearReq ClearRes Request Collection Result Collection The IDSASP Object (IDSASP.DLL) ProcessQ ProcessRQ Call AddToQueue/GetQueueRec Internet Document Server USING THE IDSASP OBJECT As shown in this illustration, the IDSASP object collects requests and results. To communicate with IDS using ASP through DSIAPI, the system includes an ActiveX DSO named IDSASP.DLL. This DSO has the following properties and methods. Properties Property hinstance odsi Request Result ShowAtt Description Type: Long DSI Instance Handle is created by InitSession() in IDSASP. Type: DSICoAPI DSI Handle. Type: Collection Request Collection in IDSASP. Type: Collection Result Collection in IDSASP. Type: Boolean When set to True, the system prints the request and result when you call the ProcessQ or ProcessRq method. Use this property for debugging. 15

32 Chapter 2 Using the Internet Document Server Property WaitTime TimeOut Description Type: Long Retry time in the processing queue. The default is 1000 milliseconds. Type: Long Time-out in milliseconds. The default is milliseconds. Methods Method AddReq ClearReq ClearRes OnEndPage OnStartPage ProcessQ ProcessRq ReadBinFile Description Syntax: AddReq (ByVal Name As String, ByVal Value As String) Call this method to add a request to IDSASP request collection. Syntax: ClearReq() Call this method to clear the IDSASP request collection. Syntax: ClearRes() Call this method to clear the IDSASP result collection. Called by ASP when the object is instantiated. Called by ASP when the object is released. Syntax: ProcessQ() Call this method to... - Retrieve the name/value pair from the ASP session collection and add it to the queue. - Release the record into the queue for IDS to process. - Read back the result from IDS. Retry time and time-out are defined in the WaitTime and TimeOut properties. - Store the results in the ASP session collection. Syntax: ProcessRq() Call this method to... - Retrieve the name/value pair from the IDSASP request collection and add it to the queue. - Release the record into the queue for IDS to process. - Read back the result from IDS. Retry time and time-out are defined in the WaitTime and TimeOut properties. - Store the results in the IDSASP result collection. Syntax: ReadBinFile(ByVal bfilename As String) Call this method to read the binary file from the local hard disk and store as a binary array. 16

33 Overview Sending and Receiving Attachment Fields The IDSASP.DLL provides two ways to send and receive attachment fields to and from DSIAPI: using the ProcessQ method and using the ProcessRq method. Using the ProcessQ method Here is an example of using session collection with the ProcessQ method: <% CrLf = Chr(13) + Chr(10) set DSI = Server.CreateObject("IDSASP.DSI")'create DSI handle session.abandon 'Clear Session for i=1 to Request.Form.Count'Read Attachment and Create session Collection session(request.form.key(i))=request.form(i) next DSI.ProcessQ 'Execute Request From Attachment %> <% 'Loop To display all of the records. For i=1 to session("records") alink = "recips.asp" alink = alink & "?USERID=" & Server.URLEncode(session("USERID")) alink = alink & "&ArcKey=" & Server.URLEncode(session("RECORDS" & cstr(i) & ".ArcKey")) alink = alink & "&REQTYPE=RCP" alink = alink & "&CONFIG=" & Server.URLEncode(session("CONFIG")) alink = alink & "&COMPANY=" & Server.URLEncode(session("RECORDS" & i & ".Company")) alink = alink & "&LOB=" & Server.URLEncode(session("RECORDS" & cstr(i) & ".Lob")) alink = alink & "&POLICYNUM=" & Server.URLEncode(session("RECORDS" & cstr(i) & ".PolicyNum")) alink = alink & "&RUNDATE=" & Server.URLEncode(session("RECORDS" & cstr(i) & ".RunDate")) Response.Write "<TR><TD><B>" Response.Write "<A HREF=" & alink & ">" & session("records" & i & ".Company") & "</A></TD>" Response.Write "<TD>" & session("records" & cstr(i) & ".Lob") & "</TD>" Response.Write "<TD>" & session("records" & cstr(i) & ".PolicyNum") & "</TD>" Response.Write "<TD>" & session("records" & cstr(i) & ".RunDate") & "</TD>" Response.Write "</TR>" & CrLf next %> Using the ProcessRq method Here is an example of using the IDSASP.DLL request and result collection properties with the ProcessRq method. <% CrLf = Chr(13) + Chr(10) set DSI = Server.CreateObject("IDSASP.DSI")'create DSI handle 'Read Input Parameter from INPUT FORM and send request to DSI for i=1 to Request.Form.Count 17

34 Chapter 2 Using the Internet Document Server DSI.AddReq Request.Form.Key(i),Request.Form(i) next DSI.ProcessRq 'Execute Request %> <% 'Loop display Response Pair for i=1 to DSI.Result("RECORDS").Value alink = "recips.asp" alink = alink & "?USERID=" & Server.URLEncode(DSI.Result("USERID").value) alink = alink & "&ArcKey=" & Server.URLEncode(DSI.Result.Item("RECORDS" & cstr(i) & ".ArcKey").value) alink = alink & "&REQTYPE=RCP" alink = alink & "&CONFIG=" & Server.URLEncode(DSI.Result("CONFIG").value) alink = alink & "&COMPANY=" & Server.URLEncode(DSI.Result("RECORDS" & i & ".Company").value) alink = alink & "&LOB=" & Server.URLEncode(DSI.Result.Item("RECORDS" & cstr(i) & ".Lob").value) alink = alink & "&POLICYNUM=" & Server.URLEncode(DSI.Result.Item("RECORDS" & cstr(i) & ".PolicyNum").value) alink = alink & "&RUNDATE=" & Server.URLEncode(DSI.Result.Item("RECORDS" & cstr(i) & ".RunDate").value) Response.Write "<TR><TD><B>" Response.Write "<A HREF=" & alink & ">" & DSI.Result("RECORDS" & i & ".Company").value & "</A></TD>" Response.Write "<TD>" & DSI.Result.Item("RECORDS" & cstr(i) & ".Lob").value & "</TD>" Response.Write "<TD>" & DSI.Result.Item("RECORDS" & cstr(i) & ".PolicyNum").value & "</TD>" Mh=Left(DSI.Result.Item("RECORDS" & cstr(i) & ".RunDate").value,2) Dt=Mid(DSI.Result.Item("RECORDS" & cstr(i) & ".RunDate").value,3,2) Yr=Right(DSI.Result.Item("RECORDS" & cstr(i) & ".RunDate").value,2) Dat=Cdate(Mh & "/" & Dt & "/" & Yr) %> Response.Write "<TD>" & FormatDateTime(Dat,1) & "</TD>" Response.Write "</TR>" & CrLf next Sample Pages Page 1 Here are some sample pages: This page sends a request from the browser with two file attachments. 18

35 Overview <form name="form" enctype="multipart/form-data" action="test.asp" method="post"> <table> <tr><input name="key1" value=" " /></tr> <tr><input name="key2" value="456" /></tr> <tr><input name="key3" value="789"/></tr> <tr><input name="empty" value=""/></tr> <tr><input name="file1" type="file"/></tr> <tr><input name="file2" type="file"/></tr> <tr><input name="submit" type="submit"/></tr> </table> Page 2 This page receives an HTTP request from page 1, parses the request, and uploads the files. <% 'create an instance of the object which calls parsedata set o = server.createobject("idsasp.dsi") 'o.bdebug = true o.parsedata() 'write the element count in the request collection response.write "count=" & o.request.count & "<BR><BR>" 'indicate if the request is a multipart request response.write "Multipart=" & o.bmultipart & "<BR>" 'taverse through the request collection and write the name / value pairs for i = 1 to o.request.count name = o.request.item(i).name value = o.getrequest(name) response.write "(" & name & ") = (" & value & ")<br>" next 'if the request is a multipart request, then process the attachments if o.bmultipart = true then for each attachment in o.attachments if IsObject(attachment) then name = attachment.name response.write "attachment name=" &name & "<BR>" file = attachment.file response.write "file name=" & file & "<BR>" ftype = attachment.ftype response.write "file type=" & ftype & "<BR>" encoding = attachment.encoding response.write "encoding=" & encoding & "<BR>" buffer = attachment.buffer response.write "buffer length=" & Len(buffer) & "<BR>" 'write attachment to disk path = o.upload(name, "c:\inetpub") response.write "path returned by upload api = " & path & "<BR>" Showing a PDF File ASP provides two ways to show a PDF file: using the Response.Redirect method and using the Read ReadBinFile method. 19

36 Chapter 2 Using the Internet Document Server Using the Response.Redirect method Here is an example of showing a PDF file using the Response.Redirect method. You must enter a URL. Language=VBScript %> <% Set DSI = Server.CreateObject("IDSASP.DSI")'create DSI handle session.abandon 'Clear Session For i=1 to Request.Form.Count'Read Attachment and Create session Collection session(request.form.key(i))=request.form(i) Next DSI.ProcessQ 'Execute Request From Attachment HostAddr=Request.ServerVariables("HTTP_HOST")'Get Host Name PrintFile=session("REMOTEPRINTFILE")'Get Full Printed Filename with Path StartPoint=instr(1,PrintFile,"\")'Look for \ sign NameWidth=len(PrintFile)-StartPoint'Filename Length FileName=Mid(PrintFile,StartPoint+1,NameWidth)'Get Filename Url=" & HostAddr & "/doc-html/" & Filename'Construct URL Set DSI = nothing If instr(1,request.servervariables("http_user_agent"),"ie")<>0 then 'Check IE Browser %> <HTML> <BODY leftmargin=0 topmargin=0 scroll=no> <embed width=100% height=100% fullscreen=yes src="<%=url%>"> </BODY> </HTML> <% Else Response.Redirect Url End If %> 20

37 Overview Using the Read ReadBinFile method Here is an example of showing a PDF file using the Read ReadBinFile method in the IDSASP.DLL file, you must enter the local path. Language=VBScript %> <% Dim Stream set DSI = Server.CreateObject("IDSASP.DSI")'create DSI handle 'Attach Input Parameter from INPUT FORM for i=1 to Request.Form.Count DSI.AddReq Request.Form.Key(i),Request.Form(i) next DSI.ProcessRq 'Send Queue to DSI %> <% Response.Buffer=True Pth=Request.ServerVariables("PATH_TRANSLATED") DsiPath=left(pth,instr(4,pth,"\"))'Get Path of Docserv PrintFile=DsiPath & DSI.Result("REMOTEPRINTFILE").Value Response.ContentType = "application/pdf" Stream = DSI.ReadBinFile(PrintFile) Response.BinaryWrite(Stream) Response.End %> set DSI = nothing 21

38 Chapter 2 Using the Internet Document Server Using the HTTP Parsing and Uploading APIs The following APIs in IDSASP let you parse HTTP requests into separate request and attachments collections and provide a way to process multipart/form-data form requests. parsedata getrequest getattachment getbuffer upload Multiple file attachments are parsed into attachments collections in IDSASP. Files can then be uploaded (written to disk) to the web server via the upload API. Attachment objects can also be retrieved from the attachments collection via the getattachment API. Attachment objects contain properties for each attachment as well as an attachment buffer that contains the actual file attachment contents. You can also retrieve file attachment contents as buffers from the attachments collection via the getbuffer API. The parsedata API can also parse non multipart/form-data HTTP requests. Use the getrequest API to retrieve name/value pairs from the request collection. In addition, you can also see Sample Pages on page 21. parsedata Parameters Returns Use this API to parse HTTP requests into separate request and attachments collections. Regular name/value pairs in an HTTP request are parsed into request collection. File attachments are parsed into an attachments collection. The parsedata API can parse multipart/form-data HTTP requests as well as non multipart/form-data requests. Call this API at the beginning of an ASP script to parse the HTTP request from a submitted form. None Nothing getrequest Use this API to retrieve name/value pairs from the request collection instead of the Request.Form API calls. Parameters Parameter name Description A string value that represents the name of a key in the request collection. Returns A string value with the value in request collection for key name. 22

39 Overview getattachment Use this API to return an attachment object from the attachments collection. This API retrieves not only the file attachment contents, but also its properties. The attachment object returned contains these properties: Property name File Ftype Buffer Encoding Description This is the actual name of the attachment in the HTTP request. Its value corresponds to the value of the file form tag used to submit the attachment in the HTTP request. A string value that contains the file name and extension of the attachment. Its value corresponds to the file name of the File form tag used to submit the attachment. A string value that contains the extension (file type) of the attachment. A string buffer holding the file attachment contents. The actual encoding type used by the browser when the file attachment was submitted. Parameters Parameter name Description A string value that represents the name of a key in the attachments collection. Returns An attachment object containing the file attachment contents as well as properties for the attachment. getbuffer Use this API to retrieve attachments as buffers. Parameters Parameter name Description A string value that represents the name of the attachment in the Attachment object within the attachments collection. This value should be the same as that of the file form tag name used to send an attachment in an HTTP request. Returns A string buffer containing the contents of the file attachment in the attachments collection. 23

40 Chapter 2 Using the Internet Document Server upload Use this API to write an attachment object's buffer contents from the attachments collection to disk. This API lets you upload file attachments to disk on the web server. Parameters Parameter name Path Description A string value that represents the name of the attachment in the attachment object within the attachments collection. This name is the same as the file form tag used to send the attachment from the browser in an HTTP request. A string value that specifies the full path where you want the attachment written. Returns The full path and file name of the file uploaded, if successful. Sample Pages Page 1 Here are some sample pages: This page sends a request from the browser with two file attachments. <form name="form" enctype="multipart/form-data" action="test.asp" method="post"> <table> <tr><input name="key1" value=" " /></tr> <tr><input name="key2" value="456" /></tr> <tr><input name="key3" value="789"/></tr> <tr><input name="empty" value=""/></tr> <tr><input name="file1" type="file"/></tr> <tr><input name="file2" type="file"/></tr> <tr><input name="submit" type="submit"/></tr> </table> 24

41 Overview Page 2 This page receives an HTTP request from page 1, parses the request, and uploads the files. <% 'create an instance of the object which calls parsedata set o = server.createobject("idsasp.dsi") 'o.bdebug = true o.parsedata() 'write the element count in the request collection response.write "count=" & o.request.count & "<BR><BR>" 'indicate if the request is a multipart request response.write "Multipart=" & o.bmultipart & "<BR>" 'taverse through the request collection and write the name / value pairs for i = 1 to o.request.count name = o.request.item(i).name value = o.getrequest(name) response.write "(" & name & ") = (" & value & ")<br>" next 'if the request is a multipart request, then process the attachments if o.bmultipart = true then for each attachment in o.attachments if IsObject(attachment) then name = attachment.name response.write "attachment name=" &name & "<BR>" file = attachment.file response.write "file name=" & file & "<BR>" ftype = attachment.ftype response.write "file type=" & ftype & "<BR>" encoding = attachment.encoding response.write "encoding=" & encoding & "<BR>" buffer = attachment.buffer response.write "buffer length=" & Len(buffer) & "<BR>" 'write attachment to disk path = o.upload(name, "c:\inetpub") response.write "path returned by upload api = " & path & "<BR>" 25

42 Chapter 2 Using the Internet Document Server Using the XMLSession Rules Use the XMLSession rules to save state information across multiple IDS servers and across multiple web servers. Session information for each client session is saved as an XML file on the server side. This also increases security as session information no longer resides on the web server. You can store, retrieve, and save files using the XMLSession rules. You can retrieve the session information as rowset on the client side and it is also accessible using session methods available in IDSASP and IDSJSP. For more information about these methods and rules, see IDSASP Methods on page 29 IDSJSP Methods on page 31 XMLSession Rules on page 33 IDSASP Methods Here are the IDSASP methods: addsessionvar Use this method to add a name/value pair to the session collection. You can include these parameters: Parameter name Value Description The name of the name/value pair to add to the session. The value of the name/value pair to add to the session. Here is an example: dsi.addsessionvar "USERID", "FORMAKER" getsessionvar Use this method to return a string containing the value of name in the session collection. You can include these parameters: Parameter name Description The name of the name/value pair to retrieve from the session. Here is an example: userid = dsi.getsessionvar("userid") removesessionvar Use this method to remove a name/value pair from the session collection. You can include these parameters: Parameter name Description The name of the name/value pair to remove from the session. Here is an example: 26

43 Overview dsi.removesessionvar "USERID" addsessionobject Use this method to add a binary or text buffer to hold the contents for a file to the session collection. You can include these parameters: Parameter name Buffer Description The name of the object name to add to the session. A binary or text buffer holding the contents of a file to add to the session. Here is an example: dsi.addsessionobject "FILE1", buffer getsessionobject Use this method to retrieve a buffer that holds the contents of a file from the session collection. You can include these parameters: Parameter name Opt Description The name of the object to retrieve from the session. An integer value that indicates whether the object should be retrieved as a binary or text buffer (1=text, 2=binary) Here is an example: buffer = dsi.getsessionobject("file1", 1) binbuf = dsi.getsessionobject("file2", 2) removesessionobject Use this method to remove an object from the session collection. You can include these parameters: Parameter name Description The name of the object to remove from the session. Here is an example: dsi.removesessionobject "FILE1" 27

44 Chapter 2 Using the Internet Document Server IDSJSP Methods Here are the IDSJSP methods: addsessionvar Use this method to add a name/value pair to the session map. You can include these parameters: Parameter name Value Description Enter a string that contains the name of the name/value pair to add to the session map. Enter a string that contains the value of the name/value pair to add to the session map. This method has no return value. Here is an example: dsimsg.addsessionvar("userid", "FORMAKER"); removesessionvar Use this method to remove a name/value pair from the session map. You can include these parameters: Parameter name Description Enter a string that contains the name of the name/value pair to remove from the session map. This method has no return value. Here is an example: dsimsg.removesessionvar("userid"); getsessionvar Use this method to retrieve a name/value pair from the session map. You can include these parameters: Parameter name Description Enter a string that contains the name of the name/value pair to retrieve from the session map. This method returns a string containing the value of the name/value pair in the session map. Here is an example: String userid = dsimsg.getsessionvar("userid"); 28

45 Overview addsessionobject Use this method to add a file buffer to the to the session map. You can include these parameters: Parameter name Buffer Description Enter a string that contains the name of the file buffer to add to the session map. A byte array holding the contents of a file. This method has no return value. Here is an example: dsimsg.addsessionobject("file1", buffer1); removesessionobject Use this method to remove a file buffer from the session map. You can include these parameters: Parameter name Description Enter a string that contains the name of the file buffer to remove from the session map. This method has no return value. Here is an example: dsimsg.removesessionobject("file1"); getsessionobject Use this method to retrieve a file buffer from the session map. You can include these parameters: Parameter name Description Enter a string that contains the name of the file buffer to retrieve from the session map. This method returns a byte[] array containing the buffer retrieved from the session map. Here is an example: byte[] buff = dsimsg.getsessionobject("file1"); 29

46 Chapter 2 Using the Internet Document Server XMLSession Rules Here are the XMLSession rules: initsession Use this rule to initialize a session. This rule generates a unique session ID and generates a session file with unique ID. If a SESSION rowset is present in the request, the rule also adds the rowset to the session file. If the SESSION rowset is missing in the request, a blank unique session rowset is generated and added to the session file. The SESSION rowset is returned in the result. Input variables Variable XMLSESSION XMLSESSIONTIMEOUT Description (Optional) This variable contains a unique identifier for the session. If present, it is used to generate a new session. Otherwise, the rule generates a unique identifier for the new session. (Optional) Specifies the session timeout in seconds. The default is 1800 seconds. Use this INI option to specify a global share for multiple IDS processes: < GlobalData > Path = Output variables Variable XMLSESSION RESULTS Description This variable contains the unique identifier for the session if the session is valid. Otherwise, the value will be INVALID. Success or failure termsession Use this rule to terminate a session. This rule removes the session file associated with the unique ID. Input variables Variable Description XMLSESSION This variable contains the unique ID for the session to be removed. Use this INI option to specify a global share for multiple IDS processes: < GlobalData > Path = Output variables Variable XMLSESSION Description This variable contains the unique identifier for the session. This attachment variable contains REMOVED if the session was terminated successfully. Otherwise, the value will be INVALID. 30

47 Overview Variable RESULTS Description Success or failure updatesession Use this rule to update the unique session file with the SESSION rowset in the request message and return the updated rowset in the result. Input variables Variable XMLSESSION XMLSESSIONTIMEOUT Description This variable contains the unique ID for the session to be updated. (Optional) Specifies the session timeout in seconds.the default is 1800 seconds. Use this INI option to specify a global share for multiple IDS processes: < GlobalData > Path = Output variables Variable XMLSESSION RESULTS Description This variable contains the unique identifier for the session if the session is valid. Otherwise, the value will be EXPIRED if the session has expired, or INVALID if the session is no longer valid. Success or failure purgexmlsessions Input variables Use this rule to remove expired sessions. None. Use this INI option to specify a global share for multiple IDS processes: < GlobalData > Path = Output variables Variable RESULTS Description Success or failure. 31

48 Chapter 2 Using the Internet Document Server savefile Use this rule to save the contents of an XML node from a session file as a new file to disk and to add an attachment variable to the result message with the full path and file name of the file saved. Input variables Variable XMLSESSION INPUTVAR OUTPUTVAR PRINTPATH FILETYPE Description This variable contains the unique identifier for the session. The name of the SESSION rowset variable containing the data that is to be saved to disk. The name of the attachment variable to add to the output message indicating the full path and file name of the file saved. (Optional) Specifies the output path for the output file. If omitted, the output file is written to the current IDS directory. (Optional) Specifies the file type for the output file. If omitted, the default extension DAT is used. Use this INI option to specify a global share for multiple IDS processes: < GlobalData > Path = Output variables Variable (variable) XMLSESSION RESULTS Description An attachment variable whose name is specified by OUTPUTVAR input attachment variable - will hold a String value indicating the full path and file name of the file saved to disk. This variable contains the unique identifier for the session if the session is valid. Otherwise, the value will be will be EXPIRED if the session has expired, or INVALID if the session is no longer valid. Success or failure 32

49 Overview USING IDSXML You can use IDSXML as a guide to processing the errors.xml file in a Microsoft ASP environment. NOTE:IDSXML is not a COM+ component so do not register it under the Component Services Microsoft Management Console snap-in. The component should only be registered under the current IDS directory on the IDS client (the web server). Keep in mind IDSXML requires Microsoft XML parser 4.0 (MSXML 4.0). Please make sure you have this before you use IDSXML. IDSXML is a Win32 COM component. IDSXML provides XML parsing and XSL processing APIs for ASP. Here is a description of the properties and APIs provided by this component: Properties This table shows you the properties: Name Type Description See also Formset collection A collection of form objects XMLProcessFormset FormsetSelectionList string A comma-delimited string of options selected from a form set. These values are expected: - form - form.copycount.recipient - form.image - form.image.copycount. recipient XMLUpdateFormset Here is an example: DEC PAGE,DEC PAGE.1.AGENT,DEC PAGE.1.COMPANY, DEC PAGE.1.INSURED,DEC PAGE.q1snam,DEC PAGE.q1mdc1,DEC PAGE.q1mdc2,DEC PAGE.q1mdc3, DEC PAGE.q1mdc3.1.INSURED Methods IDSXML includes these methods: XMLTransformErrors on page 37 XMLTransformErrors2 on page 38 XMLLoadINI on page 39 XMLLoadXML on page 40 XMLLoadXSL on page 40 XMLGetGroupOptionValue on page 41 XMLGetValue on page 41 XMLGetGroup on page 41 XMLUpdateGroup on page 42 33

50 Chapter 2 Using the Internet Document Server XMLBuffer on page 44 XMLLoadProcessor on page 44 XMLAddParameterToXSL on page 44 XMLTransformWithXSL on page 45 XMLProcessWithXSL on page 46 XMLUpdateFormset on page 47 XMLProcessFormset on page 47 XMLTransformErrors Use this method to transform a result message into useful HTML output. This method takes an XML buffer from a result message that contains errors, an errors XML file that contains error descriptions, and an XSL template which is used to transform the XML message into HTML output that describes errors returned by IDS. Syntax XMLTransformErrors xmlbuf, xmlfile, xslfile Parameter xmlbuf xmlfile xslfile Description Enter the name of the XML buffer that contains the message returned by IDS. This message contains errors returned by IDS. Enter the name of the errors file that contains all error codes recognized by IDS. This file is produced by IDS and contains additional information, causes, and resolutions for each error. The errors file is used by this method to transform the message returned by IDS into useful HTML output. This is a file that ships with IDS (errors.xml). Enter the name of the XSL template you want the method to use to transform the XML buffer and errors XML file into HTML information about errors returned by IDS. This is a template that ships with IDS (errors.xsl). Example In this example, page one detects an error, captures the buffer that contains the error, and redirects to the error processing page, which is page 2. Page1: processrequest.asp <% set DSI = server.createobject("idsasp.dsi") For i=1 to Request.Form.Count DSI.AddReq Request.Form.Key(i), Request.Form(i) Next On Error Resume Next DSI.ProcessRq If Err.Number <> 0 Then Err.Clear 34

51 Overview End if path = Request.ServerVariables("APPL_PHYSICAL_PATH") results = DSI.Result("RESULTS").Value errors = DSI.Result("ERRORS").Value If Len(results) = 0 OR results <> "SUCCESS" OR CInt(errors) > 0 then Session("xmlbuf") = DSI.GetSOAPMessage set dsi = nothing Response.Redirect "error.asp" End if Set DSI = Nothing %> Page2: error.asp <% set o = Server.CreateObject("IDSXML.XML") xmlbuf = Session("xmlbuf") xmlfile = Server.MapPath("xml\errors.xml") xslfile = Server.MapPath("xsl\errors.xsl") o.xmltransformerrors xmlbuf, xmlfile, xslfile %> XMLTransformErrors2 Use this method to transform a result message into useful HTML output. This method takes as input an XML buffer from a result message from IDS that contains errors and an XSL template which is used to transform the XML message into HTML output that describes the errors returned. Syntax XMLTransformErrors2 xmlbuf, xslfile Parameter xmlbuf xslfile Description Enter the name of the XML buffer that contains the message returned by IDS. This message contains errors returned by IDS. Enter the name of the XSL template you want the method to use to transform the XML buffer into HTML information that contains the errors returned by IDS. This is a template that ships with IDS (default.xsl). Example In this example, page one detects an error, captures the buffer that contains the error, and redirects to the error processing page, which is page 2. Page1: processrequest.asp <% 35

52 Chapter 2 Using the Internet Document Server set DSI = server.createobject("idsasp.dsi") For i=1 to Request.Form.Count DSI.AddReq Request.Form.Key(i), Request.Form(i) Next On Error Resume Next DSI.ProcessRq If Err.Number <> 0 Then Err.Clear End if path = Request.ServerVariables("APPL_PHYSICAL_PATH") results = DSI.Result("RESULTS").Value errors = DSI.Result("ERRORS").Value If Len(results) = 0 OR results <> "SUCCESS" OR CInt(errors) > 0 then Session("xmlbuf") = DSI.GetSOAPMessage set dsi = nothing Response.Redirect "error.asp" End if Set DSI = Nothing %> Page2: error.asp <% set o = Server.CreateObject("IDSXML.XML") xmlbuf = Session("xmlbuf") xslfile = Server.MapPath("xsl\default.xsl") o.xmltransformerrors2 xmlbuf, xslfile %> XMLLoadINI Use this method to load an XML INI file into memory. Use this method before calling other methods that retrieve information from an XML document. Syntax XMLLoadINI sini Parameter sini Description Enter the full path and file name of the XML document you want to load. This can also be a buffer that contains an XML document. Here is an example of the format of the XML document: <GROUPS> 36

53 Overview <GROUP NAME="MQSERIES"> <QUEUEMANAGER>QALAB1</QUEUEMANAGER> <CLIENT>YES</CLIENT> <REQUESTQ>REQUESTQ</REQUESTQ> <RESULTQ>RESULTQ</RESULTQ> </GROUP> <GROUP NAME="PRINTOPTIONS"> <ALLRECIPIENTS></ALLRECIPIENTS> <PRTDOWNLOADFONTS></PRTDOWNLOADFONTS> <PRTTYPE>PDF</PRTTYPE> <PRTSENDCOLOR></PRTSENDCOLOR> <PRTPAGENUMBERS></PRTPAGENUMBERS> <PRTPRINTVIEWONLY></PRTPRINTVIEWONLY> <PRTTEMPLATEFIELDS></PRTTEMPLATEFIELDS> </GROUP> <GROUP NAME="TEST"> <policy> <num>1</num> </policy> </GROUP> </GROUPS> Example Here is an example: set o = Server.CreateObject("IDSXML.XML") sini = Server.MapPath("ini.xml") o.xmlloadini(sini) XMLLoadXML Use this method to load an XML document into memory before an XSL transformation occurs. Syntax XMLLoadXML sxml Parameter sxml Description Enter the full path and file name of the XML document you want to load. This can also be a buffer that contains an XML document. Example Here is an example: sxml = Server.MapPath("xml\test.xml") o.xmlloadxml(sxml) XMLLoadXSL Use this method to load an XSL template into memory before an XSL transformation occurs. Syntax XMLLoadXSL sxsl Parameter sxsl Description Enter the full path and file name of the XSL template you want to load. This can also be a buffer that contains an XSL template. 37

54 Chapter 2 Using the Internet Document Server Example Here is an example: sxsl = Server.MapPath("xsl\test.xsl") o.xmlloadxsl(sxsl) XMLGetGroupOptionValue Use this method to return a value from an XML node. Use the XMLLoadINI method before you use this method. Syntax XMLGetGroupOptionValue sgroup, soption Parameter sgroup soption Description Enter the group name to use for retrieving a value. Enter the option name to use for retrieving a value. Example Here is an example: set o = Server.CreateObject("IDSXML.XML") sini = Server.MapPath("ini.xml") o.xmlloadini(sini) val = o.xmlgetgroupoptionvalue("mqseries", "CLIENT") set o = nothing XMLGetValue Use this method to return a value from a node in an XML tree using xpath. Use the XMLLoadINI method before you use this method. Syntax XMLGetValue xpath Parameter xpath Description Enter a fully qualified xpath value to the node in the XML document tree. Example Here is an example: set o = Server.CreateObject("IDSXML.XML") sini = Server.MapPath("ini.xml") o.xmlloadini(sini) set o = nothing XMLGetGroup Use this method to return an INI group as a buffer, as an object, or as a new file. Use the XMLLoadINI method before you use this method. Syntax XMLGetGroup sgroup, ioption, sdir Parameter sgroup Description Enter the name of the INI group you want returned. 38

55 Overview Parameter ioption sdir Description Choose one of these options: 1 - Return the INI group as a buffer. 2 - Return the INI group as an object. 3 - Save the INI group as a new file. Only include this parameter if you entered three (3) for the ioption parameter. Enter the name of the directory in which you want the system to save the new XML file. Example Here is an example: <% set o = server.createobject("idsxml.xml") sini = Server.MapPath("ini.xml") o.xmlloadini(sini) 'return MQSeries group as buffer Buffer = o.xmlgetgroup("mqseries", 1, "") 'return MQSeries group as object Set MQSeriesGroup = o.xmlgetgroup("mqseries", 2, "") 'traverse through the group object and print all pairs For i = 1 to MQSeriesGroup.Count name = MQSeriesGroup(i).name value = MQSeriesGroup(i).Value response.write name & "=" & value & "<BR>" Next 'access a particular value val = MQSeriesGroup("CLIENT").Value 'write the MQSeries group as a new file into cache directory o.xmlgetgroup "MQSERIES", 3, "Cache" 'cleanup set MQSeriesGroup = nothing set o = nothing %> XMLUpdateGroup Use this method to update a group in an XML document via a Group Object parameter. This method reads the group object's properties and updates the XML document's matching group with the object's properties. The method then returns the updated XML document as a buffer or saves it to disk. Use the XMLLoadINI method before you use this method. Syntax XMLUpdateGroup sgroup, ogroup, ioption, sout 39

56 Chapter 2 Using the Internet Document Server Parameter sgroup ogroup ioption Description Enter the name of the group you want to update. Enter the name of the group object you want to use to update a matching group in an XML document. Choose one of these options to indicate what you want done with the updated file: 1 - Return the updated XML INI file as a buffer. 2 - Save the updated XML INI file as a file. 3 - Return only the updated group as a buffer. 4 - Save only the updated group as a file. sout Only use this parameter if the ioption parameter is set to two (2) or four (4). Enter the full path and file name for saving the XML document. Example Here is an example: <% Set o = Server.CreateObject("IDSXML.XML") sini = Server.MapPath("ini.xml") o.xmlloadini(sini) Set PrtOpt = o.xmlgetgroup("printoptions", 2, "") PrtOpt("ALLRECIPIENTS").Value = "YES" PrtOpt("PRTDOWNLOADFONTS").Value = "YES" PrtOpt("PRTTYPE").Value = "XML" PrtOpt("PRTSENDCOLOR").Value = "NO" PrtOpt("PRTPAGENUMBERS").Value = "NO" PrtOpt("PRTPRINTVIEWONLY").Value = "NO" PrtOpt("PRTTEMPLATEFIELDS").Value = "YES" 'update the xml ini file and return the updated file as a buffer Buffer = o.xmlupdategroup("printoptions", PrtOpt, 1, "") 'update the xml ini file and save it to disk o.xmlupdategroup "PRINTOPTIONS", PrtOpt, 2, "POpt.xml" 'update the group and return the updated group as a buffer Buffer2 = o.xmlupdategroup ("PRINTOPTIONS", PrtOpt, 3, "") 'update the group and save the updated group as a new file o.xmlupdategroup "PRINTOPTIONS", PrtOpt, 4, "newpopt.xml" 'cleanup Set PrtOpt = Nothing Set o = Nothing %> 40

57 Overview XMLBuffer Use this method to return a buffer for an XML document. Use XMLLoadINI method before you use this method. Syntax XMLBuffer sfile Parameter sfile Description Enter the full path and file name of the XML document. Example Here is an example: <% set o = Server.CreateObject("IDSXML.XML") InputFormset = Server.MapPath("xml\OriginalFormset.xml") Buffer = o.xmlbuffer(inputformset) Response.write Buffer set o = nothing %> XMLLoadProcessor Use this method to load an XSL template into memory and to load the XSL processor based on that template. Use this method before you call the XMLAddParameterToXSL or XMLProcessWithXSL methods. Syntax XMLLoadProcessor sxsl Parameter sxsl Description Enter the full path and file name to an XSL template or a buffer that contains an XSL template. Example Here is an example: set o = server.createobject("idsxml.xml") template = Server.MapPath("xsl\test.xsl") o.xmlloadprocessor(template) XMLAddParameterToXSL Use this method to add a parameter to internal XSL processor. For instance, you can use this method to add parameters before processing with an XSL template that expects parameters. Use the XMLLoadProcessor method before you call this method. Syntax XMLAddParameter2XL name, value Parameter name Description Enter the name of the parameter to add to the XSL template. 41

58 Chapter 2 Using the Internet Document Server Parameter value Description Enter the value of the parameter to add to the XSL template. Example Here is an example: <% set o = Server.Createobject("IDSXML.XML") sxml = Server.MapPath("xml\test.xml") sxsl = Server.MapPath("xsl\test.xsl") o.xmlloadxml(sxml) o.xmlloadprocessor(sxsl) o.xmladdparametertoxsl "color", "blue" o.xmlprocesswithxsl 1, "" set o = nothing %> XMLTransformWithXSL Use this method to transform an XML document with an XSL template. Use the XMLLoadXML and XMLLoadXSL methods before you call this method. Use this method to process XML documents with XSL templates that do not expect parameters. Syntax XMLTransformWithXSL Option, spath Parameter Option spath Description Choose one of these options: 1 - Return the transformation result as a string and write the result to the screen. 2 - Return the transformation result as a string. 3 - Write the transformation result to disk using the path specified by spath parameter. This also returns the transformation result as a string. Only include this parameter if you entered three (3) for the Option parameter. Enter the full path and file name of the file you want to use for writing the transformation result to disk. Example Here is an example: <% set o = Server.Createobject("IDSXML.XML") sxml = Server.MapPath("xml\test.xml") sxsl = Server.MapPath("xsl\test.xsl") o.xmlloadxml(sxml) 42

59 Overview o.xmlloadxsl(sxsl) o.xmltransformwithxsl 1, "" set o = nothing %> XMLProcessWithXSL Use this method to transform an XML document using an XSL template that expects parameters. You should use the XMLAddParameterToXSL method to add the parameters expected by the style sheet before you call this method. Also use the XMLLoadProcessor method before you call this method. Syntax XMLProcessWithXSL Option, spath Parameter Option spath Description Choose one of these options: 1 - Return the transformation result as a string and write the result to the screen. 2 - Return the transformation results as a string. 3 - Write the transformation result to disk using the path specified by spath parameter. This also returns the transformation result as a string. If you set the Option parameter to three (3), enter the full path and file name of the file you want to use for writing the transformation result to disk. Example Here is an example: <% set o = Server.Createobject("IDSXML.XML") sxml = Server.MapPath("xml\test.xml") sxsl = Server.MapPath("xsl\test.xsl") o.xmlloadxml(sxml) o.xmlloadprocessor(sxsl) o.xmladdparametertoxsl "color", "blue" o.xmlprocesswithxsl 1, "" set o = nothing %> XMLUpdateFormset Use this method to update an XML form set. This method takes as input a buffer that contains an XML form set or a string that specifies the full path and file name for an XML form set. The method uses the FormsetSelectionList property, which contains a comma-delimited string of forms, images, and recipients, to modify the form set. 43

60 Chapter 2 Using the Internet Document Server This method generates a unique name for the updated form set and saves it as a new XML document. It returns the full path and name of the new XML document. Syntax XMLUpdateFormset sxml Parameter sxml sdir Description Enter the full path and file name of an XML form set or a buffer that contains an XML form set. Enter the name of a directory into which you want to save the updated form set. Example Here is an example: <% set o = Server.CreateObject("IDSXML.XML") InputFormset = Server.MapPath("original.xml") o.formsetselectionlist = "DEC PAGE,DEC PAGE.1.AGENT,DEC PAGE.1.COMPANY,DEC PAGE.1.INSURED,DEC PAGE.q1snam,DEC PAGE.q1mdc1,DEC PAGE.q1mdc2,DEC PAGE.q1mdc3" OutFormset = o.xmlupdateformset(inputformset, "Cache") set o = nothing %> XMLProcessFormset Use this method to process a form set. This method takes as input a buffer that contains an XML form set or a string that specifies the full path and file name of an XML form set. The method parses the XML form set and converts it into a public form set collection property. The form set collection contains form objects and each form object contains images and recipients. Syntax XMLProcessFormset xmlbuffer Parameter xmlbuffer Description Enter the full path and file name of an XML form set or a buffer that contains the XML form set you want loaded and returned as a collection. Example Here is an example: set o = Server.CreateObject("IDSXML.XML") InputFormset = Server.MapPath("xml\OriginalFormset.xml") Buffer = o.xmlbuffer(inputformset) o.xmlprocessformset Buffer For i = 1 To o.formset.count formname = o.formset.item(i).name formid = Pad(formName) html = "<input type=checkbox name=selection value=" & formid & _ " onclick='formselect(this);'>" & formname form = "FORM." & CStr(i) otree.add "root", form, html, bexpand, "page.gif" 44

61 Overview html = "Recipients" FRPCS = "FRECIPIENTS" & CStr(i) otree.add form, FRPCS, html, bexpand, "mydoc.gif" For k = 1 To o.formset.item(i).recipients.count recipientname = o.formset.item(i).recipients.item(k).name recipientcnt = o.formset.item(i).recipients.item(k).copycount recipientid = formid & "." & recipientcnt & "." & recipientname html = "<input type=checkbox name=selection value=" & recipientid & _ ">" & recipientname recipient = "RECIPIENT" & "." & CStr(i) & "." & CStr(k) otree.add FRPCS, recipient, html, bexpand, "n.gif" Next For j = 1 To o.formset.item(i).images.count imagename = o.formset.item(i).images.item(j).name imageid = formid & "." & imagename html = "<input type=checkbox name=selection value=" & imageid & ">" & _ "<font color=blue>" & imagename & "</font>" image = "IMAGE." & CStr(i) & "." & CStr(j) otree.add form, image, html, bexpand, "help_page.gif" For k = 1 To o.formset.item(i).images.item(j).recipients.count recipientname = o.formset.item(i).images.item(j).recipients.item(k).name recipientcnt = o.formset.item(i).images.item(j).recipients.item(k).copycount recipientid = formid & "." & imagename & "." & recipientcnt & "." & recipientname html = "<input type=checkbox name=selection value=" & recipientid & ">" & _ recipientname recipient = "RECIPIENT" & "." & CStr(i) & "." & CStr(j) & "." & CStr(k) otree.add image, recipientid, html, bexpand, "n.gif" Next Next Next 45

62 Chapter 2 Using the Internet Document Server USING MULTIPLE SERVERS To further increase performance, you can set up multiple servers. Each server you set up helps process client requests. You can set up additional servers in a variety of ways, as this diagram shows: With this server setup, a single IDS Server processes requests from the queue. Both are physically located on the same computer. IDS Server Queue IDS Server Queue IDS Server Computer With this server setup, a multiple IDS Servers processes requests from the queue. Both the servers and the queue are physically located on the same computer. Computer IDS Server Queue IDS Server With this server setup, a multiple IDS Servers on multiple computers process requests from the queue. IDS Server Computer Computer To determine which server setup will work best for you, first determine if your transactions are CPU or I/O (input/output) intensive. Then take a look at the test results we have compiled. 46

63 Using Multiple Servers Determining if Your Transactions are CPU or I/O Intensive To determine if the transactions the server is processing are CPU or I/O intensive, look at the Windows Task Manager: If the CPU gauge shows around 100% CPU usage with no other applications running, the transactions are CPU intensive. If the CPU gauge shows less than 80% CPU usage, the transactions are, most likely, I/O intensive (this includes network I/O). Here are some scenarios and recommendations: Scenario Low transaction volume. Each transaction takes a few seconds to process. High transaction volume. Each transaction takes a few seconds to process. Any volume. Each transaction takes a few minutes to process. Mostly I/O intensive. Any volume. Each transaction takes minutes to process. Mostly CPU intensive. Recommended Server Setup No changes in configuration are required. One server should be able to process all of the requests within reasonable period of time. If clients are getting the time-out waiting for Server error message, increase the time-out value for the clients. To do this, set TimeOut INI option in the ReqType:XXX control group. You can set this option for each request type. This lets you set it to a higher value for requests which take longer to process. The default time-out for each request type is 60 seconds. To increase total throughput, try adding a second server. Keep in mind that adding a second server does not let you process twice as many transactions. You will probably see a performance increase of around percent. You may see this scenario when the rules have to retrieve data from a mainframe computer via ODBC or DB2, or when the rules have to do a lot of file processing.*1 In this situation, try adding additional servers on the same computer as the original server. You may see this scenario if you use a lot of calculation-intensive rules. In this scenario, the best solution is to add a second server on a separate computer. If you want to add more servers, add them on separate computers so you end up with a computer for each server. *1 The number of ODBC connections to MVS is limited by MVS and ODBC drivers. You cannot exceed this limit. 47

64 Chapter 2 Using the Internet Document Server Performance Measurements when Using Multiple Servers To help you choose the right server setup for your needs, here are some test results compiled from multiple server runs. These tests were run with a specified number of servers and clients. The servers were started from the command line, so there is no built-in web server overhead or limitations. For these tests, all clients ran at the same time. In typical implementations, you seldom have all users working on the server at the same time. Clients Number of servers Number of transactions per hour Short transactions, each takes about 1 second or less (note the performance degradation) Not CPU intensive transactions, each takes about 40 seconds CPU intensive transactions (100% CPU usage in the NT task manager), each takes about 10 seconds (same PC) 372 (no difference) - 2 (different PC)

65 Using Multiple Servers Setting Up Additional Servers You can start multiple instances of IDS by default. Running multiple instances of IDS is generally required for performance reasons. You control the number of instances IDS starts using this Configuration option: <section name= DocumentServer > <entry name= Instances >2</entry> </section> The default is two (2). You can enter a number from 1 to 10. Specifying the INI file to use You can specify the name and location of the DAP.INI file you want to use in the DPRInit rule as shown here: <section name= REQTYPE:INI > <entry name= function >dprw32->dprinit,500,d:\docserv\dap.ini</ entry> </section> Separate parameters with commas. The first parameter specifies the file cache. The default FAP file cache is The second parameter specifies where to find the INI file. DAP.INI is the default file name. NOTE:This approach does not work with the DPRCoLogin rule. Use the DPRLogin rule instead. 49

66 Chapter 2 Using the Internet Document Server SETTING UP A WINDOWS NT SERVICE You can configure the Internet Document Server to run as a Windows service. NOTE:Do not install the Internet Document Server and Internet Document Master Server as a Windows NT service until you have checked to make sure the system was properly installed. To set up the Internet Document Server as a Windows service, go to the directory where it is installed and run the batch file, DS-SERVICE.BAT. This will install IDS as a service called Docupresentment Server. To uninstall Internet Document Server as a Windows service, go to the directory where it is installed and run the batch file, DS-SERVICE-UNINSTALL.BAT. When running as a service, messages usually written to the console's standard output are written to a text file named WATCHDOG-STDOUT.TXT. The messages usually written to the console's standard error are written to a text file named WATCHDOG- STDERR.TXT. 50

67 Handling Multi-threaded Requests HANDLING MULTI- THREADED REQUESTS IDS can run multiple requests at the same time in separate threads of execution. If the requests run are safe to run in multiple threads and are mixed between I/O-based and computation-based, then running some requests in multiple threads can be an alternative to running multiple instances of IDS. An instance of IDS has a main thread that initializes global data and is the default for running all requests. You can configure IDS to start extra threads to run some requests. This is done in the docserv.xml configuration file, in the BusinessLogicProcessor section: <entry name="requestprocessors >1</entry> Entry RequestProcessors Description Indicates how many extra threads to set up to run requests. If the entry is set to zero (0), no extra threads are set up and all requests are run serially. To specify that a request can be run in an extra thread, in the docserv.xml configuration file, create a 'MultiThreadedRequests' subsection in the 'BusinessLogicProcessor' section: <section name="multithreadedrequests"> <entry name="request">ftpsend</entry> </section> All requests mentioned in this section will be run in multiple threads if the 'RequestProcessors' entry is set up. Each thread has its own separate input and output state to keep track of message variables and attachments per request being run, so code in rules that read or change message variables or attachments will not interfere with other requests running at the same time. This includes calls to: DSIMessage.getMsgVar, DSIMessage.setMsgVar, and so on in the Java and scripting rules. DSIJQueue.LocateAttachVar, DSIJQueue.AddAttachVar, and so on in the IDS version 1.x Java rules. DSILocateAttachVar, DSIAddAttachVar, and so on in the C rules. This does not mean all rules are safe to run in multiple threads, just that calls to the DSI API code do not prevent rules from being run in multiple threads. For example, Documaker code is not safe to run in multiple threads. If you need to run multiple Documaker-related requests at the same time, you must run multiple instances of IDS. 51

68 Chapter 2 Using the Internet Document Server INI vs. THREADINI control sections IDS version 1.x has a INI control section where global data is created and destroyed. Since IDS version 2.x can have multiple threads, you need a way to create and destroy data needed by each thread. This is done with the THREADINI control section. The THREADINI control section is run once for each thread as it is started and once for each thread when it is stopped. An example of code needing this is COM setup in Windows; every thread in Windows that will be running COM code needs to initialize COM for that thread. Here is a sample INI and THREADINI control section: <section name="reqtype:ini"> <entry name="function">irlw32->;irlinit</entry> <entry name="function">dprw32->;dprinit</entry> </section> <section name="reqtype:threadini"> <entry name="function">dsicorul->;init</entry> </section> Threads and Inter-Rule data in C rules IDS rules written in C use the functions DSICreateValue, DSILocateValue, and DSIDestroyValue to create data in one part of code to use in other parts of code. A common usage of these functions is to allocate data in the DSI_MSGINIT part of a function, use it in the DSI_MSGRUNF and DSI_MSGRUNR parts of a function, and free the data in the DSI_MSGTERM part of a function. All this is done inside a single request. A less common usage is to set up data in the INI request used for the entire runtime of IDS. Rules in the INI request type have their DSI_MSGINIT code run when IDS starts and their DSI_MSGTERM code run when IDS shuts down. This means data allocated with DSICreateValue in the DSI_MSGINIT part of a INI request rule function is available for all other requests run by IDS. This data is usually read-only, for example configuration information from the DAP.INI file and MRLs set up by the DPRInit function. Since IDS can run requests in multiple threads simultaneously, each thread needs it's own set of data for running requests plus access to the global configuration information. And, at the same time, each thread needs to remain compatible with C rules using the DSICreateValue, DSILocateValue and DSIDestroyValue functions. This is done by having two data contexts for data: global and thread-local. Global context is when IDS is running rules in the INI request type. The INI rules are run with DSI_MSGINIT before the other rule threads are created, and the rules are run with DSI_MSGTERM after the other threads are destroyed. Thread-local context is when all other requests are run. When the functions DSICreateValue and DSIDestroyValue are called during global context the values are put in global data; in thread-local context the values are put in thread-local data. When DSILocateValue is called in thread-local context, the thread-local data is first checked to see if has the data. If the value is in thread-local data, it is returned. If not, then global data is checked, and returned if it is there. Only if the value is missing in both places will DSILocateValue indicate that the data is not found. This allows C rules using DSICreateValue, DSILocateValue, and DSIDestroyValue to run in multiple threads but remain compatible with previous versions of IDS. 52

69 Handling Multi-threaded Requests Threads and Inter-Rule data in Java and scripting rules Since Java rules are based on objects that have their own state, this use of the C DSI-Value functions is not required. When Java rules are used with transaction scope, an instance of the class will remain for the run of the request, so data can be put in member variables and will remain. There are functions available that do the same thing for passing data from one rule to another or for use in one rule if it is run in static scope. The RequestState object passed in to a Java rule has the methods putobject, getobject, and removeobject. Since each thread has its own RequestState object, you can use these functions to keep track of data for each request. These functions let you store any type of object, not just byte arrays like the C functions. To pass data between C and Java rules, use the RequestState methods createvar, locatevar, and destroyvar. These correspond to the C functions DSICreateValue, DSILocateValue, and DSIDestroyValue, so they can only use byte arrays for passing data. The data context setup is also the same as for these C functions. To set up and use Java global data, use the GlobalVarStorage class from the DocuCorpUtil library. USING THE JAVA TEST UTILITY IDS includes a Java threads test utility you can run to send requests to IDS using single or multiple threads. It also supports attachments and rowsets. You can also feed it a debug message file, such as a receive.msg file generated by IDS (see the ReceiveMessage log4j category in the logconf.xml file under the docserv directory) which can contain more than one transaction that was previously processed. This can be useful in recreating or duplicating a set of transactions for testing. You can invoke the test utility via the threads script shipped with IDS. NOTE:If you invoke the test utility without any arguments, it displays usage information. For more information, see the HTML documentation for the com.docucorp.test.threads class that is included with Java SDK. You must have Java version 5 or later installed to use this test utility. 53

70 Chapter 2 Using the Internet Document Server USING RULES WRITTEN IN OTHER SCRIPTING LANGUAGES IDS can run rules written in scripting languages. In addition to rules written in Java, C, and Visual Basic, IDS adds rules written in scripting languages (Java Script, Python, and so on) for debugging, fast prototyping, or rarely run rules. In a REQTYPE section, add a rule entry such as: <entry name="function">script;test.py;runrule</entry> This rule entry uses the runrule function in the Jython script file (TEST.PY). The following example programs do the same thing. The first is in JavaScript, the second in Jython, a dialect of Python that runs under Java Virtual Machines. You can find information about which languages are available and where to get them at: Here is a JavaScript example rule: function runrule(requeststate, idsargs, idsmessage) { switch (idsmessage) { case IDSConstants.init : break; case IDSConstants.runForward : break; case IDSConstants.runReverse : text = requeststate.getoutput().getmsgvar("language"); if (text == null) { text = "JavaScript"; } else { text = text + " and JavaScript"; } requeststate.getoutput().setmsgvar("language", text); break; case IDSConstants.terminate : break; } return IDSConstants.success; } Here is a Jython example rule: def runrule(requeststate, idsargs, idsmessage): if idsmessage == IDSConstants.runReverse: text = requeststate.getoutput().getmsgvar("language") if text is None: text = "Jython" else: text = text + " and Jython" requeststate.getoutput().setmsgvar("language", text) return IDSConstants.success 54

71 Using IDS as a Client to Another IDS USING IDS AS A CLIENT TO ANOTHER IDS You can set up an IDS installation running under Linux and use the RunRP rules to archive data from Documaker output into a Documanage archive stored on a Windows NT computer. To do this, you must set up your system as explained below. NOTE:This solution can also be used for other situations, such as when you need to execute rules across platforms. Linux IDS Client Queues (Set 1) IDS Server 1 (multiple instances) Documaker (GenData) Queues (Set 2) IDS Server 2 (multiple instances) Archive (Documanage) Windows NT The archive process The IDS client submits an XML extract file to IDS (IDS Server 1). On this request IDS Server 1 executes the RunRP rules. After Documaker executes and prior to this transaction being complete, IDS Server 1 has access to NA file, POL file, and NEWTRN file. These files are attached to the request to IDS Server 2 (on Windows NT). IDS Server 2 archives data into Documanage and returns the error code. IDS Server 1 receives the return code from IDS Server 2, adds all the attachment variables from IDS Server 2 to the output attachment, and replies to the IDS client. IDS Server 2 does not use GenArc or single-step GenData to archive, which reduces the number of resource and setup files needed on Windows NT. 55

72 Chapter 2 Using the Internet Document Server The retrieval process The IDS client submits the request to retrieve data to IDS Server 1. IDS Server 1 submits the request to get the DPA file to IDS Server 2. The IDS Server 2 gets the DPA file from Documanage, attaches it to the SOAP message and sends the reply to IDS Server 1. IDS Server 1 receives the Documaker file, runs rules to produce a PDF file and sends the PDF file to the client (this can be done as a file on disk or attached to the SOAP message). Keep in mind: MQSeries is used as a queuing system in both places Java rules are used to send messages from IDS Server 1 to IDS Server 2 so JVM has to be available on Linux platform to execute Java rules. Some of the Documaker resources (like DFD files, INI files) must be available to both IDS implementations and must be kept in sync. One way to synchronize resources is by using mounted volumes from Windows NT to Linux to IDS Server 2 on Windows NT has access to the same physical files as IDS Server 1 on Linux. You use the IDSClientRule to make IDS act as a client to another implementation of IDS. This rule is explained below: Using the IDSClientRule Use this rule to have IDS act as an IDS client to send a request to a second IDS. You can set communications parameters to talk to the second IDS and request parameters to set up request types and other attachment variables to send to the second IDS. The attachment variables and files you want to send can be hard-coded or retrieved as attachment variables from the first IDS. Attachment variables returning from the second IDS can be put in the input or output queue of the first IDS. If the second IDS returns files in its result, the files can be written to disk with unique names and cached. The unique names of the files are stored in attachment variables for use by other rules. The rule can be run on the run forward or run reverse message. Keep in mind that only MQSeries setups are supported. This rule has transaction scope and the method in the Java class is callrequest. The syntax of the function line in a request is shown here: Syntax function = dsijrule->javarunrule,;com/docucorp/ids/rules/ IDSClientRule;CALL;transaction;callRequest;ARG,MESSAGEFILE=call.propert ies&requestfile=call.txt&timeoutsec=15&run=runf&debug=y&destination=out PUT Parameter MESSAGEFILE REQUESTFILE TIMEOUTSEC RUN Description This parameter points to the file that holds the settings for communicating with the second copy of IDS. This parameter points to the file that holds attachment variables and files that are sent as a request to the second IDS. Indicates the number of seconds to wait for a reply from the second IDS. Indicates the request message during which the rule will run. This parameter is either RUNF for the run forward message or RUNR for the run reverse message. 56

73 Using IDS as a Client to Another IDS Parameter DEBUG DESTINATION Description Determines if debugging messages are put in the Java rule log file. The default is No. This parameter says which queue will get the results back from the second copy of IDS. The default is OUTPUT. You can set communications parameters to talk to the second IDS. This is done by setting up the file referenced in the MESSAGEFILE rule parameter. Here is a sample IDSClientRule communications properties file. Parameters are explained by comment lines above the parameters: This indicates the class that implements queuing, in this case MQSeries: queuefactory.class=com.docucorp.messaging.mqseries.dsimqmessagequeu efactory This indicates the class that formats the DSIMessage to send to IDS. Uncomment this line to communicate with IDS version 1.6, leave it commented for subsequent versions: #marshaller.class=com.docucorp.messaging.data.marshaller.legacybyte ArrayDSIMessageMarshaller The following are sample MQSeries parameters. This is the queue manager for system hosting MQSeries: mq.queue.manager=qm_pdtest This specifies the MQSeries channel the messaging client and IDS use to communicate: mq.queue.channel=scc_pdtest The MQSeries communication can be either in bindings mode (the program is running on the same machine as the MQSeries server) or in client mode (the program is running on a different machine and communicates with the MQSeries server through TCP/IP). If the setting mq.tcpip.host is defined, the system uses client mode, otherwise it uses bindings mode: mq.tcpip.host= This specifies the TCP/IP port the MQSeries server is listening to is most commonly used. mq.tcpip.port=1414 A client program sends requests out and gets results in: mq.outputqueue.name=requestq mq.inputqueue.name=resultq This determines how long, in seconds, the MQSeries server keeps a message in the queue if a program does not get it. mq.outputqueue.expiry=120 Here is the complete example: queuefactory.class=com.docucorp.messaging.mqseries.dsimqmessagequeu efactory #marshaller.class=com.docucorp.messaging.data.marshaller.legacybyte ArrayDSIMessageMarshaller mq.queue.manager=qm_pdtest mq.queue.channel=scc_pdtest 57

74 Chapter 2 Using the Internet Document Server mq.tcpip.host= mq.tcpip.port=1414 mq.outputqueue.name=requestq mq.inputqueue.name=resultq mq.outputqueue.expiry=120 Attachment variables and files to send can be hard coded or retrieved as attachment variables from the first IDS. This is done in the file mentioned in the REQUESTFILE parameter. The file can have these sections: [MESSAGES] for attachment variables in name=value pairs [TEXTFILES] for sending text files [BINARYFILES] for sending binary files [RECEIVEDFILES] for the handling of files returned from the second IDS [TEXTFILES] and [BINARYFILES] have file ID=file location pairs, listing the name that the file data can be identified by and where to get the file's information. Here is a sample REQUESTFILE: [MESSAGES] REQTYPE=CUSTOMREQUEST USERID=GUEST [TEXTFILES] TEXT1=/home/fap/text1.txt TEXT2=/home/fap/text2.txt [BINARYFILES] BIN1=/home/fap/binary1.bin BIN2=/home/fap/binary2.bin You can use attachment variables from the current running state of IDS as values in any of the above sections. For example: ~GetAttach VARIABLENAME,INPUT will use an attachment variable from the input queue ~GetAttach VARIABLENAME,OUTPUT will use an attachment variable from the output queue. If instead of the name of an attachment variable, you use an asterisk (*), every attachment variable from that queue will be sent. Here is an example ~GetAttachment *,INPUT This tells the system to ignore the attachment variable name. If you use an asterisk (*), the request type of the request to send is not changed. An explicit REQTYPE is required in the REQUESTFILE file. For the [RECEIVEDFILES] section, the string to the left of the equals sign (=) is the name of the file coming back from the second IDS. To the right of the equals sign is the name of the attachment variable that contains the unique name and path of the generated file, the directory where the file will be stored, and, optionally, the number of seconds to cache the file. The default cache is For text files, the system appends.txt. For binary files, it appends.bin. Here is a complete example of a request file: [MESSAGES] REQTYPE=CUSTOMREQUEST 58

75 Using IDS as a Client to Another IDS DUMMY = ~GetAttach *, INPUT [TEXTFILES] TEXT1=c:\fap\text1 [BINARYFILES] BIN1= ~GetAttach BINFILE, OUTPUT [RECEIVEDFILES] ZZZT=MYTEXT,., 1800 ZZZB=MYBIN, c:\fap, 600 In this example after the run, if the current directory is c:\docserv, then the file sent in ZZZT would be stored in c:\docserv\ txt That file name would be stored in the attachment variable MYTEXT and the file sent in ZZZB would be stored in: c:\fap\ bin That file name would be stored in the attachment variable MYBIN. The text file, (c:\docserv\ txt) would be cached by IDS for 1800 seconds. The binary file (c:\fap\ bin) would be cached by IDS for 600 seconds. 59

76 Chapter 2 Using the Internet Document Server MONITORING IDS WITH SNMP TOOLS You can connect IDS to SNMP agents (SNMP server programs) so performance data can be viewed by SNMP monitors (SNMP client programs). The connection is done with the SNMP AgentX protocol, so you can use any SNMP agent program that supports AgentX. If an AgentX-enabled SNMP agent is not available for a particular platform, IDS includes a Java-based SNMP agent application you can use. This version includes a Management Information Base (MIB) file, that can be used by SNMP monitor programs to map text names and data types to the MIB number addresses for SNMP objects. The primary server reports the number of instances of IDS that are running. Each instance will report: The amount of time since it started running. The amount of time since the last restart. The number of successful transactions. The number of transactions that caused errors. The number of times the instance has been restarted. The amount of time needed to run the last transaction. The request type of the last transaction. The amount of time needed to run the longest transaction so far. The request type of the longest transaction so far. The number of transactions that have occurred in the last minute. The number of transactions that have occurred in the ten last minutes. The number of transactions that have occurred in the last hour. To monitor IDS with SNMP tools, in the docserv.xml configuration file, create an SNMP subsection under the DocumentServer, messaging subsection, as shown here: <section name="documentserver"> <section name="snmp"> <entry name="enabled">yes</entry> <entry name="masteraddress"> </entry> <entry name="masterprotocol">udp</entry> <entry name="masterport">705</entry> </section> </section> Entry Enabled MasterAddress MasterProtocol Description Determines whether or not SNMP support is enabled. The default is No. Is the IP address of where the master SNMP agent program is running. The default is localhost. Is the communications protocol for communicating with the SNMP agent program. You can enter UDP for communicating with IDS's included agent or TCP for communicating with other AgentX-based SNMP agent programs, such as net-snmp. The default is UDP. 60

77 Monitoring IDS with SNMP Tools Entry MasterPort Description Is the port the master SNMP agent program uses for the AgentX protocol. The default is 705. MONITORING REQUESTS The SNMP monitoring capabilities in IDS allow the monitoring of extra requests and rules by performance monitoring applications, such as LoadRunner. You can have up to five statistics monitors to measure performance by SNMP. Each monitor measures either an entire request or an individual rule in a request. For each monitor, the time it takes to execute each message part (initialization, run forward, run reverse, and terminate) as well as the total time for execution is available. NOTE:The MIB file can use these monitors, but it is not required. To enable the statistics monitors, in the docserv.xml configuration file, in the DocumentServer section, add a StatisticsMonitors subsection, as shown here: <section name="documentserver">... <section name="statisticsmonitors"> <entry name="monitor">sch</entry> <entry name="monitor">rcp</entry> <entry name="monitor">prt</entry> <entry name="monitor">prt/7</entry> <entry name="monitor">prt/8</entry> </section> </section> Each Monitor entry can be the name of a request or the name of a request followed by a slash ( / ) and a number. The number is the number of the active entry in the request section. For example, for this request type... <section name="reqtype:prt"> <entry name="function">atcw32->atclogtransaction</entry> <entry name="function">atcw32->atcloadattachment</entry> <!-- This comment line is skipped --> <entry name="function">dprw32->dprsetconfig</entry> <entry name="function">dprw32->dprtermdb</entry> <entry name="function">dprw32->dprinitlby</entry> <entry name="function">atcw32->atcunloadattachment</entry> <entry name="function">dprw32->dprretrieveformset</entry> <entry name="function">dprw32->dprprint</entry> <entry name="function">dprw32->dprprocesstemplates</entry> <!-- --> </section> The monitor entry PRT/7 would refer to the DPRRetrieveFormset rule and PRT/8 would refer to the DPRPrint rule. 61

78 Chapter 2 Using the Internet Document Server MANAGING IDS INSTANCES You can use the Watchdog process to manage and monitor IDS instances. The Watchdog process is started, stopped, and configured as a service. It is then responsible for managing and monitoring the IDS instances. The Watchdog process monitors the health of each instance and restarts it or stops it when needed. You can also configure the Watchdog process through log4j to send notifications when an instance encounters a fatal or mission-critical error. The Watchdog process also monitors the idle time for each instance and starts additional ones when all running instances are under load. You have these options: NOTE:Define these options in the DocumentServer section of the docserv.xml file. Do not confuse these options with similar options for the HTTP router process in the same file. The router is a different process and it does not support load balancing. Options Instances UseLoadBalancing MaxInstances Description (Optional) The number of IDS instances Watchdog should start at startup. The default is two (2). (Optional) This option controls whether Watchdog checks the idle time of the instances that are running and starts additional ones when all of them are busy. Instances are considered busy when their idle time is less than the value provided in the MinIdleTimeSeconds option. Watchdog uses the value provided in the IdleTimeChecks option to determine the number of idle time checks to run before it starts additional instances. When additional instances are started for load balancing purposes, they are shut down by Watchdog if their idle time exceeds the value in the MaxIdleTimeSeconds option. The maximum number of instances running is the value for the MaxInstances option (including the instances configured in the Instances option). Watchdog checks the idle time of the current instances at the interval specified in the IdleTimeCheckIntervalSeconds and if all are busy, it starts an additional number of instances equal to the value provided in the IncrementCount option. Please note that Watchdog does not start checking the busy time of the current instances until the time provided in the IdleTimeCheckDelaySeconds option is reached. Make sure the value for the delay is ample enough to provide for all instances to start and reach an idle time equal to or greater than the value provided for the MinIdleTimeSeconds option. You can enter Yes (or True) or No (or False). The default is Yes. (Optional) This option controls the maximum number of instances that can run when the UseLoadBalancing option is enabled. The default is the number of processors times two. 62

79 Managing IDS Instances Options IncrementCount IdleTimeCheckIntervalSeconds IdleTimeCheckDelaySeconds IdleTimeChecks MinIdleTimeSeconds MaxIdleTimeSeconds MaxTransactions MaxReportIntervalSeconds MaxUpTimeSeconds Description (Optional) This option controls how many additional instances are started during the current check when all instances running are busy and the UseLoadBalancing option is enabled. The default is two (2). (Optional) This option controls how often Watchdog checks the idle time of the instances that are running to determine if they are busy so it can start additional ones when the UseLoadBalancing option is enabled. The default is 60 seconds. (Optional) This option controls the initial delay before the first idle time check is performed by Watchdog when the UseLoadBalancing option is enabled. This time should be ample enough to allow all instances to start and reach an idle time equal to or greater than the value provided for the MinIdleTimeSeconds option. The default is 120 seconds. (Optional) This option defines the number of consecutive Idle time checks that must fail, meaning all instances were busy during each check, before more instances are started when the UseLoadBalancing option is enabled. Each check takes place at the IdleTimeCheckIntervalSeconds interval. The default is two (2). (Optional) This option controls the minimum idle time for each instance. The idle time represents how long it has been since an IDS instance processed the last request. If Watchdog detects an instance has an idle time less than the value provided for this option, it considers it busy for the purpose of load balancing. The default is five (5) seconds. (Optional) This option controls the maximum idle time for an additional instance. The idle time represents how long it has been since an IDS instance processed the last request. If Watchdog detects an instance which was started for the purpose of load balancing has reached an idle time greater than the value provided for this option, it sends the instance a shutdown request. The default is 120 seconds. (Optional) This option controls the maximum number of transactions an instance can process before it is restarted by Watchdog. Enter -1 to disable this option. The default is (Optional) This option controls the maximum time interval that can elapse without an instance reporting back to Watchdog before it is restarted. The default is 120 seconds. (Optional) This option controls the maximum time interval an instance can run before it is restarted by Watchdog. Enter -1 to disable this option. The default is seconds (8 hours). 63

80 Chapter 2 Using the Internet Document Server Options MaxRestarts RestartIntervalSeconds MaxMemoryUsagePercent MemoryChecks CheckIntervalSeconds UseJMX Description (Optional) This option controls the maximum number of restart attempts that can occur within a time interval specified by the RestartIntervalSeconds option before Watchdog shuts down. Use this option to prevent Watchdog from attempting to restart instances infinite times when they cannot be started due to configuration errors and so on. The default is five restarts. (Optional) This option controls the interval used with the MaxRestarts option to determine if Watchdog is having a problem starting instances and to prevent continuous or infinite restart attempts. The default is 60 seconds. (Optional) This option controls the maximum percentage of the total JVM memory that can be used by an instance before Watchdog will restart it. Note that the total memory used in this calculation does not include any memory used by native code. This option is used with the MemoryChecks option. The default is 95. (Optional) This option controls the total count of consecutive memory checks that must be present, where the memory usage by an instance exceeds the value provided for the MaxMemoryUsagePercent option for each check, at which point Watchdog will restart it. The interval for each memory check is controlled by the CheckIntervalSeconds option. The default is -1, which disables this option. (Optional) This option controls the time interval used by Watchdog to check the health of each instance. The default is one (1) second. (Optional) This option controls whether JMX is used to monitor additional health metrics for each instance. Enabling this option lets Watchdog also monitor class loading, memory usage, garbage collection, and deadlocks in Java code for each instance. Note that enabling this option requires an additional and separate TCP/IP port for each instance so that it can be started with a JMX agent. You can enter Yes (or True) or No (or False). The default is No. Only use this option for debugging or testing purposes. Do not use this option in production mode because it causes extra overhead and it requires additional ports be used. 64

81 Managing IDS Instances Options JMXPort JMXCheckIntervalSeconds JMXMemoryChecks JMXVerboseMemory JMXVerboseClassLoader WaitForShutdownSeconds OrderedRestartIntervalSeconds Description (Optional) This option controls the starting JMX port to use when starting each instance with a JMX agent if the UseJMX option is enabled. Note that the starting port value should consider that each additional instance that is started will try to use a continuous/incremental port number. The default starting port value is (Optional) This option controls the time interval used to run JMX checks for each instance when the UseJMX option is enabled. The default is 60 seconds. (Optional) This option controls the total count of consecutive JMX memory checks that must be present, where the memory usage by an instance exceeds the value provided for the MaxMemoryUsagePercent option for each check, at which point Watchdog will restart it. The interval for each check is controlled by the JMXCheckIntervalSeconds option. The default is -1, which disables this option. (Optional) This option controls whether Watchdog turns on verbose memory to output GC statistics for each IDS instance when the UseJMX option is enabled. You can enter Yes (or True) or No (or False). The default is No. (Optional) This option controls whether Watchdog turns on verbose class loading for each IDS instance when the UseJMX option is enabled. You can enter Yes (or True) or No (or False). The default is No. (Optional) This option controls how long Watchdog waits for an instance to shut down after it issues a shutdown command and before it terminates the instance. The default is 20 seconds. (Optional) This option controls the interval used for restarting each of the IDS instances in a sequential/ ordered manner when the MaxTransactions or MaxUpTime options are used. Watchdog restarts one instance at a time and waits for an amount of time equal to the value specified for this option before it restarts the next one and so on until it has restarted all of them. If you set this option to less than 60 seconds, you can negatively affect performance. The default is 60 seconds. 65

82 Chapter 2 Using the Internet Document Server Determining the instance number of a server You can determine the exact instance number of the (IDS) server the rule is running on. For instance, you can use this to determine which TCP/IP port to use when IDS has to talk to the GenData process. This DSI variable can be accessed from an IDS rule: IDSINSTANCE The value is a character array of a zero-based value. For example, on the primary IDS the value will be zero (0), on first secondary instance it will be one (1), and so on. To get the value, the rule has to call DSILocateValue(). Categories and appenders used by Watchdog Here are the Log4J categories and appenders used by Watchdog (see logconf.xml file included in the docserv directory): These mail categories and appenders are used to send notifications during mission critical errors, such as when IDS has a fatal exception: <!--Used by Watchdog to send notifications.--> <category name=" " additivity="false"> <priority value="error"/> <appender-ref ref=" "/> </category> <appender class="org.apache.log4j.net.smtpappender" name=" "> <param value="1" name="buffersize"/> <param value=" " name="smtphost"/> <!--Comment out the SMTPUsername and SMTPPassword parameters to skip authentication.--> <!-- <param value="" name="smtpusername"/> <param value="" name="smtppassword"/> --> <param name="from"/> <!--Use a comma delimited string of addresses for To, cc and bcc.--> <param name="to"/> <param name="cc"/> <param name="bcc"/> <param value="error Message" name="subject"/> <param value="error" name="threshold"/> <layout class="org.apache.log4j.patternlayout"> <param name="conversionpattern" value="%d-[%t]-%m\n"/> </layout> </appender> This category is used to log informational output by Watchdog: <!--Used to log Watchdog informational output.--> <category name="watchdog.output" additivity="false"> <priority value="info"/> <appender-ref ref="watchdog-stdout"/> <appender-ref ref="watchdog-allroll"/> </category> These categories and appenders are used to log debug and error messages by Watchdog. Change the Priority value to 'DEBUG' to log debug messages. <!--Used to log Watchdog debug and error messages.--> <category name="com.docucorp.watchdog.watchdog" additivity="false"> 66

83 Managing IDS Instances <priority value="error"/> <appender-ref ref="watchdog-stdout"/> <appender-ref ref="watchdog-allroll"/> </category> <!--Logs Watchdog messages to stdout.--> <appender name="watchdog-stdout" class="com.docucorp.util.logging.idsconsoleappender"> <layout class="org.apache.log4j.patternlayout"> <param name="conversionpattern" value="%d-[%t]-%m\n"/> </layout> </appender> <!--Watchdog Appender.--> <appender name="watchdog-allroll" class="com.docucorp.util.logging.idsfileappender"> <param name="append" value="true"/> <param name="file" value="watchdog.log"/> <param name="encoding" value="iso "/> <layout class="org.apache.log4j.patternlayout"> <param name="conversionpattern" value="%d-[%t]-%m\n"/> </layout> </appender> These categories and appenders are used by each Watchdog instance monitor thread to log information for each instance monitored separately. Change the Priority value to 'DEBUG' to log debug messages. <!--Used to log each thread's Instance Monitor debug and error messages.--> <category name="com.docucorp.watchdog.monitor.instancemonitor" additivity="false"> <priority value="error"/> <appender-ref ref="instance-stdout"/> <appender-ref ref="instance-allroll"/> </category> <!--Logs Instance Monitor thread messages to stdout.--> <appender name="instance-stdout" class="com.docucorp.util.logging.idsconsoleappender"> <layout class="org.apache.log4j.patternlayout"> <param name="conversionpattern" value="%d-[%t]-%m\n"/> </layout> </appender> <!--Logs Instance Monitor thread messages to separate file(s).--> <appender name="instance-allroll" class="com.docucorp.watchdog.util.watchdogfileappender"> <param name="append" value="true"/> <param name="file" value="~threadid.log"/> <param name="encoding" value="iso "/> <layout class="org.apache.log4j.patternlayout"> <param name="conversionpattern" value="%d-[%t]-%m\n"/> </layout> </appender> 67

84 Chapter 2 Using the Internet Document Server These categories and appenders are used to log debug and error information for IPC (Inter-Process Communication) messages between Watchdog and the instances. Change the Priority value to 'DEBUG' to log debug messages. <!--Used to log IPCConnector debug and error messages.--> <category name="com.docucorp.watchdog.ipc.ipcconnector" additivity="false"> <priority value="error"/> <appender-ref ref="connector-stdout"/> <appender-ref ref="connector-allroll"/> </category> <!--Logs IPCConnector debug and error messages to stdout.--> <appender name="connector-stdout" class="com.docucorp.util.logging.idsconsoleappender"> <layout class="org.apache.log4j.patternlayout"> <param name="conversionpattern" value="%d-[%t]-%m\n"/> </layout> </appender> <!--Logs IPCConnector debug and error messages to a file.--> <appender name="connector-allroll" class="com.docucorp.watchdog.util.watchdogfileappender"> <param name="append" value="true"/> <param name="file" value="~threadid.log"/> <param name="encoding" value="iso "/> <layout class="org.apache.log4j.patternlayout"> <param name="conversionpattern" value="%d-[%t]-%m\n"/> </layout> </appender> A watchdog configuration file can contain multiple sections, each with its own set of options. Here are some examples: Watchdog section Here is an example of the Watchdog section: <configuration> <section name="watchdog"> <entry name="usejmx">no</entry> <entry name="jmxcheckintervalseconds">60</entry> <entry name="jmxmemorychecks">3</entry> <entry name="jmxverbosememory">yes</entry> <entry name="jmxverboseclassloader">yes</entry> </section> <section version="2.3" name="documentserver"> <entry name="startcommand">java</entry> <entry name="startarguments">-djava.endorsed.dirs=lib/ endorsed -Xmx256m -Ddsimessage.debug=N -Dmarshaller.output=N -cp.;lib/docucorpstartup.jar -Dids.configuration=docserv.xml - Dlogging.configuration=logconf.xml com.docucorp.startup.startup com.docucorp.ids.documentserver</entry> <entry name="startdirectory">.</entry> <entry name="instances">2</entry> <entry name="useloadbalancing">yes</entry> <entry name="maxinstances">10</entry> <entry name="incrementcount">2</entry> <entry name="idletimecheckintervalseconds">60</entry> <entry name="idletimecheckdelayseconds">120</entry> 68

85 Managing IDS Instances <entry name="idletimechecks">2</entry> <entry name="minidletimeseconds">5</entry> <entry name="maxidletimeseconds">120</entry> <entry name="maxtransactions">10000</entry> <entry name="maxreportintervalseconds">60</entry> <entry name="maxuptimeseconds">28800</entry> <entry name="maxrestarts">5</entry> <entry name="restartintervalseconds">60</entry> <entry name="maxmemoryusagepercent">95</entry> <entry name="memorychecks">3</entry> <entry name="checkintervalseconds">1</entry> <entry name="usejmx">no</entry> <entry name="jmxport">49163</entry> <entry name="jmxcheckintervalseconds">60</entry> <entry name="jmxmemorychecks">3</entry> <entry name="jmxverbosememory">yes</entry> <entry name="jmxverboseclassloader">yes</entry> <entry name="waitforshutdownseconds">20</entry> <entry name="orderedrestartintervalseconds">60</entry> </section> </configuration> These JVM options are supported: Option -Dwatchdog.configuration -Dlog4j.configuration -Dwatchdog.prefix Description (Optional) The name of the XML configuration file for watchdog. The default is docserv.xml. (Optional) The name of the XML configuration file for LOG4J. The default is logconf.xml. (Optional) A unique string that should be used as the prefix for all Watchdog files/locks generated on disk. Use this option when running more than one Watchdog instance from the same directory. Here are some examples: Scenario 1 Scenario 2 A platform contains a single CPU and the default values are used for the Instances option and for load balancing. In this case, the default value of Instances will be two (2) and the default value of MaxInstances will also be two (2) so no load balancing will occur. A platform contains four CPUs and the default values are used for the Instances option and for load balancing. In this case the default value of Instances is two (2) and the default value of MaxInstances is 8. The default increment count will be two (2), the default minimum idle time will be 5 seconds, and the default maximum idle time will be 120 seconds. Load balancing will occur and Watchdog will check the idle time of any running instances every 60 seconds. If each of the instances running has an idle time that is less than 5 seconds, Watchdog deems them all busy and starts two additional instances. Watchdog then continues on to the next check interval. 69

86 Chapter 2 Using the Internet Document Server These steps are repeated during each check interval until the total number of instances running reaches eight. If any of the running instances were started for the purpose of load balancing and reach an idle time greater than 120 seconds, they are shut down by Watchdog. Scenario 3 A platform contains four CPUs and the value for the Instances option is set to 20 and the default values are used for load balancing. In this case the value for MaxInstances will be eight but the value for the instances will be greater than the value for the maximum instances that can be reached during load balancing so no load balancing will occur. 70

87 Sending Results and Receiving Requests in Multiple Formats SENDING RESULTS AND RECEIVING REQUESTS IN MULTIPLE FORMATS The HTTP-based and queue-based messaging systems in IDS can accept messages in multiple formats and will return results in the same format as the request. This is done so IDS can communicate with third-party products that would find it difficult to produce messages in current IDS-compatible formats. The translation is done by marshaller code that translates a foreign message format into the message format used internally by IDS (com.docucorp.messaging.data.dsimessage). Marshallers are Java objects that implement the interface com.docucorp.messaging.data.marshaller.dsimessagemarshaller, which is documented in the SDK Reference. Objects of the DSIMessage class hold the message variables and attachments passed in as input to IDS and the output message variables and attachments produced by processing requests in IDS. The most important functions for marshallers are shown here: Marshaller marshall unmarshall istype Takes A DSIMessage as an input and produces an object that is suitable for sending to a client application via messaging. An object from a client application and a DSIMessage, and uses the Object to fill in data in the DSIMessage. An object from a client application and determines if it is in the format of the marshaller. The messaging systems, both HTTP-based and queue-based, keep a list of marshallers for formats that they recognize. When a message comes in from a client application, a messaging system compares the message's format against the formats will recognizes using the istype function for each marshaller. If there is a match the incoming data is translated into a DSIMessage with the marshallers unmarshall function and the DSIMessage, holding the request to be processed, is used as input into the main request processing in IDS. This produces an output DSIMessage holding message variables and attachments. The output DSIMessage is translated into the same format as the input message and sent back to the client application. As a default, the HTTP-based messaging system understands the SOAP with MIME Attachments format. (See Using HTTP on page 125 for more information.) The default marshallers for the queue-based messaging system understand the SOAP with MIME Attachments format and the binary format used by IDS version 1.6 and earlier. The queue-based messaging system currently works with WebSphere MQ, formerly known as MQSeries, and Java Message Service based queues. Both queuing systems can deliver messages as text (a Java string) and binary (a Java array of bytes), so marshallers can work with either format. The HTTP-based messaging system only recognizes text with HTTP headers, such as Content-length, so marshallers written to work with HTTP must work within these limitations. 71

88 Chapter 2 Using the Internet Document Server Configuring and Deploying Marshallers To configure IDS to recognize custom marshallers, you can add a marshallers section to either of these sections: 'BusinessLogicProcessor', subsection 'messaging', subsection 'queue' 'BusinessLogicProcessor', subsection 'messaging', subsection 'http' For example, in the docserv.xml configuration file, in section 'BusinessLogicProcessor', subsection 'messaging', subsection 'queue' create a 'marshallers' section and add these entries: <section name="marshallers"> <entry name="marshaller.class">com.docucorp.messaging.data.marshaller.lega cybytearraydsimessagemarshaller</entry> <entry name="marshaller.class">com.docucorp.messaging.data.marshaller.soap MIMEDSIMessageMarshaller</entry> </marshallers> This sets up the queuing system to use these two formats for receiving and sending requests. If no entries are specified then IDS defaults to SOAP with attachments and legacy IDS byte format. NOTE:If a custom marshaller list is added to the configuration file, the default marshallers are not automatically added to the list. This allows greater customization. If you want to also use the default marshallers in messaging, you must add them to the marshallers list in addition to the custom marshallers. To deploy your marshaller code, package the Java class files in a JAR file and put it in the /lib subdirectory under where IDS was installed. The next time IDS starts your custom marshallers will be available. Using the DSIMessage marshaller class IDS version 2.1 added the DSIMessage marshaller class called XSLTTemplateDSIMessageMarshaller. For marshalling, the marshaller starts with the usual SOAP/XML format of a DSIMessage, then uses that as the source of a XSLT transformation to convert the SOAP message to a third-party XML format. For unmarshalling, the marshaller starts with a third-party XML format and the XSLT transformation converts it to the Docupresentment SOAP/XML format, which is then unmarshalled into a DSIMessage object. In addition to the usual marshalling methods, the marshaller adds methods to pass in the files holding the XSLT templates, or the text of the XSLT template directly. NOTE:This marshaller is mainly used in IDS rules, so there is no configuration-based setup of XSLT templates for marshalling and unmarshalling. You set up the XSLT with Java methods in the XSLTTemplateDSIMessageMarshaller class. These methods set up XSLT templates for the marshaller: 72

89 Sending Results and Receiving Requests in Multiple Formats public void setmarshallertext(string text) This method sets the XSLT text for marshalling messages (converting to a foreign format). public void setmarshallerfilename(string filename) This method sets the file that holds the XSLT for marshalling messages (converting to a foreign format). The file is loaded into the marshaller filter. public void setunmarshallertext(string text) This method sets the XSLT text for unmarshalling messages (converting from a foreign format). public void setunmarshallerfilename(string filename) This method sets the file that holds the XSLT for unmarshalling messages (converting from a foreign format). The file is loaded into the unmarshaller filter. 73

90 Chapter 2 Using the Internet Document Server LOGGING AND TRACING Severity levels There are several ways you can configure IDS to log messages. For instance, you can configure IDS to: Log only events based on their severity, from debug messages to fatal errors. Control where logging messages are sent, whether they go to files, the Windows event logger, into s, and so on. Include and format the relevant information, such as time of day, elapsed time since IDS was started, where the message came from, which thread the code is currently running in, and so on. Logging in IDS is based on the Log4j logging library. A complete description of Log4j's capabilities is available at IDS logging is configured by the file specified in the Java system property 'logging.configuration'. If this property is not set, the default is to look for the logconf.xml file in the current directory. This file is checked periodically for changes by IDS when it is running, so it is possible to change logging options while IDS is running. IDS does not need to restart when a logging change is made. Logging messages have a severity level assigned to them. This is used to determine if and when a logging message is written. From least to most severe, the severity levels are: DEBUG INFO WARN ERROR FATAL When setting up logging you can decide what kind of messages to receive by picking a severity level. Any messages at that severity level and those more severe are output. For example, if you choose a severity level of WARN, only WARN, ERROR, or FATAL messages are sent, while DEBUG and INFO messages are suppressed. For diagnosing problems, the severity level would be set to DEBUG to produce more messages. Logging categories What messages to log and where to log them is determined by logging categories or loggers. Categories are based on a hierarchy of names or words separated by periods. As an example, DocumentServer would be a parent category to DocumentServer.output and DocumentServer.error. When a parent category is assigned a severity level, all children categories inherit it as their default. Children categories can override these defaults. For example, if the DocumentServer category's severity level is set to WARN and the DocumentServer.output category's severity is set to INFO, then only DocumentServer and DocumentServer.error will use WARN. 74

91 Logging and Tracing The DocumentServer.output category is where normal runtime messages for IDS are sent, such as the startup message and how many transactions were completed at shutdown or restart time. Common errors encountered during configuration and rule setup are sent to the DocumentServer.error category. Since these messages are in logging categories, they can be sent to multiple places in addition to being printed on the console. There are other categories that have debugging messages and you may be asked to activate these by Support. NOTE:For additional information, see Using Logging Categories to Access the Internal Format of Requests on page 94. Logging appenders Logging formats The destinations for logging messages are known as appenders, since new logging messages are appended to the end of the file, event log, and so on. The most common appenders are for the console and for files. A category can send messages to multiple appenders. Like severity levels, appenders inherit from parent categories, but unlike severity levels, appenders are added to the parent appenders and do not override the parent category's settings. This inheritance can be turned off, as shown in the logging example. In addition to the logging message itself, other information can be configured to be output with the logging message, such as the date and time the logging occurred, the severity level of the message, and so on. In Log4j the formatting strings are called conversion patterns, which you will see in the logging example. You can arrange the formatting commands in any order. Text not part of a formatting command is sent verbatim, so you can use commas, dashes, and other characters to separate the formatted text. You may want to set up conversion patterns for different appenders. For example, you may want to include the date and time on a message going to a file but excluding it from a message going to the Windows Event Log, since the message's date and time are logged by the Event Logger. Here are some of the common formatting commands: Parameter Description %m The actual message being logged. %n A system-dependent newline character. %c The category of the message. %d Date and time, down to the millisecond, when the message was generated. %r Elapsed time, in milliseconds, since the application was started. %p Severity level (priority) of the message generated. %t The name of the Java thread that generated the message. Logging example This is an example logging configuration file. This table shows how the various categories output messages: 75

92 Chapter 2 Using the Internet Document Server Category DocumentServer DocumentServer.output DocumentServer.output DocumentServer.error Outputs messages With a WARN security level or higher With an INFO security level or higher That go to the console That go to the console, a logging file, and to the Windows Event Logger. <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration debug="false"> <!-- An appender that writes messages to a file. --> <appender name="rollfile" class="org.apache.log4j.rollingfileappender"> <param name="append" value="true" /> <param name="file" value="docserver.log" /> <layout class="org.apache.log4j.patternlayout"> <param name="conversionpattern" value="%-5p [%t] %r: %c{1} - %m\n"/> </layout> </appender> <!-- An appender that writes messages to the console. --> <appender name="stdout" class="org.apache.log4j.consoleappender"> <layout class="org.apache.log4j.patternlayout"> <param name="conversionpattern" value=" %d %-5p [%t]: %c{1} %m\n"/> </layout> </appender> <!-- An appender that writes messages to the Windows Event Log. --> <appender name="ntevent" class="org.apache.log4j.nt.nteventlogappender"> <layout class="org.apache.log4j.patternlayout"> <param name="conversionpattern" value=" Docupresentment Server: %m\n"/> </layout> </appender> <!-- The parent category for outputs and errors. --> <category name="documentserver"> <priority value="warn" /> <appender-ref ref="stdout" /> <appender-ref ref="rollfile" /> <appender-ref ref="ntevent" /> </category> 76

93 Logging and Tracing <!-- The "standard output" for DocumentServer - where regular messages go. --> <category name="documentserver.output" additivity="false"> <priority value="info" /> <appender-ref ref="stdout" /> </category> <!-- A debugging category, will be turned on and off. --> <category name="com.docucorp"> <priority value="warn" /> <appender-ref ref="stdout" /> </category> <root> </root> </log4j:configuration> NAMING LOGGING MESSAGES IDS includes a Log4j Appender class lets you control the naming of the files logging messages are written to. The full name of the class is: com.docucorp.ids.serverutils.idsfileappender When this class is used as part of the logging setup, you can use IDS-specific variables. The IDS-specific variables are: Variable ~INSTANCE ~SERVERGUID ~THREADID ~UPTIME ~LASTRESTART ~CURRENTTIME Description The instance number of the server being run. A primary server has an instance number of zero (0) and secondary instances are numbered starting at one (1). For example, running three instances of IDS, one primary and two secondary, the instances are numbered 0, 1, and 2. A IDS GUID identifier unique to each IDS instance but not recycled upon restart. When IDS is started, the primary instance and any secondary instances are assigned a unique identifying string. These strings are assigned to the same instance of IDS if it is shut down and restarted. The GUID strings remain the same until the number of instances is changed in the docserv.xml configuration file. Each thread in IDS is given a name. You can use this name as part of the file name. Since the same code may run in different threads during the lifetime of an IDS session, and since the thread ID can be printed during a logging message, you would seldom need to use this option. An exception is for debugging the HTTP subsystem of IDS, where each HTTP message is run in a pool of threads. The date and time of when the instance of IDS was started. The date and time of the most recent restart of this instance of IDS. The current date and time. The time can be measured down to the millisecond so this option is handy for debugging time-critical and performance issues. 77

94 Chapter 2 Using the Internet Document Server The ~UPTIME, ~LASTRESTART, and ~CURRENTTIME options are followed by a formatting parameter which ends with a semicolon (;). The formatting options are based on Java's SimpleDateFormat class. You can find full documentation for these formatting options at: The formatting characters are: Symbol Meaning Presentation Example G era designator Text AD y year Number 1996 M month in year Text & Number July & 07 d day in month Number 10 h hour in am/pm (1~12) Number 12 H hour in day (0~23) Number 0 m minute in hour Number 30 s second in minute Number 55 S millisecond Number 978 E day in week Text Tuesday D day in year Number 189 F day of week in month Number 2 (2nd Wed in July) w week in year Number 27 W week in month Number 2 a am/pm marker Text PM k hour in day (1~24) Number) 24 K hour in am/pm (0~11) Number 0 z time zone Text Pacific Standard Time ' escape for text Delimiter '' single quote Literal ' Here are some sample formats: 78

95 Logging and Tracing Sample MM-dd-yyyy MMMM-dd-yyyy Explanation Two digits for the month, two digits for the day, and four digits for the year. The month spelled out, two digits for the day, and four digits for the year. yyyymmddhhmmssssss A 4-digit year, 2-digit month, 2-digit day, 2-digit hours in day, 2- digit minutes in day, 2-digits seconds in a minute, and 4-digit milliseconds in a second. In this format, sorting alphabetically is the same as sorting by date. As a Log4j Appender, the IDSFileAppender has several parameters that are set in the logging configuration file, usually named logconf.xml. The parameters are: Parameter File Append Close Description The name of the file to write. This can be a static file name or a dynamic file name created using the above options. If True, the next logging message is appended to the end of the file. If false, the file is first erased. The default is True. If True, the file is closed after the message is written. This can be useful if you want to edit, move, or delete the file while IDS is still running. The default is False. If the name of a file changes between two logging calls, for example if you are using ~LASTRESTART and IDS is restarted, or if you are using ~CURRENTTIME and the time changes by a sufficient amount, the old file is automatically closed. Using combinations of Append and Close can produce different effects. With Append as False and Close as True, only one logging message will be in the file at any time. This can be handy when debugging messages passed in and out of IDS. If Append is True and Close is False, the file acts like a regular FileAppender. In fact, if you are running only one instance of IDS and you do not want to change the file name, use the regular FileAppender since it is slightly faster than the IDSFileAppender. IDSFileAppender has to re-evaluate the file name for each logging message. Setting Append to True and Close to True gives you an ever-growing file that you can move, delete, edit, and so on. Here are some examples: The IDSFileAppender is used in the appender elements in the logging configuration. <appender name="multiinstance" class="com.docucorp.ids.serverutils.idsfileappender"> <param name="append" value="true" /> <param name="file" value="server-~instance.log" /> <layout class="org.apache.log4j.patternlayout"> <param name="conversionpattern" value="%-5p [%t] %r: %c{1} - %m\n"/> </layout> </appender> 79

96 Chapter 2 Using the Internet Document Server This produces a separate log file for each instance of IDS. If there are a total of three instances running, a primary and two secondaries, these log files are created: server-0.log server-1.log server-2.log <appender name="everyhour" class="com.docucorp.ids.serverutils.idsfileappender"> <param name="append" value="true" /> <param name="file" value="server-~currenttime MMddHH;.log" /> <layout class="org.apache.log4j.patternlayout"> <param name="conversionpattern" value="%-5p [%t] %r: %c{1} - %m\n"/> </layout> </appender> This produces a log file and which is written to until the hour changes. The system then starts writing to a new file. The date/time formatting is for the month, day, and hour, so on October 15, from noon until 1 pm, logging entries are written to the server log file. From 1 pm to 2 pm, logging entries are written to the server log file, and so on. USING LOGGING CATEGORIES To make it easier to debug problems in IDS, you can use logging categories to sort messages IDS receives from client programs and messages it sends to client programs. You can have the system treat all messages the same or distinguish between messages from message queues (WebSphere MQ or JMS) and messages from HTTP. Combining the use of the message categories with options in the IDSFileAppender provides the same functionality as the send.msg and receive.msg message debugging of IDS version 1.8, but also allows other options. The categories are as follows: SendMessage.queue ReceiveMessage.queue SendMessage.http ReceiveMessage.http As with other Log4j categories, the categories are hierarchical, so using category names SendMessage and ReceiveMessage will use the same category for both queue and HTTP-based messages. Since the messages are handled as Log4j categories, they can have all the destinations of other categories, such as files, the NT Event logger, , and so on. Here are some examples. When looking at the examples, remember that for each request, a message is first received by IDS then a message is sent. 80

97 Logging and Tracing This combination of categories and appenders gives the same behavior as in IDS version 1.8. When the categories are set to DEBUG, any received messages are placed in the receive.msg file. Any sent messages are placed in the send.msg file. When new messages are processed, either by queues or HTTP, they are placed in the receive.msg and send.msg files. <appender name="receivemessage" class="com.docucorp.ids.serverutils.idsfileappender"> <param name="append" value="false" /> <param name="file" value="receive.msg" /> <param name="close" value="true" /> <layout class="org.apache.log4j.patternlayout"> <param name="conversionpattern" value="%m"/> </layout> </appender> <appender name="sendmessage" class="com.docucorp.ids.serverutils.idsfileappender"> <param name="append" value="false" /> <param name="file" value="send.msg" /> <param name="close" value="true" /> <layout class="org.apache.log4j.patternlayout"> <param name="conversionpattern" value="%m"/> </layout> </appender> <category name="receivemessage"> <priority value="debug" /> <appender-ref ref="receivemessage" /> </category> <category name="sendmessage"> <priority value="debug" /> <appender-ref ref="sendmessage" /> </category> This set of categories and appenders puts the received messages and sent messages in the same file, with one file for each instance of IDS that is running. Since Append is False for receiving and Append is True for sending, this file is overwritten for each receive/send pair. The header Received: is added in front of the received message and Sent: is placed in front of the sent message. <appender name="receivecombined" class="com.docucorp.ids.serverutils.idsfileappender"> <param name="append" value="false" /> <param name="file" value="combined-~instance.msg" /> <param name="close" value="true" /> <layout class="org.apache.log4j.patternlayout"> <param name="conversionpattern" value="received:%n%m%n"/> </layout> </appender> <appender name="sendcombined" class="com.docucorp.ids.serverutils.idsfileappender"> <param name="append" value="true" /> 81

98 Chapter 2 Using the Internet Document Server <param name="file" value="combined-~instance.msg" /> <param name="close" value="true" /> <layout class="org.apache.log4j.patternlayout"> <param name="conversionpattern" value="sent:%n%m"/> </layout> </appender> <category name="receivemessage"> <priority value="debug" /> <appender-ref ref="receivecombined" /> </category> <category name="sendmessage"> <priority value="debug" /> <appender-ref ref="sendcombined" /> </category> In this example you distinguish between messages handled by the queues and messages handled by HTTP. The queue messages are placed in receive.msg and send.msg, but since the HTTP messages are handled simultaneously by multiple threads, the HTTP messages include the thread ID in the file names. The system also notes the categories and sub-categories. In the categories with HTTP, additivity is set to False, meaning the HTTP categories should not use appenders from the SendMessage and ReceiveMessage categories. <appender name="receivemessage" class="com.docucorp.ids.serverutils.idsfileappender"> <param name="append" value="false" /> <param name="file" value="receive.msg" /> <param name="close" value="true" /> <layout class="org.apache.log4j.patternlayout"> <param name="conversionpattern" value="%m"/> </layout> </appender> <appender name="sendmessage" class="com.docucorp.ids.serverutils.idsfileappender"> <param name="append" value="false" /> <param name="file" value="send.msg" /> <param name="close" value="true" /> <layout class="org.apache.log4j.patternlayout"> <param name="conversionpattern" value="%m"/> </layout> </appender> <appender name="receivehttp" class="com.docucorp.ids.serverutils.idsfileappender"> <param name="append" value="false" /> <param name="file" value="receive-~threadid.msg" /> <param name="close" value="true" /> <layout class="org.apache.log4j.patternlayout"> <param name="conversionpattern" value="%m"/> </layout> </appender> 82

99 Logging and Tracing <appender name="sendhttp" class="com.docucorp.ids.serverutils.idsfileappender"> <param name="append" value="false" /> <param name="file" value="send-~threadid.msg" /> <param name="close" value="true" /> <layout class="org.apache.log4j.patternlayout"> <param name="conversionpattern" value="%m"/> </layout> </appender> <category name="receivemessage"> <priority value="debug" /> <appender-ref ref="receivemessage" /> </category> <category name="sendmessage"> <priority value="debug" /> <appender-ref ref="sendmessage" /> </category> <category name="receivemessage.http" additivity="false"> <priority value="debug" /> <appender-ref ref="receivehttp" /> </category> <category name="sendmessage.http" additivity="false"> <priority value="debug" /> <appender-ref ref="sendhttp" /> </category> LOGGING INFORMATION ABOUT REQUESTS IDS lets you store information about a request in a database for later viewing or processing. IDS logs information about a request (transaction) in any Java Database Connectivity (JDBC) compliant database. You can find additional information about JDBC at On Windows computers, Open Database Connectivity (ODBC) is available, and Java has built-in drivers to ODBC connections. Request logging automatically rolls over and starts new database tables on a daily or weekly basis and you can configure IDS to automatically delete old database tables. The configuration file can specify how many days or weeks of log tables to keep when purging old tables. 83

100 Chapter 2 Using the Internet Document Server NOTE:Set up a separate database for IDS transaction logs. When purging old tables, all tables that do not qualify as the most recent transaction logs are deleted from the database. IDS lets you use a browser to display request logs and sort and filter the requests. You can display logs from just a single database table or from multiple tables. When IDS sends result messages back to client programs, it includes these message variables: Variable IDSHOSTNAME IDSGUID Description Contains the host name of the machine running IDS. Contains the unique ID for the running instance of IDS. With this information you can track a message back to a particular instance of IDS running on a particular machine, even if all messages are logged to a common place. Request logging configuration To add this capability, go to the DOCSERV.XML configuration file and find the BusinessLogicProcessor section. Then create a TransactionLogDatabase subsection, as shown here: <section name="transactionlogdatabase"> <entry name="class">sun.jdbc.odbc.jdbcodbcdriver</entry> <entry name="url">jdbc:odbc:tran_log</entry> <entry name="userid">sa</entry> <entry name="password"></entry> <entry name="time.type">weekly</entry> <entry name="time.count">2</entry> <entry name="time.startofweek">monday</entry> <entry name="close.database">n</entry> <section name="columns"> <entry name="reqtype">reqtype</entry> <entry name="userid">userid</entry> <entry name="password">password</entry> </section> </section> Parameter class URL userid password Description The JDBC Java class that connects to the database. In this example, we are using Java's built in ODBC connectivity in Windows. The JDBC-based name of the database that tables will be written into. This will vary for different JDBC drivers, but somewhere will include the database name, in this case TRAN_LOG. Consult your JDBC driver documentation on setting up this URL. The user name for logging in to the database. The password for the specified user name. 84

101 Logging and Tracing Parameter time.type time.count time.startofweek close.database columns Description Either daily or weekly, specifying how often to roll over into a new database table. How many of the most recent tables in the database to keep when deleting old tables. This will be either the most recent days or weeks worth of information, depending on the time.type setting. When time.type is weekly, this specifies what day of the week to start a new database table. Whether or not to close the database after writing a transaction to the transaction database. Setting this to Y or N will depend on how many database connections are available to the database and how often transactions are logged. This subsection holds any number of entries specifying the column names in the database. The entry name is the name of the column that will be used in the database. The entry value is the name of the message variable in the output that will be written in the column. Accessing the transaction database through IDS IDS includes requests and HTML pages to let a user view the transaction log database from a browser. To begin, start a web browser and go to this URL localhost:49152 refers to the IP address and port that IDS is set up for HTTP messaging. You will see a screen similar to this: The Transaction Log Date field specifies which day's worth of records that results will be pulled from. Use the calendar button next to this field to pick another date. If data is being collected in weekly mode, you can check the View All Log Entries field to select data from all the records in a week's database table, not just the data for one day. 85

102 Chapter 2 Using the Internet Document Server The Field column lists all the data fields you can display. You can choose individual fields or select them all. The numeric drop-down box next to each field name can be used to select the display priority. The first fields to display will have a display priority of 1, then all fields with a display priority of 2, and so on. The Filter field lets you filter each field by a value. Enter a value for filtering, then choose an operation to perform on the filter. Use the Order By column to sort a column's information, ascending or descending. The numeric drop-down box picks the ordering priority, with 1 having the highest priority. After you pick the settings and click Submit, a screen similar to this one appears: All the previously selected columns appear. Use the Previous and Next buttons to move through the selected records. Click Return to Query to return to the selection page. Accessing the transaction database directly Since the transaction database is a regular JDBC compliant database it can be accessed through any database program that uses JDBC or the database's native format. This section explains the naming and data format conventions used in the transaction database. The database name is just the name of the database set up by you or your database administrator. The names of tables in the database will all start with the string TRANLOG followed by the date that data is first written into the table. The format is shown here: TRANLOGyyyymmdd Parameter TRANLO G yyyy Description All tables start with this string. Year mm Month (01-12) 86

103 Logging and Tracing Parameter Description dd Day of the month (01-31) For example, a table starting on September 1, 2003 would be named: TRANLOG Each row in the database table begins with a column named TRANSACTIONTIME, a 23-character string that is the key for the row. In SQL, this is known as a CHAR(23). The string is the time of the transaction, to millisecond precision, formatted in a way that sorting the table on the column sorts the logs by date and time recorded. The format is: yyyy/mm/dd:hh:nn:ss.xxx Parameter yyyy Description Year mm Month (01-12) dd Day of the month (01-31) hh Hour in the day (00-23) nn Minute in hour (00-59) ss Second in minute (00-59) xxx Millisecond in second ( ) The names of the other columns in the table row are generated from the IDS configuration, and each column type is a variable-length string, known in SQL as a VARCHAR(255). QUERYING TRANSACTION INFORMATION You can use the getmetadata and the QueryTranLogs Java rules to query transaction information. These rules let you monitor information such as the amount of server time spent for each request, the requests that failed, user IDs, and passwords. These rules use the TransactionLogDatabase section in the docserv.xml file to build a connection to the log database. NOTE:See Logging Information about Requests on page 86 for information on how to set up the transaction log database. You can use the logmetadata and logrecords XSL templates with the version 2.x HTTP server to query transaction information from the log database. Information can be found by matching a table name based on the date specified in the web user interface, the time type (daily or weekly) for the table, and the starting day for the table. Here is an example of a URL that uses the web interface: 87

104 Chapter 2 Using the Internet Document Server getmetadata This rule displays meta-data about the log database. The rule returns the field count, which is the number of fields available in each table. This information is set up in the TransactionLogDatabase section of the docserv.xml file. The rule also returns each of the field names that correspond to the field count and the TransactionLogDatabase section. Field names are returned as attachment variables field1 through fieldn, where n is the field count. The getmetadata rule also returns the table time type being used for the transaction log database which can be daily or weekly. This information is set up in the TransactionLogDatabase section of the XML file. The rule also returns a table count which corresponds to the number of tables currently present in the log database. Furthermore, the rule also returns each table name as attachment variables table1 through tablen, where n corresponds to the table count value. Input attachments Variable REQTYPE Description LOGMETADATA Output attachments Variable Description FIELDCOUNT FIELD1...FIELDn TABLETIMETYPE TABLECOUNT TABLE1...TABLEn The number of fields in each table within the transaction log database. The name of each field in the transaction log database tables, where n corresponds to FIELDCOUNT. The table time type, a setting in the TransactionLogDatabase section of the docserv.xml file. The number of tables present in the transaction log database. The name of each table present in the log database, where n corresponds to TABLECOUNT. NOTE:Use this rule with the logmetadata xslt template and the HTTP server that comes with version 2.x. Keep in mind you must first set up logging (see Logging Information about Requests on page 86) before you can use this rule. Here is a sample URL: Here is a sample request type: <section name="reqtype:logmetadata"> <entry name="function">atcw32->;atclogtransaction</entry> <entry name="function">java;com.docucorp.ids.rules. IDSTransactionRule;;static;reportTimes;INCLUDEMS</entry> <entry name="function">atcw32->;atcloadattachment</entry> 88

105 Logging and Tracing <entry name="function">irlw32->;irlcopyattachment</entry> <entry name="function">java;com.docucorp.ids.rules. TransactionLogRSRule;;transaction;getMetaData;</entry> </section> QueryTranLogs Use this rule to query the transaction log database and return a recordset of transactions. NOTE:See Logging and Tracing on page 77 for information on how to set up the transaction log database. Input attachments Variable REQTYPE SQLCMD SQLTABLENAME SQLFIELDS SQLWHERE SQLORDERBY SQLTIMEOUT SQLABSOLUTEPAGE SQLPAGESIZE SQLEXACTMATCH Description The request type that contains the QueryTranLogs rule. This should be LOGRECORDS when you are using the logrecords.xsl template. (Optional) An SQL select statement for the query. (Optional) The table name of the database log that is to be queried, such as TRANLOG (Optional) A comma delimited list of selection fields to use for to the query. Here is an example: reqtype,results,userid,password (Optional) The filters specified for the query. Here is an example: reqtype like 'sss%' and userid = 'FORMAKER' and password <> 'I' (Optional) The sort order criteria to use in the query, such as: reqtype asc, password desc, userid asc (Optional) The SQL connection time-out, specified in seconds. The default is 300 seconds. (Optional) The current page to display for the query. This is used in recordset paging. The default is one (1). (Optional) The number of records to return for a query. The default is 10. (Optional) Enter Yes if the system should only display the records for the date specified. Enter No if you want it to display all the records in the current table. Output attachments Variable SQLCMD Description The generated SQL query string. 89

106 Chapter 2 Using the Internet Document Server Variable SQLPAGESIZE FIRSTPAGE LASTPAGE SQLSELECTION FIELDCOUNT SELECTIONFIELDS RECORD1...RECORDn Description The number of records returned for the query. Returns True if the records returned for the query are the first page. Otherwise, the system returns False. Returns True if the records returned for the query are the last page. Otherwise, the system returns False. The number of fields used in the query. A rowset containing the names of each of the fields returned by the query. Rowsets for each record returned in the query, where n is the last record returned in the query. (this value should be equal to that of SQLPAGESIZE if LASTPAGE is False) NOTE:Use this rule with the logrecords xslt template and the HTTP server that comes with version 2.0 or higher. By default the rule tries to use the SQLCMD input attachment. If it is not found or its value is omitted, the rule then tries to build a select statement using the SQLTABLENAME, SQLFIELDS, SQLWHERE, and SQLORDERBY input attachment variables. Here is a sample request type: <section name="reqtype:logrecords"> <entry name="function">atcw32->;atclogtransaction</entry> <entry name="function">java;com.docucorp.ids.rules. IDSTransactionRule;;static;reportTimes;INCLUDEMS</entry> <entry name="function">atcw32->;atcloadattachment</entry> <entry name="function">irlw32->;irlcopyattachment</entry> <entry name="function">java;com.docucorp.ids.rules. TransactionLogRSRule;;transaction;QueryTranLogs;</entry> </section> MONITORING PERFORMANCE STATISTICS IDS lets you use Java Management Extensions (JMX) to monitor performance data. This lets external JMX monitoring applications track performance data and is similar to SNMP support. JMX support is built-in to Java versions 1.5 and higher, but IDS includes JMX libraries that let you monitor IDS with Java 1.4 versions. For Java 1.4 versions, IDS uses the JMX Message Protocol (JMXMP), based on Sun's Reference Implementation of the JMX Remote API. In the docserv.xml configuration file, in the DocumentServer section, create a JMX subsection, as shown here: 90

107 Logging and Tracing <section name="documentserver"> <section name="jmx"> <entry name="enabled">yes</entry> <entry name="jmxmpport">9875</entry> </section> </section> The Enabled entry determines whether JMX support is enabled. The default is No. The JMXMP entry is the TCP/IP port where the JMX Messaging Protocol (JMXMP) will be supported. Each instance of IDS will have its own JMXMP port starting with this number. If you omit this entry, JMXMP support is not enabled. In addition to compiling application-wide statistics automatically, IDS can also track performance times for a specific request or for a specific function in a request. You can set this up in the configuration. In the DocumentServer section, create a StatisticsMonitors subsection, as shown here: <section name="statisticsmonitors"> <entry name="monitor">sss</entry> <entry name="monitor">sss/5</entry> </section> To monitor an entire request, enter the request's name, such as SSS. To monitor a specific function within a request, specify the request's name, a slash (/), and the line number of the function inside the request, such as SSS/5. For each monitor you list, IDS tracks the most recent timings for the Initialize, Run Forward, Run Reverse, and Terminate messages, and the total time for all messages run. For general information about JMX, see: GENERATING A LOGGING CONFIGURATION FILE IDS includes a LogConfConvert.xsl template which you can use to generate a logconf.xml file from the docserv.xml file. The template takes into account the XMLMessage, XMLMessageAppend, TransactionTime, and RuleTime options in the Debug section of the docserv.xml file during the generation of the logconf.xml file. A logconfcovert script file is also included in the docserv directory which you can use to run the command necessary for the conversion process, as shown here: Windows UNIX java -cp.;.\lib\docucorputil.jar com.docucorp.util.xsltransformer source=docserv.xml template=logconfconvert.xsl output=logconf.xml java -cp.:./lib/docucorputil.jar com.docucorp.util.xsltransformer source=docserv.xml template=logconfconvert.xsl output=logconf.xml USING LOGGING CATEGORIES TO ACCESS THE INTERNAL 91

108 Chapter 2 Using the Internet Document Server FORMAT OF REQUESTS To make it easier to debug problems which can occur when translating requests and results, the system includes logging categories you can use to see the internal data format of received requests and sent results. The categories are as follows: DSIMessage.ReceiveMessage.queue DSIMessage.SendMessage.queue DSIMessage.ReceiveMessage.http DSIMessage.SendMessage.http As with other Log4j categories, the categories are hierarchical so using category names DSIMessage.SendMessage and DSIMessage.ReceiveMessage will use the same category for both queue and HTTP-based messages. Since the messages are handled as Log4j categories, they can have all the destinations of other categories, such as files, the NT Event logger, , and so on. A combination of categories and appenders will add the internal data format of messages to the end of receive.msg and send.msg files, adding useful information about how the messages are translated. Use the following Log4j appenders to add the internal data information to the receive.msg and send.msg files: <appender class="com.docucorp.ids.serverutils.idsfileappender" name="dsireceivemessage"> <param value="true" name="append"/> <param value="receive.msg" name="file"/> <param value="true" name="close"/> <layout class="org.apache.log4j.patternlayout"> <param value="%m" name="conversionpattern"/> </layout> </appender> <appender class="com.docucorp.ids.serverutils.idsfileappender" name="dsisendmessage"> <param value="true" name="append"/> <param value="send.msg" name="file"/> <param value="true" name="close"/> <layout class="org.apache.log4j.patternlayout"> <param value="%m" name="conversionpattern"/> </layout> </appender> Use these appenders with the following Log4j categories: <category name="dsimessage.receivemessage.queue"> <priority value="debug"/> <appender-ref ref="dsireceivemessage"/> </category> <category name="dsimessage.sendmessage.queue"> <priority value="debug"/> <appender-ref ref="dsisendmessage"/> </category> 92

109 Configuring IDS CONFIGURING IDS The IDSConfig program lets you perform the following tasks to make it easier to configure IDS: Running IDSConfig on page 97 Creating New Files on page 97 Adding Nodes on page 97 Adding Nodes with Text on page 97 Editing Nodes on page 98 Copying Nodes on page 98 Moving Nodes on page 98 Adding Attributes on page 98 Adding Comments on page 99 Adding Text on page 99 Adding a Request or Function on page 99 Adding an IDS Function on page 99 Converting DOCSERV.INI or DOCCLIENT.INI Files into XML Format on page 100 Adding a Section or Entry on page 100 Locating Text on page 100 Importing Configuration Information on page 100 Configuring MQSeries Buffer Sizes on page 101 Testing File Transmission on page

110 Chapter 2 Using the Internet Document Server Running IDSConfig To run the IDSConfig program, use the syntax shown below: java -classpath <path to xerces.jar>;<path to xalan.jar>;<path to DocuCorpUtil.jar>;<path to idsconfig.jar> com.docucorp.idsconfig.idsconfig Here is an example: java.exe -classpath d:\jars\xerces.jar;d:\jars\xalan.jar;d:\jars\docucorputil.jar; d:\jars\idsconfig.jar; com.docucorp.idsconfig.idsconfig NOTE:To run IDSConfig, you must have idsconfig.xml and idsrules.xml stored in the working directory. Creating New Files To create a new file, follow these steps: 1 Select the File, New option. 2 Select the appropriate type of configuration file: client or server. Depending on the type of configuration you chose, the system creates a new XML file base or template file named either docservtp.xml or docclienttp.xml. Adding Nodes Follow these steps to add a node: 1 Choose one of these options: Right click the parent node to which you want to add a child node. Select the parent node, then choose the Edit, Add Node option. Select the parent node, then click the Add Node button. Select the parent node, then press INSERT. 2 Enter the name you want to assign to the node and click Ok. 3 Enter Text if you want to create a Text node. Otherwise, leave it blank. Adding Nodes with Text Follow these steps to add a node with text: 1 Choose one of these options: Right click the parent node to which you want to add a child node. Select the parent node, then choose the Edit, Add Node option. Select the parent node, then click the Add Node button. 94

111 Configuring IDS Select the parent node, then press INSERT. 2 Enter the name you want to assign to the node and click Ok. 3 Enter Text and click Ok. Editing Nodes Follow these steps to edit a node: 1 Click once to select the node. The system highlights the node. 2 Press F2 or click again to edit the node. 3 Press ENTER when finished or press ESC at any time to cancel editing. Copying Nodes Follow these steps to copy a node: 1 Click to select the node you want to copy. 2 Press and hold the CTRL key while dragging the source node onto the destination node. Drop the source node by releasing the mouse button. The system copies the source node and adds it as a child of the destination node. Moving Nodes There are two ways to move nodes: Move as a child node 1 Select the node you want to move. 2 Drag and drop the source node onto the destination node. The system adds the source node as a child of destination node. Move as previous node 1 Select the node you want to move. 2 Press and hold the SHIFT key, then drag and drop the source node onto the destination node. The system inserts the source node before the destination node. Adding Attributes Follow these steps to add attributes: 1 Right click the attribute header. 2 Select the Add Attribute option. 3 Enter the value of the attribute and press ENTER. 95

112 Chapter 2 Using the Internet Document Server Adding Comments Follow these steps to add comments: 1 Choose one of these options: Right click the node to which you want to add a comment and choose Add comment from the popup menu Select the node, then click the Add comment button. Select the node, then press CTRL+M. 2 Enter your comment and click Ok when you are finished. Adding Text Follow these steps to add text: 1 Right click the node to which you want to add text. 2 Select the Add Text option. 3 Enter the text. Press ENTER when finished or ESC to cancel. Adding a Request or Function The IDSConfig program provides a quick way to add request types and functions. Follow these steps: 1 Right click on the Configuration and select the Add Request option. 2 Enter the name of the request type and click Ok. 3 Right click on the section name you just added and select the Add Function option. 4 Type in the name of the function you want to add and press ENTER. The new function is added to the request type node. Adding an IDS Function The IDSConfig program provides a quick way to add an IDS function. NOTE:Be sure to store the functions you add in the idsrules.xml. file. 1 Right click on the node to which you want to add functions and select Add IDSFunction. The Add IDS Function window appears. 2 Use the SHIFT and CTRL keys to select multiple functions in the Basic Functions area. Once you have selected the functions you want to add, drag them into the Destination area or click the >> button. 96

113 Configuring IDS NOTE:You can rearrange the order of the functions in Destination area using your mouse. 3 Click Ok when you are finished. Converting DOCSERV.INI or DOCCLIENT.INI Files into XML Format You can use IDSConfig to convert a DOCSERV.INI or DOCCLIENT.INI file into an XML format file. 1 Select the File, Convert INI file option. 2 Enter the following information: The name of the INI file you want to convert The name you want assigned to the XML output file The name of the XSL file (DocumentClientConvert.xsl or DocumentServerConvert.xsl) and the MQ Series Server if it exists 3 Click Start to start the conversion. Click Close when it finishes. Adding a Section or Entry Follow these steps to add a section or entry 1 Right click the node to which you want to add a section or entry. 2 Select the Add Section or Add Entry option. If you are adding a section, enter the section name If you are adding an entry, enter the entry name and text 3 Click Ok when you are finished. Locating Text You can use Find and Find Next to locate text. 1 Click to select the beginning searching node. 2 Press CTRL+F, then enter the text and click Find to start searching. The system locates the matching text. You can continue searching the same text by pressing F3. Importing Configuration Information You can import configuration information into your main configuration file. IDS lets you import configuration information into either the older IDS version 1.x INI configuration files or the newer IDS version 2.x XML configuration files. 97

114 Chapter 2 Using the Internet Document Server Most control groups (INI) or sections (XML) of the imported configurations are added to the end of the main configuration file. This means that if there are control groups or sections with the same name in both the main configuration and in the imported configurations, the entries in the control group or section in the main configuration takes precedence. These control groups and sections, however, are exceptions to this rule: ReqType:INI ReqType:THREADINI ReqType:SAR If these control groups or sections exist in the imported configurations, the entries in the imported control groups and sections are merged into the corresponding control groups or sections in the main configuration file so in this case the entries in the imported file take precedence. Here is an example section from an XML-based configuration file: <section name="configuration-imports"> <entry name="import">documanage_requests.ini</entry> <entry name="import">ipps_requests.ini</entry> </section> NOTE:In version 2.1 and later, IDS detect changes to imported configurations via the INIFiles or configuration-imports sections in the docserv.xml file and reload them into memory when there is a change. Configuring MQSeries Buffer Sizes You can increase the default buffer size of MQSeries messages and make the buffer size a setting you can maintain with a configuration entry. In server configuration files, the entry is put in the "BusinessLogicProcessor" section, "messaging" subsection, "queue" subsection. In client configuration files, the entry is put in the "DocumentClient" section, "messaging" subsection, "queue" subsection. The entry is: <entry name="mq.inputqueue.starting.buffer.size">131072</entry> This setting indicates the initial size of the buffer allocated to hold an incoming message. If the message is larger than this size, a buffer is allocated that is large enough to hold the message and the application tries again. The default is (128K). If you know that most of your messages will be smaller than 128k, you can decrease the buffer size for lower overhead for memory allocation. If, however, the majority of your messages will be larger, increase the buffer size to avoid situations where it takes multiple getmessage calls to get a message. 98

115 Configuring IDS Testing File Transmission Use the DSITEST utility to test the transfer of files to and from IDS. For more information about this utility, see the Utilities Reference. 99

116 Chapter 2 Using the Internet Document Server REFERENCING ATTACHMENT VARIABLES IDS lets you reference the attachment variable from an INI file. You can use this technique with the DAP.INI, CONFIG.INI and DOCSERV.XML files. NOTE:This capability was previously added for the ATCSendFile and ATCReceiveFile rules. With version 2.x, this capability should work for all requests and rules in DOCSERV.XML, as well as the other sections imported from a DOCSERV.INI file. Here is an example of how you reference an attachment variable via an INI option: < Group > Option = ~GetAttach VARNAME,QUEUE To reference a message variable in a configuration XML file use the following syntax: <section name="group"> <entry name="option">~getattach VARNAME,QUEUE</entry> </section> The VARNAME is the name of the variable. QUEUE specifies which queue to search for this value. For example, assume the attachment variable PRINTERTYPE specifies the printer type to use for output. IDS rules use this configuration XML option to determine the printer type (<Print>, PrtType =). In this case, you can modify the XML file as shown here: <section name="print"> <entry name="prttype">~getattach PRINTERTYPE,INPUT</entry> </section> So when the rule gets a configuration option, the value will equal the value of the input queue variable PRINTERTYPE. When the rule gets a configuration XML option, the value equals the value of attachment variable PRINTERTYPE. NOTE:If ~GetAttach does not find the attachment variable it returns an empty string. You can also use this to dynamically specify the file extension for the file created by ATCReceiveFile rule when you want to import that file into Documanage. You can do this as shown here in the DOCSERV.XML file: <entry name="function">atcw32->atcreceivefile,importfile,v2imp,*. ~GetAttach FILETYPE,INPUT,KEEP</entry> The ATCReceiveFile rule finds the attachment variable FILETYPE and uses its value as the file extension of the generated file name. Note that there are no spaces between the asterisk and period (*.) and the tilde (~) prefacing GetAttach. If you include a space there, it will also be in the file extension. 100

117 Referencing Attachment Variables NOTE:The IDS attachment variable contains the printer value for each recipient. Here is an example: AGENT_OUTPUT=PRINTER1 The client code should be able to find URLPRINTER1 to determine the output file name. USING UNICODE IN ATTACHMENT VARIABLES IDS supports Unicode, via UTF-8 encoding, in the setting and retrieving of values from attachment variables. The support is implemented via functions and defined constants in the DSILIB library. These functions are: DSIAddAttachVarEx DSIAddToAttachRecEx DSILocateAttachVarEx DSIAttachVarLengthEx DSIAttachCursorFirstEx DSIAttachCursorNextEx DSIAttachCursorPrevEx DSIAttachCursorLastEx DSIAttachCursorValueEx DSIAttachCursorValueLengthEx DSIEncryptValueEx These functions are similar to the base versions of the functions, but have an extra encoding parameter that you can set to either DSIENCODING_SINGLE_BYTE or DSIENCODING_UTF_8. For example, when adding an attachment variable you can use... or DSIAddAttachVar(hdsi, DSI_OUTPUTQUEUE, "FIELD", szvalue); DSIAddAttachVarEx(hdsi, DSI_OUTPUTQUEUE, "FIELD", szvalue, DSIENCODING_SINGLE_BYTE); or DSIAddAttachVarEx(hdsi, DSI_OUTPUTQUEUE, "FIELD", szvalue, DSIENCODING_UTF_8); When using the base versions of these functions, the default encoding is DSIENCODING_SINGLE_BYTE, so the first two function calls would do the same thing. DSIENCODING_SINGLE_BYTE uses Codepage 1252 encoding, which has a one-toone mapping between bytes and Unicode characters between 32 and 255, except from 128 to 159, which maps some Unicode characters down into this range. For example, the Unicode character for the Euro symbol (hex 20ac) is converted to a 128 (hex 80) and vice versa. This makes IDS compatible with how Documaker handles the Euro symbol. DSIENCODING_UTF_8 uses UTF-8 encoding, which is a way to translate Unicode multibyte characters into a format compatible with null-terminated C language strings while retaining all the character information. 101

118 Chapter 2 Using the Internet Document Server USING THE MESSAGE QUEUES Docupresentment lets you use a queueing system that is based on an in-memory operation. This eliminates the need to use MQSeries in low volume production systems. Choosing the Right Queuing Options Choosing the right queueing options for your company can be a difficult process. There are several scenarios, as this table shows: Installation Single PC with a single server Single PC with multiple servers Multiple PCs with multiple servers Function Used for demos and development. Not recommended for production use, even with low volumes. Here, multiple Docupresentment servers are set up on a single PC. This is recommended for low volume production systems. IDS cannot be a single point of failure because if one instance stops responding, the other instances pick up the work. Here, multiple Docupresentment servers are installed on multiple PCs. This is recommended for high volume production systems. To evaluate your system, answer these questions: 1 Is it a production system? If yes, go to step 5. If no, go to step 2. 2 Do you intend to use this system for performance testing? If yes, go to step 5. If no, go to step 3. 3 How many users will your system be servicing? If more than one, go to step 5. If only one, go to step 4. 4 Your system is demo or development system and you can use a single PC with a single server. You can use HTTP. You can also use JMS or MQSeries, as they are a step up from HTTP queues. 5 Your system requires multiple servers. Go to step 6. 6 How many simultaneous users does your system need to handle? The common way to determine this is calculate 5% of the maximum number of users. If your system must handle more than five simultaneous users, go to step 8. If it only needs to handle less than five simultaneous users, go to step 7. 7 Your system is a low volume production system and can be set up as a single PC with multiple servers. For this scenario use JMS or MQSeries. 102

119 Using the Message Queues 8 Your system is a high volume production system and should be set up as multiple PCs with multiple servers. Use JMS or MQSeries. This table summarizes the recommended queuing options: PCs Servers Use this queue Single Single HTTP. You can also use JMS or MQSeries, as they are a step up from HTTP queues. Single Multiple JMS or MQSeries. HTTP can be used. Multiple Multiple JMS or MQSeries. The use of HTTP queues is not recommended. NOTE:The default message queue handler for IDS 2.x is differs from that used for prior versions. In prior versions, IDS used xbase queues which placed messages in a physical file on disk. In version 2.0 or later, IDS uses a messaging system based on HTTP. You do not have to do anything for the message queue system to work. All queue setup options have default values. Furthermore, any attempt to communicate with IDS will cause IDS to start if it has not already been started. It is, however, possible default port values may conflict with an application already in use, so you may have to make modifications in some cases. Understanding the Router Process You can use the HTTP router application to enable the client to communicate with multiple IDS servers. This application controls IDS processes and starts them as needed. The client can start this process if it fails to connect to IDS. The router is a Java application that can be started manually with the file idsrouter.bat (idsrouter.sh on UNIX platforms). Middleware queuing systems usually have the option to save messages that are not successfully delivered to their destination. The IDS router application also has the option to do this. Any messages it receives can be stored in a JDBC compliant database and they are automatically removed when they are sent to an instance of IDS. If the IDS router is stopped, any undelivered messages that are stored will be sent to IDS when the IDS router is started up again. The HTTP connections to client programs would be severed at this point, but the messages would still be processed by IDS (for example, to ensure archiving operations are done). The default database settings for the IDS router uses a file-based database, so no database administration or startup of external processes are required. If you are going to use a different database, you will need to obtain the JDBC drivers for the database from your database administrator (usually in the form of JAR or ZIP files) and add these files in the lib subdirectory under your IDS installation directory. Under Windows platforms, the router process will have its own DOS window. If you press CTRL+C inside this DOS window, the router terminates and shuts down any instances of IDS it has started. 103

120 Chapter 2 Using the Internet Document Server Under Unix platforms, the router process will write its process ID to a file named routerpid. Sending a SIGINT (signal 2) to this process ID will cause the router to terminate and shut down any instances of IDS it has started. This is usually done with the 'kill' command in a separate terminal. How HTTP Queues are Handled Here is an overview of how the queues work by default: 1 When client tries to send a message it attempts to get a TCP/IP connection. If the connection fails, the client tries to start the router. 2 The router starts IDS instances if necessary. Two IDS instances are started by default. 3 The client program sends the message to the router process. 4 The router process gets the message and sends it to one of the instances of IDS. 5 IDS returns the response back to router. 6 The router process returns the message back to the client that initiated the transaction. Here is an overview of how the system typically gets an IP address and port number. Keep in mind the HTTP queue system, by default, needs ports from to and all default IP addresses are localhost. 1 The client tries to talk to the router process on port When the client starts the router process, it passes port to it. 3 The router process listens on port When router starts the first instance of IDS, it passes port to it. 5 The primary IDS listens on port as it was passed as a parameter from the router. 6 The primary IDS starts the next IDS and passes port (incrementing its own port address by one). 7 The secondary IDS listens on port Using the Router Section In the DOCSERV.XML file, the router program uses the same settings in DOCSERV.XML as IDS, as much as possible, to simplify setup. The settings used by both IDS and the router include the http port to listen to, the arguments for starting instances of IDS, and the number of instances to start. There is an additional Router section in the configuration file for enabling and setting up the JDBC database that stores undelivered messages. This example shows the defaults: <section name="router" requires="// <entry name="startcommand">"installdir/jre/bin/idsrouter.exe"</ entry> 104

121 Using the Message Queues <entry name="startarguments">-drouter -Xmx256m -cp lib/ DocucorpStartup.jar -Djava.endorsed.dirs=lib/endorsed - Dids.configuration=docserv.xml -Dlogging.configuration=logconf.xml com.docucorp.startup.startup com.docucorp.ids.router.idsrouter</ entry> <entry name="startdirectory">.</entry> <entry name="replywaitseconds">30</entry> <entry name="maxmsglength"> </entry> <entry name="maxconnectionattempts">2</entry> <entry name="address"> <entry> <section name="database"> <entry name="enabled">no</entry> <entry name="class">org.apache.derby.jdbc.embeddeddriver</ entry> <entry name="url">jdbc:derby:global/router-db;create=true</ entry> <entry name="table">docucorprouter</entry> <entry name="userid"></entry> <entry name="password"></entry> </section> </section> Option StartCommand StartArguments StartDirectory ReplyWaitSeconds MaxMsgLength MaxConnectionAttempts Address enabled class Definition Specifies the command Watchdog uses to start the router. Specifies the arguments Watchdog uses when starting the router. Specifies the directory in which the router will start. Defines how long the router waits for a reply from Docupresentment before it closes the connection. The default is 30 seconds. Lets you limit the message size of incoming messages. This helps prevent DOS attacks with large files. The default is (bytes). Limits the number of connection attempts to Docupresentment when Docupresentment keeps dropping the connection. This is useful when a message the router sends to Docupresentment causes Docupresentment to fail and drop the connection. This option prevents the indefinite resending of problematic messages. The default is two (2). Lets you bind the router to a specific network device IP address. This is useful when there are multiple network interfaces available on the machine where Docupresentment is running. The router will bind to all local devices if this option is not provided. Determines whether the undelivered messages will be stored in a database for delivery at a later time. The JDBC Database driver class for the database being used. If the default database is not used, contact your database administrator to get the driver files. 105

122 Chapter 2 Using the Internet Document Server Option URL table userid password Definition The JDBC locator for the database being used. If the default database is not used, contact your database administrator for the proper locator string for the database. The name of the table where you want the undelivered messages stored. The user ID used to access the database. The password for the user ID used to access the database. USING MULTIPLE QUEUING SYSTEMS Prior to version 2.1, IDS would process requests that came in from HTTP and from one queuing system, such as MQSeries or JMS. With version 2.1 or later, IDS lets you use multiple queuing systems for processing messages, for example MQSeries and JMS queues can both be used in one instance of IDS. To enable this, you must add queue sections to the BusinessLogicProcessor and messaging sections in the docserv.xml configuration file. Each queue section is processed and used to open a new set of input and output queues for requests and results. Here is an excerpt from a configuration with multiple queuing systems enabled: <section name="businesslogicprocessor"> <section name="messaging"> <section name="queue"> <section name="marshallers"> <entry name="marshaller.class">com.docucorp.messaging.data.marshaller.soap MIMEDSIMessageMarshaller</entry> </section> <entry name="queuefactory.class">com.docucorp.messaging.mqseries.dsimqmess agequeuefactory</entry> <entry name="receiverequestintervalmillis">1000</entry> <entry name="mq.queue.manager">queue1.manager</entry> <entry name="mq.inputqueue.name">req</entry> <entry name="mq.inputqueue.maxwaitseconds">5</entry> <entry name="mq.outputqueue.name">res</entry> <entry name="mq.outputqueue.expiry">600</entry> <entry name="mq.tcpip.host"> </entry> <entry name="mq.queue.channel">scc_queue1.atl3nt03</ entry> <entry name="mq.tcpip.port">1415</entry> <entry name="mqseries.tracing">0</entry> </section> <section name="queue"> <section name="marshallers"> <entry name="marshaller.class">com.docucorp.messaging.data.marshaller.seri alizationdsimessagemarshaller</entry> </section> <entry name="mq.queue.manager">queue2.manager</entry> 106

123 Using the Message Queues entry> </section> <entry name="mq.inputqueue.name">requestq</entry> <entry name="mq.inputqueue.maxwaitseconds">5</entry> <entry name="mq.outputqueue.name">resultq</entry> <entry name="mq.outputqueue.expiry">60</entry> <entry name="mq.tcpip.host"> </entry> <entry name="mq.queue.channel">system.def.svrconn</ <entry name="mq.tcpip.port">1414</entry> <entry name="mqseries.tracing">0</entry> 107

124 Chapter 2 Using the Internet Document Server USING THE JAVA MESSAGE SERVICE (JMS) The Java Message Service API is a standard programming interface for sending and receiving messages across applications. JMS itself is not a product it is a standard that implementers (businesses or open-source groups) develop their products for. Since it is a standard, any JMS implementation can be used by IDS merely by changing configuration information. No coding changes are required. You can find general information about JMS at: JMS is part of the J2EE standard. This means that any J2EE-compliant application server, such as WebSphere or WebLogic, has an implementation of JMS as part of the application server. Other companies provide stand-alone implementations. You can find a partial list of vendors at: Use an enterprise queuing system, such as a JMS implementation or WebSphere MQ, if your implementation has a high volume of use. SETTING UP JMS The JMS resources needed for IDS to communicate with client programs are called JMS administered objects. The necessary administered objects are a queue ConnectionFactory and two queues, one for requests (messages from clients to IDS) and one for results (messages from IDS to clients. Different vendors implement the JMS in different ways so you will have to refer to the specific vendor s documentation for setting up the queues and factory. Since different vendors implement the JMS in different ways, there has to be a standard way to access the location of the queues and factory. This is done by another Java standard, the Java Naming and Directory Interface (JNDI). JNDI support is built into IDS and clients but there are some names of resources that the JMS system administrator will have to provide to you, such as... Initial Context Factory This is a name of vendor-specific Java programming code used to find the JMS administered objects. Provider URL The location of the JMS administered objects. Security Principal (Optional) The user ID, if required, needed to access the JMS administered objects. Security Credentials (Optional) The password, if required, needed to access the JMS administered objects. Queue ConnectionFactory Name The name of the queue ConnectionFactory created during setup. The JMS implementation may have only one Queue ConnectionFactory that it set up itself. Request and Result Queue Name The names of the queues created for IDS communication. 108

125 Using the Java Message Service (JMS) For IDS, you must add these values to the docserv.xml file, in the BusinessLogicProcessor section, messaging subsection, queue subsection. Here is an example: <section name="businesslogicprocessor">... <section name="messaging"> <section name="queue"> <entry name="queuefactory.class">com.docucorp.messaging.jms.dsijmsjndimess agequeuefactory</entry> <entry name="jms.initial.context.factory">com.sun.jndi.fscontext.reffscont extfactory</entry> <entry name="jms.provider.url">file:///c:/docserv/jndi/jms/ IDS2</entry> <entry name="jms.security.principal">userid</entry> <entry name="jms.security.credentials">password</entry> <entry name="jms.qcf.name">ids2qcf</entry> <entry name="jms.inputqueue.connectstring">jmsrequestq</entry> <entry name="jms.outputqueue.connectstring">jmsresultq</entry> The entry queuefactory.class tells IDS you ll be using a JMS queuing system. The next four entries are for the standard JNDI entries. jms.qcf.name is for the name of the JMS Queue ConnectionFactory. jms.inputqueue.connectstring and jms.outputqueue.connectstring are for the names of the queues for communication. Since this is the server, it receives requests as input and sends results as output. Client programs use the file docclient.xml to store configuration information. Queue information would go in the DocumentClient section, messaging subsection, queue subsection. A client program that would use the same queues as this server would have this setup: <section name="documentclient"> <section name="messaging"> <section name="queue"> <entry name="queuefactory.class">com.docucorp.messaging.jms. DSIJMSJNDIMessageQueueFactory</entry> <!-- Settings for JNDI JMS connection --> <entry name="jms.initial.context.factory">com.sun.jndi. fscontext.reffscontextfactory</entry> <entry name="jms.provider.url">file:///c:/docserv/jndi/jms/ IDS2</entry> <entry name="jms.security.principal">userid</entry> <entry name="jms.security.credentials">password</entry> <entry name="jms.qcf.name">ids2qcf</entry> <entry name="jms.inputqueue.connectstring">jmsresultq</entry> <entry name="jms.outputqueue.connectstring">jmsrequestq</ entry> </section> <!-- queue section --> </section> <!-- messaging section --> </section> <!-- DocumentClient --> 109

126 Chapter 2 Using the Internet Document Server For example, consider SwiftMQ, a JMS system that uses JNDI to let users find queues. To add this capability go to the DOCSERV.XML configuration file and find the BusinessLogicProcessor section. In the Messaging subsection, under the Queue subsection, you would have these entries: <section name= queue"> <entry name="queuefactory.class">com.docucorp.messaging.jms.dsijmsjndimess agequeuefactory</entry> <!-- SwiftMQ --> <entry name="jms.initial.context.factory">com.swiftmq.jndi.initialcontextf actoryimpl</entry> <entry entry> <entry name="jms.security.principal">userid</entry> <entry name="jms.security.credentials">password</entry> <entry <entry entry> <entry entry> </section> <!-- queue section --> Entry queuefactory.class jms.initial.context.factory jms.provider.url jms.security.principal jms.security.principal jms.qcf.name jms.inputqueue.connectstring jms.outputqueue.connectstring Description Specifies the IDS class that sets up JMS using JNDI. Indicates the name of the Java class that interfaces a particular vendor's JMS implementation. Specifies how to connect to the vendor's JMS implementation. (Optional) Indicates the JMS term for a user ID. (Optional) Indicates the JMS term for a password. Indicates the name of the vendor's queue connection factory, a JMS term for how to find JMS queues. Indicates the name of the JMS input queue that will hold requests. Indicates the name of the JMS output queue that will hold results. 110

127 Using WebSphere MQ USING WEBSPHERE MQ WebSphere MQ, formerly known as MQSeries, is an IBM product you can use to send and receive messages across applications. You can find general information about WebSphere MQ at: Use an enterprise queuing system, such as a JMS implementation or WebSphere MQ, if your implementation has a high volume of use. For Windows and UNIX platforms, you can use the RUNMQSC tool to create queues and queue managers. You can use the WebSphere MQ Explorer GUI tool on Windows to create queues and queue managers on the local Windows and remote UNIX, Linux, or Windows WebSphere MQ servers when configured for remote administration. When WebSphere MQ installs on Windows, a queue manager is created if you select the option to install default configuration. Java support for WebSphere MQ is included in version 5.3 and later. The Java libraries for WebSphere MQ can be used in either client mode (via TCP/IP) or in bindings mode (where the Java application runs on the same machine as the MQSeries server), with the exception of OS/390 which must be run in bindings mode. NOTE:All queues are under a queue manager and there will be a queue manager for each machine that uses WebSphere MQ Server. The queue managers communicate with each another and pass the messages to the appropriate queue underneath. When adding machines to the cluster, you can use a wizard through the WebSphere MQ Explorer to set up the cluster. Even though the WebSphere MQ installation program creates a default cluster that uses the network domain name, it does not create the cluster sender channels needed to communicate between the repository machines. 111

128 Chapter 2 Using the Internet Document Server SETTING UP WEBSPHERE MQ The WebSphere MQ resources needed for IDS to communicate with client programs are two WebSphere MQ queues, one for requests (messages from clients to IDS) and one for results (messages from IDS to clients). For IDS, add these values to the docserv.xml file, in the BusinessLogicProcessor section, messaging subsection, queue subsection. Here is an example: <section name="businesslogicprocessor">... <section name="messaging"> <section name="queue"> <entry name="queuefactory.class"> com.docucorp.messaging.mqseries.dsimqmessagequeuefactory</entry> <entry name="mq.queue.manager">queue.manager</entry> <entry name="mq.inputqueue.name">requestq</entry> <entry name="mq.inputqueue.maxwaitseconds">5</entry> <entry name="mq.outputqueue.name">resultq</entry> <entry name="mq.tcpip.host"> </entry> <entry name="mq.queue.channel">scc_channel</entry> <entry name="mq.tcpip.port">1414</entry> The entry queuefactory.class tells IDS you ll be using a WebSphere MQ queuing system. The following are names of WebSphere MQ objects required for communication: mq.queue.manager mq.inputqueue.name Client programs use the docclient.xml file to store configuration information. Queue information would go in the DocumentClient section, messaging subsection, queue subsection. A client program that would use the same queues as this server would have this setup: <section name="documentclient"> <section name="messaging"> <section name="queue"> <entry name="queuefactory.class">com.docucorp.messaging.mqseries.dsimqmess agequeuefactory</entry> <entry name="mq.queue.manager">queue.manager</entry> <entry name="mq.inputqueue.name">resultq</entry> <entry name="mq.inputqueue.maxwaitseconds">5</entry> <entry name="mq.outputqueue.name">requestq</entry> <entry name="mq.tcpip.host"> </entry> <entry name="mq.queue.channel">scc_channel</entry> <entry name="mq.tcpip.port">1414</entry> </section> <!-- queue section --> </section> <!-- messaging section --> </section> <!-- DocumentClient --> 112

129 Using WebSphere MQ Using MSMQ Use the DSIMSMQMessageQueue and DSIMSMQMessageQueueFactory classes to communicate via asynchronous messages through MSMQ on Windows platforms. Support is provided for path names and direct format names. These platforms are supported: Windows 2000 Windows XP Windows 2003 and later Windows operating systems To enable MSMQ messaging, change the queue factory class in the configuration file to: com.docucorp.messaging.msmq.dsimsmqmessagequeuefactory Please refer to the HTML documentation shipped with the Java SDK for a description of the properties supported for the MSMQ message bus. In particular, see a description of the setproperties method in the com/docucorp/messaging/msmq/ DSIMSMQMessageQueueFactory class. Property settings Here is an example of the docserv.xml file: <section name="queue"> <entry name="queuefactory.class">com.docucorp.messaging.msmq. DSIMSMQMessageQueueFactory</entry> <entry name="receiverequestintervalmillis">1000</entry> <!-- Settings for MSMQ connection --> <entry name="msmq.server.name">jr</entry> <entry name="msmq.inputqueue.name">direct=os:jr\private$ \requestq</entry> <entry name="msmq.outputqueue.name">direct=os:jr\private$ \resultq</entry> <entry name="msmq.timeout">10000</entry> </section> Here is an example of the docclient.xml file: <section name="queue"> <entry name="queuefactory.class">com.docucorp.messaging.msmq. DSIMSMQMessageQueueFactory</entry> <!-- Settings for MSMQ connection --> <entry name="msmq.server.name">jr</entry> <entry name="msmq.inputqueue.name">direct=os:jr\private$ \resultq</entry> <entry name="msmq.outputqueue.name">direct=os:jr\private$ \requestq</entry> <entry name="msmq.timeout">10000</entry> </section> Here is an example of the dsimessage.properties file: queuefactory.class=com.docucorp.messaging.msmq.dsimsmqmessagequeuef actory # MSMQ for windows msmq.server.name=jr msmq.inputqueue.name=private$\resultq msmq.outputqueue.name=private$\requestq msmq.timeout=

130 Chapter 2 Using the Internet Document Server These components are required: DocucorpMsg.jar msmqlib.dll Be sure to include the MSMQLIB.DLL in the system path so it is found at run time. NOTE:Testing has shown that when using direct format names to private queues, the queue used to read messages should be a local queue. This improves performance significantly (about 10 times) and avoids the generation of unnecessary TCP socket connections that is incurred when reading messages from a remote private queue. If the IDS client and IDS server components reside on separate boxes, configure the client to read messages from a local private result queue. Configure the server to read messages from a local private request queue. Using correlation IDs Using the ReceiveByCorrelationID API Generating the message ID IDS supports WebSphere MQ/JMS client applications that specify a correlation ID or a message ID in a request. Client applications can specify a correlation ID in a request and retrieve a response with the same correlation ID. Client applications can also use the conventional method of correlating a response with a request by specifying a message ID in a request and retrieving a response with a correlation ID matching the message ID of the request. IDS supports MSMQ 3.0 client applications that want to retrieve messages via the ReceiveByCorrelationID API using the message ID property of the request message as the parameter. On the server side, IDS sets the Correlation ID property of a response message equal to the value of the Message ID property of the request message when the UNIQUE_ID value of the request message is blank. For this reason, client side applications that want to retrieve a message by correlation ID, should make sure the UNIQUE_ID value of the request message is blank. The message buses for IDS can generate the message ID for client applications during a request. A message bus generates the message ID when the putmessage method of the output queue provides a value of null or a blank value for the messageid argument. The message ID generated by the message bus can then be retrieved through the getmessageid method of the output queue and used as the ID argument in the getmessage method of the input queue to retrieve a matching reply. If a messageid value is provided to the putmessage method, then that value is used instead, with one exception the MSMQ message bus only supports message bus generated message IDs. Here is a Java example that lets the message bus generate the messageid for a client request: outputqueue.putmessage(null, reqobj); String unique = outputqueue.getmessageid(); Object resobj = inputqueue.getmessage(unique, timeoutmillis, 3); 114

131 Using WebSphere MQ Here is a Java example that lets a client application define the message ID for a request: UniqueStringGenerator usg = new UniqueStringGenerator(); String messageid = usg.generateuniquestring(32); outputqueue.putmessage(messageid, reqobj); Object resobj = inputqueue.getmessage(messageid, timeoutmillis, 3); These message buses support this functionality: Java: HTTP, JMS, MSMQ, MQSeries, and Mail The IDSJSP package (Java) also supports this feature when used with the DSIJavaMsg and DocucorpMsg packages. Use the setuniqueid method of a dsi or dsimsg bean to set the unique ID to null or a blank value to indicate you want the message bus to generate the message ID during a client request. Csharp: HTTP, MSMQ, and MQSeries The DSIInterface class in the DocucorpDSI assembly (Csharp) also supports this feature when used with the DocucorpMsg assembly. Use the setuniqueid method of the DSIInterface class to set the unique ID to null or a blank value to indicate you want the message bus to generate the message ID during a client request. Using MSMQ direct format queue names You can set up the MSMQ_FileConvert control group to recognize path names, format names, and direct format names. NOTE:Before version 2.0, only path names were supported in the INI file and were converted into format names by the MSMQ API MQPathNameToFormatName(). The system recognizes when you specify a format name in the INI file and skips the API call to MQPathNameToFormatName. For example, private queues cannot be accessed unless the direct name is used. So, if you are using a private queue but the IDS client and server are on different PCs, you must use direct format names. Here is an example of the INI options you would set: < DBTable:RequestQ > DBHandler = MSMQ < DBTable:ResultQ > DBHandler = MSMQ < MSMQ_FileConvert > ;requestq = FSINTSRV08\JRREQQ ;resultq = FSINTSRV08\JRRESQ requestq = DIRECT=TCP: \PRIVATE$\JRREQQ resultq = DIRECT=TCP: \PRIVATE$\JRRESQ ;requestq = DIRECT=OS:JDOE\PRIVATE$\JRREQQ ;resultq = DIRECT=OS:JDOE\PRIVATE$\JRRESQ ;requestq = PUBLIC=dc7b9469-dbae-11d6-ae6c-00104bd359c1 ;resultq = PUBLIC=dc7b946c-dbae-11d6-ae6c-00104bd359c1 ;requestq =.\private$\jrreqq ;resultq =.\private$\jrresq ;requestq = PRIVATE=cdb ab e998943a938\ ;resultq = PRIVATE=cdb ab e998943a938\

132 Chapter 2 Using the Internet Document Server < RequestQ > Name = requestq < RESULTQ > Name = resultq Keep in mind these definitions: FORMAT NAMES. A format name is a unique name generated by MSMQ. The MQPathNameToFormatName API normally converts a path name specified in the INI file into a format name by looking up the format name in the MSMQ MQIS. The format name is then used by the MQOpenQueue API to open a queue. To avoid conversion of the path name into a format name, you can specify a format name in the INI file. Here are some examples: PUBLIC=dc7b9469-dbae-11d6-ae6c-00104bd359c1 PRIVATE=cdb ab e998943a938\ DIRECT FORMAT NAMES. You can also specify a direct format name to avoid the path name to format name conversion and to skip the connection to the MQIS altogether. This, in essence, generates a One-HOP direct connection from one MSMQ box to another, which can be useful when you are connecting to a remote box that hosts private queues in an MSMQ workgroup configuration. Here are some examples: DIRECT=TCP: \PRIVATE$\JRREQQ DIRECT=OS:JDOE\PRIVATE$\JRREQQ In the first example, the protocol specified is TCP and the IP address of the box hosting the private queues is specified. In the second example, OS indicates that the native protocol of the operating system where the private queues reside should be used and the NetBIOS name is specified instead of the IP address of the box hosting the queues. All connection information is contained within the direct format names to avoid a connection to the MQIS. NOTE:Direct format names are only supported in Windows NT 4.0 Service Pack 6a or later. QUEUE PATH NAMES. MQLIB also supports specifying normal queue path names in the INI file by calling the MQPathNameToFormatName API to convert them into the proper format name before calling the MQOpenQueue API. Here are some examples: FSINTSRV08\JRREQQ.\private$\JRREQQ 116

133 Using WebSphere MQ Queue pooling When setting up the messaging parameters in a Java application to talk to IDS, you can specify that the message queues should be kept in a pool of queues and reused throughout the life of the application. If a pooled connection is not used after 30 seconds, it may be removed from the pool and the queue is closed automatically. You can also close pooled connections manually. Message pooling has these advantages: Reusing an existing, previously opened queue can be faster than opening a new queue connection for every communication with IDS. In an application there can be more threads of execution than there are available queue connections on the queuing server. Threads are automatically blocked until a connection to a queue is available. This keeps you from having to limit the number of threads to the number of available connections or creating some kind of multithreaded blocking. This functionality is most useful in application servers, such as WebSphere, that host long-running, multi-threaded Java clients such as JSPs or servlets. No extra configuration is necessary on the web application, such as WebSphere. To use queue connection pooling, you must make the following changes in your the client configuration file. This can be a properties file such as dsimsgclient.properties, if you are upgrading from IDS 1.x or a XML-based configuration file such as docclient.xml. NOTE:IDS version 2.x detects which kind of configuration you have and loads it automatically. In both the DSIJavaMsg and DocucorpMsg libraries, the settings for queue connections are passed to the libraries by Java properties objects. To enable and set up pooling, use these options: Option Description pooling.enabled Set to Y to enable pooling. The default is N. pooling.input.pool.size Number of input queue connections to pool. The default is 10. pooling.output.pool.size Number of output queue connections to pool. The default is 10. Here is an example of a client properties file that would enable an input and output pool of 20 MQSeries connections. This file would normally be named dsimsgclient.properties. pooling.enabled=y pooling.input.pool.size=20 pooling.output.pool.size=20 queuefactory.class=com.docucorp.messaging.mqseries.dsimqmessagequeu efactory mq.queue.manager=venus.queue.manager mq.inputqueue.name=resultq mq.outputqueue.name=requestq mq.outputqueue.expiry=120 mq.tcpip.host= mq.queue.channel=system.def.svrconn 117

134 Chapter 2 Using the Internet Document Server mq.tcpip.port=1414 You must also make the following API changes if your implementation talks directly to the DocucorpMsg library, whether it s in Java or JSP, to use queue connection pooling. If you are using the DocucorpMsg library, pooled connections can only be obtained through the static method DocucorpMsgUtil.getQueueFactory(Properties props). This method returns a DSIMessageQueueFactory that may be pooled, but is used in the same manner as the previously unpooled DSIMessageQueueFactory objects. If you are creating a multi-threaded command line program, any outstanding pooled connection can be closed with the static method DocucorpMsgUtil.closePooledConnections(Properties props). NOTE:No code changes are needed for users of the DSIJavaMsg library. USING SECURITY EXITS You can attach custom security exits to WebSphere MQ queues. Security exits are external libraries of code that can be installed and run in WebSphere MQ queues. For IDS, security exits consist of a Java class in a.jar file, with an optional native component. To have a security exit installed and run, you need to know the name of the Java class for the security exit and the name of the.jar file that has the security exit. In the docserv.xml configuration file, set up a queue section for WebSphere MQ queues. In that section, add an entry similar to the one shown here: <entry name="mq.customsecurityexit.classname">com.customer. securityclassname<entry> Substitute the name of the your security exit Java class name for: mq.customsecurityexit.classname You must load the.jar file that has the custom security exit code. For application servers running Docupresentment client code, refer to the application server's documentation for information on modifying the classpath for the web application or for including a.jar file in a particular directory. For Docupresentment server, you can either... Put the.jar file in the server's lib directory, or Modify how Docupresentment server is run by adding the System property com.skywiresoftware.extraclasspath with a reference to any.jar files needed to run the security exit. For example, for the docserver.bat file, you could add an entry like the one shown here: -Dcom.skywiresoftware.extraClasspath=/path/to/security.exit.jar 118

135 Using WebSphere MQ USING CLIENT CONNECTION DEFINITION TABLES The WebSphere message bus can read connection information from Client Connection Definition Table (CCDT) files. The code can then use any queue manager listed in the CCDT file to establish a connection. NOTE:Support for CCDT files in Java requires WebSphere MQ, version 6.0 or later. Refer to the WebSphere MQ documentation for information about Client Connection Definition Tables. For additional information, see the description of the mq.ccdt.url property in the HTML documentation for the com.docucorp.messaging.mqseries.dsimqmessagequeuefactory class. This information is included with the Java SDK. USING SSL CONNECTIONS To use SSL connections the queue manager and server connection channel must be configured to use SSL. SSL connections are only supported in MQ client mode (version 5.3 or later). See the security guide for your version of WebSphere MQ for information on how to configure a queue manager and server connection channel for SSL communication. A Java key store must be available to IDS and it must contain a personal certificate issued by a trusted Certificate Authority (CA). This trusted CA must be present in the key repository used by the queue manager. The CA certificate must be part of the trusted certificates in the key repository used by the queue manager. Also, the same CA certificate must be present in the Java keystore. If the personal certificate used by the queue manager was issued by another CA, then the CA certificate for it must also be present in the Java key store so the SSL handshake can be negotiated between the MQ Client (IDS) and the MQ Server (the queue manager). If the server connection channel is configured to authenticate client certificates or to verify the Distinguished Name of client certificates via the SSLPeer property, the personal certificate in the Java key store must also contain the private key. The entry type in the Java key store for the personal certificate should be 'keyentry' instead of 'trustedcertentry' in this case. See the HTML documentation for the DSIMQSeriesMessageQueueFactory class, which is shipped with the IDS DSI Java SDK, for additional information on the MQ SSL properties. In particular, see the description of the setproperties method. Here is an example of these configuration properties: <entry name="mq.ssl.cipherspec">rc4_md5_us</entry> <entry name="mq.ssl.keyrepository">c:\ibm\mq\ssl\key</entry> <entry name="mq.ssl.peername">cn=ssl_qmgr, C=US, S=GA, L=Atlanta, O=Docucorp International, OU=PD</entry> <entry name="mq.ssl.socketfactory.class"> com.docucorp.messaging.mqseries.dsimqsslsocketfactory</entry> <entry name="mq.ssl.protocol">sslv3</entry> 119

136 Chapter 2 Using the Internet Document Server <entry name="mq.ssl.keystore">c:/docserv/keystore/ java_certificate_store</entry> <entry name="mq.ssl.keystore.type">jks</entry> <entry name="mq.ssl.keystore.manager.type">sunx509</entry> <entry name="mq.ssl.keystore.pwd">changeit</entry> <entry name="mq.ssl.truststore">c:/docserv/keystore/ java_certificate_store</entry> <entry name="mq.ssl.truststore.type">jks</entry> <entry name="mq.ssl.truststore.manager.type">sunx509</entry> <entry name="mq.ssl.truststore.pwd">changeit</entry> <entry name="mq.ssl.debug">true</entry> USING THE REPLYTOQUEUENAME AND REPLYTOQUEUEMANAGERNAME PROPERTIES IDS checks for these MQ message properties during MQGET calls issued by IDS: replytoqueuemanagername replytoqueuename If the properties are defined in the message, they are used to reply to a specific queue manager and queue MQPUT1 calls are used instead of MQPUT calls in this case. In addition, if you are using the SOAP marshaller, reply messages will contain the REPLYTOQUEUEMANAGER and REPLYTOQUEUE elements in the control block. If the replytoqueuename property is not defined in the message received by IDS, the system uses the value defined in the mq.outputqueue.name property in the docserv.xml configuration file. To use this functionality, client applications submitting requests to IDS should make sure the replytoqueuemanagername and replytoqueuename message properties are set. SUPPRESSING QUEUE ERROR MESSAGES Docupresentment can suppress queue error messages for a period of time. This helps you prevent unnecessary logging when a queue receiver or sender fails to connect to the queues because the message bus is down. These configuration options are supported at the queue section level in the docserv.xml file: Option MaxErrors SuppressErrorsIntervalSeconds Description Specifies the maximum number of consecutive errors a queue receiver or sender can have before error messages are suppressed. The default is 10. Specifies how long error messages should be suppressed. The default is 1800 seconds. Here is an example: 120

137 Using WebSphere MQ <section name="queue"> <entry name="queuefactory.class">com.docucorp.messaging.mqseries.dsimqmess agequeuefactory</entry> <entry name="receiverequestintervalmillis">1000</entry> <entry name="mq.queue.manager">queue_manager3</entry> <entry name="mq.inputqueue.name">requestq</entry> <entry name="mq.inputqueue.maxwaitseconds">5</entry> <entry name="mq.outputqueue.name">resultq</entry> <entry name="mq.tcpip.host"> </entry> <entry name="mq.queue.channel">channel1</entry> <entry name="mq.tcpip.port">1416</entry> <entry name="maxerrors">3</entry> <entry name="suppresserrorsintervalseconds">60</entry> </section> PERSISTING QUEUE MESSAGES Docupresentment can persist request and response messages during processing which lets you recover previously unprocessed messages during a restart. NOTE::This topic does not pertain to HTTP queues. The following docserv.xml file configuration options at the queue section level control the persistence behavior: Option Persistent PersistentClassName Description Turns the persistence logic on or off. The default is False. The name of the implementation class that implements the com.docucorp.ids.persistence.persistentadapter interface. The default is com.docucorp.ids.persistence.io.filepersistentadapter. The FilePersistentAdapter class will serialize and deserialize queue messages to and from the disk. This directory location is used for serialized messages: global/documentserver/ DocupresentmentInstanceName/ ReceiverOrSenderName/guid.message Here are some examples: global/documentserver/ids-1-requestreceiver#1/ AD7397A4-E E0.message global/documentserver/ids-1-resultsender#1/ AD7397A4-E E0.message Here is an example: 121

138 Chapter 2 Using the Internet Document Server <section name="queue"> <entry name="queuefactory.class">com.docucorp.messaging.mqseries.dsimqmess agequeuefactory</entry> <entry name="mq.queue.manager">queue_manager2</entry> <entry name="mq.inputqueue.name">requestq</entry> <entry name="mq.inputqueue.maxwaitseconds">5</entry> <entry name="mq.outputqueue.name">resultq</entry> <entry name="mq.tcpip.host"> </entry> <entry name="mq.queue.channel">channel1</entry> <entry name="mq.tcpip.port">1415</entry> <entry name="persistent">true</entry> <entry name="persistentclassname">com.docucorp.ids.persistence.io.filepers istentadapter</entry> </section> PURGING CACHED FILES Docupresentment uses a file cache to determine when temporary files generated throughout different rules should be removed from disk. Temporary files cached for removal are placed as entries in a properties file. Each entry contains the full path of the cached file and a time stamp that indicates when the file expires. Cleanup is run on a separate thread that periodically looks up the entries in the file cache and determines if they have expired. When an entry expires, the system removes it from the cache and deletes the file associated with it. NOTE:The determination of when a temporary file expires depends on the expiration time or timeout value each rule uses when caching a file for removal. This means you can specify individual values for different rules when caching a file for removal. Furthermore, any rule that caches a temporary file for removal can also have its own INI values for determining the expiration value. Here is a list of the file caching INI options used by the various Docupresentment rules (these INI options should be placed in the INI file that matches the CONFIG attachment variable being used for the Docupresentment request type being invoked): The CacheTime option is used by the RunRP rule to cache temporary files. < RPRun > CacheTime = 60 ;(default, value specified in minutes) These options are used by the RunRP rule to cache temporary PDF and text files. < IDSServer > PrintFileCacheTime = 1800 ;(default, value specified in seconds) TextFileCacheTime = 1800 ;(default, value specified in seconds) The Timeout option is used by several Docupresentment rules to cache temporary XML files: < HTMLFileCache > Timeout = 7200 ;(default, value specified in seconds) The Timeout option is used by the DPRPrint rule to cache temporary PDF files 122

139 Using WebSphere MQ < PDFFileCache > Timeout = 7200 ;(default, value specified in seconds) The Timeout option is used by EWPS rules to cache temporary output files < EWPSFileCache > Timeout = 7200 ;(default, value specified in seconds) The following file caching configuration options are supported in the DocumentServer section of the docserv.xml file. Option FilePurgeList FilePurgeTimeSeconds FileWriteThreshold Description Specifies the name of the file cache to use. This file holds entries that correspond to files cached for removal and their expiration time stamp. The default is filecache.properties. If there is more than one Docupresentment instance running, the first instance uses the file cache name specified in FilePurgeList configuration option. Instances that follow use filecachename.instancenumber, where filecachename is the name specified by the FilePurgeList configuration option and instancenumber is the number of the instance (instance numbers are zero-based). Here is an example: If Docupresentment is using the Instances configuration property in docserv.xml file with a value of three (3) and the default file cache name of filecache.properties is used, then instance one will use the filecache.properties file name, instance two will use the filecache.properties.1 file name, and instance three will use the filecache.properties.2 file name. Specifies how often the thread that cleans up cached entries runs. The default is Determines how many file cache entries can be held in memory before they are written to the file cache on disk. The default is zero (0). 123

140 Chapter 2 Using the Internet Document Server USING HTTP In addition to processing requests received from enterprise queuing systems (WebSphere MQ and JMS), IDS can receive requests through HTTP. You can configure IDS to use HTTP-based messaging, queue-based messaging, or both. HTTP messaging replaces the file-based xbase queues from earlier versions of IDS (prior to 2.0) as the low-volume messaging system. Like the xbase queues from earlier versions, there is no setup of an extra program to run the messaging system, plus HTTP messaging does not have the 64K limit of xbase queues. Although you can use HTTP-based messaging for lower-volume installations, an enterprise-ready queuing system is recommended for higher-volume installations and in situations where requests should not be lost if IDS or IDS clients are halted. The default format of messages sent to HTTP-based messaging is the SOAP with Attachments format. The request type and message variables are in an XML message embedded into a SOAP envelope, and attachments are added in MIME format to the message. For more information, see Using the XML Messaging System on page 152. You can find more information about SOAP and attachments at: The combination of HTTP messaging and the SOAP format means that IDS can act as a Web Services server for IDS requests. Web Services clients can send messages to IDS via HTTP using the SOAP and SOAP With Attachments format. IDS processes the request and sends the result back to the Web Services client in SOAP format. A Java sample program, JAXMClient, is provided for testing and as a source code template so you can create your own Web Services clients using Sun's Java API for XML Messaging. You can find more information about the Java API for XML Message at: NOTE:No particular version of the SOAP protocol is required. In IDS version 1.8 and version 2.x the system does manual XML parsing to extract information, so versions are essentially ignored. No WSDL file is needed for a.net client. Setting up HTTP For IDS, add these values to the docserv.xml file, in the BusinessLogicProcessor section, messaging subsection, http subsection: <section name="businesslogicprocessor">... <section name="messaging"> <section name="http"> <entry name="port">49152</entry> <entry name="waitforresultmillis">30000</entry> <entry name="httpprocessors">15</entry> <entry name="requestpath">xslpath</entry> <entry name="htmlpath">htmlpath</entry> <entry name="address"> </entry> </section> 124

141 Using HTTP Entry port WaitForResultMillis HttpProcessors RequestPath HtmlPath Address Description Indicates the http port that the first instance of IDS will be accessible from. If more than one instance is running they will use subsequent ports, starting with this one. Indicates how long, in milliseconds, to wait for the request to be processed before timing out. Indicates how many extra threads will be set up to accept http requests from clients. Indicates where IDS will find customization XSL style sheets. Indicates where IDS will find extra HTML-based information. Allows binding the HTTP servers to a specific network interface address on the machine where Docupresentment is running. The HTTP servers will bind to all local devices if this option is not used. Client programs use the file docclient.xml to store configuration information. Queue information would go in the DocumentClient section, messaging subsection, queue subsection. A client program that would use the same queues as this server would have this setup: <section name="documentclient"> <section name="messaging"> <section name="queue"> <entry name="queuefactory.class">com.docucorp.messaging.http. DSIHTTPMessageQueueFactory</entry> <entry name="http.url"> </section> <!-- queue section --> </section> <!-- messaging section --> </section> <!-- DocumentClient --> The entry queuefactory.class tells the client program to use HTTP to communicate. http.url gives the name of the server machine and TCP/IP port to use. NOTE:The http subsection is also used by IDS when it processes ordinary requests via HTTP messaging. See Using IDS to respond to requests via a browser on page 127 for more information. Responding to URL requests IDS can respond to requests formatted as a URL from a browser and display results in HTML. You can customize the display for a particular request or use a default display which shows message variables, rowsets, and any errors encountered. An example URL is request?reqtype=sss&userid=userid&password=password Where localhost is the IP address to contact, and is the port number at the IP address that IDS is using. 125

142 Chapter 2 Using the Internet Document Server You can add any number of message variables to the URL but attachments are not supported. To use this capability you must make changes in the DOCSERV.XML configuration file. First, find the BusinessLogicProcessor section, then locate the Messaging subsection. In this subsection, create an HTTP subsection, as shown here: <section name="http"> <entry name="port">49152</entry> <entry name="waitforresultmillis">30000</entry> <entry name="httpprocessors">15</entry> <entry name="requestpath">xslpath</entry> <entry name="htmlpath">htmlpath</entry> </section> Entry port WaitForResultMillis HttpProcessors RequestPath HtmlPath Description Indicates the http port that the first instance of IDS will be accessible from. If more than one instance is running they will use subsequent ports, starting with this one. Indicates how long, in milliseconds, to wait for the request to be processed before timing out. Indicates how many extra threads will be set up to accept http requests from clients. Indicates where IDS will find customization XSL style sheets. Indicates where IDS will find extra HTML-based information. Using IDS to respond to requests via a browser IDS can respond to requests directly from a web browser and display the results formatted as HTML. A web server is not needed for the display. This is useful for debugging purposes. You can customize the formatting for each request type, otherwise a default page appears showing any message variables and error messages for the request. After a request is processed, the results are formatted in the SOAP with MIME Attachments format. See Setting up HTTP on page 125 for more information. IDS looks for an XSL style sheet named: REQTYPE.xsl where REQTYPE corresponds to the request type of the request. If this file is found, it is used to transform the SOAP XML. If there is no XSL style sheet for that request, a default style sheet is used. The default style sheet displays the message variables name/ value pairs in a table then lists any rowsets. To have a request displayed in your browser, build a URL similar to: request?reqtype=sss&userid=userid&password=password localhost and are the TCP/IP address and port number where IDS is running. Message variables are entered as NAME=VALUE pairs, separated by an ampersand (&). The only required variable is REQTYPE. Any number of message variables can be added to the URL but attachments are not supported. Here is an example: 126

143 Using HTTP Configuring IDS to handle HTTP requests In the docserv.xml configuration file, in section 'BusinessLogicProcessor', subsection 'messaging' create an http subsection: <section name="http"> <entry name="port">49152</entry> <entry name="waitforresultmillis">30000</entry> <entry name="httpprocessors">15</entry> <entry name="requestpath">xslpath</entry> <entry name="htmlpath">htmlpath</entry> </section> Parameter port WaitForResultMillis HttpProcessors RequestPath HtmlPath Description The HTTP port you access IDS from. How long, in milliseconds, to wait for the request to be processed before timing out The number of extra threads to set up to process HTTP requests from clients. Where IDS can find customization XSL style sheets. If you use a relative path, keep in mind the current directory is where IDS was installed. Where IDS can find extra HTML-based information. If you use a relative path, keep in mind the current directory is where IDS was installed. The http subsection is also used by IDS when it processes ordinary requests via HTTP messaging. See Using HTTP on page 125 for more information. 127

144 Chapter 2 Using the Internet Document Server USING MULTIPLE BRIDGES You can set up multiple bridges to use a single server. These bridges include Documaker Bridge, the Documanage Bridge, and the Docuflex Bridge. There are two ways to do this: The simplest way is to combine all of the required INI options into the DAP.INI file, which is loaded by the DPRInit rule. The more advanced and recommended way is to use the DPRSetConfig rule and multiple INI files. This lets you set INI options specifically for each bridge (different values for the same INI option for different bridges). NOTE:The system expects to globally apply the values it finds in an INI file. You handle this by switching the context based on the attachment variable CONFIG, using the DPRSetConfig rule. In the DAP.INI file, you specify which INI files should be used for each of the CONFIG values, for example: < Config:TIFF > INIFile = tiff.ini < Config:DAPARC > INIFile = daparc.ini The system supports multiple INI files, such as: < Config:TIFF > INIFile = tiff.ini INIFile = myownini.ini In the case of the usage of the DPRSetConfig rule and the appropriate INI values, for example if the DAP.INI file includes this setting: < Config:TIFF > INIFile = tiff.ini The actual INI context used in the rules and bridges, will include the INI values from the TIFF.INI and DAP.INI files. When using multiple INI files with the same INI options, but different values, the first INI value the value from the first INI file is returned when the rules ask for the INI value. The only thing you have to watch out for is when the system expects multiple INI values. For example, Documaker Bridge rules look for multiple INI values for the AppIdx options in the ArcRet control group. In this case, the system gets all of the matching values from the first INI file (TIFF.INI in this example) and then gets all of the matching INI values from the DAP.INI file. 128

145 Using Multiple Bridges Here s another example: Assume IDS is installed with the Documanage and Documaker bridges. You create two CONFIG values: TIFF and META. The DAP.INI file will include these options: < Config:TIFF > INIFile = tiff2pdf.ini < Config:META > INIFile = meta2pdf.ini The Documaker-related INI options for each bridge should go into each of these INI files. You can optionally place common INI options in the DAP.INI file. You should use the DPRSetConfig rule in any rule list which includes request types and that intend to use DPR, TPD, or MTC rules. The DPRSetConfig rule is located in DPRW32.DLL and runs on MSG_RUNF. Here is the example (from the DOCSERV.INI file of the rule list with this rule. This rule must run before any other rules which use Documaker code and expect Documaker-related INI options. < ReqType:MTC > function = atcw32->atclogtransaction function = atcw32->atcloadattachment function = dprw32->dprsetconfig function = atcw32->atcunloadattachment function = mtcw32->mtcloadformset function = dprw32->dprrotateformsetpages function = mtcw32->mtcprintformset NOTE:The TPDInitRule rule should be in the list after DPRInit rule. Request types and multiple bridges When you install one bridge over another or develop a new bridge, keep in mind that some of the request types listed in the DOCSERV.INI or DOCCLNT.INI files may already be in use by another application or bridge. If this happens, change your bridge or application to use an unused request type. The length of the request type string is not limited to three characters. You can enter up to 19 characters. Do not include any special characters, instead limit it to alphanumeric characters and underscores. For example, suppose you are trying to use request type LGN, but it is already taken and the list of rules in the DOCSERV.INI file for this request type is not the same as you need. In this situation, you could define your own request type, such as MYLGN and add the rules you need to DOCSERV.INI file under the ReqType:MYLGN control group. Be sure to change your application to use the MYLGN request type instead of LGN. 129

146 Chapter 2 Using the Internet Document Server SUBMITTING BATCH REQUESTS You can use the FILE2IDS utility to read a text file which contains a series of requests and submit those requests to an IDS server. Each line of the text file equals one request. You specify the request type on the command line and the attachment variables are created from each line in the input file in this manner: Each line is broken into 1000 byte chunks (1000 is the default size, you can set the size using the /L parameter) Each chunk is added as attachment variable RECORDLINEXX, where XX is the sequence number of the chunk. The attachment variable RECORDPARTS specifies how many chunks are added. NOTE:The FILE2IDS is a Visual Basic program. You must have a VB runtime installed to run this program. You can click the Help button when you run FILE2IDS to see a summary of the various parameters. For more information about this utility, see the Utilities Reference. 130

147 Printing in Duplex Mode to PCL Printers PRINTING IN DUPLEX MODE TO PCL PRINTERS Windows does not let you print files that are a mixture of simplex and duplex pages from Acrobat. The whole document has to be printed the same way. IDS, however, lets you print a file to a local PCL printer which preserves the file s duplex information. There are two ways to do this: By inserting blank pages into a PDF file for the pages in simplex mode. This requires the system to create two PDF files, one for printing and one for viewing. By creating the PCL file, compressing the file, downloading the file, and then decompressing it for printing. IDS can create compressed PCL files several ways: Using the IDS print rules. If you use the print rules, use the Compression attachment variable to create a compressed file. When used by Print Preview, you must also pass the Compression attachment variable to the DPRPrint rule. See the SDK Reference for more information about these rules. Using Documaker. If you create the file via Documaker, you set INI options to create the file. The PRTZCompressOutPutFunc function is called to compress the output files. To use this function to compress an output file such as a PCL print batch file, add these INI options: < PrtType:PCL > OutputMod = PRTW32 OutputFunc = PRTZCompressOutputFunc Using a Java application which can decompress the file and send it to a local printer. The application is provided in the WindowsRawPrinter.jar file and it requires that you install the DSIJWP.DLL file. NOTE:The output is compressed, regardless of the file s extension. You must decompress the file before you can print it. 131

148 Chapter 2 Using the Internet Document Server USING IDS TO DISTRIBUTE You can use the Internet Document Server to distribute . The following illustration shows how it works with the GenData program, which is part of Documaker: GenData program Recipient batch used for File2IDS IDS Service NOTE:Because the File2IDS utility is a Visual Basic program, the above scenario is only available for Windows environments. The following scenario, which is available for both Windows and UNIX environments, shows how it works if you are using Documaker Bridge, but not the GenData program: IDS client request IDS Service For either approach, to use the Internet Document Server to distribute , you must modify these files: DOCSERV.XML DAP.INI MODIFYING THE DOCSERV.XML CONFIGURATION FILE This configuration file must contain the following section. These rules are used to take messages sent to IDS and send formatted messages to an server such SMTP. The system supports text-based templates or HTML templates that can be sent as an attachment or used as the message body. <section name="reqtype: "> <entry name="function">atcw32->;atclogtransaction</entry> <entry name="function">atcw32->;atcloadattachment</entry> <entry name="function">dprw32->;dprparserecord</entry> 132

149 Using IDS to Distribute <entry name="function">dprw32->;dprfindtemplate</entry> <entry name="function">dprw32->;dpradd2attachment</entry> <entry name="function">dprw32->;dprcreate attachment</entry> <entry name="function">dprw32->;dprmail</entry> <entry name="function">atcw32->;atcunloadattachment</entry> </section> Modifying the DAP.INI File This INI file must contain the following control groups and options. DFD control group The DFD file specified by this option is used by the DPRParseRecord rule. The system expects to receive the data from the client in fixed-length records defined by this DFD. Using a DFD to define the record layout increases flexibility. This DFD can be identical to a batch recipient DFD, where the system is taking an output from the GenData program and using it as input to the server. < DFD > File =.\dfd\attchdfd.dfd 2IDS control group This group is also used by the DPRParseRecord rule. The option (on the left) must match a field name in the DFD defined under the DFD group. The DPRParseRecord rule copies the data to attachment variables used by other rules (see the section on attachment variables). This lets you take fields defined in the DFD whatever they are named, and transfer the data to attachment variables that are used by other rules. < 2IDS > Add = ADDRESS PullCode = REQTYPE XML2Body control group This control group is used by the DPRFindTemplate rule. Templates are used to predefine text for the body of an , while variable data is inserted at indicated places within the body of text. The XML2Body control group defines which template files are used for the message body. The options in the example below, such as e301, e302, and so on, are the values of the ReqType used by the IDS. This value can come directly from the message the IDS receives or from the DPRParseRecord rule. The system must have the ReqType either in the ATTCHDFD.DFD file or set up in the 2IDS control group. < XML2Body > e301 =.\tmpl\e301.txt e302 =.\tmpl\e302.txt e303 =.\tmpl\e303.txt e304 =.\tmpl\e304.txt e305 =.\tmpl\e305.txt e306 =.\tmpl\e306.txt e307 =.\tmpl\e307.txt e308 =.\tmpl\e308.txt e309 =.\tmpl\e309.txt e310 =.\tmpl\e310.txt e311 =.\tmpl\e311.txt e312 =.\tmpl\e312.txt 133

150 Chapter 2 Using the Internet Document Server XML2Attach control group This control group is used when you need to use template processing to produce an attachment. This group functions just like the XML2Body control group except the output of the template processing is sent as an attachment. < XML2Attach > e301 =.\tmpl\e301.txt e302 =.\tmpl\e302.txt e303 =.\tmpl\e303.txt e304 =.\tmpl\e304.txt e305 =.\tmpl\e305.txt e306 =.\tmpl\e306.txt e307 =.\tmpl\e307.txt e308 =.\tmpl\e308.txt e309 =.\tmpl\e309.txt e310 =.\tmpl\e310.txt e311 =.\tmpl\e311.txt e312 =.\tmpl\e312.txt Add2Attachment control group The control group is used by the DPRAdd2Attachment rule to take values from the INI file for the rules (see section on predefined attachment variable names). < Add2Attachment > default = SUBJECT, Important notice Mail and MailType control groups These control groups are used by the DPRMail rule to define the protocol. See the Documaker Workstation Administration Guide for information on setting up support. These options are identical to the ones set up in the FSIUSER.INI or FSISYS.INI files for a Documaker Workstation. < Mail > MailType = SMTP < MailType:SMTP > Name = Send Mail Module = SMMW32.DLL MailFunc = SMMSendSMTP ReplyTo = From = AltFrom = Joe Jones Port = 25 Server = Debug = Yes Option Name Module MailFunc Description Name of the system (identifies the system on internal dialogs). Name of the Documaker DSO that supports the system. Exported DSO function name of the handler. 134

151 Using IDS to Distribute Option ReplyTo From AltFrom Port Server Debug Description For SMTP, this option lets you specify a reply-to address. The system also lets you specify a different reply-to address for each IDS transaction. Use this built-in function to specify an attachment variable which contains the value for the ReplyTo option: < MailType:SMTP > ReplyTo = ~GetAttach REPLYTO,INPUT The value for the ReplyTo option is replaced by the value of the attachment variable in the input attachment with the name REPLYTO. The first parameter is the name of the attachment variable, the second is the INPUT or OUTPUT, specifying which attachment is used. You can use the built-in INI function in the DAP.INI file or in a particular configuration INI file. You cannot use it in the DOCSERV.INI or DSI.INI files. For SMTP, this option lets you specify who the was from. For SMTP, this option lets you specify an alternative from address, indicating where the was from. Enter the port. Enter the address of the server. Enter Yes to turn on debugging. ATTACHMENT VARIABLES USED BY RULES Messages sent to the IDS are contain attachment variables. Attachment variables can also be used to send information from one rule to another. Some INI options refer to attachment variables. The attachment variables listed below are used by the rules. For more information on attachments and the rules, see the SDK Reference. Variable XMLTEMPLATTACH XMLTEMPLBODY HTMLATTACHFILE HTMLBODYFILE Description The DPRCreate Attachment rule uses this variable to know which file to open as the template for the attachment. This variable is usually created by the DPRFindTemplate rule. The DPRCreate Attachment rule uses this variable to know which file to open as a template for the message body. This variable is usually created by the DPRFindTemplate rule. The file name that contains the output from the template processing used for the attachment. This variable is created by the DPRCreate Attachment rule and contains a path to a file name not the actual data. The file name that contains the output from the template processing used for the message body. This variable is created by the DPRCreate Attachment rule and contains a path to a file name not the actually data. 135

152 Chapter 2 Using the Internet Document Server Variable RECORDLINE(##) RECORDPARTS REQTYPE ADDRESS MSGBODY SUBJECT ATTACHMENT Description The variable that contains raw data sent to IDS from the client. The format of the data is defined by the DFD specified by the Path option in the DFD control group. There can be any number of these variables but no variable can contain more than 1024 bytes of data. The variables must be defined as follows: (RECORDLINE00 RECORDLINE01 RECORDLINE99) These variables must be created by the client program. These variables are processed by the DPRParseRecord rule. The number of RECORDLINE variables. Processed by the DPRParseRecord rule. The transaction identifier code. Used by the DPRFindTemplate and DPRAdd2Attachment rules to determine which template to use for a particular message. The address. Serves as input for the DPRMail rule. The body of . Serves as input for the DPRMail rule. The subject of the . A file attached to the no template processing. USING RULES You can use the following rules when working with . For more information, see the SDK Reference. DPRParseRecord Use this rule to assemble an attachment into a record and then convert to an XML tree. This rule expects the RECORDLINE## and RECORDPARTS attachment variables in the message it receives. The rule performs the following operations. 1 Takes the data from each of the RECORDLINE## variables and appends them together into one record. 2 The data from this record is converted into an XML tree with variable names in the ATTCHDFD.DFD file used as the variable names for the XML tree. 3 The data from the DFD variables can be transferred to attachment variables. Therefore you can use any variable defined in the DFD to set any of the specific attachment variables listed in the previous section. The 2IDS control group maps the DFD variable names to the attachment variable names. So you have two groups of variables; the attachment variables and the XML tree variables. < 2IDS > DFD VARIABLE = ATTACHMENT VARIABLE DPRFindTemplate Use this rule to specify the template file. It expects a REQTYPE variable name to in the attachment. So the DPRParseRecord rule must be executed first to set the REQTYPE variable. It uses the XML2Body control group to define the templates to create the message body and the XML2Attach control group to set up attachments. 136

153 Using IDS to Distribute DPRAdd2Attachment Use this rule to set attachment variables from the INI file. It uses the Add2Attachment control group in the INI file to set the variable names. It can use a default setting in the INI file or it can use a specific request type, or multiple request types. < Add2Attachment > e301 = SUBJECT, Warning Notice e301 = ATTACHMENT, d:\ticket.doc default = SUBJECT, Important notice DPRCreate Attach ment Use this rule to perform template processing. This rule can be used for the message body as well an attachment. Template processing uses a text or HTML file to define constant data. Variable data is then inserted at indicated places within the text. Here is an example of a template text file. You must define the CurrentDate and AcctName fields in the ATTCHDFD.DFD file. <%descendant::column[attribute::name="currentdate"],%> Dear <%descendant::column[attribute::name="acctname"],%>, Thank you for opening a certificate of deposit with DeepGreen Bank. You will receive documents pertaining to your account in the mail shortly. If you have any questions, please us at or contact our Customer Care Center at Sincerely, DeepGreen Bank E301 Whether the template is used for the message body or an attachment depends on whether the request type was listed under the XML2Body or the XML2Attach control group. This is determined when the DPRFindTemplate rule is executed. DPRMail Use this rule to transfer the data from the attachment variables to the server. IDS acts as a client to an server such as Microsoft Exchange. The following attachment variables should be considered as input to this rule. ADDRESS MSGBODY SUBJECT ATTACHMENT HTMLATTACHFILE HTMLBODYFILE 137

154 Chapter 2 Using the Internet Document Server DPRLog Use this rule to confirm whether an was sent by IDS. This rule stores information in a log file from either the attachment variables or the XML document created by the DPRParseRecord rule. The DPRMail rule puts the RESULTS attachment variable into the output queue. If no RESULTS variable exists, then the DPRMail rule was not executed and no mail was sent. USING THE BUS IDS includes an message bus you can use to receive request messages with or without file attachments from an inbox. Replies can be ed asynchronously with or without file attachments to the originators of the request messages. You can also configure a reply box as the default reply queue in the server or client configuration files, in which case test utilities or client applications using DSILIB or DocucorpMsg Java package can also communicate with IDS via the message bus. The main body part of a request should be formatted in plain text and should contain the XML that should be used as the main body part of the MIME message. Here is an example: <?xml version="1.0" encoding="utf-8"?> <SOAP-ENV:Envelope xmlns:soap-env=" envelope/"> <SOAP-ENV:Body> <DSIMSG VERSION=" "> <CTLBLOCK> <REQTYPE>SSS</REQTYPE> <UNIQUE_ID>f9db68c1b1c b6cee85a5bdd2</UNIQUE_ID> </CTLBLOCK> <MSGVARS> <VAR NAME="REQTYPE">SSS</VAR> <VAR NAME="MAIL.MARSHALLER.XSL.TEMPLATE">sss.xsl</VAR> </MSGVARS> </DSIMSG> </SOAP-ENV:Body> </SOAP-ENV:Envelope> The content of the main body part of a reply message can be formatted via an XSL template that is accessible to IDS and that is supplied via input message variable MAIL.MARSHALLER.XSL.TEMPLATE. If an XSL template is not provided, IDS returns XML of a format similar to that in the example shown above for a request message. Malformed requests are logged in a bad-soap.log file along with a reference ID and IDS will change the request type to EML and send a response along with the same reference ID back to the end user detailing the nature of the error. For information on these properties, please see the HTML documentation shipped with IDS. You will find this documentation in the following directory: dsi_sdk\java\docs\com\docucorp\messaging\mail\dsimailmessagequeuefa ctory.html Be sure to specify the MailDSIMessageMarshaller and the DSIMailMessageQueueFactory classes for the marshaller and queue.factory properties. Here is an example of a queue configuration section for IDS (docserv.xml): 138

155 Using IDS to Distribute <section name="queue"> <section name="marshallers"> <entry name="marshaller.class">com.docucorp.messaging.data.marshaller.mail DSIMessageMarshaller</entry> </section> <!-- input options --> <entry name="queuefactory.class">com.docucorp.messaging.mail.dsimailmessag equeuefactory</entry> <entry name="mail.input.server">pop.gmail.com</entry> <entry name="mail.input.port">995</entry> <entry name="mail.input.user">requestq</entry> <entry name="mail.input.password">pdtest123</entry> <entry name="mail.input.protocol">pop3</entry> <entry <entry name="mail.input.use.authentication">no</entry> <entry name="mail.input.use.ssl">yes</entry> <entry name="mail.input.ssl.socketfactory.class">com.docucorp.messaging.ma il.ssl.input.dsimailsslsocketfactory</entry> <entry name="mail.input.ssl.socketfactory.fallback">false</ entry> <entry name="mail.input.ssl.protocol">sslv3</entry> <entry name="mail.input.ssl.keystore">c:/docserv/keystore/ cacerts</entry> <entry name="mail.input.ssl.keystore.type">jks</entry> <entry name="mail.input.ssl.keystore.manager.type">sunx509</ entry> <entry name="mail.input.ssl.keystore.pwd">changeit</entry> <entry name="mail.input.ssl.truststore">c:/docserv/keystore/ cacerts</entry> <entry name="mail.input.ssl.truststore.type">jks</entry> <entry name="mail.input.ssl.truststore.manager.type">sunx509</ entry> <entry name="mail.input.ssl.truststore.pwd">changeit</entry> <!-- output options --> <entry name="mail.output.server">smtp.gmail.com</entry> <entry name="mail.output.port">465</entry> <entry <entry name="mail.output.password">pdtest123</entry> <entry name="mail.output.protocol">smtp</entry> <entry <entry name="mail.output.use.authentication">yes</entry> <entry name="mail.output.use.ssl">yes</entry> <entry name="mail.output.ssl.socketfactory.class">com.docucorp.messaging.m ail.ssl.output.dsimailsslsocketfactory</entry> <entry name="mail.output.ssl.socketfactory.fallback">false</ entry> <entry name="mail.output.ssl.protocol">sslv3</entry> <entry name="mail.output.ssl.keystore">c:/docserv/keystore/ cacerts</entry> <entry name="mail.output.ssl.keystore.type">jks</entry> 139

156 Chapter 2 Using the Internet Document Server <entry name="mail.output.ssl.keystore.manager.type">sunx509</ entry> <entry name="mail.output.ssl.keystore.pwd">changeit</entry> <entry name="mail.output.ssl.truststore">c:/docserv/keystore/ cacerts</entry> <entry name="mail.output.ssl.truststore.type">jks</entry> <entry name="mail.output.ssl.truststore.manager.type">sunx509</ entry> <entry name="mail.output.ssl.truststore.pwd">changeit</entry> <!-- common mail options --> <entry name="mail.debug">yes</entry> </section> 140

157 Attaching Documents to Documaker Transactions ATTACHING DOCUMENTS TO DOCUMAKER TRANSACTIONS The system lets you attach documents to Documaker transactions as TIFF, JPG, RTF, and PDF files, as well as other bitmap formats supported by Documaker. Once attached, the document becomes an embedded bitmap in the Documaker transaction. The attachment form has an option to indicate it is an attachment (letter A in form options). NOTE:This shared object feature was implemented for idocumaker integration and usage. The Documaker bridge rules DPRUpdateFormsetFromXML and DPRLoadImportFile were enhanced to support attachment forms. You can specify the document you want to attach several ways. For instance, the document can be a... File on disk with its name and type stored in IDS attachment variables File sent to IDS in the message File on disk accessible by Documaker Bridge Document in a Documanage repository In all cases the information needed to find the file is located in the form metadata. Special metadata tag names are reserved for each case. File with the Name and Type in IDS Attachment Variables These tags in the form metadata specify how to locate the file name: Tag DPR_ATTACHVAR NAME DPR_FILETYPE DPR_FILETYPEVAR Description The name of the DSI attachment variable where the file name is stored. (Optional) The system looks at this value to determine the file type. If it is missing, the system checks the file extension. The default is TIFF. (Optional) The name of DSI attachment variable with the file type. The system looks at this value to determine the file type. If it is missing, the system checks the file extension. The default is TIFF. If DPR_FILETYPE is present, this variable is ignored. At least one of the file type values is required. Here is an excerpt of an XML import file with this information. The actual file name is located in DSI variable named DPRFILE and its type is in DSI variable DPRTYPE. <?xml version="1.0" encoding="utf-8"?> <FORM NAME="Test form name" OPTIONS="RA"> <INFO NAME="DPR_ATTACHVARNAME">DPRFILE</INFO> <INFO NAME="DPR_FILETYPEVAR">DPRTYPE</INFO> <DESCRIPTION>Test description of the form</description> <RECIPIENT NAME="AGENT" COPYCOUNT="1"/> <RECIPIENT NAME="HOME OFFICE" COPYCOUNT="1"/> </FORM> 141

158 Chapter 2 Using the Internet Document Server File Sent to IDS in the Message These tags in form metadata specify how to locate the file data. Tag DPR_ATTACH NAME DPR_FILETYPE DPR_FILETYPE VAR Description Specifies the name of the DSI attachment in which the file was sent, such as by the use of SendFile API. (Optional) Specifies the file type. The system looks at this value to determine the file type. If it is missing, the system checks the file extension. The default is TIFF. (Optional) Specifies the name of DSI attachment variable with file type. The system looks at this value to determine the file type. If it is missing, the system checks the file extension. The default is TIFF. If DPR_FILETYPE is present, this variable is ignored. At least one of the file type values is required. Here is an excerpt of an XML import file with this information. The file was sent to IDS inside the message. The name of the attachment used to send it was SENTFILE. The type of file is in DSI variable DPRTYPE. <?xml version="1.0" encoding="utf-8"?> <FORM NAME="Test with DSI message" OPTIONS="RA"> <INFO NAME="DPR_ATTACHNAME">SENTFILE</INFO> <INFO NAME="DPR_FILETYPE">TIF</INFO> <DESCRIPTION>Test description of the form</description> <RECIPIENT NAME="AGENT" COPYCOUNT="1"/> <RECIPIENT NAME="HOME OFFICE" COPYCOUNT="1"/> </FORM> File Accessible by Documaker Bridge These tags in form metadata specify how to locate the file. Tag DPR_FILENAME DPR_FILETYPE DPR_FILETYPEVAR Description Specifies the physical file name. (Optional) Specifies the file type. The system looks at this value to determine the file type. If it is missing, the system checks the file extension. The default is TIFF. Specifies the name of DSI attachment variable with file type. The system looks at this value to determine the file type. If it is missing, the system checks the file extension. The default is TIFF. If DPR_FILETYPE is present, this variable is ignored. At least one of the file type values is required. Here is an excerpt of an XML import file with this information. <?xml version="1.0" encoding="utf-8"?> <FORM NAME="Test with filename" OPTIONS="RA"> 142

159 Attaching Documents to Documaker Transactions <INFO NAME="DPR_FILENAME">c:\docs\Image_0001.jpg</INFO> <INFO NAME="DPR_FILETYPE">JPG</INFO> <DESCRIPTION>Test description of the form</description> <RECIPIENT NAME="AGENT" COPYCOUNT="1"/> <RECIPIENT NAME="HOME OFFICE" COPYCOUNT="1"/> </FORM> NOTE:If you are using a relative path in the file name it has to be relative to the directory where Docupresentment is running. Document in the Documanage Repository These tags in the form metadata specify how to locate the file. All of these tags are required. Tag DMG_CABINET DMG_DOCID DMG_VERSION DMG_REVISION DMG_VERS Description Specifies the name of Documanage cabinet. Specifies the value of Documanage DOCID. Specifies the major version of the document. Specifies the minor version of the document. Specifies the minor and major version of the document. The format is minor.major, such as 1.0 or 2.5. If this value is present, the values for DMG_VERSION and DMG_REVISION are ignored. Here is an excerpt of an XML import file with this information. <FORM NAME="Test with Documanage" OPTIONS="RA"> <INFO NAME="DMG_CABINET">DOCCDEMO</INFO> <INFO NAME="DMG_DOCID">22401</INFO> <INFO NAME="DMG_VERSION">1</INFO> <INFO NAME="DMG_REVISION">0</INFO> <DESCRIPTION>Test description of the form</description> <RECIPIENT NAME="AGENT" COPYCOUNT="1"/> <RECIPIENT NAME="HOME OFFICE" COPYCOUNT="1"/> </FORM> Here is another example with the DOC_VERS value: <FORM NAME="Test with Documanage" OPTIONS="RA"> <INFO NAME="DMG_CABINET">DOCCDEMO</INFO> <INFO NAME="DMG_DOCID">22401</INFO> <INFO NAME="DMG_VERS >1.0</INFO> <DESCRIPTION>Test description of the form</description> <RECIPIENT NAME="AGENT" COPYCOUNT="1"/> <RECIPIENT NAME="HOME OFFICE" COPYCOUNT="1"/> </FORM> 143

160 Chapter 2 Using the Internet Document Server Note that to use the file in Documanage, the Documanage Bridge must be available on the Docupresentment server. The Documaker Bridge will execute the following Documanage Bridge rules automatically when it encounters the form with the metadata (no configuration changes needed): DmgBrsCopyAttachment DmgBrsValidateSession DmgBrsCacheContentsFile The type of the file does not need to be provided in this case, the Documanage document type will be used instead. Error Messages These error messages could be produced by the DPR rules if the attachment form did not work or was specified incorrectly. Error DPR0097 DPR0098 DPR0099 DPR0100 DPR0101 DPR0102 Text Attachment form <FORM> metadata specified DSI attachment variable <VARIABLE> but this variable was not found. File will not be loaded. Attachment form <FORM> metadata specified DSI file attachment with delimiter <VARIABLE> but this file was not attached to DSI message. File will not be loaded. Attachment form <FORM> metadata is missing required value <INFO>. File will not be loaded. Failed to load attached file specified by attachment form <FORM>. File name <FILE> of type <TYPE>. Failed to load dynamic link library <LIBRARY> Cannot locate variable <VARIABLE> in the attachment list after executing Documanage bridge rules. Examine Documanage bridge errors. Specifying Duplex Options for the Attached Form If the attached document contains multiple pages, it might have to be printed in duplex mode. You specify the duplex options you want on each section using Documaker Studio so the duplex information will be on the XML representation of the form. You have these choices: F front B back T short bind The system defaults to simplex. At the end of the options you must specify #1 to indicate it is a dummy image. Here is an example: 144

161 Attaching Documents to Documaker Transactions OPTIONS= S#1 The name of the section is ignored. Here are a few examples: Start on back page bind example Short bind example <FORM NAME="Test with PDF filename" OPTIONS="RA"> <INFO NAME="DPR_FILENAME"> mytifftest.tif</info> <DESCRIPTION>Test of TIFF form</description> <RECIPIENT NAME="AGENT" COPYCOUNT="1"/> <RECIPIENT NAME="INSURED" COPYCOUNT="1"/> <SHEET> <PAGE> <SECTION NAME="TESTSECTION" OPTIONS="B#1"/> </PAGE> </SHEET> </FORM> Long bind example: <FORM NAME="Test with PDF filename" OPTIONS="RA"> <INFO NAME="DPR_FILENAME"> mytifftest.tif</info> <DESCRIPTION>Test of TIFF form</description> <RECIPIENT NAME="AGENT" COPYCOUNT="1"/> <RECIPIENT NAME="INSURED" COPYCOUNT="1"/> <SHEET> <PAGE> <SECTION NAME="TESTSECTION" OPTIONS="F#1"/> </PAGE> </SHEET> </FORM> <FORM NAME="Test with PDF filename" OPTIONS="RA"> <INFO NAME="DPR_FILENAME"> mytifftest.tif</info> <DESCRIPTION>Test of TIFF form</description> <RECIPIENT NAME="AGENT" COPYCOUNT="1"/> <RECIPIENT NAME="INSURED" COPYCOUNT="1"/> <SHEET> <PAGE> <SECTION NAME="TESTSECTION" OPTIONS="T#1"/> </PAGE> </SHEET> </FORM> Debugging Include this INI option in your config or DAP INI files to debug this functionality. < Debug > DPRProcessFormsetAttachments = Yes The default is No. When this option is set to Yes, the NA and POL files are unloaded with the names dprattach.dat and dprattach.pol and the log file (trace file or dprtrc.log) will contain information similar to this example: DPRProcessFormsetAttachments: DMG_CABINET=<DOCCDEMO> Form <Test with Documanage>. Adding CABINET attachment variable 145

162 Chapter 2 Using the Internet Document Server DPRProcessFormsetAttachments: DMG_DOCID=<22401> Form <Test with Documanage>. Adding DOC_ID attachment variable DPRProcessFormsetAttachments: DMG_VERSION=<1> Form <Test with Documanage>. Adding DOC_MAJORVERSION attachment variable DPRProcessFormsetAttachments: DMG_REVISION=<0> Form <Test with Documanage>. Adding DOC_MINORVERSION attachment variable DMG Rule DmgBrsCopyAttachment(DSI_MSGINIT) Time spent: DMG Rule DmgBrsValidateSession(DSI_MSGINIT) Time spent: DMG Rule DmgBrsCacheContentsFile(DSI_MSGINIT) Time spent: DMG Rule DmgBrsCopyAttachment(DSI_MSGRUNF) Time spent: DMG Rule DmgBrsValidateSession(DSI_MSGRUNF) Time spent: DMG Rule DmgBrsCacheContentsFile(DSI_MSGRUNF) Time spent: DPRProcessFormsetAttachments: found Documanage bridge attachment variables CONTENTS_DECOMPRESSED_PATH=<cache\22401f0v1x0.tif> and CONTENTS_DECOMPRESSED_TYPE=<TIF> DMG Rule DmgBrsCacheContentsFile(DSI_MSGRUNR) Time spent: DMG Rule DmgBrsValidateSession(DSI_MSGRUNR) Time spent: DMG Rule DmgBrsCopyAttachment(DSI_MSGRUNR) Time spent: DMG Rule DmgBrsCacheContentsFile(DSI_MSGTERM) Time spent: DMG Rule DmgBrsValidateSession(DSI_MSGTERM) Time spent: DMG Rule DmgBrsCopyAttachment(DSI_MSGTERM) Time spent:

163 Using IDS to Run Documaker USING IDS TO RUN DOCUMAKER You can set up IDS to run Documaker as a subordinate process, as shown below. Web clients communicate with IDS using queues. IDS communicates with Documaker via XML files called job tickets and job logs. This diagram illustrates the process: Web Client IDS XML Job Ticket Documaker (GenData) VB\COM\ Java Client XML Job Log IDS can start or stop Documaker as needed, without user interaction. One IDS session controls one Documaker process. You can, however, implement multiple IDS sessions and have multiple Documaker processes as well. Keep in mind these limitations: You can only run Documaker in single step mode. Consult the Documaker Administration Guide for more information on single step processing. Different resource setups for Documaker are supported, but Documaker processing restarts if resources are changed, eliminating the performance benefits. This should not be a problem because it is unlikely multiple Documaker setups will be used with a single IDS implementation. You can, however, experience problems testing a system with multiple setups. During processing, some INI options can be changed by the client. Since some Documaker rules use static variables and store INI values in memory, it is possible that a client will be unable to change an INI option if those Documaker rules are used. To handle these situations, you must restart Documaker. IDS and Documaker must exist on the same node/server machine. 147

164 Chapter 2 Using the Internet Document Server SETTING UP IDS To set up IDS to run Documaker, make these changes in the following configuration files: docserv.xml file Make these changes in the docserv.xml file, or the configuration file the IDS is configured to use. Here is an example of how to add a request type for Documaker: <section name="reqtype:rpd"> <entry name="function">atcw32->;atclogtransaction</entry> <entry name="function">atcw32->;atcloadattachment</entry> <entry name="function">atcw32->;atcunloadattachment</entry> <entry name="function">dprw32->;dprsetconfig</entry> <entry name="function">rpdw32->;rpdcheckrprun</entry> <entry name="function">rpdw32->;rpdcreatejob</entry> <entry name="function">rpdw32->;rpdprocessjob</entry> </section> If necessary, add two more request types, one to check if Documaker is running and one to stop Documaker. Here is an example: <section name="reqtype:check"> <entry name="function">atcw32->;atclogtransaction</entry> <entry name="function">atcw32->;atcloadattachment</entry> <entry name="function">atcw32->;atcunloadattachment</entry> <entry name="function">dprw32->;dprsetconfig</entry> <entry name="function">rpdw32->;rpdcheckrprun</entry> </section> <section name="reqtype:stop"> <entry name="function">atcw32->;atclogtransaction</entry> <entry name="function">atcw32->;atcloadattachment</entry> <entry name="function">atcw32->;atcunloadattachment</entry> <entry name="function">dprw32->;dprsetconfig</entry> <entry name="function">rpdw32->;rpdstoprprun</entry> </section> Also add the following IDS rule to the ReqType:INI section: <entry name="function">rpdw32->;rpdstoprprun</entry> DAP.INI file Add a configuration option for a the master resource library you will use. Here is an example which is based on the RPEX1 master resource library: < Configurations > CONFIG = RPEX1 < Config:RPEX1 > INIFile = RPEX1.INI RPEX1.INI file Make these changes in the RPEX1.INI file (or the INI file you are using for your configuration): < IDSServer > ExtrPath = e:\fap\mstrres\rpex1\extract\ PrintPath = e:\fap\mstrres\rpex1\data\ WaitForStart = 60 SleepingTime = 500 MaxWaitTime = 120 GENSemaphoreName = gendata 148

165 Using IDS to Run Documaker RPDSemaphoreName = rpdrunrp PrintFileCacheTime = 7200 TextFileCacheTime = 7200 < RPDRunRP > Executable = e:\rel101\shipw32\gendaw32.exe Directory = e:\fap\mstrres\rpex1\ UserINI = e:\fap\mstrres\rpex1\fsiuser.ini BaseLocation = < Printer > PrtType = PDF < Debug > RPDProcessJob = Yes Setting up Multiple Internet Document Servers The semaphores used by IDS and Documaker are global for a computer, so if you need multiple IDS processes on the same computer, each IDS process and subordinate Documaker process should use different semaphore names. Semaphore names are generated automatically by IDS for each instance. These names are passed to Documaker as command line parameters. No user intervention is needed. To specify naming conventions for these semaphores, change these INI options: < IDSServer > GENSemaphoreName = RPDSemaphoreName = Keep in mind the names must be unique for a computer, so two IDS servers will have to use two different INI files specifying semaphore names. Controlling Documaker To control Documaker via IDS, use these IDS rules: RPDCheckRPRun - Makes sure Documaker is running. If Documaker is not running, this rule starts it. RPDCreateJob - Finds the attachment variables for each of the values in the job ticket and adds them to the XML tree. The XML tree is added to the RPDJobTicket variable so the next rule can use it. RPDProcessJob - Gets the XML tree from the RPDJobTicket variable and writes it to a file. This file is used as the job ticket which triggers the Documaker process. RPDStopRPRun - Receives the current process ID from the RPDRunProcess variable and then terminates Documaker. For more information about these rules, see the SDK Reference. 149

166 Chapter 2 Using the Internet Document Server If a critical error is encountered IDS restarts Documaker Server (GenData) if it encounters a critical error and resubmits the transaction being processed when the error occurred. This helps you handle situations where you have sporadic memory access problems in custom or 3rd-party code. NOTE:Before the release of version 11.2 shared objects, when the GenData program started, the RPDProcessJob rule communicated with GenData via TCP/IP, sending the job ticket message to GenData and receiving a job log response. If the TCP/IP communication failed, the RPDProcessJob rule forced GenData to stop. This would prepare IDS for the next request. Version 11.2 shared objects added the ability to automatically restart GenData after the process described above. After it confirms that GenData has been stopped, the RPDProcessJob rule calls the RPDCheckRPRun rule to restart GenData and then calls itself to communicate with GenData and send the same job ticket. To keep a copy of each transaction, an eight-digit index number is added to the job ticket and job log file names when they are downloaded for information in debug modes. Also, the system includes these error messages which can appear if there is a TCP/IP failure: Message RPD0011 RPD0012 RPD0013 RPD0014 RPD0016 RPD0017 RPD0018 Description Unexpected program termination of GenData. Socket connection failure. Can not unload job ticket to the msg buffer. Can not load the msg buffer to the job log. Socket time-out. Time exceeded the MaxWaitForStart specification. GenData failure. The system includes additional information in the log trace file in case of failure. This includes the job ticket, the input attachment variables, and error messages. On the IDS side, this file is named dprtrc.log. On the GenData side, this file is the trace file. 150

167 Using IDS to Run Documaker Error file processing You can use INI options to turn on or off the recording of error information when using IDS to run Documaker. This can help in debugging. To create an error file and write errors into the error file, include these options in the Debug control group: < Debug > RPDCheckRPRun RPDCreateJob RPDProcessJob RPDErrFile = Yes = Yes = Yes = rpderr.dat Option RPDCheckRPRun RPDCreateJob RPDProcessJob RPDErrFile Description Enter Yes if you want to record any errors encountered when running this rule. If you enter No, errors produced while this rule is run are not recorded. Enter Yes if you want to record any errors encountered when running this rule. If you enter No, errors produced while this rule is run are not recorded. Be sure to set this option to Yes to record GenData errors. Enter Yes if you want to record any errors encountered when running this rule. If you enter No, errors produced while this rule is run are not recorded. Enter the name of the error file. The system does not create an error file if you do not enter a name in this field. Returning record IDs When you use IDS to run Documaker with WIP and archive rules, the WIP and archived record IDs are written to the print log (PrtLog) file. Furthermore, the first WIP record ID and the first archived record ID are sent to a job log (JobLog) file and are also output as the following attachment variables. Variable WIPRECORDID ARCRECORDID Description The first WIP record ID. The first archived record ID. These XML elements are added to both the PrtLog and JobLog files: <WIPRECORDID>12345</WIPRECORDID> <ARCRECORDID>12345</ARCRECORDID> 151

168 Chapter 2 Using the Internet Document Server SETTING UP DOCUMAKER The first step is to set up Documaker to run in a single step mode. See the Documaker Administration Guide for more information. Keep in mind these considerations... If the Documaker programs and DSOs are located on the network, the start time for Documaker can be significant. Keep in mind, however, that the start time only affects the first transaction. Subsequent transactions will process much more quickly. If the start time exceeds 10 seconds, consider changing the WaitForStart option to a higher value. All of the standard Documaker performance-related INI options are available even when IDS runs Documaker as a subordinate process. For best results, optimize Documaker s performance before using it with IDS. Documaker will run fastest if the resource files for Documaker, as well as input and output files, are physically located on the computer where IDS and Documaker are running. Documaker (GenData) automatically creates the XML export file from the transaction and returns the name as XMLOUTPUT and URLXMLOUTPUT. In addition, you will need to make changes to your FSISYS.INI or FSIUSER.INI files and to your AFGJOB.JDT file. FSISYS.INI or FSIUSER.INI file Be sure to turn off all Documaker stop options, as shown here: < GenDataStopOn > BaseErrors = No TransactionErrors = No ImageErrors = No FieldErrors = No < GenData > ClearMsgFile = Yes < PrintFormSet > MultiFilePrint = Yes LogFileType = XML LogFile =.\data\printlog.xml Option Description GenDataStopOn control group BaseErrors TransactionErrors ImageErrors FieldErrors Enter No to prevent the system from stopping on base-level errors. Enter No to prevent the system from stopping on transaction-level errors. Enter No to prevent the system from stopping on image-level errors. Enter No to prevent the system from stopping on field-level errors. GenData control group ClearMsgFile Enter Yes to clear the message file (MsgFile) before a job process starts. This prevents the previous job s information from being reused and is necessary when running in single-step mode. The default is No. 152

169 Using IDS to Run Documaker Option Description PrintFormSet control group MultiFilePrint LogFileType LogFile Enter Yes to generate multiple print files which have a 46-byte unique name. To identify which recipients are in which print batch, enter No or omit this option. This causes the PrintFormSet rule to save the printer for the print batch along with its recipient information. The MultiFilePrint option should only be used with the PDF, RTF, HTML, and XML print drivers. Specify the type of the log file, such as XML or TEXT. Specify the name and path of the log file, such as \data\printlog.xml If you omit the extension, the system uses the LogFileType option to determine the extension. These INI options are optional: < IDSServer > SleepingTime = 500 GENSemaphoreName = gendata RPDSemaphoreName = rpdrunrp < Debug > RULServerJobProc = Yes Option Description IDSServer control group SleepingTime GENSemaphoreName RPDSemaphoreName Enter the amount of time in milliseconds you want the system to wait before it checks for a job ticket. The default is 1000 (1 second). Semaphore names are generated by IDS for each instance and are passed to Documaker as command line parameters. Use this option to specify naming conventions for semaphore names. The default is gendata. Keep in mind semaphore names must be unique for a computer, so two IDS servers will have to use two different INI files specifying semaphore names. Semaphore names are generated by IDS for each instance and are passed to Documaker as command line parameters. Use this option to specify naming conventions for semaphore names. The default is rpdrunrp. Keep in mind semaphore names must be unique for a computer, so two IDS servers will have to use two different INI files specifying semaphore names. Debug control group RULServerJobProc Enter Yes to get a copy of the job ticket file before the system removes it. 153

170 Chapter 2 Using the Internet Document Server AFGJOB.JDT file Prior to the release of version 11.1, you had to change the base rule from RULStandardBaseProc, as shown here: <Base Rules> ;ServerBaseProc;1;;... The ServerBaseProc rule replaced the RULStandardJobProc rule and let IDS run Documaker as a separate, stay alive process. This meant Documaker only had to start once and IDS could continue even if Documaker failed. For more information on the ServerBaseProc rule, see the Rules Reference. NOTE:If you are running Documaker version 11.1 or higher, you do not have to substitute ServerBaseProc for RULStandardBaseProc. Naming Conventions for Output Files The output files from Documaker use the names generated by the IDS rules and submitted to Documaker in the job ticket file. If you need different names, provide them in the IDS request. In this case, you must make sure the names are unique or else they will be overwritten. The names generated by IDS can consist of up to 45 characters and are similar to the names generated by the DPRPrint rule in IDS. The directory where the output files are created is determined in this manner: If the file name and path was provided, the system uses that information. If the file name was provided, but the path was omitted, the system looks for the path in the PRINTPATH attachment variable. If the path is not in the PRINTPATH attachment variable, the system looks for the PrintPath option in the DSIServer control group. If no path was specified in the PrintPath option, the system places the output file in the current directory. The extension of the output files is determined in this manner: If the name and extension was provided in the attachment, the system uses that information. If the name and extension were omitted, the system generates a name and uses the printer type as the extension for the print output files. For other files, the system looks for the FileExt option in the IDSServer control group to find the extension. The default is DAT. 154

171 Using IDS to Run Documaker CREATING DPW FILES You can generate a DPW file from GenData or from an import file using IDS. The code is structured as a print driver so setting it up is virtually the same as with print drivers. The DPW library supports the INI2XML, WIP2DPW, and File2DPW control groups used by the WIP Edit plug-in. To generate a DPW file from Documaker, include these INI options: < Printers > PrtType = DPW < Printer > PrtType = DPW < PrtType:DPW > PrintFunc = DPWPrint Module = DPWW32 Debug = No Set the Debug option to Yes to capture additional debug information to the trace log. The PrtType:DPW group can also contain variable names that correspond to index element names in the DPW file. The values specified can be one of these formats: name = val The value will be used as provided, where val is the actual value provided. name = ~GVM gvmname If the DPW library is run under the GenData program, the value of the GVM variable matching the name provided is used, where gvmname stands for the name provided. name = ~GetAttach attachname If the DPW library is run under IDS, the value of the attachment variable matching the name provided will be used, where attachname stands for the name provided. The system checks the index of the DPW file for the presence of any variables specified in the PrtType:DPW control group and, if present, it updates their values with those specified in the INI file. 155

172 Chapter 2 Using the Internet Document Server ACCESSING IDS ATTACHMENT VARIABLES IN GENDATA There are times when the GenData program needs access to data passed from IDS which is not in the extract file. To meet this need, the GenData program can access IDS attachment variables as GVM variables. If a GVM variable with the same name already exists, its value does not change. Here is how it works: On the IDS side The RPDCreateJob rule adds any input attachment variables to the XML tree (job ticket) besides the existing variables, such as MsgFile, ErrFile, ExtrFile, LogFile, DbLogFile, NaFile, PolFile, NewTrn, PrtLog, PrtType, ExtrPath, PrintPath, PrintBatches, BatchFiles, IniOptions, EWPSRequest, EWPSResults, ShowErrors, WIPRECORDID, XMLOUTPUT, and so on. For example, if an attachment variable called RPDTEST is located and it has a value of This is a test, it is added to the XML tree as shown here: <DOCUMENT> <JOBTICKET>... <RPDTEST>This is a test</rpdtest> </JOBTICKET> </DOCUMENT> On the Documaker side After the ServerJobProc rule receives the XML tree (job ticket), its child elements are used to update INI values or create GVM variables or both. USING TCP/IP COMMUNICATIONS IDS and GenData use TCP/IP (socket) to replace the job ticket/job log file I/O communication. In IDS The RPDCheckRPRun rule sets up the host name and the port number for a GenData configuration by checking the HOST name and PORT number from these INI options: < IDSServer > MaxConfigAllowed = 10 Host = localhost Port = Option MaxConfigAllowed Host Description Enter the maximum number of configurations you want to allow. The default is 10. Enter the host name. The default is localhost. Port Enter the base IP port number. The default is If you have multiple GenData configurations running over multiple IDS instances, the port number is generated based on the IDS instance number and the base IP port number, so you must decide the base IP port number and the range of IP port numbers. Note that the total number of IP port numbers is decided by: 156

173 Using IDS to Run Documaker instances (IDS instance number) x MaxConfigAllowed (allowed to open GenDatas) If the current configuration differs from the previous configuration, the current configuration starts a GenData process with the assigned IP port number. Both the host name and port number are saved in the configuration structure and are appended to the configuration list. If the configuration exists, the configuration element is extracted and uses the saved host and port number as current. NOTE:TCP/IP communication is for shared objects 11.1 and above and can not be used with early versions.this rule checks the version to decide whether TCP/IP or file I/O communication should be used before it starts a GenData process. The RPDProcessJob rule uses the host name and port number to establish communication with GenData and sends a message that contains the XML document (job ticket) to the server (GenData) when it detects that GenData has started. You can set the maximum time to wait for GenData to start using this INI option: < IDSServer > WaitForStart = 30 Option WaitForStart Description Enter the maximum time to wait for GenData to start in seconds. The default is 30 seconds. After IDS detects that GenData has started, it sends a message in XML format (the job ticket) and waits for GenData to finish and send back a response in XML format (the job log file). You can set the maximum time to wait for GenData to respond using this INI option: < IDSServer > MaxWaitTime = 30 Option WaitForStart Description Enter the maximum time to wait for GenData to respond in seconds. The default is 30 seconds. If GenData does not start before the waiting time elapses, IDS displays this error message on the IDS side: Unexpected Program Termination of GenData In GenData As soon as GenData starts, it initiates the communication between IDS and GenData using the IP port number retrieved from the command line argument. It receives the job ticket document sent by IDS and continues the GenData process. You can set the maximum time to wait to receive a job ticket using this INI option: < IDSServer > MaxWaitTime =

174 Chapter 2 Using the Internet Document Server Option MaxWaitTime Description Enter the maximum time to wait to receive a job ticket in seconds. The default is 30 seconds. After GenData finishes, the JOBLOG tree is unloaded into a message buffer and is sent to client side as a response message. You can use options in the Debug control group to determine whether to unload the job ticket and job log files for reference purposes. On the IDS side, set this option to Yes to keep a copy of the job ticket: < Debug > RPDProcessJob = Yes On GenData side, set this option to Yes to keep a copy of the job log: < Debug > RULServerJobProc = Yes CUSTOMIZING THE EXECUTION OF DOCUMAKER When IDS runs Documaker in multiple step mode, you can introduce special steps which occur between the GenTrn, GenData, and GenPrint steps. You can use these steps, for instance, to Sort the TRNFILE or recipient batches Copy files to different locations Send files to the printer Notify an operator that steps were completed The RPDRunRP rule can run a custom executable after each step in the process. Use these INI options to define the custom executable name and path: < RPRun > PostGenTrnExecutable = PostGenDataExecutable = PostGenPrintExecutable = Option PostGenTrnExecutable PostGenDataExecutable PostGenPrintExecutable Description Enter the name and path of the custom executable, such as a batch file or shell script, you want the system to run after it completes the GenTrn step. Enter the name and path of the custom executable, such as a batch file or shell script, you want the system to run after it completes the GenData step. Enter the name and path of the custom executable, such as a batch file or shell script, you want the system to run after it completes the GenPrint step. By default, the following information is passed as parameters to each executable: 158

175 Using IDS to Run Documaker GenTrn INI file, trnfile GenData INIfile, recipient batches GenPrint INI file, print file These INI options are read from the FSIUSER.INI file to create the parameter list. The FSIUSER.INI file is created by the RPDRunRP rule. This INI file is passed to Documaker for each step. Internally, the RPDRunRP rule loads the FSIUSER.INI file and gets parameter information from it. GenTrn parameters < Data > TrnFile = (parameter trnfile) GenData parameters The system reads all of the options under the Print_Batches control group to determine the recipient batches: < Print_Batches > Batch# = (paramter receipient batches ) GenPrint parameters The system reads all of the print batches to determine the printer used and passes the port value for the printer as the parameter. < Print_Batches > Batch1 = (value ignored) < Batch1 > Printer = Printer1 < Printer1 > Port = (parameter print file) If any of the INI options are missing, the system logs an error. It will, however, try to run the post process without the missing parameter. Memory and list allocation errors result in failure and the system will not attempt to execute the outside process. Here is a list of the potential errors: Error Could not get INI option <Data> TrnFile GenTrn step Could not create VMM list GenTrn step Could not load INI file GenTrn step Could not get INI context GenTrn step Could not create VMM list GenData step Could not load INI file GenData step Could not get INI context GenData step Could not create VMM list GenPrint step Could not load INI file GenPrint step Could not get INI context GenPrint step Severity non-fatal fatal fatal fatal fatal fatal fatal fatal fatal fatal 159

176 Chapter 2 Using the Internet Document Server Error Could not get INI option GenData step <group> <option> Could not start process: [executable name and command line] Memory re-allocation failed Memory allocation failed Severity non-fatal fatal fatal fatal PROCStartProcess failed: [command line] PROCWaitProcess failed: [executable name and command line] PROCExitCodeProcess failed: [executable name and command line] non fatal non fatal 160

177 Using the XML Messaging System USING THE XML MESSAGING SYSTEM The XML messaging system is an open and documented queue control message format based on XML and the evolving SOAP standard. The XML message format is supported by the JMS, WebSphere MQ, and HTTP messaging systems. You can find more information on the XML and SOAP on the W3C WEB site: You can also find information about SOAP messages with attachments at: For information on using SOAP without a messaging system, see Using XML SOAP Outside of Messaging Systems on page 158. NOTE:Oracle Insurance will follow the evolving standards of SOAP and UDDI and move toward universal messaging. The first version of the DSI message format is based on XML and complies with many of the initial standards for SOAP message envelopes. Later versions will move transactions and servers toward fuller SOAP and UDDI compliance. Oracle Insurance has used message queuing as a means of serializing requests and responses between loosely coupled clients and servers without requiring one-to-one connections. Docupresentment includes the client and server sides of the DSI (document server interface) system and of the Oracle Insurance Messaging Library system. These interface layers help manage connections between multiple simultaneous clients and multiple simultaneous servers. The Oracle Insurance Messaging Library provides a logical abstract layer over the physical process of accessing the queue, so one implementation can support and switch between multiple queueing systems. The DSI system provides a logical abstract layer over the physical process of assembling, delivering, and parsing of a message, so the initiator of the message does not have to know the physical format of the message, and is insulated from internal software changes to the message format between product versions. For instance, you can use the DSI messaging client with Documaker Workstation so Documaker Workstation can... Interface with external systems via messaging middleware. Interface with IDS as a bridge to a legacy system to retrieve data for import. The first ability means second is optional. You can also use your own internal programs and interface using messaging middleware. The advantage of having a logical abstract layer is that it lets you deploy applications for different message queuing systems without requiring program changes. Only minimal setup changes are required to test or deploy the same application with a different queuing system. 161

178 Chapter 2 Using the Internet Document Server By abstracting the message format, applications are insulated from internal changes to the message format and can use the Oracle Insurance APIs to correctly assemble or disassemble messages. The disadvantage of message format abstraction is that non-oracle Insurance applications might be required to use Oracle Insurance APIs to communicate with Oracle Insurance applications. On some platforms, it may not be practical to invoke these APIs. The proprietary nature of the original message format further complicates the issue. If you are integrating with IDS as the server, the message format documentation is not necessary. If, however, you are integrating with another application, the message format may be needed if you do not use IDS APIs. The following topics outline the XML message file format. The XML-based DSI message format The DSI message format complies with the following XML-based structure: <?xml version="1.0" encoding="utf-8"?> <SOAP-ENV:Envelope xmlns:soap-env=" envelope"> <SOAP-ENV:Body> <DSIMSG VERSION=" "> <CTLBLOCK> <UNIQUE_ID> { guid hex string } </UNIQUE_ID> (required) <REQTYPE> { message request type } </REQTYPE> (required) <USERID> { user ID }</USERID> (optional) <RESULTQMGR> { remote queue manager } </RESULTQMGR> (optional) <RESULTQ> { remote queue name } </RESULTQ> (optional) <ATTACHMENT TYPE="TEXT or BINARY"> (optional) <DELIMITER> { tag delimiter } </DELIMITER> (required for ATTACHMENT) </ATTACHMENT> </CTLBLOCK> <MSGVARS> (required) <VAR NAME="VAR NAME 1"> { MSG VAR CONTENT 1 } </VAR> <VAR NAME="VAR NAME 2"> { MSG VAR CONTENT 2 } </VAR> <VAR NAME="VAR NAME 3"> { MSG VAR CONTENT 3 } </VAR> </MSGVARS> </DSIMSG> </SOAP-ENV:Body> </SOAP-ENV:Envelope> MIME headers... Optional attached text data... Example: a flat text extract file... Example: an XML data file... Example: a base64 (MIME) text encoded binary file MIME headers 162

179 Using the XML Messaging System Please note: The essential component of the message format is the DSIMSG structure, which is encoded inside SOAP-ENV envelope and body structures. The indentation of the elements is intended to make it easier to read. Actual messages are not indented.) The message can contain attached files. Attached files are encoded inside a tagged structure outside the SOAP-ENV structure. Note that once tagged outside of the primary structure in this fashion, the message file itself is no longer well-formed XML and cannot be viewed with some XML viewers. While it is not well-formed XML, it is a valid SOAP with attachments format. The DSI system manages the separation of the attached files from the message. Each ATTACHMENT structure describes the controlling attributes of the attached files. The TYPE attribute specifies the type and format of the attached file, either as TEXT (the default) or BINARY (MIME format). The DELIMETER element specifies a unique tag name, which is required to be inside the beginning and ending tag brackets to delimit the file data. Request and response messages have identical formats. The current specification does not require a distinction between requests sent by the client and responses returned by the server. The client initiating the request generates the UNIQUE_ID. The server echoes the same unique identifier in the response. The type of request is identified by the REQTYPE element. Client and server applications must understand and agree on the identifier for the request, the nature of the work to be performed as a result, and the response to be generated. The RESULTQMGR and RESULTQ elements are optional, but will appear based on certain types of queue configurations. The MSGVARS structure provides the DSI attachment variables which would previously have been encoded using the DSIAddAttachVar rule in the IDS SDK. Client Request Messages Here are several example client request messages in XML format: Without attachments Here is an example of a client request message in XML format which does not include attachments Content-Type: text/xml Content-Transfer-Encoding: 8bit <?xml version="1.0" encoding="utf-8"?> <SOAP-ENV:Envelope xmlns:soap-env=" envelope"> <SOAP-ENV:Body> <DSIMSG VERSION=" "> <CTLBLOCK> <UNIQUE_ID>a9ae6c91-1d1b-11d2-b21a-00c04fa357fa</UNIQUE_ID> <REQTYPE>CLAIMS DATA</REQTYPE> <USERID>JOHN DOE</USERID> 163

180 Chapter 2 Using the Internet Document Server </CTLBLOCK> <MSGVARS> <VAR NAME="CONFIG">FFIC</VAR> <VAR NAME="KEY1">AUTO BI/UM</VAR> <VAR NAME="KEY2">CONTACT</VAR> <VAR NAME="KEYID"> </VAR> <VAR NAME="RUNDATE"> </VAR> <VAR NAME="USERID">JOHN DOE</VAR> </MSGVARS> </DSIMSG> </SOAP-ENV:Body> </SOAP-ENV:Envelope> With attachments Here is an example of a client request message in XML format which does include attachments: Content-Type: multipart/related; boundary=idsmessage --IDSMessage Content-Type: text/xml Content-Transfer-Encoding: 8bit <?xml version="1.0" encoding="utf-8"?> <SOAP-ENV:Envelope xmlns:soap-env=" envelope"> <SOAP-ENV:Body> <DSIMSG VERSION=" "> <CTLBLOCK> <UNIQUE_ID>a9ae6c91-1d1b-11d2-b21a-00c04fa357fa</UNIQUE_ID> <REQTYPE>CLAIMS DATA</REQTYPE> <USERID>JOHN DOE</USERID> <ATTACHMENT> <DELIMITER>CLAIMS-DATA</DELIMITER> </ATTACHMENT> </CTLBLOCK> <MSGVARS> <VAR NAME="CONFIG">FFIC</VAR> <VAR NAME="KEY1">AUTO BI/UM</VAR> <VAR NAME="KEY2">CONTACT</VAR> <VAR NAME="KEYID"> </VAR> <VAR NAME="RUNDATE"> </VAR> <VAR NAME="USERID">JOHN DOE</VAR> </MSGVARS> </DSIMSG> </SOAP-ENV:Body> </SOAP-ENV:Envelope> --IDSMessage Content-Type: application/ids Content-Transfer-Encoding: 7bit Content-ID: CLAIMS-DATA { data in a structured COBOL record appears here } --IDSMessage-- 164

181 Using the XML Messaging System Please note: The client initiates the request and generates the UNIQUE_ID. The server echoes back the same unique identifier in the response. The MSGVAR structure in this example provides the key fields necessary to access the claims data and create the exported data to be delivered to the client. A server application can receive more variables than are needed and should be set up to ignore those not applicable. The ATTACHMENT structure provides the delimiter element, which is used to specify the delimiting string pattern that frames a data record passed as an attached file as a part of the message. With multiple attachments Here is an example of a client request message in XML format which has multiple attachments: Content-Type: multipart/related; boundary=idsmessage (Please note that this new line must be included.) --IDSMessage Content-Type: text/xml Content-Transfer-Encoding: 8bit (Please note that this new line must be included.) <?xml version="1.0" encoding="utf-8"?> <SOAP-ENV:Envelope xmlns:soap-env=" envelope"> <SOAP-ENV:Body> <DSIMSG VERSION=" "> <CTLBLOCK> <UNIQUE_ID>a9ae6c91-1d1b-11d2-b21a-00c04fa357fa</UNIQUE_ID> <REQTYPE>CLAIMS DATA</REQTYPE> <USERID>JOHN DOE</USERID> <ATTACHMENT> <DELIMITER>CLAIMS-DATA</DELIMITER> </ATTACHMENT> <ATTACHMENT TYPE="BINARY"> <DELIMITER>CLAIMS-BINARY</DELIMITER> </ATTACHMENT> </CTLBLOCK> <MSGVARS> <VAR NAME="CONFIG">FFIC</VAR> <VAR NAME="KEY1">AUTO BI/UM</VAR> <VAR NAME="KEY2">CONTACT</VAR> <VAR NAME="KEYID"> </VAR> <VAR NAME="RUNDATE"> </VAR> <VAR NAME="USERID">JOHN DOE</VAR> </MSGVARS> </DSIMSG> </SOAP-ENV:Body> </SOAP-ENV:Envelope> (Please note that this new line must be included.) --IDSMessage Content-Type: application/ids Content-Transfer-Encoding: 7bit Content-ID: CLAIMS-DATA { data in a structured COBOL record appears here } 165

182 Chapter 2 Using the Internet Document Server --IDSMessage Content-Type: application/ids Content-Transfer-Encoding: base64 Content-ID: CLAIMS-BINARY (Please note that this new line must be included.) { data in a base64 encoding form appears here } --IDSMessage-- Server XML Response Messages Here is an example of the XML response message from the server: Content-Type: multipart/related; boundary=idsmessage (Please note that this new line must be included.) --IDSMessage Content-Type: text/xml Content-Transfer-Encoding: 8bit (Please note that this new line must be included.) <?xml version="1.0" encoding="utf-8"?> <SOAP-ENV:Envelope xmlns:soap-env=" envelope"> <SOAP-ENV:Body> <DSIMSG> <CTLBLOCK> <UNIQUE_ID>a9ae6c91-1d1b-11d2-b21a-00c04fa357fa</UNIQUE_ID> <REQTYPE>CLAIMS DATA</REQTYPE> <USERID>JOHN DOE</USERID> <ATTACHMENT> <DELIMITER>DOCC-XML</DELIMITER> </ATTACHMENT> </CTLBLOCK> <MSGVARS> <VAR NAME="RESULTS">SUCCESS</VAR> </MSGVARS> </DSIMSG> </SOAP-ENV:Body> </SOAP-ENV:Envelope> (Please note that this new line must be included.) --IDSMessage Content-Type: application/ids Content-Transfer-Encoding: 7bit Content-ID: DOCC-XML (Please note that this new line must be included.) <?xml version="1.0" encoding="utf-8"?> <DOCUMENT TYPE="RPWIP" VERSION="10.1"> <DOCSET> <GROUP NAME1="AUTO BI/UM" NAME2="CONTACT"> <FORM NAME="DEC PAGE"> <DESCRIPTION>Common Policy Declarations</DESCRIPTION> <RECIPIENT NAME="AGENT" COPYCOUNT="1"/> <RECIPIENT NAME="HOME OFFICE" COPYCOUNT="1"/> <RECIPIENT NAME="INSURED" COPYCOUNT="1"/> <SHEET> 166

183 Using the XML Messaging System <PAGE> <SECTION NAME="CPDEC~1"> <FIELD NAME="DELIVERY">DELIVERY NOTE</FIELD> <FIELD NAME="ON_ARRIVAL">ON ARRIVAL NOTE</FIELD> <FIELD NAME="CLAIMANT_NAME">SUSAN FRIEDEN</FIELD> <FIELD NAME="CLAIMANT_ADDRESS">ADDRESS HERE</FIELD> <FIELD NAME="POLICY_NUMBER">POLICY NUM 22222</FIELD> <FIELD NAME="SALUTATION">SALUTATION FIELD</FIELD> <FIELD NAME="INSURING_COMPANY">INSURING COMPANY N</FIELD> <FIELD NAME="TAG_LINE">TAG LINE FOR THE IN</FIELD> </SECTION> </PAGE> </SHEET> </FORM> </GROUP> </DOCSET> </DOCUMENT> --IDSMessage-- Please note: The client generated UNIQUE_ID is echoed back in the response. The ATTACHMENT structure specifies the delimiter for the embedded XML export file. In this example, the file is called DOCC-XML. The MSGVAR structure specifies the returned attachment variables, which include the results from the requested operation, returned in the variable named RESULTS. In this example, the result is SUCCESS. If there is an error, the result is an error code and, typically, no XML export data is included. If you are transmitting messages between dissimilar platforms, say an EBCIDIC platform such as an MVS-based server application which is submitting messages to an ASCII platform such as a PC, you must set the message format attribute in the message descriptor to string (text). This lets the MQ Series channel sender/receiver perform the EBCDIC-to-ASCII translation. Likewise, the QSRLIB layer of the Oracle Insurance system sets the request message format to string so the ASCII-to- EBCDIC translation takes place. As a result, client and server applications are able to see the message data in the proper format and do not have to perform the translation themselves. USING XML SOAP OUTSIDE OF MESSAGING SYSTEMS Using the DSIGetSOAPMessage and DSIGetSOAPMessageSize functions, you can code IDS client applications with common APIs using XML DOM of the IDS SOAP XML message. See the SDK Reference for more information on these functions. These APIs let client applications access the DSI XML message as a buffer in memory. Access to IDS XML message is provided as a buffer in memory because of possible issues with the version of the DOM or XML parser the client application may be using. Keep in mind the XML returned is a byte array using UTF-8 encoding. 167

184 Chapter 2 Using the Internet Document Server NOTE:The GetSOAPMessage is also available for the COM and Java APIs. (DSICO, IDSASP and DSIJava). 168

185 Connecting to an SQL Database CONNECTING TO AN SQL DATABASE IDSSQL is a set of ActiveX DSOs (IDSSQL.DLL and IDSSQLRL.DLL) which you can use as a Microsoft ActiveX Data Objects (ADO) programming model. These DSOs let you send SQL commands and receive records back from an SQL database. Instead of communicating directly with the database as an object, the IDSSQL DLLs go through an IDS rule. This illustration shows how it works: Application (Could be a Visual Basic or ASP application) IDSSQL.DLL DSI API IDS IDSSQLRL.DLL SQL Database 169

186 Chapter 2 Using the Internet Document Server Differences between Microsoft s ADO and IDSSQL Keep in mind these differences between ADO and IDSSQL: IDSSQL does not implement all features of Microsoft s ADO and record set. The connection between IDSSQL and the SQL database automatically opens and closes on each execute. The new record insert into the database is made using the SQL insert command instead of the insert and update method in the ADO record set. Errors are returned through IDS record sets. So it good to have a record set even if the SQL command did not return any records. Setting up IDSSQL Follow these steps to set up IDSSQL: 1 Add these options to your DOCSERV.INI file: < ReqType:IDSSQL > Function = atcw32->atcloadattachment Function = DSICoRul->Invoke,IDSSQLRL.IDS->SQL Function = atcw32->atcunloadattachment 2 Set up the ODBC Data source name. IDSSQL CLASSES Here are the properties and methods for IDSSQL.ADO and IDSSQL.IDSRC: IDSSQL.ADO Here are the properties and methods for IDSSQL.ADO: Properties Property Description AbsolutePage The ordinal position of the current page. The default is zero (0). If zero (0), all records queried by the SQLcommand are returned. If set to something other than zero, only those records on the page are returned. The number of records on the page are determined by the PageSize property. CommandTimeOut DSN The number of seconds to wait when executing a command before terminating the attempt and returning an error. If you set this property to zero, ADO will simply wait until the execution is complete. The default is 30 seconds. The ODBC data source name or the information used to create a connection to data source. PageSize The number of records on a page. The default is

187 Connecting to an SQL Database Property Password SQLCommand User Description The password used to connect to the database. A password is required if the DSN connection is not a trusted SQL Server connection. The SQL statement. The user ID used to connect to the database. The user ID is required if the DSN connection is not a trusted SQL Server connection. Methods Method Execute Description Process SQL command. Returns the record set requested by SQLCommand. IDSSQL.IDSRC Here are the properties and methods for IDSSQL.IDSRC, the IDS record set. Properties Property BOF EOF Errors Field Fields RecordCount Description True if the current record position is before the first record. True if the current record position is after the last record. Errors collection. Each field of the current record. Fields information collection. The number of records currently in the record set. Methods Method MoveFirst MoveLast MoveNext MovePrevious Description Move to the first record in the record set and make that the current record. Move to the last record in the record set and make that the current record. Move to the next record in the record set and make that the current record. Move to the previous record in the record set and makes that the current record. EXAMPLE SCRIPT Here is an example in ASP: Language=VBScript %> <HTML> <HEAD> 171

188 Chapter 2 Using the Internet Document Server <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0"> </HEAD> <BODY> <% CrLf = Chr(13) & Chr(10) set sql = Server.CreateObject("idssql.ado") 'Create IDS ADO Object set rc = Server.CreateObject("idssql.idsrc") 'Create IDS record set ShowAllActivateAccount() Sub ShowAllActivateAccount() sql.dsn = "COB_TEST"'ODBC Data source name sql.sqlcommand = "Select * from subscriberdata where ebppstatus = 'A'" Set rc = sql.execute() Execute Command If rc.errors.count <> 0 Then Check for error Response.write "Error source = " & rc.errors(1).source & "<BR>" Response.write "Error Description = " & rc.errors(1).description & "<BR>" Else %> <TABLE BORDER=1> <TR> <TH>RC#</TH> <TH>Account#</TH> <TH>Name</TH> </TR> <% Loop through all the return records and display the fields For i = 1 To rc.recordcount Response.write "<TR>" & Crlf Response.write "<TD>" & i & "</TD>" Response.Write "<TD>" & rc.field("accountnumber") & "</TD>" Response.Write "<TD>" & rc.field("subscriberfirstname") & " " Response.Write rc.field("subscribermiddlename") & " " Response.Write rc.field("subscriberlastname") & " " Response.Write "</TD>" & Crlf Response.write "</TR>" & Crlf rc.movenext Move to next record Next %> </TABLE> <% End If End Sub %> <P> </P> </BODY> </HTML> Fields Here is an example of how you can access the name and data in the field of each record: 172

189 Connecting to an SQL Database For i = 1 To rc.recordcount Loop through all return record set Response.Write "=========" Response.Write "Record " & i Response.Write "=========" For j = 1 To rc.fields.count Loop through all the fields in that record Response.Write rc.fields(j) & ":" Display field name Response.Write rc.field(j) Display data in the field Next Next You can access the data in the field using the name or index, such as: Rc.Field(1) or Rc.Field( SubscriberID ) 173

190 Chapter 2 Using the Internet Document Server USING THE THIN CLIENT FORMS PUBLISHER The Thin Client Forms Publisher lets web clients enter a user ID, password, and other information at login. Depending on how you set it up, IDS then returns a list of group1/group2 combinations for the form set. The web client can then choose a group1/group2 combination and submit it to IDS along with an effective date. The DPRSetConfig rule sets the effective date for use with Library Manager. IDS then returns a new XML form set (through the result queue) based on the group1/ group2 submittal. The Thin Client Forms Publisher loads the XML form set returned by IDS and generates an HTML tree view. The web client can then select the forms, images, recipients, and print options and submit a request to print the form set. Once submitted, the Thin Client Forms Publisher generates a new XML form set and sends it to IDS. IDS retrieves the new XML form set, converts it into a FAP form set and prints it. IDS then sends the final output file to the Thin Client Forms Publisher through the queues. The Thin Client Forms Publisher supports these print options: PDF, XML, PCL, AFP, MET, and HTML. Look at these examples for more information: Example /formpub /formpubnt Uses dp018.dll which you can use on Windows 2000 without IDS DLL files idsasp.dll for standard messaging and dp018.dll for XML processing These virtual directories are included in the IDS sample resources. Use FORMAKER for the user ID and password when viewing the examples. 174

191 Pausing IDS PAUSING IDS When necessary, you can pause IDS processing and then restart it. For instance, suppose you are running a system with multiple instances of IDS, each running its own Documanage Bridge, with each Documanage Bridge logging into a separate Documanage system. In this scenario, you want IDS to become passive (stop processing requests) when the Documanage system becomes unavailable and to become active again when the Documanage system becomes available again. This fail-over strategy avoids situations where IDS is processing requests which are failing because the bridge is having a problem with Documanage server. To handle this scenario, you use a C or Java DSI API. This API lets a rule request that IDS go into pause mode. While in pause mode IDS will not receive requests from a queue and will execute only one request type PAUSE. The frequency of this request is defined using this option in the configuration file: <section name="businesslogicprocessor">... <section name="messaging"> <section name="timed"> <entry name="pausecheckintervalseconds">10</entry> </section> The entry PauseCheckIntervalSeconds is the interval that IDS will send PAUSE requests to itself when it is paused. The Documanage Bridge calls the API and places IDS in pause mode when Documanage server becomes unavailable. The rule registered on the PAUSE request type checks to see if the Documanage server is available calls an API to resume the IDS operation. You use these DSI APIs: DSIQueryStatus This API returns DSI specific status options via DSISTATUS_* flags. Use it to determine if IDS is in a paused mode. Here is a list of the available flags: Flag DSISTATUS_PAUSE DSISTATUS_STOP DSISTATUS_RESTART DSISTATUS_RESUME Description Pause the server Stop the server and exit the process Restart the server Resume the server after a pause NOTE:Setting the status to DSISTATUS_STOP is non-recoverable action. Once the server exits, no other actions are possible. Syntax DSIQueryStatus() 175

192 Chapter 2 Using the Internet Document Server Parameter hdsi ploptions Description handle to instance returned by DSIInitInstance pointer to a long for returning the DSISTATUS_* values. Returns DSIERR_SUCCESS or an error code. Errors Message DSIERR_INVPARM DSIERR_INTERNAL Description Invalid DSI instance handle or ploptions is NULL Internal error Example Here is an example: long lopt; if ( DSIQueryStatus(hInstance,&lOpt)!= DSIERR_SUCCESS ) {... display error message } if ( lopt & DSISTATUS_PAUSE ) { printf("server is currently paused\n"); } if ( lopt & DSISTATUS_STOP ) { printf("server is currently stopping\n"); } DSISetStatus This API sets DSI specific status options via DSISTATUS_* flags. Use it to pause IDS. Here is a list of the available flags: Flag DSISTATUS_PAUSE DSISTATUS_STOP DSISTATUS_RESTART DSISTATUS_RESUME Description Pause the server Stop the server and exit the process Restart the server Resume the server after a pause NOTE:Setting the status to DSISTATUS_STOP is non-recoverable action. Once the server exits, no other actions are possible. Syntax DSISetStatus() 176

193 Pausing IDS Parameter hdsi ploptions Description handle to instance returned by DSIInitInstance pointer to a long for returning the DSISTATUS_* values. Return values DSIERR_SUCCESS or an error code. Errors Message DSIERR_INVPARM DSIERR_INTERNAL Description Invalid DSI instance handle Internal error Example Here is an example: if ( DSISetStatus(hInstance,DSISTATUS_PAUSE)!= DSIERR_SUCCESS ) {... display error message } printf("server is currently paused\n") When running a Java rule, the RequestState parameter has methods for pausing and resuming IDS as well as to check to see if it is currently paused. Method isrequestprocessorpaused pauserequestprocessor resumerequestprocessor Description Returns true if IDS is currently paused, false otherwise. Tells IDS to pause and stop processing requests from queues and so on. Tells IDS to resume processing requests from queues and so on. 177

194 Chapter 2 Using the Internet Document Server EXECUTING REQUEST TYPES AT RUN TIME Example configuration file Example data file Example dynamic.htm page IDS lets you execute request types composed at run time. Client programs can specify their own XML configuration file with a set of request types to process. Multiple client programs can have request types with the same name but with a different set of rules to run. Request types no longer have to be present in the IDS configuration file. To execute request types at run time, specify an attachment variable named DYNAMIC- CONFIGURATION-FILE with a full path and file name for a configuration file accessible to IDS. Here is an example: <?xml version="1.0" encoding="utf-8"?> <configuration> <section name="reqtype:poc-runrp-htm"> <entry name="function">atcw32->atcloadattachment</entry> <entry name="function">atcw32->atcunloadattachment</entry> <entry name="function">atcw32->atcsendfile, RPOUTPUT,INSURED,BINARY</entry> <entry name="function">atcw32->atcreceivefile, EXTRACTFILE,EXTRFILE,c:\docserv\data\*.xml,KEEP</entry> <entry name="function">dprw32->dprsetconfig</entry> <entry name="function">rpdw32->rpdcheckrprun</entry> <entry name="function">rpdw32->rpdcreatejob</entry> <entry name="function">rpdw32->rpdprocessjob</entry> </section> </configuration> <?xml version="1.0" encoding="utf-8"?> <message> <data> <var name="config">poc</var> <var name="batchfiles">3</var> <var name="inioptions">1</var> <var name="inioptions1.group">printer</var> <var name="inioptions1.option">prttype</var> <var name="inioptions1.value">htm</var> <var name="outputtype">htm</var> <var name="printbatches">3</var> <var name="showerrors">yes</var> <var name="reqtype">poc-runrp-htm</var> <var name="dynamic-configuration-file">c:\docserv\runrp-poc-htmconfig.xml</var> </data> <attachments> <file name="extractfile">c:\msgclient\extract\poc.xml</file> </attachments> </message> <html> <head> <h2>dynamic config test</h2> <body> <form action="dynamic2.asp" enctype="multipart/form-data" method="post"> <table> <tr> <td>*enter an xml message with name/value pairs to process</td> 178

195 Executing Request Types at Run Time <td><a href="data.xml">example</a></td><td><input name="xmlmessage" type="file"/></td> </tr> </table> <input type="submit" name="" value="submit"> </form> Example dynamic.asp page <% set parser = server.createobject("idsasp.dsi") parser.parsedata() message = parser.getbuffer("xml-message") '***process the message file processmessagefile message parser.showatt = 1 parser.processrq function processmessagefile(buffer) set xml = Server.CreateObject("MSXML2.DOMDocument.4.0") xml.loadxml(buffer) set msgvars = xml.selectnodes("message/data/var") for each var in msgvars name = var.getattribute("name") value = var.text parser.addreq name, value next set Attachments = xml.selectnodes("message/attachments/file") for each attach in Attachments name = attach.getattribute("name") value = attach.text parser.sendfile name, value next %> end function 179

196 Chapter 2 Using the Internet Document Server PUBLISHING YOUR FORMS ON THE WEB The system provides tools you can use to create one HTML file and a number of PDF files (one per FAP file). You can then publish these HTML and PDF files on your web server. The HTML file lists all of the company, line of business (LOB), form, and section combinations. This file has links to PDF files which are created for each image. To publish your form library, you have to put these HTML and PDF files in a web server contents directory. Once you have the HTML and PDF files in a contents directory, you can use your browser to open the HTML page and view the images. NOTE:The one PDF file per image concept does not work well in an environment which has a lot of small images. This concept works better with full page FAP files. Use the following tools to publish your forms on the web: FORMPUB - This program provides a graphical interface from which you can run the FD2HTW32 and PTFMDW32 utilities. FD2HTW32 - This utility converts a FORM.DAT file into an HTML page. You can run this utility as a stand-alone program or from the FORMPUB tool. PTFMDW32 - This utility creates a PDF file for each FAP file defined in the FORM.DAT file. You can run this utility as a stand-alone program or from the FORMPUB tool. FAP2HTML - This utility lets you convert FAP files into HTML format for use with ipps as data entry screens. NOTE:For more information about these utilities, see the Utilities Reference. 180

197 Formatting Text with XML Markup FORMATTING TEXT WITH XML MARKUP ipps and other Documaker clients can format multiline text fields in XML files. The XML import loader and export unloader, which are the same for Documaker and IDS, support these formatting attributes: Italic: <I> Bold: <B> Underline: <U> Font <FONT> Attributes: SIZE=99 (point size) FACE=(font family name) COLOR=(hex color value, such as #FFFFFF) Paragraph: <P> or <BR> Attributes: ALIGN="CENTER" or "RIGHT" If you omit the alignment, the system left justifies the text. Empty paragraphs use a <BR> element instead of <P>. Here is an example multiline field input or output XML: <P ALIGHN="CENTER"> <FONT SIZE="15" FACE="Universal"><B>This is bold 15 points size font</b></font> <FONT SIZE="10" FACE="Universal"><I><U>This is italic size 10 point font with underline</u></i></font> </P> If the font does not exist, the font locator looks for the best match based on font family name, point size, style, and weight. If you omit the font information from the import file, the system uses the default font for the text area. 181

198 Chapter 2 Using the Internet Document Server ENCRYPTING AND DECRYPTING DATA FILES IDS includes a utility you can use to encrypt and decrypt data files. The program is a Java class in the DocuCorpUtil.jar library. To run it, enter a command similar to the one shown here: java -cp DocuCorpUtil.jar com.docucorp.util.datacrypt Here is a summary of the parameters: Parameter Description -i Treat the text argument as a file name instead of text to encrypt/decrypt. text The text to encrypt/unencrypt or the name of a file if the -i parameter is included. The input file is overwritten with the new information. -u Include this parameter if you want to decrypt the text or file instead of encrypting it. Encrypting is the default behavior for this utility. If you omit all of the parameters, a usage message appears. NOTE:For more information about this utility, see the Utilities Reference. 182

199 Using Multiple Attachment Values with the Same Name USING MULTIPLE ATTACHMENT VALUES WITH THE SAME NAME IDSASP and IDSJSP let you send and receive messages with multiple attachment variables which have the same name. To enable support for multiple attachment variables, set the ProcessAll property to True at the beginning of an ASP or JSP page See the example pages below. In ASP you can simply traverse through the Request and Result collections as before to retrieve all entries for a message. In JSP you can use the getentries() API to return a list of MsgVarEntry objects. Here is an example ASP page: <% set dsi = server.createobject("idsasp.dsi") dsi.processall = True dsi.addreq "USERID", "DOCUCORP" dsi.addreq "USERID", "FORMAKER" dsi.addreq "USERID", "DEMO1" dsi.addreq "USERID", "DEMO" dsi.addreq "PASSWORD", "P1" dsi.addreq "PASSWORD", "P2" dsi.addreq "REQTYPE", "TEST_MVARS" For I = 1 To dsi.request.count Response.Write "Request " & I & ": " Response.Write dsi.request(i).name & " = " & dsi.request(i).value Response.Write "<BR>" Next dsi.processrq For I = 1 To dsi.result.count Response.Write "Result " & I & ": " Response.Write dsi.result(i).name & " = " & dsi.result(i).value Response.Write "<BR>" Next %> 183

200 Chapter 2 Using the Internet Document Server Here is an example JSP page: page language="java" import="java.util.*, java.net.*, java.io.*, com.docucorp.messaging.data.*" %> <jsp:usebean id='dsi' scope='page' class='com.docucorp.ids.jsp.dsi'/ > <% int _OUTPUTQUEUE = 1; int _INPUTQUEUE = 2; List entries = null; dsi.settimeout(30000); //dsi.debugon(response); dsi.processall = true; dsi.addrequest("userid", "DOCUCORP"); dsi.addrequest("userid", "FORMAKER"); dsi.addrequest("userid", "DEMO1"); dsi.addrequest("userid", "DEMO"); dsi.addrequest("password", "P1"); dsi.addrequest("password", "P2"); dsi.addrequest("reqtype", "TEST_MVARS"); entries = dsi.getentries(_outputqueue); for (int I =0; I <entries.size(); i++){ String k = MsgVarEntry.getName(entries, i); String v = MsgVarEntry.getValue(entries, i); out.println("request: " + k + "=" + v + "<br>"); } dsi.processrequest(); entries = dsi.getentries(_inputqueue); for (int I =0; I <entries.size(); i++){ String k = MsgVarEntry.getName(entries, i); String v = MsgVarEntry.getValue(entries, i); } out.println("response: " + k + "=" + v + "<br>"); %> 184

201 Using Multiple Attachment Values with the Same Name getentries Use this API to return a list of MsgVarEntry objects. Each MsgVarEntry object contains a name and value property. Parameters Parameter Description queue An integer value that indicates which queue the entries should be returned for: 1 = Output queue, 2 = Input queue. Returns A list of MsgVarEntry objects (see the JSP example page). 185

202 Chapter 2 Using the Internet Document Server CONVERTING XML FILES USING A TEMPLATE You can use the XsltTransformRule rule to transform input into the desired output based on an xsl template. For instance, you can transform an XML extract file located using the EXTRFILE input attachment variable into a new output file or a set of XML files located in the path specified by the XMLPATH input attachment variable, appending the results from each one to the end of the file. You can also transform a single XML file located by the XMLFILE or SOURCE input attachment variables. This rule can also transform the result XML message in the queue. The output depends on the xsl template provided. This rule takes an argument of name RUNMSG which can have a value of 1-4 to specify whether the rule should be run in the INIT (1), TERM (2), RUNF (3), or RUNR (4) message. The default is RUNF (3) message if no RUNMSG argument is specified. This is useful when the rule that outputs the XML source does not run in the default RUNF message. This rule also supports transformations with XSL parameters. Variable XMLPATH EXTRFILE XMLFILE XSLTFILE PRINTPATH OUTFILE DOCTYPE XSLPARAMETERS OUTPUTVAR Description (Optional) Specifies a path for multiple XML source files to be processed. The rule appends the transformation output for each source file to the end of the output file. (Optional) Specifies the full path and name of the XML extract file to be transformed. If this variable is present, the rule transforms the extract file and replaces the EXTRFILE input attachment variable with the value of the new output file. (Optional) Specifies the full path and name of an XML file to use as the source of the transformation. Specifies the full path and name of the xsl template to use for the transformation. (Optional) Specifies the path where the output file will be written. (Optional) Specifies the output file name. If this variable is missing the rule generates a unique file name for the output file. (Optional) Specifies the extension and file type of the output file. The default is.dat. (Optional) An XML rowset which contains the name/value pairs for parameters to use in the xsl transformation. (Optional) Defines the name of an additional attachment variable that holds the full path and name of the output file. This is useful when running other rules after this rule that expect an attachment variable with a name other than the default of XSLOUTPUT. 186

203 Converting XML Files Using a Template Variable SOURCE Description (Optional) Defines the name of an attachment variable in the output message that contains the full path and name of the XML source to be used for the transformation. This is useful when running other rules prior to this rule which might output the XML source that needs to be transformed to a variable other than the expected variables (XMLFILE or EXTRFILE). In addition, you can use this variable to indicate the source for the transformation should be the output XML message in the result queue instead of an XML file set SOURCE equal to the value of RESULT in this case. Here is an example of a request message: <MSGVARS> <VAR NAME="doctype">htm</VAR> <VAR NAME="REQTYPE">TRANSFORM2</VAR> <VAR NAME="SOURCE">RESULT</VAR> <VAR NAME="XSLTFILE">X:\\XSL\transform1.xsl</VAR> <VAR NAME="XVALUE">2</VAR> <ROWSET NAME="XSLPARAMETERS"> <ROW NUM="1"> <VAR NAME="y">2</VAR> <VAR NAME="x">LOOKUPVAR.XVALUE</VAR> </ROW> </ROWSET> </MSGVARS> In addition, each row of parameters for a transformation can contain a value of the format: LOOKUPVAR.ATTACHVARNAME Where ATTACHVARNAME is the name of an attachment variable in the output message. The rule then retrieves the value for the ATTACHVARNAME variable and uses it as the value for the parameter in the transformation. This is useful when you do not know the value of a parameter until run-time. Here are example request types for the DOCSERV.INI file used in IDS 1.8: [REQTYPE:TRANSFORM] function = atcw32->atclogtransaction function = atcw32->atcloadattachment function = atcw32->atcunloadattachment function = dsijrule->javarunrule,;com/docucorp/ids/rules/ XsltTransformRule;XSLTTRANSFORMER;transaction;transform; function = dprw32->dprsetconfig function = atcw32->atcsendfile,xsloutput,xsloutput,binary function = irlw32->irlcopyattachment Here is a sample JSP page: page language="java" import="java.util., java.net., java.io." %> <jsp:usebean id='dsi' scope='page' class='com.docucorp.ids.jsp.dsimsg'/> 187

204 Chapter 2 Using the Internet Document Server <% dsi.settimeout(30000); dsi.debug_on(response); dsi.addrequest("reqtype", "TRANSFORM"); dsi.addrequest("xmlfile", "X:\\input\\data.xml"); dsi.addrequest("xsltfile", "X:\\XSL\\transform1.xsl"); dsi.addrequest("doctype", "htm"); String record = "XSLPARAMETERS"; String rec = dsi.addattachrec(record); if (rec!= null){ } dsi.addtoattachrec(rec, "x", "1"); dsi.addtoattachrec(rec, "y", "1"); dsi.processrequest(); byte buf[] = dsi.receivefileasbuffer("xsloutput"); if (buf!= null){ out.println(new String(buf)); } %> Here is a sample ASP page: Language=VBScript %> <% Set DSI = server.createobject("idsasp.dsi") DSI.clearReq DSI.WaitTime = 250 DSI.Timeout = DSI.ShowAtt = 1 ' Polling interval DSI.AddReq "REQTYPE", "TRANSFORM" DSI.AddReq "XMLFILE", "X:\\input\\data.xml" DSI.AddReq "XSLTFILE", "X:\\XSL\transform1.xsl" DSI.AddReq "doctype", "htm" record = DSI.AddAttachRec("XSLPARAMETERS") DSI.AddToAttachRec record, "x", "1" DSI.AddToAttachRec record, "y", "2" 'On Error Resume Next DSI.ProcessRq 'If Err <> 0 then 'Err.Clear 188

205 Converting XML Files Using a Template 'End if result = DSI.Result("RESULTS").Value Set DSI = Nothing Response.Write("result: " & result & "<br>") Response.End %> 189

206 Chapter 2 Using the Internet Document Server CUSTOMIZING YOUR SYSTEM IDS includes several bridges and example applications. These applications typically include windows or dialogs based on HTML and either JSP or ASP. Some dialogs present query result sets for subsequent user selection. The result sets are typically returned as attachment variables, accessible via DSI (or DSICo) API calls. Custom rules and request types can create other query results, and custom HTML dialogs and scripts can implement custom user dialog presentations of the information. IDS version 1.7 enhanced the internal message format to an XML format based on evolving SOAP standards. You can use this XML format and bypass the DSI API layer, or you can continue to use the DSI APIs. To help you build alternative dialogs to replace the standard dialogs in the bridges and applications and create new dialogs for other custom applications, the system returns query result sets as structured data in XML format. The system creates elements inside the <DSIMSG> structure to contain the results of a search as descendants <ROWSET> tag. Each record (ROW) in the result set is stored in a <ROW> XML element, as a child of the <ROWSET> element. Please see the following example. For many situations, you can use a non-hierarchical (single level) SQL-like ROW to represent hierarchically structured data by flattening the columns into a single ROW. If, however, the resulting XML needs the multilevel hierarchy, send the XML as an attachment. For example, if a result set represented a Documaker form set (a list of available forms and images), this could be returned as an Oracle Insurance standard XML file attached to the message. You can use DSI C APIs, Java, and COM to manipulate the XML result set. Java and VB return the XML from the <ROWSET> element as a string to be loaded into a DOM object by the client. The main reason the row set is returned as XML string or buffer and not as a DOM object is the versioning of DOM objects and XML parsers IDS does not know what parser and what DOM object will be used by the client application. The C APIs will allow the calling application to get first/next values from a ROWSET, including the name, instance number, data value, and so on. The existing APIs that access the attachment variables by their old concatenated names still work for backward compatibility, so you do not have to change existing client code unless you want to take advantage of the newer methods. The results of SSS (server statistics request) are shown in the example below in SOAP- XML format, using both the original and the newer XML message layout for the result set. The number of rows in the LIBRARIES row set is reduced to two for a smaller sample. Here is an example of the original XML layout: <?xml version="1.0" encoding="utf-8"?> <SOAP-ENV:Envelope xmlns:soap-env=" envelope"> <SOAP-ENV:Body> <DSIMSG VERSION=" "> <CTLBLOCK> <UNIQUE_ID>4C6482AC643F4B91A9EA347977B8E186</UNIQUE_ID> <REQTYPE>SSS</REQTYPE> <USERID>DSICoTB</USERID> <RESULTQMGR>vaf.atl3nt03</RESULTQMGR> 190

207 Customizing Your System </CTLBLOCK> <MSGVARS> <VAR NAME="ALLOCCOUNT">5750</VAR> <VAR NAME="ERRORCOUNT">1</VAR> <VAR NAME="FREECOUNT">2828</VAR> <VAR NAME="LASTRESTART">Tue Jul 02 09:49: </VAR> <VAR NAME="LIBRARIES">2</VAR> <VAR NAME="LIBRARIES1.DATE">Jul </VAR> <VAR NAME="LIBRARIES1.NAME">ATC</VAR> <VAR NAME="LIBRARIES1.TIME">07:40:37</VAR> <VAR NAME="LIBRARIES1.VERSION"> </VAR> <VAR NAME="LIBRARIES2.DATE">Jul </VAR> <VAR NAME="LIBRARIES2.NAME">DCB</VAR> <VAR NAME="LIBRARIES2.TIME">07:35:16</VAR> <VAR NAME="LIBRARIES2.VERSION"> </VAR> <VAR NAME="RESTARTCOUNT">1</VAR> <VAR NAME="RESULTS">SUCCESS</VAR> <VAR NAME="SERVERTIMESPENT">0.015</VAR> <VAR NAME="SUCCESSCOUNT">1</VAR> <VAR NAME="UPTIME">Tue Jul 02 09:48: </VAR> </MSGVARS> </DSIMSG> </SOAP-ENV:Body> </SOAP-ENV:Envelope> Here is an example of the newer XML layout: <?xml version="1.0" encoding="utf-8"?> <SOAP-ENV:Envelope xmlns:soap-env=" envelope"> <SOAP-ENV:Body> <DSIMSG VERSION=" "> <CTLBLOCK> <UNIQUE_ID>4C6482AC643F4B91A9EA347977B8E186</UNIQUE_ID> <REQTYPE>SSS</REQTYPE> <USERID>DSICoTB</USERID> <RESULTQMGR>vaf.atl3nt03</RESULTQMGR> </CTLBLOCK> <MSGVARS> <VAR NAME="ALLOCCOUNT">5750</VAR> <VAR NAME="ERRORCOUNT">1</VAR> <VAR NAME="FREECOUNT">2828</VAR> <VAR NAME="LASTRESTART">Tue Jul 02 09:49: </VAR> <ROWSET NAME="LIBRARIES"> <ROW NUM="1"> <VAR NAME="DATE">Jul </VAR> <VAR NAME="NAME">ATC</VAR> <VAR NAME="TIME">07:40:37</VAR> <VAR NAME="VERSION"> </VAR> </ROW> <ROW NUM="2"> <VAR NAME="DATE">Jul </VAR> <VAR NAME="NAME">DCB</VAR> <VAR NAME="TIME">07:35:16</VAR> <VAR NAME="VERSION"> </VAR> </ROW> </ROWSET> 191

208 Chapter 2 Using the Internet Document Server <VAR NAME="RESTARTCOUNT">1</VAR> <VAR NAME="RESULTS">SUCCESS</VAR> <VAR NAME="SERVERTIMESPENT">0.015</VAR> <VAR NAME="SUCCESSCOUNT">1</VAR> <VAR NAME="UPTIME">Tue Jul 02 09:48: </VAR> </MSGVARS> </DSIMSG> </SOAP-ENV:Body> </SOAP-ENV:Envelope> The sample below corresponds to the row set shown above in the XML layout: <?xml version="1.0" encoding="utf-8"?> <ROWSET NAME="LIBRARIES"> <ROW NUM="1"> <VAR NAME="DATE">Jul </VAR> <VAR NAME="NAME">ATC</VAR> <VAR NAME="TIME">07:40:37</VAR> <VAR NAME="VERSION"> </VAR> </ROW> <ROW NUM="2"> <VAR NAME="DATE">Jul </VAR> <VAR NAME="NAME">DCB</VAR> <VAR NAME="TIME">07:35:16</VAR> <VAR NAME="VERSION"> </VAR> </ROW> </ROWSET> You can use these API functions to support row sets: Function DSIRowset2XML DSIRowset2XMLSize Description Use this rule to get a row set back as XML in memory. Use this rule to get a size of row set back as XML in memory. The GetRowsetXML function was also added to COM and Java APIs (DSICO, IDSASP and DSIJava). You can learn more about these functions in the SDK Reference. 192

209 Handling Security Issues HANDLING SECURITY ISSUES THere are several security issues to consider as you set up the Internet Document Server and build your applications. These include Using firewalls Implementing security for web applications USING FIREWALLS Typically, you will use the Internet Document Server with some kind of firewall between the web server and the NT server where the Internet Document Server is installed. This lets you give the Internet Document Server access to archives and other sensitive data without permitting the same access to anyone with an Internet connection. The Internet Document Server (IDS) sample setup included on the installation CD assumes no firewall exists. As you set up the Internet Document Server and your web server with a firewall between the two, keep these points in mind: The messaging system can use either WebSphere MQ, JMS, or HTTP. All of these messaging systems communicate with other computers via TCP/IP. The firewall must be configured to open the TCP/IP ports for a messaging system. Read your messaging system's manuals and firewall manuals to find out which ports are used and how to set it up. If you are using NT servers, those servers running the Internet Document Server should have TCP/IP networking installed. The web server should have an FTP (file transfer protocol) service configured and started. File communications from the web server to the Internet Document Server must use FTP. For the FTP rules to work, your TCP/IP networking must be installed on the computer where the Internet Document Server is installed. Be sure to configure FTP server access with the appropriate user ID and passwords. The Internet Document Server includes several rules for use with firewalls, such as the IRLFileFTP and IRLInitFTP (Windows) or the FTPRule (Windows and UNIX) rules. For more information on these rules, refer to the SDK Reference. IMPLEMENTING SECURITY FOR WEB APPLICATIONS Some ASP customers use the ASP IDS and a web server for hot-key applications. The system builds an URL with, for example, the account number and bill date. When this URL is executed, it returns a PDF or HTML bill presented in a browser window. A potential security problem is if the user changes the account number on the URL and retrieve someone else's bill or document. The system, however, can encrypt parts of the URL to make it more difficult to see someone else's documents. The COM object DSIEncr lets VB or an ASP page encrypt a value. The ASP syntax is as follows: Language=VBScript %> 193

210 Chapter 2 Using the Internet Document Server <% Response.Buffer=True Set DSI = Server.CreateObject("DSI.DSIEncrypt") val = "abc" DSI.Encrypt val Response.Write "Encrypted: abc as " + val + "<BR>" DSI.Decrypt val Response.Write "Decrypted as " + val Response.End Set DSI = nothing %> The COM object is created by Server.CreateObject() method. Two methods are available in this COM object, Decrypt and Encrypt. The Decrypt method is provided for testing purposes. A simple implementation includes an ASP page which encrypts the account number on the URL before redirecting the user to the presentment web site. Here is a sample URL without the encryption: Here is a sample URL with encryption: present.asp?acct_no=0zjxwr96vm1zknik7cp0n&billdate= The result of the encryption is a safe string for the URL so no additional encoding is required. There will be no special characters. On the IDS side, you can use the DPRDecryptValue rule to decrypt the value before executing a search in the database. Here is an example of how you use this rule: function = dprw32->dprdecryptvalue,acct_no After this rule is executed on the RUNF message, the ACCT_NO in the attachment is replaced by the real value. NOTE:The encryption algorithm is proprietary. 194

211 Using LDAP Support USING LDAP SUPPORT IDS supports the use of Lightweight Directory Access Protocol (LDAP), an application protocol for querying and modifying directory services running over TCP/IP. IDS includes an LDAP API for Java. The JAVA DocucorpUtil package includes an LDAP class which you can use to query an LDAP server for group information for a user. For more information please see the LDAP.html documentation that ships with IDS located in the dsi_sdk\java\docs\com\docucorp\util directory and see the ldaptest class example which ships with IDS and is located in the dsi_sdk\java\samples\ldap directory. NOTE:If you are using JVM version 1.3, you must replace the jsse.jar file with the one from JVM version 1.4, which you can find at this location: JAVA_HOME\jre\lib\ext IDS also includes an LDAP API for C that you can use to query an LDAP server for group information for a user. These functions are supported in the API: LDAPInit LDAPTerm LDAPSearchDirectory LDAPGetErrorCode LDAPGetErrorMessage For more information, see the SDK Reference. Searching a Directory Information Tree You can search a Directory Information Tree (DIT) in an LDAP server. IDS includes the following rules for conducting LDAP queries to determine a user ID group or role membership: DPRSearchLDAP (C) search (Java) These rules will look for all configuration options in rule arguments, a properties file, INI options, and input attachment variables, in that order. Option values found in more than one source override the previous value. For information on the DPRSearchLDAP rule, see Using the Documaker Bridge. For information on the Java rule search, refer to the dsidocs/com/docucorp/dsi/ util/dsijession.html documentation shipped with the Java SDK. 195

212 Chapter 2 Using the Internet Document Server USING DEFAULT TIME-OUTS FOR DSILIB-BASED CLIENT APPLICATIONS You can set default time-outs for DSILIB-based client applications. You set these defaults using these configuration entries in the docclient.xml file: DefaultTimeoutSeconds MaxTimeoutSeconds MinTimeoutSeconds NOTE:Examples of client-based applications that benefit from this feature are ASP pages using IDSASP.DLL, JSP pages using IDSJSP.jar, and the test programs DSICOTB.EXE, DSITEST.EXE, and DSIEX.EXE. For instance, suppose you have hundreds of web applications installed on a single IIS or Java server and all of these applications are talking to the same IDS setup. Suppose some of these web applications have large time-out values which are not suitable for production mode, such as values longer than a few minutes. In this scenario, a transaction that takes a long time can tie up one thread on the web server. Since the total number of threads in the web server is limited, this can affect other applications. Using these options, the system administrator can make sure that no matter what was specified as the time-out value, the actual time-out period is what the system administrator thinks it should be. These entries go under the DocumentClient section in the docclient.xml file. Here is an example: <section name="documentclient"> <entry name="defaulttimeoutseconds">45</entry> <entry name="maxtimeoutseconds">60</entry> <entry name="mintimeoutseconds">30</entry> Entry DefaultTimeoutSeconds MaxTimeoutSeconds MinTimeoutSeconds Description Use this entry when DSILIB-based client applications, such as dsiex, dsitest, and dsicotb test programs, provide a time-out value of zero (0) to DSIGetQueueRec calls to wait for a response message. The default is 15 seconds. Use this entry to set the upper limit for the time-out value when waiting for a response message. If a time-out value is specified for DSIGetQueueRec calls and it is greater than MaxTimeoutSecondsvalue, the MaxTimeoutSeconds is used instead. There is no default. Use this entry to set the lower limit for the time-out value when waiting for a response message. If a time-out value is specified for DSIGetQueueRec calls and it is less than MinTimeoutSeconds value, the MinTimeoutSeconds is used instead. There is no default. 196

213 Using Default Time-outs for DSILIB-Based Client Applications NOTE:It is possible that Microsoft Server script execution time-out limits could be set lower than the values specified for this feature. In those instances, the values of the Microsoft Server script execution time-out limits would be used. Please consult your Microsoft documentation for more information. 197

214 Chapter 2 Using the Internet Document Server RUNNING TIMED REQUESTS You can run timed requests repeatedly or just in the primary instance. Use the following entry attributes for a timed request entry under the Timers section in docserv.xml file: Entry attribute Description RepeatInterval RunOnPrimaryInstanceOnly Enter true or yes (case sensitive) to tell IDS to convert the text value provided for the entry into seconds and run the timed entry at each interval specified. Here are some few examples. This timed section runs every 120 seconds: <entry RepeatInterval="yes" name="sss">00:01:60</entry> This timed section runs every 3720 seconds: <entry RepeatInterval="yes" name="sss">01:01:60</entry> This timed section runs every 90 seconds: <entry RepeatInterval="yes" name="sss">90</entry> If more than one IDS instance is running, any timed sections configured with the RepeatInterval attribute are run at a random interval using the interval seconds as the seed. Making sure they are not run at the same time by all IDS instances, allows other processing to take place. The default lower bound is 60 seconds, meaning any timed section that is configured to use a time interval of less than 60 seconds will instead use the default value. Enter yes or true (case sensitive) to make sure only the primary instance runs the timed section. For instance, you might want to do this when a timed section runs a synchronization rule that updates resources for a master resource library. This type of request would only need to be run once. If you omit this attribute, all IDS instances will run each timed section. Here is an example: <entry RunOnPrimaryInstanceOnly="Yes" name="sss">00:01:60</entry> 198

215 In-Process Rendering for DPAView IN-PROCESS RENDERING FOR DPAVIEW With version 11.3 Shared Objects, you can create a bitmap representations of a DPA document without creating another instance of IDS. Before version 11.3, you had to have an additional dedicated instance of IDS to create the bitmaps. DRLLIB detects whether it is running inside an instance of IDS or inside an external process. If DRLLIB detects that it is running inside IDS, it will use its own instance of IDS to render the bitmap. DPAView lets you create bitmaps from archived transactions in Documanage for display in Documanage Workstation. To do this, you have to have the following items set up: Documaker Server (publishing engine) An MRL set up to archive into Documanage (DBHandler:DMIA) Documanage version 6.5 and higher Documanage Bridge version 3.3 The DPA archives created by Documaker Server through the GenArc program must have been archived into Documanage. You can enable additional tracing by setting the environment variable DRLDEBUG. This feature also adds the DRLGetConfig API. DRLGetConfig Use this API to retrieve the CONFIG name for the DPA file processed by DRLProcessDPAFile. You must call this API after running DRLProcessDPAFile. These APIs are not supported in-process. DRLProcessPageDC DRLProcessPageBuffer Syntax DRLGetConfig (hinstance) (config) (len) Parameters Parameter hinstance config len Description The instance handle returned by DRLInitInstance call. The parameter to hold the config. The maximum size the config parameter may hold. Returns See also DRLERR_* value DRLProcessDPAFile 199

216 Chapter 2 Using the Internet Document Server USING DAL FUNCTIONS FOR WIP COLUMN ACCESS You can use the following DAL functions to set or retrieve WIP field data when Docupresentment processes WIP or archived transactions: Function WIPKEY1 Enhancement Returns the value of the Key1 WIP field. Requires no input parameters. Here is an example: Val=WIPKEY1() WIPKEY2 WIPKEYID WIPFLD SETWIPFLD Returns the value of the Key2 WIP field. Requires no input parameters. Here is an example: Val=WIPKEY2() Returns the value of the KeyID WIP field. Requires no input parameters. Here is an example: Val=WIPKEYID() Returns the value of the specified WIP field data. This field must be defined in the WIP.DFD file. Requires one input parameter to indicate which key value to return. Here is an example: Val=WIPFLD( TranCode ) Sets the value of the specified WIP field key and keeps it in memory until the job finishes. For example, this DAL script sets/changes CURRUSER to DEMO1 and returns it: SETWIPFLD( CURRUSER","DEMO1"); Val=WIPFLD("CURRUSER"); Return Val; There are several ways to run the DAL script, here are two examples: Using the ~DALRUN built-in INI function following a DAL script file, as shown in this example: ~DALRUN wipkey.dal Using the DPRExecuteDAL rule, as shown in the following request type: [ ReqType:i_WipTest] function = atcw32->atclogtransaction function = atcw32->atcloadattachment function = dprw32->dprsetconfig function = atcw32->atcunloadattachment function = dprw32->dprgetwipformset function = dprw32->dprexecutedal,wipkey.dal,runf You can also use the following built-in INI functions to retrieve WIP field data when Docupresentment processes WIP or archived transactions: ~KEY1 ~KEY2 ~KEYID ~ORIGUSER 200

217 Using DAL Functions for WIP Column Access ~CREATETIME ~MODIFYTIME ~FORMSETID ~ORIGFSID ~TRANCODE ~DESC ~WIPFIELD All of these built-in functions except WIPFIELD do not require input parameters. The WIPFLD function requires an input parameter that indicates the field data to return. Here is an example: ~WIPFLD FORMSETID In this example, FORMSETID is the input parameter that specifies the field name. 201

218 Chapter 2 Using the Internet Document Server USING ENTERPRISE WEB PROCESSING SERVICES Enterprise Web Processing Services (EWPS) make it easier to integrate applications, providing a set of web services for accessing the Documaker forms library and initiating real-time publishing operations. This helps you deliver the information requested by your clients, prospects, employees, and business partners. Via EWPS you can use a number of essential mechanisms, such as WS-I SOAP interfaces for application integration, JSON for UI integration, or prepackaged business parts for design-time integration, to create a solution that uniquely meets your business needs. Typical EWPS-enabled solutions include: Self-service publishing solutions Document search utilities Composition and workflow systems Systems that embed publishing artifacts into web pages Applications that help users create documents and forms EWPS supports these protocols: SOAP (Simple Object Access Protocol). JSON (JavaScript Object Notation) In addition, the EWPS Jmeter test script provides a set of examples for each service request operation. These examples can help you more quickly implement your system. For more information on EWPS, see Introduction to Enterprise Web Processing Services. NOTE:EWPS is not available on the UNIX platforms. 202

219 Determining the Patch Level DETERMINING THE PATCH LEVEL Docupresentment contains both.dll files and Java.jar files. As changes are made to the product, both of these types of files are patched with program fixes. You can determine which patches have been applied to these files by running the FSIVER and PatchReporter utilities. This utility FSIVER PatchReporter Determines which patches have been applied to Docupresentment's.dll files.jar files NOTE:For more information on these utilities, see the Utilities Reference. FSIVER To run the FSIVER utility, navigate to the directory where the Docupresentment.DLL files are located and run this command: c:\docserv\> fsivrw32 /i=*.* > fsivrw32.txt fsivrw32.txt is the name of an output file you want the utility to create. PatchReporter To run the PatchReporter utility, go to the directory where the Docupresentment.jar files are located and run this command: C:\docserv\lib> java -jar PatchReporter.jar -f "*.jar" > patchreporter.txt patchreporter.txt is the name of an output file you want the utility to create. 203

220 Chapter 2 Using the Internet Document Server 204

221 Chapter 3 Creating Output Files This chapter discusses the types of output you can create, such as PDF or HTML files. If you are unsure as to which type of file you want to produce, see HTML vs. PDF on page 4. For more information on creating these files, see these topics: Creating PDF Files on page 206 Creating HTML Files on page 207 Creating XML Output on page 208 For more information about the various paper sizes the system supports, see Choosing a Paper Size on page

222 Chapter 3 Creating Output Files CREATING PDF FILES The PDF Print Driver creates Adobe Portable Document Format (PDF) files from output from the Rules Processor s GenPrint program. PDF is a document language developed by Adobe Systems, Inc., that allows formatting and graphics information to be stored along with text. Using PDF files, you can make sure form sets viewed and printed match originals created by the GenPrint program. A document stored in PDF format can be transmitted to and viewed on many types of systems. There are PDF viewer applications available for many platforms, both as standalone programs and as add-ons for existing applications (such as word processors and Internet web browsers). You can download Acrobat Reader from Adobe Systems web site ( Print output directed to the PDF Print Driver is stored in one or more files. You can then view these files using the Acrobat Reader. For more information, see the Printers Reference and the Fonts Reference. 206

223 Creating HTML Files CREATING HTML FILES You can create HTML files by simply printing to the HTML print driver. The HTML print driver includes support for: Boxes solid and shaded colors only Bar codes Charts Vectors solid and shaded colors only Logos converted to JPG files by the driver Lines solid and shaded colors only. Dashed lines are supported but do not take the line characteristics as specified. The spacing and length of dashed lines are defaulted by the HTML 4 specification. Shaded areas solid and shaded colors only Text areas Text Variable fields NOTE:For more information on setting up the HTML print driver, see the Printers Reference. 207

224 Chapter 3 Creating Output Files CREATING XML OUTPUT The XMPLIB library lets you use IDS and Documaker to create Oracle Insurance standard XML output. This lets you unload Oracle Insurance standard XML output from the GenPrint or GenData programs (using the PrintFormset rule). Here is an example of the INI setup this feature requires: < Printers > PrtType = XMP < PrtType:XMP > Module = XMPW32 PrintFunc = XMPPrint When using with Documaker, be sure to use the MultiFilePrint functionality to create a separate XML file per transaction. If multiple XML files are written into the same file, the file will not load in an XML parser, browser, or editor. NOTE:For more information on the Oracle Insurance standard XML format, see Working with XML. 208

225 Chapter 4 Using Docucorp Publishing Services Docucorp Publishing Services (DPS) for print and archive are a set of objects you can use to interface VB, C#, or Java with Documaker to execute print or archive through Docupresentment (IDS). You can run IDS on a local or remote system. Only one transaction can be processed per API invocation. The return file types can be PCL, PDF, or XML. For print requests, the input file (attachment) contains data representing a single transaction. For archive retrieval requests, the first transaction that matches the search criteria is returned. Docucorp Publishing Services (DPS) consists of: An action object. (DPSPrint, DPSArchive) This object passes a group of variables (properties) that define input parameters for performing the specific action. An interface object. (DPSIDS) This object parses or constructs the request variables based on the input object properties and interfaces with IDS to send the request variables and receive the result variables. IDS IDS performs the task based on the request. There are two groups of the requests: remote and local. If IDS is local, it is running on the same machine as the client and shares the same physical hard drive so it is not necessary to send the output file back to the client since it is on the same machine. If IDS is remote, the output file needs to be sent from the machine that is running IDS to the client machine. 209

226 Chapter 4 Using Docucorp Publishing Services Here is a summary of the DLL and class files for DPS: Required By File name Description IDS IDSRules.jar com/docucorp/ids/rules/dps VB API DPSClient.dll DPSPrint, DPSArchive, DPSIDS objects. C# API Docucorp.DPS.dll Docucorp.IDS.dll DPSPrint, DPSArchive, DPSIDS objects. Java API dps.jar DPSPrint, DPSArchive, DPSIDS objects. The following illustration shows how this works on a local IDS setup, with IDS running on the same machine: Action object Interface object Request type for a local IDS server DPSPrint object DPSArchive object DPSIDS object IDS DPSPrt DPSArc Local hard disk 210

227 This illustration shows how it works with IDS running on a different machine: Action object Interface object Request type for a remote IDS server DPSPrint object DPSArchive object DPSIDS object IDS DPSPrtRM DPSArcRM Local hard disk IDS server hard disk 211

228 Chapter 4 Using Docucorp Publishing Services DPS OBJECT PROPERTIES DPSPrint object The following tables describe the properties of these objects: DPSPrint DPSArchive The DPSPrint object has these properties: Property Name I/O Type Description VB ApplicationName I/O String (Optional) Use to pass application-specific data to the API. C# ApplicationName I/O Java setapplicationname getapplicationname Input Output VB ConfigurationName I/O String Use to set the DAP configuration. C# ConfigurationName I/O Java setconfigurationname getconfigurationname Input Output VB DestinationName I/O String (Optional) Use to pass application-specific data to the API. C# DestinationName I/O Java setdestinationname getdestinationname Input Output VB EffectiveDate 1 I/O String (Optional) Specifies the effective date of this transaction in YYYYMMDD format. C# EffectiveDate 1 I/O Java seteffectivedate 1 geteffectivedate 1 Input Output VB C# FormDescription FormDescription I/O I/O String (Optional) Specifies the form description to be processed for this transaction. Leave this property blank to tell the system to Java setformdescription getformdescription Input Output process all requested forms. You can pass multiple form descriptions by entering the form names separated by commas. 1 Not yet implemented. 212

229 DPS Object Properties Property Name I/O Type Description VB C# FormName FormName I/O I/O String (Optional) Specifies the form name to be processed for this transaction. Leave this property blank to tell the system to process all requested forms. You can pass multiple forms Java setformname Input by entering the form names separated by getformname Output commas. VB C# InputFile InputFile I/O I/O String Specifies the name of the attached input data file, which is usually an extract data file for the transaction, such as an XML extract file or an import file name. Java setinputfile getinputfile Input Output VB Key1, Key2, Key3, and KeyID I/O String (Optional) Specifies transactional keys or application-specific values. C# Key1, Key2, Key3, and KeyID I/O Java setkey1, setkey2, setkey3, and setkeyid getkey1, getkey2, getkey3, and getkeyid Input Output VB C# OutputFile OutputFile I/O I/O String (Optional) Specifies a string that contains the name of the returned output file. If the buffer contains no input value (blank or empty) the Documaker system generates this output file Java setoutputfile Input name. Use the OutputFile property to get the getoutputfile Output generated file name. VB C# OutputPath OutputPath I/O I/O String (Optional) Specifies the desired location of the returned output files. If you leave this property blank, the system uses the current directory from which the client was executed. Java setoutputpath getoutputpath Input Output VB Password I/O String (Optional) Specifies the password if one is required by the request. C# Password I/O Java setpassword getpassword Input Output 1 Not yet implemented. 213

230 Chapter 4 Using Docucorp Publishing Services Property Name I/O Type Description VB PrinterType I/O String (Optional) Specifies the type of output, such as PCL, PDF, or XML. Future versions may C# PrinterType I/O support additional output types. Java setprintertype getprintertype Input Output VB Priority 1 I/O Priorities C# Priority 1 I/O Java setpriority 1 getpriority 1 Input Output DPS_IM MEDIAT E DPS_DE FERRED Specifies immediate processing, deferred (batch) processing of the transaction, or endof-day/end-of-period transaction. The default is DPS_IMMEDIATE. VB C# RecipientName RecipientName I/O I/O String (Optional) Specifies the recipient name to be processed for this transaction. Leave this property blank if you do not want recipient filtering performed. You can specify a list of Java setrecipientname Input recipients, using commas to separate the getrecipientname Output recipient names. VB C# ReturnCode ReturnCode I/O I/O String Set to DPS0000 if the transaction was processed successfully. Otherwise, it will contain an error code set by the DPS interface. This error code can be an error returned from Java setreturncode Input the Documaker system or Docupresentment or getreturncode Output a failure of the DPS API. VB RunDate 1 I/O String (Optional) Specifies the run date of this transaction in YYYYMMDD format. C# RunDate 1 I/O Java setrundate 1 getrundate 1 Input Output VB SourceName I/O String (Optional) Use to pass application-specific data to the API. C# SourceName I/O Java setsourcename getsourcename Input Output 1 Not yet implemented. 214

231 DPS Object Properties Property Name I/O Type Description VB TrnCode 1 I/O String (Optional) Specifies a transaction code or other application-specific value. C# TrnCode 1 I/O Java settrncode 1 gettrncode 1 Input Output VB UserID I/O String (Optional) Specifies a user ID if one is required by the request. C# UserID I/O Java setuserid getuserid Input Output VB WaitForResult I/O Boolean Specifies whether the invoking application expects to receive results. The default is True. C# WaitForResult I/O Java setwaitforresult getwaitforresult 1 Not yet implemented. Input Output DPSArchive object The DPSArchive object has these properties: Property Name I/O Type Description VB ConfigurationName I/O String Use to set the DAP configuration. C# ConfigurationName I/O Java setconfigurationname getconfigurationname Input Output VB C# FormDescription FormDescription I/O I/O String (Optional) Specifies the form description to be processed for this transaction. Leave this property blank to tell the system to process all requested forms. You can pass multiple form Java setformdescription Input descriptions using commas to separate the getformdescription Output form names. VB FormKey1 I/O String (Optional) Specifies the form set filtering Key1. C# FormKey1 I/O Java setformkey1 getformkey1 1 Not yet implemented. Input Output 215

232 Chapter 4 Using Docucorp Publishing Services Property Name I/O Type Description VB FormKey2 I/O String (Optional) Specifies the form set filtering Key2. C# FormKey2 I/O Java setformkey2 getformkey2 Input Output Output VB C# FormName FormName I/O I/O String (Optional) Specifies the forms to be processed for this transaction. Leave this property blank to tell the system to process all requested Java forms. You can pass multiple forms using commas to separate the form names. setformname getformname Input Output VB Key1, Key2, Key3, and KeyID I/O String (Optional) Specifies the columns in application index file you want to use in the query C# Key1, Key2, Key3, and KeyID I/O Java setkey1, setkey2, setkey3, and setkeyid getkey1, getkey2, getkey3, and getkeyid Input Output VB C# OutputFile OutputFile I/O I/O String (Optional) Specifies a string that contains the name of the returned output file. If the buffer contains no input value (blank or empty) the Documaker system generates this output file Java setoutputfile Input name. Use the outputfile property to get the getoutputfile Output generated file name. VB C# OutputPath OutputPath I/O I/O String (Optional) Specifies the desired location of the returned output files. If you leave this property blank, the Docucorp publishing system (such as Documaker) uses its own INI options to Java setoutputpath Input determine the locations of the returned output getoutputpath Output files and the caller will have to know to retrieve the files from that location. VB Password I/O String Specify password required to retrieve from the database. C# Password I/O Java setpassword getpassword Input Output 1 Not yet implemented. 216

233 DPS Object Properties Property Name I/O Type Description VB PrinterType I/O String (Optional) Specifies the type of output, such as PDF or XML. Future versions may support C# PrinterType I/O additional output types. Java setprintertype getprintertype Input Output VB RecipientName 1 I/O String (Optional) Specifies the recipients to be processed for this transaction. Leave this C# RecipientName 1 I/O Java setrecipientname 1 getrecipientname 1 Input Output property blank if you do not want recipient filtering performed. You can specify a list of recipients, using semicolons to separate the recipient names. VB C# ReturnCode ReturnCode I/O I/O String Set to DPS0000 if transaction was processed successfully. Otherwise it contains an error code set by the DPS interface. This error code can be an error returned from the Documaker Java setreturncode Input or Docupresentment system or a failure of the getreturncode Output DPS API. VB UserID I/O String Specifies the user ID required to access the database. C# UserID I/O Java setuserid getuserid Input Output VB WaitForResult I/O Boolean Specifies if the invoking application expects to receive results. The default is True C# WaitForResult I/O Java setwaitforresult getwaitforresult 1 Not yet implemented. Input Output DPSIDS object The DPSPrint object has these methods: Methods Description VB C# Send(actionObject as Variant) Send(DpsPrint dpsprintobject) Send(DpsArchive dpsarchiveobject) Call to parse an action object s properties to request variables and send the request variables to the IDS Server to perform the function specified by the requesttype. Java send(dpsprint odpsprint) send(dpsarchive odpsarchive) 217

234 Chapter 4 Using Docucorp Publishing Services SETTING DEFAULT PARAMETERS Use the DPSINI.XML file to set default parameters. The system looks for the file in the current directory. If it is not found, it looks in the Windows system directory, such as c:\winnt\system32. Here is an example of the DPSINI.XML file: <?xml version='1.0'?> <DPS> <DPSIDS> <RemoteIDS>Yes</RemoteIDS> <PathSeparator>\</PathSeparator> </DPSIDS> <DPSPrint> <RequestType>DPSPRT</RequestType> <RequestTypeRM>DPSPRTRM</RequestTypeRM> <OutputAttachName>DPSPRTOUTPUT</OutputAttachName> <InputAttachName>DPSPRTINPUT</InputAttachName> </DPSPrint> <DPSArchive> <RequestType>DPSARC</RequestType> <RequestTypeRM>DPSARCRM</RequestTypeRM> <PartialMatch>Yes</PartialMatch> <CaseSensitivity>No</CaseSensitivity> <MaxRecords>1</MaxRecords> <OutputAttachName>DPSARCOUTPUT</OutputAttachName> </DPSArchive> </DPS> DPSIDS section Parameter RemoteIDS PathSeparator Description This parameter determines the location of the IDS Server, local or remote. DPSPrint section Parameter RequestType RequestTypeRM OutputAttachname InputAttachName Description This is the request type when RemoteIDS is set to No. The default is DPSPRT. This is the request type when RemoteIDS is set to Yes. The default is DPSPRTRM. This is the AttachName used by the IDS Server to send a file to the client when RemoteIDS is set to Yes. The default is DPSPRTOUTPUT. This is the AttachName used by the client to send an input extract file to the IDS Server when RemoteIDS is set to Yes. The default is DPSPRTINPUT. DPSArchive section Parameter RequestType Description The request type when RemoteIDS is set to No. The default is DPSARC. 218

235 Setting Default Parameters Parameter RequestTypeRM OutputAttachname PartialMatch CaseSensitivity Description The request type when RemoteIDS is set to No. The default is DPSARCRM. The AttachName used by the IDS Server to send a file to the client when RemoteIDS is set to Yes. The default is DPSARCOUTPUT. The search condition uses a partial match. If set to Yes, the search is case sensitive. The default is No Maxrecords The maximum number of records to return. It must be set to one (1). 219

236 Chapter 4 Using Docucorp Publishing Services SAMPLE VB CODE Print Archive Here are examples of Visual Basic code for print and archive: Private Sub CmdPrint_Click() Dim odpsvar As New DPSPrint Dim odpsids As New DPSIDS odpsvar.inputfile = D:\MRL\TEST\EXTRACTS\ExtrFile.dat odpsvar.configurationname = DPS odpsvar.outputfile = PrintOutput odpsvar.outputpath = D:\MRL\TEST\PrintFile.PCL odpsvar.printertype = PCL odpsids.send odpsvar if odpsvar.returncode = DPS0000 Then FinalOutput.Text = odpsvar.outputpath + odpsvar.outputfile End If End Sub Private Sub CmdArchive_Click() Dim odpsvar As New DPSArchive Dim odpsids As New DPSIDS FinalOutputA.Text = "" odpsvar.configurationname = "DPS" odpsvar.userid = UserID odpsvar.password = Password odpsvar.outputfile = FldOutputFileA.Text odpsvar.outputpath = FldOutputPathA.Text odpsvar.key1 = "SAMPCO" odpsvar.printertype = PDF odpsids.send odpsvar if odpsvar.returncode = DPS0000 Then FinalOutputA.Text = odpsvar.outputpath + odpsvar.outputfile End If End Sub NOTE:The DPSClient.dll file must be referenced before you can use the DPSPrint, DPSArchive, and DPSIDS objects. 220

237 Sample C Code SAMPLE C CODE Here is some sample C# code: using System; using Docucorp.DPS;... private void printbutton_click(object sender, System.EventArgs e) { DpsPrint dpsvarobject = new DpsPrint(); DpsIds dpsidsobject = new DpsIds(); dpsvarobject.inputfile = inputfile.text; dpsvarobject.configurationname = config.text; dpsvarobject.outputfile = outputfile.text; dpsvarobject.outputpath = outputpath.text; dpsvarobject.printertype = printertype.text; dpsvarobject.formname = formname.text; dpsvarobject.formdescription = formdescription.text; dpsvarobject.recipientname = recipientname.text; try { dpsidsobject.send(dpsvarobject); finaloutput.text = dpsvarobject.outputpath + dpsvarobject.outputfile; } catch (Exception ex) { Console.Out.WriteLine(ex.ToString()); } } private void archivebutton_click(object sender, System.EventArgs e) { DpsArchive dspvarobject = new DpsArchive(); DpsIds dpsidsobject = new DpsIds(); finaloutputa.text = ""; dspvarobject.waitforresult = true; dspvarobject.userid = userid.text; dspvarobject.password = password.text; dspvarobject.configurationname = "DPS"; dspvarobject.outputfile = outputfilea.text; dspvarobject.outputpath = outputpatha.text; dspvarobject.key1 = "SAMPCO"; dspvarobject.printertype = printertypea.text; dspvarobject.formname = formnamea.text; try { dpsidsobject.send(dpsvarobject); finaloutputa.text = dpsvarobject.outputpath + dpsvarobject.outputfile; } catch (Exception ex) { Console.Out.WriteLine(ex.ToString()); 221

238 Chapter 4 Using Docucorp Publishing Services } } NOTE:You must install the Docucorp.IDS.dll file in GAC and the Docucorp.DPS.dll file must be referenced before you can use the DPSPrint, DPSArchive, and DPSIDS objects. 222

239 Sample Java Code SAMPLE JAVA CODE Here is some sample Java code: import com.docucorp.dps.*;... void BtnPrint_actionPerformed(ActionEvent e) { DPSPrint odpsvar = new DPSPrint(); try { DPSIDS odpsids = new DPSIDS(); odpsvar.setinputfile(fldinputfile.gettext()); odpsvar.setconfigurationname(fldconfig.gettext()); odpsvar.setoutputfile(fldoutputfile.gettext()); odpsvar.setoutputpath(fldoutputpath.gettext()); odpsvar.setprintertype(fldprintertype.gettext()); odpsvar.setformname(fldformname.gettext()); odpsvar.setformdescription(fldformdescription.gettext()); odpsvar.setrecipientname(fldrecipientname.gettext()); odpsids.send(odpsvar); FldFinalOutput.setText(oDPSVar.getoutputPath() + odpsvar.getoutputfile()); FldReturnCode.setText(oDPSVar.getreturnCode()); } catch (DPSJException ex) { FldReturnCodeA.setText(oDPSVar.getreturnCode()); ex.printstacktrace(); } catch (DSIJException ex) { FldReturnCodeA.setText(oDPSVar.getreturnCode()); ex.printstacktrace(); } catch (Exception ex) { FldReturnCodeA.setText(oDPSVar.getreturnCode()); ex.printstacktrace(); } } void BtnArchive_actionPerformed(ActionEvent e) { DPSArchive odpsvar = new DPSArchive(); try { DPSIDS odpsids = new DPSIDS(); odpsvar.setuserid(flduserid.gettext()); odpsvar.setpassword(fldpassword.gettext()); odpsvar.setconfigurationname(fldconfiga.gettext()); odpsvar.setoutputfile(fldoutputfilea.gettext()); odpsvar.setoutputpath(fldoutputpatha.gettext()); odpsvar.setformname(fldformnamea.gettext()); odpsvar.setprintertype(fldprintertypea.gettext()); odpsids.send(odpsvar); FldFinalOutputA.setText(oDPSVar.getoutputPath() + odpsvar.getoutputfile()); FldReturnCodeA.setText(oDPSVar.getreturnCode()); } catch (DPSJException ex) { FldReturnCodeA.setText(oDPSVar.getreturnCode()); ex.printstacktrace(); } catch (DSIJException ex) { FldReturnCodeA.setText(oDPSVar.getreturnCode()); ex.printstacktrace(); } catch (Exception ex) { 223

240 Chapter 4 Using Docucorp Publishing Services } } FldReturnCodeA.setText(oDPSVar.getreturnCode()); ex.printstacktrace(); 224

241 Setting Up IDS SETTING UP IDS Add the following request types to the DOCSERV.INI file to set up IDS: [ ReqType:DPSARC ] function = atcw32->atclogtransaction function = atcw32->atcloadattachment function = dprw32->dprlocateonerecord function = dprw32->dprinitlby function = atcw32->atcunloadattachment function = dsijrule->javarunrule,;com/docucorp/ids/rules/ dps;dps;global;duplicateattach;,rv,remoteprintfile,o,arcoutputfile, O function = dsijrule->javarunrule,;com/docucorp/ids/rules/ dps;dps;global;duplicateattach;,rv,sendbackpage,o,arcoutputfile,o function = dprw32->dprretrieveformset function = dprw32->dprfilterformsetforms function = dprw32->dprprint function = dprw32->dprprocesstemplates [ ReqType:DPSARCRM ] function = atcw32->atclogtransaction function = atcw32->atcloadattachment function = dprw32->dprsetconfig function = dprw32->dprlocateonerecord function = dprw32->dprinitlby function = atcw32->atcunloadattachment function = dprw32->dprretrieveformset function = dprw32->dprfilterformsetforms function = atcw32->atcsendfile,dpsarcoutput,outputfile,binary function = dsijrule->javarunrule,;com/docucorp/ids/rules/ dps;dps;global;duplicateattach;,rv,outputfile,o,arcoutputfile,o function = dsijrule->javarunrule,;com/docucorp/ids/rules/ dps;dps;global;duplicateattach;,rv,remoteprintfile,o,outputfile,o function = dsijrule->javarunrule,;com/docucorp/ids/rules/ dps;dps;global;duplicateattach;,rv,sendbackpage,o,outputfile,o function = dprw32->dprprint function = dprw32->dprprocesstemplates [ ReqType:DPSPRT ] function = atcw32->atclogtransaction function = atcw32->atcloadattachment function = atcw32->atcunloadattachment function = dprw32->dprsetconfig function = dsijrule->javarunrule,;com/docucorp/ids/rules/ dps;dps;global;duplicateattach;,rv,printer1,o,printoutputfile,o function = rpdw32->rpdcheckrprun function = rpdw32->rpdcreatejob function = rpdw32->rpdprocessjob [ ReqType:DPSPRTRM ] function = atcw32->atclogtransaction function = atcw32->atcloadattachment function = atcw32->atcunloadattachment function = atcw32- >ATCReceiveFile,DPSPRTINPUT,EXTRFILE,d:\temp\*.dat,KEEP function = dprw32->dprsetconfig function = atcw32->atcsendfile,dpsprtoutput,printer1,binary function = dsijrule->javarunrule,;com/docucorp/ids/rules/ dps;dps;global;duplicateattach;,rv,printer1,o,printoutputfile,o function = dsijrule->javarunrule,;com/docucorp/ids/rules/ dps;dps;global;duplicateattach;,rv,printer1,o,outputfile,o function = rpdw32->rpdcheckrprun 225

242 Chapter 4 Using Docucorp Publishing Services function = rpdw32->rpdcreatejob function = rpdw32->rpdprocessjob Add these control groups and options to the DAP.INI file: < Config:DPS > INIFile = DPS.INI < Configurations > Config = DPS Here is a sample DPS.INI file: < MasterResource > XRFFile = rel102 DefLib = D:\MRL\DEMO\MstrRes\Def\ FormLib = D:\MRL\DEMO\MstrRes\FAP\ LbyLib = D:\MRL\DEMO\MstrRes\FAP\ FontLib = D:\FONTS\ FormDef = form.dat < RPDRunRP > Executable = d:\rel111\rps100\w32bin\gendaw32.exe Directory = D:\MRL\DEMO\MstrRes ; UserINI = D:\MRL\DEMO\RunBatch\fsiuser.s.ini UserINI = D:\MRL\DEMO\RunBatch\FSIUSER.PCL.INI Debug = Yes < RPDCheckRPRun > Debug = Yes < IDSServer > BaseLocation = PrintPath = d:\mrl\demo\printfiles GENSemaphoreName = GenData RPDSemaphoreName = RPDRunRP < Debug > RULServerJobProc = Yes RPDProcessJob = Yes < ARCRet > ; path to CAR files CARPath = D:\MRL\DEMO\ARC\ CARFile = ARCHIVE ; full file name for application index APPIDX = D:\MRL\DEMO\ARC\APPIDX ; full file name for temporary index TempIDX=D:\MRL\DEMO\ARC\TEMP ; full file name for CAR files catalog Catalog = D:\MRL\DEMO\ARC\CATALOG APPIDXDFD = D:\MRL\DEMO\mstrres\def\appidx.dfd < Control > XrfExt =.fxr ImageEXT =.fap DateFormat = 24% < PrtType:PDF > LanguageLevel= Level2 Module = PDFOS2 PrintFunc = PDFPrint Linearize = No 226

243 Setting Up Documaker SETTING UP DOCUMAKER Set up Documaker to run in single-step mode. Please note in the following sample AFGJOB.JDT file that the RULServerJobProc rule is required to run in the IDS environment and the ServerFilterFormRecipient rule is required for DPS to run properly. Here is a sample AFGJOB.JDT file: /* This base (this implementation) uses these rules. */ <Base Rules> ;RULServerJobProc;1;Always the first job level rule; /*;RULStandardJobProc;;Always the first job level rule; ;JobInit1;;; ;BuildMasterFormList;1;4; ;InitPrint;;required to execute gendata/genprint in single step; /* Every form set in this base uses these rules. */ <Base Form Set Rules> ;NoGenTrnTransactionProc;;required to combine gentrn/gendata into single step; ;BuildFormList;;; ;LoadRcpTbl;;; ;ServerFilterFormRecipient;;; ;RunSetRcpTbl;;; ;PrintFormset;;required to combine gendata/genprint into single step; ;WriteOutput;;;required to combine gentrn/gendata into single step; ;WriteNaFile;;;required to combine gentrn/gendata into single step; ;BatchingByPageCountINI;;; ;ProcessQueue;;PostPaginationQueue; ;PaginateAndPropogate;;FooterMode(2) Debug; /* Every image in this base uses these rules. */ <Base Image Rules> ;RULStandardImageProc;;Always the first image level rule; /* Every field in this base uses these rules. */ <Base Field Rules> ;RULStandardFieldProc;;Always the first field level rule; 227

244 Chapter 4 Using Docucorp Publishing Services 228

245 Chapter 5 Customizing idocumaker, ipps, and WIP Edit This appendix describes how you can customize how idocumaker, ipps, and the WIP Edit plug-in work with IDS. In this appendix, you will find the following topics: Setting Up a Favorites List for idocumaker on page 230 Attaching Files to Transactions as Forms on page 232 Designating Read-Only Multiline Text Field Paragraphs on page 238 Printing on Your Workstation Printer on page 239 Preventing the Session from Expiring on page 240 Passing WIP Record IDs to the MergeWIP Rule on page 241 Automatically Updating idocumaker on page 242 Using the WIP Edit Plug-in on page

246 Chapter 5 Customizing idocumaker, ipps, and WIP Edit SETTING UP A FAVORITES LIST FOR IDOCUMAKER You can create a favorites list a list of frequently used forms for use in idocumaker. This increases your ability to get MRL information from IDS via XML and is similar to Documaker Workstation feature that lets you set up personal forms lists. For example, if your company has a large number of forms, each user can set up a favorites list to more quickly find the forms he or she typically works with. Keep in mind that users can still select any available form, you are not limited to just those forms on your favorites list. To understand this feature you need to understand how idocumaker uses the i_getmrlresource request type to get a list of the groups and forms an MRL supports. First, idocumaker requests a list of groups by running the i_getmrlresource request without submitting any XML. A list of groups is returned to idocumaker in an XML attachment called DOCUMENTSTREAM. If this feature is enabled, one of the groups is identified as the favorites group. Either the user or idocumaker can then select one or more of these groups to get a forms list. You get a forms list by sending the list of desired groups in the XMLIMPORT XML attachment to the i_getmrlresource rule. The i_getmrlresource request type returns an XML attachment that contains forms, form descriptions, and recipient data for all of the requested groups, including the favorites group if you enabled favorites and one of the submitted groups contains the attribute FAVORITES=TRUE. You can store one favorites list per configuration. The list is stored in this location: Config\UserID\profile.xml For example, if the user ORACLE has a favorites list for the configuration SAMPCO, the favorites list will be stored in the following location: SAMPCO\ORACLE\profile.xml Here is an example of the XML file that contains the favorites list: <DOCSET> <GROUP NAME1="FAVORITES" NAME2="FAVORITES" NAME3=""> <FORM NAME="FIL "/> <FORM NAME="FIM "/> <FORM NAME="FCG "/> <FORM NAME="Barcode Samples"/> <FORM NAME="DAL Locale"/> <FORM NAME="Auto Increment Names"/> <FORM NAME="A128"> </FORM> </GROUP> </DOCSET> You can use these INI options in your MRL INI file to control the favorites list: < Favorites > Enabled = Yes Path = z:\sharedir Name1 = Favorites Name2 = Favorites 230

247 Setting Up a Favorites List for idocumaker Option Enabled Path Name1 Name2 Description Enter Yes to turn on the use of favorites. The default is No. Enter the name of the path into which you want the favorites list saved. For instance, if your user ID is Oracle and you enter... z:\sharedir The favorites list will be stored in this directory: z:\sharedir\oracle\profile.xml If you have IDS installed on multiple PCs, set the Path option to point to the same location. If you only have IDS installed on a single PC, you can omit this option. Enter the name of the first favorites group. Enter the name of the second favorites group. NOTE:When you select a form from the favorites list, the Key1/Key2 in WIP is set to whatever is in the Name options in your Favorites control group (Favorites in the preceding example). 231

248 Chapter 5 Customizing idocumaker, ipps, and WIP Edit ATTACHING FILES TO TRANSACTIONS AS FORMS Using the Documaker Bridge, you can now attach external files as forms to Documaker transactions. These external files can be in the following formats: TIFF, JPG, PDF, and other bitmap formats supported by Documaker. You can also attach RTF files. The RTF import is limited to the same level of support here as it has in other places in the system. For instance, if something will not work in Studio, it will not work here either. When you attach one of these types of files, it becomes an embedded bitmap in a form in the Documaker transaction. The attached form has an option to indicate it is an attachment (the letter A in form options). NOTE:This feature was implemented for use with idocumaker. The Documaker Bridge rules DPRUpdateFormsetFromXML and DPRLoadImportFile were enhanced to support attachment forms. You can attach a file by: Placing it on disk and specifying its name and type in IDS attachment variables. Sending the file to IDS in a message. Placing the file on a disk accessible to the Documaker Bridge. Placing the file in a Documanage repository. In all cases, the information needed to find the file is located in the form metadata. Special metadata tag names are reserved for each case. Specifying the File Name and Type in IDS Attachment Variables Use these tags in the form s metadata specify how to locate the file name. Tag DPR_ATTACHVARNAME DPR_FILETYPE DPR_FILETYPEVAR Description The name of the DSI attachment variable where the file name is stored. (Optional) The file type. The file type is determined by the program by looking at this value. If missing, the file extension is checked. If the extension is missing, the default is TIFF. (Optional) The name of the DSI attachment variable with the file type. The file type is determined by the program by looking at this value. If missing, the file extension is checked. If the extension is missing, the default is TIFF. If the DPR_FILETYPE variable is present, this variable is ignored. Here is an example fragment of an XML import file with this information. The file name is located in a DSI variable named DPRFILE and its type is in the DSI variable DPRTYPE. <FORM NAME="Test form name" OPTIONS="RA"> 232

249 Attaching Files to Transactions as Forms <INFO NAME="DPR_ATTACHVARNAME">DPRFILE</INFO> <INFO NAME="DPR_FILETYPEVAR">DPRTYPE</INFO> <DESCRIPTION>Test description of the form</description> <RECIPIENT NAME="AGENT" COPYCOUNT="1"/> <RECIPIENT NAME="HOME OFFICE" COPYCOUNT="1"/> </FORM> Sending the File to IDS in a Message The following tags in form metadata specify how to locate the file data. Tag DPR_ATTACHNAME DPR_FILETYPE DPR_FILETYPEVAR Description The name of the DSI attachment in which the file was sent, such as via the SendFile API. (Optional) The file type. The file type is determined by the program by looking at this value. If missing, the file extension is checked. If the extension is missing, the default is TIFF. (Optional) The name of the DSI attachment variable with the file type (optional). The file type is determined by the program by looking at this value. If missing, the file extension is checked. If the extension is missing, the default is TIFF. If the DPR_FILETYPE variable is present, this variable is ignored. At least one of the file type values is required even though both are listed as optional. Here is an example fragment of an XML import file with this information. The file is sent to IDS inside the message and the name of the attachment used to send it is SENTFILE. The type of file is in the DSI variable DPRTYPE. <FORM NAME="Test with DSI message" OPTIONS="RA"> <INFO NAME="DPR_ATTACHNAME">SENTFILE</INFO> <INFO NAME="DPR_FILETYPE">TIF</INFO> <DESCRIPTION>Test description of the form</description> <RECIPIENT NAME="AGENT" COPYCOUNT="1"/> <RECIPIENT NAME="HOME OFFICE" COPYCOUNT="1"/> </FORM> Storing the File on a Disk Accessible to Documaker Bridge Use these tags in the form s metadata to tell Documaker Bridge how to locate the file. Tag DPR_FILENAME DPR_FILETYPE Description The name of the file. (Optional) The file type. The file type is determined by the program by looking at this value. If missing, the file extension is checked. If the extension is missing, the default is TIFF. 233

250 Chapter 5 Customizing idocumaker, ipps, and WIP Edit Tag DPR_FILETYPEVAR Description Optional) The name of the DSI attachment variable with the file type. The file type is determined by the program by looking at this value. If missing, the file extension is checked. If the extension is missing, the default is TIFF. If the DPR_FILETYPE variable is present, this variable is ignored. Here is an example fragment of an XML import file with this information. <FORM NAME="Test with filename" OPTIONS="RA"> <INFO NAME="DPR_FILENAME">c:\docs\Image_0001.jpg</INFO> <INFO NAME="DPR_FILETYPE">JPG</INFO> <DESCRIPTION>Test description of the form</description> <RECIPIENT NAME="AGENT" COPYCOUNT="1"/> <RECIPIENT NAME="HOME OFFICE" COPYCOUNT="1"/> </FORM> NOTE:If you are using relative paths in the file name, the path has to be relative to the directory where Docupresentment is running. Storing the File in a Documanage Repository Include these tags in the form s metadata to specify how to locate the file: Tag DMG_CABINET DMG_DOCID DMG_VERSION DMG_REVISION DMG_VERS Description The name of the Documanage cabinet. The value of the Documanage DOCID. The major version of the document. The minor version of the document. The minor and major version of the document. The format is minor.major, such as 1.0 or 2.5. If this value is present, the values of DMG_VERSION and DMG_REVISION are ignored. Here is an example fragment of an XML import file with this information. <FORM NAME="Test with Documanage" OPTIONS="RA"> <INFO NAME="DMG_CABINET">DOCCDEMO</INFO> <INFO NAME="DMG_DOCID">22401</INFO> <INFO NAME="DMG_VERSION">1</INFO> <INFO NAME="DMG_REVISION">0</INFO> <DESCRIPTION>Test description of the form</description> <RECIPIENT NAME="AGENT" COPYCOUNT="1"/> <RECIPIENT NAME="HOME OFFICE" COPYCOUNT="1"/> </FORM> Here is another example with the DOC_VERS value: <FORM NAME="Test with Documanage" OPTIONS="RA"> 234

251 Attaching Files to Transactions as Forms <INFO NAME="DMG_CABINET">DOCCDEMO</INFO> <INFO NAME="DMG_DOCID">22401</INFO> <INFO NAME="DMG_VERS >1.0</INFO> <DESCRIPTION>Test description of the form</description> <RECIPIENT NAME="AGENT" COPYCOUNT="1"/> <RECIPIENT NAME="HOME OFFICE" COPYCOUNT="1"/> </FORM> Note that to use the file in Documanage, the Documanage Bridge must be available on the same Docupresentment server. The Documaker Bridge executes these Documanage Bridge rules when it encounters the form with the metadata. No configuration changes are needed: DmgBrsCopyAttachment DmgBrsValidateSession DmgBrsCacheContentsFile You do not have to specify the file type in this case, the Documanage document type is used instead. Error Messages These error messages can be produced by the DPR rules listed above if the attached form did not work or was specified incorrectly. Message DPR0097 DPR0098 DPR0099 DPR0100 DPR0101 DPR0102 Description Attachment form <FORM> metadata specified the DSI attachment variable <VARIABLE> but this variable was not found. The file will not be loaded. Attachment form <FORM> metadata specified the DSI file attachment with the delimiter <VARIABLE> but this file was not attached to the DSI message. The file will not be loaded. Attachment form <FORM>metadata is missing the required value <INFO>. The file will not be loaded. Failed to load the attached file specified by the attachment form <FORM>. File name <FILE> of type <TYPE>. Failed to load the dynamic link library <LIBRARY>. Cannot locate variable <VARIABLE> in the attachment list after executing the Documanage Bridge rules. Examine the Documanage Bridge errors. Specifying Duplex Options for the Attached Form When it contains multiple pages, the attached form might have to be printed in duplex mode. The duplex options in Documaker are specified on sections (images), so to provide the duplex information the form in XML must specify a section and section duplex options. Your choices are: 235

252 Chapter 5 Customizing idocumaker, ipps, and WIP Edit F front B back T short bind If there are no options or no section is specified, the rule assumes simplex mode. At the end of the options you must to specify #1 to indicate it is a dummy image. Here is an example: (OPTIONS= S#1 ) The name of the section is ignored. Here are a few examples: Start on back page bind example Long bind example Short bind example <FORM NAME="Test with PDF filename" OPTIONS="RA"> <INFO NAME="DPR_FILENAME"> mytifftest.tif</info> <DESCRIPTION>Test of TIFF form</description> <RECIPIENT NAME="AGENT" COPYCOUNT="1"/> <RECIPIENT NAME="INSURED" COPYCOUNT="1"/> <SHEET> <PAGE> <SECTION NAME="TESTSECTION" OPTIONS="B#1"/> </PAGE> </SHEET> </FORM> <FORM NAME="Test with PDF filename" OPTIONS="RA"> <INFO NAME="DPR_FILENAME"> mytifftest.tif</info> <DESCRIPTION>Test of TIFF form</description> <RECIPIENT NAME="AGENT" COPYCOUNT="1"/> <RECIPIENT NAME="INSURED" COPYCOUNT="1"/> <SHEET> <PAGE> <SECTION NAME="TESTSECTION" OPTIONS="F#1"/> </PAGE> </SHEET> </FORM> <FORM NAME="Test with PDF filename" OPTIONS="RA"> <INFO NAME="DPR_FILENAME"> mytifftest.tif</info> <DESCRIPTION>Test of TIFF form</description> <RECIPIENT NAME="AGENT" COPYCOUNT="1"/> <RECIPIENT NAME="INSURED" COPYCOUNT="1"/> <SHEET> <PAGE> <SECTION NAME="TESTSECTION" OPTIONS="T#1"/> </PAGE> </SHEET> </FORM> Debugging Include this INI option in the DAP INI files to help you resolve any problems. < Debug > DPRProcessFormsetAttachments = Yes 236

253 Attaching Files to Transactions as Forms The default is No. If you enter Yes, the NA and POL files are unloaded with the names dprattach.dat and dprattach.pol. Here is an example of the log file (dprtrc.log) the system produces: DPRProcessFormsetAttachments: DMG_CABINET=<DOCCDEMO> Form <Test with Documanage>. Adding CABINET attachment variable DPRProcessFormsetAttachments: DMG_DOCID=<22401> Form <Test with Documanage>. Adding DOC_ID attachment variable DPRProcessFormsetAttachments: DMG_VERSION=<1> Form <Test with Documanage>. Adding DOC_MAJORVERSION attachment variable DPRProcessFormsetAttachments: DMG_REVISION=<0> Form <Test with Documanage>. Adding DOC_MINORVERSION attachment variable DMG Rule DmgBrsCopyAttachment(DSI_MSGINIT) Time spent: DMG Rule DmgBrsValidateSession(DSI_MSGINIT) Time spent: DMG Rule DmgBrsCacheContentsFile(DSI_MSGINIT) Time spent: DMG Rule DmgBrsCopyAttachment(DSI_MSGRUNF) Time spent: DMG Rule DmgBrsValidateSession(DSI_MSGRUNF) Time spent: DMG Rule DmgBrsCacheContentsFile(DSI_MSGRUNF) Time spent: DPRProcessFormsetAttachments: found Documanage bridge attachment variables CONTENTS_DECOMPRESSED_PATH=<cache\22401f0v1x0.tif> and CONTENTS_DECOMPRESSED_TYPE=<TIF> DMG Rule DmgBrsCacheContentsFile(DSI_MSGRUNR) Time spent: DMG Rule DmgBrsValidateSession(DSI_MSGRUNR) Time spent: DMG Rule DmgBrsCopyAttachment(DSI_MSGRUNR) Time spent: DMG Rule DmgBrsCacheContentsFile(DSI_MSGTERM) Time spent: DMG Rule DmgBrsValidateSession(DSI_MSGTERM) Time spent: DMG Rule DmgBrsCopyAttachment(DSI_MSGTERM) Time spent:

254 Chapter 5 Customizing idocumaker, ipps, and WIP Edit DESIGNATING READ-ONLY MULTILINE TEXT FIELD PARAGRAPHS The following attributes are included in the XML export file on the <P> tag for readonly multiline text field paragraphs: contenteditable="false" unselectable="on" These attributes are used by ipps and idocumaker TERSUB functionality to prevent a user from selecting or modifying the paragraphs. Here is an example: <P contenteditable="false" unselectable="yes" /> 238

255 Printing on Your Workstation Printer PRINTING ON YOUR WORKSTATION PRINTER When using ipps or idocumaker, you can send print files to workstation printers. The print files are created on the server, downloaded, and then printed on your workstation s printer. The system displays the Printer window so you can select the printer you want to use or cancel the print job. The printer you select must support either PCL or PostScript. The print files have a DPP file extension and will be in PCL or PostScript format. This DPP file is generated by IDS via a request from ipps or idocumaker. There are no changes on the client side (plug-in) you need to make. NOTE:When you install or update ipps or idocumaker, the installation process creates the necessary file association. 239

256 Chapter 5 Customizing idocumaker, ipps, and WIP Edit PREVENTING THE SESSION FROM EXPIRING You can prevent the web server session from timing out when you are working on documents in idocumaker. The time-out occurs if you leave the document open in idocumaker for an interval longer than the time the web server allows a session to remain active. For instance, when a session times out, a save request will fail. The session is kept current by telling idocumaker to contact the web server when you change the current page. To do this, set this INI option in the CONFIG.INI file: < INI2XML > RefreshScript = iwip18/test.htm NOTE:The value of the RefreshScript option is specfic to your installation. The value shown above is only an example. By default, idocumaker will not contact the web server if it has done so in the last five minutes. You can change this interval using this INI option in the WIPEDIT.INI file. < WIPEdit > RefreshSessionTime = 600 Specify the interval in seconds. The example above specifies an interval of 600 seconds, or 10 minutes. 240

257 Passing WIP Record IDs to the MergeWIP Rule PASSING WIP RECORD IDS TO THE MERGEWIP RULE idocumaker can designate a single WIP transaction to be processed by Documaker. IDS then passes the WIP record ID to Documaker so the MergeWIP rule will process that record. This table describes how it works: On the... This happens IDS side Documaker Server side The RPDCreateJob rule checks the WIPRECORDID input attachment variable and adds the XML element <WIPRECORDID> to the job ticket. Keep in mind that the WIPRECORDID input attachment variable is required when the RPD request is submitted. This requirement is in addition to the normal requirements for running Documaker as a subordinate process of IDS. The ServerJobProc rule receives the job ticket and looks for the WIPRECORDID variable. If WIPRECORDID is found, the rule creates the WIPRECORDID GVM. The MergeWIP rule uses the WIPRECORDID GVM to retrieve the WIP record for batch processing by Documaker. NOTE:This only affects Documaker when you are running Documaker via IDS. For more information about the MergeWIP rule, see the Rules Reference. For more information about running Documaker Server as a subordinate process of IDS, see Using IDS to Run Documaker on page

258 Chapter 5 Customizing idocumaker, ipps, and WIP Edit AUTOMATICALLY UPDATING IDOCUMAKER You can use IDS to update a user s workstation with a new version of the idocumaker executables. Users are notified of an update when a document is opened if a new version has been made available by the administrator. NOTE:You must be using version 11.2 or higher of idocumaker to use the automatic update feature. The user can then begin the installation by clicking the Begin Installation button. If the user clicks Exit, the update is skipped until he or she opens the next document. CONFIGURING IDS TO UPDATE IDOCUMAKER To configure IDS to update idocumaker, follow these steps: 1 Select the location where the idocumaker executables will be kept under IDS. This example shows the default location if IDS is running from the \docserv directory. Docserv\data\CONFIG\wipedit If you need to change this you can set the following INI option in the configurationspecific INI file: < WIPEdit > ExecDir = d:\docserv\data\sampco\wipedit Option ExecDir Description This option tells the update utility (VERSUPD) where the executables are located. 2 Copy the executables for idocumaker into this directory. IDS keeps a file that contains version information for these executables. The contents of this file are included inside the DPW file. The presence of this file determines whether the update process occurs. Here is the default path for this file: Docserv\data\CONFIG\CONFIG.wipedit If this is not an acceptable location you must set the following INI option in the CONFIG.INI file to the appropriate location: < WIPEdit > VersionFile = d:\docserv\data\sampco 3 The update program needs to know the location of the installation file from the web server so you must set up the following INI options. To set up these options, you must know the web site address and the relative path to the installation file within the web site. < INI2XML > DownloadURL DownloadScript DownloadUserID DownloadPassword = localhost = doc-prog/data/sampco/wipedit.dpi = (user ID) = (password) 242

259 Automatically Updating idocumaker Option DownloadURL DownloadScript DownloadUserID DownloadPassword Description You can enter the web site address or a machine name on the network. For example, you could enter localhost, pd.docucorp.com, or an IP address. The exact value is specific to your implementation. This option is similar to the PUTURL option which may already be in the INI2XML control group. This is the part of the URL which points to the location within the host for the installation file. It should contain the name of the installation file. This is similar to the SCRIPT option which usually points to the wipsave.asp or wipsave.jsp file for idocumaker Workstation. The exact value is specific to your implementation. Enter the user ID for authentication purposes. This entry may be encrypted. Enter the password for authentication purposes. This entry may be encrypted. Here is an example of how you can use the CRYRUW32 utility at a command prompt to encrypt the data: C:\docserv1.8>cryruw32 password Encrypted string (2XAUnkxUYlx7i5AnQ4m4E1m00) 4 Next, use the VERSUPD utility to build the installation file and version file. NOTE:For more information about these utilities, see the Utilities Reference. ON THE CLIENT SIDE When idocumaker is installed the version information is stored in registry. When idocumaker parses the DPW file, it finds the most current version according to IDS. It then compares the version stored under IDS and the local version. If there is a discrepancy, idocumaker s installation tool starts. The installation tool performs these steps: Downloads the archived file of idocumaker executables. Backs up the current idocumaker executable directory. Makes sure you have write access to all of the program files for idocumaker. Erases all of the files in idocumaker's executable directory. Installs the new executables. Updates the local version information in the registry. 243

260 Chapter 5 Customizing idocumaker, ipps, and WIP Edit Once you have set up IDS to automatically update idocumaker, those computers with version 11.2 or higher of idocumaker display the following window when you open a document. Click the Begin Installation button to update idocumaker. Click Exit to skip the update. The next time the user tries to open a document, IDS will again prompt the user to update idocumaker. Additional Utilities You can also use these additional utilities: The VERS2REG utility gets the local version information and updates the registry. This utility executes on the workstation side from a command prompt. Typically, it is only executed during the original installation of idocumaker. You can, however, start it from a command prompt. The UPDWDT utility gets the idocumaker installation file from the IDS and then updates idocumaker. NOTE:For more information about these utilities, see the Utilities Reference. CHECKING VERSION INFORMATION You can use the WDTValidateDPI API to check the version information for idocumaker from a menu. Place this API function in the WIPEDIT.RES file. When you use this function, these tests are performed: 1 Make sure local version information has been created. This identifies whether the VERS2REG utility has been run during the install process. If the version information does not exist, this message appears: Local version information does not exist for plug-in 2 Make sure the server version information has been updated. This indicates that server information was created and downloaded in the DPW file. If the version information cannot be found, this message appears: Version information does not exist on the server for plug-in 3 Compare server side information with local version information. If the version information matches, this message appears: You are running the correct version of the plug-in 244

Internet Document Server Guide

Internet Document Server Guide Start Oracle Documaker Internet Document Server Guide version 2.2 Part number: E14902-01 May 2009 s Notice Copyright 2009, Oracle. All rights reserved. The Programs (which include both the software and

More information

Installing and Deploying idocumaker

Installing and Deploying idocumaker Start Oracle Documaker Installing and Deploying idocumaker version 3.2 Part number: E14902-01 May 2009 s Notice Copyright 2009, Oracle. All rights reserved. The Programs (which include both the software

More information

OIPA System Requirements. Oracle Insurance Policy Administration - Life Release 8.1 E May 2009

OIPA System Requirements. Oracle Insurance Policy Administration - Life Release 8.1 E May 2009 OIPA System Requirements Oracle Insurance Policy Administration - Life Release 8.1 E14444-01 May 2009 Oracle Insurance Policy Administration Release V8.1 Copyright 2009, Oracle. All rights reserved. License

More information

Siebel Application Deployment Manager Guide. Version 8.0, Rev. A April 2007

Siebel Application Deployment Manager Guide. Version 8.0, Rev. A April 2007 Siebel Application Deployment Manager Guide Version 8.0, Rev. A April 2007 Copyright 2005, 2006, 2007 Oracle. All rights reserved. The Programs (which include both the software and documentation) contain

More information

JD Edwards World User Reserved Information. Version A9.2

JD Edwards World User Reserved Information. Version A9.2 JD Edwards World User Reserved Information Version A9.2 Revised June 30, 2009 Copyright Notice Copyright 2009, Oracle. All rights reserved. Trademark Notice Oracle is a registered trademark of Oracle Corporation

More information

JD Edwards World EDI Error Notification. Version A9.2

JD Edwards World EDI Error Notification. Version A9.2 JD Edwards World EDI Error Notification Version A9.2 Revised June 8, 2009 Copyright Notice Copyright 2009, Oracle. All rights reserved. Trademark Notice Oracle is a registered trademark of Oracle Corporation

More information

Oracle Information Rights Management Oracle IRM Windows Authentication Extension Guide 10gR3 August 2008

Oracle Information Rights Management Oracle IRM Windows Authentication Extension Guide 10gR3 August 2008 10gR3 August 2008 ,, 10gR3 Copyright 2007, 2008, Oracle. All rights reserved. Primary Author: Martin Abrahams Contributing Author: Martin Wykes The Programs (which include both the software and documentation)

More information

Governance, Risk, and Compliance Controls Suite. Hardware and Sizing Recommendations. Software Version 7.2

Governance, Risk, and Compliance Controls Suite. Hardware and Sizing Recommendations. Software Version 7.2 Governance, Risk, and Compliance Controls Suite Hardware and Sizing Recommendations Software Version 7.2 GRC Controls Suite Hardware and Sizing Recommendations Part No. AG014-720B Copyright 2007, 2008,

More information

Primavera Portfolio Management Reporting Views for SQL Server databases

Primavera Portfolio Management Reporting Views for SQL Server databases Portfolio Management Reporting Views for SQL Server Databases 16 R1 Copyright 1999-2016, Oracle and/or its affiliates. The Programs (which include both the software and documentation) contain proprietary

More information

PDF Quick Reference. Oracle Health Sciences InForm CRF Submit Release Part Number: E

PDF Quick Reference. Oracle Health Sciences InForm CRF Submit Release Part Number: E PDF Quick Reference Oracle Health Sciences InForm CRF Submit Release 3.1.2 Part Number: E40031-01 Contents Contents PDFs and Adobe Reader 1 PDF file structure... 1 Opening a PDF... 2 Printing a PDF...

More information

AutoVue Integration SDK. Security and Authentication Guide

AutoVue Integration SDK. Security and Authentication Guide AutoVue Integration SDK Security and Authentication Guide February 28, 2011 Page 2 Copyright 1998, 2011, Oracle and/or its affiliates. All rights reserved. The Programs (which include both the software

More information

GRCC Reporting Framework BIP for GRCC Admin/Implementation Guide

GRCC Reporting Framework BIP for GRCC Admin/Implementation Guide GRCC Reporting Framework BIP for GRCC Admin/Implementation Guide GRCC Reporting Framework BIP for GRCC Admin/Implementation Guide Copyright 2009 Oracle Corporation and/or its affiliates. All rights reserved.

More information

USING ADMINISTRATOR FEATURES

USING ADMINISTRATOR FEATURES HYPERION FINANCIAL MANAGEMENT SYSTEM 9 RELEASE 9.3.1 USING ADMINISTRATOR FEATURES Oracle's Hyperion Financial Management System 9 Release 9.3 contains significant enhancements to administrator features

More information

Content Synchronization and Syndication User Guide

Content Synchronization and Syndication User Guide Prodika Product Lifecycle Management Content Synchronization and Syndication User Guide Release 5.1 Part No. TPPR-0021-5.1A Make sure you check for updates to this manual at the Oracle Documentation Web

More information

Cover Page. Video Manager User Guide 10g Release 3 ( )

Cover Page. Video Manager User Guide 10g Release 3 ( ) Cover Page Video Manager User Guide 10g Release 3 (10.1.3.3.0) March 2007 Video Manager User Guide, 10g Release 3 (10.1.3.3.0) Copyright 2007, Oracle. All rights reserved. Contributing Authors: Bruce Silver

More information

equestionnaire User Guide

equestionnaire User Guide Prodika Product Lifecycle Management equestionnaire User Guide Release 5.1 Part Number: TPPR-0045-5.1A Make sure you check for updates to this manual at the Oracle Documentation Web site Copyrights and

More information

Products Included in the Installation Program

Products Included in the Installation Program Oracle Fusion Middleware Getting Started With Installation for Oracle WebLogic Server 11g Release 1 (10.3.1) E13751-01 May 2009 This guide provides an overview of the WebLogic Server installation process

More information

Oracle Business Intelligence Publisher. 1 Oracle Business Intelligence Publisher Certification. Certification Information 10g Release 3 (

Oracle Business Intelligence Publisher. 1 Oracle Business Intelligence Publisher Certification. Certification Information 10g Release 3 ( Oracle Business Intelligence Publisher Certification Information 10g Release 3 (10.1.3.4.1) E12692-06 July 2009 This document outlines the certified hardware and software configurations for Oracle Business

More information

Primavera Portfolio Management 9.1 Bridge for Microsoft Office Project Server 2007 Users Guide

Primavera Portfolio Management 9.1 Bridge for Microsoft Office Project Server 2007 Users Guide Primavera Portfolio Management 9.1 Bridge for Microsoft Office Project Server 2007 Users Guide Last printed: 7/28/2011 11:37:00 PM Last saved: 7/28/2011 11:37:00 PM ii Primavera Portfolio Management Bridge

More information

Oracle Retail Replenishment Optimization Installation Guide Release April 2008

Oracle Retail Replenishment Optimization Installation Guide Release April 2008 Oracle Retail Replenishment Optimization Installation Guide Release 13.0 April 2008 Oracle Replenishment Optimization Installation Guide, Release 13.0 Copyright 2008, Oracle. All rights reserved. Primary

More information

New Features in Primavera Professional 15.2

New Features in Primavera Professional 15.2 New Features in Primavera Professional 15.2 COPYRIGHT & TRADEMARKS Copyright 2015, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates.

More information

Cover Page. Oracle Report Parser System Administration Guide 10g Release 3 ( ) March 2007

Cover Page. Oracle Report Parser System Administration Guide 10g Release 3 ( ) March 2007 Cover Page Oracle Report Parser System Administration Guide 10g Release 3 (10.1.3.3.0) March 2007 Oracle Report Parser System Administration Guide, 10g Release 3 (10.1.3.3.0) Copyright 2007, Oracle. All

More information

Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.

Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Primavera Portfolio Management 9.0 What s New Copyright 1999-2011, Oracle and/or its affiliates. The Programs (which include both the software and documentation) contain proprietary information; they are

More information

Oracle Enterprise Manager

Oracle Enterprise Manager Oracle Enterprise Manager Management Agent Download Installation Readme 10g Release 2 (10.2) B25953-02 September 2007 This document describes how to add additional Host targets to the Enterprise Manager

More information

Oracle Fusion Middleware

Oracle Fusion Middleware Oracle Fusion Middleware What's New in Oracle WebLogic Server 11g Release 1 (10.3.5) E13852-07 April 2011 Welcome to Oracle WebLogic Server. The following sections describe new and changed functionality

More information

Overview of the Plug-In. Versions Supported

Overview of the Plug-In. Versions Supported Oracle Enterprise Manager System Monitoring Plug-In Installation Guide for Exadata Power Distribution Unit Release 11.1.0.2.0 E20087-03 March 2011 Overview of the Plug-In This plug-in will be used to monitor

More information

Cover Page. Content Server User Guide 10g Release 3 ( )

Cover Page. Content Server User Guide 10g Release 3 ( ) Cover Page Content Server User Guide 10g Release 3 (10.1.3.3.0) March 2007 Content Server User Guide, 10g Release 3 (10.1.3.3.0) Copyright 2007, Oracle. All rights reserved. Contributing Authors: Bruce

More information

Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.

Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Primavera Portfolio Management 9.1 Configuring VMware Copyright 1999-2014, Oracle and/or its affiliates. The Programs (which include both the software and documentation) contain proprietary information;

More information

IVS Explorer User s Guide. Oracle Insurance Policy Administration - Life Release 8.1 E May 2009

IVS Explorer User s Guide. Oracle Insurance Policy Administration - Life Release 8.1 E May 2009 IVS Explorer User s Guide Oracle Insurance Policy Administration - Life Release 8.1 E14444-01 May 2009 Oracle Insurance Policy Administration - Life Release V8.1 Copyright 2009, Oracle. All rights reserved.

More information

Oracle Siebel Retail Finance

Oracle Siebel Retail Finance Oracle Siebel Retail Finance System Requirements and Supported Platforms Release 8.1.1 for Siebel Branch Teller E20079-01 September 2011 Siebel Retail Finance Branch Teller System Requirements and Supported

More information

Oracle is a registered trademark, and Oracle Rdb, Oracle RMU and Oracle SQL/Services are trademark or registered trademarks of Oracle Corporation.

Oracle is a registered trademark, and Oracle Rdb, Oracle RMU and Oracle SQL/Services are trademark or registered trademarks of Oracle Corporation. Oracle Rdb Data Provider for.net Release Notes V7.3 August 2007 Oracle Rdb Data Provider for.net Release Notes, Release 7.3 Copyright 2007 Oracle Corporation. All rights reserved. The Programs (which include

More information

Oracle AutoVue VueLink 20.0 for ENOVIA

Oracle AutoVue VueLink 20.0 for ENOVIA Oracle AutoVue VueLink 20.0 for ENOVIA User s Manual An Integration between ENOVIA PLM and Oracle AutoVue Copyright 1998, 2010, Oracle and/or its affiliates. All rights reserved. The Programs (which include

More information

Siebel Brightware. Implementation Readiness Guide. Version 8.1.6

Siebel Brightware. Implementation Readiness Guide. Version 8.1.6 Siebel Brightware Implementation Readiness Guide Version 8.1.6 Copyright 2005, 2006, Oracle. All rights reserved. The Programs (which include both the software and documentation) contain proprietary information;

More information

Administrator Guide. Oracle Health Sciences Central Designer 2.0. Part Number: E

Administrator Guide. Oracle Health Sciences Central Designer 2.0. Part Number: E Administrator Guide Oracle Health Sciences Central Designer 2.0 Part Number: E37912-01 Copyright 2013, Oracle and/or its affiliates. All rights reserved. The Programs (which include both the software and

More information

Oracle Business Activity Monitoring

Oracle Business Activity Monitoring Oracle Business Activity Monitoring Administrator's Guide 10g (10.1.3.1.0) B28991-01 September 2006 Oracle Business Activity Monitoring Administrator's Guide, 10g (10.1.3.1.0) B28991-01 Copyright 2002,

More information

Enterprise SA Running Reports Created on 2/4/2010 9:13:00 AM

Enterprise SA Running Reports Created on 2/4/2010 9:13:00 AM Created on 2/4/2010 9:13:00 AM COPYRIGHT & TRADEMARKS Copyright 1998, 2009, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates.

More information

Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.

Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Primavera Portfolio Management 9.1 Data Mapping and Data Flow for the Bridge for Primavera P6 Copyright 1999-2014, Oracle and/or its affiliates. The Programs (which include both the software and documentation)

More information

JD Edwards World Minimum Technical Requirements. Versions A9.2 and A9.2.1

JD Edwards World Minimum Technical Requirements. Versions A9.2 and A9.2.1 JD Edwards World Minimum Technical Requirements Versions A9.2 and A9.2.1 Revised October 12, 2010 Copyright Notice Copyright 2009, Oracle. All rights reserved. Trademark Notice Oracle is a registered trademark

More information

Oracle Enterprise Manager Ops Center. Introduction. What You Will Need. Creating vservers 12c Release 1 ( )

Oracle Enterprise Manager Ops Center. Introduction. What You Will Need. Creating vservers 12c Release 1 ( ) Oracle Enterprise Manager Ops Center Creating vservers 12c Release 1 (12.1.4.0.0) E27357-02 June 2013 This guide provides an end-to-end example for how to use Oracle Enterprise Manager Ops Center. Introduction

More information

Oracle Retail Demand Forecasting Installation Guide Release June 2007

Oracle Retail Demand Forecasting Installation Guide Release June 2007 Oracle Retail Demand Forecasting Installation Guide Release 12.1 June 2007 Oracle Retail Demand Forecasting Installation Guide, Release 12.1 Copyright 2007, Oracle. All rights reserved. Primary Author:

More information

Oracle Agile Product Lifecycle Management for Process Content Synchronization and Syndication User Guide Release E

Oracle Agile Product Lifecycle Management for Process Content Synchronization and Syndication User Guide Release E Oracle Agile Product Lifecycle Management for Process Content Synchronization and Syndication User Guide Release 6.1.0.1 E27853-01 March 2012 Oracle Agile Product Lifecycle Management for Process Content

More information

Release Notes. Oracle Insurance Policy Administration Release 8.1 E May 2009

Release Notes. Oracle Insurance Policy Administration Release 8.1 E May 2009 Release Notes Oracle Insurance Policy Administration Release 8.1 E14444-01 May 2009 Oracle Insurance Policy Administration Copyright 2009, Oracle. All rights reserved. License Restrictions & Warranty Disclaimer

More information

Cover Page. Content Publisher Installation and Configuration Guide 10g Release 3 ( )

Cover Page. Content Publisher Installation and Configuration Guide 10g Release 3 ( ) Cover Page Content Publisher Installation and Configuration Guide 10g Release 3 (10.1.3.3.0) March 2007 Content Publisher Installation and Configuration Guide, 10g Release 3 (10.1.3.3.0) Copyright 2007,

More information

Oracle Universal Records Management Oracle Universal Records Management Adapter for SharePoint Administration Guide 10g Release 3 (

Oracle Universal Records Management Oracle Universal Records Management Adapter for SharePoint Administration Guide 10g Release 3 ( Cover Page Oracle Universal Records Management Oracle Universal Records Management Adapter for SharePoint Administration Guide 10g Release 3 (10.1.3.3.0) March 2007 Oracle Universal Records Management

More information

March 2011

March 2011 Oracle Enterprise Single Sign-on Logon Manager Best Practices: Configuring the ESSO-LM Agent Release 11.1.1.5.0 21004-01 March 2011 Oracle Enterprise Single Sign-on Logon Manager Best Practices: Configuring

More information

VMware vcenter Log Insight Manager. Deployment Guide

VMware vcenter Log Insight Manager. Deployment Guide VMware vcenter Log Insight Manager Deployment Guide VERSION: 6.0 UPDATED: JULY 2016 Copyright Notices Copyright 2002-2016 KEMP Technologies, Inc.. All rights reserved.. KEMP Technologies and the KEMP Technologies

More information

Oracle Utilities Smart Grid Gateway

Oracle Utilities Smart Grid Gateway Oracle Utilities Smart Grid Gateway Quick Installation Guide Release 2.0.0 Service Pack 9 E20524_09 May 2013 Updated July 2013 Oracle Utilities Smart Grid Gateway Quick Installation Guide E20524_09 Copyright

More information

Using the Documaker XTension with QuarkXPress

Using the Documaker XTension with QuarkXPress Start Oracle Documaker Using the Documaker XTension with QuarkXPress Part number: E41180-01 August 2013 Notice Copyright 2009, 2013, Oracle and/or its affiliates. All rights reserved. The Programs (which

More information

End User License Agreement

End User License Agreement End User License Agreement Kyocera International, Inc. ( Kyocera ) End User License Agreement. CAREFULLY READ THE FOLLOWING TERMS AND CONDITIONS ( AGREEMENT ) BEFORE USING OR OTHERWISE ACCESSING THE SOFTWARE

More information

Configuration Fixes for Encryption

Configuration Fixes for Encryption Oracle Retail Point-of-Sale Release Notes Release 7.2.2 April 2007 This document lists the fixed defects included in Release 7.2.2 of Oracle Retail Point-of-Sale. Before installing this release, confirm

More information

Packet Trace Guide. Packet Trace Guide. Technical Note

Packet Trace Guide. Packet Trace Guide. Technical Note Packet Trace Guide Technical Note VERSION: 2.0 UPDATED: JANUARY 2016 Copyright Notices Copyright 2002-2016 KEMP Technologies, Inc.. All rights reserved.. KEMP Technologies and the KEMP Technologies logo

More information

Start. Oracle Documaker. Utilities Reference. version 12.0

Start. Oracle Documaker. Utilities Reference. version 12.0 Start Oracle Documaker Utilities Reference version 12.0 Part number: E17552-01 September 2011 Notice Copyright 2009, 2011, Oracle and/or its affiliates. All rights reserved. The Programs (which include

More information

Oracle Enterprise Manager

Oracle Enterprise Manager Oracle Enterprise Manager System Monitoring Plug-in Installation Guide for VMware ESX Server Release 5 (1.0.3.0.0) to Release 8 (1.1.3.2.0) E13339-05 November 2009 This document is the installation guide

More information

Configuring Oracle Java CAPS Master Index (Repository) Connectivity and Environments

Configuring Oracle Java CAPS Master Index (Repository) Connectivity and Environments Configuring Oracle Java CAPS Master Index (Repository) Connectivity and Environments Part No: 8 9 March 0 Copyright 008, 0, Oracle and/or its affiliates. All rights reserved. License Restrictions Warranty/Consequential

More information

New Features in Primavera P6 16.2

New Features in Primavera P6 16.2 New Features in Primavera P6 16.2 COPYRIGHT & TRADEMARKS Copyright 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates.

More information

Oracle Enterprise Manager. 1 Introduction. System Monitoring Plug-in for Oracle Enterprise Manager Ops Center Guide 11g Release 1 (

Oracle Enterprise Manager. 1 Introduction. System Monitoring Plug-in for Oracle Enterprise Manager Ops Center Guide 11g Release 1 ( Oracle Enterprise Manager System Monitoring Plug-in for Oracle Enterprise Manager Ops Center Guide 11g Release 1 (11.1.3.0.0) E18950-03 November 2011 This document provides describes the System Monitoring

More information

Designing with Oracle Java CAPS Communication Adapters

Designing with Oracle Java CAPS Communication Adapters Designing with Oracle Java CAPS Communication Adapters Part No: 821 2579 March 2011 Copyright 2008, 2011, Oracle and/or its affiliates. All rights reserved. License Restrictions Warranty/Consequential

More information

Oracle Fusion Middleware

Oracle Fusion Middleware Oracle Fusion Middleware Configuration Guide for IBM WebSphere Application Server 11g Release 1 (11.1.1) E17764-01 January 2011 This document describes how to use the Oracle Fusion Middleware Configuration

More information

Oracle Hospitality OPERA Exchange Interface Cloud Authentication. October 2017

Oracle Hospitality OPERA Exchange Interface Cloud Authentication. October 2017 Oracle Hospitality OPERA Exchange Interface Cloud Authentication October 2017 Copyright 2016, 2017, Oracle and/or its affiliates. All rights reserved. This software and related documentation are provided

More information

Oracle Supplier Network

Oracle Supplier Network Oracle Supplier Network Buyer s Guide to Connecting 11i Release 4.3 Part No. B19153-01 June 2005 Oracle Supplier Network Buyer s Guide to Connecting 11i, Release 4.3 Part No. B19153-01 Copyright 2005,

More information

JavaFX. JavaFX Overview Release E

JavaFX. JavaFX Overview Release E JavaFX JavaFX Overview Release 2.2.21 E20479-06 April 2013 Learn about the JavaFX 2 and later technology, read a feature summary, explore the sample applications, and follow the high-level steps to create

More information

Moodle. Moodle. Deployment Guide

Moodle. Moodle. Deployment Guide Moodle Deployment Guide VERSION: 6.0 UPDATED: MARCH 2016 Copyright Notices Copyright 2002-2016 KEMP Technologies, Inc.. All rights reserved.. KEMP Technologies and the KEMP Technologies logo are registered

More information

Oracle Enterprise Single Sign-on Logon Manager

Oracle Enterprise Single Sign-on Logon Manager Oracle Enterprise Single Sign-on Logon Manager User s Guide Release 10.1.4.0.4 E10562-01 November 2007 Oracle Enterprise Single Sign-on Logon Manager User s Guide, Release 10.1.4.0.4 E10562-01 Copyright

More information

Cover Page. Oracle Universal Content Management Web Parts User Guide 10g Release 3 ( )

Cover Page. Oracle Universal Content Management Web Parts User Guide 10g Release 3 ( ) Cover Page Oracle Universal Content Management Web Parts User Guide 10g Release 3 (10.1.3.3.0) April 2007 Web Parts User Guide, 10g Release 3 (10.1.3.3.0) Copyright 2007, Oracle. All rights reserved. Contributing

More information

Product Collaboration User Guide

Product Collaboration User Guide Product Collaboration User Guide Agile 9.2.2.1 TP1137-9.2.2.1A Make sure you check for updates to this manual at the Oracle Technology Network Website Agile 9.2.2.1 COPYRIGHT AND TRADEMARKS Copyright 1995,

More information

Migration Tool. Migration Tool (Beta) Technical Note

Migration Tool. Migration Tool (Beta) Technical Note Migration Tool (Beta) Technical Note VERSION: 6.0 UPDATED: MARCH 2016 Copyright Notices Copyright 2002-2016 KEMP Technologies, Inc.. All rights reserved.. KEMP Technologies and the KEMP Technologies logo

More information

Siebel CRM Integration to Oracle FLEXCUBE Universal Banking Implementation Guide. Version 1.0 (Siebel CRM Version 8.2), Rev.

Siebel CRM Integration to Oracle FLEXCUBE Universal Banking Implementation Guide. Version 1.0 (Siebel CRM Version 8.2), Rev. CRM Integration to Universal Banking Implementation Guide Version 1.0 ( CRM Version 8.2), Rev. A December 2011 Copyright 2005, 2011 and/or its affiliates. All rights reserved. This software and related

More information

Oracle Enterprise Single Sign-on Logon Manager Best Practices: Deploying ESSO-LM with the Windows Authenticator Version 2 Release

Oracle Enterprise Single Sign-on Logon Manager Best Practices: Deploying ESSO-LM with the Windows Authenticator Version 2 Release Oracle Enterprise Single Sign-on Logon Manager Best Practices: Deploying ESSO-LM with the Windows Authenticator Version 2 Release 11.1.1.2.0 E20410-01 Oracle Enterprise Single Sign-on Logon Manager Best

More information

Cover Page. Legacy Integration Installation and User Guide 10g Release 3 ( )

Cover Page. Legacy Integration Installation and User Guide 10g Release 3 ( ) Cover Page Legacy Integration Installation and User Guide 10g Release 3 (10.1.3.3.0) March 2007 Legacy Integration Installation and User Guide, 10g Release 3 (10.1.3.3.0) Copyright 2007, Oracle. All rights

More information

Portal Administration Guide

Portal Administration Guide Portal Administration Guide InForm TM GTM 5.5 SP0 Part number: DC-INF55-015-000 Copyright 2002-2011, Oracle and/or its affiliates. All rights reserved. The Programs (which include both the software and

More information

Oracle Hospitality Suite8 Export to Outlook User Manual Release 8.9. July 2015

Oracle Hospitality Suite8 Export to Outlook User Manual Release 8.9. July 2015 Oracle Hospitality Suite8 Export to Outlook User Manual Release 8.9 July 2015 Copyright 1987, 2015, Oracle and/or its affiliates. All rights reserved. This software and related documentation are provided

More information

Business Processes and Rules: Siebel Enterprise Application Integration. Siebel Innovation Pack 2013 Version 8.1/8.

Business Processes and Rules: Siebel Enterprise Application Integration. Siebel Innovation Pack 2013 Version 8.1/8. Business Processes and Rules: Siebel Enterprise Application Integration Siebel Innovation Pack 2013 September 2013 Copyright 2005, 2013 Oracle and/or its affiliates. All rights reserved. This software

More information

Defining Constants and Variables for Oracle Java CAPS Environments

Defining Constants and Variables for Oracle Java CAPS Environments Defining Constants and Variables for Oracle Java CAPS Environments Part No: 821 2547 March 2011 Copyright 2008, 2011, Oracle and/or its affiliates. All rights reserved. License Restrictions Warranty/Consequential

More information

Oracle Retail Integration Bus Hospital Administration User Guide Release 12.0 May 2006

Oracle Retail Integration Bus Hospital Administration User Guide Release 12.0 May 2006 Oracle Retail Integration Bus Hospital Administration User Guide Release 12.0 May 2006 Copyright 2006, Oracle. All rights reserved. The Programs (which include both the software and documentation) contain

More information

QuarkXPress Server Manager 8.0 ReadMe

QuarkXPress Server Manager 8.0 ReadMe QuarkXPress Server Manager 8.0 ReadMe CONTENTS Contents QuarkXPress Server Manager 8.0 ReadMe...3 What's New in QuarkXPress Server Manager 8...4 Deprecated features, new stubs, and deploying SDK classes...4

More information

Oracle Transparent Gateway

Oracle Transparent Gateway Oracle Transparent Gateway Installation Guide 10g Release 2 (10.2) for Microsoft Windows (32-bit) B19083-01 August 2005 Oracle Transparent Gateway Installation Guide, 10g Release 2 (10.2) for Microsoft

More information

1 Review Information About this Guide

1 Review Information About this Guide Oracle Database Client Quick Installation Guide 11g Release 2 (11.2) for Microsoft Windows (32-Bit) E49704-01 September 2013 This guide describes how to quickly install the Oracle Database Client product

More information

Copyright PFU LIMITED

Copyright PFU LIMITED -------------------------------------------------------- PaperStream Capture 1.0.12 README File -------------------------------------------------------- Copyright PFU LIMITED 2013-2015 This file contains

More information

Oracle Hospitality MICROS Commerce Platform Release Notes Release Part Number: E December 2015

Oracle Hospitality MICROS Commerce Platform Release Notes Release Part Number: E December 2015 Oracle Hospitality MICROS Commerce Platform Release Notes Release 4.2.1 Part Number: E69448-01 December 2015 Copyright 2010, 2015, Oracle and/or its affiliates. All rights reserved. This software and related

More information

Oracle Retail Integration Bus Release Notes Release October 2006

Oracle Retail Integration Bus Release Notes Release October 2006 Oracle Retail Integration Bus Release Notes Release 12.0.1 October 2006 Oracle Retail Integration Bus Release Notes, Release 12.0.1 Copyright 2006, Oracle. All rights reserved. Primary Author: Randy Kapelke

More information

Oracle Payment Interface Token Proxy Service Security Guide Release 6.1 E November 2017

Oracle Payment Interface Token Proxy Service Security Guide Release 6.1 E November 2017 Oracle Payment Interface Token Proxy Service Security Guide Release 6.1 E87635-01 November 2017 Copyright 2017, Oracle and/or its affiliates. All rights reserved. This software and related documentation

More information

Oracle JRockit Mission Control

Oracle JRockit Mission Control Oracle JRockit Mission Control Installing Oracle JRockit Mission Control 3.0.3 June 2008 Oracle JRockit Mission Control Installing Oracle JRockit Mission Control, 3.0.3 Copyright 2007, 2008, Oracle and/or

More information

Oracle Retail Price Management. About Patch Releases. Release Notes Release

Oracle Retail Price Management. About Patch Releases. Release Notes Release Oracle Retail Price Management Release Notes Release 13.2.4 March 2012 Oracle Retail Price Management (RPM) Release 13.2.4 is a patch release for RPM 13.2. RPM 13.2.4 includes selected defect fixes and

More information

Oracle WebCenter WSRP Consumer

Oracle WebCenter WSRP Consumer Oracle WebCenter WSRP Consumer Installation Guide Release 10g Release 3 (10.3) October 2008 Installation Guide for Oracle WebCenter WSRP Consumer, Release 10g Release 3 (10.3) Copyright 2007, 2008, Oracle

More information

Oracle SL500/SL3000/SL8500 Security Guide E

Oracle SL500/SL3000/SL8500 Security Guide E Oracle SL500/SL3000/SL8500 Security Guide E23535-02 2012 Oracle SL500/SL3000/SL8500 Security Guide E23535-02 Copyright 2011, 2012 Oracle and/or its affiliates. All rights reserved. Primary Author: Robert

More information

Overview of the Plug-In. Versions Supported. Deploying the Plug-In

Overview of the Plug-In. Versions Supported. Deploying the Plug-In Oracle Enterprise Manager System Monitoring Plug-In Installation Guide for Exadata Avocent MergePoint Unity Switch Release 11.1.0.2.0 E20086-03 March 2011 Overview of the Plug-In The Avocent MergePoint

More information

Installing Enterprise Switch Manager

Installing Enterprise Switch Manager Installing Enterprise Switch Manager ATTENTION Clicking on a PDF hyperlink takes you to the appropriate page If necessary, scroll up or down the page to see the beginning of the referenced section NN47300-300

More information

Oracle Configuration Manager

Oracle Configuration Manager Oracle Configuration Manager Release Notes Release 12.1.2 E48356-03 June 2015 Oracle Configuration Manager personalizes and enhances the support experience by collecting configuration information and uploading

More information

1 Siebel Attachments Solution Overview

1 Siebel Attachments Solution Overview Oracle Fusion Middleware User's Guide for Oracle Enterprise Content Management Solutions for Oracle Siebel 11g Release 1 (11.1.1) E17067-01 May 2010 This document provides information on options available

More information

Oracle Fusion Middleware. 1 Introduction. 1.1 Supported Functionality and Intended Use. 1.2 Limitations

Oracle Fusion Middleware. 1 Introduction. 1.1 Supported Functionality and Intended Use. 1.2 Limitations Oracle Fusion Middleware Installation Notes for Oracle Business Intelligence Mobile App Designer Trial Edition 11g Release 1 (11.1.1) E49297-01 September 2013 Welcome to Installation Notes for Oracle Business

More information

Bar Code Discovery. Administrator's Guide

Bar Code Discovery. Administrator's Guide Bar Code Discovery Administrator's Guide November 2012 www.lexmark.com Contents 2 Contents Overview...3 Configuring the application...4 Configuring the application...4 Configuring Bar Code Discovery...4

More information

Oracle Financial Analyzer Oracle General Ledger

Oracle Financial Analyzer Oracle General Ledger Oracle Financial Analyzer Oracle General Ledger Integrating Oracle Financial Analyzer with Oracle General Ledger Release 11i October 2000 Part No. A86564-01 Integrating Oracle Financial Analyzer with Oracle

More information

VP-UML Installation Guide

VP-UML Installation Guide Visual Paradigm for UML 6.0 Installation Guide The software and documentation are furnished under the Visual Paradigm for UML license agreement and may be used only in accordance with the terms of the

More information

Installing the Shrew Soft VPN Client

Installing the Shrew Soft VPN Client Windows Install Installing the Shrew Soft VPN Client ShrewVPNWindows201211-01 Global Technology Associates 3505 Lake Lynda Drive Suite 109 Orlando, FL 32817 Tel: +1.407.380.0220 Fax. +1.407.380.6080 Email:

More information

Oracle Application Express

Oracle Application Express Oracle Application Express Administration Guide Release 5.1 E64918-04 June 2017 Oracle Application Express Administration Guide, Release 5.1 E64918-04 Copyright 2003, 2017, Oracle and/or its affiliates.

More information

Oracle Fail Safe. Tutorial. Release for Windows

Oracle Fail Safe. Tutorial. Release for Windows Oracle Fail Safe Tutorial Release 3.3.1 for Windows April 2002 Part No. Not Orderable This tutorial provides step-by-step instructions on using Oracle Fail Safe to make resources highly available. Oracle

More information

Oracle Database Express Edition

Oracle Database Express Edition Oracle Database Express Edition Getting Started Guide 11g Release 2 (11.2) E18585-04 July 2011 Welcome to Oracle Database Express Edition (Oracle Database XE). This guide gets you quickly up and running

More information

Oracle Argus Safety. Service Administrator s Guide Release E

Oracle Argus Safety. Service Administrator s Guide Release E Oracle Argus Safety Service Administrator s Guide Release 6.0.1 E15949-02 January 2011 Oracle Argus Safety Service Administrator's Guide Release 6.0.1 E15949-02 Copyright 2009, 2011 Oracle and/or its affiliates.

More information

BRF Crystal_Reporting_9_1

BRF Crystal_Reporting_9_1 Version Date: February 2014 COPYRIGHT & TRADEMARKS Copyright 1998, 2011, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates.

More information

Oracle Binary Code License Agreement for Java Secure Sockets Extension for Connected Device Configuration 1.0.2

Oracle Binary Code License Agreement for Java Secure Sockets Extension for Connected Device Configuration 1.0.2 Oracle Binary Code License Agreement for Java Secure Sockets Extension 1.0.3 for Connected Device Configuration 1.0.2 ORACLE AMERICA, INC. ("ORACLE"), FOR AND ON BEHALF OF ITSELF AND ITS SUBSIDIARIES AND

More information