Title Page

webMethods Developer
User’s Guide

Version 7.1.1

January 2008

webMethods

Copyright &  Docu‐ ment ID

This document applies to webMethods Developer Version 7.1.1 and webMethods Integration Server Version 7.1.1  and to all subsequent  releases.  Specifications contained herein are subject to change and these changes will be reported in subsequent release notes or new editions. © Copyright Software AG 2008. All rights reserved. The name Software AG and/or all Software AG product names are either trademarks or registered trademarks of Software AG. Other  company and product names mentioned herein may be trademarks of their respective owners. Document ID: DEV-UG-711-20080128

Table of Contents
About This Guide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Document Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Additional Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1. Getting Started with Developer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . What Is Developer? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Before You Use Developer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Starting Developer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . What Does the Developer Window Contain? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . The Navigation Panel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Navigation Panel Icons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Refreshing the Contents of the Navigation Panel . . . . . . . . . . . . . . . . . . . . . . . . . The UDDI Registry Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UDDI Registry Tab Icons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . The Recent Elements Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . The Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . The Properties Panel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . The Results Panel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Working in the Developer Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Moving Between Panels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Performing Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Resizing Areas in the Developer Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Hiding and Showing Panels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dragging Movable Borders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Switching Perspectives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Opening, Closing, and Restoring Sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Restoring a Session on a Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Notification of Server Shutdown . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Changing Your Password . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Password Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Using Online Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2. Managing Elements in the Navigation Panel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . What Is an Element? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Creating New Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . About Element Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Package Names and Element Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Guidelines for Naming Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Editing Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Specifying Dependency Checking Safeguards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Notes About Performing Actions on Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 15 16 17 18 18 19 21 22 22 25 25 26 27 27 29 31 31 31 32 33 33 33 34 35 36 36 37 37 38 39 40 41 41 42 42 43 43 44

webMethods Developer User’s Guide Version 7.1.1

3

Table of Contents

Opening and Closing Elements in the Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Moving and Copying Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . General . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Moving and Copying Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Copying Elements Between Servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Moving and Copying Adapter Notifications and Related Elements . . . . . . . . . . . . . . . . Renaming Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Saving Changes to Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Deleting Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Finding Elements and Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Finding Elements in the Navigation Panel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Finding Fields in Editor Trees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Locating Invoked Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Finding Dependents and References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Finding Dependents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Finding References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Inspecting Pipeline References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Caching Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Clearing the Developer Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3. Working with Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . What Is a Package? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Package Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Creating a Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Guidelines for Naming Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Viewing Details for a Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Optimizing Lock Checking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Copying a Package to Another Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Documenting a Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Reloading a Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Deleting a Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exporting a Package or Element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Assigning a Version Number to a Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Viewing the Patch History for a Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Identifying Package Dependencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Removing Package Dependencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Assigning Startup, Shutdown, and Replication Services . . . . . . . . . . . . . . . . . . . . . . . . . . . What Is a Startup Service? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . What Is a Shutdown Service? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . What Is a Replication Service? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Guidelines for Assigning Startup, Shutdown, and Replication Services . . . . . . . . . . . . Assigning Startup, Shutdown, and Replication Services . . . . . . . . . . . . . . . . . . . . . . . Removing Startup, Shutdown, and Replication Services . . . . . . . . . . . . . . . . . . . . . . .

45 47 47 47 48 49 51 53 53 55 55 58 59 60 60 61 63 66 66 69 70 70 72 72 73 73 74 76 77 77 78 78 79 81 83 83 83 84 84 85 85 86

4

webMethods Developer User’s Guide Version 7.1.1

Table of Contents

4. Locking and Unlocking Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Basic Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . What Is a Lock? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . How Do I Know Who Has an Element Locked? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . When Do I Lock an Element? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . When Do I Unlock an Element? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Locking Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Locking Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Locking Java and C/C++ Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Locking Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . System Locking Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Viewing the Status of Locked Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Copying, Moving, or Deleting Locked Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Unlocking Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Unlocking Elements Using Developer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Unlocking an Element Using the Integration Server Administrator . . . . . . . . . . . . . . . . Unlocking a System Locked Element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Viewing an Element’s Corresponding Server Files . . . . . . . . . . . . . . . . . . . . . . . . Automatically Unlocking Elements After Saving . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Troubleshooting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lock/Unlock Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Package Management Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Save Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Other Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Frequently Asked Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5. Assigning and Managing Permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Basic Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . What Is an ACL? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . What Happens When a Client Runs a Service with ACLs? . . . . . . . . . . . . . . . . . . . . . Am I Required to Use ACLs? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . How Do I Create an ACL? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Assigning ACLs to Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . The Permissions Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ACLs and Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Default ACLs and Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Viewing ACL Information on a Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . How ACLs Affect Other Developer Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ACLs and Locking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ACLs and Testing/Debugging Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ACLs and Creating, Viewing, and Deleting Elements . . . . . . . . . . . . . . . . . . . . . . . . . Troubleshooting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

87 88 88 89 89 89 90 90 91 92 92 92 94 94 94 95 97 98 98 99 99 100 100 101 101 103 104 104 104 106 106 106 107 109 109 109 111 111 111 112 112

webMethods Developer User’s Guide Version 7.1.1

5

Table of Contents

6. Building Flow Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Basic Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . What Is a Flow Service? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . What Is a Flow Step? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . What Is the Pipeline? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . What Are Input and Output Parameters? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A Process Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Creating a New Flow Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Package and Folder Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Using the Default Logic Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Inserting Flow Steps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Declaring Input and Output Parameters for a Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Supported Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Specifying Input Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Specifying Output Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Completing the Input/Output Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Assigning an Output Template to a Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Specifying Run-Time Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Maintaining the State of a Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Configuring a Service’s Use of Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Types of Services to Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Services Suited for Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Services that You Should Not Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Controlling a Service’s Use of Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Specifying the Duration of a Cached Result . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Using the Prefetch Option . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Specifying the Execution Locale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Configuring Service Retry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . About the Maximum Retry Period . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Setting Service Retry Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Assigning Universal Names to Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Configuring Service Auditing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Enabling Auditing for a Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Specifying When Audit Data Is Generated . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Including the Pipeline in the Audit Log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . When Is a Copy of the Input Pipeline Saved in the Audit Log? . . . . . . . . . . . . . . . Service Auditing Use Cases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Error Auditing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Service Auditing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Auditing for Recovery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Auditing Long-Running Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Setting Auditing Options for a Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Audit Level Settings in Earlier Versions of Developer . . . . . . . . . . . . . . . . . . . . . . . . . . Printing a Flow Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

115 116 116 117 118 119 120 120 120 121 121 122 123 123 124 125 127 129 130 131 131 131 131 132 132 133 134 135 136 136 137 140 141 142 143 144 146 146 146 147 147 148 149 149

6

webMethods Developer User’s Guide Version 7.1.1

Table of Contents

7. Inserting Flow Steps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . What Is a Flow Step? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Inserting and Moving Flow Steps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Changing the Position of a Flow Step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Changing the Level of a Flow Step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Setting the Properties of a Flow Step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . The INVOKE Step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Specifying the Service Property . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Invoking a Built-In Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Invoking a Service on Another webMethods Integration Server . . . . . . . . . . . . . . . . . . Building an INVOKE Step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . The BRANCH Step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Branching on a Switch Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Specifying the Switch Variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Specifying the Label Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Branching on an Expression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Branching on Null and Empty Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Specifying a Default Step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Using SEQUENCE as the Target of a BRANCH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Building a BRANCH Step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . The REPEAT Step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Specifying the REPEAT Condition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Setting the REPEAT Counter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . When Does REPEAT Fail? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Using REPEAT to Retry a Failed Step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Using REPEAT to Retry a Successful Step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . The SEQUENCE Step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Using SEQUENCE to Specify an Exit Condition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . The LOOP Step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Specifying the Input Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Collecting Output from a LOOP Step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Building a LOOP Step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . The EXIT Step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . The MAP Step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8. Mapping Data in a Flow Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . What Is Data Mapping? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . What Does the Pipeline Tab Contain? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pipeline Tab for an INVOKE Step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pipeline Tab for a MAP Step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pipeline Modifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Printing the Pipeline Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Basic Mapping Tasks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Linking Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . What Happens When Integration Server Executes a Link Between Variables? . .

151 152 152 154 154 156 157 157 158 158 158 160 160 161 161 163 164 165 166 168 170 170 171 171 171 174 176 176 178 179 179 180 181 183 185 186 186 187 189 190 190 191 192 196

webMethods Developer User’s Guide Version 7.1.1

7

Table of Contents

Linking to Document and Document List Variables . . . . . . . . . . . . . . . . . . . . . . . . Linking Variables of Different Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Examples of Structural Transformations on the Pipeline Tab . . . . . . . . . . . . Converting a String List to a Document List . . . . . . . . . . . . . . . . . . . . . . . . . . Linking to and from Array Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Guidelines for Linking to and from Array Variables . . . . . . . . . . . . . . . . . . . . Deleting Links Between Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Applying Conditions to Links Between Variables . . . . . . . . . . . . . . . . . . . . . . . . . . Linking Multiple Source Variables to a Target Variable . . . . . . . . . . . . . . . . . Assigning Values to Pipeline Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Assigning a Default Value to a Variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Initializing Variables in a Flow Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Referencing Other Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Setting a Value for a Pipeline Variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Copying Set Values Between Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dropping Variables from the Pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Adding Variables with the Pipeline Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Working with Transformers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . What Are Transformers? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Using Built-in Services as Transformers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Inserting a Transformer into a MAP Step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Linking Variables to a Transformer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Transformer Movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Transformers and Array Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . What Is Dimensionality? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Validating Input and Output for Transformers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Copying Transformers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Expanding Transformers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Renaming Transformers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Debugging Transformers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9. Creating IS Schemas, IS Document Types, and Specifications . . . . . . . . . . . . . . . . . . Creating an IS Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . What Does an IS Schema Look Like? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Schema Browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Schema Details Area . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Creating an IS Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Creating IS Schemas from XML Schemas that Reference Other Schemas . . . . . Editing a Simple Type in an IS Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Setting Constraining Facet Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Creating an IS Document Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Creating an Empty IS Document Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Creating an IS Document Type from an XML Document, DTD, or XML Schema . . . .

198 199 200 200 201 203 204 204 205 206 207 207 208 208 209 210 211 212 212 214 214 215 217 217 217 218 218 218 219 220 221 222 223 224 224 225 228 229 230 231 233 233 234 235

8

webMethods Developer User’s Guide Version 7.1.1

Table of Contents

Points to Consider for All Sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 Points to Consider When Using a DTD As the Source . . . . . . . . . . . . . . . . . . . . . 236 Points to Consider When Using an XML Schema As the Source . . . . . . . . . . . . . 236 Expanding Complex Document Types Inline . . . . . . . . . . . . . . . . . . . . . . . . . 237 Generating Fields for Substitution Groups . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 Creating an IS Document Type from a Broker Document Type . . . . . . . . . . . . . . . . . . 240 The Envelope Field . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 Adapter Notifications and Publishable Document Types . . . . . . . . . . . . . . . . . . . 243 Editing an IS Document Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 Modifying Publishable Document Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 Printing an IS Document Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 Using an IS Document Type to Specify Service Input or Output Parameters . . . . . . . 245 Using an IS Document Type to Build a Document Reference or Document Reference List Field . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 Specifying Field Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 Creating a Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 10. Performing Data Validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . What Is Data Validation? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . What Is Data Validated Against? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Applying Constraints to Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Considerations for Object Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Customizing a String Content Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Viewing the Constraints Applied to Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Performing Input/Output Validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Specifying Input/Output Validation via the Input/Output Tab . . . . . . . . . . . . . . . . . . . . Specifying Input/Output Validation via the INVOKE Step . . . . . . . . . . . . . . . . . . . . . . . Performing Document Validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Performing Pipeline Validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Performing XML Validation in webMethods Integration Server . . . . . . . . . . . . . . . . . . . . . . Performing Validation from within a Java Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Validation Errors and Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Validation Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Running Out of Memory During Validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11. Testing and Debugging Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Testing and Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Testing Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Testing Services from Developer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Entering Input for a Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Saving Input Values to a File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Loading Input Values from a File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Viewing the Results of the Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Copying Variables from the Results Panel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Run-Time Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 254 254 255 257 257 259 259 261 262 263 263 264 265 266 266 267 269 270 270 271 272 274 274 275 277 277

webMethods Developer User’s Guide Version 7.1.1

9

. . . . . . . . . . . . . . . . .1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Writing Information to the Server Log . . . . . . . . . . . . . . . . . Building Services Using Java . . . . . . . . . . . . . . . . Stepping though a Child Flow . . . . . . . . . . Using the Step Tools with a MAP Step . . . . . . . . . Disabling a Condition Placed on a Link Between Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dumping the Pipeline to the Log . . . . Disabling Flow Steps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Loading a Saved Pipeline into the Results Panel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . and Conditions . . . . . . . . . . . . . . . . . The IData Object . . . . . . . . . . . . . . . . . . . Testing Services from a Browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Using the Step Tools . . . . Disabling Transformers . . . . . . . . . . . . . . . . . . . . . . Basic Concepts . . . . . . . . . . Testing Services that Expect XML Documents as Input . . . . . . . . . . . . . . . . . . . . . . . . Disabling Flow Steps. . . . . . . . . . . . . . . . . . . Tracing into a Child Flow . . . . . . . . . Saving the Pipeline at Run Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Transformers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Setting Breakpoints . . . . . . . . . . . . . . . . . . Modifying the Current Pipeline . . . . . . . The Contents of the Server Log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Building Coded Services . . . . . . . . . . . . . . . . . . . . . . . . . . The Pipeline Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Other Debugging Techniques . . . . . . . . . . . . . Resetting Debug Mode . . . . . . . . Using the Trace Tools . . . . . . . . . . . . . . . . . . Saving the Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Using the Server’s Debug Facility . . . . . . . . . . . . . . . . . . Loading a Saved Pipeline at Run Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Saving the Contents of the Results Panel . . . . . . . . . What Happens When a Breakpoint Is Encountered? . . . Combining the Step and Trace Commands in Debug Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Working in Debug Mode . . . . . . . . Server Debug Levels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Creating IData Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1. . . . . . . . . . Saving and Restoring the Pipeline . . . . . . . . . . . . . . . . . . . . . . . . . How Java Services Are Organized on the Server . . . . . . . . Restoring the Pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 279 279 280 281 282 283 283 284 285 286 287 288 288 289 290 291 291 291 293 294 295 296 296 297 298 298 299 299 300 300 301 301 302 302 304 307 308 308 308 309 309 310 310 10 webMethods Developer User’s Guide Version 7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Getting and Setting Elements in an IData Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Services Take IData Objects as Input and Return IData as Output . . . . . . . . Setting Breakpoints on Transformers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Viewing a List of Breakpoints . . . . . . . . Entering Debug Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Writing an Arbitrary Message to the Log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Table of Contents The Call Stack . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Assumptions . . . . . . . . . . . . Invoking the Object . . . . . . . . . . . . . . . Assumptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Building Java Services with Your Own IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . The Source Code Directory . . . . . . . . . . . . . . Setting Run-Time Options for a Java Service . . . . The Java Service Editor . . . . . . . . . . . . . . . . . . . . . Composite Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Building a Visual Basic Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Building a Java Client . . . . . . . . . . . . . . . . . . . . Other jcode Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Building Services Using COM . . . . . . . . . . . . . . Creating Client Code . . . . . . . . . . . . . . . . . . . . . . Assumptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13. . . Basic Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Using the Developer IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Generating Java Code from Service Input and Output Parameters . . . . . . . . . . . . . . . . . . . . . Using the jcode Utility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . The Shared Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Limitations . . . . . . . . . . . . . . . . . . . . . . Building Services Using C/C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fragment Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Writing the Source Code for a Service . . . . . . . . . . . . . . . . . . . . . . . . Creating the Object . . . . . Environment Setup . . . The Basic Stages . . . . . . Limitations . . . . . . . . . . . . Make Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Building a C/C++ Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Creating a Java Service with Developer’s IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Using the webMethods API . . . . . . . . . . . . . Requirements . . . . . . . . . . . . . . . . . . Files that Are Generated . . . . Generating Files for a C/C++ Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Files that Are Generated . . . . . . . . Invoking Methods from Existing COM and DCOM Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Commenting Code for the webMethods Integration Server . . . . . . . . . . . . . . . . . 311 311 311 313 314 315 317 317 317 318 319 319 319 320 321 321 321 322 322 323 324 324 326 327 328 328 328 329 331 332 332 332 333 334 334 335 335 335 336 336 337 337 337 337 webMethods Developer User’s Guide Version 7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Building the C/C++ Source Code . . . . . . . . . . . . . . . . . . . . . . . . .Table of Contents Building Java Services with Developer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . The Java Code for a C Service . . . . . . . . . . . . . . . . . . . . . . . . . . . Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . The Namespace Directory . . . . . . . .

. . . . . Input to the Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . File Containing the Code that Interacts with webMethods Integration Server . . . . . . . . . . . . . . . . Viewing and Editing Event Subscriptions . . . . . . . . . . . . . . . . . . . . . . . . . . . The Event Manager . . . . . Working with Port Status Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Files that Are Generated . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Creating Event Filters for Services . . . . . . . . . . . . . . . . Using the HTTP POST Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Suspending Event Subscriptions . . . . . . Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . Building Handlers for Exception Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1. . . . . . . . . . . . . . . . . . . . . . . . . . . . Assumptions . . . . . . . . . . . . . . . . Limitations . . . . . . Building Handlers for Guaranteed Delivery Start Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Files Containing the Code that Invokes the Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Guaranteed Delivery Events and Transaction Events . . . . . . . . . . . . . . . . . . . . Building a Browser-Based Client . . . . . . . . . . . . . . . . . . . . . . . . . . . What Are Event Handlers? . . . . . . . . . .1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Assumptions . . . . . . . . . Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Files that Are Generated . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Building Handlers for Guaranteed Delivery End Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Using the HTTP GET Method . . . . . . . . . . 337 338 338 338 339 339 339 339 340 340 341 341 341 341 342 342 343 343 345 347 348 350 350 350 351 352 355 355 356 356 357 357 359 360 360 361 362 363 364 364 365 366 366 367 12 webMethods Developer User’s Guide Version 7. . . . . . . . . . . . . . . . . . . . . . . . . . . . Working with Alarm Events . . . . . . . . . . . . . . . . . . . . Invoking Services with a URL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Working with Guaranteed Delivery Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Working with Exception Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . General Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Subscribing to an Event . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Building Handlers for Alarm Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Table of Contents Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Output from the Service . . . . . . . . . . . . . . . . . . Managing Event Subscriptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . What Happens When an Event Occurs? . . . . . . . . . . . Working with Audit Events . . . . . . . . . . . . . . . . . . . . . . Creating Event Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Building an Event Handler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Sample Event Handler . . . . . . . . Deleting an Event Subscription . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Building Handlers for Port Status Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Building an Excel Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Files for the User Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Building Handlers for Audit Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Subscribing to Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . How to Build a Service that Throws an Exception for Retry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Example of When to Use . . . . . . . . . . . . . . . . . . . . . Properties . . . . . . . . Examples of When to Use . . . . . . . . . . . . . . . . . . . . . . . . . . . Properties . . . . . . . . . . . . . . . . . . Working with Session Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Building Handlers for Session Expire Events . . . . . . . . . . . . . Branching on a Switch Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . REPEAT . . . . . Building Handlers for Stat Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Building Services that Retry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Adapter Services and Retry Behavior . . . . . Working with Stat Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Branching on Expressions . . . . . . . . . . . . . . . . . . . . LOOP . . . . . . . . . . . . . . . . . . . . . . . . . . .1 13 . . . . . . . . . . . . . . .Table of Contents Working with Replication Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Requirements for Retrying . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Building Handlers for Session Start Events . . . . . . . . . . . . . . . . . . . . . EXIT . . . . . . . . . . . . . . . . Conditions that Will Cause an INVOKE Step to Fail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . SEQUENCE . . . . . . . . . . . . . . . . . . When Does REPEAT Fail? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Building a Service that Throws an Exception for Retry . . Properties . . . . . . . . . . . . . . . . . . . . . Building Handlers for Session End Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Properties . . . . . . . . . . . . . . . . . 367 368 368 369 369 370 370 370 372 372 373 375 376 376 376 377 377 380 383 384 384 384 385 386 386 387 387 388 388 388 389 389 390 390 391 391 391 392 393 393 394 394 395 webMethods Developer User’s Guide Version 7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Working with Transaction Events . .1. . . . . . . . . Conditions that Will Cause the SEQUENCE Step to Fail . . . . . . . . . . . . . . . Building Handlers for Transaction Start Events . . . . . . . . . . . . . . . . . . Building Handlers for Replication Events . . . . . . . . . . . . . . . Conditions that Will Cause a BRANCH Step to Fail . . . . . . . . . BRANCH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . webMethods Flow Steps . . . . . . . . . . . . . . . . Examples of When to Use . . . . . . . . . . . . . . . . A. . . . . . . . . . . . . . Building Handlers for Transaction End Events . . . . INVOKE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Example—Building a Service that Throws an Exception for Retry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conditions that Will Cause a LOOP Step to Fail . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . jcode Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Addressing Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rules for Use of Expression Syntax with the Broker . . . . . . Comparing Java Objects to Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . E. . . . . . . . . . . . . . . . . . . D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Validation Exceptions . . . . . . . . . . . . . . . . . 475 14 webMethods Developer User’s Guide Version 7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . What Is a Regular Expression? . . . . . . . . . . . . . . . Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Java Classes for Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1. . . . . . . . . . . . . . . . Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . Default Pipeline Rules for Linking to and from Array Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Relational Operators . . . . . . . . . . . . . . . . C. . . . . . . . . G. . . . . . . . . . . . . . . . . . . . . . . . Supported Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . jcode Template . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Validation Errors and Exceptions . . Lexical Relational Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . F. . . . . . Checking for Variable Existence . Validation Errors . . . . . . . . . . . . . . . . . . . .1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Regular Expressions . . . . . . . . . . . . . . . . . . . . . . . Overview . . Typing Special Characters in Expressions . . . . . . . . . . . . . . . . Precedence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . jcode tags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Content Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Table of Contents B. . . . . . . . . . . Addressing Variables that Contain Special Characters . . . . . . . . . . . . . . . . . . . . . . . . . Constraining Facets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . How webMethods Developer Supports Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Logical Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Validation Content Constraints . . . . . . Using a Regular Expression in a Mask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397 398 398 398 405 406 407 409 409 413 414 415 417 418 418 418 419 421 423 424 425 426 427 428 431 432 432 432 437 438 438 448 451 452 452 465 470 Index . . . . . . . . . . . . Regular Expression Operators . . . . . . . . . . . Standard Relational Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conditional Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . IS Schema Generation Errors and Warnings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Sample Code—IData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Syntax . . .

 you should know how to program in Java.1 15 . Keys that you must press simultaneously  are joined with the “+” symbol. Also identifies service input and output  variables. Identifies storage locations for services on the webMethods  Integration Server using the convention folder.  To use this guide effectively. Identifies variable information that you must supply or change based  on your specific situation or environment. Identifies characters and values that you must type exactly or  messages that the system displays on the console. Do not type the [ ]  symbols in your own code.1. Directory paths use the “\” directory delimiter unless the subject is  UNIX‐specific.subfolder:service. C/C++. Document Conventions Convention Bold Italic Description Identifies elements on a screen. C/C++.About This Guide This guide describes how to create services using webMethods Developer. Identifies terms the first  time they are defined in text. Narrow font Typewriter font UPPERCASE \ [  ] webMethods Developer User’s Guide Version 7. and/or  Visual Basic if you will be creating services in those languages. It contains  information for developers who want to build services using the webMethods flow  language or a programming language such as Java. Optional keywords or values are enclosed in [ ]. or Visual Basic. Identifies keyboard keys.

  In addition. Starting with 7.0.  „ Documentation Feedback. you have the option of downloading the  documentation during product installation to a single directory called  “_documentation. go to  the Documentation Feedback Form on the webMethods Bookshelf.com provides  you with important sources of information about webMethods products: „ Troubleshooting Information. you can find documentation for all webMethods products on the  webMethods Bookshelf.1 .About This Guide Additional Information The webMethods Advantage Web site at http://advantage.webmethods. „ Additional Documentation. To provide feedback on webMethods documentation.” located by default under the webMethods installation directory. The webMethods Knowledge Base provides  troubleshooting information for many webMethods products. 16 webMethods Developer User’s Guide Version 7.1.

. . . . . . . . . . .1. . . . . . . . . . „ Changing Your Password . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . and Restoring Sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Opening. . . . . . . . .1 Getting Started with Developer 18 18 19 21 31 35 37 38 „ What Is Developer? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Starting Developer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Closing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . webMethods Developer User’s Guide Version 7. . . . . . . . . . . . . . . . . . . . . . . . . . . . „ What Does the Developer Window Contain? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Using Online Help . . . . . . . . . „ Before You Use Developer . . . . . . . . . . . .1 17 . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Working in the Developer Window . . . . . . . .

 and  test integration logic.  18 webMethods Developer User’s Guide Version 7. When you lock an  element. in this case. elements  are locked and unlocked as you check them out of and in to the VCS repository. For information on how to implement file locking with the Version Control  System Integration feature for Developer. Developer can also be configured to  interact with a third‐part version control system (VCS) repository. Developer provides additional  editors and tools for creating various elements that support the execution of an  integration solution. It provides an integrated development environment in which you  can develop the logic and supporting objects (referred to as elements) of an integration  solution. see your server administrator. Flow language provides a  set of simple but powerful constructs that you use to specify a sequence of actions (steps)  that the Integration Server will execute at run time. the element is read‐only to all other users on the Integration Server. „ Have a user account on that webMethods Integration Server. For  specific information about local file locking. Besides providing tools for constructing flow services. you use Developer to create the document types and  schemas used for data validation and to define Broker/local trigger that launch the  execution of services when certain documents are published. To use Developer you must: „ Have access to a webMethods Integration Server on which you can build and test  services. Another  user cannot edit the element until you unlock it. Developer also has extensive data  transformation and mapping capabilities that allow you to quickly drag‐and‐drop data  fields from one step to the next. “Locking and Unlocking  Elements”. If you do not have access to a webMethods Integration Server or you do not have an  appropriate user account or access rights. „ Belong to a group that is a member of the “Developers” ACL (access control list) on  that webMethods Integration Server. see Chapter 4.  Developer enables you to lock an element you are working with.1 Getting Started with Developer What Is Developer? webMethods Developer is a graphical development tool that you use to build. Developer lets you rapidly construct integration logic with an easy‐to‐use  implementation language called the webMethods flow language.1 .1. edit. All references in this guide to locking refer to local locking on the Integration Server. For example. It also provides tools for testing and debugging the solutions you create.  Before You Use Developer Developer builds and edits services directly on a server. see the webMethods Version Control System  Integration Developer’s Guide in the webMethods_directory\_documentation directory.

Important! You can only connect webMethods Developer version 7.1 Getting Started with Developer Starting Developer Use the following procedure to start Developer on your workstation. Click webMethods Developer. ...... webMethods Developer User’s Guide Version 7.1 19 .1.. complete the following: In this field. Username The name of a valid user account on this server. click Programs. Example rubicon:5555 Note: Servers to which you have successfully logged on in the  past are listed in the Server list. (The user name  must be a member of a group belonging to the Developers ACL.1. Server type Server Specify.and enter a user account that has developer privileges.) Use the exact combination of upper‐ and lower‐case characters  with which it was originally defined. The default type is Integration Server. 3 In the Open Session dialog box. Specify the name and port assignment of a server.1 to a webMethods  Integration Server version 7. The name and port assignment of the webMethods Integration  Server in ServerName:PortNum format..  To start Developer 1 2 On the Start menu. You can select a server from this  list or type its name and port number. Before you start  Developer make sure that the Integration Server with which you want to use Developer is  running. IS user names are case  sensitive. The registered type for the server on which you want to open a  session.. and then click webMethods. You cannot work with Developer if the server is not running.

Note: The server is installed with a default user account called  “Developer” that has developer privileges. IS passwords are case sensitive.  Tip! When you run Developer from the command line. VersionNumber. Developer displays a message in the console  warning you of the locale mismatch. The default debug level is 4. If you want to open a session on the selected server using  your proxy server. If the locale of an add‐in component is not  supported by the Developer locale. Note: The default password for the Developer user account is  isdev. set the debug level to 10. Password The password for the user account in Username.1 Getting Started with Developer In this field. if you start Developer in an English  locale with a localized Japanese add‐in component..cnf file located in Developer_directory\config. Use the exact  combination of upper‐ and lower‐case characters with which it  was originally defined. select this check box. You can change the  debug level by editing the ini.  Uses secure connection Whether the session will be opened through HTTP or HTTPS.. For example.1 . If you  want more detail written to the console. Developer displays the following  message in the console: Warning: The following plug-ins are running localized versions even though Developer is not: ComponentName.1. Whether the session will be opened through the default proxy  server. Specify. Developer writes messages to  the console. 20 webMethods Developer User’s Guide Version 7. it verifies that the other webMethods components  support the same locale as Developer.    Note: When you start Developer. The amount and type of information that is written is determined by the  debug level under which Developer is operating.. select this check box. clear this check box. If you want  to open an HTTP session on the server. Uses proxy 4 Click OK. Developer will display some text in English and the component’s text in Japanese. If  you want to open an HTTPS session on the selected server using  the Secure Socket Layer (SSL)..

 to  view the variables that a service adds to the pipeline. You use the UDDI Registry tab to connect to and disconnect from a  UDDI Registry. and to view the contents of  those variables. You use the editor to examine and edit an element you opened from the  Navigation panel or Recent Elements tab. For more information about this panel.1 21 . For more information about this panel. move. You use the Properties panel to view and edit the properties for an  item. packages. You use the Navigation panel to select. see “The Recent  Elements Tab” on page 27. „ Recent Elements tab. you can check elements in  to and out of a VCS repository. For more information about the editor. webMethods Developer User’s Guide Version 7. The Results Panel displays the results of a service’s execution. copy. „ Editor. see “The  Navigation Panel” on page 22. if you are connected to a UDDI Registry. see “The UDDI Registry Tab” on page 25. see “The Results Panel” on  page 31. and to display. and publish Web services. For more information about this panel. filter.1. You use the Recent Elements tab to quickly access elements you  have recently viewed. see “The Properties Panel” on page 29.  „ UDDI Registry tab. delete. The UDDI Registry tab displays Web services. The Editor displays the controls you use to examine and edit an element you have opened from the Navigation panel or Recent Elements tab. „ Properties panel. Developer main window The Navigation Panel displays the contents of servers. or  rename elements. For more information about this panel.1 Getting Started with Developer What Does the Developer Window Contain? The Developer window is divided into the following areas:    „ Navigation panel. If the VCS Integration feature is enabled. see  “The Editor” on page 27. For more information  about this panel. You use the Results panel to view the result of a service’s execution. „ Results panel. The Recent Elements Tab displays the elements you viewed most recently. and folders. The Properties Panel displays the properties for an item. lock.

 and output templates. 22 webMethods Developer User’s Guide Version 7. A flow service is a service written in the webMethods flow  language. “Managing Elements in the Navigation Panel” and Chapter 3.  For information on how to implement file locking with the Version Control System  Integration feature for Developer... If the VCS Integration feature is enabled. Represents. To display the contents of a folder. which contain other elements that you can create and edit using Developer (for  example.  A Web service descriptor (WSD). click   next to its name. For more information about the tasks you can perform on elements in the Navigation  panel. To display the contents of the server. A package contains a set of services and related files.  This icon.  Navigation Panel Icons Each item in the Navigation panel contains an icon that denotes the item’s type. The  following table describes what each icon represents. A WSD  describes either a “provider” or a “consumer” Web service.  The active server context is the one that is highlighted in the Navigation  panel. such as  specifications. you can check elements in to and out  of a VCS repository.1 . A Web service descriptor is an IS namespace  element that contains the definition of an IS Web service. services. Elements in the Navigation panel are shown in a hierarchical structure where the server  is the topmost element in the hierarchy. see Chapter 2. A server. moving. You use the Navigation panel to perform  tasks such as creating. A folder contains related services and optional folders (called  subfolders).1 Getting Started with Developer The Navigation Panel The Navigation panel displays the contents of packages on the webMethods Integration  Servers on which you have an open session. and deleting  elements. To display the  contents of a package. Packages on the server contain one or more  folders. click   next to its name. A folder.1. specifications. see the webMethods Version Control System Integration  Developer’s Guide in the webMethods_directory\_documentation directory. A flow service. You can have multiple server contexts displayed in Developer.. click the   symbol next to its  name. IS document types.. locking. For more  information about using Web services and the UDDI Registry. renaming.  “Working with Packages”. see the Web  Services Developer’s Guide. copying. and IS document types). opening.  A package.

Represents...   A publishable document type for an adapter notification.  For more information about creating Broker/local triggers. A specification is a formal description of a service’s inputs  and outputs. A Web service connector. A Web service descriptor that  contains the definition of a provider IS Web service.  A C service. Developer  automatically generates a Web service connector when it creates a Web  service descriptor for a consumer Web service. A Broker/local trigger is trigger that subscribes to and  processes documents published/delivered locally or to the Broker. A provider Web service descriptor (WSD). An IS document type contains a set of fields used to  define the structure and type of data in a document.  A Java service.. An IS document type. A JMS trigger is a trigger that receives messages from a  destination (queue or topic) on a JMS provider and then processes those  messages. Instances of  publishable document types can be published and subscribed to. An adapter notification  can have an associated publishable document type that the adapter uses  to send the notification data to an Integration Server or a Broker. A provider Web  service allows an external user to invoke an existing IS service as an  “operation” of the Web service.    webMethods Developer User’s Guide Version 7.1.1 23 . see the Publish‐ Subscribe Developer’s Guide. A Java service is a service written in Java. A Web service connector is a flow service that  invokes a Web service located on a remote server.  A Broker/local trigger.  A specification. see the webMethods  Integration Server JMS Client Developer’s Guide. A publishable document type is an IS  document type with specific publishing properties.1 Getting Started with Developer This icon.. A C service is a service written in C/C++.  Publishable document types can be used anywhere an IS document type  is needed. Consumer Web  services are external Web services that can be invoked from within the  local Integration Server. A JMS trigger. For more information about creating JMS triggers. Developer can also create a  Web service connector from an existing WSDL.  A publishable document type. A Web service descriptor that  contains the definition of a consumer Web service.  A consumer Web service descriptor (WSD).

 field  definitions. Adapter services are created  using service templates included with the adapter.. A listener is an object that connects to an adapter resource and  waits for the resource to deliver data when an event occurs on the  resource. Represents. 24 webMethods Developer User’s Guide Version 7. which work with listeners to detect and process  events that occur on the adapter resource. A flat file dictionary contains record definitions. see the Flat File Schema Developer’s Guide.  A flat file dictionary.. see the  Flat File Schema Developer’s Guide. which poll the resource for events that occur on  the resource. An XSLT service converts XML data into other XML  formats or into HTML. refer to the documentation provided with the  adapter.1 Getting Started with Developer This icon.1. An adapter service. There are two types of  adapter notifications: „ Polling notifications. and composite definitions that can be used in multiple flat file  schemas.. using rules defined in an associated XSLT  stylesheet. For more information about creating a flat file dictionary. For  information about creating a connection. refer to the  documentation provided with the adapter.   An adapter notification. For information about creating a  listener. Using flat file schemas. Listeners work with listener notifications to detect and process  event data on the adapter resource. An adapter notification enables an adapter to  receive event data from the adapter’s resource.1 . An XSLT service. as well as the  constraints to which an inbound flat file document should conform to be  considered valid. For more information about creating a flat  file schema. For information about  creating adapter services. refer to the documentation provided with the adapter. refer to the documentation  provided with the adapter. An IS schema. „ Listener notifications. The schema defines what can and  cannot be contained in the XML documents it validates.. An IS schema is the blueprint or model document against  which you validate an XML document. A flat file schema. A listener. A flat file schema is the blueprint that contains the  instructions for parsing or creating the records in a flat file.  A connection. see the  XSLT Services Developer’s Guide. you can translate documents  into and from flat file formats. A connection is an object that contains parameters that  adapter notifications and listeners use to connect to a resource. For information about creating an adapter notification. For more information about creating XSLT services. An adapter service connects to an adapter’s resource  and initiates an operation on the resource.

Refreshing the Contents of the Navigation Panel The Navigation panel on your screen is not dynamically updated when other users lock. A . refer to the documentation provided with these installed components. Web services are sorted in alphabetical order.NET service. A . Note: When you select a Web service in the UDDI Registry tab. An Unknown Service.NET service exists within Developer. Note: Other installed webMethods components might add elements to the Navigation  panel that are not described in the preceding table. see the Web Services  Developer’s Guide. you can display. To refresh the Navigation panel to  reflect any changes made to the contents of the servers you are working with. An Unknown Node. The webMethods component used to create this  service is not installed on the client machine. This is because Developer cannot modify a Web service published to a  UDDI Registry. delete.  Once a .NET service is a service that calls methods imported  from . it can become part of a flow  just like any other service. For more information about using the  Microsoft . For more  information about using Web services and the UDDI Registry. and publish Web services in that  registry..  unlock. see  the webMethods for Microsoft Package Installation and User’s Guide.  webMethods Developer User’s Guide Version 7. For information about these  elements.  The UDDI Registry Tab Use the UDDI Registry tab to connect to and disconnect from a UDDI Registry. see “Restoring a Session on a Server” on page 36. filter.NET application platform with webMethods components.1... The webMethods component used to create/develop the  element is not installed on the client machine.1 Getting Started with Developer This icon. or rename elements on a server.NET assemblies (using the webMethods for Microsoft Plug‐in). the editor (the middle  area of the Developer window between the Navigation panel and the Properties  panel) is blank. Represents. Restoring a session  allows you to save changes to an element you were working with when the  Integration Server shuts down unexpectedly. Within the UDDI Registry tab.   Note: Refreshing the session is different from restoring a session. use the  SessionRefresh command. For more information about restoring  sessions. add.1 25 .  Simply select a Web service to view more information about the service. Once you  have opened a UDDI Registry..

Remove the filter from the contents of the UDDI Registry tab and  display all the published Web services.. Developer can invoke the connector to run  the remote Web service. A business entity is a publisher of Web services to the  UDDI Registry. Developer displays the  Web services published by that entity.1 . Refresh the display of Web services..1 Getting Started with Developer UDDI Registry Tab Icons The following buttons on the UDDI Registry tab toolbar are shortcuts to frequently‐used  commands. You can then publish the Web  service descriptor to a UDDI Registry so that the IS service it describes  can be invoked by an external user as an “operation” of the Web service. Represents. From an existing IS service or WSDL.. you can create a consumer Web service  descriptor and connector. From  a Web service or a WSDL. A Web service. the registered  business entities.. you can  create a provider Web service descriptor.  The UDDI Registry tab also contains icons to represent the UDDI Registry. using XML‐ based languages to communicate.  Create a Web service descriptor (WSD) from the Web service selected in  the UDDI Registry tab. This icon. Connect to a UDDI Registry while working in Developer...1. Use this button.. A Web service is a software application that can be  accessed remotely.  A Business Entity.  see the Web Services Developer’s Guide. and the Web services that have been published to the UDDI Registry. Developer displays the URL of the UDDI Registry  to which you are connected next to the registry icon.  For more information about using Web services and the UDDI Registry.  Create an expression that filters the contents of the UDDI Registry tab  based on the value of a Web service property. Below the UDDI  Registry name. To. Below the business entity name. A UDDI Registry Node.. Developer displays all of the business entities registered  in that UDDI Registry.  The following table identifies these icons.  Disconnect from a UDDI Registry while working in Developer. Equivalent to SessionRefresh UDDI Registry Display.  26 webMethods Developer User’s Guide Version 7.

For more information about selecting elements in the Recent Elements tab to view or edit  in the editor. You switch among areas within  the editor just as you would between the Navigation panel or Recent Elements tab and  the editor. You can clear the list of elements currently displayed in the Recent Elements tab by  clicking Clear. Developer alerts you that the element cannot be found and then  removes the element from the list. Developer handles changes to the Recent Elements list as follows: „ When you close an open element in the editor. Developer removes the element from the Recent Elements list. „ Developer remembers the contents of the Recent Elements tab between sessions. For some element types. or renamed during your Developer session. The contents of the editor vary  depending on the type of element you select. the editor is divided into multiple areas. Developer  adds an element to this panel when you close the element. moved. To display the  contents of a tab. click any white space in that area.1 27 . the package  in which the element resides. rest  the mouse pointer on the element name.1 Getting Started with Developer The Recent Elements Tab The Recent Elements tab lists the last 30 elements you viewed in the editor. Tip! To view a tool tip containing the fully qualified name of the element. Developer displays a  message alerting you that the element cannot be found. click the tab name. If you delete an  element. Developer  automatically refreshes the Recent Elements tab to reflect the change.  „ If you attempt to open an element listed in the Recent Elements tab that another user  has deleted.  If you move or rename an element during your current session. see “Opening and Closing Elements in the Editor” on page 45. You can use this panel to  quickly open elements that you have recently viewed and closed. and the host name and port number of the server.1. If  you attempt to open an element that was deleted after you clos*ed your previous  Developer session. including tabs  containing additional editing controls for the element.  The Editor The editor contains the controls that you use to examine and edit an element you open  from the Navigation panel or Recent Elements tab. Developer adds the element to the top  of the Recent Elements list. webMethods Developer User’s Guide Version 7. To select a different area.

.    Tip! You can press CTRL+ALT+RIGHT ARROW to toggle forward between open  elements in the editor and CTRL+ALT+LEFT ARROW to toggle backward.1. if you are creating or editing a  Broker/local trigger. As mentioned earlier. These lists are also referred to as “trees. you may want to quickly view the document types and services  associated with that trigger. The editor lists the input and output fields that were created for this specification.1 .     28 webMethods Developer User’s Guide Version 7.” . For example. see “Navigation Panel Icons” on page 22  and “What Is a Lock?” on page 88. For more information about these icons. you can use the Navigation panel and Recent Elements tab to select  one or more elements to view or edit in the editor.editing controls for that element are displayed in the editor. The element’s title bar contains the  fully qualified name of the element and icons to indicate the element’s type and lock  status. Each element you open has its own tab in the editor.1 Getting Started with Developer Editing controls for an element If you open an element from the Navigation panel. It is helpful to display multiple  elements in the editor when you are editing an element and you would like to refer back  to another element for information. In this example. a specification is opened in the editor....

1 Getting Started with Developer Editor with multiple elements opened Each opened element in the editor has its own tab.     The Properties Panel The Properties panel displays the properties for the currently selected item in the  Developer window. You use this panel to view and edit the properties of an item (such as  an element.  Tip! If the Properties panel displays the properties for an item (for example. Click to close the active element (that is. the element that is currently displayed). Some elements have specialized tabs. Developer identifies the  item for which properties are displayed beneath the title bar of the Properties panel.1.1 29 . or a link between two  variables). the document type to which the field belongs). The element’s title bar displays the element’s fully qualified name. the tab of the parent element in the editor. a field in a document.  webMethods Developer User’s Guide Version 7. Click to view tabs that are not currently visible. or the white  space within the editor.  The properties that Developer displays in this panel vary depending on the item you  select and which area of the Developer window has the focus. a  document field) and you want to display the properties for its parent element (for  example. a step in a flow service. click the title bar of the  parent element in the editor. Tip! You can locate the active element in the Navigation panel by using the  EditLocate in Navigation command.

Note: Developer accepts the text you type in a property box when you move the  focus outside of the box or press ENTER. a service)  The tips area beneath the list of properties includes a description of the selected property  and its values. to specify an index when linking to or from an array variable) „ Clicking the browse   button to locate an element (for example.   Note: If you do not own the lock for an element. to specify  the namespace and local names that make up the universal name for a service)  Tip! You can also paste text into the box that you previously copied to the  clipboard.1 .1 Getting Started with Developer Properties panel Drag to resize the Property and Value columns. the element’s properties are read only. Properties are grouped into categories. Click to collapse the list of properties beneath a category.  30 webMethods Developer User’s Guide Version 7. Click to expand the list of properties beneath a category. To obtain this information for a particular property. you edit a property by: „ Typing a value in the box to the right of the property name (for example. Depending on the type of property you select. Description of the selected property. „ Selecting a value from a list (for example.1. Name of the item for which properties are displayed. You can cancel your edits before you  perform either of these actions by pressing ESC. to specify a validation processing rule) „ Clicking a button next to the property name and supplying values on a dialog box  (for example. click the property  name.

to view its contents in the pipeline at this stage of the service’s execution.. You can also save the data to a file and use it as input for a later test.  Results panel Click a variable name.1. This action changes the focus to the  new panel and makes its menu commands and toolbar buttons available for use. You can use this panel to quickly  examine the data produced by the service while you are testing and debugging the  service.1 Getting Started with Developer The Results Panel The Results panel shows the result of a service’s execution.. “Testing and  Debugging Services”. see Chapter 11.. Working in the Developer Window Moving Between Panels Before you can perform an action on an item that is displayed in the Developer window. .  you must first select the panel in which that item appears (that is. For more information about service execution results. You can only select one panel in the Developer window at a time. the variables that a service  adds to the pipeline. click any white space or  field within the panel to which you want to switch. Developer  indicates which area has the focus by highlighting the area’s title bar in blue.  webMethods Developer User’s Guide Version 7.1 31 . and the contents of those variables.. give that panel the  “focus”).  To switch from one panel of the Developer window to another.

 For example. „ Right‐click an element. the flow service toolbar buttons in the editor are not available unless the  editor has the focus. Tip! To select a group of adjacent elements simultaneously. To select a group of non‐adjacent elements. The actions that are available for an element depend on which area of the Developer  window has the focus.1 . double‐click it. when you are editing a  flow service. press ALT and F to access the File  menu. to save changes to an opened element using a toolbar button. „ Single‐click one or more elements in the Navigation panel. to run a service. You can select a command from the menu bar to perform an action on  an element. press the CTRL key. For example.  select the element in the editor and then click FileSave. For example.1 Getting Started with Developer Performing Actions Before you can perform an action on an element. For  example. select that element and then press  CTRL and S. You can then select a command on that menu by  pressing the underlined letter in the command’s title.  The toolbar buttons that are available for you to use depend on the item in the  Developer window that currently has the focus. Some commands also have shortcuts assigned to them. To close an editor using a  shortcut menu.    32 webMethods Developer User’s Guide Version 7.  „ Keys. press the SHIFT key as  you click. You can click a toolbar button to perform an action on an element. to open an element using a shortcut menu. the service must be open in the  editor and have the focus. For example. There are a number of ways to perform an action on an element after you select it:  „ Menu commands. you must select the element in one of the  following ways: „ Single‐click the title bar of an element in the editor. right‐click the editor title bar and then click Close Active Editor. Note: Single‐clicking an element in the Navigation panel selects (highlights) the  element but does not open the element for viewing or editing in the editor. select the element. You can also access menu commands on a shortcut menu by right‐clicking the  element. You can use the keyboard to access a menu by pressing the ALT key plus the  underlined letter in the menu name. to save  changes to an element using a keyboard shortcut. select the  element in the editor and then click  .1. right‐click the  element in the Navigation panel and then click Open. For example.  „ Toolbar buttons. to save changes to an opened element using the menu bar. and then press S to save the element. To  open an element in the editor. For example. to save changes to  an element using the keyboard. These shortcuts are displayed  to the right of their associated commands on the menu bar.

  webMethods Developer User’s Guide Version 7. Do this.. either on the same server or on a different server. For  example.    Most of the procedures in this guide instruct you to perform actions using menu  commands. You can select an element and move it to another package or  element. such as adapter notifications..   Resizing Areas in the Developer Window You can resize areas in the Developer window by: „ Hiding or showing panels „ Dragging the movable border between panels  „ Switching perspectives Hiding and Showing Panels You can hide and show panels on the Developer window as follows:    To.1 33 . by dragging it.   Note: Some elements.  and Recent Elements tab Hide the Properties and  Results panels Click   along the right edge of the Developer window. Hide the Navigation panel. cannot be moved using the  drag‐and‐drop action.1. to move an IS document type from one folder to another. Show the Properties and  Results panels Click  Expand or collapse editor  details  along the right edge of the Developer window. and  Recent Elements tab Show the Navigation  panel. Click   on the border between the top of the editor and  the specialized tabs beneath it. UDDI Registry tab..      Dragging Movable Borders You can resize areas in the Developer window by dragging the movable borders between  panels with your mouse.  UDDI Registry tab. Click   along the left edge of the Developer window. you would drag  that document type to the new folder. Click   along the left edge of the Developer window.1 Getting Started with Developer „ Drag-and-drop action..

. its inputs and outputs. The edit perspective displays all of the Developer window areas but  minimizes the Results panel. Perspectives allocate more space on the Developer  window for a particular task by hiding or minimizing the areas that are not essential to  that task. The test perspective hides the Navigation panel..1.1 . This perspective is  useful when you want to see as much of an element’s detail as possible (for example. „ Test perspective. and Recent Elements tab and minimizes the Results panel.  „ Details perspective.  Developer offers three perspectives: „ Edit perspective. use the WindowReset Perspectives command. You display a perspective as follows:   To display the.. Developer saves your settings across sessions. This  perspective is useful when you are testing and debugging a service and you want to  view the results of the service’s execution. Edit perspective Test perspective Details perspective Use this command.   34 webMethods Developer User’s Guide Version 7.. The details perspective hides the Navigation panel. UDDI Registry tab. This perspective is useful when you are opening and  editing elements and their properties. a  service’s pipeline).1 Getting Started with Developer Switching Perspectives You can quickly change the Developer window to tailor it to the task you are performing  (for example.  and Recent Elements tab and maximizes the editor and the Results panel..                                                 You can manually adjust areas within a perspective using the other techniques described  in this section. and its pipeline  variables. UDDI Registry  tab. WindowEdit Perspective WindowTest Perspective WindowDetails Perspective Or click this toolbar button.. If you have adjusted the perspectives manually and you want to revert them to their  default settings. show only the editor and Results panel when you are testing a service) by  displaying a particular perspective.

 For example. see “To start Developer” on page 19. and Restoring Sessions When you start Developer you are prompted to log on to the server that you want to  access. Closing. and Detail perspectives.1 Getting Started with Developer Resizing areas in the Developer window Click to hide or show the Navigation panel. Important! While you have an open session on a server through Developer. Drag movable borders to resize panels. you are  using a licensed seat for that server. In the Navigation panel. webMethods Developer User’s Guide Version 7.1 35 . click Open.  Complete the Open Session dialog box. You can open a session on another server without closing your current session by using  the SessionOpen command. You maintain a session on that server until you exit Developer or close the session. the  server that contains the selected element is the server on which your commands will be  executed. Click to hide or show the Properties and Results panels. Click to expand or collapse editor details. you may want to close your session to free a seat on the server for others  to use. At times when you are not actively using  Developer.1. For more information about completing this  dialog box. Click to display Edit. Opening.  To open a session on a different server 1 2 3 On the Session menu. the new element will be created on that server.  You can have open sessions on multiple servers at a time. UDDI Registry tab and Recent Elements tab. if you have the localhost:5555 server selected in the Navigation  panel and you select the New command. Click OK. Test.

 For more information  about refreshing the Navigation panel. When the server restarts. save any work that you want to keep and then close your session. Developer displays a  message stating that your connection to the server has been lost.1 . despite the loss of the  connection to the server.  Important! If a server shuts down and you close your session (that is. If you do not want to lose your work. A refresh action does not  restore the working state of an element if a server shuts down. click Cancel and wait for the  connection to that server to be restored.  Restoring a Session on a Server Sometimes a server might shut down before you can save your work. Developer notifies you when the server has shut down.) 36 webMethods Developer User’s Guide Version 7. After you receive notification of server  shutdown. (Developer also  displays this message if the network connection to the server is lost. click Close.    Note: Restoring a session is different from refreshing the session.1 Getting Started with Developer To close a session on the current server 1 2 Save any work that you want to keep.  To restore a session on the server „ On the Session menu. On the Session menu. Refreshing the  session updates your screen to reflect the actions of other users on elements that are  displayed within the Navigation panel and the editors. or exit Developer  before the server restarts. Developer  displays a message notifying you when the shutdown process began and how many  minutes remain before the server shuts down. Developer  preserves any unsaved work as well as lock information.1.  „ If the server administrator performed an immediate shutdown. Notification of Server Shutdown If the server administrator shuts down the server on which you have an open session.  Developer does one of the following: „ If the server administrator specified a time delay before shutdown. you can restore your session and save  your changes to the server. close unsaved elements on that server in the editor. click Restore. If you  do not close your session. disconnect from  the server). see “Refreshing the Contents of the  Navigation Panel” on page 25. Developer warns you that if you continue you will lose all  unsaved work.

 do not change your password  unless you use SSL to open the session on the webMethods Integration Server. If you forget your password. contact  the server administrator. If you  do not use SSL. Default 8 3 2 2 1 1 webMethods Developer User’s Guide Version 7. For more information  about restoring sessions. „ Change your password frequently. „ Do not share your password with anyone.1 37 . „ Do not write your password down. such as your name. ?. The default password requirements provided by webMethods are as follows:  Requirement Minimum length Minimum number of alphabetic characters Minimum number of uppercase characters Minimum number of lowercase characters Minimum number of numeric characters Minimum number of special characters (non‐alphabetic and non‐numeric  characters. spouse’s name. phone number. your server administrator can change these.  Password Requirements For security purposes. webMethods Integration Server contains a default set of  password requirements.  license plate.1 Getting Started with Developer If you did not save your work before shut down occurred.  Changing Your Password You can change the password for your user account.  Important! If you are outside of the corporate firewall. webMethods Integration Server places length and character  restrictions on passwords. child’s name. see “Restoring a Session on a Server” on page 36. follow the additional guidelines below: „ Do not choose obvious passwords.     Note: You cannot use Developer to change passwords that are stored in an LDAP  server. address. &) To ensure the security of your password. however. For more  information about these password requirements. contact your server administrator. „ Do not use any word that can be found in the dictionary. your password can be exposed in unencrypted form. or a birthday.1. you might be able to restore  your session when the server restarts and then save your work. such as *.

 click Contents from the Help menu.  Developer displays a description of the property at the bottom of the Properties  panel. Click OK. For help about the dialog box or Developer window area that currently  has the focus.1. or WmPublic packages.1 Getting Started with Developer To change your password 1 2 3 4 On the Session menu. you will receive a message stating that the administrator has disabled the  feature. do one of the following: „ „ „ „ Click the Help button (available in most dialog boxes). Using Online Help You can access online help at any point in webMethods Developer. WmDB. If you are browsing for a built‐in service to add to a flow service. For a description of a built‐in service within the WmART. For help about a property. type your new password.1 .  „ Built-in services. click the property in the Properties panel. select  the built‐in service in the editor and press F1. WmPRT. In the New Password field. To open the help  system and search for a topic of interest. Important! The server administrator can disable the feature for changing your  password from Developer. click On Topic. retype your new password. „ Properties. do one of the following: „ If you are browsing the services within a package in the Navigation panel.  „ „ You can also view or print descriptions of all built‐in services from one location by  clicking HelpBuilt-In Service Reference. In the Change Password dialog box. Developer  also provides the following types of context‐sensitive help: „ Window areas. in the Old Password field.  From the Help menu. If the feature is disabled and you try to change your  password. select the built‐in  service in the Select dialog box and press F1. In the Confirm New Password field.  WmPKI. type your current  password.  On the Developer window toolbar.   If you have added a built‐in service to a flow service using an INVOKE step.  38 webMethods Developer User’s Guide Version 7. click  . select a  service and press F1. Press F1. click Change Password.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Saving Changes to Elements . . . . . . . . . . . . . . . . . . . . . . . . . . „ Specifying Dependency Checking Safeguards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Deleting Elements . . . . . . . . . . webMethods Developer User’s Guide Version 7. . . . . .1. . . . . . . . . . . . . . . . . . . . . „ Caching Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Creating New Elements . . . . . . . . . . . . . . . . . . . „ Finding Dependents and References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Moving and Copying Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Renaming Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Opening and Closing Elements in the Editor . . . . . . . . . . . . . . „ Finding Elements and Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Inspecting Pipeline References . . . . . .1 39 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2 Managing Elements in the Navigation Panel 40 41 43 44 45 47 51 53 53 55 60 63 66 „ What Is an Element? . . . . . . . . . . . . . . . . . . . . . . „ Notes About Performing Actions on Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

 and IS  schemas.  finding. and IS schemas are elements. renaming. opening. The following table identifies where to go for more information about creating new  elements and performing actions on those elements..1.. triggers.. In the Navigation panel. deleting. and caching elements Locking elements Checking elements in to and out of a  third‐party version control  repository Performing actions on packages See. Creating..  Elements in the Navigation panel Folders. services.   For information about. IS document types. The sections in this chapter Chapter 4. “Locking and Unlocking Elements” webMethods Version Control System Integration  Developer’s Guide in the directory:  webMethods_directory\_documentation Chapter 3.1 . triggers. IS document types. servers and packages are not considered to be  elements. specifications. “Working with Packages” 40 webMethods Developer User’s Guide Version 7.  Elements include folders. services.2 Managing Elements in the Navigation Panel What Is an Element? An element is an item that exists in the Navigation panel in webMethods Developer. moving and  copying. specifications.

Follow the prompts given by Developer for the type of element you are creating. consisting of the folder path in which the element resides. For more information about these restrictions.  For details. the Finish button becomes active. To create a new element 1 2 3 On the File menu. Developer offers only the All Choices option.subfolder2:element For example.  When you have supplied all of the information that Developer needs to create the  element.Personal:HomeLoan webMethods Developer User’s Guide Version 7. which is contained in the  Finance folder.1.  Tip! You can quickly create an element by clicking   next to the New button on the  toolbar and then clicking the element you want to create. Developer adds the element  beneath the currently selected element. with a default name of Untitled. in the folder in which you want to create the new service. keep the following points in mind: „ You cannot create a new Java or C service unless all services of those types are  unlocked. the fully qualified service name is: Finance.1 41 . click New.  Developer creates the element and names it Untitled.2 Managing Elements in the Navigation Panel Creating New Elements When creating elements. which opens the New dialog box described in the procedure above. and the element  name.  About Element Names The fully qualified name of an Integration Server element is composed of two parts: a  folder identifier. On the New dialog box. 4 Click Finish. The Integration Server represents elements in the following format:    folder. see “Locking Java and C/C++ Services” on page 91. If you try to  create an element using a name that already exists at that level in any package.  „ Developer places some restrictions on the characters you can use in element and  package names. or locked by you.subfolder1. if the HomeLoan service is in the Personal folder. see “Guidelines for  Naming Elements” on page 42. „ The names of non‐folder elements must be unique across all packages.  If you select multiple elements and then click this button. click the type of element you want to create and then click  Next.

  42 webMethods Developer User’s Guide Version 7. such as multi‐byte characters If you specify a name that disregards these restrictions. including: ? & % ' @ * ^ : # ! $ = | ] ) } [ ( { " .). Nor does it affect how the element is referenced by a client  application. the package name is not part of the fully qualified  name of the element). For example. Depending on the action you are performing on the element. client applications would still  reference the service as Personnel:GetDeptNames.1. while. When this happens. \ < ~ . Package Names and Element Names The name of the package to which an element belongs has no bearing on the names of the  elements that package contains (that is. use a different name or try adding a letter or number to the  name to make it valid. „ Characters outside of the basic ASCII character set.  Developer accomplishes this either by alerting you that the action cannot be  completed or by appending a number to the name of the element after the action is  performed. For example. if you are copying a flow service named checkOrder2 to a  destination that already contains a flow service with that name. Specifically. and  if )   „ Digits as their first character   „ Spaces  „ Control characters and special characters like periods (. Developer displays an error  message. element and package names cannot contain:  „ Reserved words and characters that are used in Java or C/C++ (such as for. ` + / > . if you move a service called Personnel:GetDeptNames from a  package called Admin to a package called EmployeeData. Developer copies the  service and names the copy checkOrder2_1. Guidelines for Naming Elements webMethods Developer places some restrictions on the characters you can use in element  and package names.2 Managing Elements in the Navigation Panel Note: Developer ensures that the fully qualified name of each element within the  server is unique.1 .

 see Chapter 5. To specify dependency checking safeguards 1 2 On the Tools menu. see Chapter 4.1 43 . You must also have Write access to the element. specifications. moving. This dependency checking acts as a safeguard to  prevent you from inadvertently affecting other elements on the webMethods Integration  Server.2 Managing Elements in the Navigation Panel Editing Elements To edit an element. Developer deletes the  element without prompting you. you must first check out the element  before you can edit it. Instruct Developer to notify you before deleting an element  used by other elements. You can also have Developer update local references when pasting  elements. For more information about access permissions. or triggers. rename. IS document  types.  For more information about locking and unlocking elements. Developer lists those dependents and  prompts you to delete the element anyway or cancel the  action. such as flow services. Tip! You can produce printable versions of many of the elements in the Navigation  panel by clicking FileView as HTML. do the following: Select. If you have enabled the VCS Integration feature.. click Options.1. If you clear this check box. you must first lock it.. or move  elements in the Navigation panel.. Specifying Dependency Checking Safeguards Developer automatically checks for dependents when you delete.  Note: The dependency checking options are enabled by default. “Locking  and Unlocking Elements”. or renaming an element  with dependents. webMethods Developer User’s Guide Version 7. Click General. Under Navigation Panel. For more information. see the webMethods Version Control System  Integration Developer’s Guide in the webMethods_directory\_documentation directory.  If Developer finds elements that depend on the element  being deleted.  “Assigning and Managing Permissions”.  You can have Developer prompt you before deleting.. Confirm before deleting To. This is especially important during collaborative development on the same  webMethods Integration Server.

     If dependents exist. close the element in the editor. copy. you will  not be able to perform the action. Read access to select elements to  move or copy. and delete actions if you select a server. Notes About Performing Actions on Elements When performing actions on one or more elements. „ Developer prompts you to save changes to an element before allowing you to  perform an action on the element.. You must either ask your system administrator to  give you the required access to the elements or select only elements for which you  have the proper access. Developer disables the  cut. If you clear this check box. or exit Developer. keep the following points in mind: „ You must have at least List access to view elements.  „ Rename/move the selected element without updating  references to it. or triggers) exist. Prompt before updating dependents when renaming/moving  To.  Developer makes the action unavailable for use. Instruct Developer to alert you when dependents (that is. Developer also prevents you  44 webMethods Developer User’s Guide Version 7.  other elements that use the selected element. „ Cancel the action. close your session  on the current server. Developer retains the original  references in the copied elements. If an action is not allowed for one or more elements in a selection. „ The actions you can perform on items depend on the type and combination of items  you select. paste. For example. IS document types.. If you select multiple  elements and you do not have the required access to one or more of them.1 . Developer lists those dependents before  renaming or moving the selected element and prompts you  to: „ Rename/move the selected element and update  references in dependent elements.  Update local references when pasting multiple elements 3 Click OK.    If you clear this check box. such as flow  services.. Developer automatically updates  dependents without prompting you.    For more information about finding dependents.  and Write access to elements you want to rename or delete. Write access to the location to which you want to move/copy elements..2 Managing Elements in the Navigation Panel Select. see “Finding Dependents and  References” on page 60.1. Instruct Developer to update references when copying and  pasting a group of elements that refer to each other.

  For copy actions. copy. or delete must be unlocked. Developer handles actions performed on the document type as follows: „ For non‐copy actions.  „ The elements you want to move. For example.  „ Opening and Closing Elements in the Editor You can open elements from either the Navigation panel or the Recent Elements tab. see  Chapter 4.1. To view a folder’s properties in the Properties panel. „ Double‐clicking a folder expands or collapses the contents of the folder in the  Navigation panel. see  “Optimizing Lock Checking” on page 73. You can obtain more information  about why the action failed by clicking Details. you must also select the adapter notification before you can  perform a non‐copy action on the document type. and may stop responding completely when  you expand a large element (such as a folder) in the Navigation panel. the copied publishable document  type loses its association with the adapter notification. keep the following points in mind: „ Single‐clicking an element selects the element but does not display its details in the  editor.1 45 . “Locking and Unlocking Elements”. error messages (such as “Server version has  changed” and “Session already in use”). or  locked by you. webMethods Developer User’s Guide Version 7. Developer displays a dialog box  listing the elements for which the action failed. To improve performance during lock checking. rename. copy. „ You cannot undo a move. „ If you select multiple elements and Developer encounters an error while performing  the specified action on one or more of the elements. Double‐clicking an element opens it in the editor. „ If the Developer’s Version Control System (VCS) Integration feature is enabled.2 Managing Elements in the Navigation Panel from selecting multiple elements when doing so could cause confusion or undefined  results. or delete action using the EditUndo  command. For more information about locking and unlocking elements. However.  Developer might exhibit slowdowns. you cannot select a server and any other element. perform the  steps in the procedure that follows. This condition  occurs when Developer queries the Integration Server to check the lock state of each  element within an element. you can select the publishable document type without selecting  its associated adapter notification. rename. save. or a folder and one or more elements contained within that folder. „ If you select a publishable document type that is associated with an adapter  notification. When opening elements from the Navigation panel. a package and  any other element.

Tip! Press the SHIFT key as you click to select a group of adjacent elements. the element whose tab is  highlighted) Close all elements except the active one Close all elements in the editor Do this. click Close Active Editor.  Developer will prompt you to save changes. 2 On the File menu. click Close All Editors. Note: You do not need to close elements when you exit Developer. On the Window menu.2 Managing Elements in the Navigation Panel To open elements in the editor 1 Select one or more elements to open. click Open. On the Window menu.  On the Window menu. If you are opening an element from the Recent Elements tab and the element resides  on a server to which you are no longer connected.. If you close an element without saving changes made to the element... Developer  remembers which elements were open and displays them when you restart  Developer.1 . Press  the CTRL key to select a group of non‐adjacent elements. To close elements in the editor „ Do one of the following: To.1.. Close the active element in the editor  (that is.    46 webMethods Developer User’s Guide Version 7. click Close All But Active Editor. Developer prompts you to log on to  that server before displaying the element.

  webMethods Developer User’s Guide Version 7.2 Managing Elements in the Navigation Panel Moving and Copying Elements You can move or copy elements between packages and. „ After you move or copy an element.1 47 .  „ When you move or copy an element.  “Assigning and Managing Permissions”. When you delete a Java  service. folders.  When moving or copying elements. Developer will update the reference to the invoked service. across servers. Developer recompiles any Java services that remain in the source folder.    „ When you move or copy a Java service. Developer updates the references if you  have selected Update local reference(s) when pasting multiple elements on the Options  dialog box. see Chapter 5. You must restore the  universal name by editing the service’s properties. in most cases. Developer does not move/copy any output  templates that are associated with that service. if you copy a folder that contains two services and one of the  services invokes the other. Developer automatically changes the element’s  fully qualified name to reflect its new location.  „ If you move a service. however. Developer copies the element and  appends a number to the end of the name of the copied element. For example.  Developer does not retain the service’s explicit universal name. If you copy the element. „ When you copy multiple elements to another location on the same server and the  elements contain references to each other. or servers to where you want to move/copy them.  „ You cannot move multiple elements with the same name to a single location. For  more information about Write access and ACLs assigned to elements. For more information. keep the following points in mind:    General „ You must have Read access to the elements you are moving or copying and Write  access to the packages. Developer automatically recompiles the  service and any Java services that remain in the source folder. Developer retains the service’s  explicit universal name. the element becomes locked by you. „ You cannot move an element to a location that already contains an element with the  same name. see  “Assigning Universal Names to Services” on page 137.  Moving and Copying Services „ When you move or copy a service.1. If you copy a service or a folder containing a service. or a folder containing a service.

1 . Developer converts the publishable  document type to an IS document type on the destination server.1.  „ Elements you copy to a folder on a different server adopt the ACL access permissions  of the destination folder. Developer retains a copy  of the elements on the source server.  If you are configuring a cluster. unless the destination folder already contains  Shared fields with different values.  Copying Elements Between Servers „ You cannot copy or move a Web service descriptor element between servers. you must enable  the trigger. Developer  displays an error message stating that you are attempting to copy an unknown  element. the trigger will be pasted in a  disabled state. That is. you should paste the elements into  a location with the same name on the destination server.  „ When you move or copy a publishable document type to a destination on the same  server. Folders you copy to a package on a different server inherit the default ACLs  for top‐level folders. the moved or copied document type remains publishable.2 Managing Elements in the Navigation Panel „ You cannot move or copy a Java service to a folder that contains other Java services  that are system locked or locked by another user. For more  information about making IS document types publishable and synchronizing them  with Broker document types. You must copy the references to the destination server manually. even if they had explicitly assigned ACLs on the source  server.  and the destination server does not have that add‐in component installed.  „ When you move or copy a Java service. To create the subscriptions identified in the trigger. When you copy a package to another server. When you copy a  publishable document type to a different server. the triggers contained in the  package will maintain their original state. „ Developer does not automatically update references when copying across servers. Developer does not copy the add‐in elements but does copy other elements  in the selection. In this case. a move (cut and paste or drag) action is  the same as a copy action. „ When you copy a Broker/local trigger to another server. you must first manually copy the  Shared fields into the destination folder and then move or copy the Java service. Instead. „ Developer does not automatically copy an element’s references to the destination  server. „ When you cut and paste or drag elements between servers.  „ If you are copying an add‐in element that has a component that resides on the server.    48 webMethods Developer User’s Guide Version 7. if you are copying multiple elements from one server to another using  Developer and the elements reference each other. See the webMethods Integration  Server Administrator’s Guide for more information about this feature. see the Publish‐Subscribe Developer’s Guide. Developer will also move or copy the service’s  Shared fields to the destination folder. it displays a dialog box after the copy alerting you to any unresolved  references. use the package replication feature in the Integration  Server Administrator to populate the cluster nodes.  Therefore. If you attempt to do so. Developer  cancels the entire move/copy action.

. see the webMethods Integration Server Administrator’s Guide.  save the changes and repeat the move/copy action.1 49 . Do one of the following:  To.  „ You cannot move or copy a listener or connection element. If you do so. Developer displays a message  that identifies the elements that are preventing the action from completing  successfully. you can copy it. Click OK and then either obtain the proper access from your system  administrator or select only those elements to which you have proper access.  Select the location where you want to move or copy the elements. adapter notification publishable  document types. If you are selecting multiple  elements and your selection contains any of these elements.  If you do not have Read access to the elements you are moving or copying.. „ You cannot move or copy adapter notifications.  When you move or copy an adapter notification.  To move or copy elements 1 2 Select the elements that you want to move or copy. EditCut EditCopy Tip! You can cancel a cut action by pressing ESC. Developer alerts  you that you must first save the changes.. Developer alerts you that  the move/copy action cannot be completed. 3 If the elements you want to move or copy contain unsaved changes. Cut the element Copy the element Click. Then.  the copied document type remains publishable but is no longer associated with the  adapter notification.2 Managing Elements in the Navigation Panel Tip! To retain the status of a publishable document type and its link to a Broker  document type.. For information about package  replication.1. 4 5 webMethods Developer User’s Guide Version 7.  Moving and Copying Adapter Notifications and Related Elements „ Although you cannot move an adapter notification’s publishable document type  without also moving its associated adapter notification. or adapter services across servers. use the package replication functionality in the Integration Server  Administrator instead of using Developer to move or copy the package  containing the publishable document type. Click OK to close the alert dialog box. or Write  access to the location you are moving/copying them to. Developer also moves/copies its  associated publishable document type and prompts you to indicate whether to  move/copy the associated Broker document type.

 Developer prompts you to save the element(s). perform the following as  necessary:     „ If you are moving or copying the Java service to a folder with other Java services  that are system locked or locked by another user. do one of the following: „ If you are moving the element. Developer copies the element and appends a  number to the name of the copied element.)  9 If you clicked the Prompt before updating dependents when renaming/moving check box in  the Options dialog box and any elements on the current server contain unsaved  changes.. Developer copies the service and names the copy  checkOrder2_1. Developer alerts you that there is a conflict.2 Managing Elements in the Navigation Panel 6 7 On the Edit menu. you  must re‐specify the Shared tab information in the copy of the service.  Click OK and then ask the owner of the lock to remove the lock. If a conflict does exist..1 . if you are copying a  flow service named checkOrder2 to a destination that already contains a flow  service with that name.. Developer alerts you that the  element cannot be moved/copied. Save changes and then proceed with the move/copy action Continue the move/copy action without saving changes Cancel the entire move/copy action Click.   If the destination already contains an element with the same name as an element you  are moving or copying. Developer moves the Java service  and its shared source to the destination folder. Click OK to close the alert dialog box. see “Renaming Elements” on  page 51. Developer alerts you that the element cannot be  moved. If you are copying the element. Do one of the following:  To.  Note: If no shared Java source conflict exists. (You can  copy the information from the Shared tab for the original service to the Shared  tab for the copy of the service. Rename the element if desired and  repeat the move action. Click OK to use the destination  folder’s shared source. 8 If one of the elements you moved or copied is a Java service. click PasteAfter.1. (For example. „ For more information about renaming elements. or click Cancel to cancel the entire move action.) Rename the element if desired..   „ If the Java service you are moving or copying contains a shared source that  conflicts with the shared source of an existing Java service in the destination  folder. Save and Proceed Proceed without Save   Cancel 50 webMethods Developer User’s Guide Version 7.

1 51 .    „ When you rename an adapter notification. Developer automatically renames all of the elements in  that folder (that is. If you try to rename an element  using a name that already exists at that level in any package. „ If the folder you want to rename contains elements with unsaved changes.  Tip! You can also move elements by clicking and dragging them to their new location.1. changes their fully qualified names). webMethods Developer User’s Guide Version 7.  „ Element names must be unique across all packages. Renaming Elements When renaming elements.2 Managing Elements in the Navigation Panel 10 If you clicked Proceed without Save in Step 9. “Assigning and Managing Permissions”. When renaming a folder. keep the following points in mind: „ You can rename any elements for which you have Write access to the element and its  parent folder. see Chapter 5. Developer identifies the elements that will  be affected by the move.  „ When you rename a folder.. you must also have Write access to all  elements within the folder. Move the selected element and update references to  dependent elements Move the selected element in the Navigation panel without  updating references to dependent elements  Cancel the entire move action Click. Do one of the following:   To.  „ You cannot rename a listener or connection element. you must  save the changes before you can rename the folder.. Update Usages Ignore Usages Cancel For more information about dependency safeguards. Developer also renames its associated  publishable document type and prompts you to indicate whether to rename the  associated Broker document type. For more information about Write access and ACLs  assigned to elements. see “Specifying Dependency  Checking Safeguards” on page 43. Developer reverts the  element back to its original name...

  Do one of the following:  To. 5 If you clicked the Prompt before updating dependents when renaming/moving check box in  the Options dialog box and any elements on the current server contain unsaved  changes. Tip! You can cancel a rename action by pressing ESC.  52 webMethods Developer User’s Guide Version 7. Click OK to close the  alert dialog box.. Save changes and then proceed with the rename action Proceed with the rename action without saving changes   Cancel the entire rename action 6 Click. Rename the selected element in the Navigation panel and  update references to dependent elements    Rename the selected element without updating references to  dependent elements Cancel the entire rename action Click. Click OK to close  the message dialog box and repeat the rename action. save the changes and repeat the rename action.  Do one of the following:    To.  Developer moves the cursor to the end of the element name..1 . If an element already exists with that name at the same level.. Developer prompts you to save the element(s). Update Usages Ignore Usages Cancel For more information about dependency safeguards. see “Specifying Dependency  Checking Safeguards” on page 43. Save and Proceed Proceed without Save Cancel 4 If you clicked Proceed without Save in Step 5... Then. click Rename.   On the Edit menu.. Developer alerts you to the elements that  will be affected by the rename action.1.. Edit the name and press  ENTER.  If the element you want to rename contains unsaved changes. Developer displays a  message alerting you that the rename action could not be completed. Developer alerts you  that the element cannot be renamed until you save the changes..2 Managing Elements in the Navigation Panel To rename an element 1 2 3 Select the element that you want to rename.

. “Assigning and Managing Permissions”. Developer also deletes the  shared source for that folder. keep the following points in mind: „ You can delete any elements to which you have Write access for the element and its  parent folder. „ You can only delete an adapter notification’s publishable document type if you delete  its associated adapter notification. Deleting Elements When deleting elements.. see Chapter 5. On the File menu..2 Managing Elements in the Navigation Panel Saving Changes to Elements Changes that you make to an element are not written to webMethods Integration Server  until you explicitly save your work.  webMethods Developer User’s Guide Version 7. On the File menu.1. click Save. or perform an action on an element without saving your  changes.  „ You cannot delete a listener or connection element. no elements (including  non‐Java service elements) are deleted. Developer also deletes its associated  publishable document type and prompts you to indicate whether to delete the  associated Broker document type. close your session on the current server.. click Save All Editors. When deleting a folder. you must also have Write access to all elements  within the folder. on all  servers Do this.1 53 .    To save changes to elements „ Do one of the following: To. „ When you delete an adapter notification.  If you attempt to close Developer. For more information about Write access and ACLs assigned to  elements. Developer will prompt you to save changes first. If you cancel the delete action. Save changes to the current element Save all elements you have edited. close an  unsaved element in the editor.  „ When you delete a folder or the last Java service in a folder.

 you might break any  integration solution that uses the document type... Save changes and then proceed with the delete action Proceed with the delete action without saving  changes     Cancel the entire delete action b c Click. Developer  prompts you to confirm the delete action. Developer prompts you to  save the element(s). Developer  alerts you to the elements that will be affected by the deletion. Save and Proceed Proceed without Save Cancel If the elements you are deleting are not dependents of other elements.2 Managing Elements in the Navigation Panel To delete elements 1 2 3 Select the elements that you want to delete. If the elements you are deleting are dependents of other elements. Click OK. Delete the element on the Integration  Server but leave the corresponding  document type on the Broker     Delete the element on the Integration  Server and the corresponding  document type on the Broker Do this.. do the  following: a If any elements on the server contain unsaved changes. do one of the following:  To. publishable document types  associated with the deleted Broker document type will be removed from their  Integration Servers. Do the following: 1 If one of the elements you want to delete is a publishable document type or an  adapter notification. you might negatively impact any  publishable document types created from that Broker document type on other  Integration Servers...  On the Edit menu. If you selected the Confirm before deleting check box in the Options dialog box.. Clear the Delete associated Broker document type on the Broker check  box. click Delete. Select the Delete associated Broker document type on the Broker check  box.1.. Important! If you delete a publishable document type and Broker document  type associated with a trigger or a flow service.1 .    If you delete the Broker document type.. When the developers synchronize document types with  the Broker and they choose to Pull from Broker. Do one of the following: To. 54 webMethods Developer User’s Guide Version 7.

. The Find command searches the fully qualified names of elements.2 Managing Elements in the Navigation Panel 2 Continue or cancel the delete action as follows:   To. For example. The Find command interprets search terms as case‐sensitive regular expressions. the command looks for all elements containing a specified search term. Delete the elements from the Navigation panel (and  therefore break any links to dependent elements) Cancel the entire delete action Click. When creating and editing elements. if you specified “Test” as a search term. Continue Cancel For more information about dependency safeguards. For  example. and in a flow service’s Pipeline tab). you might  lose track of where you saved certain elements. the results display all elements with Test in their fully qualified name.  „ Locate an invoked service from the editor. This is especially helpful when working with a flow  written by another party and with complex flows that make multiple invokes.1 55 . You can highlight the location of an invoked  service in the Navigation panel. Finding Elements in the Navigation Panel Using the Find command. „ Find fields in editor trees. you can search across all packages and folders within a server  to find all occurrences of a specified element name. or an IS document  type called SampleTest. suppose that you do not  remember the folder to which you saved a service called Test..  Finding Elements and Fields You can find elements and fields within Developer using the following methods: „ Find elements in the Navigation panel. The  results could include a service called Sample located in a Test folder.1.. see “Specifying Dependency  Checking Safeguards” on page 43. the results would include elements  webMethods Developer User’s Guide Version 7. By  default..  from within a document or specification editor. You can search for fields in certain trees in the editor (that is. If you search for the  name Test.  You might want to search for fields when working with a large document with many  fields.

 but not Test OR Test1..2 Managing Elements in the Navigation Panel named “Test.  For example. PO ^PO PO$ :logPO$ log. “Regular  Expressions”..1.1 . 56 webMethods Developer User’s Guide Version 7. you can specify Test as a search term....” “MyTest. see Appendix B. For a complete list of regular expression operator characters. For example:  To find.” You can also include regular expression  operator characters. All elements containing “PO” All elements starting with “PO” All elements ending with “PO” All services with the exact name of “logPO” All elements containing “log” followed by any two characters (wildcards) Type. Note: The Find command supports regular expressions but not conditional statements.” and “TestFinal.

 select that element in the results and  click Go To. 6 To jump to an element in the Navigation panel. . click Find. you can highlight the element’s location in the  Navigation panel using the EditLocate in Navigation  command.. select the package in  the Package list.. The Find In Navigation Panel dialog box displays the results of the search. Click Find. Note: If you receive a “Couldn’t find in Navigation panel” message when you click Go To. type any portion of the fully qualified name of the  element that you want to find. All of these elements contain “PO” in their fully qualified name.  If you want to limit the scope of the search to a specific package. On the Edit menu. Contact your server  administrator to obtain access.1.   webMethods Developer User’s Guide Version 7.2 Managing Elements in the Navigation Panel To find an element in the Navigation panel 1 2 3 4 5 Click anywhere in the Navigation panel. Tip! For an active element in the editor..the names of 33 elements in the Navigation panel. Results of search for “PO” The term “PO” is found in.. you probably do not have List access to the element. In the Find In Navigation Panel box. Developer displays the Find In Navigation Panel dialog  box.1 57 .

„ You can refine your search by requiring Developer to find only fields that match the  capitalization of the search text or fields that match only the complete word specified  as the search text.  Note: Developer interprets the forward slash character (/) as the divider between  the name of a parent field and a child field.  After completing a search of the entire tree. Developer selects  the field in the tree. Use a forward slash (/) to separate the parent  field from the child field. If you have not selected a field.  When Developer finds a field that matches the search criteria.  „ Developer does not treat search text as a regular expression. For example. if you want to find fields that  contain the text number in the Pipeline In and Service In areas of the Pipeline tab.2 Managing Elements in the Navigation Panel Finding Fields in Editor Trees You can search for a field in any of the following trees in the editor: „ Trees in a document or specification editor „ Trees in the Pipeline In. „ „ „ 58 webMethods Developer User’s Guide Version 7. Developer does not search for a field  named true/false.1. Developer will not search for a field  name that contains a forward slash character. search  one tree. For example. Developer searches for fields that contain the text ^PO. Developer displays a message  asking if you would like to continue searching from the top of the tree. Service In. keep the following points in mind: „ You can search only one tree at a time. if you specify  address/street as the search text. Developer begins searching at the selected field and continues  to the bottom of the tree. if you type  ^PO. Developer does not  search for fields that begin with the text PO. and then the next. If you  specify customerInformation/address/street as the search criteria. For example. Developer begins  searching at the top of the tree. Developer searches for a field named false that is a child of a  document or document list field named true. For example. Pipeline Out.1 .  When Developer reaches the bottom of the tree. „ Developer searches the tree as follows: „ If you select a field. Developer  searches for a field named customerInformation that contains a field named address  which contains a field named street. Developer searches for all instances where a field  named street is a child of a document or document list field named address.  „ You can search for a parent and child field combination. Developer displays a message stating that the search text was not found. and Service Out areas in the Pipeline tab of  a flow service editor  When searching for fields on an editor tree. if you type true/false  as the search text. if Developer cannot find a matching  field.

Select the Match case check box. If you want to search for a  parent‐child field combination. click Locate in Navigation. Developer locates and selects the service in  the Navigation panel.  Clear the Match whole words check  box.  To further refine your search.1. If Developer finds a match. Select the Match whole words check  box.     In the Find what field.1 59 . select the INVOKE step containing the service you want to locate. use a forward slash (/) to separate the parent field  from the child field.. click Find. 4 Click Find Next. it selects the field and displays it on the  Pipeline tab. Find fields with the same capitalization as the  text in the Find what field Find only fields that match the complete word  in the Find what field Find fields that contain the text in the Find what  field as all or a portion of their name 5 6 Do this. On the Edit menu. type the text you want to search for. do one or more of the following: To..  On the Edit menu.  Click Find Next to find the next field that matches the search criteria.  Locating Invoked Services You can navigate to the location of an invoked service in both the flow view.2 Managing Elements in the Navigation Panel To find a field within an editor tree 1 2 3 Select the tree in which you want to search for a field.  To find an invoked service 1 2 In the editor.. webMethods Developer User’s Guide Version 7..

. To find dependents of a selected element 1 2 In the Navigation panel or in the editor. and a  reference is an element that is used by a selected element. On the Tools menu. In Developer.1 . you can determine whether other  elements will be affected by the change by finding dependents and references of the  element. you might want to know what  elements.  Note: Developer does not consider a Java service that invokes another services to be a  dependent.. During debugging.  Dependent elements This service is a dependent of. click Find Dependents. For example. suppose that the flow service  ServiceA invokes the flow service receivePO. is a dependent  of) the receivePO service. ServiceA will  not run. you can  find dependents of the selected element. and you instruct  Developer to find dependents of service B. before editing an IS document type. if Java service A invokes service B. such as specifications. If you delete receivePO from the Navigation panel.2 Managing Elements in the Navigation Panel Finding Dependents and References Before performing an action on a selected element. . or flow services.1. you might want to locate all of the dependents of a given service or IS  document type. Or.. will be affected by  changes to the IS document type. Use the Find Dependents command to find all the  dependents. The ServiceA service uses (that is.. select the element for which you want to find  dependents. a dependent is an element that uses a selected element. Finding Dependents To determine how a selected element is used by other elements on the server. The Find Dependents dialog box displays the dependents of the  element. For example.each of these services. service A will not appear as a dependent. Broker/local triggers.  60 webMethods Developer User’s Guide Version 7.

During debugging of a complex flow service. Use the Find References  command to locate the references.1.schema:validate. and specifications used by the flow service. you can find  references of the selected element.. pub. processPO and submitPO. and submitPO. To limit the scope of the search to a specific package.1 61 . you might want to locate all of the services. 3 After Developer finds the dependents of the selected element. For example.  webMethods Developer User’s Guide Version 7. in its input  signature. click   next to the item in the results  list... the flow service ServiceA invokes the  services receivePO.2 Managing Elements in the Navigation Panel Find Dependents dialog box The services:receivePO service is used by. and the IS document type PODocument. they are references of) ServiceA. .this element. you may do any of the  following: „ To jump to an element in the Navigation panel.  The services receivePO. Additionally. validate.  IS document types.  Elements as references Each of these services is a reference of ServiceA. are used by (that is. select that element in the results  and then click Go To.. select the package in the  Package list and then click Find. To see all dependents of a found dependent. „ „ Finding References To determine how a selected element uses other elements on the server. ServiceA declares a document reference to the IS document type PODocument. processPO.

 IS document type. On the Tools menu. The  element might have been renamed. select that element in the results  and then click Go To. nor does it consider services invoked within a Java service to be references  of the Java service. Note: Developer does not consider document references to schema types to be  references.  Find References dialog box The processPO service uses.these elements. To see all references of a found reference.1.2 Managing Elements in the Navigation Panel You can also use the Find References command to locate any unresolved references. click Find References. or deleted. The element in bold italics does not exist in the Navigation panel 3 After Developer finds the references of the selected element. To find references of a selected element 1 2 In the Navigation panel or in the editor. moved. service B will not appear as a reference of A. „ 62 webMethods Developer User’s Guide Version 7. see “Specifying Dependency Checking Safeguards” on page 43. Unresolved  references are indicated in bold italics. if Java service A invokes service B. select the element for which you want to find  references. To prevent unresolved references. and you instruct  Developer to find references for service A. An  unresolved reference is an element that does not exist in the Navigation panel yet is still  referred to in the service. click   next to the item in the results  list.  specify the dependency checking safeguards..1 . or specification that you selected.. For example. you may do either of the  following: „ To jump to an element in the Navigation panel... . For more information about these  safeguards. The Find References dialog box displays the references of the element.

 The changes might  make pipeline references invalid.. For example. in its  input signature.1. .. Examples of pipeline references This Drop Value modifier and. then that link is a pipeline reference.. ServiceA declares a document reference to the IS document type  PODocument.. the link between PoNum and num is a  pipeline reference. Drop. or Set Value pipeline modifier is assigned to a field  in a document reference or document reference list on the Pipeline tab. In  the following illustration of the Pipeline tab. Pipeline references are also those locations where you assign  a   Set Value modifier or a   Drop Value modifier to a field in a document reference or document reference list.  Pipeline reference This variable is a reference to the PODocument in the Navigation panel. The link between ONum and num is a pipeline reference. For example. this Set Value modifier are pipeline When you edit an IS document type. suppose the input signature for ServiceA  contains a document reference variable POInfo based on the IS document type  webMethods Developer User’s Guide Version 7.1 63 . The  following illustration of the Pipeline tab identifies these types of pipeline references. If ServiceA contains an INVOKE or MAP step in which a field in the document  reference is linked to another pipeline variable.2 Managing Elements in the Navigation Panel Inspecting Pipeline References A pipeline reference is where a Link. the changes affect any document reference and  document reference list variables defined by that IS document type.

  „ When you inspect pipeline references in a flow service.1. The IS document type PODocument contains the field PONum. You can use the ToolsInspect Pipeline References command to  locate any broken or invalid pipeline references. it will not appear in the search results even though it is invalid. you might want to check all dependent pipeline  modifiers for validity. You can use this command to:  „ Search for invalid pipeline references in a selected flow service.1 .) Therefore.  „ When you inspect pipeline references for an IS document type.  you link the PONum field to another pipeline variable. This dimensionality mismatch will not  appear in the search results. it is invalid) because the  pipeline contains a link to a field that does not exist.  „ The search results will not show data type and dimensionality mismatches. In the pipeline  for ServiceA. The search results include only flow services. keep the following points in mind: „ You can inspect pipeline references in a selected flow service. or document reference list variables that contain  invalid pipeline modifiers.  document reference variables. You can also inspect  pipeline references for document reference or document reference list variables based  on a selected IS document type. (That is. Developer inspects references  across all packages on webMethods Integration Server. „ Values set at the top level of a document reference or document reference list in the  pipeline are not considered pipeline references. suppose that you link a String named Number to the  PONum String list  within the document reference PODocument. For  example. the pipeline reference (the  link) for the field in the ServiceA pipeline is broken (that is. If you edit the  PODocument IS document type by deleting the PONum field.2 Managing Elements in the Navigation Panel PODocument. „ Search for invalid pipeline references involving document  reference and document  reference list variables defined by a selected IS document type.  64 webMethods Developer User’s Guide Version 7. if a Set Value modifier assigned to a document reference contains input values for a  nonexistent field.  When you edit an IS document type. you can inspect  references across a specific package or all packages. When inspecting pipeline references. a   Set Value modifier  assigned to the document reference is not a pipeline reference.

  „ „ „ webMethods Developer User’s Guide Version 7. The Inspect Pipeline References dialog box displays all invalid pipeline references for  the selected service or IS document type.an invalid reference in its pipeline to the IS document type po_doc.. select that element in the results  and then click Go To. the search results contain all of the document  references that have invalid pipeline references in that flow. On the Tools menu. keep the Inspect Pipeline References dialog box open and click Edit   Find Next. the search results contain all of the flow  services that have invalid pipeline references to that IS document type.. click Inspect Pipeline References. . you may do any  of the following: „ To jump to an element in the Navigation panel.1. select the element in the  results and then click Find in Flow. 3 After Developer finds the pipeline references of the selected element. select the flow service or IS document type  for which you want to find invalid pipeline references..  If the selected element is a document type and you want to limit the scope of the  search to a specific package.  If the selected element has multiple unresolved references in the same flow  service and you want to automatically jump to the next reference within the  selected element.  „ If you inspected a flow service. „ Inspect Pipeline References dialog box The getData flow service contains. select the package in the Package list and then click  Inspect. If you inspected an IS document type. To use the Find Next  command.2 Managing Elements in the Navigation Panel To inspect pipeline references 1 2 In the Navigation panel or in the editor.1 65 . you can use the Find Next command..  To jump to the unresolved reference in the pipeline.

 The higher the number of elements.  Note: Keep in mind that increasing the cache reduces the amount of available memory. in the Number of elements to cache box. The caching settings take effect immediately. click Options.  To cache elements 1 2 3 On the Tools menu.  In the Options dialog box. the  more likely an element will be in the cache.  remove the breakpoint and clear the cache again) „ Flow services that are currently being debugged (for example.1. Developer does  not need to request them from the Integration Server and can therefore display them  more quickly. click General.2 Managing Elements in the Navigation Panel Caching Elements You can improve performance in Developer by caching Navigation panel elements that  are frequently used. you remove Navigation panel elements from  memory for all servers. consider decreasing the number of cached  elements. Under Navigation Panel. if a service has been  stepped into) „ Unsaved elements Keep in mind that the cache is automatically cleared when you close Developer or when  you refresh the session by using the SessionRefresh command.  The minimum number of elements is 10. type the number of  elements that you want to cache per Developer session.     4 Click OK.  If you experience memory problems. If you enter an illegal cache size Developer displays an error and resets the cache size  to the previous value. The total number of cached  elements includes elements on all the servers to which you are connected. which reduces network traffic and speeds  up Developer. The following elements are not removed: „ Flow services with breakpoints (if you want to clear the flow service from the cache.  66 webMethods Developer User’s Guide Version 7.1 . Clearing the Developer Cache When you clear the Developer cache. When elements are located in the Developer cache.

 click the Clear Cache button.2 Managing Elements in the Navigation Panel To clear the Developer cache 1 2 3 On the Tools menu. If you want to clear the  contents of the pipeline from a server’s cache. Note: Clearing cached elements from Developer is different from clearing the contents  of the pipeline from webMethods Integration Server cache. Under Navigation Panel.1 67 . All cached elements are removed  from memory. Developer displays the Options dialog box. click Options. see “Configuring a Service’s Use of  Cache” on page 131.1. webMethods Developer User’s Guide Version 7. Click General.

1 .2 Managing Elements in the Navigation Panel 68 webMethods Developer User’s Guide Version 7.1.

. . . . . . . . . . . . . . . .1 69 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Shutdown. . . . . . . . . . . and Replication Services . . . . . . . . .1. . . . . . . . . . . . . . „ Package Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . webMethods Developer User’s Guide Version 7. . „ Assigning Startup. . . . . . . . .3 Working with Packages 70 70 83 „ What Is a Package? . . . . . . . . . . . . . . . . . . . . . . . . . .

  The following table identifies all of the package management tasks that can be performed  using Developer or the Integration Server Administrator. and deleting packages. All the components that belong to a  package reside in the package’s subdirectory. specification. IS schemas. the See column directs you to a page within this guide for instructions..  Although you can group services using any package structure that suits your purpose. the See  column directs you to the webMethods Integration Server Administrator’s Guide.1 . such  as creating. IS document types.  most sites organize their packages by function or application. If you can perform the task  with Developer. distribute. such as  specifications. IS schema. a package represents a subdirectory within the  IntegrationServer_directory\packages directory. they might  put all purchasing‐related services in a package called “PurchaseOrderMgt” and all time‐ reporting services into a package called “TimeCards. reload. copying.  For tasks that can only be performed using the Integration Server Administrator.1.3 Working with Packages What Is a Package? A package is a container that is used to bundle services and related elements. you can copy.  or delete the set of components (the “package”) with a single action.. To. page 72 webMethods Integration Server  Administrator’s Guide page 74 70 webMethods Developer User’s Guide Version 7. on the Integration Server.  Note: Every element in webMethods Developer must belong to a package. Create a package Activate a package  Copy a package to another server See. When you create a  folder. For example. service.” On the server. and output templates. When you  perform a package management task. For example. all of the files and services in the package are  affected. For example.. you save it  in a package. or output template. By grouping these components into a single package. you might group all the services and files specific to a particular  marketplace in a single package. For a list and description of packages installed with the Integration Server.. Packages are designed to hold all of the components of a logical unit in an integration  solution. Package Management You can use webMethods Developer to perform certain package management tasks. IS document type. see the  webMethods Integration Server Administrator’s Guide.  you can easily manipulate them as a unit.

1 71 .3 Working with Packages To.1..... or replication  services to a package Reload the services and files in a package  into memory without restarting the server Delete the contents of a package Assign a version number to a package Identify packages that must be loaded  before a specific package is loaded (package  dependencies) Export a package or partial package Replicate or copy the contents of a package  and send (publish) it to other Integration  Servers Disable a package without deleting the  package Enable a package that you previously  disabled Recover services and related files from a  deleted package Archive a copy of the package (such as for a  backup copy) page 78 page 74 and  webMethods Integration Server  Administrator’s Guide webMethods Integration Server  Administrator’s Guide webMethods Integration Server  Administrator’s Guide webMethods Integration Server  Administrator’s Guide webMethods Integration Server  Administrator’s Guide webMethods Developer User’s Guide Version 7. View details for a package Display specific packages by filtering the  Packages List Document the purpose and function of a  package View the patch history for a package  See. shutdown. page 73 webMethods Integration Server  Administrator’s Guide page 76 page 79 and  webMethods Integration Server  Administrator’s Guide page 83 page 77 and  webMethods Integration Server  Administrator’s Guide page 77 and  webMethods Integration Server  Administrator’s Guide page 78 and  webMethods Integration Server  Administrator’s Guide page 81 Assign startup.

  „ Make sure the package name describes the functionality and purpose of the services it  contains.cnf file (which  is located in the IntegrationServer_directory\config directory) defines all the  characters that you cannot use when naming packages. Developer refreshes the Navigation panel and displays the new package. and the underscore character. see the webMethods Integration Server  Administrator’s Guide. „ Avoid using the prefix “Wm”.illegalNSChars setting in the server. use ProcessPO. Developer uses the “Wm” prefix for predefined  packages that contain services. and then click Next. „ Avoid creating package names with random capitalization (for example. Click Finish. select Package.) in a  package name.” and “the”) in the package name. PurchaseOrder). In the New dialog box. use TestService. For example. Additionally. „ Avoid using articles (for example.3 Working with Packages Creating a Package When you want to create a new grouping for services and related files. the  operating system on which you run the Integration Server might have specific  requirements that limit package names. output templates. specifications.  numbers. In the Name field. type the name for the new package using any combination of letters. IS document types. „ Keep package names short. 72 webMethods Developer User’s Guide Version 7. IS document types.  Packages can store services. Developer creates a new subdirectory for the package in the  file system on the machine where the Integration Server is installed. For information  about the subdirectory and its contents.  To create a package 1 2 3 On the File menu.server. and other files. create a package. Guidelines for Naming Packages Keep the following guidelines in mind when naming new packages: „ Start all package names with an uppercase letter and capitalize the first letter of  subsequent words (for example. instead of TestTheService. “a.” “an.  instead of ProcessPurchaseOrder.  Developer displays the New Package dialog box. and  schemas. Use abbreviations instead of full names. The watt. click New.1. For  example.  When you create a package.  cOOLPkgTest). Note: Avoid using control characters and special characters like periods (.1 .

 with  a default name of Untitled.  webMethods Developer User’s Guide Version 7. This  condition occurs when Developer queries the Integration Server to check the lock state of  each element in a package.    Viewing Details for a Package Double‐clicking a package in the Navigation panel expands or collapses the contents of  that package.  Developer might exhibit slowdowns. Optimizing Lock Checking If the Developer’s Version Control System (VCS) Integration feature is enabled. To view details for a package 1 2 Select the packages whose details you want to view.1 73 . Developer adds the folder beneath the package.1.3 Working with Packages Tip! You can quickly create a package beneath the server you are currently working  with by clicking   next to the New button on the toolbar and then clicking Package. error messages (such as “Server version has  changed” and “Session already in use”). For more information about package details.  You can then create a folder beneath the package by clicking   next to the New  button and then clicking Folder. “Viewing the Patch History for a Package” on page 79. and may stop responding completely when you  expand a large element (such as a folder) or a large package in the Navigation panel. see “Assigning a Version Number to a  Package” on page 78. and  “Identifying Package Dependencies” on page 81. On the File menu. To view details for a package in the editor. perform the steps in the  following procedure.  Type the name of the package and then click OK. click Open.

 You can copy a package and its contents to another Integration Server  from within Developer by performing a copy or a drag‐and‐drop action. After this maximum is reached. Copying a Package to Another Server You can copy a package to another Integration Server in one of two ways:  „ From Developer.  cached lock state information will be retrieved. This state may be incorrect.maxLockInfoCalls=<value> Defines the maximum number of cached lock states that are retrieved. These cached values may be inaccurate. You can then send. Note: The lower the values for these settings. the last known lock state for each  remaining element is used. Shut down and restart Developer. Add the following properties to the file: dev. Copying packages using this  method allows you to customize the way in which packages are replicated and  published. or  publish. This method is useful for managing releases between development and  production environments.cnf with a text editor. the package to other Integration Servers. but the  only result is that menu items may be enabled or disabled incorrectly. cached  values are retrieved for each element.  dev. You can also copy a package from within the  Integration Server Administrator by replicating the package. or for  74 webMethods Developer User’s Guide Version 7. For elements 101 and above. for deploying releases to partners or customers. the only result is  that menu items may be enabled or disabled incorrectly.1. the last  known lock state will be used.  „ From Integration Server Administrator. Copying  packages using either of these methods provides a quick way to share a set of services  and their supporting files with other developers in a development environment. This may result in some temporarily out‐of‐sync lock states. Lock state information is updated as child elements are opened in the Navigation  panel. The default  value is 100.3 Working with Packages To optimize lock checking 1 2 Open the file Developer_directory\config\developer. The default value is 20. 3 4 Save the file. After this maximum is reached. but these will be  updated during normal Developer operations. For elements 21‐100.1 . the more the performance will improve. For example.maxServerLockInfoCalls=<value> Defines the maximum number of lock state queries that will be made from Developer  to Integration Server. when a large package is opened (using the default values): Full lock  status information will be retrieved for the first 20 elements. but as above.  Applying a value of zero (0) to these settings will eliminate all lock state queries to the  server.

On the Edit menu.    „ You cannot undo a copy action using the EditUndo command.1. contains  package dependencies). To copy a package 1 2 3 Select the package that you want to copy.  Note: Because UNIX directories are case sensitive.  Select the server where you want to copy the package.  „ You can copy a package to a different server only if you are a member of a group  assigned to the Replicators ACL on the source and destination servers and you are  logged on to both servers. you can copy a package named orderProcessing to a server that  contains a package named OrderProcessing. the package will be copied but it will not be enabled.  For information about replicating packages and managing releases from within  Integration Server Administrator. „ You cannot copy a package to another server if the destination server already contains  a package with that name. „ If you copy a package that depends on other packages to load (that is. Then.  Tip! You can also copy packages by clicking them and dragging them to their new  location. For example. Developer retains a copy of the package and its contents on the source  server. For more information about setting package dependencies. Integration Servers running in a  UNIX environment will allow packages with similar names to reside on the same  server. save the changes and repeat the copy action.1 75 . keep the following points in mind. click Paste After. see the webMethods Integration Server Administrator’s  Guide. click Copy. On the Edit menu. and the required packages are not present on the destination  server. you must  save the changes. If the package you want to copy contains elements with unsaved changes.  “Managing Elements in the Navigation Panel”. For more information about copying elements within a package. see “Identifying Package  Dependencies” on page 81. 4 5 webMethods Developer User’s Guide Version 7. Developer  alerts you that the package cannot be copied until you save the changes. When copying packages. collaborative  environments. Click OK to  close the alert dialog box. „ Before you copy a package that contains elements with unsaved changes. see Chapter 2.3 Working with Packages distributing package updates to developers working in large.

html. Be  sure to name the home page for the package documentation index.  To access documentation for a package „ Enter the URL for the package documentation.html file.  Place the documents in the pub subdirectory for the package on the Integration  Server.1 . this directory is  used for reference material such as PDFs that do not need to be published to the  Web. For example.  To create documentation for a package 1 Document the package in one or more Web documents (such as HTML pages). is the name of the package for which you want documentation. The URLs for package documentation  have the following format: http://serverName:port/PackageName/DocumentName where: serverName:port  PackageName DocumentName is the name and port address of the Integration Server on which  the package resides.html file can contain links to the other Web documents for the package. is the name of the Web document you want to access.3 Working with Packages Documenting a Package You can communicate the purpose and function of a package and its services to other  developers by documenting the package. Typically. place the package documentation for a package named  “PurchaseOrders” in the following directory:  IntegrationServer_directory\packages\PurchaseOrders\pub Tip! An alternate location for package documentation is the  IntegrationServer_directory\packages\doc directory. If you do  not specify a DocumentName. The  index.html file exists for each package installed by the Integration Server. the Integration Server  automatically displays the index.1. An  index. 2 76 webMethods Developer User’s Guide Version 7.

 you can delete the package. webMethods Developer retrieves a fresh copy of  the contents of all the packages from the memory the Integration Server. click Reload Package. On the File menu. the Integration Server saves a copy of the  package. „ Any of the configuration files for the package are modified. If you later want to recover the package and its contents. For more information. IS  document types. „ New jar files are added to the package. Deleting a Package When you no longer need the services and files in a package. You can use the Find Dependents command to identify other services that are dependent on a service in a package that  you want to delete. Note: Reloading a package is not the same as refreshing the Navigation panel. see “Finding Dependents and References”  on page 60. contact your server  administrator. and schemas in the package. You need to reload a package if any of the following  occurs: „ A Java service that was compiled using jcode is added to the package. you need to reload a package on the server to activate changes that have been  made to it outside of Developer. If  the package contains elements that are locked by others or system locked.  When you delete a package from Developer. see the webMethods Integration Server  Administrator’s Guide. templates.1.  Deleting a package removes the package and all of its contents from the Navigation  panel. make sure that: „ Other users or other services do not use (depend on) the services. Only Integration Server Administrator users can recover a package.1 77 . select the package you want to reload.3 Working with Packages Reloading a Package Sometimes. To reload a package 1 2 In the Navigation panel. When  you refresh the Navigation panel. or locked by you. you cannot  delete the package.  Before you delete a package. When you  reload a package. „ All elements in the package that you want to delete are unlocked. webMethods Developer User’s Guide Version 7. For  more information about recovering packages. the Integration Server removes the existing package information  from memory and loads new versions of the package and its contents into its  memory.

 you might want to assign a new version number to a package  when you add new services to the package or after you fix bugs in a package. For example. Assigning a Version Number to a Package You can assign a version number to a package to identify different versions of the  package. Developer displays the Export To dialog box. select the folder or element that you want to export. 78 webMethods Developer User’s Guide Version 7.0 to each package that you create.  By default. such as a folder. Exporting a Package or Element Packages or parts of a package. select the package you want to delete. can be exported to your hard drive so  that they can be shared with partners or developers. Locking information is not exported. Developer assigns the version number 1. Select the location on your hard drive where you want the exported package to reside.3 Working with Packages To delete a package 1 2 In the Navigation panel. The ZIP file can  then be published on another server. click Export. To export an element 1 2 3 In the Navigation panel. click Export.1. select the package you want to export. Select the location on your hard drive where you want the exported partial package to  reside.1 . Click Save. To export a package 1 2 3 In the Navigation panel. This exports the folder or element to a ZIP file and saves it on your hard drive. This exports the package to a ZIP file and saves it on your hard drive. You can install an exported package  on another server by using the package publishing functionality in the Integration Server  Administrator.     On the File menu. The  ZIP file can then be unzipped into the ns directory of a package on the server. Developer displays the Export To dialog box.  Click Save. On the File menu. click Delete. You might  find assigning version numbers especially helpful if you work in a development  environment where more than one person makes changes to a package. On the Edit menu.

3 Working with Packages

Important! When you change the version number of a package, make sure that you  update the package dependencies for other packages that depend on the earlier  version of this package.  Tip! Assign and change package version numbers through Developer only when the  packages are in a development stage. To avoid difficulties installing package releases,  do not change version numbers on packages you receive from trading partners,  packages to which you subscribe, or packages installed with the Integration Server.  To assign a version number to a package 1 2 3 4 In the Navigation panel, select the package to which you want to assign a version  number. On the File menu, click Open.    In the editor, click the package’s Settings tab. In the Package Version field, type the version number you want to assign to the  package. Be sure to format the version number in one of the following ways: X.X or  X.X.X (for example, 1.0, 2.1, 2.1.3, or 3.1.2). On the File menu, click Save to save your changes.  If the version number you entered does not use one of the formats specified in step 4,  Developer displays a message stating that the format is not correct. Note: You can also use the Integration Server Administrator to assign version numbers  to packages. For more information, see the webMethods Integration Server  Administrator’s Guide.

5

Viewing the Patch History for a Package
For each package, Developer tracks and displays the history of installed patches. A patch  is a partial upgrade, change, or fix to the contents of a package.  You might want to check a package’s patch history for the following reasons: „ To avoid overwriting the installed package with a lower version of the same package.  „ To view the changes that are included in each version of the package.  „ To inform Software AG Customer Care which versions of predefined packages are  installed on your Integration Server. When you open a package in the editor, the package’s Settings tab displays the patch  history since the last full release of the package. (A full release of a package incorporates  all previous patches for the package.)

webMethods Developer User’s Guide Version 7.1.1

79

3 Working with Packages

The Settings tab displays patch history for the package

These fields display information about the currently installed patch...

...and these fields track the patch history for the package.

Note: With the exception of the Package version field and the fields under Package dependencies, the fields on the Settings tab are display‐only. Note: When the server administrator installs a full release of a package (a release that  includes all previous patches for the package), the Integration Server removes the  existing patch history. This helps the server administrator avoid potential confusion  about version numbers and re‐establish a baseline for package version numbers.  To view patch history for a package 1 2 3 In the Navigation panel, select the package for which you want to view a patch  history.  On the File menu, click Open.    In the editor, click the package’s Settings tab and review the fields under Patch history. This field... Name Version Specifies... The name of the package. The version number of the package. A user assigns a version  number when they create a package release. By default, Developer  assigns version 1.0 to a new package.

80

webMethods Developer User’s Guide Version 7.1.1

3 Working with Packages

This field... Build

Specifies... The build number of the package. The build number is a generation  number that a user assigns to a package each time the package is  released. For example, a user might release version 1.0 of the  “Finance” package ten times and assign build numbers 1,2,3…10 to  the different releases or builds of the package. The Build number is not the same as the Version number. One  version of a package might have multiple builds. 

Description Time JVM Number Publisher Patch Number

A brief description of the package written by the user who created  the package release.  The time at which the package release (patch) was created.  The version of the JVM (Java virtual machine) required to run the  package. The name of the publishing server that created the package release. The patch numbers included in this release of the package.

Identifying Package Dependencies
If a package needs the services in another package to load before it can load, you must set  up package dependencies. For example, you should identify package dependencies if a  startup service for a package invokes a service in another package. The startup service  cannot execute if the package containing the invoked service has not yet loaded. You should also identify package dependencies if Java services in a package need to  access Java classes contained in another package. When you identify a package dependency, you must indicate the version number of the  package that needs to load first. For example, the “Finance” package might depend on  version 2.0 of the “FinanceUtil” package. It is possible that the services and elements  needed by a dependent package are contained in more than one version of the same  package. For example, the “Finance” package might depend on version 2.0 or later of the  “FinanceUtil” package. Important! If you create new adapter services and adapter notifications, you should  save them in packages that identify the webMethods AdapterName package as a  package dependency.

webMethods Developer User’s Guide Version 7.1.1

81

3 Working with Packages

Important! Other webMethods components might include packages that register new  types of elements in Developer. You should save instances of these new element types  in packages that list the registering package as a package dependency. The registering  package needs to load before your packages so that Developer can recognize  instances of the new element type. For example, if you create new flat file schemas,  you should save the flat file schemas in packages that identify the WmFlatFile  package as a package dependency.  To identify package dependencies for a package 1 2 3 4 5 In the Navigation panel, select the package for which you want to specify package  dependencies. On the File menu, click Open. In the editor, click the package’s Settings tab.  Under Package Dependencies, click  .  

In the Enter Input Values dialog box, enter the following information: In this field... Package Version Specify... The name of the package you want Integration Server to load before  the package selected in the Navigation panel. The version number you want Integration Server to load before the  package selected in the Navigation panel.  More than one version of the same package might contain the  services and elements that a dependent package needs the  Integration Server to load first. You can use an asterisk (*) as a  wildcard in the version number to indicate that any version number  greater than or equal to the specified version will satisfy the package  dependency. For example, to specify version 3.0 or later of a  package, type 3.* for the version number. To specify versions 3.1 or  later, type 3.1.* for the version number.  If any version of the package satisfies the package dependency, type 
*.* as the version number.

6 7

Click OK. On the File menu, click Save.   Important! Only one version of a package can be installed at one time. If the available  version of the package specified in the package dependency is not the correct version,  the Integration Server does not load the dependent package. The Integration Server  writes a dependency load error for the dependent package to the server log. 

82

webMethods Developer User’s Guide Version 7.1.1

3 Working with Packages

Important! Make sure that you do not create circular package dependencies. For  example, if you identify “FinanceUtil” as a dependent package for the “Finance”  package, do not identify “Finance” as a dependent package for the “FinanceUtil”  package. If you create circular package dependencies, neither package will load the  next time you start the Integration Server.

Removing Package Dependencies
Use the following procedure to remove a package dependency that is no longer needed.  For example, to continue the example from page 81, if you delete the service in “Finance”  that invokes the service in “FinanceUtil,” then you would no longer need a package  dependency on the “FinanceUtil” package. Another case where you would remove the  package dependency is if you move the services in the “FinanceUtil” package into the  “Finance” package.  To remove a package dependency 1 2 3 4 5 6 In the Navigation panel, select the package for which you want to remove a package  dependency. On the File menu, click Open. In the editor, click the package’s Settings tab.  Under Package Dependencies, select the package dependency you want to remove.  Click  .

On the File menu, click Save.  

Assigning Startup, Shutdown, and Replication Services
You can set up services to automatically execute each time Integration Server loads,  unloads, or replicates a package. These types of services are called startup, shutdown, or  replication services.

What Is a Startup Service?
A startup service is one that Integration Server automatically executes when it loads a  package into memory. The server loads a package: „ At server initialization (if the package is enabled). „ When someone uses Developer or the Integration Server Administrator to reload a  package. „ When someone uses Developer or the Integration Server Administrator to enable a  package.

webMethods Developer User’s Guide Version 7.1.1

83

3 Working with Packages

Startup services are useful for generating initialization files or assessing and preparing  (for example, setting up or cleaning up) the environment before the server loads a  package. However, you can use a startup service for any purpose.  Tip! If a startup service invokes a service in another package, make sure to identify the  other package as a package dependency for the package containing the startup  service.

What Is a Shutdown Service?
A shutdown service is one that the Integration Server automatically executes when it  unloads a package from memory. The server unloads a package from memory: „ At server shutdown or restart. „ When someone uses the Integration Server Administrator to disable the package. „ When someone uses the Integration Server Administrator to reload a package before  it is removed from memory. Shutdown services are useful for executing clean‐up tasks such as closing files and  purging temporary data. You could also use them to capture work‐in‐progress or state  information before a package unloads. 

What Is a Replication Service?
A replication service is one that Integration Server automatically executes when it  prepares to replicate a package. A replication service executes when the Integration  Server Administrator creates a package release (full release or patch) or creates a package  archive.  Replication services provide a way for a package to persist state or configuration  information so that these are available when the published package is activated on the  remote server.  Note: The term replication service does not refer to the services contained in  pub.replicator or to services that subscribe to replication events (replication event  services).

84

webMethods Developer User’s Guide Version 7.1.1

3 Working with Packages

Guidelines for Assigning Startup, Shutdown, and Replication Services
Keep the following guidelines in mind when assigning startup, shutdown, and  replication services to packages: „ When you assign a startup or shutdown service to a package, you can only assign a  service that resides in the same package. For example, a startup service for the  “Finance” package must be located in the “Finance” package.  „ When you assign a replication service to a package, you can assign any service from  any loaded package on Integration Server, including the current package. „ Because services in a package are not made available to clients until the package’s  startup services finish executing, you should avoid implementing startup services  that access busy remote servers. They will delay the availability of other services in  that package.  „ You can assign one or more startup services to a package; however, you cannot  specify the order in which the services execute. If you have a series of startup services  that need to execute in a specific order, create a “wrapper” service that invokes all the  startup services in the correct order. Designate the “wrapper” service as the startup  service for the package. 

Assigning Startup, Shutdown, and Replication Services
Use the following procedure to identify startup, shutdown, and replication services.  To assign startup, shutdown, and replication services 1 2 3 4 In the Navigation panel, select the package to which you want to assign startup,  shutdown, or replication services. On the File menu, click Open. In the editor, click the package’s Startup/Shutdown/Replication Services tab.  To assign a startup service, under Startup services, select the service from the Available Services list, and click  .  Repeat this step for each service you want to add as a startup service for the package. Note:  A service that you just created does not appear in the Available Services list if  you have not refreshed your session on the server since you created the service. 5 To add a shutdown service, under Shutdown services, select the service from the  Available Services list, and click  .  Repeat this step for each service you want to add as a shutdown service for the  package. 

webMethods Developer User’s Guide Version 7.1.1

85

3 Working with Packages

6

To add a replication service, do the following: a b Under Replication Services, click  .

In the Enter Input Values dialog box, in the Service field, do one of the following:
„ „

Type the service name in the format: folderName:serviceName Click   to navigate to and select the service that you want to use as a  replication service.

c d

Click OK.  Repeat these steps for each service you want to add as a replication service. 

Removing Startup, Shutdown, and Replication Services
You might need to remove a startup, shutdown, or replication service if the service is no  longer needed, has been deleted, or has been incorporated into another service (such as a  wrapper service). Tip! If you remove a startup service that invoked a service in another package and the  package was identified as a package dependency, make sure you remove the package  dependency after you remove the startup service. To remove startup, shutdown, and replication services 1 2 3 4 In the Navigation panel, select the package for which you want to remove startup,  shutdown, or replication services. On the File menu, click Open. In the editor, click the package’s Startup/Shutdown/Replication Services tab. Do one or more of the following: 
„

To remove a startup service, under Startup services, select the service you want to  remove from Selected services list, and click  .  . To remove a shutdown service, under Shutdown services, select the service you  want to remove from the Selected services list, and click  To remove a replication service, under Replication services, select the replication  service you want to remove and click  .

„

„

86

webMethods Developer User’s Guide Version 7.1.1

4

Locking and Unlocking Elements
88 90 94 99 101

„ Basic Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Locking Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Unlocking Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Troubleshooting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Frequently Asked Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

webMethods Developer User’s Guide Version 7.1.1

87

 for example) are marked read‐only on the  Integration Server. To edit the element. For example. you have a  user lock.  You can lock elements such as flow services. What Is a Lock? A lock on an element prevents another user from editing that element. you can manage changes to elements during development by  locking them. There are two  types of locks: user locks and system locks. schemas. the element is system locked. The VCS Integration feature will override any read/write status  changes applied manually by a server administrator. you can use and run a  service regardless of its lock status. The element is read‐only to all other users on the Integration Server. This prevents two different users from editing an element at the same time. see the webMethods Version Control System Integration Developer’s Guide in the  webMethods_directory\_documentation directory. When an element’s supporting files (node. and specifications. make the element’s files writable). Elements are shown in the following ways in Developer:  Element Status Not locked Locked by you Can I edit?      No      Yes How do I gain rights to edit? Click FileLock for Edit. You can  edit an element only if you own the lock on the element. Important! When an Integration Server has the VCS Integration feature enabled. Another  user cannot edit the element until you unlock it.1. For  details.1 . the server administrator has  the ability to mark an element’s supporting files on the server as read‐only. which is the default  locking mode of Developer. as long as you have Execute access to the service. see Chapter 5. in which case  they are system locked. “Assigning and Managing Permissions”. For more information about implementing and using the VCS Integration  feature. you must ask the server administrator to  remove the system lock (that is. All elements in Developer’s Navigation panel are read‐only until you lock them. This chapter describes local locking on the Integration Server. However.  system locking is effectively disabled for elements that are checked into the version  control system. N/A 88 webMethods Developer User’s Guide Version 7. elements  are locked and unlocked when you check them out of or into your version control system  repository. When an element is locked by you. Java services.4 Locking and Unlocking Elements Basic Concepts In webMethods Developer. If you enable Developer’s VCS Integration feature.xml. and then you must  reload the package in which the element resides.

webMethods Developer User’s Guide Version 7. If an element is  system locked. When Do I Unlock an Element? You unlock an element after making your changes and saving those changes to the server. For details. you can also use the Lock Status command to obtain the names of the  server files that are read‐only on the server.4 Locking and Unlocking Elements Element Status Locked by another user Locked by the system Can I edit?      No      No How do I gain rights to edit? Contact the user to unlock. Contact the server  administrator to unlock. you can view the lock status by using the Lock Status command. When Do I Lock an Element? You lock an element when you want to make changes to the element. This command provides information about the element such as the  username of the person who owns the lock and when they locked it. For details. see “Automatically Unlocking Elements After  Saving” on page 98.1 89 . For details. you can enable a setting on  the Options dialog box. If you want to automatically unlock an element after saving it.1. see “Viewing the Status of Locked  Elements” on page 92 and “Viewing an Element’s Corresponding Server Files” on  page 98. For details. see “Unlocking Elements” on page 94.  It is important to unlock the elements you are done with so that other users on the server  can access them. see  “Locking Elements” on page 90. How Do I Know Who Has an Element Locked? On every element in the Navigation panel.

 If you change usernames. or elements that cannot directly be  locked.1.     90 webMethods Developer User’s Guide Version 7. Because of this. request  that the current owner of the lock release it. keep the following points in mind: „ When you create a new element. see  Chapter 5. If the element you need is already locked.  elements to which you do not have Write access. you will be unable to edit or unlock items that  you locked using your old username. These types of services require  that all existing Java and C/C++ services in the folder are unlocked and the user  has Write access to all Java and C/C++ services in the folder. locked by another user. You cannot directly lock the publishable document type  associated with an adapter notification. unlocked elements within  it. some elements in the selection may not be  available to lock because they may be system locked. For details. it is important that you use a distinct username to log  on to the server. „ When you select multiple elements to lock. Developer obtains and locks the latest version of the  element that has been saved on the webMethods Integration Server.  „ When you lock an adapter notification.  „ When you lock a folder or package. This ensures that you are the only person  working on a particular element at a time. „ When you lock an element. Developer will notify you that these elements cannot be locked and will lock  the rest. Locking Elements Elements are locked by webMethods username (the name you use to log on to the  Integration Server). you must have Write access rights to it. Note: Users cannot create Java and C/C++ services in a folder or package while  other users own the lock on the folder or package. “Assigning and Managing Permissions”. If the element is system locked. request that  the server administrator release it by making the corresponding server files writable. Other users can still create new elements in that folder or package. For details. When locking elements. you must lock it. it is locked automatically for you.  „ Elements generated by a service (including an adapter service) are not locked  automatically. you only lock existing. Developer also locks its associated  publishable document type.4 Locking and Unlocking Elements Locking Elements Before you edit an element. see  “Locking Java and C/C++ Services” on page 91. preventing the loss of changes.1 .  „ In order to lock an element. Elements can  only be locked by one user at a time.

1 91 . These files. if another user has locked a Java service in  folder B. When you use jcode. „ The jcode development environment operates independently of locking. If you use jcode to  develop Java services. overwriting that user’s changes to the service. a green check mark appears next to their  icons in the Navigation panel.class files.  If the elements were successfully locked. If one or more of the elements could not be locked (for  example. For details. All Java and  C/C++ services in a folder share the same . Similarly. if you use  jcode. „ You cannot lock a listener or connection element. when you lock a Java/C service.  On the File menu. see “Lock/Unlock Problems” on  page 99. Tip! You can also lock an element that is open in the editor by right‐clicking the  element’s tab or title bar and then clicking Lock for Edit. For example. or delete any Java or C/C++ services in folder B. move. Therefore. located in the \code subdirectory of a package. or elements to which you  do not have Write access).java and .java and .1. click Lock for Edit. if you lock a Java service in a folder A. select the elements that you want to lock. locked by another user.  Locking Java and C/C++ Services When you lock Java and C/C++ services. if they are system locked. you must have Write access to all Java  and C/C++ services in that folder. you may compile a service that is locked  by another user. you do not have the locking functionality that is available in  the Integration Server. do not use the locking features in the Integration Server. see “Locking Java and C/C++ Services” on  page 91.4 Locking and Unlocking Elements „ When you lock a Java or C/C++ service. all Java and C/C++ services in  folder A are locked by you. For  information about troubleshooting lock problems. Developer displays a dialog box listing them.class files on the Integration  Server. To lock elements 1 2 In the Navigation panel. Therefore. Developer locks all other Java or C/C++  services within the folder. correspond to all  services (except flow services) in a folder. there are special considerations to keep in mind. edit. This is because Java and C/C++ services within a  folder share the same . „ Locking and unlocking actions on Java and C/C++ services are folder-wide.  all Java/C services in that folder are locked. „ Locking actions on Java and C/C++ services are ACL dependent. If you want to lock one or  more Java or C/C++ services within a folder. webMethods Developer User’s Guide Version 7. you cannot add.

1 . multiple corresponding files must be writable on the server. Usually. the user can save his or her changes to the element.  who owns the lock and when they locked it. always verify that it is not locked by a  user on the Integration Server.1. For example. all of the preceding files must be writable.frag (may not be present) Before you save a Java or C/C++ service. keep in mind that a shared template can change  without your knowledge. Since a template can be  attached to one or more services.  For details. a  system lock is not reflected in webMethods Developer or the Integration Server  Administrator until you reload the package in which the element resides. Currently. Following  are considerations for working with templates in a cooperative development  environment.4 Locking and Unlocking Elements „ Before you save a Java or C/C++ service. the user will not know until he or she tries to save changes to the element. Viewing the Status of Locked Elements The lock status of an element tells you if an element is available for locking. You can view the status of a locked element  to see who owns the lock or you can view a list of all elements for which you own the  lock. and if not. If an element becomes system locked while a user is  editing it. make sure that all system locks are removed from those files before saving. Important! Before you system lock an element.class . If  this occurs. you can system lock an element by using the server’s file  system to make the element’s supporting server files read‐only. System Locking Elements If you are a server administrator. 92 webMethods Developer User’s Guide Version 7.java .  Locking Templates A template can be used with one or more services on the Integration Server.ndf . if your template is attached to a service that  another user locks and edits. you must have the service locked. make the element’s corresponding files writable on the server. that user can change your template.  you cannot lock a template as an entity.  „ The template for a service can change without your knowledge. „ To create or edit a template for a service. A single Java or C/C++ service corresponds to the following files: . only the service to which it is attached.  Therefore. see “Viewing an Element’s Corresponding Server Files” on page 98. If you do not know the  names of the files that correspond to a particular element. use the Lock Status command. After this is  done.

 A similar dialog appears if the element is system locked or  locked by you.4 Locking and Unlocking Elements When viewing an element’s lock status.1 93 . My Locked Elements dialog box webMethods Developer User’s Guide Version 7. click Lock Status. you must refresh the Navigation panel to  reflect the updated status. The My Locked Elements dialog box  appears. select the element for which you want to view the status. To view lock status for an element 1 2 In the Navigation panel.1. Locking Status dialog box To list all elements locked by you „ On the Tools menu. you must reload the package in which the element resides to  reflect the updated status. „ When another user unlocks an element. The following dialog box appears if the element is  locked by someone else. Developer  will not show the system lock status in the Locking Status dialog box until you reload  the package. On the File menu. click My Locked Elements. Similarly. when the server administrator removes a system  lock from an element. keep the following points in mind: „ If the element has been system locked since you last reloaded the package.

or Deleting Locked Elements You can copy a locked element to another folder or package. you can  unlock elements in the Integration Server Administrator as well as in Developer.1. If you are  a developer.1 . Developer unlocks all other Java or C  services within the folder. keep the following points in mind: „ When you unlock a single Java or C service. Save the changes and then unlock the  services.  „ You cannot unlock a listener or connection element. you will not be able to unlock  other Java or C services within that folder. Developer also unlocks its associated  publishable document type. For more information about unlocking elements.4 Locking and Unlocking Elements You can unlock individual elements from this dialog box by pressing the CTRL key as  you click each element and then clicking Unlock. There are several ways to unlock elements. If you are an administrator. see “Unlocking Elements” on  page 94. depending on  whether you are a member of the Developers ACL or the Administrators ACL. „ If a Java or C service in a folder has unsaved changes. Unlocking Elements Using Developer You must explicitly unlock elements. since your locks are maintained from session to session. 94 webMethods Developer User’s Guide Version 7. Disconnecting from the server does not unlock your  element(s). Copying. You cannot directly unlock the publishable document  type associated with an adapter notification. You can unlock all elements by clicking  Unlock All. When unlocking elements. However. you cannot move. „ When you unlock an adapter notification. you should unlock it to make it  available to other users.  rename. Unlocking Elements After you edit an element and save changes to the server. you can unlock elements in Developer. or delete an element unless it is locked by you or unlocked. see “Locking Java and C/C++ Services” on  page 91. Moving. For details.

1. save the changes and repeat the unlock action. Always  confirm with the user before removing his or her lock on an element. right‐click the element’s tab or title        bar and then click Unlock. select the elements that you want to unlock. Unlocking an Element Using the Integration Server Administrator Important! Be cautious when you remove user locks to prevent a user from losing  changes. „   To unlock all elements to which you own the lock. Developer alerts you that the elements cannot be unlocked.  webMethods Developer User’s Guide Version 7. Click OK to  close the alert dialog box.4 Locking and Unlocking Elements . reselect the elements (including the appropriate  adapter notifications) and repeat the unlock action.1 95 . showing all elements that  have user locks and system locks. 2 3 On the File menu. The following screen appears. Click OK to close the  alert dialog box.  If the elements you want to unlock contain unsaved changes.  If one of the elements you selected to unlock is a publishable document type  associated with an adapter notification. Then. To unlock elements using Developer 1 In the Navigation panel. To unlock an element using the Integration Server Administrator 1 2 In the Integration Server Administrator. Then. Developer alerts you  that the elements cannot be unlocked until you save the changes.    4 The Navigation panel refreshes and the green check mark next to the element disappears. click Unlock. Tip! You can also unlock elements using the following techniques:  „   To unlock an element that is open in the editor. the user will not know  until he or she tries to save changes to the element and the action fails.  Note: Be sure to save changes to the elements before you attempt to unlock them. If you unlock an element while a user is editing it. click Management. under Packages. use the ToolsMy Locked Elements command. Click View Locked Elements. and you did not also select the adapter  notification.

Lists elements whose corresponding files are marked read‐only  on the server file system.1. You cannot remove a system lock via the Server  Administrator. Lists elements that are locked by other users on the server. you must make the element’s files  writable and reload the package. Unlock Selected Elements screen „ Locked by System. Before you unlock an item. If not. the server  administrator (or the username with which you logged on to the Integration  Server Administrator). „ „ 96 webMethods Developer User’s Guide Version 7.4 Locking and Unlocking Elements Locked Elements screen “localhost” means the machine on which the server is running 3 Click Unlock Elements. Locked by Current User. The following screen appears. the user will lose all changes that they made to the element since  they last saved it to the server. Lists elements that are locked by you. For details. Locked by Other Users. On the server’s file system. make sure that you have saved  all changes to the server.1 . make sure that the user has saved all changes to  the server.  Before you remove a user’s lock. see “Unlocking a System Locked  Element” on page 97.

  you must refresh the Navigation panel (after the package is reloaded) to reflect the  element’s updated status.1.  To remove a system lock from an element 1 If you do not know the names of the server files that correspond to the element. remove the system lock but DO NOT have the user reload the  package in webMethods Developer. (Reloading the package in Developer will  discard their edits. Reload the package on the Integration Server that contains the element. Important! If you receive a “failed to unlock” message. The updated  status is reflected in the Integration Server Administrator. If you use Developer. Important! If you accidentally applied a system lock to an element that was already  locked by another user.) The user can then save the element without losing the changes he  or she made to it while you had the element system‐locked. see “Viewing an Element’s  Corresponding Server Files” on page 98. you must reload the package  in which the element resides to reflect the element’s updated status. Unlocking a System Locked Element If you are a server administrator. use  the Lock Status command in Developer. Developers using webMethods Developer should refresh their Navigation panel to  update their view of the lock status of all elements. 2 3 webMethods Developer User’s Guide Version 7. After you remove the system lock. remove the read‐only properties from the files that  correspond to the element to make the files writable. you can remove a system lock from an element using  the server’s file system. Refresh the Navigation  panel in Developer to view the updated status.1 97 . For details. On the server’s file system.4 Locking and Unlocking Elements 4 Select the elements that you want to unlock (after informing users if necessary) and  click Unlock Selected Elements. it means that the server files for  a locked element were deleted from the server. Use the Sync to Name Space command  to update the Integration Server Administrator’s view of locked elements.

  The following dialog box shows the server files associated with a flow service named  ApplyCreditMemo.1 . Important! When an Integration Server has the VCS Integration feature enabled. IS document types. On the File menu. it may not be the best option if you save periodically while editing  an element. however.  This is convenient when an element is system locked and you need to convey the  element’s file names to the server administrator. the  Automatically unlock upon save option must be disabled. you  must reload the package in which the element resides to reflect the unlocked  status. This prevents you from forgetting to  unlock them. they are not writable on  the server). Viewing server files for element ‘ApplyCreditMemo’ Note: After a server administrator removes a system lock from an element. click Lock Status. 98 webMethods Developer User’s Guide Version 7. and  specifications after you save changes to them.  To view server files for an element 1 2 In the Navigation panel. Automatically Unlocking Elements After Saving You can choose to automatically unlock flow services. select the elements for which you want to view the server file  names. These server files are system locked (that is.4 Locking and Unlocking Elements Viewing an Element’s Corresponding Server Files You can view the names of the server files associated with every webMethods element.1.

Click General. The element may be locked by someone else. Troubleshooting This section addresses common problems that may arise when implementing cooperative  development with webMethods components.lockingMode property configured to “no locking” or “system locking  only. and specifications after saving To 1 2 3 4 On the Tools menu.java and . If a lock is not  shown but you still cannot lock the element.1 99 . reload the package.  I can’t unlock elements since I changed my username. Refresh the Navigation panel. I get an exception message. „ You have selected multiple elements to lock or unlock and your selection contains of  one or more of the following: „ „ „ „ A server A folder or package and its contents A package and any other element An adapter notification record  When I try to lock an element. click Options. or you may not have Write access. The Options dialog box appears. webMethods Developer User’s Guide Version 7. log back in to the server with your old username  and then unlock the elements.class files on the Integration Server. This is because  those services share the same . system‐locked (marked read‐only on the  server). Click OK. Possible causes are: „ The Integration Server to which you are connected may have the  watt. If there is another Java or C service that is locked by another user or system locked in the  same folder. contact your server administrator.  Under Navigation Panel. select the Automatically unlock upon save check box. IS document types.  Lock/Unlock Problems The Lock for Edit and Unlock commands are disabled. If you have changed usernames. In addition.1. then you cannot unlock any Java or C services in that folder.” For details.4 Locking and Unlocking Elements To automatically unlock flow services. make sure  that you are a member of the ACL assigned for Write access to the element by checking  the element’s Permissions property in the Properties panel.ns.server. You can only unlock elements that you have locked with your current username for the  session. I can’t unlock a Java or C service.

I get an exception message. When I disable a package. the element became system‐locked. then the ACL assigned to the element has been changed to an ACL in which  you are not an Allowed user. If the exception message indicates that you cannot perform the action without ACL  privileges. I receive an “element failed to unlock” message when I try to unlock elements in the Integration Server Administrator.    Another user unlocked an element. then one or all of the  files that pertain to that element on the server are system‐locked. reload the package in the Navigation panel. Contact your  administrator to remove the system lock. You can then save your changes to the element. If it is any other  element. If it is a Java or C service. it does not preserve locking information. If the exception message indicates that a file is read‐only.1. You can. Save Problems When I try to save an element that I have locked. You can assist the administrator by using the Lock Status command to  identify the names of the system‐locked files on the server that need to be unlocked. Package Management Problems I can’t preserve locking information when I replicate and publish a package. you can save the element and  your changes will be incorporated. The Sync to Name Space command runs automatically when the server is started or restarted. preserve  system locks (read‐only file attributes). to give you access. This is expected behavior and prevents conflicts if another package with the same folder  and element names gets installed.4 Locking and Unlocking Elements If the administrator has deleted your username. Unlock the element. contact him or her to unlock the elements  on the server.1 . To preserve your changes to the element. This indicates that the server files for the locked element were deleted from the server. contact your  server administrator to: 1 2 3 4 Remove your lock on the element. Lock the element. This is expected behavior and is part of the feature’s design.  You need to update the Integration Server Administrator’s list of unlocked elements by  clicking Sync to Name Space on the Unlock Selected Elements screen. 100 webMethods Developer User’s Guide Version 7. its ACL status  changed. however. Edit the ACL assigned for Write access to the element. but it still shows as locked in my Navigation panel. During the time that you had the lock. After this is done. use the Refresh command to refresh the Navigation panel. or a server administrator removed your lock and another user locked the  element.

 restore your session and look at the  current status of the element. See “Lock/Unlock Problems” on page 99. Another Java or C service is locked in the folder in which you want to create the new  service. see “Automatically Unlocking Elements After Saving” on  page 98. Other Problems I can’t create a new Java or C service.1. Is there a shortcut for this task? Yes.1 101 . Contact your server administrator to make  the file writable. For the specific procedure. webMethods Developer User’s Guide Version 7. “System lock” is a term used to denote an element that has read‐only files on the  webMethods Integration Server. Can I select multiple elements to lock or unlock in the Navigation panel simultaneously? Yes. Contact your administrator or contact the user who has the element locked in the  package. as long as  your selection does not contain the following:    „ A server „ A folder or package and its contents „ A package and any other element „ An adapter notification record  You can also lock or unlock all elements in a package or folder that have not been  previously locked/unlocked by right‐clicking the package or folder and selecting Lock for Edit (to lock) or Unlock (to unlock). When the server is back up. I get an error message. All of them  must be unlocked or locked by you and you must have Write access to add a new Java or  C service to the same folder. The server administrator usually applies system locks to  files (makes them read‐only). or you do not have Write access to all Java or C services in the folder. One of the elements in that package is system‐locked (read‐only) or locked by another  user. The webMethods Integration Server went down while I was locking or unlocking an element.4 Locking and Unlocking Elements When I try to save a template. I can’t delete a package. depending on the exact moment at which the  server ceased action. you can select multiple elements to lock or unlock in the Navigation panel. I only save elements after I’m completely done. The template file on the server is read‐only. Frequently Asked Questions What is the difference between a system-locked element and a read-only element? None. Remembering to unlock elements after saving them is tedious. The action may or may not have completed.

  Important! It is not recommended that you use Cooperative Development functionality  in an Integration Server cluster. you should not archive derived files such as the . while developing to eliminate these Cooperative  Development problems.)? The information is stored internally in Repository version 4. What happens to the locks on elements when I replicate a package? Locking information is not preserved when you replicate and publish a package. preserve system  locks (read‐only file attributes).4 Locking and Unlocking Elements Where is the lock information stored (such as names of elements that are locked. Locking information for elements could be  inadvertently shared with another Integration Server in the cluster. Use a standalone  Integration Server. when they were locked. etc.1. You can. if  you are using VCS.1 . not a cluster. and in the VCS repository.class file that is generated  when you compile a Java service. however. 102 webMethods Developer User’s Guide Version 7. This is  expected behavior and is part of the feature’s design. Should I archive derived files? Generally.

. . . . . . . . . . . . . . . . . . . . . . . .1 103 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1. . . . . . . . . . . . . . . . . webMethods Developer User’s Guide Version 7. . . . . . . . . . . . . . . . .5 Assigning and Managing Permissions 104 106 109 111 112 „ Basic Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ How ACLs Affect Other Developer Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Assigning ACLs to Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Viewing ACL Information on a Server . . . . . . . . . . . . . . . . . . . . . . „ Troubleshooting . . . . . . . . . . . . .

 IS  document types. if you have a production package and a development package on the  webMethods Integration Server.  For example. or delete an element or assign an ACL to it. folders. If the client is not a  member of an allowed group. settings. The element will be displayed  on screens in the Developer and the Integration Server Administrator. you may want a “Contractor” ACL  that denies List access to sensitive packages on the webMethods Integration Server. rename. you can also assign different levels of access. ACLs allow you to restrict access on a broader level. you may want a “Tester” ACL  to only have Read and Execute access to elements. you select from groups that you have defined previously. When identifying Allowed Groups and  Denied Groups.1. For more details about these types of access. and Execute. the server executes the service. Read.  „ List controls whether a user sees the existence of an element and its metadata. the server  checks the ACL assigned to the service.  its input and output. webMethods Integration Server checks only  the ACL of the externally invoked service (the service requested directly by the client). when a client requests a service. „ Read controls whether a user can view the source code and metadata of an element. see the webMethods Integration Server  Administrator’s Guide.  104 webMethods Developer User’s Guide Version 7. you can restrict access to the production package to  users in an Administrators ACL. What Is an ACL? An ACL controls access to packages. This access also controls  whether a user can lock.5 Assigning and Managing Permissions Basic Concepts In addition to controlling access to elements on an individual user basis using locking. If the client is a member of an allowed group and  is not a member of a denied group. „ Write controls whether a user can update an element.  you can also control access by groups of users using access control lists (ACLs). and ACL permissions. the server denies the request to invoke the service and  stops executing. Or. Write. and restrict access to the development package to users  in a Developers ACL. and specifications) at the group level.  By default. What Happens When a Client Runs a Service with ACLs? When a client requests that webMethods Integration Server invoke a service.1 . and other elements (such as services. depending on the access that  you want different groups of users to have.  „ Execute controls whether a user can execute a service. For example. Typically  created by a system administrator. so  that contractors never see them in webMethods Developer. There are four different kinds of access: List. that is. An ACL identifies groups of users  that are allowed to access an element (Allowed Groups) and/or groups that are not  allowed to access an element (Denied Groups). Within ACLs.

 the  server does not check the ACL of the Purch:CreditAuth service before executing it. ACL checking when a client requests a service webMethods Integration Server Client 1 Purch:SubmitPO Purch:SubmitPO INVOKE Purch:LogPO INVOKE Purch:CreditAuth INVOKE Purch:SendPO 2 3 4 Purch:LogPO Purch:CreditAuth Purch:SendPO Stage 1 Description The client (such as another application or a DSP) requests the Purch:SubmitPO  service on the local webMethods Integration Server. The Purch:SubmitPO service invokes the Purch:LogPO service.5 Assigning and Managing Permissions The server does not check the ACLs of any of the internally invoked services (those  services invoked by the externally invoked service). webMethods Integration  Server checks the ACL of the Purch:SubmitPO service (the externally invoked  service). 2 3 4 webMethods Developer User’s Guide Version 7. see “The Permissions Properties” on page 107. Consequently. Because the  Purch:LogPO service is invoked by the externally invoked service and is located  on the same server as the externally invoked service. you can set up the security  settings for a service so that webMethods Integration Server checks the ACL assigned to  the service every time it is invoked.  Consequently. The server does not  check the ACL of the Purch:SendPO service before executing it. The server executes the service only if the client is invoking the service  on the behalf of a user that is a member of an allowed group and is not a  member of a denied group for the ACL assigned to the service. Like the  Purch:LogPO service. webMethods Integration Server considers the  Purch:CreditAuth service to be an internally invoked service. Like the Purch:LogPO  and Purch:CreditAuth services. However.1 105 . For  details. whether directly by a client or by another service. The Purch:SubmitPO service invokes the Purch:CreditAuth service. webMethods Integration  Server considers the Purch:LogPO service to be internally invoked.  The Purch:SubmitPO service invokes the Purch:SendPO service. The following diagram illustrates the points at which ACL checking occurs when a client  requests a service.1. webMethods Integration Server considers the  Purch:SendPO service to be an internally invoked service. the server does not check the ACL of the Purch:LogPO service  before executing it.

 see the  webMethods Integration Server Administrator’s Guide. and other elements in the  Navigation panel. folder. Read. Assigning an ACL restricts or allows access to an element for a group  of users.  create the ACL in the Integration Server Administrator. For details. click Open. see the  webMethods Integration Server Administrator’s Guide. For details. Note: Any service that the Purch:SubmitPO flow service invokes could also be invoked  directly by the client. You cannot assign an ACL to an element for List. if the client directly invokes the Purch:SendPO  service. or Write access unless you are a  member of that ACL. webMethods Integration Server would perform  ACL checking when the externally invoked service (Purch:SubmitPO) invoked these  services. However.  How Do I Create an ACL? You create ACLs using the Integration Server Administrator. For example.1. To assign an ACL to a package or folder 1 Make sure that the ACL you want to assign exists on the Integration Server.  On the File menu. You can assign only one ACL per element.5 Assigning and Managing Permissions Note:  If the security settings for the Purch:LogPO. or Purch:SendPO  services specify that ACL checking occurs every time the service is invoked (Enforce execute ACL option is set to Always). For details on default ACLs. If the client is invoking  the service on the behalf of a user that is a member of an allowed group and not a  member of a denied group. That is.  2 3 106 webMethods Developer User’s Guide Version 7. In the Navigation panel. Am I Required to Use ACLs? No. the server checks the ACL of the Purch:SendPO service.  see the webMethods Integration Server Administrator’s Guide. services. if you want to allow DevTeam1 to edit the ProcessPO  service. Assigning ACLs to Elements You can assign an ACL to a package. your username must be a  member of a group that is in the Allowed list of the DevTeam1 ACL. you must be a member of the DevTeam1 ACL. Purch:CreditAuth. For example. see “Assigning ACLs  to Elements” on page 106. there are default ACL settings for elements shipped with the Integration  Server and default settings for new elements that you create. click the package or folder to which you want to assign an  ACL.1 . For more information about requiring ACL checking. then the server executes the Purch:SendPO service. If not.

 For example. Read. Read. you can only assign ACLs of which you  are a member. 2 3 4 Save the element. and Write access. use the ToolsACL Information command. Read. Read.  Depending on the element you select. For details. click the title bar of the package or folder to give it the focus. you probably are not a member of a user group in the Allowed list of that  ACL. For details. To obtain access to an  ACL. webMethods Developer User’s Guide Version 7. select the ACLs that you want to  assign for each level of access. If an error message appears. check to make sure that you are a  member of each ACL that you assigned to the element. you can only assign ACLs of which you  are a member. that is. If you cannot assign an ACL to an element for List. contact your server administrator. you probably are not a member of a user group in the Allowed list of that  ACL. or Write  access. The ACLs assigned to an element are mutually exclusive. For details. you can only set List access. and Write access. If you cannot assign an ACL to an element for List. for  a package. Important! For List. select the ACLs that you want to  assign for each level of access. an element can have  different ACLs assigned for each level of access.1. see “The Permissions Properties” on  page 107. To verify. If an error message appears. The Permissions Properties You assign an ACL to an element in the Permissions category of the Properties panel. the following element has  the Developers ACL assigned for Read access and the Administrators ACL assigned for  Write access. contact your server administrator. see the  webMethods Integration Server Administrator’s Guide. Important! For List. 6 Save the element. In the Permissions category of the Properties panel. For example. or Write  access. check to make sure that you are a  member of each ACL that you assigned to the element. Open the element to which you want to assign an ACL. For details about the different levels of access  available for elements. certain access levels are displayed. To obtain access to an  ACL. To verify.  In the Permissions category of the Properties panel.5 Assigning and Managing Permissions 4 5 In the editor. use the ToolsACL Information command. see “The Permissions Properties” on  page 107. If not.  create the ACL in the Integration Server Administrator. see the webMethods Integration Server Administrator’s Guide. To assign an ACL to other elements in the Navigation panel To 1 Make sure that the ACL you want to assign exists on the Integration Server.1 107 .

 the server  performs ACL checking on OrderParts three times (once when it is  invoked from the browser and twice when it is invoked by  ProcessOrder and AddToDatabase). The Integration Server performs ACL  checking against the service when it is directly invoked from a client  or DSP. „ Always. server A checks the Execute  ACL assigned to OrderParts to make sure the requesting user is  allowed to run the service. If Always is set on OrderParts. to edit ACLs. Users in the Allowed list of this assigned ACL can view the source code  and metadata of the element. output. This  information is read only.1. After checking port access. It does not check the Execute ACL when  other services invoke OrderParts. The Integration Server performs ACL checking against the  service when it is directly invoked from a client as well as when it is  invoked from other services. Field / Button List ACL Read ACL Write ACL Execute ACL Enforce execute ACL Description Users in the Allowed list of this assigned ACL can see that the element  exists and view the element’s metadata (input. For example. For example.). Note: You can view the users and groups that compose the ACLs on the Integration  Server to which you are connected by using the ToolsACL Information command. 108 webMethods Developer User’s Guide Version 7. „ When top-level service only. Users in the Allowed list of this assigned ACL can execute the service. users.  and delete the element.5 Assigning and Managing Permissions Permissions properties for a flow service An element can have different ACLs assigned for each level of access. and groups. suppose the OrderParts  service is invoked from a browser. Users in the Allowed list of this assigned ACL can lock.  This level of access only applies to services. suppose a client invokes the OrderParts service  on server A. as well as by the ProcessOrder and  AddToDatabase services. rename. use the Integration Server  Administrator.1 . etc. edit.

 the service or subfolder inherits  the ACL assigned to the folder in which the service or subfolder is located. (The default ACL restricts access to a service to any user  with a valid username and password for the webMethods Integration Server. Note: An element can inherit access from all elements except a package. to edit ACLs.1. users.  webMethods Integration Server applies the default ACL to the folder and its contents for  which an ACL is not specified. If the element is a subfolder. The ACL Information dialog box lists the ACLs  contained on the Integration Server to which you are connected.  When you remove an ACL from a service or subfolder. For details about  inheritance.5 Assigning and Managing Permissions ACLs and Inheritance When you assign an ACL to a folder. as well as the default ACLs that are installed with the webMethods  Integration Server. Write.1 109 . its default ACL is that specified by a configuration file. When you  remove the ACL assigned to the top‐level folder (the uppermost folder in a package).   “inherited” is displayed next to the ACL in the List.  not by its parent (the package). use the Integration Server Administrator. it affects the subfolders and services in the folder.) Default ACLs and Inheritance If the element is a top‐level folder. and groups. see the webMethods Integration Server Administrator’s Guide. This information is read  only. (Subfolders and services with an assigned ACL are not affected by  the ACL assigned to the folder. Viewing ACL Information on a Server You can view the users and groups that make up the ACLs on a server by using the  ToolsACL Information command. webMethods Developer User’s Guide Version 7.  The subfolders and services that do not have an assigned ACL inherit the ACLs that you  assign to the folder. or Execute fields in the  Permissions category of the Properties panel.) When a subfolder or service inherits the ACL of a folder. it shares its default ACL  settings with other folders at the same level in the folder hierarchy. Read.

 services.. .1.. services.and allows access to members of all other groups. see the webMethods  Integration Server Administrator’s Guide. For  details on how the server determines access. 110 webMethods Developer User’s Guide Version 7.. ...5 Assigning and Managing Permissions ACL Information dialog box for a Server The Default ACL. The server builds this list by  looking at the groups to which each user belongs and comparing  that to the groups to which the ACL allows or denies access. or other elements associated  with this ACL.  „ Allowed.. folders. The user group(s) that have been explicitly denied access  to the packages. These include the default ACLs that were installed with  the server.. Field ACLs Description The ACLs defined on the Integration Server to which you are  connected.  User Group Association for ‘[ACL]’ Resulting Users for ‘[ACL]’ The names of users that the ACL authorizes. given the current  settings in the Allowed and Denied lists.  „ Denied.denies access to members of the Anonymous group. The user group(s) that have been explicitly allowed to  access the packages. or other elements  associated with this ACL.1 . folders..

 locking allows you to control access at the individual user level. you must have Read access to the service.  while ACLs allow you to control access by groups of users.  Developer does not step into or trace into the top‐level service. you must be the member of the ACL that is assigned for Write  access to that element. „ To lock a Java or C service within a folder. If you  do not have access to services invoked by the top‐level service. Note: When an Integration Server has the VCS Integration feature enabled. Following are guidelines to  keep in mind as you use ACLs with locking: „ To lock an element. This is because  locking and unlocking actions for Java/C services are at the folder level. and Read access to all services invoked by the top‐level service. you must be the member of the ACL that is  assigned for Write access for all Java or C services in that folder. and List  access to the service. (The Integration Server performs ACL checking for a child  service when the Enforce execute ACL property for the service is set to Always.  folders and packages.)  Developer executes the top‐level service and continues to the next flow step. you must lock the element (except for  packages and folders. For details.1. you must have  Execute. you must have Read access to the  service. „ To edit ACL permissions for an element. ACLs and Testing/Debugging Services Keep the following in mind when you test and debug services: „ To step or trace through a top‐level service. Developer “steps  over” those services. List.  „ To step or trace through all the services within a top‐level service. “Locking and Unlocking Elements”. Read.  see the Chapter 4. which cannot be locked). you are able to check out (lock) and check in (unlock) elements.5 Assigning and Managing Permissions How ACLs Affect Other Developer Features ACLs and Locking As explained previously. an element  is locked when it is checked out of the version control system. you must have Execute.1 111 .  webMethods Developer User’s Guide Version 7. With the appropriate  ACL permissions.  „ To set a breakpoint in a service. „ To test a service by sending an XML file to a service.

 you must have Write access to it and its parent folder. „ You may not see all of the elements on the Integration Server in the Navigation panel  because you may not have List access to all of them. you must have Read access to it and Write access to its parent  folder. You can only see those elements  to which you have at least List access. you must be a member of a group assigned to the Replicators  ACL. make sure  112 webMethods Developer User’s Guide Version 7. contact your  server administrator. until you explicitly set the ACL to something else.5 Assigning and Managing Permissions ACLs and Creating. Troubleshooting I receive a “Cannot perform operation without Write ACL privileges” message when I try to create an element. Contact your server administrator to obtain  access. „ To rename or delete an element. reload the package. system locked (marked read only on the  server). The element may be locked by someone else. I receive an “element already exists” message when I try to create an element. Viewing. „ To copy an element. but you may not  be able to see it because you do not have List access to it. You do not have Read access to the service.1. the ACL settings may have changed on the  server since you last saved it. However. If you had  previously been able to save the element. Read. or  contact your server administrator. I can see the input and output.1 . If a lock is not  shown but you still cannot lock the element. Refresh the Navigation panel. use the ToolsACL Information command. See “Troubleshooting” on page 99 in Chapter 4. any elements that you create within  that folder inherit its ACL. view. For  details about inheritance. If you  are not a member of the ACL assigned for Write access to the folder. To verify. I receive an exception when I try to lock an element.    „ When you create a folder and assign an ACL to it. I can’t assign an ACL to an element. You are not a member of the ACL assigned to the folder in which you want to save the  element. or delete elements: „ To create or paste an element. There may be an element with the same name on the Integration Server. I can’t see the source of a flow or Java service. see the webMethods Integration Server Administrator’s Guide. check the Permissions category of the Properties panel.  or Write ACL that you want to assign. Make sure that you have locked the element and that you are a member of the List. and Deleting Elements Keep the following guidelines in mind when you create. Try a different element name. you must have Write access to its parent folder. To verify. or you may not have Write access. In addition. „ To copy a package. “Locking  and Unlocking Elements”.

You must also have Read access to a service to set a breakpoint in the service or send an  XML document to the service. To do so.1 113 . If you do not see the service listed in the Navigation panel. However. or  stepping into a service. you will receive an error message. Check to make sure that you have Write access to all Java services in the folder into which  you want to paste the service. I can’t copy and paste a Java service.    If you do have Read access to a service but you do not have Read access to a service it  invokes. You must have a minimum of Read access to trace or step through a service.1. I receive an exception when I try to go to a referenced service from the pipeline. tracing into.5 Assigning and Managing Permissions that you are a member of the ACL assigned for Write access to the element. Contact your server administrator. you probably do not have List  access to that service. If you don’t  have Read access to the service when you are tracing. I know it is on the Integration Server. Developer “steps over” the invoked service but does not display an error  message. webMethods Developer User’s Guide Version 7. You do not have List access to the referenced service. stepping through. I receive an error when I run a command on the Test menu. I receive a “Couldn’t find in Navigation panel” message when I try to find a service in the Navigation panel. Contact your server administrator. as well as Write access to the folder itself. click  the Permissions category of the Properties panel.

5 Assigning and Managing Permissions 114 webMethods Developer User’s Guide Version 7.1.1 .

6

Building Flow Services
116 120 120 122 127 129 135 137 140 149

„ Basic Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ A Process Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Creating a New Flow Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Declaring Input and Output Parameters for a Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Assigning an Output Template to a Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Specifying Run-Time Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Configuring Service Retry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Assigning Universal Names to Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Configuring Service Auditing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Printing a Flow Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

webMethods Developer User’s Guide Version 7.1.1

115

6 Building Flow Services

Basic Concepts
To successfully build a flow service, you should understand the following basic concepts  and terms.

What Is a Flow Service?
A flow service is a service that is written in the webMethods flow language. This simple  yet powerful language lets you encapsulate a sequence of services within a single service  and manage the flow of data among them. For example, you might create a flow service  that takes a purchase order from a buyer and executes the following series of services  before submitting it to an internal ordering system: 1 2 3 4 Gets a purchase order submitted by a buyer Logs the order in an audit‐trail file Performs a credit check Posts the order to the ordering system

Flow services encapsulate other services
Client application invokes Purch:SubmitPO... Purch:SubmitPO Purch:SubmitPO

INVOKE Purch:GetOrders INVOKE Purch:LogOrder INVOKE Purch:CreditAuth INVOKE Purch:PostPO

1

2 3 4

...which performs a sequence of four services

Any service can be invoked within a flow (including other flow services). For instance, a  flow might invoke a service that you create, any of the built‐in services provided with the  webMethods Integration Server, and/or services from a webMethods add‐on product  such as the webMethods JDBC Adapter.  You create flow services using Developer. They are saved in XML files on webMethods  Integration Server. Important! Although flow services are written as XML files, they are maintained in a  format that can only be created and understood by Developer. You cannot create or  edit a flow service with a text editor.

116

webMethods Developer User’s Guide Version 7.1.1

6 Building Flow Services

What Is a Flow Step?
A flow service contains flow steps. A flow step is a basic unit of work (expressed in the  webMethods flow language) that webMethods Integration Server interprets and executes  at run time. The webMethods flow language provides flow steps that invoke services and  flow steps that let you edit data in the pipeline.  webMethods’ flow language also provides a set of control steps that allow you to direct the  execution of a flow service at run time. The control steps allow you to: „ Conditionally execute a specified sequence based on a field value. „ Retry a specified sequence until it succeeds. „ Repeat a specified sequence (loop) for each element in an array field. In the following flow service, control steps have been inserted to loop through a subset of  the flow service and branch to one of two services in the last step of the loop. Control steps are used to direct the execution of a flow
Purch:SubmitPO Purch:SubmitPO

INVOKE Purch:GetOrders A LOOP step repeats a set of flow steps LOOP PurchaseOrders INVOKE Purch:LogOrder INVOKE Purch:CreditAuth A BRANCH step selects a specified flow step for execution BRANCH AuthOK INVOKE Purch:PostPO INVOKE Purch:BouncePO

A flow service can contain the following types of flow steps: Invocation Steps INVOKE Data-Handling Steps MAP Performs specified editing operations on the pipeline (such as  mapping variables in the pipeline, adding variables to the  pipeline, and dropping variables from the pipeline). For more  information about this step, see “The MAP Step” on page 183. Executes a specified service. For more information about this  step, see “The INVOKE Step” on page 157.

webMethods Developer User’s Guide Version 7.1.1

117

6 Building Flow Services

Control Steps BRANCH Executes a specified flow step based on the value of a specified  variable in the pipeline. For more information about this step,  see “The BRANCH Step” on page 160. Executes a set of flow steps once for each element in a  specified array. For more information about this step, see “The  LOOP Step” on page 178. Re‐executes a set of flow steps up to a specified number of  times based on the successful or non‐successful completion of  the set. For more information about this step, see “The  REPEAT Step” on page 170. Groups a set of flow steps into a series. The SEQUENCE step is  implicit in most flow services (that is, the steps in a flow  service are treated as a series). However, at times it is  necessary to explicitly group a subset of flow steps using  SEQUENCE so that they can be treated as a unit. For more  information about this flow step, see “The SEQUENCE Step”  on page 176. Controls the execution of a flow step (for example, abort an  entire flow service from within a series of deeply nested steps,  throw an exception without writing a Java service, or exit a  LOOP or REPEAT without throwing an exception). For more  information about this step, see “The EXIT Step” on page 181.

LOOP

REPEAT

SEQUENCE

EXIT

See Appendix A, “webMethods Flow Steps” for a detailed description of each type of  flow step provided by the webMethods flow language. For information about building  each type of flow step, see Chapter 7, “Inserting Flow Steps”.

What Is the Pipeline?
The pipeline is the general term used to refer to the data structure in which input and  output values are maintained for a flow service. It allows services in the flow to share  data. The pipeline starts with the input to the flow service and collects inputs and outputs from  subsequent services in the flow. When a service in the flow executes, it has access to all  data in the pipeline at that point.

118

webMethods Developer User’s Guide Version 7.1.1

6 Building Flow Services

The pipeline holds the input and output for a flow service
Services in a flow get their input from and place their output in the pipeline. Flow Service input INVOKE Purch:LogPO output input INVOKE Purch:CreditAuth output input INVOKE Purch:ConvertDate output input INVOKE Purch:SendPO output The Pipeline ONum:46-77135 Name:Kings Sport Phone:201-887-1544 TNum:128824993554 Acct:128824993554 Total:5732.78 Qty:20 AuthNum:TW99123554 Date:04/04/99 Item:PK8801-NS OrderDate:19990404 Ship:UPS Ground Terms:30N Freight:65.00 Status:Received

When you build a flow service, you use Developer to specify how information in the  pipeline is mapped to and from services in the flow. 

What Are Input and Output Parameters?
Input and output parameters are the names and types of fields that the service requires as  input and generates as output. For example, a service that takes two string values—an  account number (AcctNum) and a dollar amount (OrderTotal)—as input and produces an  authorization code (AuthCode) as output, has the following input and output parameters: Input and output parameters define the fields that the service requires as input and generates as output Input Name AcctNum OrderTotal Data Type String String Output Name AuthCode Data Type String

Part of the process of creating a service is declaring its input and output parameters (that  is, explicitly specifying the fields it expects as input and produces as output). 

webMethods Developer User’s Guide Version 7.1.1

119

6 Building Flow Services

A Process Overview
Building a flow service is a process that involves the following basic stages:
Stage 1

Creating a new service on webMethods Integration Server. During this stage,  you create the new service on the webMethods Integration Server where  you will do your development and testing. For information about this  stage, see “Creating a New Flow Service” which follows. Inserting flow steps into the new service. During this stage, you specify the  work that you want the service to perform by adding flow steps to the  service. For information about this stage, see Chapter 7, “Inserting Flow  Steps”. Declaring the input and output parameters of the service. During this stage, you  define the service’s inputs and outputs. For information about this stage,  see “Declaring Input and Output Parameters for a Service” on page 122. Mapping pipeline data. During this stage, you route input and output  variables between services that are invoked in the flow. For information  about this stage, see Chapter 8, “Mapping Data in a Flow Service”. Specifying the run-time parameters. During this stage, you assign parameters  that configure the run‐time environment for this service. For information  about this stage, see “Specifying Run‐Time Parameters” on page 129. Formatting service output. During this stage you can create an output  template to format the service output. For information about this stage,  see “Assigning an Output Template to a Service” on page 127 or refer to  the Dynamic Server Pages and Output Templates Developer’s Guide. Testing and debugging. During this stage you can use the tools provided by  Developer to test and debug your flow service. For information about this  stage, see Chapter 11, “Testing and Debugging Services”.

Stage 2

Stage 3

Stage 4

Stage 5

Stage 6

Stage 7

The remaining sections in this chapter and the following chapters provide detailed  information about each stage.

Creating a New Flow Service
The first step you take when you build a flow service is to create a new service on the  webMethods Integration Server where you do your development.

Package and Folder Requirements
Before you create a new flow service, you must: „ Make sure the package in which you want to create the flow service already exists. If the  package does not already exist, create it using Developer. For more information about  creating a package, see “Creating a Package” on page 72. 

120

webMethods Developer User’s Guide Version 7.1.1

6 Building Flow Services

„ Make sure the folder in which you want to create the service already exists and that you have Write ACL access to it. If the folder does not already exist, create it using Developer. For  information about creating folders, see “Creating New Elements” on page 41. For  information about ACL permissions, see Chapter 5, “Assigning and Managing  Permissions”. Once the package and folder are in place, use the FileNew command to start the process  of creating a new service. For details, see “Creating New Elements” on page 41.   

Using the Default Logic Options
The wizard that creates a new flow service gives you the option of starting with an empty  flow (one that contains no predefined flow steps) or starting with a service that contains a  set of default logic for extracting information from an HTML or XML document (a  common flow‐service function). If you are building a flow service that extracts data from an HTML or XML document,  you can select an option to automatically generate the logic (that is, the set of flow steps)  that will get data from a specified document, rather than building this logic manually. Use this option... Empty Flow Load and Query an HTML Page To... Generate a flow service that does not have any logic. Automatically generate a flow service that invokes the loadXMLNode  service (which gets a document from a URL that you specify) and  the queryXMLNode service (which extracts a specified set of elements  from the document returned by loadXMLNode). For additional information about the loadXMLNode and queryXMLNode  services, see the XML Services Developer’s Guide. Receive an XML Document Automatically generate a service that receives an XML node as  input. If you specify the format by providing a DTD or XML Schema  definition, webMethods Developer maps the incoming document to  its corresponding IS document type structure.

Important! The flow steps produced by these options are no different than those  produced by manually inserting INVOKE loadXMLNode and INVOKE queryXMLNode  steps in a flow service. After Developer inserts the set of default steps into your flow  service, you can edit the default steps and insert additional steps just as you would  any ordinary flow service.

Inserting Flow Steps
Flow steps call previously built services and direct the flow of data within a flow service.  You can insert flow steps into a flow service using the buttons at the top of the editor. For  more information, see Chapter 7, “Inserting Flow Steps”.

webMethods Developer User’s Guide Version 7.1.1

121

6 Building Flow Services

To insert a/an... INVOKE step MAP step BRANCH step LOOP step REPEAT step SEQUENCE step EXIT step

Click this button...

Declaring Input and Output Parameters for a Service
Input and output parameters are the names and data types of the fields that a service  expects as input and generates as output. Some systems refer to input and output  parameters as “imports” and “exports.” These parameters are also collectively referred to  as a signature.  You declare input and output parameters for all types of services: flow services, Java  services, and services written in other supported programming languages. Although you are not required to declare input and output parameters for a service (the  Integration Server will execute a service regardless of whether it has a specification or  not), there are good reasons to do so: „ Declaring parameters makes the service’s input and outputs visible to Developer. Without  declared input and output parameters, you cannot:
„ „ „ „ „

Link data to and/or from the service using Developer’s Pipeline tab. Assign default input values to the service on the Pipeline tab. Validate the input and output values of the service at run time. Test the service in Developer and enter initial input values. Generate skeleton code for invoking the service from a client.

„ Declaring parameters makes the input and output requirements of your service known to other developers who may want to call your service from their programs. For these reasons, we strongly recommend that you make it a practice to declare input  and output parameters for every service that you create.

122

webMethods Developer User’s Guide Version 7.1.1

6 Building Flow Services

Supported Data Types
webMethods Developer supports several data types for use in services. Each data type  supported by Developer corresponds to a Java data type and has an associated icon.  When working in the editor, you can determine the data type for a field by looking at the  icon next to the field name. For information about these data types and the editor icons that represent them, see  Appendix C, “Supported Data Types”.

Specifying Input Parameters
When you define the input parameters for a flow service, keep the following points in  mind: „ Specify all inputs that a calling program must supply to this flow service. For example, if a  flow service invokes two other services, one that takes a field called AcctNum and  another that takes OrderNum, you must define both AcctNum and OrderNum as input  parameters for the flow service. Note: The purpose of declaring input parameters is to define the inputs that a  calling program or client must provide when it invokes this flow service. You do  not need to declare inputs that are obtained from within the flow itself. For  example, if the input for one service in the flow is derived from the output of  another service in the flow, you do not need to declare that field as an input  parameter. „ When possible, use variable names that match the names used by the services in the flow.  Variables with the same name are automatically linked to one another in the pipeline.  (Remember that variable names are case sensitive.) If you use the same variable  names used by flow’s constituent services, you reduce the amount of manual data  mapping that needs to be done. When you specify names that do not match the ones  used by the constituent services, you must use the Pipeline tab to manually link them  to one another. For information about the Pipeline tab, see “What Does the Pipeline  Tab Contain?” on page 186. „ Avoid using multiple inputs that have the same name. Although Developer permits you to  declare multiple input parameters with the same name, the fields may not be  processed correctly within the service or by services that invoke this service. „ Make sure the variables match the data types of the variables they represent in the flow. For  example, if a service in the flow expects a document list called LineItems, define that  input variable as a document list. Or, if a service expects a Date object called  EmploymentDate, define that input variable as an Object and apply the java.util.Date  object constraint to it. For a complete description of the data types supported by  Developer, see Appendix C, “Supported Data Types”. „ Declared input variables appear automatically as inputs in the pipeline. When you select the  first service or MAP step in the flow, the declared inputs appear under Pipeline In.

webMethods Developer User’s Guide Version 7.1.1

123

 see the  webMethods Integration Server JMS Client Developer’s Guide. the old cached input parameters will  be used at run time. Like input variables. select Service Usage under Server  in the Navigation panel. if a service produces a String called AuthorizationCode. For more information about creating JMS triggers. When you select the  last service or MAP step in a flow.6 Building Flow Services Important!  If you edit a cached service by changing the inputs (not the pipeline). you  must reset the server cache. the declared output variables appear under Pipeline Out. To reset the service cache from Developer.  Specifying Output Parameters On the output side of the Input/Output tab you specify the variables that you want the flow  to return to the calling program or client.  make sure the input signature conforms to the requirements for each of those trigger  types. „ Make sure the names of output variables match the names used by the services that produce  them. “Supported Data Types”. For information about the Pipeline tab. For  example. if you do not specify names that match the ones produced  by the flow’s constituent services. „ Make sure the variables match the data types of the variables they represent in the flow.  define that output variable as an Object and apply the java. For a complete description of the data types supported by a service. see “What Does the Pipeline  Tab Contain?” on page 186.lang. The guidelines for defining the output  parameters are similar to those for defining input parameters: „ Specify all of the output variables that you want this flow service to return to the calling  program or client.1.  Note: If you intend to use this service with a Broker/local trigger or a JMS trigger.  124 webMethods Developer User’s Guide Version 7. make sure you define  that variable as a String. see the Publish‐ Subscribe Developer’s Guide.Long object  constraint to it. Or. For more information about creating Broker/local triggers. Select the name of the service and an information screen for  that service appears. Click Reset Server Cache. you must use the Pipeline tab to manually link them  to one another. „ Avoid using multiple outputs that have the same name.  see Appendix C. To reset the  service cache from Integration Server Administrator. „ Declared output variables appear automatically as outputs in the pipeline. if a service produces a Long object called EmployeeID. select the service and  then click the Reset button next to Reset Cache in the Properties panel. Although Developer permits you to  declare multiple output parameters with the same name.1 . the fields may not be  processed correctly within the service or by services that invoke this service. If you do not reset it.

 You  can use a specification to define input and output parameters for multiple services.  When you assign a specification to a service. or modify the  declared variables using the service’s Input/Output tab. the input side describes the initial contents of the pipeline. A specification defines a set of service inputs and outputs. you define the variables that the service requires as input. You cannot add. it specifies the variables that this flow service expects to find in the pipeline at run  time. or delete the  variables on that half of the tab. Input/Output tab Define the flow service’s input parameters on this side. The output side identifies the variables produced by the flow service and returned  to the pipeline.and output parameters on this side. the IS document type  webMethods Developer User’s Guide Version 7. For a flow service. you cannot add. you define the variables the service returns to the client or calling program. In other  words..  „ Reference an IS document type. modify. .  You insert a reference to an IS document type in one of three ways: „ By typing the fully qualified name of the IS document type in the Input or Output  field By clicking   to select an IS document type from a list  „ „ By dragging an IS document type on the same server from the Navigation panel  to the box below the Validate input or Validate output check boxes With the first two methods. You can complete the Input/Output tab in the following ways: „ Reference a specification. delete... On  the left side of this tab.1. you cannot add.6 Building Flow Services Completing the Input/Output Tab You declare the input and output parameters for a service using the Input/Output tab. the variables within the IS document type become the  input or output signature for the service. When you assign an IS document type to the Input or  Output side of the Input/Output tab.1 125 . With the third method. You can use an IS document type to define the input or  output parameters for a service. modify. On the  right side.. or delete the variables on  that half of the tab.

 type the specification’s name or click   to  select it from a list. To declare input and output parameters for a service 1 2 3 Open the service for which you want to declare input and output parameters. Skip the rest of this procedure. 126 webMethods Developer User’s Guide Version 7. continue to the next  step to specify the variables in the other half of the tab. see  “Declaring Input and Output Parameters for a Service” on page 122. Use   to specify the data type and name for  each input and output variable for the service. If you want to reference a specification. Important! When an IS document type is assigned to the Input or Output side. delete.  „ Manually insert input and output variables.1 . type the IS document type name or click   to  select it from a list. click the Input/Output tab for that service. do the following: a In the Input or Output field (depending on which half of the specification you want  to assign the IS document type to). Click   on the toolbar and select the type of variable that you want to define. You can also drag an IS document type from the Navigation  panel to the box below the Validate input or Validate output check boxes. If you assigned an IS document type to both the Input and Output sides of the  Input/Output tab. delete.6 Building Flow Services reference becomes the top‐level document in the signature. For more information about creating specifications. You cannot modify or  delete the variables that are contained within the referenced IS document type but  you can add other variables to that half of the tab. do the following:     a In the Specification Reference field.1. do the following: a b c Select the half of the Input/Output tab (Input or Output) where you want to define the  variable by clicking anywhere in that half’s large white text box. 5 For each input or output variable that you want to define. Otherwise. skip the rest of this procedure. b b Type the name of the variable and press ENTER. Important! When a specification is assigned to a service. In the editor. you  cannot add. or modify the declared variables on that half of the Input/Output  tab. 4 If you want to reference an IS document type for the input or output parameters of  the service. or  modify the declared variables using the service’s Input/Output tab. you cannot add.

„ You can assign the same output template to more than one service. the output template must reside  in the IntegrationServer_directory\packages\packageName\templates directory. Output templates are used most frequently to customize the HTML page that a service  returns to a browser‐based application. you may have a service that  retrieves a record from a relational database and uses an output template to format it as  an XML document or a comma‐delimited record before returning it to the requester. webMethods Developer User’s Guide Version 7. the server simply returns the results of the  service in the body of an HTML document. The Integration Server is optimized for the UTF‐8 encoding. such as an HTML page. However.  You should not change this setting unless you are sure that you want to use another  encoding. SJIS. set variable properties and apply constraints in the  Properties panel (optional).1. however).6 Building Flow Services d e With the variable selected.  „ If you assign an existing output template to a service. When using output templates. where  packageName is the package in which the service is located. „ You can specify the encoding in which to save the template (for example. If the variable is a document or a document list. Note: Output templates are optional. If a  service does not have an output template. If a service has an output template assigned to it. These tags instruct  webMethods Integration Server to perform a specific action and substitute the result of  that action in the Web document. they can also be used to generate an  XML document or any other formatted string.  type your comments on the Comments tab. keep in mind that: „ A service can have at most one output template assigned to it at a time (you can  dynamically change the output template assignment at run time. Typically. the  contents of the pipeline) whenever that service is invoked by an HTTP client.  the server automatically applies the template to the results of the service (that is. a type  of Japanese encoding). Use  member beneath the document or document list variable. For example. Assigning an Output Template to a Service An output template is a Web document. formatted as a two‐column table.1 127 .      to indent each  6 If you want to enter any notes or comments about the input and output parameters. embedded with special  codes (tags) that webMethods Integration Server processes. you use tags in output templates to insert  service output values in Web documents returned to clients.  „ You can reference one output template from within another. repeat steps b–d to define and set  the properties and constraints for each of its members.

5 Do one of the following:  „ If you assigned a new output template to the service. type the file name  of the existing output template.1 ..wml.  WML.  Developer uses UTF‐8 to create output template files. In cases where the output is returned to a Web  browser.  Important! Make sure the existing output template resides in the  IntegrationServer_directory\packages\packageName\templates directory. click Edit. or HDML content..6 Building Flow Services To assign an output template to a service 1 2 3 Open the service to which you want to assign an output template. do one of the following to  update the Name field: „ If you want to assign a new output template to the service. the Type also determines the value of the HTTP “Content‐Type” header  field (for example.  Select the encoding used to create the template file and click OK. Assign an HTML output template to the service  Assign an XML output template to the service  Assign a WML output template to the service  Assign an HDML output template to the service  Select.” “text/xml. (By default. create or edit the output template by typing HTML. XML.  In the Output template category of the Properties panel. *. html xml wml hdml Note: The Type you select determines the extension for the output template file  (*. do one of the following to specify the format for the output template: To.xml. and/or by inserting template tags. type the name of the  new output template or accept the system default output template name of  FolderName_ServiceName.wap. “text/html.hdml). click New to create the  output template.   If you want to assign an existing output template to the service. *.wml.  If you assigned an existing output template to the service and you want to edit the  template. or *. You do not need to include the path information  or the file name extension..1.” or “text/x‐ hdml“). where  packageName is the same package in which the service is located.” “text/vnd. click the service’s title bar to give the service the focus..html. For more information  128 webMethods Developer User’s Guide Version 7. In the editor. „ 4 In the Type list.) „ 6 In the template dialog box.

 select the encoding in which you want the template file saved.1 129 . 7 In the File Encoding list. as this may affect the  browser or parser performance outside the Integration Server. any data entered into a form will be  properly interpreted by the Integration Server. The Integration Server is  optimized for the UTF‐8 encoding. If you do change this setting. „ Execution locale of a service.  webMethods Developer User’s Guide Version 7. since Unicode supports nearly all  of the characters in all of the worldʹs languages.  The default encoding is Unicode (UTF8). see the Dynamic Server Pages and Output  Templates Developer’s Guide. make sure that your XML or HTML file contains the  proper encoding or META tag for the encoding you use. see the Dynamic Server Pages and Output Templates  Developer’s Guide. It also limits  any translated versions of the templates to the same character set. You should not change this setting unless  you are sure that you wish to use another encoding. Specifying Run-Time Parameters As a developer of a service. you can use the Properties panel to specify the following  service parameters: „ State of a service. For details. You can set the type of locale in which the Integration  Server executes at run time. Generally it is a  good idea to use the UTF‐8 (Unicode) encoding. You can cache elements to reduce memory usage in  Developer. Important! After editing a template in Developer. 8 Click Save.1.6 Building Flow Services about creating an output template.  This will affect the interpretation of the encoding settings and may result in  characters being lost or misinterpreted. do not edit it outside of Developer. „ Caching of service results. You can maintain whether or not you want the server to treat it as a  “stateless” service at run time. so you should  choose a character encoding that supports all of the languages for which you will  create localized templates.  The encoding is used by the Integration Server to send the template to the browser  and to interpret data posted in the resulting page in the browser. For details. You will not lose any data if you  choose to save your template in UTF‐8. see “To cache elements” on page 66. Note: The File Encoding you select limits the characters that you can use in your  template (including the data inserted into your template using %VALUE%  statements) to those in the character set of the encoding you choose. The encoding you choose also applies to any  localized (translated) versions of the template that you may create.

 select False. set the Stateless property in the  Runtime category to False. such as user name and  password. Services that  run in “stateless” mode use fewer resources and do not consume a licensed seat on  webMethods Integration Server.1 . The server uses this object to maintain  specific information about the client requesting the service. A service that is an atomic unit of work (that is. The server maintains the session object for the duration of the session (that is. atomic unit of work and does not need access to  state information. do one of the following to set the  Stateless property: „ If the service is a self‐contained.  „ 130 webMethods Developer User’s Guide Version 7. Improper use of these options can lead to a service failure at run time and/or  the return of invalid data to the client program. If the service is part of a multi‐service transaction or if you are unsure of its state  requirements. or Visual Basic. If you are unsure. When you develop services in a language such as Java.6 Building Flow Services Important! The Runtime properties on the Properties panel should only be set by  someone who is thoroughly familiar with the structure and operation of the selected  service. you  may want to configure these types of services to run in “stateless” mode.1. To configure a service’s run-time state 1 2 3 Open the service that you want to configure. You might do this to  store information that a sequence of services needs to maintain a connection to an  external system. select True. For performance reasons. Important! Do not use the stateless option unless you are certain that the service  operates as an atomic unit of work. you can  use the “put” method to write information to the session object.     In the Runtime category of the Properties panel. In the editor. and no session information will be  maintained for the service. one that is wholly self contained and not  part of a multi‐service transaction to an external system) does not to need to have its  session object maintained when it is finished executing. The server will build and maintain a session object for  this service. C/C++. Maintaining the State of a Service When a remote client opens a session on a webMethods Integration Server. The server will remove the client session  immediately after the service executes.  until the client program explicitly closes the session on the server or the session times out  due to client inactivity). the server  automatically builds a session object for that client. click the service’s title bar to give the service the focus.

 if a service contains accounting  logic to perform charge back and you cache the service results. they cannot be cached. For example. The server can cache the results for flows. it is beneficial to cache the results. When the  server receives subsequent requests for a service with the same set of input values. webMethods Integration Server saves the entire  contents of the pipeline after invoking the service in a local cache for the period of time  that you specify. If a service is frequently  invoked by clients using the same input values.  Since nodes cannot be written to Repository version 4. The pipeline includes the output fields explicitly defined in the cached  service. „ Services that are invoked frequently with the same set of inputs. services that  retrieve information from busy data sources such as high‐traffic commercial Web servers  could benefit from caching. Java services.6 Building Flow Services Configuring a Service’s Use of Cache Caching is an optimization feature that can improve the performance of stateless services. not all services should be  cached. „ Services that retrieve data from data sources that are updated infrequently. Note: Caching is only available for data that can be written to Repository version 4. Some services contain processing that must be  processed each time a client invokes it. you do not want to cache a service that produced  webMethods Developer User’s Guide Version 7. Services whose  sources are updated on a daily. or monthly basis are good candidates for  caching.  Caching can significantly improve response time of services. it returns  the cached result to the client rather than invoking the service again. Services Suited for Caching „ Services that require no state information. Services that You Should Not Cache „ Services that perform required processing. the server does not  execute the service. so the service does not perform charge back for the subsequent  invocations of the service. and  C/C++ services. For example.1. weekly. you can cache its  results.  When you enable caching for a service.1 131 . If a service does not depend on state  information from an earlier transaction in the client’s session. „ Services that require state information. This section describes guidelines for you to consider when  determining whether to cache the results for a service. For example. You should never cache services if the cached results might be incorrect for  subsequent invocations or if the service performs tasks that must be executed each time  the service is invoked. as well as any output fields produced by earlier services in the flow. Types of Services to Cache While caching service results can improve performance. Do not cache services that require state  information from an earlier transaction. particularly information that identifies the  client that invoked it.

Controlling a Service’s Use of Cache You use the properties on the Properties panel to enable caching and to configure the way  in which you want it to operate with the selected service. work with your server administrator to monitor and evaluate your service’s  use of cache. select Service Usage under Server  in the Navigation panel. (The server does not  reset the expiration timer each time it satisfies a service request with a cached result.1. according to the cache sweeper thread. select the service and  then click the Reset button next to Reset Cache in the Properties panel. „ Services that retrieve information from frequently updated sources. To gauge the effectiveness of  your cache settings. You  might even degrade server performance by quickly consuming large amounts of  memory. It may  vary from 0 to 15 seconds. the cached results can become  outdated.  „ Services that are invoked with unique inputs. For details. you can monitor its performance by viewing service statistics with  the Integration Server Administrator and then adjusting your caching values accordingly.flushMins setting in webMethods Integration Server.cache. such as stock quote systems or transactional  databases. and it expires when the time you specify elapses. 132 webMethods Developer User’s Guide Version 7.1 . see the  watt. To reset the  service cache from Integration Server Administrator. Click Reset Server Cache. you  must reset the server cache. If a service retrieves data  from a data source that is updated frequently. To reset the service cache from Developer. you will gain little by caching its results. Do not cache services that retrieve information from sources that are  updated in real time or near real time. Important!  If you edit a cached service by changing the inputs (not the pipeline). Note: The cache may not be refreshed at the exact time specified in Cache expire. If you do not reset it.  Specifying the Duration of a Cached Result The server maintains results in cache for the period of time you specify in the Cache expire  property on the Properties panel.) The  minimum cache expiration time is one minute. Note:  If you do not have administrator privileges on your webMethods Integration  Server.server. Select the name of the service and an information screen for  that service appears. the old cached input parameters will  be used at run time.6 Building Flow Services a price list for office equipment if the prices in the list vary depending on the client  who initially connects to the data source. The expiration timer begins when the server initially  caches a result. You use these settings to strike  the right balance between data currency and memory usage. If a service handles a large number of unique  inputs and very few repeated requests.

 It may vary from 0 to 15 seconds. type an integer representing the length of time (in minutes)  that you want the results for this service to be available in cache.    In the Cache expire field. enable Prefetch  on the invoked services rather than on the Java or C/C++ services that call them. Note: The cache may not be refreshed at the exact time the last hit fulfills the Prefetch activation requirement. Overuse can quickly exhaust the memory available  for cache. This action also resets the cache expiration timer. webMethods Developer User’s Guide Version 7.server.cache. according to the cache  sweeper thread. the server will not prefetch the service results when the cache expires. If you set Prefetch to True.    In the Prefetch activation property. Such services will fail during prefetch because the embedded service will be  invoked without the proper access privileges. For details. If you want to use prefetch. If  the server retrieves the cached results fewer times than specified in the Prefetch activation property.1. set Cache results to True. Important! Do not use Prefetch with Java or C/C++ services that invoke access‐controlled  services.1 133 .  the server automatically re‐executes the service (using the same set of inputs as before) to  update its results in cache. To avoid this problem. do the following: a b Set Prefetch to True. Important! Use Prefetch carefully. you must also set the Prefetch activation property to specify  when the server should initiate a prefetch. This setting specifies the minimum number of  times a cached result must be accessed (hit) in order for the server to prefetch results. specify the minimum number of hits needed to  activate the use of prefetch.flushMins setting in  webMethods Integration Server. When you enable Prefetch. To enable caching of pipeline contents after a service is invoked 1 2 3 4 5 Open the service for which you want to configure caching. In the Runtime category of the Properties panel.6 Building Flow Services Using the Prefetch Option You use the Prefetch property to specify whether or not you want the server to  automatically refresh the cache for this service when it expires. see the watt. click the service’s title bar to give the service the focus. In the editor.

  regional.. region. the  service uses the null locale.. click the service’s title bar to give the service the focus. In the editor. „ Root locale uses neutral or POSIX locale. Each locale consists  of five sections: language. By default. Define a custom locale. it uses no locale policy.     In the Runtime category of the Properties panel.. That is.  Use a specific locale. Use the server’s default JVM locale. Use the neutral or POSIX locale.) „ Collation (sorting) of lists „ User interface/content language  The Integration Server recognizes the following locale policies at run time:  „ Server locale uses its default JVM locale. and variant.6 Building Flow Services Specifying the Execution Locale When you create a service. you can set the locale property to indicate the locale policy in  which the service executes at run time.1 .1. [$default] Default Runtime Locale [$user] Default User Locale [$null] No Locale Policy [root locale] [<ISO code>] <Language> Open locale editor. To specify the execution locale of a service 1 2 3 Open the service that you want to configure. To. The locale policy of a service refers to the language. etc. or cultural settings of a specific target market (the end user).. „ User locale uses the client locale. „ Null locale uses no locale policy. script. Euros.  Locales can influence the following: „ String display of numeric values and date/time values „ Parsing of dates and numbers from strings „ Default currency (pounds. extended language. dollars) „ Default measuring system (metric or customary) „ Default system resources (such as fonts. You can also enable the Integration Server to recognize custom locales. Use the client locale.. do one of the following to specify the  Execution Locale property: Select.. Use no locale policy. character encoding. 134 webMethods Developer User’s Guide Version 7.

1 135 . The service might execute successfully  if the Integration Server waits a short interval of time and then retries the service... you can configure the service to retry automatically if the  service fails because of an ISRuntimeException. The Integration Server will execute the service in the specified locale.  At run time.0014. and then re‐throws it as an  ISRuntimeException. (2‐  or 3‐letter codes) For future release.  Integration Server generates the following journal log message between retry attempts:  [ISS. Add or remove a variant code registered by the  IANA. you specify the maximum retry attempts and the retry  interval. Language Extended Language Script Region IANA Variant Do the following. If the service throws an ISRuntimeException during the final retry  attempt. the Integration Server waits  the length of the retry interval and then re‐executes the service using the original input  pipeline passed to the service. Optional. Configuring Service Retry When building a service.. the Integration Server treats the last failure as a service error. such as the unavailability of a resource due to  network issues or failure to connect to a database.1. An ISRuntimeException occurs when the  service catches and wraps a transient error.  In this field.  The retry interval indicates the length of time (in milliseconds) that the Integration Server  waits between execution attempts.  To configure a service to retry.. A transient error is an error that arises from a temporary condition  that might be resolved or restored quickly.6 Building Flow Services 4 If you selected Open locale editor. when a service throws an ISRuntimeException. Optional. webMethods Developer User’s Guide Version 7. The Integration Server continues to retry the service until  the service executes successfully or the Integration Server makes the maximum number  of retry attempts. Select one of the ISO 639 codes that represent the language. Retry x of y will begin in retryInterval milliseconds. The maximum retry attempts indicate how many attempts the Integration  Server makes to re‐execute the service when it ends because of an ISRuntimeException. The service ends  with a service exception. complete the following in the Define Custom Locale  dialog box. Select one of the 4‐letter script codes in the ISO  15924 registry. Optional.0031V3] Service serviceName failed with ISRuntimeException. Select one of the ISO 3166‐2 country codes. 5 Click OK.

 Java services.invoke.  Note: The watt. Developer displays an error  indicating that either the maximum attempts or the retry interval needs to be modified.6 Building Flow Services Note: If service auditing is also configured for the service. That is. the maximum retry period is 15.maxRetryPeriod server parameter specifies the  maximum retry period. if the Integration Server  makes the maximum retry attempts and the service still fails. the Integration Server adds  an entry to the audit log for each failed retry attempt.  About the Maximum Retry Period The Integration Server uses the same server thread for the initial service execution and  the subsequent retry attempts. the Integration Server enforces a maximum  retry period when you configure service retry properties. keep the following points in mind: „ You can configure retry attempts for flow services. The maximum retry period  indicates the total amount of time that can elapse if the Integration Server makes the  maximum retry attempts. the Integration Server verifies that the retry period for  that service will not exceed the maximum retry period. change the value of  this parameter.  „ Unlike triggers. Each of these entries will have a  status of “Retried” and an error message of “Null”.  When you configure service retry. The Integration Server returns the thread to the server  thread pool only when the service executes successfully or the retry attempts are  exhausted. By default.000 milliseconds  (15 seconds). the Integration Server uses the trigger retry properties instead of the service  retry properties. To prevent the execution and re‐execution of a single service from  monopolizing a server thread for a long time.  136 webMethods Developer User’s Guide Version 7.  „ Only top‐level services can be retried. and C services only. To change the maximum retry period.1 . when it is a nested service). The service cannot be retried when it is invoked  by another service (that is.  „ If a service is invoked by a trigger (that is. the service is functioning as a trigger  service). a service can be retried only when it is  invoked directly by a client request. If this value exceeds the maximum retry period.1. the final audit log entry  for the service will have a status of “Failed” and will display the actual error message.server. Setting Service Retry Properties When configuring service retry. However. The Integration Server determines  the retry period for the service by multiplying the maximum retry attempts by the retry  interval. you cannot configure a service to retry until successful.

 there might be many resources with the  name AcctInfo. the service must invoke  pub. A namespace name distinguishes one AcctInfo resource from another by  webMethods Developer User’s Guide Version 7. which indicates that the Integration Server  does not attempt to re‐execute the service. For more  information. see webMethods Integration  Server Java API Reference for the com.server. On the File menu.  Tip! You can invoke the pub.wm. Under the Retry on ISRuntimeException category of the Properties panel.flow:throwExceptionForRetry. For more information  about building a service that retries. In the editor. For more information about  constructing ISRuntimeExceptions in Java services. click Save.flow:getRetryCount service to retrieve the current retry count  and the maximum specified retry attempts. click the service’s title bar to give the service the focus. For more information about the  pub. In the Retry interval property.ISRuntimeException ( ).1.  A universal name has two parts: a namespace name and a local name.server. The default is 0.app. „ The namespace name is a qualifier that distinguishes a webMethods service from  other resources on the Internet. specify the number of milliseconds the Integration Server  should wait between retry attempts. For more information about this service. see “About the Maximum Retry Period” on page 136. „ „ The service retry period must be less than the maximum retry period. which indicates  that the Integration Server re‐executes the service immediately. For example.app. the service can use  com.b2b. the service must  do one of the following: „ If the service is a flow service. A universal name is a unique public identifier that external  protocols (such as SOAP) use to reference a service on a webMethods Integration Server.ISRuntimeException  class. see the webMethods Integration Server Built‐In  Services Reference. see “Configuring Service Retry” on page 135. The default is 0 milliseconds. in the Max attempts property.flow:throwExceptionForRetry. To configure service retry 1 2 3 Open the service for which you want to configure service retry.1 137 .  see the webMethods Integration Server Built‐In Services Reference. specify the number of times the Integration Server should attempt  to re‐execute the service.wm. 4 5 Assigning Universal Names to Services Every service on a webMethods Integration Server has a universal name in addition to its  regular webMethods name. If the service is written in Java.b2b.6 Building Flow Services „ To catch a transient error and re‐throw it as an ISRuntimeException.

„ An explicit universal name is a universal name that you assign to a service by specifying  both a namespace name and a local name in the Properties panel.1.ietf. 138 webMethods Developer User’s Guide Version 7. a service named gl.journals:closeGL would have a  local name of closeGL. Ontario). the namespace portion of a universal name is expressed as  a URI. The following  are examples of valid local names:  addCustOrder authorize_Level1 générent For specific rules relating to NCNames.gsx.6 Building Flow Services specifying the name of the collection to which it belongs. see “NCName” definition in the Namespaces  in XML specification at http://www.com http://www. versus Springfield.ugmed.txt. Illinois. Many webMethods users use a service’s unqualified name as  its local name. Under this scheme.1 .w3. the local name must begin with a letter or an underscore. digits. Local names follow the same construction rules as NCNames in XML.gsx. „ The local name uniquely identifies a service within the collection encompassed by a  particular namespace. Basically.  Springfield. ‐ _ (period) (dash) (underscore) Additionally. or the following  symbols:   . similar to the way in which  a state or province name serves to distinguish cities with the same name (for example. For  example. the following are all valid namespace names: http://www. a  local name can be composed of any combination of letters.com/gl/journals http://www. Like namespaces in XML.  The namespace portion of the universal name can consist of any combination of  characters that form a valid absolute URI (relative URIs are not supported). see RFC 2396 Uniform  Resource Identifiers (URI): Generic Syntax at http://www. because URIs are based on globally unique  domain names.ch/résumè For a complete description of what makes up a valid URI.org/rfc/rfc2396. This notation assures uniqueness.org/TR/1999/REC‐xml‐names‐19990114. A universal name can be either an explicit or an implicit universal name.

 click the service’s title bar to give the service the focus. or view a universal name 1 2 3 Open the service whose universal name you want to assign. or view. „ For details on universal names..  Note: Many webMethods users use the unqualified portion of the  service name as the local name.  webMethods Developer User’s Guide Version 7. and XML standards. it must begin with a  letter or the underscore character. or the period (. To assign.  and it acts as the universal name when an explicit universal name has not been  specified. You  must specify a valid absolute URI..w3.6 Building Flow Services „ An implicit universal name is automatically derived from the name of the service itself. Developer retains the  service’s explicit universal name. or a folder containing a service. see http://www. The URI that will be used to qualify the name of this service.org/reports/tr15/  (Unicode Standard Annex #15) and http://www. If you copy a service. dash (‐) and  underscore (_) characters.  Developer does not retain the service’s explicit universal name. as recommended by the Character Model. edit. edit. SOAP. Namespace name Local name Specify..  4 On the File menu. specify the following in the  Universal Name category of the Properties panel: In this field. The local name is the unqualified name of the service.unicode. For information about normalization.). In the editor.1.1 139 . or a folder containing a service.org/TR/charmod/ (Character  Model for the World‐Wide Web).   Note: If you move a service. Additionally. The name can be composed of  any combination of letters. click Save. see the SOAP Developer’s Guide. The server derives an implicit name as follows: „ The namespace name is the literal string http://localhost/ followed by the fully  qualified name of the folder in which the service resides on the Integration Server. This  ensures that names containing non‐ASCII characters (particularly those with  accented or combining characters) are represented in a standard way.  If you want to assign or edit the service’s universal name. digits.  A name that uniquely identifies the service within the collection  encompassed by Namespace name.. Note: The server normalizes universal names according to Unicode Normalization  Form C.

Keep in mind that generating audit data can impact performance.   In the Universal Name category of the Properties panel. you can decide: „ Whether the service should generate audit data during execution. when services started and completed. even if a service is executed using  another (non‐primary) Integration Server port. If the audit log is a database. For each service.6 Building Flow Services To delete a universal name 1 2 3 4 Open the service whose universal name you want to delete. The Integration Server  uses the network to send the audit data to the audit log and uses memory to actually save  140 webMethods Developer User’s Guide Version 7. In the editor. service end. the log entry contains  the identify of the server that executed the service. „ Whether to include a copy of the service input pipeline in the audit log. clear the settings in the  Namespace name and Local name fields. click the service’s title bar to give the service the focus. The server ID in the log entry  always uses the Integration Server primary port. click Save. The Integration Server captures the  generated audit data and stores it in the audit log. You perform service auditing by analyzing the data stored in the audit log.1 . and service failure. Configuring Service Auditing Service auditing is a feature in the Integration Server that you can use to track which  services executed. Specifies when to include the pipeline in the audit log. The  audit log can contain entries for service start.  services generate audit data at predefined points. Each service has a set of auditing properties located in the Audit category on the service’s  Properties panel. you can  reinvoke services using the webMethods Monitor.  On the File menu. These properties determine when a service generates audit data and  what data is stored in the audit log. Specifies when a service generates audit data during execution. Audit properties for a service Specifies if a service generates audit data. At run time. „ The points during service execution when the service should generate audit data to  be saved in the audit log. and whether services succeeded  or failed. Note: When the Integration Server logs an entry for a service.1. The audit  log can also contain a copy of the input pipeline used to invoke the service.

The following table describes each option for the Enable auditing property in the Properties  panel. If you use a database.  The service generates audit data only when it is invoked  directly by a client request or by a trigger.1 141 . SMTP. Enabling Auditing for a Service When you configure service auditing. Before you  configure service auditing.  When you configure audit data generation for services. you must decide whether the service will generate audit data every  time it executes or only when it is invoked directly by a client request (HTTP. You can use the Integration Server to view the audit log whether  it is a flat file or a database. Select this option if  you do not want to be able to audit this service.  Enable auditing option Never When top-level service only Description The service never generates audit data. check with your Integration Server Administrator to learn  what kind of audit log exists. you should balance the need for  audit data against the potential performance impact. Always webMethods Developer User’s Guide Version 7.    Note: The audit log can be a flat file or a database. That is. FTP.1. you can also use the  webMethods Monitor to view audit data and reinvoke the service. The service does  not generate audit data when it is invoked by another  service (that is. For more information about the audit log. performance can be  impacted.  The following sections describe the options for generating audit data and the potential  performance impact of each option.) or a trigger. Keep in mind that whenever a service generates audit data.  The service generates audit data every time it is invoked. you first must decide whether you want to be able  to audit the service. see the  webMethods Logging Guide.  etc. If a large amount of data is saved. when it is a nested service). the database  must support JDBC.  Select this option if the service is a critical service that you  want to be able to audit every time it executes. performance can be impacted.6 Building Flow Services the data in the audit log. If the audit log is a database. do you want the service to generate audit data to be captured  in the audit log? If so.

 When a service executes successfully. Keep in mind that every  time the service generates audit data. Generally. and start The service generates audit data when it begins executing and when it  finishes executing. If you want  the audit event to cause another action to be performed.  Log on option Error only Description The service generates audit data only when the service ends because  of a failure.  For more information about events and event handlers. Use the options in the Log on  property on the Properties panel to specify when a service generates audit data. Situations where you might want the service to  generate audit data at the start and end of service execution include: „ To check for the start of long‐running services „ To detect service hangs. write an event handler.  Error and success The service generates audit data when the service finishes executing. If the service executes successfully. it will not generate  audit data. If you  are concerned only with services that fail. consider using the Error only option instead. the Integration Server must capture the data and  write it to the audit log. the  audit log would probably contain entries for the start and end of  service execution. the audit  log will contain a start entry and an end or error entry.1 . Then subscribe the event handler to audit events. This option offers the smallest performance  impact of all the options under Log on. Tip! When a service generates audit data. You might want a service to produce audit data when it starts. such as sending an e‐mail  notification. This can degrade performance.  The following table describes each option in the Log on property. “Subscribing  to Events”.  regardless of whether it ends because of success or failure. or a combination of these. Performance Impact: This option impacts performance every time the  service executes. this option does  not impact performance.1. whether it ends because of error or success. 142 webMethods Developer User’s Guide Version 7. The audit  log will contain an entry for every time the service finishes processing. see Chapter 14.6 Building Flow Services Specifying When Audit Data Is Generated When you configure service auditing. you can specify the points when the service  generates audit data. success. when  it ends successfully. By the time an  administrator views the audit log using webMethods Monitor. When the service executes to completion.  Performance Impact: This option impacts performance only when the  service fails. it also produces an audit event.  Error. most services execute fairly quickly. when it fails.

  Note: The service generates audit data only when it satisfies the selected option under  Enable auditing and the selected option in the Log on property. Including the Pipeline in the Audit Log When you configure service auditing. the service generates audit data at two points: the  beginning and the end. the  audit log contains an entry for the start of the service. It is not the state of the pipeline at the point the service  generates audit data. you can use the webMethods Monitor to perform more extensive  failure analysis.1 143 . but no entry for  the end of the service. For example. the Error only and Error and success options  require the Integration Server to write audit data once per service  execution.  webMethods Developer User’s Guide Version 7.1. this option  provides the most verbose and expensive type of audit logging. At most. If the audit log contains a copy of  the input pipeline. if When toplevel service only is selected and the service is not the root service in the flow service. it  will not generate audit data. This requires  significantly more disk utilization than the Error only and Error and success options. examine the service’s input data.6 Building Flow Services Log on option Description In both situations. The Integration Server must write the audit  data to the audit log twice per service execution. or reinvoke the service. if service execution began but did not complete.  The pipeline data saved in the audit log is the state of the pipeline just before the  invocation of the service. Use the options  in the Include pipeline property on the Properties panel to specify when the Integration  Server should save a copy of the input pipeline in the audit log. you can specify whether the server should include  a copy of the service’s input pipeline in the audit log.  Performance Impact: Of all the options under Log on. Every  time it executes.

Audit log settings for ServiceA The audit log will contain audit and pipeline data for this service only if the service is invoked by a client or trigger and... Keep in mind that saving the input pipeline to the audit log can impact the  performance of the Integration Server. Include pipeline Never Description The Integration Server will never save a copy of the service’s input  pipeline to the audit log. For  example. Performance Impact: This option requires minimal network bandwidth  because the Integration Server needs to send only the audit data  generated by the service to the audit log. ServiceA has the following settings on the Properties panel. The Integration Server can save the pipeline to a flat file audit log..the service fails.. The audit log will contain the input pipeline for ServiceA only if it is the top‐level service  (invoked directly by a client or a trigger) and the service ends because of failure.  you will not be able to use the pipeline data to reinvoke the service or perform failure  analysis.1.  Note:  Including the pipeline in the audit log is more beneficial when the audit log is a  database. the audit log will  not contain a copy of the input pipeline.  The following table describes the options in the Include pipeline property on the Properties  panel.6 Building Flow Services When Is a Copy of the Input Pipeline Saved in the Audit Log? The Integration Server saves a copy of the input pipeline only if the service generates  audit data and the service satisfies the option selected in the Include pipeline property.  144 webMethods Developer User’s Guide Version 7.1 . however. . If  ServiceA is not the top‐level service or if ServiceA executes successfully. Select this option if you are using a flat file  for the audit log or if you do not want to be able to resubmit the  service to the Integration Server.

 you could resubmit all the service invocations that  occurred since the last time the resource was backed up.1 145 . If the service  generates data at the start and end of execution (Log on is set to Error. the input pipeline is saved with the audit log entry  for the start of service execution. For more  information about webMethods Monitor. select On errors only or Always. To restore the resource to its  pre‐failure state.  The actual network bandwidth needed depends on the size of the  initial input pipeline. Note: If you want audit events generated by a service to pass a copy of the input  pipeline to any subscribed event handlers. the Integration Server does not include a copy of the input  pipeline.6 Building Flow Services Include pipeline On errors only Description The Integration Server saves a copy of the input pipeline to the audit  log only when the service generates audit data because of failure. see the webMethods  Monitor documentation.  regardless of whether the original service invocation succeeded or  failed.  The actual network bandwidth needed depends on the size of the  initial input pipeline.  Select this option if you want to use the resubmission capabilities of  the webMethods Monitor to reinvoke a failed service. A large pipeline can degrade performance  because it may negatively impact the rate at which the data is saved to  the audit log. Performance Impact: The Always option is the most expensive option  under Include pipeline. A large input pipeline can negatively impact the  rate at which the data is saved to the audit log. Service invocations that  end in failure require more network bandwidth because the  Integration Server must save the audit data and the input pipeline. webMethods Developer User’s Guide Version 7. the On errors only  option requires minimal network bandwidth.  Select the Always option if you want to be able to use the resubmission  capabilities of the webMethods Monitor to reinvoke the service. and start). success. Always The Integration Server saves a copy of the input pipeline to the audit  log every time the service generates audit data. If a service does not generate audit  data. This option places the greatest demand on  network bandwidth because the Integration Server must write a copy  of the input pipeline to the audit log every time a service executes. Including the pipeline can be useful if a resource experiences a  fatal failure (such as hard disk failure). Performance Impact: For successful service invocations. This is  sometimes called a full audit for recovery.1.

 you use the audit log to track which services execute  successfully and which services fail.6 Building Flow Services Service Auditing Use Cases Before you set properties in the Audit category on the Properties panel. Enable auditing  Select this option. To make sure the audit log contains the information needed to perform error auditing.  The following sections describe four types of auditing and identify the Audit properties  you would select to be able to perform that type of auditing. To use the audit log for service auditing. Include pipeline  Log on    On errors only Error only To use the audit log for error auditing.  Error Auditing In error auditing. services must generate audit data when errors occur. decide what type  of auditing you want to perform..  With webMethods Monitor. services need to  generate audit data after execution ends. Therefore. When top-level service only   Note:  If you want to be able to audit all failed invocations of  this service. and  how many times it fails. You can perform service auditing to analyze the  audit log and determine how often a service executes. For this property.1 . To use the  audit log for error auditing. you use the audit log to track and reinvoke failed services.1. how many times it succeeds. 146 webMethods Developer User’s Guide Version 7.. if your intent with  error auditing is to reinvoke failed services. decide what you want to use the audit log for. That is. the service needs to generate audit data only  when it is the top‐level service and it fails.  select the following Audit properties. Service Auditing When you perform service auditing. and the  Integration Server must save a copy of the service’s input pipeline in the audit log. you can only reinvoke top‐level services (those services  invoked directly by a client or by a Broker/local trigger). use a database as the audit log. select Always...

 You might want to audit for recovery in  the event that a resource experiences a fatal failure.6 Building Flow Services To make sure the audit log contains the information needed to perform service auditing. use a database for the audit log.1 147 . then you know that service execution began but did not complete. and you want to restore the resource  to its pre‐failure state by resubmitting service invocations. success.  When auditing for recovery.1.  To use the audit log to audit for recovery. you want to be able to resubmit failed and successful  services.. you might want to use the audit log to verify that  service execution started.  Auditing for Recovery Auditing for recovery involves using the audit log to track executed services and service  input data so that you can reinvoke the services.. Enable auditing    Include pipeline     Log on   Select this option..  select the following Audit properties. When top-level service only Never Note: Configure a service to save a copy of the input  pipeline only if you intend to reinvoke the service using  the resubmission capabilities of the webMethods  Monitor. you can use either a flat file or a database as the  audit log. Enable auditing Include pipeline    Select this option. select the Error. webMethods Developer User’s Guide Version 7. The audit log needs to contain an entry for each service invoked by a client  request or a trigger. To  enable auditing of long‐running services. The audit log also needs to contain a copy of each service’s input  pipeline.. For this property... Log on     Error and success To use the audit log for service auditing. select the following Audit properties.. and start option for the  Log on property.. When top-level service only  Always Error and success To use the audit log to audit for recovery. If the audit log contains a start entry for the service but no end  or error entry. For this property.  Auditing Long-Running Services If a service takes a long time to process.

 you will audit long‐running services in conjunction with error  auditing. Important! The options you select in the Audit category of the Properties panel can be  overwritten at run time by the value of the watt. For more information about the Log on options. To configure  service auditing. including information about  the performance impact.1. An audit  log can be a flat file or a database. The options  you select determine if and when a service generates audit data. service auditing. For more information about the Enable auditing options.6 Building Flow Services Note: Typically. you must have write access to the service and own the lock on the  service. see “Including the Pipeline in the Audit Log” on page 143. click the service’s title bar to give the service the focus.  2 3 148 webMethods Developer User’s Guide Version 7. select an option to indicate when the Integration Server should  include a copy of the input pipeline in the audit log.  Important! Before you select options for generating audit data.  To set auditing options for a service 1 Open the service for which you want to configure service auditing. including information about the  performance impact. select On errors only or Always.auditLog server property. check with your  Integration Server Administrator to determine what kind of audit log exists. 5 For Log on. or auditing for recovery. and whether the audit  log includes a copy of the service’s input pipeline. see “Specifying When Audit Data Is Generated” on page 142. see “Enabling Auditing for a  Service” on page 141. select an Enable auditing option to indicate  when you want the service to generate audit data.  Note: If you want audit events generated by this service to pass a copy of the input  pipeline to any subscribed event handlers. select an option to determine when the service generates audit data.  In the Audit category of the Properties panel. Make sure that you select options that  will provide the audit log with the audit data you require. For more information about the Include pipeline options. click Save.server. 6 On the File menu. 4 For Include pipeline.  In the editor.1 . Setting Auditing Options for a Service The following procedure explains how to set auditing options for a service.

success.  Audit Level in Developer 4.6  (and earlier) correspond to the properties on the Properties panel. and start Printing a Flow Service The following procedure describes how to use the View as HTML command to produce a  printable version of a flow service. In this field. you could configure audit level settings using the Audit level field on the Settings tab. its flow steps. brief. you could select one of three audit levels for a  service: off.1 149 . This lets you see all aspects of a flow (its input and  output parameters. and pipeline behavior) in a single document.  The following table indicates how the Audit level values from webMethods Developer 4. and start Error.1. Each of the earlier Audit level settings corresponds to a combination of options  on the Properties panel.6 Building Flow Services Audit Level Settings in Earlier Versions of Developer  In earlier versions of Developer. success. the audit level settings are no longer  available. webMethods Developer User’s Guide Version 7. or verbose.x None Brief Verbose Enable auditing Never Always Always Include pipeline Never Never Always Log on ‐‐  Error. Because the auditing options on the Properties panel offer  more control over the generation of audit data.

 Recent  Elements.     150 webMethods Developer User’s Guide Version 7.1 . and Results panels to maximize the editor. only the flow steps currently visible in  the editor appear in the resulting HTML page.1.6 Building Flow Services A flow report lets you view all aspects of the flow service at once Input/Output parameters Body of the flow Details of each flow step To print a flow service 1 2 3 In the editor. Properties. click View as HTML. Note: When you print a flow service as HTML. select the service that you want to print. select your browser’s print command.  From the File menu. hide the Navigation.  If you want to print the flow. To fit all of the steps in a flow service  into the editor (and therefore. into a single HTML page).

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ The LOOP Step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Inserting and Moving Flow Steps . . . . . . . „ The INVOKE Step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ The SEQUENCE Step . . . . . . . . . . . . . .1 151 . . . . . . . . . . . . . . . . . . „ The EXIT Step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 Inserting Flow Steps 152 152 157 160 170 176 178 181 183 „ What Is a Flow Step? . . webMethods Developer User’s Guide Version 7. . . . . . . . . . . „ The BRANCH Step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ The MAP Step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ The REPEAT Step . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

 The flow  steps in the service are listed in the editor.  „ Repeat a set of flow steps over the elements of a specified array (LOOP). Flow steps can invoke services and  direct the course of execution.1 . you must open the service in the editor.1. the editor is empty). „ Conditionally execute one step from a set of specified alternatives (BRANCH).  „ Exit the entire flow or exit a single flow step (EXIT). (If you just created the service and it does not  yet contain any default logic. edit. Using flow steps you can: „ Invoke a service. and delete pipeline variables or invoke several services that operate  on the same set of pipeline variables (MAP).7 Inserting Flow Steps What Is a Flow Step? A flow step is the basic unit of work that instructs webMethods Integration Server about  what to do with data at each stage of a flow service. C service.  „ Group a set of flow steps and control the way in which the failure of a member of the  set is processed (SEQUENCE). 152 webMethods Developer User’s Guide Version 7. Java service. or Web service  connector (INVOKE). add.  „ Link. such as a flow service.  „ Repeat a set of flow steps up to a specified number of times or until a step in the set  fails or succeeds as specified (REPEAT).  Inserting and Moving Flow Steps To insert flow steps in a flow service.

 All editing is performed  through the toolbar). To insert a/an.1.. see page.. (You cannot directly type a flow step into the editor.. INVOKE step MAP step BRANCH step LOOP step REPEAT step Click this button. You insert flow steps into a service using the following toolbar buttons at the top of the  editor..7 Inserting Flow Steps Displaying the steps in a flow service Flow steps are displayed in the editor. For more information.. it is clear what  data the service expects and what variables are available for use in flow steps. 157 183 160 178 170 webMethods Developer User’s Guide Version 7. By first declaring the parameters. Note: You might find it helpful to declare the input and output parameters for a flow  service before you insert flow steps..1 153 .

Changing the Level of a Flow Step Some flow steps have subordinate steps on which they operate.1 .. See the following section.. Developer  inserts the new step below the one that is selected. To..7 Inserting Flow Steps To insert a/an. the set of steps that  make up the loop are referred to as children of that LOOP step. For more information. In the following  example. Changing the Position of a Flow Step Flow steps run in the order in which they appear in the editor.. You can move a step to a new location  using the arrow buttons on the toolbar.  it adds the new step to the end of the flow. which has its own set of children.. the top LOOP step has nine children. For example. see page. SEQUENCE step EXIT step Click this button. If you do not have a step selected. To move a step up or  down in a flow service. “Changing the  Position of a Flow Step”.1. 176 181 Note: If you select an existing step in the editor before inserting a new one... Subordinate steps are  referred to as children. 154 webMethods Developer User’s Guide Version 7. first select that step in the editor and then use the arrow buttons  on the toolbar to move the step up or down in the list. Note that one of its children is a BRANCH  step. when you use the LOOP step. Children are specified by indenting them beneath their parent flow step.... Click this button. Move the flow step up in the list Move the flow step down in the list You can also move a flow step by dragging it up or down with your mouse or by using  the Shift commands on the Compose menu.

webMethods Developer User’s Guide Version 7... This step is a “child” of the LOOP step. select the step in the  editor.. move the step one level  up in the hierarchy) Click this button. make the selected step a  child of the preceding parent step)  This button will only be available if you select a step that can  become a child. Promote a flow step in the hierarchy (that is..7 Inserting Flow Steps Child steps are indented beneath their parent step These steps are “children” of the BRANCH step. Demote a flow step in the hierarchy (that is. To.1 155 . and then use one of the following buttons to move it left or right beneath the  current parent step. To promote or demote a flow step within a parent/child hierarchy.1.

 you use the label  to control the behavior of certain flow steps. See “The BRANCH Step” on page 160 and “The EXIT Step” on page 181  for additional information about this use of the label property. “webMethods Flow Steps”. For a complete description of the properties associated with each flow step.1 .  Label  Assigns a name to the selected flow step. Although each type of flow step has a set of unique properties. the BRANCH  step uses the Label property to determine which alternative it is supposed  to execute.7 Inserting Flow Steps Setting the Properties of a Flow Step Every flow step is associated with a unique set of properties. In addition.1. see  Appendix A. When a label is assigned. The properties for a flow  step are displayed in the Properties panel. they all have the  following properties: Property Description Comments    Assigns an optional descriptive comment to the selected flow step. 156 webMethods Developer User’s Guide Version 7. Properties of a flow step Use the Properties panel to view and set the properties of a flow step. For example. Values that you specify in the Properties panel  apply only to the selected step in the editor. that  label appears next to the step in the editor. The label allows you to  reference that flow step in other flow steps.

1 157 . you edit the Service  property.7 Inserting Flow Steps The INVOKE Step Use the INVOKE step to request a service within a flow.orders:getOrders „ You must specify the service’s name exactly as it is defined on the server. When you specify a service in  this manner. validating its input and/or output. If you want to change the service assigned to an INVOKE step. see “Performing  Input/Output Validation” on page 259. „ Invoke any service. a flow service that calls itself). webMethods Developer User’s Guide Version 7. Service  names are case sensitive. „ Invoke built‐in services and services on other webMethods Integration Servers. „ By typing the name of a service in the Service text box. „ Invoke any service for which the caller of the current flow has access rights on the  local webMethods Integration Server. Developer automatically assigns the name of that  service to the Service property. You edit this property in one of two ways: „ By clicking the Service property’s edit button ( ) and selecting a service from the  Select dialog box. Example      purchasing. „ Invoke flow services recursively (that is. including other flow services and Web service connectors. Flow service containing INVOKE steps Specifying the Service Property The INVOKE step’s Service property specifies which service will be invoked at run time. keep the following points in mind: „ You must specify the service’s fully qualified name in folderName:serviceName  format. bear in mind that you must provide a means to end the  recursion.1.  When you insert an INVOKE step. For details. If you use a  flow service recursively. You can use the INVOKE step to: „ Invoke any type of service. This is the preferred method.

  The pub. extracting information from XML  documents. In the editor.7 Inserting Flow Steps Invoking a Built-In Service There is an extensive set of built‐in services that you can invoke from a flow service. Invoking a Service on Another webMethods Integration Server You can use the built‐in service pub. see the webMethods Integration Server Built‐In Services Reference. Building an INVOKE Step Use the following procedure to invoke a service within a flow service. which are provided by the adapters.remote:invoke service resides in the WmPublic package and requires the alias of the  remote server and the fully qualified name of the service that you want to invoke as  input.  you will have additional built‐in services. click Browse to navigate to and  select the service. If the  service you want to invoke does not appear in the list. The remote server is identified by an alias. The pub.  which is configured on the Remote Servers screen in the Integration Server Administrator.1 .  performing simple mathematical operations.remote:invoke service automatically handles opening a session and authentication  on the remote server. Built‐in services reside in the WmPublic package. Note:  If you are using any adapters (for example.1. For a complete description of these  services. Click   on the editor toolbar and then select the service you want to invoke. See the  documentation provided with those adapters for details.  To build an INVOKE step 1 2 Open the flow service in which you want to invoke another service. Tip! You can also add invoke steps by selecting one or more services in the  Navigation panel and dragging them to the desired position within the flow in  the editor. the webMethods JDBC Adapter). and accessing databases. For a complete description of this service.remote:invoke to invoke a service on a remote  Integration Server and return the results. The services must reside on the same server as the flow service.  select the step immediately above which you want to insert the INVOKE step. The  webMethods library includes services for doing such things as transforming data values. 158 webMethods Developer User’s Guide Version 7. see the webMethods Integration Server  Built‐In Services Reference.

 Developer automatically assigns  the name of that service to the Service property. see “Linking Variables” on page 192. see “Performing  Input/Output Validation” on page 259. For more information about linking  variables to a service. Select False if you do not want to validate the input. Select True to validate  the output. specify the service’s fully  qualified name in the format folderName:serviceName or click    and select a service from the list. see “Performing  Input/Output Validation” on page 259. Link  Service Out variables to Pipeline Out variables. on the Pipeline tab. link Pipeline In variables to Service In variables. the  server waits for the step to complete and then raises an exception.1 159 . Select True to validate  the input.  If you want to use the value of a pipeline variable for this  property.. %expiration%. If you want to  change the service that is invoked. For  example. type the variable name between % symbols. The fully qualified name of the service that will be invoked at run  time. Tip! When you install Developer. You can use the ToolsOptions command to customize this list of  services to suit your needs. Select False if you do not want to validate the output. leave Timeout  blank. For information about validating input. the   Insert menu displays a list of commonly  used services.  Validate input   Whether or not you want the server to validate the input to the  service against the service input signature.. When you insert a service. Validate output   Whether or not you want the server to validate the output of the  service against the service output signature.1.  Optional. webMethods Developer User’s Guide Version 7. If this time elapses before the step completes... Service Specify. Timeout 4 If necessary. If you do not need to specify a time‐out period. Specifies the maximum number of seconds that this  step should run.7 Inserting Flow Steps 3 Complete the following fields on the Properties panel:  For this property. For information about validating output.

 For example. the BRANCH step evaluates the expression in the Label property of each  child step. 3 160 webMethods Developer User’s Guide Version 7.” Important! You cannot branch on a switch value and an expression for the same  BRANCH step.  If you want to branch on the values of more than one variable or on a range of values. At  run time. At run  time. If you want to branch on the value of a single variable and you know  the possible run‐time values of the switch variable exactly. you can: „ Branch on a switch value.  „ Branch on an expression. the BRANCH step matches the value of the switch variable to the Label property  of each of its targets. you branch on the value of a single variable in the  pipeline. see “Specifying the Switch Variable” on page 161. specify the value that will cause that step to  execute.  branch on expressions. you might use a BRANCH step to process a purchase  order one way if the PaymentType value is “CREDIT CARD” and another way if it is  “CORP ACCT”.  In the Properties panel for the BRANCH step.1 . Use a variable to determine which child step executes. see “Specifying the Label Value”  on page 161.1. Branching on a Switch Value When you branch on a switch value. It executes the first child step whose expression evaluates to “true. When you build a BRANCH step. branch on the switch value.7 Inserting Flow Steps The BRANCH Step The BRANCH step allows you to conditionally execute a step based on the value of a  variable at run time. Use an expression to determine which child step executes. In the Label property of each target step. For more information about this property. It executes the child step whose label matches the value of the  switch. specify in the Switch property the name  of the pipeline variable whose value will act as the switch.  To branch on a switch value 1 2 Create a list of the conditional steps (target steps) and make them children of the  BRANCH step. For more information  about this property.

1 161 . execution passes directly to the LogTransaction service if the value of  PaymentType is “COD. BuyerInfo/AccountNum). For example.  Specifying the Label Value At run time. It executes the target step whose label matches the value of  the switch variable. if you want to select a step based on whether a PO number starts with the  string “REL” you use /^REL/ as the value of Label.”   webMethods Developer User’s Guide Version 7. For more information about regular  expressions. the BRANCH step compares the value of the switch variable to the Label  property of each of its targets. You can use a regular expression to specify the matching value for a BRANCH step. The switch property of the BRANCH step specifies the name of the variable that acts Specifying the Switch Variable The variable you use as the switch variable: „ Must be a String or constrained Object variable. only one child of  a BRANCH step is executed: the target whose label matches the value of the switch  variable. see Appendix B.7 Inserting Flow Steps Simple BRANCH step that branches on a switch value Each conditional step has a label that matches the value that causes it to execute. To do  so. “Regular Expressions”.  and execution “falls through” to the next step in the flow service. none of them are performed. if you are specifying a field in a  document as the switch variable (for example. in the  following flow service. „ Must be a variable that can exist in the pipeline when the BRANCH step is executed  at run time. Unlike other flow steps whose children execute in sequence at run time.1. „ Must be formatted as document/documentVariable. If none of the targets match the switch variable. use the following syntax to specify the value in Label: /RegularExpression/ For example.

 For more information about using the $default setting. „ You can match a null value by using the $null value in the Label property. „ When you specify a literal value as the Label of a child step. “Specifying  a Default Step” on page 165. the value you specify  must match the run‐time value of the switch variable exactly. The Label property is  case sensitive. see “Branching on Null and Empty Values” on page 164.1. 162 webMethods Developer User’s Guide Version 7.7 Inserting Flow Steps An unmatched value will fall though the BRANCH If PaymentType is “COD. For  that case. For more  information about specifying a null value. see “Branching on Null and Empty Values”  on page 164. „ Each Label value must be unique within the BRANCH step. For more about matching an empty  string. „ You can use a regular expression as the value of Label instead of a literal value.1 . you leave the Label property blank. Keep the following points in mind when assigning labels to the targets of the BRANCH  step: „ You must give each target step a label unless you want to match an empty string. „ You can designate a default step for all unmatched cases by using the $default value in  the Label property.” execution will fall through this BRANCH step.

1 163 . “Conditional Expressions”. If none of the expressions  evaluate to true. It executes the first child step with an expression that evaluates to true.1.  Important! The expressions you create for the children of a BRANCH step need to be  mutually exclusive (only one condition should evaluate to true at run time). the Evaluate labels property indicates the step branches on expressions. At run time. In the Label property of each target. Use the syntax provided by  webMethods to create the expression. You can use the $default value in the Label property to  designate a default step for cases where no expressions evaluate to true. will cause  the target step to execute. set Evaluate labels to True. For more  information about using the $default value. specify the expression that. you assign an expression to each child of a branch  step. when true. the BRANCH step evaluates the expressions assigned to the child  steps. none of the child steps are invoked. When set to true. see “Specifying a Default Step” on page 165. To branch on an expression 1 2 3 Create a list of the conditional steps (target steps) and make them children of the  BRANCH step.  In the Properties panel for the BRANCH step. and execution falls through to the  next step in the flow service. webMethods Developer User’s Guide Version 7.  see Appendix D. Keep in mind that only one child of a BRANCH step is executed: the first target step  whose label contains an expression that evaluates to true. Simple BRANCH step that branches on an expression Each target step has an expression as the label. The expressions you create can include multiple variables  and can specify a range of values for variables. For more information about expression syntax.7 Inserting Flow Steps Branching on an Expression When you branch on an expression.

 To branch on null or empty values. At run time.. The BRANCH step considers a switch  value to be an empty string if the variable exists in the pipeline but its value is a zero  length string. You can use an empty value only when the switch variable is of type  String. the server ignores target steps with a blank or $null label.  You can use $null with any type of switch variable. The BRANCH step considers a switch value to be null if the variable does  not exist in the pipeline or is explicitly set to null. The  first target step handles situations where the value of CreditCardType is null or where  CreditCardType does not exist in the pipeline. the BRANCH step  executes the target step with the $null label if the switch variable is  explicitly set to null or does not exist in the pipeline.1 . the BRANCH  step executes the target step with no label if the switch variable is  present. you can include target steps that match null or empty  switch values. At run time. When executing the BRANCH step and evaluating  labels. (Note that the first two target steps are  EXIT steps that will return a failure condition when executed.  164 webMethods Developer User’s Guide Version 7. Important!  If you branch on expressions (Evaluate labels is set to True). An empty  string Leave the Label property blank (empty). Set the Label property to $null.. The following example shows a BRANCH step used to authorize a credit card number  based on the buyer’s credit card type (CreditCardType).1. and will process all specified credit card types.. The second target step handles cases where  the value of CreditCardType is an empty string.. It contains three target steps.) The third target step has  the $default label. you cannot  branch on null or empty values. but contains no characters. A null value Do the following.7 Inserting Flow Steps Branching on Null and Empty Values When you  build a BRANCH step. To BRANCH on. set the Label property for the target step  as follows.

 The  first target step handles orders paid for by Credit Card. set the Label property to  $default. The second target step handles  orders paid for through a Corporate Account.1 165 . It contains three target steps. The third target step has the $default label  and will process all other payment types. include a default target step to handle unmatched  cases.7 Inserting Flow Steps BRANCH that contains target steps to match null values or empty strings This target step executes when CreditCardType is null or does not exist. The following example shows a BRANCH step that is used to authenticate payment for  an order based on the type of payment (PaymentType). webMethods Developer User’s Guide Version 7. To specify the default alternative of a BRANCH step.1. This target step executes when the CreditCardType value is a zero length string. Specifying a Default Step If you want to prevent the service from falling through a BRANCH step when an  unmatched value occurs at run time.

Important! You can only have one default target step for a BRANCH step.  Because a series of steps are needed to process the PO in each case.. .and the $default target step handles the rest. Developer  always evaluates the default step last.1 .. the targets of the  BRANCH are defined as SEQUENCE steps. you can use the SEQUENCE  step as the target step and group a series of flow steps beneath it.7 Inserting Flow Steps The default step is set to $default The first two target steps handle credit card and corporate account payments.1.. 166 webMethods Developer User’s Guide Version 7. For these cases.. The default step does not need to be the last  child of the BRANCH step. and the appropriate series of steps are  specified as children beneath each SEQUENCE. Using SEQUENCE as the Target of a BRANCH In many cases. The following example illustrates a service that accepts a purchase order and processes it  one of three ways depending on the payment type specified in the PaymentType variable. you may want a BRANCH step to conditionally execute a series of  multiple steps rather than just a single step.

.. webMethods Developer User’s Guide Version 7. For additional information about building a  SEQUENCE.1 167 .and then specify the appropriate series of flow steps as children beneath each SEQUENCE.1.. see “The SEQUENCE Step” on page 176. including additional BRANCH steps. Define a multi-step alternative in a SEQUENCE .7 Inserting Flow Steps Use a SEQUENCE step as the target for a multi-step alternative Create a SEQUENCE for each multi-step alternative.. The SEQUENCE step that you use as a target for a BRANCH can contain any valid flow  step.

To build a BRANCH step 1 If you are inserting a BRANCH step into an existing flow service.. 2 3 Complete the following fields on the Properties panel: For this property. display that service  in the editor and highlight the step immediately above where you want the BRANCH  step inserted. For  more information about the EXIT step. see “Branching on Null and  Empty Values” on page 164.7 Inserting Flow Steps Building a BRANCH Step Use the following procedure to build a BRANCH step in a flow service. the server waits for  the step to complete and then raises an exception.  If you want to use the value of a pipeline variable for this  property. %expiration%). you must specify a value in the Label property. leave this property blank. or a null. Timeout      168 webMethods Developer User’s Guide Version 7. If you do not need to specify a time‐out period. Click   on the editor toolbar.. Note: If you use this step as a target for another BRANCH or an  EXIT step. type the variable name between % symbols (for  example. Do not specify a switch variable if you set the Evaluate labels  property to True.. unmatched. blank). An optional descriptive comment for this step. The name of a document (IData object) in the pipeline to which  you want to restrict this step. If you want this step to have access  to the entire pipeline. $default. see “The EXIT Step” on  page 181. For more information about  branching on null or empty values. Switch     The name of the String or constrained Object variable whose  value will be used to determine which child step to execute at run  time. The maximum number of seconds that this step should run. Label       An optional name for this specific step. leave Timeout  blank. If  this time elapses before the step completes.1 .1. Comments     Scope       Specify.. or  empty string ($null.

. Whether or not you want to evaluate labels of child steps as  conditional expressions.7 Inserting Flow Steps For this property. do not use null or empty values  as labels when branching on expressions. execute the step if the value  does not match any other label) A blank field $null $default A regular  expression Specify. its children) using  the following steps: a b c Insert a flow step using the buttons on the editor toolbar.  Important! If you are branching on expressions. That exact string The String representation of the object’s value Example for Boolean object  true Example for Integer object  123 Any string fitting the criteria specified by the regular  expression Example  /^REL/ An empty string A null value Any unmatched value (that is. specify the switch value that will  cause this step to execute at run time.1 169 ... In addition.1..  To match. Select True to branch on expressions.  4 Insert the conditional steps that belong to the BRANCH (that is.  on the editor toolbar to make it a child of the  In the Label property on the Properties panel. Indent the flow step using  BRANCH step.  Select False (the default) if you want to branch on the switch  value. A string A constrained  object value d Set other properties as needed. make sure the expressions you assign  to the target steps are mutually exclusive.. Evaluate labels   Specify. webMethods Developer User’s Guide Version 7.... The BRANCH step ignores target steps  with a $null label or blank label.

170 webMethods Developer User’s Guide Version 7. Use REPEAT to re-execute one or more steps This INVOKE step is repeated up to 10 times if it fails at run time. ERP systems. This option is useful to  accommodate transient failures that might occur when accessing an external system  (for example. „ Re-execute a set of steps until one of the steps within the set fails. If you set “Repeat on” to… FAILURE SUCCESS The REPEAT step… Re‐executes the set of child steps if any step in the set fails. Web servers. you set the Repeat on property to specify the condition  (success or failure) that will cause its children to re‐execute at run time. or Web services) or device.1 . This option is useful for  repeating a process as long as a particular set of circumstances exists (for example.7 Inserting Flow Steps The REPEAT Step The REPEAT step allows you to conditionally repeat a sequence of child steps based on  the success or failure of those steps.1. You can use REPEAT to: „ Re-execute (retry) a set of steps if any step within the set fails. databases. Specifying the REPEAT Condition When you build a REPEAT step. Re‐executes the set of child steps if all steps in the set  complete successfully.  data items exist in a data set).

 you can use the REPEAT step  to accommodate network errors. If the REPEAT step is a child of another flow step. is Count+1. Re‐executes children as long as the specified Repeat on  condition is true. failure  or success) for repeating is satisfied. If the condition is true and the Count is not met. keep the following points in mind: „ The following types of failures satisfy the FAILURE condition: „ „ „ Expiration of a child step’s Timeout limit  An exception thrown by a Java service A document query that returns an unpermitted null value webMethods Developer User’s Guide Version 7. The Count limit is reached before its children execute  successfully.1 171 .  the children are executed again. If  you use the REPEAT step for this purpose.1. the server checks to see whether the condition (that is.  Important! Note that children of a REPEAT always execute at least once. whichever occurs first. Re‐executes children up to this number of times. at run time.) When Does REPEAT Fail? The following conditions cause the REPEAT step to fail: If “Repeat on” is set to… SUCCESS FAILURE The REPEAT step fails if… A child within the REPEAT block fails. (In other words. The Count  property specifies the maximum number of times the children can be re‐executed.7 Inserting Flow Steps Setting the REPEAT Counter The REPEAT step’s Count property specifies the maximum number of times the server re‐ executes the child steps in the REPEAT step. Using REPEAT to Retry a Failed Step If your flow invokes services that access external systems. the failure is propagated to its parent. the maximum number of  times that children of a REPEAT will execute when Count is > ‐1. such as busy servers or connection errors. This process continues until the repeat condition is  false or Count is met. At  the end of an iteration.  If you set “Count” to… 0 Any value > 0 -1 or blank The REPEAT step… Does not re‐execute children.

 the failure of any one of the  children will cause the entire set of children to be re‐executed. If you want to use the value of a pipeline variable for this  property.. An optional descriptive comment for this step.. 2 3 Complete the following fields on the Properties panel: For this property. including all of its possible iterations. „ The Timeout property for the REPEAT step specifies the amount of time in which the  entire REPEAT step. „ As a developer. you may want to leave the Timeout value at 0 (no limit)  or set it to a very high value. If  this time elapses before the step completes. could be applied twice. the third child is not executed).1 . „ The REPEAT step immediately exits a set of children at the point of failure (that is. Comments Scope     Specify. The maximum number of seconds that this step should run. if  the second child in a set of three fails. display that service  in the editor and highlight the step immediately above where you want the REPEAT  step inserted. If you want this step to  have access to the entire pipeline. When you  use REPEAT to retry on failure. you must be thoroughly familiar with the processes you include  within a REPEAT step. Timeout     172 webMethods Developer User’s Guide Version 7. must complete. %expiration%).7 Inserting Flow Steps „ If you specify multiple children under a REPEAT step. To build a REPEAT step that re-executes failed steps 1 If you are inserting a REPEAT step into an existing flow service. Make certain that the child steps you specify can safely be  repeated in the event that a failure occurs. type the variable name between % symbols (for  example. leave Timeout  blank. leave this property blank.. such as accepting an order or crediting an account  balance.1. „ When Repeat on is set to FAILURE. the failure of a child within a REPEAT step does  not cause the REPEAT step itself to fail unless the Count limit is also reached.. Click   on the editor toolbar. If you do not need to specify a time‐out period. You don’t want to use REPEAT if there is  the possibility that a single action. The name of a document (IData object) in the pipeline to  which you want to restrict this step. You can also set the property to the value of a pipeline  variable by typing the name of the variable between % symbols. the server waits for  the step to complete and then raises an exception.

 %servicecount%). If you want to use the value of a pipeline variable for this  property.  unmatched.... $default. %waittime%).)  on the editor toolbar. (Make it a child of the  Set the properties for the child step as needed.1. An optional name for this specific REPEAT step. type the variable name between % symbols  (for example. Repeat interval    The length of time (in seconds) that you want the server to  wait between iterations of the children. If you want the children re‐executed until they are all  successful (that is. see  “The BRANCH Step” on page 160 or “The EXIT Step” on  page 181. Label   Specify. or empty string ($null. If you want to use the value of a pipeline variable  for this property. you must specify a value in the Label property. Indent that flow step using  REPEAT step. or a null. set this value to –1. Important! If you use this step as a target for a BRANCH or  EXIT step.. Count     The maximum number of times you want the children to be  re‐executed.1 173 . webMethods Developer User’s Guide Version 7. type the variable name between % symbols (for  example. Repeat on    4 FAILURE Beneath the REPEAT step. For  more information about the BRANCH and EXIT steps. no maximum limit). use the following steps to insert each step that you want to  repeat: a b c Insert a flow step using the buttons on the editor toolbar. blank).7 Inserting Flow Steps For this property.

 the REPEAT step itself succeeds and execution of the flow proceeds  normally). type the variable name between % symbols (for  example. An optional descriptive comment for this step. „ The failure of a child does not cause the REPEAT step to fail. The maximum number of seconds that this step should run.7 Inserting Flow Steps Using REPEAT to Retry a Successful Step Apart from using REPEAT to retry a failed step.1 . 2 3 Complete the following fields on the Properties panel: For this property. it merely ends the loop. leaving the  remaining children unexecuted...  (In this case.1.If  this time elapses before the step completes. the server waits for  the step to complete and then raises an exception. Comments    Scope      Specify.  If you want to use the value of a pipeline variable for this  property. you can also use it as a looping device to  repeat a series of steps until a failure occurs. If you want this step to  have access to the entire pipeline. leave Timeout  blank. the REPEAT step exits at the point of failure. If you do not need to specify a time‐out period..    Timeout      174 webMethods Developer User’s Guide Version 7. „ If one child in the set fails. leave this property blank. keep the following points  in mind: „ The success condition is met if all children of the REPEAT step execute without  returning a single exception. To build a REPEAT step that repeats a set of successful steps 1 If you are inserting a REPEAT step into an existing flow service.  Click   on the editor toolbar. %expiration%). The name of a document (IData object) in the pipeline to  which you want to restrict this step..  If you use the REPEAT step to re‐execute successful child steps. display that service  in the editor and highlight the step immediately above where you want the REPEAT  step inserted.

 type the variable name between % symbols  (for example.. no maximum limit).. Repeat interval   The length of time (in seconds) that you want the server to  wait between iterations of the children.. If you want to use the value of a pipeline variable for this  property. $default.. type the variable name between % symbols (for  example. you must specify a value in the label property. %servicecount%). Repeat on     4 SUCCESS Beneath the REPEAT step. use the following steps to insert each step that you want  repeat: a b c Insert a flow step using the buttons on the editor toolbar. Count      The maximum number of times you want the children to be  re‐executed. An optional name for this specific step. %waittime%). set this value to –1. Important! If you use this step as a target for a BRANCH or  EXIT step. webMethods Developer User’s Guide Version 7. For  more information about the BRANCH and EXIT steps. If you want the children re‐executed until any one of them  fails (that is. Label     Specify.1. If you want to use the value of a pipeline variable  for this property. see  “The BRANCH Step” on page 160 or “The EXIT Step” on  page 181. or a null.1 175 .  on the editor toolbar to make it a child of the  Set the properties for the child step as needed. blank). Indent that flow step using  REPEAT step.7 Inserting Flow Steps For this property. unmatched.  or empty string ($null.

 see “Using SEQUENCE as the Target of a  BRANCH” on page 166. the server automatically exits the sequence  (that is. When a SEQUENCE exits under this condition. For details  about this use of the SEQUENCE step.1. Note: When a SEQUENCE step exits on failure. The  most common reasons to do this are: „ To group a set of steps as a single alternative beneath a BRANCH step. Using SEQUENCE to Specify an Exit Condition In an implicit sequence. This setting is useful if you have a series of steps that build upon  one another. you will want to skip the  PO submission if the authorization step fails. if you have a set of steps that gets an  authorization code and then submits a PO. By grouping steps into an explicit sequence.7 Inserting Flow Steps The SEQUENCE Step You use the SEQUENCE step to build a set of steps that you want to treat as a group. except for children of a BRANCH step. However.  you can override this default behavior and specify the condition on which the sequence  exits. By default. are executed as though they were  members of an implicit SEQUENCE step (that is. one after another. the Integration  Server returns the pipeline to the state it was in before the  SEQUENCE step executed. there are times when it is useful to explicitly group a set of steps. To do this. (Execution  continues with the next flow step in the flow service. one after  another). That is. all steps in a flow  service. the Integration  Server rolls back the pipeline contents. „ To specify the conditions under which the server will exit a sequence of steps without  executing the entire set. you set the Exit on parameter as follows: If you want the server to… Exit the sequence when a step in the sequence fails.1 .) This is the  default behavior of a sequence of steps. For example. the SEQUENCE  step fails. the Exit on property is set to FAILURE).  Steps in a group are executed in order.  Set “Exit on” to… FAILURE 176 webMethods Developer User’s Guide Version 7. when a step fails. they execute in order.

  Set “Exit on” to… SUCCESS DONE Note: Rollback operations are performed on the first level of the pipeline only.  (Execution continues with the next step in the flow service. The server considers a SEQUENCE step successful as long as it  executes all of its children within the specified time‐out limit. If a child fails under this condition.   Execute every step in the sequence even if one of the steps in the  sequence fails.7 Inserting Flow Steps If you want the server to… Exit the sequence when any step in the sequence succeeds. and processing  continues with the next child step in the SEQUENCE. any changes that  it made to the pipeline are rolled back (undone).1.1 177 .  first‐level variables are restored to their original values before the step failed. the server considers  the SEQUENCE step successful.) This setting is useful for building a set of alternative steps that are  each attempted at run time. Once one of the members of the set runs  successfully. and processing continues with the next  child step in the SEQUENCE. a failure in one of the transformers) will cause  the containing SEQUENCE to exit when you set Exit on to FAILURE.  When a SEQUENCE exits under this condition. the remaining steps in the sequence are skipped. That is. Note: A failure in a MAP step (that is. If a child  fails under this condition. but the  server does not roll back changes to any documents to which the first‐level variables  refer.” webMethods Developer User’s Guide Version 7. a MAP  step that does not fail will not cause the containing SEQUENCE to exit when you set  Exit on to SUCCESS. a MAP can fail but it does not “succeed. even if all its children fail. any changes that it made to the pipeline  are rolled back (undone). The  success or failure of a child within the sequence is not taken into  consideration. However. That is.

 For example. you indent those steps beneath the LOOP as shown in the  following example. if your pipeline contains an array of purchase‐order line items.1 . the set of steps  you want the LOOP to repeat). The following example shows a pair of nested LOOPs.7 Inserting Flow Steps The LOOP Step The LOOP step repeats a sequence of child steps once for each element in an array that  you specify. 178 webMethods Developer User’s Guide Version 7. Nested LOOP steps The entire LOOP step is a child of the outer LOOP. Note how the  indentation of the steps determines the LOOP to which they belong. including additional  LOOP steps. To specify the sequence of steps that make up the body of the loop (that is. You may include any valid flow step within the body of a LOOP.  you could use a LOOP step to process each line item in the array. Simple LOOP step The body of the loop must be indented beneath the LOOP step.1.

 Qty. and UnitPrice. if your loop checks inventory status of each line item in a purchase order and  produces a String called InventoryStatus each time it executes.7 Inserting Flow Steps Specifying the Input Array The LOOP step requires you to specify an input array that contains the individual  elements that will be used as input to one or more steps in the LOOP. you  would use the document list in which the order’s line items are stored as the LOOP’s  input array. The array  you specify can be any of the following data types: „ String list „ String table „ Document list „ Object list LOOP properties The LOOP step executes once for each member of the array specified in Input array.1 179 . you would specify  InventoryStatus as the value of Output array. At run time. the server will automatically  webMethods Developer User’s Guide Version 7. not the entire array. if you want to execute a LOOP for each line item stored in a purchase order. When you design your flow. Qty. but services within the loop would take the individual elements of  LineItems (for example. you would specify LineItems as the Input array for  the LOOP step. UnitPrice. For  example. remember that because the services within the loop operate  against individual elements in the specified input array. At run time. if your LOOP executes against a document list called LineItems that contains  children called Item. Item. and so forth) as input. For  example. you use the Output array parameter to specify the name of the array variable  into which you want the server to collect output for each iteration of the loop. they must be designed to take  elements of the array as input. the  LOOP step executes one pass of the loop for each member in the specified array.  To do this. the server can collect that output into an  array in the pipeline. For example. You specify the name of the input array on the LOOP step’s Properties panel.1. Collecting Output from a LOOP Step If your LOOP step produces an output variable.

2 3 Complete the following fields on the Properties panel: For this property… Comments  Scope     Specify… An optional descriptive comment for this step.1 .7 Inserting Flow Steps transform InventoryStatus to an array variable that contains the output from each iteration  of the loop. To build a LOOP step 1 If you are inserting a LOOP step into an existing flow service. String table. display that service in  the editor and select the step immediately above where you want the LOOP step  inserted. If you do not need to specify a time‐out period. This variable must be one of the following types:  String list. %expiration%).  Building a LOOP Step Use the following procedure to build a LOOP step in a flow service. $default. For  more information about the BRANCH and EXIT steps. see  “The BRANCH Step” on page 160 or “The EXIT Step” on  page 181. If you want to use the value of a pipeline variable for this  property. Timeout    180 webMethods Developer User’s Guide Version 7.If  this time elapses before the step completes. Important! If you use this step as a target for a BRANCH or  EXIT step. Document list. or empty string ($null. The maximum number of seconds that this step should run. or a null.1. Input array    The name of the array variable on which the LOOP will  operate. the server waits for  the step to complete and then raises an exception.  To collect output from each pass of the loop. If you want this step to  have access to the entire pipeline. blank).  Label     An optional name for this specific LOOP step. Click   on the editor toolbar. you must specify a value in the Label property. leave this property blank. specify the name of the output variable that  you want the server to collect for each iteration. Object list. type the variable name between % symbols (for  example. leave Timeout  blank.  unmatched.  The name of a document (IData object) in the pipeline to  which you want to restrict this step.

When you use the EXIT step. an exception is thrown.  on the editor toolbar to make it a child of the LOOP  Set the properties for the child step as needed.   „ The parent flow step of the EXIT flow step. webMethods Developer User’s Guide Version 7.  The EXIT Step The EXIT flow step allows you to exit the entire flow service or a single flow step. For more information about using the  Pipeline tab. Indent the flow step using  step. you indicate whether exiting should return a successful  condition or a failure condition. make sure that you specify the output array  variable in the LOOP Output array property before creating a link to the output array  variable within a MAP or INVOKE step in the body of the LOOP. 5 Use the Pipeline tab to link the elements of the input array to the input variables  required by each child of the LOOP step. You do not need to specify this  property if the loop does not produce output values or if you  are collecting the elements of Input array.1 181 . „ The entire flow service. If the exit is considered a failure. 4 Build the body of the loop using the following steps: a b c Insert a flow step using the buttons on the editor toolbar. If you specify the  output array variable after creating a link to it.7 Inserting Flow Steps For this property… Output array    Specify… The name of the element that you want the server to collect  each time the LOOP executes. You can  test the step in Developer to see if the link succeeds. see Chapter 8. Important! When you build a LOOP step. delete the link to  the output array variable and then recreate it. If the link fails.  You can specify the text of the error message that is displayed by typing it directly or by  assigning it to a variable in the pipeline. “Mapping Data in a Flow Service”. You  specify whether you want to exit from: „ The nearest ancestor (parent) LOOP or REPEAT flow step to the EXIT flow step. the link will fail at run time. „ A specified ancestor flow step to the EXIT flow step.1.

 unmatched. the  matching EXIT step executes and exits the LOOP over the ʹ/PurchaseOrdersListʹ step.  or empty string ($null. if executed.CreditCardType is null. blank)... .  Use the EXIT step to exit the nearest ancestor LOOP step This LOOP exits when. or a null.. 2 3 Complete the following fields on the Properties panel: For this property… Comments   Label    Specify… An optional descriptive comment for this step. display that service in  the editor and select the step immediately above where you want the EXIT step  inserted. To build an EXIT step 1 If you are inserting an EXIT step into an existing flow service. Important! If you use this step as a target for a BRANCH step. Click   on the editor toolbar. „ Throw an exception when you exit a flow or a flow step without having to write a  Java service to call Service. see “The BRANCH  Step” on page 160.1.1 .  you must specify a value in the Label property.. For more  information about the BRANCH step. The following flow service contains two EXIT steps that.. If the value of CreditCardType is null or an empty string..7 Inserting Flow Steps Examples of when to use the EXIT step include to: „ Exit an entire flow service from within a series of deeply nested steps. „ Exit a LOOP or REPEAT flow step without throwing an exception.  An optional name for this specific step.throwError( ).. 182 webMethods Developer User’s Guide Version 7. . $default. will exit the nearest  ancestor LOOP step..or empty..

7 Inserting Flow Steps For this property… Exit from    Specify… The flow step from which you want to exit.  adding. Specify one of the  following: Specify $loop $parent $flow Label To exit from the. The MAP Step The MAP step lets you adjust the contents of the pipeline at any point in a flow service.  Specify one of the following: Specify… SUCCES S FAILURE To… Exit the flow service or flow step with a success  condition. and dropping variables in the pipeline.  „ Clean up the pipeline after a preceding step by removing fields that the step added  but are not needed by subsequent steps. Failure message   The text of the exception message you want to display.  type the variable name between % symbols (for example. Exit the flow service or flow step with a failure  condition.. „ Move variables or assign values to variables in the pipeline.1 183 . Parent flow step. Entire flow. An exception is thrown after the exit.  When you build a MAP step. you can: „ Prepare the pipeline for use by a subsequent step in the flow service by linking. Note: If the label you specify does not match the  label of an ancestor flow step.1.  You specify the error message with the Failure message property. webMethods Developer User’s Guide Version 7.  %mymessage%). the flow will exit  with an exception. This property is not used when Signal is set to SUCCESS. Nearest ancestor LOOP or REPEAT flow step. regardless of the type of step. If you  want to use the value of a pipeline variable for this property.. Signal Whether the exit is to be considered a success or a failure. Nearest ancestor flow step that has a label that  matches this value.

7 Inserting Flow Steps „ Initialize the input values for a flow service. see Chapter 8.1 . “Mapping Data in a Flow  Service”.1. Tip! The MAP step is especially useful for hard coding an initial set of input values in  a flow service.  and then use the Set Value modifier to assign values to the appropriate variables in  Pipeline Out. insert the MAP step at the beginning of your flow. For more information about the MAP step. 184 webMethods Developer User’s Guide Version 7. For example. you can map a document  in an XML format to an ebXML format or a proprietary format. „ Map documents form one format to another. To use it in this way.  „ Invoke several services (transformers) in a single step.

. . . . . . . . . . . . . .1 185 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Working with Transformers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8 Mapping Data in a Flow Service 186 186 191 212 „ What Is Data Mapping? . . . . . . .1. . . . . . . . . . . „ Basic Mapping Tasks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . webMethods Developer User’s Guide Version 7. . . . . . . . . . . . . . . . . . . . . . . . . . . „ What Does the Pipeline Tab Contain? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

 you can change the format of a date. you may need to  perform one. the value and position of a variable in the  document (IData object) structure remain the same. By mapping.  the name and position of the variable remain the same. two. one service or document format might put the telephone number in a string  called Telephone. one service or document format might use Telephone as the name of the  variable for telephone number information and another might use PhoneNumber. 1999. When you perform value transformations. „ Structural transformations where different data structures represent a data item. your services or document  formats might use different notations for standard codes or values. For  example.) When you build flow services or convert between document formats. but the data contained in the  variable changes.8 Mapping Data in a Flow Service What Is Data Mapping? Data mapping is the process of performing transformations to resolve data representation  differences between services or document formats.  When you perform name transformations. the value  of the variable remains the same. The webMethods flow  language provides two ways for you to accomplish data transformations between  services and document formats: you can map variables to each other (create links) or you  can insert transformers. but the data type or position of the variable in the  document (IData object) structure changes. for instance. and the next may expect to find it in an element of a document (IData  object) array called CustInfo. one variable might use  “01/01/99” and another “January 1. different currency  units. or all of the above types of data transformation. concatenate two  strings.  „ Value transformations where different formats represent the same value. (For example. or add the values of two variables together.” In other cases.S.1. but the name of the variable  changes. which is the Pipeline tab. For  example. 186 webMethods Developer User’s Guide Version 7. You use the tools on this tab to  route variables (data) between services or between document formats.1 . you can accomplish the  following types of data transformations: „ Name transformations where different variable names represent the same data item. What Does the Pipeline Tab Contain? The Pipeline tab offers a graphical representation of all of your data through which you  can map data and inspect the contents of the pipeline.  Customary or British Imperial systems). where. The contents of this tab for INVOKE steps are slightly different than for  MAP steps. This occurs  commonly with date and time variables. or a different system of weights and measures (metric instead of the U. When you perform structural transformations.  webMethods Developer provides a graphical environment in which you can perform  data mapping between variables and formats.  The Pipeline tab displays in the editor for invoked services (INVOKE steps) or MAP steps  in a flow service.

The expected state of the pipeline just before the selected service  executes. assign values to  variables. On the Pipeline tab. drop variables from the pipeline. you can link variables. or add variables to the  pipeline..1 187 ..1. 1 Represents. the Pipeline tab depicts two stages of the pipeline with respect to the  selected service in the editor.. Service In depicts the set of variables the selected service expects as  input (as defined by its input parameters).8 Mapping Data in a Flow Service Pipeline Tab for an INVOKE Step For an INVOKE step.  webMethods Developer User’s Guide Version 7.  Pipeline In depicts the set of variables that are expected to be in the  pipeline before the service executes (based on the declared input  and output parameters of the preceding services). Modifications that you specify during this stage are  performed immediately before the service executes at run time. you can insert “pipeline modifiers” at this stage  to adjust the contents of the pipeline to suit the requirements of the  service.. 1 2 This stage. For example.  Pipeline tab for an INVOKE step (service) The Pipeline tab depicts the service’s input and output with respect to the expected pipeline.

Service Out depicts the set of variables that the selected service  produces as output (as defined by its output parameters). For example. If the selected  service (INVOKE step) is the last step in the flow service.1 . see “Applying Constraints to Variables” on page 255. Developer uses the ‡  symbol to denote a variable with a content constraint. assign values to variables. Developer uses   to indicate an optional variable.  On the Pipeline tab. Pipeline Out depicts the set of variables that are expected to be in the  pipeline after the service executes. you can link  variables.1. It represents the set of variables  that will be available to the next service in the flow. 188 webMethods Developer User’s Guide Version 7. you can insert “pipeline modifiers” at this stage  to adjust the contents of the pipeline... The expected state of the pipeline just after the service executes. Modifications that you  specify during this stage are performed immediately after the  service executes at run time.. 2 Represents.. Note: Developer displays small symbols next to a variable icon to indicate validation  constraints. For information about applying  constraints to variables. Pipeline Out  displays the output variables for the flow service (as declared on the  Input/Output tab). or add variables to the pipeline. drop variables from the  pipeline.8 Mapping Data in a Flow Service This stage.

 Pipeline In and Pipeline Out are identical.8 Mapping Data in a Flow Service Pipeline Tab for a MAP Step For a MAP step. For more information about invoking services in a MAP step. „ The Pipeline Out column represents the output of the MAP step.  webMethods Developer User’s Guide Version 7. you can link variables from Pipeline In to services in Transformers. drop variables  from the pipeline. It contains the names of all of  the variables in the pipeline at this point in the flow. It contains the names  of variables that will be available in the pipeline when the MAP step completes. you can insert “pipeline modifiers” to adjust the contents of the  pipeline.  see “Inserting a Transformer into a MAP Step” on page 214.1.  You can also use pipeline modifiers to assign values to pipeline variables. if the MAP step is the only step in the flow service or is the last step in the flow  service. Pipeline Out also displays the variables declared as output in the flow service.  On the Pipeline tab. Pipeline tab for a MAP step „ The Pipeline In column represents input to the MAP step.  the Pipeline tab contains a column named Transformers. Between these sets of variables. The Pipeline tab  contains two sets of variables: Pipeline In and Pipeline Out. „ The Transformers column displays any services inserted in the MAP step to complete  value transformations.1 189 .  However. or add variables to the pipeline.  When you first insert a MAP step into your flow. the Pipeline tab displays a single stage of the pipeline. For example.

 see “Linking  Variables” on page 192. The Drop modifier removes  extraneous variables from the pipeline. Scroll or resize the Pipeline tab to display the portion of the pipeline you want to view  as HTML.. To print the Pipeline tab 1 2 3 4 Open the flow service for which you want to print the Pipeline tab.  Note: When you view the Pipeline tab as HTML. For information about  using this pipeline modifier. 190 webMethods Developer User’s Guide Version 7. They execute immediately before or after the selected service or transformer.. For information about this pipeline modifier.  see “Assigning Values to Pipeline Variables” on page 206. Click anywhere on the Pipeline tab.1. The Link modifier lets you  resolve variable‐name and data‐structure differences by “linking”  (copying) the value of one variable to another at run time. select the INVOKE or MAP step for which you want to print the Pipeline  tab. the resulting HTML page displays  only the portion of the pipeline that is visible within the tab. The Set Value modifier “hard codes” a  value for a variable.  depending on where you add them on the Pipeline tab.8 Mapping Data in a Flow Service Pipeline Modifiers Pipeline modifiers are special commands that you apply to adjust the pipeline at run  time..   Link To. In the editor. For  information about using this pipeline modifier. Link a pipeline variable to a service variable.. make sure the Pipeline tab displays the part of the pipeline that you  want to view as HTML.   Drop   Set Value Printing the Pipeline Tab The following procedure describes how to use the View as HTML command to produce a  printable version of the Pipeline tab. Assign a value to a variable. Drop a variable from the pipeline. see “Dropping Variables from the  Pipeline” on page 210. Before you select the View as HTML command. Use the following buttons to add  pipeline modifiers to the pipeline:  Use this modifier.1 .

  „ Add variables to the pipeline. use your browserʹs print command.1 191 .  „ Assign values to variables. You can remove pipeline variables that are not used by  subsequent services in a flow.  „ Drop variables from the pipeline. If you want to print the pipeline. Developer creates an HTML page and displays it in your default browser.1..  The following table identifies the sections that describe the basic mapping tasks. You can copy the value of a variable in one service or  document format to a variable in another service or document format. Linking variables Linking variables of different data types Linking to and from array variables Deleting links between variables Applying conditions to links between variables Assigning values to pipeline variables Dropping variables from the pipeline Adding variables to the pipeline Searching for variables in an editor tree See page. 192 199 201 204 204 206 210 211 58 webMethods Developer User’s Guide Version 7.. you can perform the following  basic mapping tasks: „ Link variables to each other. You can add variables that were not declared as input or  output parameters of the flow service. You can also add input and output variables  for services that the flow service invokes (internally invoked services)..  For more information about.. You can hard code variable values or assign a default value to  variables. On the Pipeline tab. click View as HTML.8 Mapping Data in a Flow Service 5 6 On the File menu. Basic Mapping Tasks Basic mapping tasks are the tasks you perform to manage the pipeline contents and the  values of variables in the pipeline.

1. In cases where the services in a flow do not use the same names for a piece of  information. 192 webMethods Developer User’s Guide Version 7. use the Pipeline tab to explicitly link the variables to each other. it is  automatically linked to the AcctNumber variable in Service In.1 . For example. At run time. On the input side of the Pipeline tab. In the following example. the service expects a value called  OrderTotal. they are  simply different names for the same data).  Developer connects explicitly linked variables with a solid black line. you “link” the pipeline variable to the service using the Link modifier. use the Link modifier to link a variable from the  pipeline to the service. Within a flow. Explicit  linking is how you accomplish name and structure transformations required in a flow. which is equivalent to the pipeline variable BuyersTotal (that is. Developer implicitly links variables whose names are the same and whose  data types are compatible. Because a variable by this name already exists in Pipeline In.  Implicit links between pipeline and service variables Pipeline variables are automatically linked to service variables of the same name. Developer connects service and pipeline variables on the  Pipeline tab with a line called a link. Creating a link between variables copies the value  from one variable to another at run time. Developer connects  implicitly linked variables with a gray link. you link the variables. the service in the following flow takes a variable  called AcctNumber. the server will copy the value from the source variable (BuyersTotal) to the  target variable (OrderTotal) before executing the service.8 Mapping Data in a Flow Service Linking Variables When you want to copy the value of a variable in a service or document format to another  variable. To use the value of BuyersTotal as the value for  OrderTotal. Important! The Pipeline tab does not display implicit links for a MAP step.

 a variable called TransNumber is linked to the field Num in a  document called TransactionRecord. the server will copy the value of  TransNumber to Num. If you link variables  with different object constraints and input/output validation is selected. use the Link modifier to connect them. the run‐time  result is undefined.1. Important! Do not link variables with different Object constraints. you  can link the output from a service to a different variable in Pipeline Out.1 193 . All the output variables that a service produces are automatically placed in the pipeline. and both TransNumber and Num will be available to subsequent  services in the flow.  Just as you can link variables from the Pipeline In stage to a service’s input variables.  webMethods Developer User’s Guide Version 7. In the following example.8 Mapping Data in a Flow Service Linking the pipeline to service input When a pipeline variable name is different from the one used by the service. At run time.

  see “What Happens When Integration Server Executes a Link Between Variables?” on  page 196. when you link a  variable in Pipeline In to one in Service In. (Two  exceptions to this rule involve array variables and conditional links. the Pipeline In variable is the source. When you link a  variable in Service Out to one in Pipeline Out. the Service Out variable is the  source. see “Applying Conditions to Links Between Variables” on page 204. you cannot draw another link to the target variable.  „ By linking variables to each other. 194 webMethods Developer User’s Guide Version 7. For more  information about linking array variables.1 . are copied by reference. „ The variable you are linking to is the target. When  you link a variable in Service Out to one in Pipeline Out. (Documents.8 Mapping Data in a Flow Service Linking service output to the pipeline When an output variable name is different from the name in the pipeline. keep the following points in mind: „ The variable that you are linking from is the source. „ A Service In variable can be the target of more than one Link modifier only if you use  array indexing or if you place conditions on the links to the variable. when you link a variable in  Pipeline In to one in Service In. see “Linking to and from Array Variables”  on page 201. however. For example. Developer automatically adds a service’s output variables to the pipeline and implicitly links them. When you link variables in the pipeline. use the Link modifier to connect them. After you draw a link  to a target variable. For more information about placing conditions on links between  variables.1. you are copying data from the source variable to the  target variable.) „ Target variables can be connected to only one source variable. the Service In variable is the target. the Pipeline Out variable is the target. For more information. For example.

 click the pipeline variable you want to use as the source variable. you must specify which element  in the array you are linking to or from. webMethods Developer User’s Guide Version 7. click the output variable you want to use as the source variable. the run‐time  result is undefined. Click   on the toolbar.  If you want to place a condition on the execution of the link. In Service In. „ „ „ Tip! You can also use your mouse to link variables to one another. For more information about array linking. do  the following: a b c In Service Out. Click   on the toolbar. To create a link between variables 1 2 3 In the editor. click the input variable you want to use as the target variable.  If you created a link to or from an array variable. click the pipeline variable you want to use as the target variable. Notes:  „ If the variable types are incompatible and cannot be linked to one another. If you want to create a link between a variable in Pipeline In and one in Service In. The target variable does not replace the source variable.  „ After a Link modifier is executed.  Do not link variables with different Object constraints.  Developer displays a message stating that the operation is not allowed. To do this. Click the Pipeline tab. see “Applying  Conditions to Links Between Variables” on page 204.  see “Linking to and from Array Variables” on page 201. select the  source variable and drag your mouse to the appropriate target variable. do the  following: a b c 4 In Pipeline In.1 195 . select the INVOKE or MAP step containing the variables you want to  link.8 Mapping Data in a Flow Service „ You cannot create a link to a variable if you already used the Set Value modifier to  assign a value to a variable. If you link variables with  different object constraints and input/output validation is selected.1. If you want to create a link between a variable in Service Out and one in Pipeline Out. both the source and target variables exist in the  pipeline. In Pipeline Out.

 the Integration Server copies  by reference. (An  exception to this behavior is that when executing a link from a String to an Object.1. when executing a link between a source document and a  target document.  If. (The target variable references the value of the source variable. What Happens When Integration Server Executes a Link Between Variables? When executing a link between variables at run time. The target variable does not contain  a copy of the source variable value. the  Integration Server copies by reference. In this example.8 Mapping Data in a Flow Service Tip! To scroll through the Pipeline In and Pipeline Out trees independently. when  you link a source String variable to a target String variable. Click   to hide the  left‐hand scroll bar. The left‐hand scroll bar is only available on the Pipeline tab for a  MAP step. This is because the value of  the source variable is the value of the target variable.  196 webMethods Developer User’s Guide Version 7.”  „ Creates a reference to the source variable and uses the reference as the value of the  target variable. This is called “copying by value. Click   to display the left‐hand scroll bar. Integration Server copies  the value of the source String to the target String. you would be changing the value of the target  variable as well.  When a value is copied by reference.1 . Copying by reference significantly reduces the memory and time required  for executing a link at run time. in a later flow step.) When executing links between all other types of variables. When you expand a transformer. any changes you make to the value of the source  variable in subsequent flow steps affect the target variable. Developer hides the left‐hand scroll bar  automatically. you used the Set Value modifier  to assign a value to the source variable. Integration Server creates a reference to the source document value  and uses the reference as the value of the target document. display the  left‐hand scroll bar.) The following images show a series of MAP steps in a flow service. This is called “copying by  reference. Integration Server does one of the  following: „ Copies the value from the source variable to the target variable. the  value of the source variable is changed after the link to the target variable executes.”  Integration Server copies by value when the source or target variable is a String. For example. This  action changes the value of the target variable as well. For example.

Step 3: The value of String1 is changed to “modified” after the link executes The value of String1 is changed to “modified”. webMethods Developer User’s Guide Version 7. This action changes the value of the string in Document2 as well. the value of Document2 is a reference to the contents of Document1.8 Mapping Data in a Flow Service Step 1: The value of String1 is set to “original value” The value of String1 is set to “original value”.1.1 197 . Step 2: Document1 is linked to Document2 Document1 is linked to Document2. After the link executes.

 the value of the String1 in Document1 was set to “modified. its children cannot be the  targets of Link modifiers.  „ After the child variable of a document or document list is the target of a Link modifier.  the parent document or document list cannot be a target of a Link modifier. it returns the following results. but does not increase the memory and time required to execute the  service.  the value of Document1 was copied to Document2 by reference.  „ Create a service that performs a copy by value.1. this might be the best  approach if the target document variable needs only a few values from the source  document variable. In Step 3. However. (In the case of document variables. „ After you link the source variable to a target variable. To prevent the value of the target variable from being overwritten by changes to the value  of the source value in subsequent steps in the flow service. Only the target variable will have the reference to the data.  198 webMethods Developer User’s Guide Version 7. the  value of String1 in Document2 changed also. This method can be time consuming and might significantly increase the  memory and time required to run the service. you can link a source variable to  the document variable or to the children of the document variable.1 .) In situations where you link one  document variable to another.8 Mapping Data in a Flow Service When this flow service executes. link each child of the document variable  individually. Linking to Document and Document List Variables When working with document variables in the pipeline. After a  document or document list is the target of a Link modifier. Insert this service (as an INVOKE step  or as a transformer) and link the variables to the service instead of linking them to  each other. Changes to the value of  Document1 in later flow steps also change the value of Document2. Keep the following  points in mind when linking to document or document list variables: „ A document (or a document list) and its children cannot both be targets. This is because in Step 2 of the flow service. using a “cloning” service would require less time than  linking the contents of a document variable field by field. This  method ensures that the value of the target variable will not be overwritten in a  subsequent step. use the Drop modifier to drop  the source variable. you could create a Java service that  clones the IData object underlying the document.  Results of flow service The String1 in Document1 and the String1 in Document2 have the same value because Document1 was copied to Document2 by reference. you can do one of the  following: „ When working with document variables.” However.

) By linking different data types to one another.)  „ Object and Object list variables constrained with an assigned Java class should be  linked only to other Object and Object list variables of the same Java class or to Object  and Object list variables of unknown type. the  Integration Server does not execute the link. If you link variables of different data types. but compatible. For example. see “Default  Pipeline Rules for Linking to and from Array Variables” on page 409. such as String. You cannot link a document (IData  object) to a String. such as String list. For  example. document list. the primitive type for a String list or a String table would be  String.  For more information about the default behavior for linking array variables. the server automatically performs the structural transformation  necessary to link the data in AccountNumber to Accounts. For  example. Developer will not  allow you to connect them with the Link modifier. (In this case. you  can link the second element in a String list to a String. you can link different. For more information about specifying Java classes for Objects. the run‐time result is  undefined. document.8 Mapping Data in a Flow Service „ If you link from a document variable to another document variable. the transformation  will result in a single‐element String list. Array variables are those that hold  multiple values. keep the following points in mind: „ Not all data types can be linked to one another.1. „ When you link between scalar and array variables. Although Developer permits a link  between constrained Objects with different Java classes.  you can perform structural transformations. Developer uses the  default behavior to determine the value of the target variable. Two exceptions to this rule are: any variable can be linked to an Object or an  Object list variable. and an Object can be linked to any data type. At run time. you can link a String to the second element of a String list. see “Java  Classes for Objects” on page 407.  „ When you link between scalar and array variables and you do not specify which  element in the array variable that you want to link to or from. you could link a String value called AccountNumber to a String list called  Accounts. „ You can only link a variable to another variable of the same primitive type. and Object list. Alternatively.  Linking Variables of Different Data Types On the Pipeline tab. the structure of  the source document variable overwrites the structure of the target document  variable. (If there is a type  mismatch between the Object or Object list and the other variable at run time. The  primitive type refers to the data type of the variable when all dimensionality is  removed. webMethods Developer User’s Guide Version 7. and Object.1 199 . data types to one another. String table. If two data types are incompatible. Scalar variables are those that hold a  single value. for instance. you can specify which element of  the array variable you want to link to or from.

Converting a String list to a document list Two String lists can be combined into one document list through data mapping in the  pipeline. For example. To convert the String list to a document  list. you could  combine the two String lists by linking aList to aString and bList to bString. The variable  documentList is the document list to which you want to copy the values contained in the  String list.1. documentList has a String child aString. In the following  diagram. For example. if in the above scenario you also had a String list variable named  bList. Converting two String lists to a document list 200 webMethods Developer User’s Guide Version 7. The following section  explains a common structural transformation that you can complete via linking in the  pipeline. aList is the String list you want to convert to a document list. you can  combine two String lists into one document list through linking. Converting a String List to a Document List You can convert a String list to a document list using the Pipeline tab.1 . link aList to aString.8 Mapping Data in a Flow Service Examples of Structural Transformations on the Pipeline Tab The structural transformations you can perform by linking variables on the Pipeline tab  can be more complex than transforming a String to a String list. and documentList had two String children named aString and bString.

 suppose that a buyer’s address information is initially stored in a String list. You can insert the service as an  INVOKE step or as a transformer.  However. String table. you can link the value of the element in the third column of the  second row of a String table to a String. For example.  „ For String tables.  see the webMethods Integration Server Built‐In Services Reference.1 201 . „ For a variable in a document list. you can specify which element in the array you want to link to or from. „ For String lists and Object lists. you can specify the index of the document that  contains the value that you want to link to or from. the elements in buyerAddress String list are mapped to the address  document.  To map the information in the String list to a document. the information might be easier to work with if it were stored in a document. After  you link the variables. you can specify the row and column indexes for the cells you want  to link. you can specify the index for the list element you want  to link. you can link the third element in a String list to a String. For example.8 Mapping Data in a Flow Service Tip! You can also convert a String list to a document list (IData[ ] object) by invoking  the built‐in service pub. or  Object list). see  “What Are Transformers?” on page 212. you specify the index that represents the position of the element in  the array. For example. For example.  „ For document lists. specify an index value for each link. document list.  For example. you can specify the index for the document that you want to link. In the  following pipeline. For more information about transformers.  webMethods Developer User’s Guide Version 7.1. if the document list  POItems contains the String ItemNumber. Then.list:stringListToDocumentList. you can link the second document in a document list to a document  variable. you can link the ItemNumber value from the  second POItems document to a String variable. Linking to and from Array Variables When you link to or from an array variable (String list. create a link between the String  list and each field in the document. For more information about built‐in services.

 Developer displays a text box next to the  variable (in this case. type 0 in the field next to buyerAddress. For example.1 .  Developer displays the words “Field not indexable” next to the variable name (in this  case. If the source or target variable is an array. FirstName). 202 webMethods Developer User’s Guide Version 7. click the Indices property’s Edit  button in the Properties panel to specify the index. select the link between the variables.1. If the source or target variable is not an array. if you want to link the first element of the buyerAddress  variable to the FirstName field in address.8 Mapping Data in a Flow Service You can specify an index value when linking to or from an array variable You can specify the index for the element in buyerAddress that you want to link to each field in address. buyerAddress). Note: Developer uses blue links on the Pipeline tab to indicate that properties  (conditions or index values for arrays) have been applied to the link between  variables.)  Link indices Indicates the index of the element in the buyerAddress String list that you want to copy to the FirstName field. (Index  numbering in arrays begins at 0. Indicates the target variable is not an array. To specify the index for the element in the buyerAddress variable to be copied to the  FirstName field.

  „ To dynamically specify the index.1. that is. „ When you link a document or document list variable to another document or  document list variable. „ If the source and target variables are arrays. you can set the index to the value of a pipeline  variable. see “Linking to Document and Document  List Variables” on page 198. For example. if the pipeline contains  the variable itemNumber that will contain the index you want to use at run time. that is. At run time. For the link to execute successfully at run time. To use a pipeline variable. For example.  specify %itemNumber% for the index. keep the following points in mind: „ To link to or from an element in an array variable. „ If you do not specify an array index for an element when linking to or from arrays.  suppose that a String list has length 3.8 Mapping Data in a Flow Service Guidelines for Linking to and from Array Variables When you are linking to or from an array variable. you can specify an index for each  variable. you can link the third element in a source String list to the fifth  element in target String list. and so on). For more information. you need to know the index for the  element’s position in the array. if a source String  list variable contains three elements. you can link each of the three elements to a  target variable. the structure of the source variable determines the structure of  the target variable.1 203 . you can link to the fifth position in the String list. You can link to the String list and specify an  index of 4. For information about the default  behavior of the Pipeline tab. the second element has an index of 1.  the value of the variable must be a non‐negative integer.  webMethods Developer User’s Guide Version 7. Developer  increases the length of the array to include the specified array index. The following procedure explains how to link to or from an array variable. For example. Array index numbering begins at 0 (the first element  in the array has an index of 0. each  element in the array can be the start or end of a link. see “Default Pipeline Rules for Linking to and from Array  Variables” on page 409. specify  the variable name enclosed in percent signs (%). „ Each element in an array can be the source or target of a Link modifier. For example. The variable you specify must be a String. the  Integration Server increases the length of the String list from 3 to 5.  „ If you are linking to or from a String table.  the default behavior of the Pipeline tab will be used.  „ If you link to an array variable and specify an index that does not exist. you need to specify an index value for the  row and column.

  On the Edit menu. Tip! You can also delete a link by selecting it and then clicking  toolbar or pressing the DELETE key. next to the destination  variable name.  To delete a link between variables 1 2 On the Pipeline tab. next to the source variable  name. For  example. click Delete. Click OK. Note: At run time. under Source.     If the source variable is an array variable. the link (copy) fails if the source array index contains a null value or  if you specify an invalid source or target index (such as a letter or non‐numeric  character).1. click the Indices property’s Edit button. The Integration Server generates journal log messages (at debug level 6 or  higher) when links to or from array variables fail. Developer also deletes any properties  you applied to the link. or compare a variable to another variable. type the index to which you want to link the source value.  on the Pipeline tab  Applying Conditions to Links Between Variables You can place conditions on the links you draw between variables.8 Mapping Data in a Flow Service To create a link to or from an array variable 1 2 3 4 5 6 Create a link between the variables using the procedure described in “To create a link  between variables” on page 195. in the following service. Developer displays  the Link Indices dialog box. check for the value of a variable. An expression can check for the existence of a variable in the  pipeline.1 . type the index that contains the value you want to link. If the target variable is an array variable.  A condition consists of one or more expressions that you write using the syntax that  Developer provides.  Deleting Links Between Variables Use the following procedure to delete the link created between variables. When you  delete the link. On the Properties panel. you might want to link the BuyersTotal variable in  Pipeline In to the OrderTotal variable in Service In only if the BuyersTotal has a value that is  204 webMethods Developer User’s Guide Version 7. under Destination. the variables are no longer linked. Click the link that connects the variables. select the link that you want to delete. At run time.  webMethods Integration Server evaluates the condition and executes the link (copies the  value) only if the condition evaluates to true.

 webMethods Integration Server executes all conditional links whose  conditions evaluate to true.  the final value of the target variable may vary.1. you would edit the  properties and add the condition that needs to be true. webMethods Developer User’s Guide Version 7. see “The BRANCH Step” on  page 160. Note: You cannot add conditions to the links between implicitly linked variables.1 205 . only one of the conditions you apply to the links can be true at  run time. at most.  Tip! If the conditions for links to the same target variable are not mutually exclusive. you can link more than one source  variable to the same target variable.  child steps are evaluated in a top to bottom sequence. A blue link indicates that a condition is applied to the link connecting the variables Use the Properties panel to view or create a condition for the link. Developer uses a blue link on the Pipeline tab to indicate that properties (that is. After you connect the two variables with the Link modifier.  conditions or index values for arrays) have been applied to a link between variables. the value of the target variable will be the result of whichever link  executes last. In BRANCH steps.8 Mapping Data in a Flow Service not null.  Linking Multiple Source Variables to a Target Variable By applying conditions to the links between variables.  consider using a flow service containing a BRANCH step instead.  For more information about the BRANCH step. Because the order in which links are executed at run time is not guaranteed. The conditions must be mutually exclusive. If more than one conditional link to the same target variable  evaluates to true. webMethods Integration Server  executes the first child step that evaluates to true and skips the remaining child steps.  At run time. When you draw more than one link to the same  target variable.

 You can also use it  to assign a default value to a variable.1.   For information about the syntax used in conditions.1 . 206 webMethods Developer User’s Guide Version 7. On the Properties panel. you instruct the server to write a  specific value to that variable at run time. see “Disabling a Condition Placed on a Link Between Variables” on  page 294. Note: You can temporarily disable the condition placed on a link. “Conditional  Expressions”. set the Evaluate copy condition property to True. Click the link (black line) that connects the variables. type the condition you want to place on the  link.8 Mapping Data in a Flow Service To apply a condition to the link between variables 1 2 3 4 Create a link between the variables using the procedure described in “To create a link  between variables” on page 195. Assigning Values to Pipeline Variables The Set Value   modifier allows you to assign values to variables in Service In or Pipeline Out. see Appendix D. Important! When drawing more than one link to the same target variable.  In the Copy condition property text box. This action occurs just before the selected  service is executed (if you attach the modifier to a variable in Service In) or immediately  after the selected service is executed (if you attach the modifier to a variable in Pipeline Out). For more  information. You use it to explicitly “hard code” a specific value in a variable. make sure  that the conditions assigned to each link are mutually exclusive. By attaching a Set Value   modifier to a variable.

Initializing Variables in a Flow Service You can use the Set Value modifier with the MAP step to hard code an initial set of input  values in a flow service. disable the Overwrite pipeline value check box in the Input For dialog  box. and then use the Set Value modifier to assign values to the appropriate variables in  Pipeline Out. webMethods Developer User’s Guide Version 7. To use the Set Value  modifier in this way. Note: If a variable to which you assigned a default value is implicitly linked to another  variable in the pipeline. Assigning a Default Value to a Variable One common use of the Set Value modifier is to specify a default value for a variable (that  is.  Input For dialog box Specify the value that you want the server to assign to this variable at run time. This instructs the server to use the specified value only when the selected variable is  null.1 207 . Developer displays a gray link on the Pipeline tab connecting  the variables beneath the   icon.1. insert the MAP at the beginning of your  flow. a value that is only assigned if the variable is null at run time). To view (or change) the value that is assigned to the Set Value modifier.8 Mapping Data in a Flow Service Hardcoding the value of a variable You use the Set Value modifier to assign a value to a variable. double‐click the   icon next to the variable’s name to open the Input For dialog box. To use it in this way.

. Developer  displays a message identifying the variable and the expected type. the Set Value modifier lets you assign  the value of another String variable to a String variable. You can also format String values by specifying one or more pipeline variables in  conjunction with a literal value. For example.. you  cannot use the Set Value modifier to assign a value to the variable.and the select the variable-substitution option.) To specify a variable name with the Set Value modifier.8 Mapping Data in a Flow Service Referencing Other Variables In addition to assigning a literal value to a variable. „ If the Service In or Pipeline Out variable is already the target for a Link modifier.  208 webMethods Developer User’s Guide Version 7. This option  instructs the server to interpret your value as a variable reference rather than a literal  value. If the value is not of the type specified by the object constraint. If you specified  %firstName% %initial%.  „ You cannot set values for unconstrained Objects (Objects of unknown type) or for  Objects constrained as a byte [ ]. if you specified (%areaCode%) %Phone%.1. Developer automatically validates the  values. Referencing variables Enclose the variable name in % symbols.. %lastName% .  Setting a Value for a Pipeline Variable Keep the following points in mind when assigning a value to a pipeline variable: „ You can only assign values to variables that are in Service In or Pipeline Out.. the period and spacing would be included in the  value.. „ When you set values for constrained Objects. „ You can mix literal values and pipeline variables when assigning values to String  variables. the  resulting string would be formatted to include the parentheses and space.1 . enclose the name of that variable  between % symbols and then enable the Perform variable substitution option. (You might do this if you wanted  to derive the default value from a variable in the pipeline at run time. for example. „ You cannot assign a value to a recursive IS document type (a document type that  contains a document reference to itself).

 you can only copy the set value assigned to a String variable to another  String variable. webMethods Developer User’s Guide Version 7. In the Input For dialog box. you  can copy the set value of a String list variable with length 3 to another String list  variable only if the target String list also has length 3 or has an undefined length (no  defined structure). When you copy set values from one pipeline variable to  another. „ You can only copy and paste set values between variables if the target variable has the  same structure as the source variable or has no defined structure. the server will always apply the specified value. Select the variable to which you want to assign a value. For  example. and Zip as  children. (If you select this check  box. State. type the  name of that variable enclosed in % symbols (for example. keep the following points in mind: „ You can only copy and paste set values between variables of the same data type. %Phone%).1. clear the Overwrite pipeline value check box. If you want to derive the value from a String variable in the pipeline. and Zip as children. Click the Pipeline tab.) Copying Set Values Between Variables You can copy the set value assigned to a variable to other variables of the same data type  in Service In or Pipeline Out. „ If you want to assign a literal value to the variable. if the source  document variable contains three String variables named City. the target document variable must have three String variables named City. select the INVOKE or MAP step containing the variable you want to  alter. „ 6 If you want the server to use the specified value only if the variable does not contain a  value at run time. the source document  variable and the target document variable must have the same structure or the target  document variable must have no structure defined. „ If you are copying a set value between document variables. specify the value you want to assign to this variable. For example.  State. For example. type that value. Then select  the Perform variable substitution check box. Click   on the toolbar. The value must  be of the same data type as the variable.8 Mapping Data in a Flow Service To assign a value to a variable in the pipeline 1 2 3 4 5 In the editor.1 209 .

  Important! Once you drop a variable from the pipeline.  right‐click and select Paste. the server executes the Link modifier before it  drops the variable. 210 webMethods Developer User’s Guide Version 7. Dropping unneeded variables reduces the size of the pipeline at run  time and reduces the length and complexity of the Pipeline In and Pipeline Out displays (this  can make the Pipeline tab much easier to use when you are working with a complex flow). The server does not link a null value to the destination variable. Note: You can only paste the set value if the target variable is the same data type as the  source variable and if the target variable has either an identical structure to the source  variable or has no defined structure. At run time.  Note: You can only copy and paste values for variables that are in Service In or Pipeline Out. Select the variable or variables to which you want to assign the copied value.1 .8 Mapping Data in a Flow Service To copy a set value 1 2 3 4 5 In the editor.1. the server removes a dropped variable from the pipeline just before it  executes the selected service (if you attach the Drop modifier to a variable in Pipeline In) or  immediately after it executes the selected service (if you attach the Drop modifier to a  variable in Pipeline Out). You can use it to eliminate pipeline variables that are not used by subsequent  services in a flow. select the INVOKE or MAP step containing the variable with the value  you want to copy and paste. If you drop a linked variable from Pipeline In. Do not use the Drop modifier unless you are sure the  variable is not used by services invoked after the point where you drop it. it is no longer available to  subsequent services in the flow. Select the   you want to copy. Click the Pipeline tab. Dropping Variables from the Pipeline The Drop   pipeline modifier allows you to remove a variable from Pipeline In or Pipeline Out. Right‐click and select Copy.

 The  variable will not appear on the Pipeline tab if it is not an input or output parameter.8 Mapping Data in a Flow Service To drop a variable from the pipeline 1 2 3 4 In the editor. you can delete the variable if it  does exist in the pipeline. You can use it to  add variables that were omitted from a service’s input or output parameters or create  temporary variables for use within the flow. Important! If you create a new variable in a flow. (For example.1. select the INVOKE or MAP step whose pipeline variables you want to  drop. you  can only drop variables from Pipeline In. you must immediately do one of the  following: –  Link a variable to it –  Assign a value to it –  Drop it If you do not take one of these steps. you might attach a variable to  each of the children in a BRANCH step to mark the path taken by the service at run time. By  adding and then immediately dropping the variable. Select the variable that you want to drop.) Variables that you create using the Pipeline tab can be used just like any declared variable  in the flow. Adding Variables with the Pipeline Tab You can use the Pipeline tab to add variables that were not declared as input or output  parameters for the flow service itself or any of its constituent services. Click   on the toolbar. Click the Pipeline tab. webMethods Developer User’s Guide Version 7. Note: You can only drop variables from Pipeline In and Pipeline Out. Note: You might want to drop a variable immediately after adding it if a service  produces a variable that is not declared in the service input or output parameters. In a MAP step. Developer automatically clears it from the  Pipeline tab.1 211 .

  4 5 6 Click   and select the type of variable that you want to create. Drop. This includes any Java. Select the point where you want to add the new variable.  If the variable is a document or a document list.  Service Out.  212 webMethods Developer User’s Guide Version 7. Then use   to indent each member variable beneath the  document or document list variable.getCurrentDateString and the pub.) Working with Transformers By linking variables to each other on the Pipeline tab. such as the pub. However. Note: In an INVOKE step. or Pipeline Out. (If  you do not assign a modifier to the variable. you must invoke a service).concat  services. you can add a new variable to Pipeline In. You can only insert a transformer into a MAP step. Note: Services that you insert using the INVOKE step might also perform value  transformations. Type the name of the variable and press ENTER. you can only add new variables in  Pipeline Out. Service In.8 Mapping Data in a Flow Service To add a variable to the pipeline 1 2 3 In the editor. Developer considers it extraneous to the  flow and automatically clears the variable when it refreshes the Pipeline tab.1. select the INVOKE or MAP step that represents the stage of the pipeline  at which you want to add a new variable. or Set Value). only transformers can accomplish multiple value  transformations in a single flow step. Click the Pipeline tab. However.  What Are Transformers? Transformers are the services you use to accomplish value transformations on the Pipeline  tab. In a MAP step. By using transformers. 7 Assign one of the pipeline modifiers to the new variable (Link.  Developer provides two ways for you to invoke services: You can insert INVOKE steps or  you can insert transformers onto the Pipeline tab. you can invoke multiple services (and perform multiple  value transformations) in a single flow step. C or flow service that you create and any built‐in  services in WmPublic.string. to perform value  transformations you must execute some code or logic (that is. you can accomplish name  transformations and structural transformations.date.1 . You can use any service as a  transformer. repeat steps 4 and 5 to define its  member variables.

Transformers are well suited for use when mapping data from one document format to  another.  Tip! You can create a flow service that uses transformers to convert data between  document formats (such as an IDOC to an XML document or RosettaNet PIP to a  proprietary format). In  this way. webMethods Developer User’s Guide Version 7. Because transformers are  contained within a MAP step. you need to create links between  pipeline variables and the transformer. MAP step with transformers Note: In a MAP step. the flow service in  which you map data between formats could potentially consist of a single MAP step in  where transformers and links between variables handle all of the data transformations. You could then invoke this service in other flow services each  time you need to convert between the specific document formats before you begin  processing data. You can also set properties for the transformer  and validate the input and/or output of the transformer. Developer does not display any implicit linking for a MAP step. and value transformations. you usually need to perform several  name.1. And  like INVOKE steps. By using transformers.1 213 . when you insert a transformer. Developer only displays the links between pipeline variables and  transformers. When you map data between formats. you could see your entire document‐to‐document mapping in a single view. structure.8 Mapping Data in a Flow Service You can think of transformers as a series of INVOKE steps embedded in a MAP step. they do not appear as a separate flow step in the editor.

 including flow services. These services can be found in the following folders in the  WmPublic package: This folder… pub. keep the following points in mind: „ Transformers can only be inserted in a MAP step.string Contains services to… Transform time and date information from one format to another. concat. „ Transformers in a MAP step are independent of each other and do not execute in a  specific order. pad. subtract.1. Inserting a Transformer into a MAP Step When you insert a transformer.8 Mapping Data in a Flow Service Using Built-in Services as Transformers Any service in the Navigation panel can be used as a transformer. C services.  „ The transformers you insert into a MAP step operate on the same set of pipeline data.list pub. Transform documents to and from document lists and XML values. „ The output of one transformer cannot be used as the input of another transformer in  the same MAP step. Click the Transformers area on the Pipeline tab. assume that webMethods Integration  Server concurrently executes the transformers at run time.document pub.1 . Perform simple arithmetic calculations (add. select Browse to select the  214 webMethods Developer User’s Guide Version 7. Click   on the Pipeline tab toolbar and then select the service you want to invoke. replace through a lookup table). When inserting transformers. select the MAP step in which you want to insert a transformer.math pub.  substring. Transform string values in various ways (for example. For more information about built‐in services. see the webMethods Integration Server Built‐ In Services Reference.  Transform a String list to a document list (IData[ ] object) and  append items to a document list (IData[ ] object) or a String list. webMethods  Integration Server provides several built‐in services specifically designed to translate  values between formats.date pub. and  Java services. you are essentially inserting an INVOKE step into a MAP  step.  If the service you want to insert does not appear in the list. To insert a transformer 1 2 3 In the editor. and  divide) on integers and decimals contained in string variables. „ Any service can be used as a transformer. When inserting transformers. multiply.

 see “Debugging Transformers” on  page 222. no implicit linking occurs.  Whether or not you want to validate the input to the  transformer against the signature of the service. see “Validating  Input and Output for Transformers” on page 218. Select False if you do not  want to validate the input of the transformer. For information about validating transformers. If you want to change the service that is  invoked by a transformer. You might find it easier to link transformer  variables when you are zoomed in on the transformer. Select True to  validate the output of the transformer. Even if the pipeline variables have the same name and data type as  the transformer variables. The fully qualified name of the service that will be invoked at  run time as a transformer. Select False if you do  not want to validate the output of the transformer..8 Mapping Data in a Flow Service service from the Navigation panel.. The transformer appears under Transformers on the  Pipeline tab. set its properties: For this property. specify the service’s fully qualified  name in the folderName:serviceName format or click   to select  a service from a list. you create links between the pipeline  variables and the transformer. webMethods Developer User’s Guide Version 7. 5 Click OK. see “Validating  Input and Output for Transformers” on page 218. 4 Select the transformer and. you  can see the Service In variables and the Service Out variables and all of the explicit links  between the transformer and the pipeline.1 215 .. Select True to  validate the input of the transformer. Tip! When you expand a transformer in the Transformers area of the Pipeline tab. Validate output    Whether or not you want to validate the output of the  transformer against the signature of the service. For information about validating transformers. You need to explicitly link  pipeline variables to the input and output variables of a transformer. When you insert a transformer. Keep the following points in mind when you create links  between pipeline and transformer variables: „ Developer does not implicitly link pipeline variables to the input or output variables  of a transformer..  Developer automatically assigns the name of that service to  the service property. Service   Specify. in the Properties panel.1. Validate input   Linking Variables to a Transformer When you map data to and from a transformer. For information about debugging transformers.

 you need to explicitly link the  output variable to a Pipeline Out variable. the output variable does not appear in the pipeline. select the transformer variable that you want to link to the  selected Pipeline Out variable.1 . select the transformer variable to which you want to link the  Pipeline In variable. 216 webMethods Developer User’s Guide Version 7. c Repeat steps a and b for each transformer input variable you want to link to a  pipeline variable.  Note: You can assign a value to a transformer input variable using the Set Value  modifier  . In the Link To list. If you want the  output of a transformer to appear in the pipeline. Repeat steps a and b for each output variable produced by the transformer.  „ If you do not link any output variables or the transformer does not have any declared  output variables. Developer  displays the phrase “has already been chosen” next to the transformer variable in  the Link To list. (The Pipeline tab displays the links  between the transformer and the highest positioned Pipeline In variable and Pipeline Out  variable to which the transformer is linked. 2 To create a link between a transformer output variable and a Pipeline Out variable. Once you link a transformer input variable to a Pipeline In variable. In the Link From list.8 Mapping Data in a Flow Service „ Output for a transformer is not automatically added to the pipeline. You can link a transformer output variable to more than one Pipeline Out variable. To provide the cleanest and simplest view when working with transformers.) To create a link between a pipeline variable and a transformer 1 To create a link between a Pipeline In variable and a transformer variable. by clicking  ComposeExpand.1. do the  following: a b In Pipeline In. „ The transformers you insert into a single MAP step act on the same set of pipeline  data. the Pipeline  tab only displays one link between the transformer and a Pipeline In variable and one link  between the transformer and a Pipeline Out variable.  To assign an input value to a transformer. If you do not link the output variable to a  Pipeline Out variable. the transformer service will not run. do  the following: a b c Select the transformer and drag your mouse to the variable in Pipeline Out to which  you want to link the transformer variable. first expand the  transformer by double‐clicking the transformer name. select the variable you want to use as input to the transformer and  drag your mouse to the transformer. or by clicking    next to the transformer.

  the transformer “jumps” or moves up or down in the Transformers column so that it is  directly across from the selected pipeline variable. If the  dimensionality of the target variable is greater than the dimensionality of the source  variable. Transformers and Array Variables When creating links between pipeline variables and transformers. you need to explicitly link the output variable to a variable in  Pipeline Out.  Transformers exhibit the following behavior or movement: „ When a transformer is selected and you select a variable in Pipeline In or Pipeline Out. it moves up and down in the  Transformers column.1. Developer  “anchors” or aligns the transformer next to the highest Pipeline Out variable it is linked  to. an exception will not be thrown.8 Mapping Data in a Flow Service Important! Developer does not automatically add the output of a transformer to the  pipeline. This movement or “jumping” is by design to help minimize the  distance between the transformer and the variable you are linking it to. „ When you finish linking a transformer and it is no longer selected. For example. click the transformer again or click in the empty  areas of the Pipeline tab.  What Is Dimensionality? Dimensionality refers to the number of arrays to which a variable belongs. if the dimension of the source  variable is greater than the dimension of the target variable. If you want the output of a transformer to appear in the pipeline after the  transformer executes. that of a single String list or document list is 1. However. Transformer Movement When you link to and from a selected transformer.  The Pipeline tab expands to fit in the Developer window. Important! If you do not link any output variables or the transformer does not have any  output variables. differences in  dimensionality for the source and target variables may cause an exception. webMethods Developer User’s Guide Version 7. an exception will occur.  and that of a single String table is 2. the transformer will not execute. A String that is a child of a document list has a  dimensionality of 1. To stop the transformer from jumping. A String list that is a child of a document list has a dimensionality  of 2. drag the movable border above the tab.  Note: To expand your view of the Pipeline tab.  the dimensionality of a single String is 0.1 217 .

 The variables on the input and output sides of the tab represent  the declared parameters for the service. you can validate the inputs and  outputs of the transformer service before and/or after it executes. You do not have to use validation for all of the transformers you insert into a  MAP step. it validates the  transformer against the input and output parameters of the invoked service. Then. you change the properties of the  transformer. (in  the same flow service) invoke the service you originally wanted to use as a  transformer. click  the variable and view its Constraints properties in the Properties panel. and make that INVOKE step a child of the LOOP. Finally. To view the constraints placed on a variable. To view the  input and output parameters of the invoked service. When the server validates a transformer’s inputs and outputs at run time. changing the service to accept arrays as data results in faster  execution of flow services. open the service and then click the  service’s Input/Output tab. insert the  resulting flow service as a transformer in the MAP. unitPrice cannot be linked to num1 because of dimensionality differences Solution To solve this. To indicate that you  want to validate a transformer’s inputs and outputs.   218 webMethods Developer User’s Guide Version 7.8 Mapping Data in a Flow Service Example In the following example.1 .  Of the two options. or  „ Create a flow service in which a LOOP step loops over the array variable. you can either: „ Change the service invoked by the transformer to accept arrays as data. Validating Input and Output for Transformers As with any service you insert using an INVOKE.1. the unitPrice variable cannot be linked to num1 because the  unitPrice variable has a dimensionality of 1 ( string (0) + document list (1) = 1) and num1  has a dimension of 0.

webMethods Developer User’s Guide Version 7. select the transformer for which you want to validate input or  output. Click the Pipeline tab.1 219 .   On the Properties panel. select the MAP step containing the transformer service you want to  copy. Right‐click the  transformer and then select Copy. If you set up validation via the properties for a  transformer when it is already set up for validation via the service’s Properties panel. Important! Copying a transformer does not copy the links between transformer  variables and pipeline variables or any values you might have assigned to  transformer variables using the Set Value modifier. Under Transformers. To validate the input and output of a transformer 1 2 3 4 In the editor. To copy a transformer 1 2 3 In the editor.  You can also copy transformers between MAP steps in the same flow or MAP steps in  different flow services. For the Validate output property. 5 6 Copying Transformers You may want to use the same transformer more than once in a MAP step. select True if you want to validate the output of the  transformer against the output parameters of the invoked service. Click the Pipeline tab.  you might want to convert all the dates in a purchase order to the same format. select the MAP step containing the transformer you want to validate. For example. This can slow down the execution of a  transformer and. for the Validate input property. the input and/or output for the service will automatically be validated every  time the service is executed. Click OK. Instead of  using the   button to locate and select the service.  then you are performing validation twice.8 Mapping Data in a Flow Service Note: If the Validate input and/or Validate output properties of the invoked service are set  to True. Under Transformers. you can copy and paste the  transformer service. select True if you want to  validate the input to the transformer against the input parameters of the invoked  service. select the transformer service you want to copy. the flow service.1. ultimately.

 you can see the Service In and the Service Out variables  for the transformer and all of the links between the pipeline and the transformer  variables. Right‐click and select  Paste. Link the input and output variables of the transformer using the procedures  described in “Linking Variables to a Transformer” on page 215. you can only link variables or set properties for the expanded transformer.  Pipeline tab with an expanded transformer When you expand a transformer. for  example.1 . click ComposeCollapse.1. you can use the Set Value modifier to assign a value  to a variable in Service In. Expanding Transformers You might find it easier to create links to transformers when you expand the transformer. „ To collapse the contents of a transformer. Tip! You can also expand/collapse a transformer by double‐clicking it.  Other transformers and links to other transformers remain hidden until you collapse the  transformer. click anywhere under Transformers. you can only perform actions for that transformer. click ComposeExpand.8 Mapping Data in a Flow Service 4 5 To paste the transformer.  When you expand a transformer. 220 webMethods Developer User’s Guide Version 7. Note: If you expand a transformer. To expand and collapse the contents of a transformer „ To expand the contents of a transformer.

 moved.1. on the Pipeline tab. or click   to  select a service from a list. delete the old name and type in the  service’s new fully qualified name in the folderName:serviceName format. select the MAP step containing the transformer.1 221 . or delete a service. then the service invoked by the transformer has been renamed.  webMethods Developer User’s Guide Version 7. or deleted. rename. You must use the transformer properties to rename the transformer. or  renamed service. In the editor. you may want to delete the  transformer.  Renaming Transformers If Integration Server displays the message “Transformer not found” when you try to  expand a transformer or when you point the mouse to the transformer. Then. see  “Specifying Dependency Checking Safeguards” on page 43. To rename a transformer 1 2 3 4 Use the Navigation panel to determine the new name or location of the service called  by the transformer.  or deleted.  If the service referenced by the transformer has been deleted. moved.  See the following section for more information.  select the transformer you want to rename. You need to change  the Service property of the transformer so that the transformer points to the moved.8 Mapping Data in a Flow Service Note: If Integration Server displays a message stating that the transformer cannot  be found. For more information.  Tip! You can enable safeguards so that you do not inadvertently affect or break other  services when you move. Open the flow service containing the transformer you want to rename. then the service  referenced by the transformer has been renamed. In the Service property on the Properties panel.

 see  “Setting Breakpoints” on page 288. 222 webMethods Developer User’s Guide Version 7.1. see “Using the Step Tools  with a MAP Step” on page 288.  „ Disable a transformer so that it does not execute at run time. For more  information about stepping into and out of a MAP step.1 . For more information  about disabling transformers. For more information about setting breakpoints. you can use the following testing and  debugging techniques with transformers:  „ Step into a MAP step and step through the execution of each transformer.8 Mapping Data in a Flow Service Debugging Transformers When you test and debug a flow service. see “Disabling Transformers” on page 293.  „ Set a breakpoint on a transformer so that service execution stops when the  transformer is encountered.

. . . . . . . . and Specifications 224 233 248 „ Creating an IS Schema . . . . . . . . . . . . „ Creating an IS Document Type . . . . . . . . . . . . . . . „ Creating a Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9 Creating IS Schemas. . . . . . . . . . . . . . . . . . . . . IS Document Types. . . . . . . . . . . . . . . . . . . . . . . . . . . .1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . webMethods Developer User’s Guide Version 7.1 223 . . . . . . .

The  validation engine considers the instance document to be valid when it complies with the  structural and content constraints described in the IS schema. If you create an IS schema from a DTD.  224 webMethods Developer User’s Guide Version 7. a DTD (Document Type Definition). The IS schema  provides a formal description of the structure and content for a valid instance document  (the XML document). see Chapter 10. or  an XML document that references an existing DTD. the validation engine in webMethods Integration Server  compares the elements and attributes in the instance document with the structural and  content constraints described for those elements and attributes in the IS schema. For more information  about data validation. the resulting IS schema displays type definitions. When you select an IS schema in the Navigation panel. The formal description is created through the specification of  constraints. the resulting IS schema  displays element type declarations. the editor  identifies the target namespace for the IS schema. attributes. if you create an IS schema from an  XML Schema. IS Document Types. For example.1 . For example.  and attribute declarations.  „ Content constraints in an IS schema describe the type of information that elements and  attributes can contain in a valid instance document. <quantity>. “Performing Data Validation”. and Specifications Creating an IS Schema An IS schema is a “free‐standing” element   in the Navigation panel that acts as the  blueprint or model against which you validate an XML document.  During data validation. You can create IS schemas from an XML Schema.  <size>.9 Creating IS Schemas. An IS schema can contain the following types of constraints:    „ Structural constraints in an IS schema describe the elements.  What Does an IS Schema Look Like? The appearance and content of an IS schema depends on whether you generate an IS  schema from an XML Schema or a DTD. For example. and <unitPrice> elements in that order. element declarations. an IS schema for a purchase order  might specify that a valid <lineItem> element must consist of the <itemNumber>. <color>. see “Creating an IS Schema” on page 229. and types that  appear in a valid instance document. The schema editor is divided into two areas: the schema  browser on the left and the schema details area on the right. Above these areas. the <quantity>  element might be required to contain a value that is a positive integer. For information about creating IS  schemas. Developer displays the contents  of the IS schema in the editor.1.

Note: A DTD does contain attribute declarations. For example. .. The schema browser uses unique symbols to represent the components of the IS schema.. see the  webMethods Integration Server Schema Reference.1. the corresponding  heading is absent. The following  table identifies the symbol for each component that can appear in an IS schema. and COMPLEX TYPES.. This is  because an attribute declaration in a DTD associates the attribute with an element  type.  Each of these symbols relates to a component of an XML Schema or a DTD. the schema browser does  not display the ATTRIBUTES heading for IS schemas generated from DTDs. simple type definitions.9 Creating IS Schemas. For more information. Select a component in the schema browser. ATTRIBUTES..  If the source file does not contain one of these global components. IS Document Types. the ELEMENTS heading contains  all of the global element declarations from the XML Schema or the DTD.1 225 . attribute declarations. Accordingly. The schema browser groups the global  element declarations. the schema browser does not display  the ATTRIBUTES heading. However. Schema Browser The schema browser displays the components of an IS schema in a format that mirrors  the structure and content of the source file. and Specifications Schema editor Specifies the target namespace to which the schema belongs. For example. An IS schema created from a DTD never displays the SIMPLE  TYPES or COMPLEX TYPES headings because DTDs do not contain type definitions.to view and/or edit the component in the schema details area. and complex type  definitions from the source file under the top‐level headings ELEMENTS. if you create an IS schema from an XML Schema that  does not contain any global attribute declarations. webMethods Developer User’s Guide Version 7.  SIMPLE TYPES. the schema browser displays attributes as children of the element  type declaration to which they are assigned.

 global refers to elements.  Symbol Description Element declaration.1 . Attribute declaration. This symbol corresponds to the  ref="globalAttributeName" attribute in an attribute declaration. An element reference is a reference from an element  declaration in a content specification to a globally declared element.  Any attribute declaration. and Specifications Note: In the following table. attribute references  do not appear in IS schemas generated from DTDs. Attribute reference. This symbol corresponds to an element declared to be of  type ANY. an <any> element declaration is a  wildcard declaration used as a placeholder for one or more undeclared  elements in an instance document. An element declaration associates an element name with  a type definition. Consequently.  In an IS schema generated from DTD. This symbol corresponds to the <anyAttribute> declaration in  an XML Schema. This symbol corresponds to the XML Schema  <attribute> declaration or the attribute in a DTD ATTLIST declaration. An attribute reference is a reference from a complex type  definition to a globally declared attribute.9 Creating IS Schemas. In XML Schema.  Element reference.  In a DTD. In an IS schema generated from an XML Schema. Any element declaration. this symbol appears next to an  element that is a child of another element. attributes. This symbol corresponds to the <element> declaration in  an XML Schema and the ELEMENT declaration in a DTD.  the schema browser uses ʹAnyʹ as the name of the attribute. and types declared or  defined as immediate children of the <schema> element in an XML Schema. The parent element has only  element content. All  element type declarations in a DTD are considered global declarations.  Because an <any> element declaration does not have a name. 226 webMethods Developer User’s Guide Version 7.  Because an <anyAttribute> declaration does not specify an attribute name.1. IS Document Types. An any attribute declaration is a wildcard  declaration used as a placeholder for undeclared attributes in an instance  document. An attribute declaration associates an attribute name  with a simple type definition. this symbol corresponds  to the ref="globalElementName" attribute in an <element> declaration. the schema  browser uses ʹAnyʹ as the name of the element.  DTDs do not have attribute references. an element declared to be of type ANY can contain any  well‐formed XML.

Sequence content model. This symbol corresponds to the  <simpleType> element in an XML Schema. simple  type definitions cannot carry attributes. webMethods Developer User’s Guide Version 7.  This symbol corresponds to the <choice> compositor in an XML Schema or  a choice list in a DTD element type declaration. and Specifications Symbol Description Simple type definition. Unlike complex type definitions. This  symbol corresponds to the <all> compositor in an XML Schema.1 227 . An element with empty content may still carry attributes. Complex type definition. (Elements of complex type can  contain child elements and carry attributes. Mixed content. an element has empty content when it is declared to be of type  EMPTY. or not at all. Elements that contain mixed content allow character data to  be interspersed with child elements. This symbol corresponds to the  mixed="true" attribute in an XML Schema complex type definition or a  DTD element list in which the first item is #PCDATA. In an XML Schema. An all content model specifies that child elements can  appear once. the  schema browser displays ʹAnonymousʹ as the name of the complex type  definition. If the simple type definition is unnamed (an anonymous type). Empty content. A simple type definition specifies the data type for a  text‐only element or an attribute.9 Creating IS Schemas.  In a DTD. and in any order in the instance document.) This symbol corresponds to  the <complexType> element in an XML Schema. This symbol corresponds to the  <sequence> compositor in an XML Schema or a sequence list in an element  type declaration in a DTD. the schema  browser displays ʹAnonymousʹ as the name of the simple type definition. an element has empty content when its  associated complex type definition does not contain any element  declarations. A complex type definition defines the structure and  content for elements of complex type.  If the complex type definition is unnamed (an anonymous type).  Choice content model.1.  All content model. A choice content model specifies that only one of the  child elements in the content model can appear in the instance document. IS Document Types. A sequence content model specifies that the child  elements in the instance document must appear in the same order in which  they are declared in the content model.

. When you select a simple type definition.. when you select a globally  declared element of complex type. ..1. IS Document Types. the schema details area displays fields for viewing/editing the simple type. the schema details area displays information about that element.. For example. the schema details area looks like the following...  Schema details area for a global element declaration of complex type If you select an element declaration. and Specifications Schema Details Area The schema details area displays information that you use to examine and edit the  selected component in the schema browser.1 . . 228 webMethods Developer User’s Guide Version 7.9 Creating IS Schemas. the schema details area looks like the following: Schema details area for a simple type definition If you select a simple type definition... The contents of the schema details area vary  depending on what component you select.

  numbers.openapplications..  For more information about restricted characters for packages. and  elements.w3c. next to Folder. Click Next. Create an IS schema based on an existing DTD referenced by an XML  document. and Specifications Creating an IS Schema In Developer.org). When this happens.org and  www. Important! If you specify a name that uses a reserved word or character.  Note: The actual work of creating an IS schema is performed by the schema processor.  The schema processor is the subsystem of the webMethods Integration Server that  compiles an IS schema from a source file. click New.. You can also find XML Schema definitions  and DTDs on the Web sites for these groups: (www.1. Note: You can find sample XML Schema definitions in the following directory:  Developer_directory\samples\xml\xsd. The resulting IS schema contains all of the  defined types. and then click Next. DTDs.1 229 . In the New Schema dialog box. XML DTD XML Schema To.  Important! You can create an IS schema from an XML document only if the XML  document references an existing DTD. 5 In the New Schema dialog box. To create an IS schema 1 2 3 4 On the File menu. Specify. select one of the following to specify the source for the  IS schema.. select Schema.. and XML  documents that reference an existing DTD.  use a different name or try adding a letter or number to the name to make it valid. Create an IS schema based on a DTD. you can create IS schemas from XML Schema definitions. type a name for the IS schema using any combination of letters. select the folder where you want to save  the IS schema. In the Name field. Create an IS schema based on an XML Schema definition. and the underscore character. declared elements.  webMethods Integration Server displays an error message. In the New dialog box. and declared attributes from the source file. webMethods Developer User’s Guide Version 7. folders. see “About Element Names” on page 41.9 Creating IS Schemas. IS Document Types.

 or root. When you generate an IS schema from an XML Schema that contains an  <import> element to import the contents of an external schema in a different  namespace. DTD. the schema processor creates one IS schema per namespace. Developer  validates the schema and does not create the IS schema if the XML Schema definition  is not valid. Note: When creating an IS schema from an XML Schema definition. if you create an IS  230 webMethods Developer User’s Guide Version 7.  if the source XML Schema imports two XML Schemas from the same namespace. The  schema processor assigns each imported schema the name that you specify and  appends an underscore and a number to each name. If the including. When you generate an IS schema from an XML Schema that uses <include> to  include the contents of an external schema in the same namespace. and declared attributes  from the source schema and the external schema.1.  In the Enter the URL or select a local file box. For more information. (The URL you  specify must begin with http: or https:. more reusable XML Schemas. IS Document Types. or  click   to navigate to and select the file. For example.9 Creating IS Schemas.) If you want to base the IS schema on an XML document. “Validation Errors and Exceptions”. and Specifications 6 7 Click Next. Developer generates the IS schema using the document you specified and  displays it in the editor. type the URL of the resource. When you generate  an IS schema from an XML Schema that references another schema. For example. the  schema processor creates an IS schema for the source XML Schema and then a second  IS schema that includes the components from the two imported XML schemas.  see Appendix G.  Note: You might receive errors or warnings when creating an IS schema from an XML  Schema definition or DTD. the schema processor  either includes all of the schema components in a single IS schema. the external schema assumes the target namespace of the root schema. do one of the following: „ If you want to base the IS schema on an XML document. „ Import. see “IS Schema Generation Errors and Warnings”  on page 470. The  following mechanisms can be used to reference an external schema:  „ Include. For more information about these errors and warnings. DTD. declared elements.  „ 8 Click Finish. or creates no IS schema at all.1 . type the path and file name. or XML Schema  definition that resides on your local file system. XML  Schema references an external schema that does not contain a target namespace  declaration. Creating IS Schemas from XML Schemas that Reference Other Schemas A schema author can insert the elements. and type definitions from another  schema into the schema they are creating. the resulting IS  schema contains all of the defined types. creates multiple IS  schemas. The behavior of the schema processor depends on  the mechanism the source XML Schema uses to reference the other schema. attributes. or XML Schema  definition that resides on the Internet. A schema author might do this to break up a  large XML Schema into several small.

 For example.xsd. and attribute groups from an external XML Schema in the  same namespace. (These simple types are  global simple types used to define the element or attribute they appear under. This simple type cannot be edited because it refers to a globally defined simple type. a pattern constraint. model groups. webMethods Developer User’s Guide Version 7. Schema authors can also use <redefine> to include and then redefine type  definitions.  Editing a Simple Type in an IS Schema You can modify a simple type definition in an IS schema without editing the source XML  Schema definition. This anonymous simple type can be edited. or changing the length  constraint. IS Document Types.9 Creating IS Schemas. This globally defined simple type can be edited. and Specifications schema named “mySchema” from mySchema. Editable simple type definitions in an IS schema The string simple type cannot be edited. you can modify a simple  type by adding an enumerated value. You edit a simple type by adding or changing the value of one or more  constraining facets applied to the simple type. Editing the simple type through Developer is an alternative to editing the  source XML Schema definition and regenerating the IS schema.) A named simple type that appears as a child of an  element or attribute in the schema browser cannot be edited.  You can edit any of the globally defined simple types (those that appear under the  SIMPLE TYPES heading) or anonymous simple types (those defined as part of an  element or attribute declaration.1 231 . „ Redefine.1. the schema processor generates an  IS schema named “mySchema_2” for the imported XML Schema.) The  following illustration identifies the simple type definitions that you can and cannot edit.

 click Save. specify the constraining facets that you want to apply to  the simple type. To edit a simple type definition 1 2 3 Open the IS schema that contains the simple type you want to edit. see “Constraining  Facets” on page 448. Tip! You can create a custom simple type to apply to a field as a content type  constraint. changes to the SKU simple type definition affect the partNum attribute.  „ Changes to a global simple type definition in an IS schema do not affect simple types  derived from the global simple type.  „ When you edit the constraining facets applied to a simple type definition. see “Setting Constraining Facet Values” on page 233.1. that is. see “Setting Constraining Facet Values” on  page 233. if the attribute partNum is defined to be  of type SKU.  The   symbol appears next to simple types. keep the following points in mind: „ Changes to a simple type definition affect the elements and attributes for which the  simple type is the defined type. If you regenerate the  IS schema from the XML Schema definition. attribute declarations. Consequently. The constraining facets  cannot become less restrictive.  In the schema browser area of the editor. your changes will be overwritten. On the File menu. For example. „ Changes to a simple type definition are saved in the IS schema. select the simple type that you want to edit. changes to a simple type also affect every field to which the  simple type is applied as a content constraint. element  declarations. 4 232 webMethods Developer User’s Guide Version 7. you need to edit the XML Schema and  then regenerate the IS schema. or the structure of the schema. For more information about setting values for  constraining facets. and Specifications When modifying a simple type definition.9 Creating IS Schemas. the changes are not propagated to the  derived types in the IS schema. you can  only make the constraining facet values more restrictive. IS Document Types. For more information about creating a custom simple type and  applying constraints to fields. „ Simple types in an IS schema can be used as content constraints for fields in pipeline  validation.  In the schema details area.1 . For more information about constraining facets. Tip! If you want to edit complex type definitions.

 because you can make a  change in one place (the IS document type) rather than everywhere the IS document  type is used. you can only make the  constraining facets more restrictive—the applied constraining facets cannot become less  restrictive. The  constraining facets displayed in the schema details area depend on the primitive type  from which the simple type was derived.  When you edit the constraining facets for a simple type definition. „ Using an IS document type to build document or document list fields can reduce the  effort needed to declare input or output parameters or the effort/time needed to build  other document fields. These constraint values  represent the cumulative facet values for the simple type. For example. pattern. because there is less opportunity to introduce a  typing error typing field names.  „ IS document types improve accuracy. the schema details area displays the enumeration. minLength.  maxLength. and Specifications Setting Constraining Facet Values You can edit any of the constraining facet values that appear in the schema details area  when you select an editable simple type definition in the schema browser. if the length value is applied to the simple type. Creating an IS Document Type An IS document type contains a set of fields used to define the structure and type of data  in a document (IData object).1 233 . For example. Base constraints are the  constraining facet values set in all the type definitions from which a simple type is  derived—from the primitive type to the immediate parent type. IS Document Types. webMethods Developer User’s Guide Version 7. „ IS document types make future changes easier to implement. if the simple type definition is  derived from string.9 Creating IS Schemas. and whiteSpace facets. length.  IS document types can provide the following benefits: „ Using an IS document type as the input or output signature for a service can reduce  the effort required to build a flow.1. The schema details area only displays  constraining facet values set in the simple type definition. It does not display  constraining facet values the simple type definition inherited from the simple types from  which it was derived. You can use an IS document type to specify input or output  parameters for a service or specification. You can also use an IS document type to build a  document or document list field and as the blueprint for pipeline validation and  document (IData object) validation. You can view the constraining facet values set in the type definitions from which a simple  type was derived by clicking the Base Constraints button. the maxLength or  minLength values cannot be set because the maxLength and minLength facets are less  restrictive than length.

 such as an XML Schema. you insert fields to define the contents and  structure of the IS document type. and/or the underscore character. or XML  document. any filters that include field names containing restricted  characters will be saved on the Integration Server only. To create an empty IS document type 1 2 3 On the File menu.  Creating an Empty IS Document Type When you create an empty IS document type. For more information. Click Next. numbers. select the folder in which you want to save the IS  document type. „ Create an IS document type from a Broker document type. see “About Element Names” on page 41. In the Name field.1.  see the Publish‐Subscribe Developer’s Guide. The structure and content of the IS document type will match that of the  source file. In the New Document Type dialog box. keep in mind that the  Broker has restrictions for field names.1 . The filters will not be saved on  the Broker. Type the name of the field and then press ENTER. possibly affecting Integration Server performance. do the following: a b In the list next to Folder. do the following: a b Click   on the toolbar and select the type of field that you want to define. Click Finish. 234 webMethods Developer User’s Guide Version 7. c 4 5 6 Under Select a source. DTD.9 Creating IS Schemas. For information about  restricted characters. If you create a trigger that subscribes to the  publishable document type. click New. and Specifications You can create an IS document type in the following ways: „ Create an empty IS document type and define the structure of the document type  yourself by inserting fields. IS Document Types. To add fields in the IS document type. type a name for the IS document type using any combination of  letters. select Document Type and click Next.  In the New dialog box. „ Create an IS document type from a source file. Note: If you intend to make the IS document type publishable. select None to indicate that you want to create an empty IS  document type in which you define the structure and fields.

1 235 . Developer uses the ‡  symbol to denote a field with a content constraint.  Points to Consider for All Sources Keep the following point in mind when creating an IS document type from an XML  Schema. see “Specifying Field  Properties” on page 247.  to indent each member  Creating an IS Document Type from an XML Document. uses links to the IS schema to obtain content type information about named  simple types. set field properties and apply constraints in the Properties  panel (optional). For example. which displays the fields and structure of the source  document. attributes. Use  field beneath the document or document list field. DTD. c With the field selected. or XML document: „ When creating a field from an attribute declaration. or XML Schema You can create an IS document type based on the structure and content of a source file.1. d If the field is a document or a document list. The  IS schema contains the elements.  Note: Developer displays small symbols next to a field icon to indicate validation  constraints. 7 On the File menu. see  “Applying Constraints to Variables” on page 255.9 Creating IS Schemas. DTD. For information about applying  constraints to fields. and data types defined in the XML Schema or  DTD. an attribute named  myAttribute in the source file corresponds to a field named @myAttribute in the IS  document type. IS Document Types. click Save. the Integration Server inserts the  @ symbol at the beginning of the field name. or XML document. repeat steps a–c to define and set the  properties and constraints for each of its members. For information about applying constraints. see “The Envelope Field” on page 243. When you base the IS document type  on a source file. The IS  document type has the same structure and field constraints as the source document. and Specifications Note: Developer prevents the insertion of fields named _env in an IS document  type. For details about the _env field. Developer creates an IS document type and an IS schema. The IS document type. DTD.  For more information about setting field properties. webMethods Developer User’s Guide Version 7. Developer uses   to indicate an optional field.  such as an XML Schema. see “Applying Constraints to Variables” on page 255.

0" encoding="8859-1" ?>  Points to Consider When Using an XML Schema As the Source Keep the following points in mind when creating an IS document type from an XML  Schema: „ Before creating the IS document type and the IS schema. you would insert the following  at the top of the document: <?xml version="1. title. see  “Expanding Complex Document Types Inline” on page 237. Integration Server does  not create an IS schema or an IS document type. see  “Generating Fields for Substitution Groups” on page 239. “ns2” „ Integration Server can create separate IS document types for named complex types or  expand document types inline within one document type. For example. the Integration Server creates prefixes for  each unique namespace and uses those prefixes in the field names. Field names have the format prefix:elementName or prefix:@attributeName. add the XML prolog to the top of the DTD and explicitly state the  encoding.1 . For more information. 236 webMethods Developer User’s Guide Version 7. IS Document Types. Integration Server validates  the XML Schema. and Specifications Points to Consider When Using a DTD As the Source Keep the following point in mind when creating an IS document type from a DTD: „ The Integration Server assumes that the DTD is UTF8‐encoded. “ns1” for the second namespace. If the XML Schema does not conform syntactically to the schema  for XML Schemas defined in XML Schema Part 1: Structures. „ Integration Server can create one field for a substitution group or create fields for  every member element in a substitution group. For more information. „ Integration Server uses the prefixes declared in the XML Schema as part of the field  names. and description of the validation errors  within the XML Schema. Developer displays an error  message that lists the number. Instead.1. location.9 Creating IS Schemas. „ If the XML Schema does not use prefixes. If the DTD is not  UTF8‐encoded. for a DTD encoded in 8859‐1. Integration Server  uses “ns” as the prefix for the first namespace.

 one for the complex type named documentX (with a reference to documentY).w3. In this example. One way is  to expand the complex type as an “inline” document type in the editor. and Specifications Expanding Complex Document Types Inline Integration Server processes complex types from an XML Schema in one of two ways. the schema processor expanded the  complex types named documentX and documentY inline within the new IS document type:        Complex types expanded inline If you select the option to generate complex types as separate document types. Example XML Schema <xsd:schema xmlns:xsd="http://www. In this example.9 Creating IS Schemas. the schema processor generates  the document type as follows. the schema  processor generated three IS document types—one for the complex type named  documentY.  depending on an option you select when you create a new IS document type. the  schema processor generates the document types as follows.org/2001/XMLSchema" targetNamespace="http://usecases/xsd2doc/01" xmlns:uc="http://usecases/xsd2doc/01" > <xsd:element name="eltA" type="uc:documentX" /> <xsd:complexType name="documentX"> <xsd:sequence> <xsd:element name="eltX_E" type="xsd:string" /> <xsd:element name="eltX_F" type="uc:documentY" /> </xsd:sequence> </xsd:complexType> <xsd:complexType name="documentY"> <xsd:sequence> <xsd:element name="eltY_G" type="xsd:string" /> <xsd:element name="eltY_H" type="xsd:string" /> </xsd:sequence> </xsd:complexType> </xsd:schema> If you select the option to expand complex types inline. IS Document Types.1 237 .  and one for the root element eltA (with references to documentX and documentY):  webMethods Developer User’s Guide Version 7.1. The other way is  to generate a separate IS document type for each complex type in the schema. with  references to those document types.

and Specifications Complex types generated as separate document types The schema processor generates all three document types in the same folder.1. IS Document Types.     Note: If the complex type is anonymous.1 .)  238 webMethods Developer User’s Guide Version 7. you can avoid errors in the document type generation process by  selecting the option to generate complex types as separate document types. (Selecting the  option to expand complex types inline will result in infinitely expanding nested  documents.9 Creating IS Schemas.  If the XML Schema you are using to generate an IS document type contains recursive  complex types (that is. element declarations that refer to their parent complex types  directly or indirectly). the schema processor expands it inline rather  than generate a separate document type.

.. „ When this property is set to false. XML DTD XML Schema To. Create an IS document type that matches the structure and fields in  an XML document. or XML Schema 1 2 3 On the File menu.generateSubstitutionGroups property: „ When this property is set to true. webMethods Developer User’s Guide Version 7.1. the Integration Server does not include that  element in the IS document type. For information about reserved  words or characters. the schema processor imports all substitution group  members (head element and substitutable elements) as optional fields. type a name for the IS document type using any combination of  letters.  In the New dialog box. depending  on the value of the watt.. c 4 Under Select a source. IS Document Types. even though  they are defined as required elements in the XML Schema definition. In the New Document Type dialog box. and/or the underscore character. do the following: a b In the list next to Folder. select one of the following:  Select. This is the default.  If the head element is declared as abstract. select the folder in which you want to save the IS  document type. and Specifications Generating Fields for Substitution Groups Integration Server processes substitution group elements in one of two ways. In the Name field. Click Next. Create an IS document type that matches the structure and fields in  a DTD. To create an IS document type from an XML document. click New. 5 Click Next..schema. but does not contain any  elements for members of the substitution group. DTD.9 Creating IS Schemas. select Document Type and click Next. see “About Element Names” on page 41. Create an IS document type that matches the structure and fields in  an XML Schema definition. the resulting document type contains a field that  corresponds to the head element in the substitution group.1 239 . numbers.core.

Click Finish. click Next. IS Document Types.  240 webMethods Developer User’s Guide Version 7.1 . Additionally.9 Creating IS Schemas. Select the root element and click OK. type in the path and file name. and publication properties defined in the Broker document type. do one of the following:  „ If you want to base the IS document type on a file that resides on the Internet. click Finish. see the Publish‐Subscribe Developer’s Guide. Creating an IS Document Type from a Broker Document Type If your Integration Server is connected to a Broker. data  types. The IS document type retains the structure. such as storage type and time to live.  to navigate to and select the  „ 7 Do one of the following based on your selection in step 4: „ If you selected XML. Developer also generates an IS  schema and displays it in the Navigation panel.1. fields. and Specifications 6 In the Enter the URL or select a local file box. If you selected XML Schema. Developer generates the IS document type using  the XML document you specified and displays it in the editor. see “Creating an Empty IS  Document Type” on page 234. type  the URL of the resource. For more information about these errors  and warnings. Developer generates the IS  document type and displays it in the editor. Developer also generates an IS schema and displays it in the  Navigation panel. (The URL you specify must begin with http: or https:. you essentially  create a publishable document type. Select the appropriate option to specify whether Developer should process  complex types by expanding them inline in the editor or by generating them  as separate IS document types. When you create an IS document type from a Broker document type. A publishable document type is an IS document type  with specific publishing properties. Developer prompts you to select the root element of  the document. see “Validation Errors” on page 452. Note: You might receive errors or warnings when creating an IS document type  from a DTD or XML Schema definition. Developer generates the IS document type(s) and displays them  in the editor. or click  file. For detailed  information about how a Broker document type translates to an IS document type and  vice versa.  „ „ 3 Developer creates the IS document type and saves it on the Integration Server. a  publishable document type on an Integration Server is bound to a Broker document type.) If you want to base the IS document type on a file that resides on your local file  system. If you  want to add or edit fields in the IS document type. If you selected DTD. you can create an IS document type  from a Broker document type. click Next and do the following: 1 2 Select the root element of the document.

 The  Integration Server will contain a document type that corresponds to the Broker document  type and one new element for each element the Broker document type references. Overwriting the address document type might break the deliverOrder flow  service and any other services that invoked deliverOrder. A publishable document type can be used anywhere an IS document type can be used. If a field in the Broker document type was  constrained by a simple type definition declared in the IS schema purchaseOrder. element names must be unique on  the Integration Server. However.1 241 . You can use a publishable document type as the blueprint  for performing document or pipeline validation. Developer gives you the option of overwriting the existing  elements with the referenced elements. Developer would create an IS document type named  address and save it in the customerInfo folder.9 Creating IS Schemas.  Important! If you choose to overwrite existing elements with new elements. IS Document Types. For  information about making a document type publishable or setting publication  properties.  For example.  suppose the address document type defined the input signature of a flow service  deliverOrder. A document reference field can reference an IS document type or  a publishable document type. For example. webMethods Developer User’s Guide Version 7. Developer will also create an element for each referenced element. Developer  would create the referenced IS schema purchaseOrder. see the Publish‐Subscribe Developer’s Guide. and Specifications An instance of a publishable document type can be published to a Broker or locally  within an Integration Server. you can use a publishable document type to define the input or output  parameters of a service. When you create an IS document type from a Broker document type that references other  elements. Developer  saves the new elements in the package you selected for storing the new publishable  document type.1. suppose that the Broker document type references a document type named  address in the customerInfo folder. Developer will not create the  publishable document type.  Developer also creates the folder in which the referenced element was located.  Tip! Any IS document type can be made into a publishable document type.  An element referenced by a Broker document type might have the same name as an  existing element on your Integration Server. keep in  mind that dependents of the overwritten elements will be affected.  For example.  Important! If you do not select the Overwrite existing elements when importing referenced elements check box and the Broker document type references an element with the  same name as an existing Integration Server element.

 numbers. this field displays Not Publishable. select the folder in which you want to save the IS  document type. In the New Document Type dialog box. the Broker doc type property  displays the name of the Broker document type used to create the publishable  document type. and specifications. In the Publication category of the Properties panel. click New.  IS document types. might be affected. Or. In the Name field. Notes: „   You can associate only one IS document type with a given Broker document type.1. such as flow services. You cannot edit the contents of this field. Any elements on the  Integration Server that depend on the replaced element. The Broker Namespace field lists all of the  Broker document types on the Broker territory to which the Integration Server is  connected. and Specifications To create an IS document type from a Broker document type 1 2 3 On the File menu. IS Document Types. and click Next. do the following: a In the Broker Namespace field.  b 6 Click Finish. see the Publish‐Subscribe Developer’s Guide. select Broker Document Type.9 Creating IS Schemas. do the following: a b c 4 5 In the list next to Folder.  If you try to create a publishable document type from a Broker document type  that is already associated with a publishable document type on your Integration  Server. type a name for the IS document type using any combination of  letters. „ 242 webMethods Developer User’s Guide Version 7.1 . if you are not connected to a Broker. select the Broker document type from which you  want to create an IS document type. Under Select a source. and/or the underscore character. select the Overwrite existing elements when importing referenced elements check box. select Document Type and click Next.  In the New dialog box. Developer automatically refreshes the Navigation panel and displays beside the document type name to indicate it is a publishable document type. For more information about  the contents of this field. If you want to replace existing elements in the Navigation panel with identically  named elements referenced by the Broker document type. Click Next. Important! Overwriting the existing elements completely replaces the existing  element with the content of the referenced element. Developer displays an error message. In the New Document Type dialog box.

 This document type defines the  content and structure of the envelope that accompanies instances of the publishable  document. the time the  document was sent. see the Publish‐Subscribe Developer’s Guide. This field is a document  reference to the pub:publish:envelope document type. or cut the _env field from a document type. changes in one  document type must be made to the associated document type. the  webMethods Developer User’s Guide Version 7.  Because the _env field is needed for publication. „ You can only delete an _env field from a document type that is not publishable. the adapter  notification publishes a document containing data from the event and sends it to the  Integration Server. Developer controls the usage of the _env  field in the following ways: „ You cannot insert an _env field in a document type.  An adapter notification can have an associated publishable document type  . Developer  automatically removes the _env field when you make a document type  unpublishable. and other useful information for routing and  control. You can update  one document type with changes in the other by synchronizing them. The adapter notification publishes a document when the specified  event occurs on the resource.    „ You cannot move. Developer automatically inserts  the _env field at the end of the document type when you make the document type  publishable. Adapter Notifications and Publishable Document Types Adapter notifications notify webMethods components whenever a specific event occurs on  an adapterʹs resource. That is. you need to delete that field  before you can make the IS document type publishable. „ The _env field is always the last field in a publishable document type. The envelope records information such as the sender’s address. see the Publish‐Subscribe  Developer’s Guide.  For more information about the _env field and the contents of the pub:publish:envelope  document type. You can  copy this field to the Input/Output tab. Note: If an IS document type contains a field named _env. For  information about synchronizing document types. For example. you  need to make sure that the document types remain in sync.1. The envelope is much like a header in an e‐mail message. The Envelope Field All publishable document types contain an envelope (_env) field. When  you create a polling or asynchronous listener adapter notification in Developer. and Specifications „ Once a publishable document type has an associated Broker document type. sequence numbers. „ You cannot copy and paste the _env field from one document type to another. IS Document Types.9 Creating IS Schemas. if you are using the JDBC Adapter and a  change occurs in a database table that an adapter notification is monitoring.1 243 . rename.

1. document fields. “Performing Data Validation”. In a publishable document type associated with an adapter notification. For more information about creating and using adapter notifications.1 . To make any other modifications to  the publishable document type. 244 webMethods Developer User’s Guide Version 7. see the Publish‐Subscribe Developer’s Guide. For more  information about validation. see the Publish‐Subscribe Developer’s Guide. you must modify the adapter notification type.9 Creating IS Schemas. IS Document Types.  To update the associated Broker document type with the changes. you can edit only  the Storage type and Time to live publication properties. Modifying Publishable Document Types When you modify a publishable document type. Developer displays this message only if a Broker is configured for the Integration Server. the publishable document type is no longer synchronized with the  corresponding document type on the Broker. keep in mind that any change is  automatically propagated to all services.  Integration Server automatically applies the changes to the publishable document type. When you save your changes to the  publishable document type. That is. Developer displays a message stating: This document type is now out of sync with the associated Broker document type. You can use  this publishable document type with triggers and flow services just as you would any  other publishable document type. Editing an IS Document Type When you make a change to an IS document type. any changes you make to the IS document type can affect whether the  object being validated (pipeline or document) is considered valid. specifications.  Important! If you use an IS document type as the blueprint for pipeline or document  validation. For more information about performing actions on adapter  notifications and their associated publishable document types.  For information about publication properties. For more information about  synchronizing document types. “Managing  Elements in the Navigation Panel”. see Chapter 10. Use Sync Document Type to synchronize the document type with the Broker. Developer assigns the  publishable document type the name: NotificationNamePublishDocument. and document  list fields that use or reference the IS document type.  Developer assigns the publishable document type the same name as the adapter  notification. and Specifications Integration Server automatically generates a corresponding publishable document type.) You can use the ToolsFind Dependents  command to view a list of elements that use the IS document type and will be affected by  any changes. synchronize the  publishable document type with the Broker document type. (This happens when you save the  updated IS document type to the server. but appends PublishDocument to the name. see the appropriate  adapter user guide. such as by deleting a field or changing a  property. see Chapter 2.

 type the fully qualified name of the IS document type  or click   to select it from a list. 4 webMethods Developer User’s Guide Version 7. and displays the HTML  page in your default browser. select your browser’s print command. and Specifications Printing an IS Document Type You can use the View as HTML command to produce a printable version of an IS document  type. In the Input or Output box (depending on which half of the Input/Output tab you want to  apply the IS document type to). Click the Input/Output tab.  To print an IS document type 1 2 Open the IS document type you want to print and click its title bar in the editor to  give it the focus. Developer expands any document and document list fields in the IS document type. delete.  To use an IS document type as service input or output parameters 1 2 3 Open the service to which you want to assign the IS document type.9 Creating IS Schemas. click Save. 3 If you want to print the IS document type.  creates an HTML page containing the IS document type. or modify the fields on that half of the Input/Output  tab. From the File menu. You can also drag an IS document type from the  Navigation panel to the box below the Validate input or Validate output check boxes on  the Input/Output tab.1.  Using an IS Document Type to Specify Service Input or Output Parameters You can use an IS document type as the set of input or output parameters for a service or  specification. you cannot add. you can use an IS document type to define the input parameters  rather than manually specifying individual input fields for each service.  Important! When an IS document type is assigned to the input or output of a  service.1 245 . On the File menu. select View as HTML. If you have multiple services with identical input parameters but different  output parameters. IS Document Types.

IS Document Types. and Specifications Using an IS Document Type to Build a Document Reference or Document Reference List Field You can use an IS document type to build a document reference or document reference  list field.1 .. To edit the referenced document or document  list.  To use a document type to build a document reference or document reference list 1 On the Input/Output tab. Click OK. Document Reference Document Reference List 2 3 4 5 To. type the fully qualified name of the IS document type or select it  from the list next to Folder.      246 webMethods Developer User’s Guide Version 7. click   Click.. and then edit its fields in the editor. select it in the Navigation panel. Type the name of the field. Create a document field based on an IS document type. or modify its  members on the Input/Output tab. Tip! You can also use a publishable document type to build a document reference or  document reference list field. such as address information.9 Creating IS Schemas.   Tip! You can also add a document reference by dragging an IS document type from  the Navigation panel to the box below the Validate input or Validate output check boxes  on the Input/Output tab. Create a document list field based on an IS document  type.. Press ENTER.  You might find referencing fields especially useful for information that is repeated over  and over again. you can  reduce the time required to create fields and maintain better consistency for field names.. By referencing an IS document type instead of creating a new one. delete.1. lock it.  on the toolbar and select one of the following: In the Name field. Important! If you are creating a document reference or document reference list field  based on an IS document type. you cannot directly add.

1 247 . or you need to  have TAB or new line characters in the input To be limited to a predefined list of values  Use the Pick list choices property’s Edit button to define the values that  will appear as choices when Developer prompts for input at run time.. with asterisks reflected instead of characters Select. For more information about setting the  XML Namespace property. When  generating XML Schema definitions and WSDL documents. These options are not available for  Objects and Object lists. Pick List webMethods Developer User’s Guide Version 7. (For more information  about specifying validation constraints. Field properties On the Properties panel. The  namespace name indicates the namespace to which the field belongs.. This is useful if you  Large Editor expect a large amount of text as input for the field. and Specifications Specifying Field Properties You can specify additional properties for the field.) Note: Use the XML Namespace property to assign a namespace name to a field. Large Editor.9 Creating IS Schemas. see “Applying Constraints to Variables” on  page 255. If you want the input… Entered in a text field Entered as a password. IS Document Types.1. These properties are located in the  Properties panel. the Integration Server  uses the value of the XML Namespace field along with the field name (the local name) to  create a qualified name (QName) for the field. see the Web Services Developer’s Guide. Text Field (default) Password Entered in a large text area instead of a text field. the General category contains the properties of the field and the  Constraints category contains validation constraints for the field. The Text Field. and Pick List options of the String display type property  affect how you input data for the field as follows. Password.

If you use a specification. you must modify the specification (which affects all services that  reference it) or detach the specification so you can manually define the parameters on  the service’s Input/Output tab.1 . You create a specification with Developer. because there is less opportunity to introduce a typing error  when defining a field name. „ It makes future specification changes easier to implement. but does  not allow you to change them. 248 webMethods Developer User’s Guide Version 7. keep in mind that: „ Any change that you make to the specification is automatically propagated to all  services that reference that specification. Using specifications provides the following benefits: „ It reduces the effort required to build each flow. If you have multiple services with the same input and output requirements. You assign a specification to a service using the Input/Output tab for the service. because you can make the  change in one place (the specification) rather than in each individual service. „ It improves accuracy. you  can point each service to a single specification rather than manually specify individual  input and output fields in each service. and Specifications Creating a Specification A specification is a “free‐standing” IS element that defines a set of service inputs and  outputs. (This happens the moment you save the  updated specification to the server.9 Creating IS Schemas.) To make changes to the input and output parameters  of the service. This means that you cannot directly alter the service’s input and output  parameters through its Input/Output tab.) „ A specification wholly defines the input and output parameters for a service that  references it.1. (Developer displays the parameters. IS Document Types.

  In the New dialog box. select Specification. c 4 Click Finish. type the specification’s name or click  from a list. do the following: a b In the list next to Folder. Important! Typically.1. and click Next. and the underscore character. they match an existing specification now but are expected to  change at some point in the future). use a different name or try adding a  letter or number to the name you specified to make it valid. In the New Service Specification dialog box.  Important! Developer does not allow the use of certain reserved words (such as for. If you specify a name that is a reserved word. IS Document Types.1 249 .9 Creating IS Schemas. type a name for the specification using any combination of  letters. you will  receive an error message. select the folder to which you want to save the  specification. you do not build a specification by referencing another  specification. When this happens. In the Name field. do the following in  the editor: a b In Specification Reference field. it is useful to do this in the situation where you will use  the specification with a group of services whose requirements are expected to  change (that is. numbers. and Specifications To create a specification 1 2 3 On the File menu. Referencing a specification gives you the  convenience of using an existing specification and the flexibility to change the  specification for only that single group of services in the future. Skip the rest of this procedure. If you want this specification to reference another specification.  to select it  webMethods Developer User’s Guide Version 7. However.  while. click New. and if ) as names.

) Important! Once you assign an IS document type to the Input or Output side of a  specification. You can also drag an IS document type from the Navigation  panel to the box below the Validate input or Validate output check boxes on the  Input/Output tab. click Save.  Tip! You can select a publishable document type or an IS document type to  define the input or output half of the specification. For information about creating IS document types. see “Applying Constraints to  Variables” on page 255.  For details on setting field properties. Click   on the toolbar and select the type of field that you want to specify. repeat steps b–d to define each of its  members. set its properties and apply constraints on the Properties  panel (optional). b Proceed to the next step to specify the fields for the other half of the specification. do the following: a b c d Select the half of the specification (Input or Output) where you want to define the  field by clicking anywhere in that half’s large white text box.  250 webMethods Developer User’s Guide Version 7. IS Document Types. you cannot add. 6 For each input or output field that you want to define. do the following: a In the Input or Output field (depending on which half of the specification you want  to assign the IS document type to). see “Specifying Field Properties” on  page 247.1 . delete. or modify the fields on that half of the Input/Output tab. see “Creating  an IS Document Type” on page 233.1. Use  field.  (If you assigned IS document types to both the Input and Output sides of this  specification.9 Creating IS Schemas. skip the rest of this procedure. type the IS document type name or click   to  select it from a list. and Specifications 5 If you want to reference an IS document type for the Input or Output half of the  specification. With the field selected. For details on applying constraints. Type the name of the field and then press ENTER.  e If the field is a document or a document list.  to indent each member beneath the document or document list  7 On the File menu.

9 Creating IS Schemas. you cannot add. Click the Input/Output tab. and Specifications To assign a specification to a service 1 2 3 Open the service to which you want to assign a specification.   webMethods Developer User’s Guide Version 7. type the fully qualified name of the specification. or  modify the declared fields using that service’s Input/Output tab.1. delete.  Important! When a specification is assigned to a service. IS Document Types. In Specification Reference. or click  to select it from a list.1 251 .

1.9 Creating IS Schemas. IS Document Types. and Specifications 252 webMethods Developer User’s Guide Version 7.1 .

. . . . . . . . . . . . . . . . . . . . . . . . . „ Performing Document Validation . . . . . . . . . . . . . . . . . . . . „ Validation Errors and Exceptions . . . . „ Performing Pipeline Validation . . . . . „ Performing XML Validation in webMethods Integration Server . . . . . . . . . . . . . „ Performing Validation from within a Java Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10 Performing Data Validation 254 255 259 263 263 264 265 266 „ What Is Data Validation? . . . . . . . . . .1. . . . . . . „ Performing Input/Output Validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Applying Constraints to Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1 253 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . webMethods Developer User’s Guide Version 7. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

 The  validation engine in webMethods Integration Server considers the data to be valid when  it conforms to the constraints specified in the blueprint.  By using the data validation capabilities built into webMethods Integration Server. The validation engine in webMethods Integration Server validates  the structure and content of a document (IData object) in the pipeline against an IS  document type. and zip.  „ Data is of the type and within a value range expected by a service. city. or an XML document contains the data  needed to execute subsequent services. a document (IData object). a service  that processes a purchase order might expect the customer address to be a document  field with the following fields: name.1 .  an IS document type. For example. The  validation capabilities can also eliminate extra validation code from your services. A blueprint can be an IS schema. By performing data validation. „ Document validation. The validation engine in webMethods Integration Server validates  the structure and content of the pipeline against an IS document type. if a service processes a purchase  order. address. you might want to verify that the purchase order contains a customer name  and address. Data validation also verifies that run‐time data is a specific data  type and falls within a defined range of values. The validation engine in webMethods Integration Server  validates the input and/or output of a service against the signature of the service.  What Is Data Validated Against? During validation.10 Performing Data Validation What Is Data Validation? Data validation is the process of verifying that run‐time data conforms to a predefined  structure and format. „ The data is in the structure expected by subsequent services. you can make sure that: „ The pipeline. For example.  The blueprint used to validate data depends on the type of validation you are  performing. run‐time data is compared to a blueprint or model. 254 webMethods Developer User’s Guide Version 7. For example. In webMethods Integration Server. „ Pipeline validation. state. The blueprint or  model is a formal description of the structure and the allowable content for the data. you can perform the following types of  validation: „ Input/Output validation. you  can decide whether or not to execute a service based on the validity of data. you might want to make sure that the purchase  order does not contain a negative quantity of an item (such as ‐5 shirts). The  blueprint identifies structural and content constraints for the data being validated. or a set of input and output parameters.1. if a  service processes a purchase order.

10 Performing Data Validation „ XML validation.1 255 . you can also specify the structure of the  variable. and unitPrice. For example. and input/output validation. or String table variables. A constraining facet places  limitations on the content (data type). String list. You can apply content constraints to String. For input/output validation.  For document and document list variables. the IS document type used as the blueprint needs  to have constraints applied to its variables. for a String variable named  itemQuantity. and customerName variables exist at run time. webMethods Developer User’s Guide Version 7. if the flow service in which you are validating the pipeline processes a  purchase order. you might want to check that values for the purchaseOrderNumber. constraints need  to be applied to the declared input and output parameters of the service being validated. The following sections provide information about performing each type of validation and  information about applying constraints to fields. quantity. you can specify what variables can be contained in the document  (IData object) or document list (IData[ ] object) at run time. For  example.  accountNumber. For more information about creating IS  document types. Constraints are the  restrictions on the structure or content of variables. you could  specify that the lineItem document variable must contain the child variables  itemNumber. size.  Note: When you create an IS document type from an XML Schema or a DTD. String  table. You could also specify that the lineItem  document can optionally contain the child variable specialInstructions.1. you might apply a content constraint that requires the value to be an  integer.  You can use simple types from an IS schema as content constraints for String.  Applying Constraints to Variables In pipeline. For example.  For pipeline and document validation.  you can also apply a constraining facet to the content. and Object list variables. document. Object. the blueprint used for data  validation requires constraints to be applied to its variables. that is. You could then apply constraining facets that limit the content of  itemQuantity to a value between 1 and 100.  „ Content constraints describe the data type for a variable and the possible values for the  variable at run time. The validation engine in webMethods Integration Server validates the  structure and content of an XML document against an IS schema. the  constraints applied to the elements and attributes in the original document are  preserved in the new IS document type. You can apply the following types of  constraints to variables: „ Structural constraints specify the existence and structure of variables at run time. String list or String table variable. color. When you specify a content constraint for a String. String  list. see “Creating an IS Document Type” on page 233.

 click OK.  If this property is set to False. You can apply constraints to variables in IS document types. If you want to customize the content type by changing the constraining facets  applied to the type. 256 webMethods Developer User’s Guide Version 7. set the Allow null property to  True. d If the selected variable is a String. click  OK. If you want to allow a variable to have a null value. set the Allow unspecified fields property to True. If the selected variable is a document or document list and you want to allow it to  contain undeclared child variables. Then. The Integration Server considers a document to be  open if the Allow unspecified fields property is set to True and considers a  document to be closed if the Allow unspecified fields property is set to False. see “Customizing a String Content Type” on page 257. see “Customizing a String Content Type” on page 257.10 Performing Data Validation To apply constraints to a variable 1 Select the variable to which you want to apply constraints. Note: The state of the Allow unspecified fields property determines whether the  document is open or closed.1 . set the Allow null property to False. select the simple type you  want to apply to the variable.  (For a description of these content constraints. „ If you want to use a simple type from an IS schema as the content constraint. An open document permits undeclared fields  (variables) to exist at run time. String list. To apply the selected type to the variable. any child variables that exist in the pipeline but do  not appear in the declared document field will be treated as errors at run time.) To apply the selected type to the variable. click   and then do one of the  following: „ b c If you want to use a content type that corresponds to a built‐in simple type in  XML Schema. select the IS schema  containing the simple type you want to apply. set this property to  False. select the type for the variable contents. “Validation  Content Constraints”. In the Browse dialog box. If you want to customize the content type by changing the constraining facets  applied to the type. do the following: a If you want to require the selected variable to exist at run time. in the Content type list. A closed document does not allow undeclared  fields to exist at run time. set the Required  property to True. If the existence of the variable is optional. or String table. and variables declared on the Input/Output tab.1. and you want to  specify content constraints for the variable. see Appendix F. 2 In the Constraints category on the Properties panel.  click the Browse button. If you want the validation engine to generate an error when the variable has  a null value. variables in a  specification.

 All of the choices in the Content type list correspond to simple types  defined in XML Schema Part 2: Datatypes. or service output. whereas  constraints for String variables correspond to simple types in XML schemas. select UNKNOWN. the contents of the document are  validated against the specified document type. see the Publish‐Subscribe  Developer’s Guide. the data is validated as being of the  specified Java class.1. click Save. modified  type to a variable. see “Java Classes for Objects” on page 407.  select the Java class for the variable contents. You customize a content type or simple type by changing the  constraining facets applied to the type. „ During testing. A constrained Object is validated when one of the following occur: „ A service runs with the Validate input or Validate output check box selected on the  Input/Output tab. „ The pub.  see “Java Classes for Objects” on page 407. for the Java wrapper type property. specification. „ A document is published. or  String table variable. webMethods Developer User’s Guide Version 7.1 257 . when you enter values for a constrained Object or Object list in the  Input dialog box. For details on the Java classes you can apply to an Object or Object  list. e If the selected variable is an Object or Object list. service input. 3 4 Repeat this procedure for each variable to which you want to apply constraints in the  IS document type. „ A service runs via the INVOKE step in a flow service with the Validate input or Validate output properties set on the INVOKE step. String list. Considerations for Object Constraints Constraints for Object and Object list variables correspond to Java classes. you can customize an existing type and apply the new.schema:validate service runs. Customizing a String Content Type Instead of applying an existing content type or simple type to a String. When you  apply constraints to Objects and perform validation. When this occurs.  For more information about supported Java classes for Objects and Object lists. On the File menu. For details. If you do not want to apply a Java  class or if the Java class is not listed. „ When you assign a value to an Object or Object list variable on the Pipeline tab using  the Set Value   modifier.10 Performing Data Validation Note: A content type corresponds to a simple type from an XML Schema  definition.

 keep the following points in mind: „ When you edit the constraining facets applied to a content type. For example. edit the content type in  the IS schema. „  The constraining facets you can specify depend on the content type.  select the simple type you want to customize and apply to the variable. select the content type you want to customize. specify the constraining facet values you want  to apply to the content type. For more information about constraining facets. the changes are saved to  the selected type definition in the IS schema. 3 Click the Customize button.  When customizing a content type.  In the Browse dialog box. see  “Constraining Facets” on page 448. If you want to customize a simple type from an IS schema. Then. For more  information about the constraining facets for each content type.) For more  information about editing simple types. The modifications affect any variable to  which the simple type is applied as a content type constraint.1 . The constraining facets cannot become  less restrictive. For more information about setting values for constraining facets. Developer saves the new content type as  string_customized. see  “Setting Constraining Facet Values” on page 233. see Appendix C. see “Editing a Simple Type in an IS Schema”  on page 231. click the Content type browse  button ( ) and then do one of the following to select the content type you want to  customize: „ „ In the Content type list.10 Performing Data Validation When you customize a type. if you  customize the string content type. you actually create a new content type. To make changes  that affect all variables to which the content type is applied. In the fields below the Content type list. click the Browse button. Developer saves the  changes as a new content type named contentType_customized. see “Editing a Simple Type in an IS Schema”  on page 231. you can only make  the constraining facet values more restrictive. For more information  about editing a simple type definition.  Note: When you edit a simple type definition in an IS schema. select the IS schema containing the simple type.1. Developer makes the constraining facet fields below the  Content type list available for data entry (that is. changes the background of the  constraining facet fields from grey to white). 4 258 webMethods Developer User’s Guide Version 7. To customize a content type 1 2 Select the variable to which you want to apply a customized content type. In the Constraints category on the Properties panel. (String content types are simple types from IS schemas.  “Supported Data Types” on page 405. „ The customized content type applies only to the selected variable. Developer changes the name of the  content type to contentType_customized.

Performing Input/Output Validation In input/output validation.1. the validation engine validates the service input values immediately before the  webMethods Developer User’s Guide Version 7. and String table  variables with a content type constraint only. Developer displays variables in the following ways: Variable Constraint status Required field. minLength. see  Appendix G. Developer saves the changes as a new content type named  contentType_customized. For more information about primitive  types. “Validation Errors and Exceptions” Viewing the Constraints Applied to Variables Developer displays small symbols next to a variable icon to indicate the constraints  applied to the variable.  Object and Object lists with an applied Java class constraint have a unique icon. and pattern. Optional field. For  more information about icons for constrained Objects.10 Performing Data Validation 5 Click OK. For more information about these exceptions. if the  primitive type is string. For example. Primitive types are the basic  data types from which all other data types are derived. Developer displays the constraining facets enumeration. refer to XML Schema Part 2: Datatypes at  http://www. If you specify that you want to validate the inputs to the  service. the validation engine in webMethods Integration Server  validates the inputs and/or outputs of a service against the declared input and output  parameters of the service.  Note:  The constraining facets displayed below the Content type list depend on the  primitive type from which the simple type is derived. Developer does not display the ‡  symbol next to Object and Object list variables with a specified Java class constraint. String list. Important! Developer throws exceptions at design time if the constraining facet values  for a content type are not valid.org/TR/xmlschema‐2/. Required field with content type constraint Optional field with content type constraint Note: Developer displays the ‡ symbol next to String. maxLength.w3.1 259 .  length. see “Java Classes for Objects”  on page 407.

 you need to apply  constraints to the parameters. the INVOKE flow step for the service fails. the  validation engine validates output values after webMethods Integration Server  executes the service. Whether or not the entire flow service fails when an individual flow step  fails depends on the exit conditions for the service. If you specify that you want to validate the outputs of the service.  the service fails and does not execute. see “Declaring Input and Output Parameters for a  Service” on page 122. The validation engine  validates input values before webMethods Integration Server executes the service. If the service output is not valid. 260 webMethods Developer User’s Guide Version 7. set up validation via the INVOKE step properties. An input or output value is invalid if it does not conform to the constraints  applied to the input or output parameter. the INVOKE flow step for the  service fails. To determine which method to use.  „ INVOKE step properties. At run time. determine whether or not you want the service input  and output values validated every time the service runs.  For example. For information about applying constraints to variables. If the input and/or output values do not need to be validated every time the service  executes. If you want to validate the input  and output values every time the service runs. see “Using SEQUENCE to Specify an Exit Condition” on page 176. Similarly.  You can specify that you want to perform input/output validation for a service in the  following ways: „ Input/Output tab. To effectively  use the input and output parameters as the blueprint for validation.  Note: If you specify input/output validation via the INVOKE step and an input or  output value is invalid. If a client calls the service and the inputs are invalid. Specifying input/output  validation via the INVOKE step properties allows you to decide on a case‐by‐case basis  whether you want validation performed.  see “Applying Constraints to Variables” on page 255. For information about declaring  service input and output parameters.10 Performing Data Validation service executes. the  validation engine validates the service output values immediately after the service  executes. . Set properties on the Input/Output tab to instruct the validation engine  in webMethods Integration Server to validate the inputs and/or outputs of the service  every time the service executes. For information about specifying  exit conditions. if your service requires certain input to exist or fall within a specified range  of values. Note: The declared input and output parameters for a service are sometimes called the  signature of the service. the service itself does not actually fail. if the inputs and/or  outputs of the service are invalid. the services’s declared input and output parameters act as  the blueprint or model against which input/output values are validated.1. you might want the pipeline validated every time the service runs. Set up input/output validation via the INVOKE step properties  to instruct the validation engine to validate the service input and/or output only  when it is called from within another flow service. the INVOKE flow step that calls the service fails. If  the service input is not valid. For input/output validation.1 . specify validation via the Input/Output tab.

  On the File menu. webMethods Developer User’s Guide Version 7. the validation engine validates the input and/or output values of the  service against the input and output parameters declared for the service.  If you want the output of the service validated every time the service executes. If you want the input of the service validated every time the service executes. Service output values will not be validated.  Input/Output tab with validation processing enabled Service input values will be validated every time the service executes. select  the Validate input check box.10 Performing Data Validation Specifying Input/Output Validation via the Input/Output Tab You can specify that you want the inputs and/or outputs of a service validated every time  it executes by setting properties on the Input/Output tab of the service.1. To set up input and output validation via the Input/Output tab 1 2 3 4 5 Open the service for which you want to validate input and/or output every time the  service is invoked. Every time the  service executes. select  the Validate output check box. click Save.1 261 . Click the Input/Output tab.

  To set up input and output validation via the INVOKE step 1 2 In the flow editor. If you also specify input/output validation via the INVOKE step.1. INVOKE properties with validation processing enabled Inputs to the invoked service will be validated. input/output validation  is performed. In the General category on the Properties panel. set the Validate input property to True. 262 webMethods Developer User’s Guide Version 7. If you want to validate the output of the service. Each time you insert a service into a flow. then every time the service executes. Outputs of the service will not be validated. select the INVOKE step containing the service for which you want  Integration Server to validate input and/or output values.10 Performing Data Validation Specifying Input/Output Validation via the INVOKE Step You can also specify input/output validation by setting properties for the INVOKE step  that calls the service.  duplicate validation will result. do the following: „ „ If you want to validate input to the service. Important! Keep in mind that the Validate input and Validate output properties are  independent of any validation settings that you might have already set in the service. 3 On the File menu. you can decide whether  you want the validation engine to validate service inputs and/or outputs at run time. possibly slowing down the execution of the service. click Save.1 .  If you select the Validate input and/or Validate output check boxes on the Input/Output tab  of the invoked service. set the Validate output property to  True.

 (An IS document  type implicitly allows unspecified variables to exist at run time. „ Execute or not execute a service based on the validity of the pipeline data. You would use the pub. The validation engine  validates the published document against the publishable document type.schema:validatePipeline service.schema:validate  service should fail if the document (IData object) is invalid. invoke the pub. suppose that you invoke the pub.  Note: The validation engine in Integration Server performs document (IData object)  validation automatically when a document is published. „ Eliminate extra validation code in your service.schema:validatePipeline  service. The constraints applied to the variables in the IS document type  webMethods Developer User’s Guide Version 7. or String table variables in the  pipeline.schema:validate service considers a document (IData object) to be valid when it  complies with the structural and content constraints described in the IS document type it  is validated against.schema:validate service.10 Performing Data Validation Performing Document Validation Sometimes. In pipeline validation.1 263 .schema:validate service.  For example.schema:validate service after retrieving the object.ldap:search service in a flow to retrieve  an IData object from an LDAP directory service.1. you can specify the maximum number of  errors to be collected by the service. Tip! If you want to validate only String. By validating pipeline data.client. Only the variables in the IS document type will be validated. you can: „ Ensure a higher degree of accuracy for pipeline content.schema:validate service into a flow service. You can also specify whether the pub. you might want to validate an XML document that has been  converted to document (IData object). String list. you might want to validate an individual document (IData object) in the  pipeline instead of the entire pipeline. If you want to validate that object before  you use it in other services. The validation  engine ignores other variables that exist in the pipeline at run time. an IS document type is the blueprint or model against which you  validate the pipeline. This service returns a string that indicates whether validation was  successful and an IData array that contains any validation errors.schema:validate service to  validate the resulting document (IData object) against an IS document type. When you insert the  pub.  As another example. Using the pub. use the pub. see the webMethods Integration  Server Built‐In Services Reference. Define an IS document type that  contains the variables you want to validate and apply constraints to the variables.  For more information about the pub.  Then use this IS document type as the blueprint for the pub.) Performing Pipeline Validation Pipeline validation is the process of verifying the contents of the pipeline against an IS  document type. you can  validate a single document (IData object) in the pipeline against an IS document type.  The pub.

 The pub. For  more information about the pub.schema:validate service. an address.schema:validatePipeline service returns  a string that indicates whether validation was successful and an IData array (errors  variable) that contains any validation errors. see “Applying Constraints to Variables” on page 255. invoke the pub. Additionally. see the XML Services Developer’s Guide. By validating an XML  document.schema:validate service returns a string that indicates whether  validation was successful and an errors variable (an IData array) that contains any  validation errors. Performing XML Validation in webMethods Integration Server In webMethods Integration Server. invoke the built‐in service pub. The pub. The XML document is valid if it  complies with the structural and content constraints described in the IS schema or IS  document type. The pipeline is valid when it conforms to the structural and content  constraints applied to the IS document type. You can also use the pub.10 Performing Data Validation determine what can and cannot be included in the pipeline.xml services. an XML document is valid  when it complies with the structural and content constraints described in the IS schema it  is validated against. This service  instructs the validation engine to compare the pipeline contents against a specified IS  document type. you  might want to validate the date of birth information to make sure that it conforms to a  specific date format. see the webMethods Integration Server Built‐In Services  Reference.xml:loadXMLNode service or the  pub. and date of birth information. This service instructs  the validation engine to validate an XML document by comparing it to a specified IS  schema or an IS document type in the Navigation panel. For more information about  submitting XML documents to services. You can also  ensure that the elements and attributes contain values that are of the data type expected  by subsequent services. For information about errors that can occur during validation.1 .xml:xmlStringToXMLNode to parse an XML document. if you receive an XML document that contains new employee information.  For example. see  “Validation Errors and Exceptions” on page 266.  you might want to validate the employee information before executing subsequent  services. see the webMethods Integration Server  Built‐In Services Reference. For more information about  applying constraints to variables.  Important! The pub.1.  To validate an XML document. The Integration Server parses XML documents it receives via HTTP or  FTP automatically. You might want to make certain the XML document contains an employee  name.schema:validatePipeline service. In webMethods Integration Server.schema:validate service requires a parsed XML document as input (an  XML node). XML validation is the process of verifying the  structure and content of an XML document against an IS schema. telephone number. For more information about the  pub. To validate the pipeline.  264 webMethods Developer User’s Guide Version 7.schema:validatePipeline. you can ensure that the XML document contains the elements and attributes  organized in the structure or format expected by subsequent services.

.getValue() ). .PO" String rec = "purchaseOrder" // put the result from the xmlNodeToDocument service (i.destroy().destroy().e.schema.insertAfter( "conformsTo". if (dtrCursor.1 265 . . "1000" ).schema:validate and pub. In the following example.getCursor(). the pub. IDataCursor dtrCursor = drtResult. dtrCursor.schema". .validate to validate contents of <object> IData validResult = context. validInput). ifc+":"+rec ).schema:validatePipeline to perform  validation from within a Java service. the object to be // validated) into the key named <object> IDataCursor validCursor = validInput. // set the <maxErrors> parameter to the number of allowed validation errors validCursor.  Performing Validation from within a Java Service You can use built‐in services pub. // invoke pub. webMethods Developer User’s Guide Version 7.schema:validate  service is used to validate the results of the pub. no document  validation is performed on the generated element.insertAfter( "maxErrors".insertAfter( "object".1.getCursor(). IData validInput. } dtrCursor. IData dtrResult. validCursor.first("boundNode")) { // assumption here that there's data at the current cursor position validCursor. . .xml:xmlNodeToDocument service against a  specification for an OAG purchase order. // set <conformsTo> parameter to point to the document type to validate against // This document type must exist on webMethods Integration Server validCursor.invoke("pub.10 Performing Data Validation Note: If an IS schema contains an element with a nillable attribute and the element  generated from the schema also contains the attribute xsi:nil=ʺtrueʺ. "validate". // initialize the folder and document type name to point to a document type // that exists on webMethods Integration Server String ifc = "OAG.

  „ When the validation engine performs data validation by executing the built‐in  services pub.schema:validate or pub. the validation engine returns all the validation  errors in a string.getIDataArray(validCursor. j++ ) { System.1. you can determine whether the service should succeed or fail if the data being  validated is invalid. and error  location for each error found during input/output validation.first("isValid")) { if (IDataUtil. see Appendix G. for (int j=0. You might want a service to succeed even if the data is invalid. System.  The format in which the validation engine returns errors depends on whether validation  was performed using the built‐in services or by checking the declared input and output  parameters for the service.1 . . . For each validation error. error message. "errors").schema:validatePipeline.schema:validate and pub.schema:validate and pub. if(validCursor. Validation Exceptions If you use the pub. For additional information about pub. j < vr.getCursor().length+" ERROR(s) found with example").  For more information about validation errors. “Validation Errors and  Exceptions”.length. and the location of the error.println( vr[j]. the error message.toString() ). This string contains the error code. In the  pub.  266 webMethods Developer User’s Guide Version 7.  „ When the validation engine performs validation by comparing run‐time data to the  declared input and output parameters. the errors variable lists the  error code.println ( vr.destroy(). } } } validCursor.equals("false")) { IData [] vr = IDataUtil. see the  Schema services in the webMethods Integration Server Built‐In Services Reference. the value of the failIfInvalid input  variable determines whether a service fails because of an invalid object.schema:validatePipeline services to perform data  validation.schema:validatePipeline services.schema:validate and pub.out.getString(validCursor).schema:validatePipeline. Validation Errors and Exceptions During data validation. .10 Performing Data Validation // check <isValid> to see whether <object> is valid and process accordingly IDataCursor validCursor = validResult. the validation engine generates errors when it encounters values  that do not conform to the structural and content constraints specified in the blueprint.out. errors are returned in the errors  output variable (an IData list).

schema.  webMethods Integration Server inserts the validation errors into the exception  message.schema.core.  To set a maxOccurs threshold value 1 2 3 4 Start webMethods Integration Server and open the Integration Server Administrator. „ The basic validation contract is violated (for example. click Extended. If this is the reason for the exception. webMethods  Integration Server throws a validation exception. failIfInvalid = true). In the Settings menu of the navigation area. Running Out of Memory During Validation During validation of an XML node.1 267 . „ You specify that the service should fail if the object to be validated (XML node.1. To  prevent a stack overflow or out of memory error.core. null value). or document (IData object)) did not conform to the IS schema or IS  document type (for example. you can set a threshold value for  maxOccurs.schema:validate and pub. 5 Click Save Changes. By default. webMethods Developer User’s Guide Version 7.  pipeline.schema:validatePipeline service fails.10 Performing Data Validation If the pub.  To set a maxOccurs threshold value. The server displays the Extended Settings screen. Click Edit Extended Settings. a binary tree is passed instead  of a document (IData object) as expected). it proceeds as if the maxOccurs value was equal to ʹunboundedʹ.maxOccursThresholdValue=value where value is the number you  want to use as the maxOccurs threshold. a large maxOccurs value for an element in the IS  schema used as the blueprint can cause an out of memory error or a stack overflow. type  watt. this parameter does not have a  value. In the text area under Extended Settings. you can edit the server configuration parameter  watt. or document (IData object))  that is passed (for example. When the validation engine encounters a maxOccurs value greater than the  threshold value.maxOccursThresholdValue. pipeline. A validation exception is generated if  one of the following is true: „ Errors are detected in the object (XML node.

1 .10 Performing Data Validation 268 webMethods Developer User’s Guide Version 7.1.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Saving and Restoring the Pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11 Testing and Debugging Services 270 270 271 279 280 281 288 291 295 296 300 „ Testing and Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Disabling Flow Steps. . . . . . . „ Testing Services from a Browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Transformers. . . . . and Conditions . . . . . . . webMethods Developer User’s Guide Version 7. . . .1. . . . . . . . . . . . . . „ Testing Services that Expect XML Documents as Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1 269 . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Testing Services from Developer . . . . . . . . . „ Working in Debug Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Setting Breakpoints . . . . . . . . . . . . . . „ Modifying the Current Pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Testing Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Other Debugging Techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

 Developer formulates the URL necessary to  invoke the service and passes that URL to your browser.1. It also allows you to easily  pass different sets of test data to your service. Developer invokes  the service and receives the results. which makes it easy to test your service  under a variety of data conditions. Note: For information about testing Broker/local triggers and publishable document  types. testing. „ Trace the pipeline at run time. For example. „ Modify and save the contents of the pipeline at a specified point. These include tools to: „ Write arbitrary messages to the server log. „ From a browser.11 Testing and Debugging Services Testing and Debugging Like other types of computer programming. Integration Server provides tools for collecting run‐time information that  can help debug a service. Testing Services You can test any type of service (flow services or coded services) with Developer. With this technique. Your browser actually  invokes the service and receives the results. and correcting (debugging) your code.  270 webMethods Developer User’s Guide Version 7. you can: „ Test services. a mode that lets you monitor a flow service’s  execution path and/or execute its steps one at a time. You can use Developer to test services in two ways: „ From Developer.1 . When you develop services for browser‐ based clients (especially ones whose output will be formatted using output  templates) you will want to test those services at least once using this technique. Developer is the client. and inspect their results. Additionally. „ Temporarily disable steps in a flow and/or specify points where you want to halt  execution.  eliminating the need to build special clients simply for testing. Developer provides a range of tools to assist you during the testing and debugging  phases. developing a service is an iterative process  of building. „ Examine the call stack and the pipeline when an error occurs. „ Execute services in “debug” mode. see the Publish‐Subscribe Developer’s Guide. That is. specify their input values. With this technique.

  Developer prompts you to save them. you will test your services using Developer (not a browser) as the client. To test a service using Developer as the client 1 2 3 Open the service that you want to test. click Save. Developer displays the Test perspective when  you begin testing a service.  This allows you to quickly examine the data produced by the service and optionally  change it or save it to a file. select Run.  You do this using the Run command on the Test menu. For more  information. You can use the saved data as input for a later test or to  populate the pipeline during a debugging session.11 Testing and Debugging Services Testing Services from Developer In most cases. If you want to save the input values that you have entered. see “Entering Input for a Service” on page 272. Results from the service are returned to Developer and displayed in the Results panel. If you do not select this  option. see “Switching  Perspectives” on page 34.  When you execute a service with the Run command. from  beginning to end (or until an error condition forces it to stop) on the server on which you  have an open session. it prompts you for input values.1 271 . For more information about perspectives. Click OK. Before Developer invokes the service. If you have not yet saved changes to the service. empty Strings are passed with a zero‐length value. select the Include empty values for String Types check box. On the Test menu. Developer invokes the service with the specified set of input values. see “Saving Input Values to a File” on page 274. type the input values for each variable in the  Input dialog box or click the Load button to retrieve the values from a file. Note: If you selected the Switch to Test perspective check box on the Test page of the  Options dialog box (ToolsOptions). You can type the  input values into the dialog box provided by Developer or load the values from a file that  was saved during an earlier test. If the service has input parameters. When you select this  option. Developer invokes the service (just  as an ordinary IS client would) and receives its results.  If you want Developer to pass empty variables (variables that have no value) to the  service. The service executes once. Input values  that you save can be recalled and reused in later tests. 4 5 6 webMethods Developer User’s Guide Version 7.1. For more information about  saving input values. empty Strings are not passed to the service.

. Entering Input for a Service When you test a service with Developer. an error message displays.. see  “Run‐Time Exceptions” on page 277.and complex documents and document lists. „ If the service throws an exception.” You can also enter documents and document lists containing string‐based children and  constrained objects through the Input dialog box. Developer displays the Input dialog box.1 . see “Viewing the Results of the Service” on  page 275. its results appear on the Results panel.1. Enter input values in the Input dialog box You can enter simple Strings. You can manually type your input values into the Input dialog box or. which  prompts you for input to the service. This dialog box contains an entry for each variable  defined by the service’s input parameters.  272 webMethods Developer User’s Guide Version 7.. For more information about errors that occur while testing a service. you can load them from a file.. For more  information about the Results panel.11 Testing and Debugging Services Notes: „ If the service executes to completion. Click Details in the  message box to view the call stack and the state of the pipeline where the error  occurred. Object variables without constraints are noted  as “Not editable by user. . if you saved the  input values from an earlier test.

 If the service  takes complex variables such as a String lists.11 Testing and Debugging Services Note: If your service expects Object variables that do not have constraints assigned or  an Object defined as a byte[ ]. Delete the selected column from the variable. Delete the selected row from the variable. Then you need to construct a test harness (a  flow service that executes both the service that produces the test data and the service  you want to test) and use that harness to test your service.1 273 . Developer displays a message identifying the variable and  the expected type.  webMethods Developer User’s Guide Version 7. Add a column to the variable. you will not be able to enter those values in the Input  dialog box. To enter values by typing them 1 2 Open the service and execute it as described in “Testing Services from Developer” on  page 271 or “Testing Services from a Browser” on page 279. empty Strings are  passed with a zero‐length value. Use this… To. select the Include empty values for String Types check box. To test these values in a service. documents.. use the  following buttons to specify the variableʹs individual elements. If the value is not of the type specified  by the object constraint. If you do not select this check box. When you select this check box. you must also create a service that  generates input values for your service.. or document lists.1. Insert a blank row above the currently selected row. empty strings are  not passed to the service. Add a row to the variable.  Developer automatically validates the values. type an input value. Note: When you enter values for constrained objects in the Input dialog box. 3 If you want Developer to pass empty Strings to the service. For each variable listed in the Input dialog box.

To save input values that you have entered for a service 1 2 3 4 Open the service and execute it as described in “Testing Services from Developer” on  page 271 or “Testing Services from a Browser” on page 279. 274 webMethods Developer User’s Guide Version 7.  „ Variables that exist in the Input dialog box. they do  not need to be saved in Integration Server’s namespace or even on the server machine  itself. click Save. Many sites establish a special directory on their  development server just for holding sets of test data that they generate in this  manner. Variables that exist in the file. To do this. When you use input values from a file. Loading Input Values from a File You can reload input values that you have saved to a file instead of rekeying the values in  the Input dialog box. specify the name of the file to which you want the values  saved. but not in the file. click the Load button in the Input dialog box and then  select the file that contains the input values you want to use. When saving input values to a file. Because these files are not actual run‐time components.1 . Note: You might want to consider creating an input file for each set of data that  you routinely test your service against. „ You can store the file in any directory that is accessible to the computer on which  Developer is running. keep the following points in mind: „ Empty variables (variables that do not have a value) are only saved if the Include empty values for String Types check box is selected.11 Testing and Debugging Services Saving Input Values to a File You can save values that you type in the Input dialog box to a file so that you can reuse  them in later tests. but not in the dialog box.  Developer does not save empty variables in the file. „ Values from the file replace those already in the Input dialog box.1. Enter input values into the Input dialog box as described in “Entering Input for a  Service” on page 272.  the values in the file are not used.  In the case of Object variables without constraints or Object variables of type byte []. are ignored. If you do not select this check box. are set to null. When you are finished entering values. In the Save File dialog box. keep the following points in mind: „ Developer only loads variables whose name and type match those displayed in the  Input dialog box. This will provide you with a ready‐made  set of test cases against which to verify the service when it is modified by you or  other developers in the future.

 see “Saving and  Restoring the Pipeline” on page 296.11 Testing and Debugging Services „ Besides loading values that were saved from the Input dialog box.1..  Results from a service you run in Developer are displayed in the Results panel To examine the contents of a variable. The upper half of the Results panel displays all the variables in the pipeline. When the Input dialog box appears. you select the variable in the upper half. The Load File dialog box appears. In addition.1 275 . see “Modifying the Current Pipeline” on page 295. To view the  contents of a particular variable. webMethods Developer User’s Guide Version 7.flow:savePipelineToFile service or the Save Pipeline  commands on the File menu. click Load. Viewing the Results of the Service When you execute a service with the Run command or with one of Developer’s debugging  tools. Select the file containing the input values that you want to load.. its results are displayed in the Results panel. For information about modifying values in the  pipeline. select it in the top pane. .. Its contents are  shown in the lower half.. you can change values in the pipeline  during testing. To load input values that have been saved to a file 1 2 3 Open the service and execute it as described in “Testing Services from Developer” on  page 271.and view it in the bottom pane. For information about saving the state of the pipeline. you can also load  values that were saved using pub.

 For information about modifying an existing pipeline.util.11 Testing and Debugging Services When viewing the Results panel. see “Saving and Restoring the Pipeline”  on page 296. You can optionally load a  different pipeline or modify the existing pipeline between steps. For information about  modifying an existing pipeline.  However. you can use the Results panel to examine the pipeline at that point where you  halted the flow. you can use the Results panel to  examine the state of the pipeline after each flow step. see “Modifying the Current Pipeline” on page 295.  „ Variables that a service explicitly drops from the pipeline do not appear on the  Results panel. Instead. You may also optionally load a different pipeline or modify the  existing pipeline at this point. see “Saving and Restoring the Pipeline” on page 296.1 . For information about loading a pipeline in the Results  panel. but you cannot edit it directly. For information  about loading a pipeline in the Results panel.1. „ Variables that contain com. not just  those that were declared in the service’s input/output parameters. but because Developer cannot render the values of such objects. you can click the Details button in the error message box to examine the  state of the pipeline at the point where the exception occurred. „ When debugging a flow service in step mode. results are not displayed in the Results panel. „ Variables whose object types are not directly supported by the Developer will appear  in the Results panel. „ The Results panel shows all variables placed in the pipeline by the service. see “Modifying  the Current Pipeline” on page 295.wm.  a value does not appear in the Value column.Table objects appear as document lists in the Results  panel. see “Saving and Restoring the Pipeline” on page 296. For additional information about saving and restoring the  contents of the Results panel. „ When you use a breakpoint or the Trace to Here command to halt execution of a flow  service. „ You can save the contents of the Results panel to a file and use that file to restore the  pipeline at a later point. „ If you run a service and an error occurs. „ You can browse the contents of the Results panel. 276 webMethods Developer User’s Guide Version 7. the Value column displays the  object’s Java class message. keep the following points in mind: „ The Results panel represents the contents of the pipeline.

1 277 .  Select the field into which you want to paste the information. To copy and paste elements from the Results panel 1 Display the Results panel and select the element that you want to copy. If you paste to a field that expects… A data definition (for example. The copied element’s name (and position if it  is a member of a complex element such as a  String table. The information that Developer inserts when you paste an  element from the Results panel depends on the field into which you paste it. you can select a group of contiguous elements  by pressing the SHIFT key and selecting the first and last element in the group that  you want to copy. webMethods Developer User’s Guide Version 7. or  document list (IData [ ])). You can click the Details button to display the call stack and the pipeline at the point  where the error occurred. Developer reports the error  in a following message box. document (IData object).) 2 3 Run-Time Exceptions If a service that you run from Developer throws an exception.11 Testing and Debugging Services Copying Variables from the Results Panel You can use the Copy command to copy information from the Results panel and paste it  into other fields in Developer. the Input/Output tab. (When  copying elements from the lower half.1. (If the Paste command is not available. or a  document (IData object)) The name of an element Developer inserts… The copied elementʹs data definition. it indicates that the information cannot be  pasted into the selected field. the  Pipeline tab. then click EditPaste After. click Copy.) On the Edit menu.

11 Testing and Debugging Services The Details button shows the call stack and the pipeline . Note: You can improve performance and memory usage in Developer by caching  elements. For  example. and CHILD_C. CHILD_A. If CHILD_B is a Java service and it throws an exception..1. 278 webMethods Developer User’s Guide Version 7. let’s say you have a service called PARENT that invokes three services.1 . The Call Stack The call stack identifies which flow step generated the error and lists its antecedents.to display the call stack and the pipeline. such as services and schemas. the call stack  will look like this: Call stack from a nested service This service threw the exception. see “Caching Elements” on  page 66..  CHILD_B. For details.

Testing Services from a Browser You can use the Run in Browser command in Developer to test a service from a browser  (that is.  even if they throw the exception. When you use this command.  webMethods Developer User’s Guide Version 7. the top entry in the stack identifies the last  (that is.  CHILD_B2. If the parent itself throws the exception. If CHILD_B3 throws an exception. That is. and then passes the URL to your browser. Note that the call stack is LIFO based. the call stack will look like this: Call stack from a deeply nested service This service threw the exception. Note that when a failure occurs within a Java service.1 279 . Note:  Services invoked from within a Java service are not reported in the call stack.  it will be the only entry in the call stack. and CHILD_B3. to simulate a browser‐based client). When you use this  command to test a service. the Pipeline area represents  the state of the pipeline at the point when that service was initially called. most recent) service invoked. The Pipeline Dump The Service Failures Detail dialog box contains the contents of the pipeline at the point of  failure. Developer  prompts you for the service’s input values. The bottom entry identifies the parent service (the  one that you originally invoked from Developer). your browser (not Developer) actually invokes the service and  receives its results.1. If the Java  service made changes to these values before throwing the exception.11 Testing and Debugging Services Now let’s assume that CHILD_B is a flow service that calls three Java services: CHILD_B1. those changes will  not be reflected in the Pipeline information. builds the URL necessary to invoke the service  with the inputs you specify.

 you must have Read access to the  service. If the service has input parameters.  280 webMethods Developer User’s Guide Version 7. select  the Include empty values for String Types check box. If you want to save the input values that you have entered. „ 5 6 If the service executes successfully. 4 If you want to pass empty variables (variables that have no value) to the service.  To test a service by sending an XML file to the service. and passes it the URL.1 . click Save.  Developer excludes empty variables from the query string that it passes to the  browser. particularly  ones whose output will be formatted using output templates. empty  Strings are passed with a zero‐length value. (If an  output template is assigned to the service. When you select this option. Developer builds the URL to invoke the service with the inputs you have  specified.  Note: Only Strings and String lists are passed to the browser. If you do not select this option. launches your browser.11 Testing and Debugging Services If you are developing services that will be invoked by browser‐based clients. type the input values for each variable in the  Input dialog box or click the Load button to retrieve the values from a file. see “Entering Input for a Service” on page 272.1. If you have unsaved edits. see “Saving Input Values to a File” on page 274. the template will be applied to the  results before they are returned. emulating the way in which the service  would execute if an XML document were posted to it.  „ Testing Services that Expect XML Documents as Input If your service expects an XML document as input (that is. an error message is displayed in the browser.) If the service experiences an error. you will want to test those  services using the Run in Browser command to verify that they work as expected. For more information about  saving input values. Developer prompts  you to save them. Input values  that you save can be recalled and reused in later tests. Click OK. For more  information. On the Test menu. you  can test it using the Send XML File command. This command prompts you for the name of  the XML file and submits the file to the service. it takes a node as input). its results appear in your browser. To test a service using a browser as the client 1 2 3 Open the service that you want to test. click Run in Browser.

 For additional information about errors that occur while testing a  service.  it executes as a normal service. webMethods Developer User’s Guide Version 7. In the Select Test Mode dialog box. a mode that allows you to monitor the execution path of a flow  service and/or move through its steps one at a time. „ Working in Debug Mode When you use Developer to execute a service using the Run or Run In Browser commands. which parses it into a node  object and passes it to selected service. Click Details in the  message box to view the call stack and the state of the pipeline where the error  occurred.  Note: You can only debug one flow service at a time. an error message displays. select the XML file that you want to submit to this service  and click OK. specify whether you want the service to run in  Trace mode or Step mode and click OK. If you have unsaved edits. „ If the service executes to completion. For  more information. If the service experiences an error. see “Run‐Time Exceptions” on page 277. the server does not execute it any differently than  it would if any other client requested it. That is.11 Testing and Debugging Services To test a service that expects an XML document as input 1 2 3 4 Open the service that you want to test. it is executed in a special way that returns  results and other debugging information back to Developer after each step. see “Viewing the Results of the Service” on page 275.  In the Select File dialog box.1 281 . select Send XML File. From the Test menu. When you run a flow service in debug mode. its results appear on the Results panel. Developer  prompts you to save them. Developer submits the file to the server. Developer also allows you to test a  service in debug mode.1. However.

Executes flow steps one after another to the end of the service and  visually marks steps as they execute. these commands are not available. The green outline indicates that BRANCH on ‘/AuthorizationCode’ is the step that will execute when the next Step command is performed. When you step though a  flow service or you halt execution using a breakpoint or the Trace to Here command.1 . When you first enter debug mode.  For information about using this command. Executes flow steps one after another up to a specified point and  visually marks steps as they execute.  Note. however. The following example shows a flow service that is being executed using the Step  command. For information about using  this command. including steps in child flows. see “Using the Trace Tools” on page 284. Executes the next flow step and then halts.11 Testing and Debugging Services Entering Debug Mode You automatically enter debug mode when you select any of the following commands  from the Test menu: Command Trace Description Executes flow steps one after another to the end of the service and  visually marks steps as they execute. When a Java  service is selected. see “Using the Trace Tools” on page 284. Opens a child flow or a MAP step so that you can debug the  individual flow steps within it. Completed steps are marked with a gray outline.1. A step that is “in process” or is  the next in line to be processed is marked with a green outline. see “Tracing into a  Child Flow” on page 285.  Tip! You can remove the gray and green trace lines by using the TestReset command. see “Using the Step Tools” on page 286. processing always starts from the first step in the flow  service. see “Stepping though a Child Flow” on page 287 and  “Using the Step Tools with a MAP Step” on page 288. the BRANCH on ‘PaymentType’ step has three targets. For information about using  this command. As you can see. Trace to Here Trace Into Step Step Into Important! The debug commands are only available for flow services. the  green outline indicates which step will execute when you resume processing. For information about using this  command. For information about  using this command. that this will also end your debugging session. The gray  outline shows which path was executed. 282 webMethods Developer User’s Guide Version 7.

 you might want to execute the first few steps of a service with the Step  command and then simply trace the remainder. you might want to use Trace to Here to  execute to a particular point and then execute the remaining flow steps one step at a time.1. Resetting Debug Mode The TestReset command resets debug mode. remember that the flow step outlined in green always  indicates the current point of execution and marks the next flow step that will execute  when you resume processing. For  example. webMethods Developer User’s Guide Version 7. The  following actions also reset a debugging session:  „ Executing the Run command „ Refreshing Developer’s session on the server „ Editing the flow service  „ The service throws an exception When a session is reset. The results of this step are currently on the Results panel.11 Testing and Debugging Services Debug mode visually shows you the service’s execution path This BRANCH target was executed with its respective nested steps.  When you combine techniques. you can switch among the different debugging  commands and examine certain segments of the service more closely than others. Or. You must use this command when you  want to begin debugging the same service again from the beginning of the flow. Combining the Step and Trace Commands in Debug Mode Once you enter debugging mode. This step will be executed next. trace lines are cleared and the point of execution is set back to the  top of the flow service.1 283 .

 If you have any unsaved changes. Trace Trace to Here Trace Into Note: To trace through a top‐level service. To trace to the end of a service 1 2 Open the service that you want to trace. „ 284 webMethods Developer User’s Guide Version 7. If you want to..  „ If the service is already in debug mode.  On the Test menu.) If the service is not in debug mode. Developer traces the remaining steps. If the service takes input. and Trace Into. allow you to do this. including the  paths of all child services that this service invokes Use. you must have Execute. and Read access to all services that the top‐level service  invokes. To trace through all the services within a top‐level service. it contains many  branching sequences). Developer prompts you to save those  changes before it starts the trace..1. Developer starts the trace at the top of the  flow.11 Testing and Debugging Services The following actions do not reset a debugging session: „ Setting breakpoints „ Examining the contents of any of the other tabs associated with the service „ Saving or restoring the contents of the Results panel Using the Trace Tools If a flow service has a complex path of execution (for example.. see “ACLs and  Testing/Debugging Services” on page 111.. it is often useful to simply see which path was taken when the  flow executed. and List  access to the service. Read. Trace.  They visually mark the flow steps that are executed within a flow service. List. For more information about ACLs and the trace tools. The trace tools. Trace to Here. you  must have Execute.  starting from the current point of execution (the step outlined in green. Trace to the end of the service without tracing child services  (breakpoints are ignored in this mode) Trace to a specified point in the service without tracing child  services (breakpoints are ignored in this mode) Trace to the end of the service or the next breakpoint. click Trace.1 . you will be prompted  for its input values.

  When you initiate a trace with Trace Into.1 285 . „ 4 When Developer reaches the selected flow step. you must use the breakpoint feature to trace to that point. At this point. you may do any  of the following: „ „ „ „ „ „ Examine the contents of the Results panel. Developer starts at the current point of  execution (the step outlined in green) and traces to the selected step. In the editor. the trace starts at the top of  the flow. Select Trace to trace the remainder of the service. (Developer will trace  all steps up to. the one you select. Tracing into a Child Flow Many times. Use Step or Step Into to execute subsequent flow steps one at a time. select the flow step up to which you want to trace.  „ If the service is already in debug mode. the service you are debugging invokes other flow services (child services). you will be prompted for its input values.  Developer prompts you to save those changes before it starts the trace. Select Reset to clear the debugging session and reset the starting execution point  to the top of the service. For  information about setting breakpoints. webMethods Developer User’s Guide Version 7. If you have any unsaved changes. If the service is not in debug mode. Developer automatically opens and traces the  individual steps in every child flow that the parent invokes. save. If the  selected step is before the current point of execution. If the  service takes input. it halts. 3 On the Test menu.11 Testing and Debugging Services To trace to a specified point 1 2 Open the service that you want to trace. see “Setting Breakpoints” on page 288. Select another step in the flow service and use Trace to Here to trace to that point.)  Note: If the point to which you want to trace resides in a child of the service that  you are testing. Developer starts the trace at the top of the  flow service and traces to the selected step. Modify. and/or restore the contents of the Results panel.1. click Trace to Here. In  these cases it is useful to trace the execution paths of the child services as well as the  parent that you are testing. You do this with the Trace Into command. including the children of the  child services if there are any. but not including.

11 Testing and Debugging Services

To trace into a child service 1 2 Open the parent service that you want to test.  On the Test menu, click Trace Into. 
„

If the service is already in debug mode, Developer starts the trace at the current  point of execution (the step outlined in green) and traces the service and its  children until it reaches a breakpoint or the end of the flow. If the service is not in debug mode, Developer starts the trace at the top of the  flow and traces the service and its children until it reaches a breakpoint or the end  of the flow. If you have any unsaved changes, Developer prompts you to save  those changes before it starts the trace. If the service takes input, you will be  prompted for its input values.

„

Using the Step Tools
You use the Step, Step Into, and Step Out commands on the Test menu to interactively  execute a flow service one flow step at a time. Stepping through a flow is an effective  debugging technique because it allows you to examine (and optionally modify) the data  in the pipeline before and after each step. Additionally, if you are trying to isolate an  error, step mode can quickly help you pinpoint the offending flow step. If you want to... Execute the current flow step (the one with the green outline) Open a child flow so that you can debug the individual flow steps  within it  Return to the parent flow from a child that you have stepped into Use... Step Step Into Step Out

Note: To step through a top‐level service, you must have Execute, Read, and List  access to the service. To step through all the services within a top‐level service, you  must have Execute, List, and Read access to all services that the top‐level service  invokes. For more information about ACLs and the step tools, see “ACLs and  Testing/Debugging Services” on page 111. Note: When you step into a child flow, Developer displays the child flow in the editor. Note that at any point while stepping through a flow service, you can do any of the  following: „ Examine the contents of the Results panel. „ Modify, save, and/or restore the contents of the Results panel. „ Select a step in the flow service and use Trace to Here to trace to that point.

286

webMethods Developer User’s Guide Version 7.1.1

11 Testing and Debugging Services

„ Select Trace to trace the remainder of the service. „ Select Reset to clear the debugging session and reset the starting execution point to  the top of the service. To step through a flow service 1 2 Open the service that you want to step through.  On the Test menu, click Step.
„

If the service is already in debug mode, Developer executes the current step (the  step outlined in green) and then stops. If the service is not in debug mode, Developer enters debug mode and selects the  first step in the flow service. To execute that flow step, select Step again. If you  have any unsaved changes, Developer prompts you to save those changes before  it enters debug mode. If the service takes input, you will be prompted for its input  values.

„

Stepping though a Child Flow
Many times, the flow service you are debugging invokes other flow services (child  services). In these cases it is useful to step through the individual flow steps within a  child service, too. You do this with the Step Into and Step Out commands.  To step into and out of a child flow 1 Select the parent flow service and step or trace to the flow step that invokes the child  flow. See “To step through a flow service” on page 287 or “To trace to a specified  point” on page 285 if you need procedures for this step. On the Test menu, click Step Into. Developer opens the child flow service and selects  (but does not execute) the first step. On the Test menu, click Step to execute the first step in the child service. Repeat this  step for each flow step that you want to individually execute within the child. If you want to return to the parent flow service without stepping through the entire  child, click Step Out from the Test menu. This command will trace the remaining steps  in the child flow, return to the parent, and then select (but not execute) the next step in  the parent flow. Notes:
„

2 3 4

While you are debugging the child, you may use Trace to Here or set a breakpoint  to execute up to particular point in the child. If you select Trace or Trace Into while you are debugging the child, Developer traces  the remaining steps in the child and returns to the parent automatically. If you select Step on the last step in the child flow service, Developer  automatically returns you to the parent.

„

„

webMethods Developer User’s Guide Version 7.1.1

287

11 Testing and Debugging Services

„

You can use Step Into to step into a child flow that is nested within a child that you  have stepped into. If you select Step Into on a step that is not a flow service, Step is executed.

„

Using the Step Tools with a MAP Step
You can use the Step Into and Step Out commands to debug individual transformers in a  MAP step. To step into and out of a MAP step 1 Select the parent service that contains the MAP step and then step or trace to the MAP  step. (That is, make the MAP step the current flow step. Developer indicates this by  outlining the step in green.) See “To step through a flow service” on page 287 or “To  trace to a specified point” on page 285 if you need procedures for this step. On the Test menu, click Step Into. Developer selects on the Pipeline tab (but does not  execute) the first transformer in the MAP step. On the Test menu, click Step to execute the first transformer. Repeat this step for each  transformer that you want to individually execute within the MAP step. If you want to return to the parent without stepping through the entire MAP, select  Step Out from the Test menu. This traces the remaining transformers in the MAP,  returns to the parent, and selects (but does not execute) the next step in the parent  flow. Notes:
„

2 3 4

If you select Trace or Trace Into while you are debugging the MAP, Developer traces  the remaining steps in the MAP and returns to the parent automatically.  If you select Step on the last transformer in the MAP, Developer automatically  executes that transformer and returns you to the parent flow. You can use Step Into to step into a transformer that is a flow service. If you select Step Into on a transformer that is not a flow service, Step is executed.

„

„ „

Setting Breakpoints
A breakpoint is a point in a flow service where you want processing to halt when you  execute that flow service with certain debug modes. Breakpoints can help you isolate a  section of code or examine data values at a particular point in the execution path. For  example, you might want to set a pair of breakpoints before and after a particular  segment of a flow so that you can examine the pipeline on the Results panel before and  after that segment executes.

288

webMethods Developer User’s Guide Version 7.1.1

11 Testing and Debugging Services

When working with breakpoints, keep the following points in mind: „ Breakpoints are not persistent. They exist only during the life of the Developer  session on the current server in which you set them. When you close Developer or  refresh the session on the current server, your breakpoints are cleared. (Note that  resetting debug mode does not clear your breakpoints.) „ Breakpoints are also local to your Developer session on the current server.  Breakpoints that you set on your machine do not affect other developers or users who  might be executing or debugging services in which you have set breakpoints. „ Breakpoints are only recognized when you execute a service with the Trace Into  command from Developer. If you execute a service using any of the other testing or  debugging commands, breakpoints are ignored. „ If you are caching services by using the General area of the Options dialog box, and  your flow service has a breakpoint, you cannot clear the cache of the flow service until  the breakpoint is removed. For more information about caching, see “Configuring a  Service’s Use of Cache” on page 131. „ To set a breakpoint in a service, you must have Read access to a service. However, if  the service is invoked within another service (a top‐level service) to which you have  Read access, you can set a breakpoint on the service within the top‐level service. 

What Happens When a Breakpoint Is Encountered?
When you execute a service that contains a breakpoint or call a child service that contains  a breakpoint, the service is executed up to, but not including, the designated breakpoint  step. At this point, processing stops and will not resume until you select another one of  Developer’s debugging commands. (Remember, if you want Developer to stop at  subsequent breakpoints, you must select the Trace Into command.) To set a breakpoint on a flow step 1 2 3 Open the flow service in which you want to set a breakpoint. In the editor, select the step that will function as the breakpoint. (During debugging,  processing will halt immediately before this step). On the Test menu, click Set Breakpoint. The step’s icon turns red, indicating that it is a  breakpoint.  To clear a breakpoint from a flow step 1 2 Open the flow service in which you want to clear a breakpoint. In the editor, select the breakpoint step.

webMethods Developer User’s Guide Version 7.1.1

289

11 Testing and Debugging Services

3

On the Test menu, click Clear Breakpoint. The step’s icon returns to its normal color,  indicating that it is no longer a breakpoint.  –OR– On the Test menu, click Breakpoints to display the current list of breakpoints on the  current server. In the list, select the breakpoint that you want to clear. Click Remove.

1 2 3

Setting Breakpoints on Transformers
You can set a breakpoint on a transformer in a MAP step. When you execute a service  that contains a breakpoint or calls a service that contains a breakpoint on a transformer,  the service is executed up to, but not including, the designated breakpoint transformer. Note: Transformers in a MAP step execute in an arbitrary order. You cannot assume an  order of execution. Consequently, some of the transformers in the MAP step might  execute before Developer reaches the breakpoint, even if the transformers appear  below the breakpoint on the Pipeline tab. Likewise, transformers above the breakpoint  might not execute before the breakpoint is encountered. (These will execute when you  resume tracing.) Executed transformers have a gray outline. To set a breakpoint on a transformer 1 2 3 4 Open the flow service in which you want to set a breakpoint. In the editor, select the MAP step containing the transformer that will function as the  breakpoint. On the Pipeline tab, select the transformer that will function as the breakpoint. (During  debugging, processing will halt immediately before this transformer.) On the Test menu, select Set Breakpoint. The  name, indicating that it is a breakpoint. To clear a breakpoint on a transformer 1 2 3 Open the flow service in which you want to clear a breakpoint. In the editor, select the MAP step that contains the transformer from which you want  to clear a breakpoint. On the Pipeline tab, select the transformer from which you want to clear a breakpoint.  icon appears next to the transformer 

290

webMethods Developer User’s Guide Version 7.1.1

11 Testing and Debugging Services

4

On the Test menu, click Clear Breakpoint. Developer removes the  transformer name. –OR–

 icon next to the 

1 2 3

On the Test menu, click Breakpoints to display the current list of breakpoints on the  current server. In the list, select the breakpoint that you want to clear. Click Remove.

Viewing a List of Breakpoints
Use the following procedure to view the list of breakpoints that are currently set in your  Developer session. From this list, you can also clear and/or go to specific breakpoints. To display the list of current breakpoints 1 2 3 On the Test menu, click Breakpoints. If you want to go to a specific breakpoint, select it and then click Go to Breakpoint. If you want to clear a breakpoint, select it and then click Remove. Note: Remember, breakpoints are not persistent. They only exist during the Developer  session on the current server in which you set them. When you refresh or close your  session on the current server, your breakpoints are cleared. 

Disabling Flow Steps, Transformers, and Conditions
When testing and debugging services, you can disable flow steps and transformers. You  can also disable the condition placed on a link between variables on the Pipeline tab. The  follow sections provide more information about disabling each of these items.

Disabling Flow Steps
You use the ComposeDisable Step command to disable a step in a flow service. Steps that  you disable are not executed at run time.  Disabled steps appear dimmed when viewed in Developer. If you disable a parent step  (for example, a LOOP or a BRANCH), its children are also automatically disabled. If you  disable a MAP step, the transformers in the MAP step are also automatically disabled.

webMethods Developer User’s Guide Version 7.1.1

291

11 Testing and Debugging Services

Disabled steps are not executed at run time

Disabled steps appear dimmed in the editor.

Disabling a step is useful in many testing and debugging situations. For example, you  might want to disable one or more steps to isolate a particular segment of a flow, similar  to the way you might “comment out” a section of source code in a program you are  testing.  Be aware that disabling a step sets a persistent attribute that is saved in the flow service.  Once you disable a step, it remains disabled until you explicitly re‐enable it with  Developer.  Important! The run‐time effect of disabling a step is the same as deleting it. Disabling a  key step or forgetting to re‐enable a disabled step can break the logic of a service  and/or cause the service to fail. Developer allows you to disable any step in a flow  service, but it is your responsibility to use this feature carefully. To disable a step in a flow service 1 2 3 Open the flow service that you want to edit. In the editor, select the step that you want to disable. On the Compose menu, click Disable Step. The step dims, indicating that it is disabled.  To enable a step in a flow service 1 2 3 Open the flow service that you want to edit. In the editor, select the disabled step that you want to re‐enable. On the Compose menu, click Enable Step.

292

webMethods Developer User’s Guide Version 7.1.1

11 Testing and Debugging Services

Disabling Transformers
You can also use the ComposeDisable Step command to disable a transformer in a MAP  step. Transformers that you disable are not executed at run time. In fact, webMethods  Integration Server does not execute any of the links between pipeline variables and the  variables for a disabled transformer. Disabled transformers appear dimmed when viewed in Developer.  Disabled transformers are not executed at run time

Transformers that are disabled appear dimmed on the Pipeline tab.

Note: When you disable the MAP step, Developer automatically disables all of the  transformers in a MAP step Important! The run‐time effect of disabling a transformer is the same as deleting it.  Disabling a transformer or forgetting to re‐enable a disabled transformer can break  the logic of a service and/or cause the service to fail. Although Developer allows you  to disable any transformer or step in a flow service, use this feature carefully. To disable a transformer in a MAP step 1 2 3 4 Open the flow service that you want to edit. In the editor, select the MAP step containing the transformer that you want to disable. On the Pipeline tab, select the transformer you want to disable.  On the Compose menu, click Disable Step.  The transformer dims, indicating that it is disabled.

webMethods Developer User’s Guide Version 7.1.1

293

11 Testing and Debugging Services

To enable a transformer in a MAP step 1 2 3 4 Open the flow service that you want to edit. In the editor, select the MAP step containing the disabled transformer that you want  to enable. On the Pipeline tab, select the disabled transformer that you want to enable.  On the Compose menu, click Enable Step.

Disabling a Condition Placed on a Link Between Variables
When you link variables to each other, you can apply a condition to the link that connects  the variables. At run time, this condition needs to be true for the value of the source  variable to be copied to the target variable. During testing and debugging, you might  want to disable or remove the condition from the link to make sure that Developer  properly copies data between variables. By disabling the condition, you instruct  Developer to ignore the condition placed on the link and automatically execute the link  (copy the value from the source variable to the target variable).  Disabling the condition preserves the written expression. When you enable the condition,  you do not need to rewrite the expression.  The Pipeline tab uses a blue link (line) to indicate that properties (such as conditions and  array indexes) have been applied to the link between variables. Developer retains the  blue color even when you disable the applied condition to remind you that properties  have been set.  To disable a condition placed on a link between variables 1 2 3 4 Open the flow service that you want to edit. In the editor, select the INVOKE or MAP step that contains the link with the condition  you want to disable. On the Pipeline tab, select the link with the condition that you want to disable. In the General category of the Properties panel, set the Evaluate copy condition property  to False.   To enable a condition placed on a link between variables 1 2 Open the flow service that you want to edit. In the editor, select the INVOKE or MAP step containing the link with the condition  you want to enable. 

294

webMethods Developer User’s Guide Version 7.1.1

 Step Into. To debug the rest of the service with the new pipeline value. In the General category of the Properties panel. Keep in mind that the value is only changed for the current  debugging session. However.11 Testing and Debugging Services 3 4 On the Pipeline tab. you can modify  the values in the pipeline temporarily and continue debugging. type the new pipeline value for the variable.  you cannot modify the values of the pipeline after the service ends. Right‐click and select Modify Value. if you use Trace for the entire service. To modify values in the current pipeline 1 2 3 4 5 6 Use the Step. For example.1 295 . „ When you modify values or drop variables from the pipeline. webMethods Developer User’s Guide Version 7. Step Into. In the Results panel. When modifying the pipeline.  Click OK. you can modify the contents of the pipeline and submit those  changed values to the next step in the flow service. However. This functionality is useful for debugging. You can also drop values  from the pipeline.  you can drop them from the pipeline. if you  use Step to debug the service. The service is not permanently changed.1. if you want to see the  effect that different values for a variable have on the rest of the service. In the Modify Value dialog box. „ You cannot modify the values of unconstrained Objects and Object lists. The value is changed in the Results panel. „ You can only modify or drop existing variables. „ You cannot modify the values of recursive documents at the top level. set the Evaluate copy condition property  to True. select the name of the variable for which you want to change the  value. or  Trace to Here command.  Modifying the Current Pipeline During debugging. You cannot add new variables to the  pipeline. keep the following points in mind: „ You can only modify the pipeline when a subsequent step in the service exists to  which to pass the pipeline values. select the link with the condition that you want to enable. „ You cannot use a larger editor or have a password field when you modify String  values in the pipeline. you can modify the pipeline values for the next step in  the service. or Trace to Here command to load values into the pipeline for the  current step. the changes only apply  to the current debugging session. For example. you  can expand the document and set values at the individual element level. use the Step. However. it is not changed permanently.

 it is saved in a file in XML format.1 . For example. To debug the rest of the service with the dropped pipeline value. the ability to save  and restore the pipeline when you are debugging a service is something you may  frequently want to do. if a service is failing intermittently at run time. select the name of the variable that you want to drop from the  pipeline. The file you create can be  used to: „ Manually load the pipeline into Developer’s Results panel.11 Testing and Debugging Services To drop values from the current pipeline 1 2 3 4 Use the Step. use the Step.flow:restorePipelineFromFile  service. Right‐click and select Drop. „ Dynamically load the pipeline at run time using the pub. you  may want to insert steps to save the pipeline at various points in the service so you can  capture and examine the data that it was running against after a failure. Step Into. „ Load a set of input values into the Input dialog box when testing a service with  Developer. The variable disappears from the Results panel.1. or Trace to Here command. Keep in mind that the value is only dropped for the  current debugging session. Step Into. When you save a pipeline. Saving and Restoring the Pipeline Because the pipeline contains the data that a service operates against. Saving the Results You can save the pipeline to a file. 296 webMethods Developer User’s Guide Version 7. it is not dropped permanently. „ You can programmatically save the pipeline at run time by invoking  pub. This is useful when you want to test another service against  the current set of pipeline values or if you want to restore the pipeline to this exact state  later in the debugging process. or Trace to Here command to load values into the pipeline for the  current step. which you can use to restore the pipeline to its current  state at a later point in time. There are two ways to save the contents of the pipeline: „ You can manually save the contents of the Results panel when you run or debug a  service using Developer.flow:savePipelineToFile at the point where you want to capture the pipeline. In the Results panel.

Specify the name of the file in which you want the pipeline  saved. Developer saves the file to  IntegrationServer_directory\pipeline. To save the contents of the Results panel 1 2 Display the Results panel and click anywhere within it. When saving the pipeline. Save Pipeline to Server Select this command… Save Pipeline Locally webMethods Developer User’s Guide Version 7. If you  specify a relative path in the file name. Variables that are not XML codable are not  saved. Saving the Contents of the Results Panel Use the following procedure to save the contents of the Results panel to a pipeline file. 3 Depending on your action in the previous step. Note: If you intend to use the pipeline file to dynamically  restore the pipeline using pub. „ Empty variables and null variables are saved.flow:restorePipelineFromFile service. String  tables. This includes.  Select this command if you want to use the file to  dynamically restore the pipeline at run time using the  pub. documents.flow:restorePipelineFromFile. Strings. String lists. Right‐click and select one of the following commands:  To… Save the file to your local file system. do one of the following:  If you selected… Save Pipeline Locally Save Pipeline to Server Do this to specify the file name… Select the directory in which you want the file saved and  assign a name to the file.  use Save Pipeline to Server to save the file to the server (see  below). By default. which is where the  restorePipelineFromFile service expects pipeline files. the path is  understood to be relative to the pipeline directory.11 Testing and Debugging Services You can view a pipeline file with an ordinary text editor. and document lists.1. keep  the following points in mind: „ Only XML‐codable variables are saved. Save the file to the pipeline directory on webMethods  Integration Server.1 297 .

 Additionally. For example.) Execute the service. you will need to recompile the  service.1 .flow:savePipelineToFile service at run time. reregister it on the Integration Server. For additional information about pub.  298 webMethods Developer User’s Guide Version 7. the file is  saved relative to IntegrationServer_directory\pipeline. Restoring the Pipeline Pipeline values that you have saved to a file in the following ways can be used to restore  the pipeline: „ From the Developer’s Results panel with the Save Pipeline commands. You can use this  technique to capture the pipeline from a flow service or within a Java service.flow:savePipelineToFile.11 Testing and Debugging Services Saving the Pipeline at Run Time Use the following general steps to save the pipeline programmatically. Set the following parameter: Key filename Description A string that specifies the name of the file to which you want the  file saved. „ With the pub. it  is useful in many testing situations. If you do not specify a fully qualified path. Invoke pub. 4 5 Save the service. you can use it to replace the existing  pipeline with a different set of values when stepping though a flow service with the  debugging tools. (If you are using your own IDE. Restoring a pipeline is useful when you simply want to inspect the values in a particular  pipeline file (perhaps one that contains the pipeline from a failed service). see the webMethods Integration  Server Built‐In Services Reference. and reload its package. „ From the Input dialog box when you are testing a service with Developer. „ You can programmatically load a saved pipeline at run time by invoking  pub.  1 2 3 Open the service.flow:savePipelineToFile at the point where you want to save a copy of the  pipeline.1. There are two ways to restore the contents of the pipeline: „ You can manually load the saved pipeline into the Results panel in Developer.flow:restorePipelineFromFile at the point where you want to modify the pipeline.

...  When you load a pipeline file into the Results panel..” For procedures. 1 2 Open the service.  Developer retrieves the file from  IntegrationServer_directory\pipeline. see “Loading a Saved Pipeline at Run Time” on  page 299. Invoke pub. Restore Pipeline Locally Restore pipeline from Server Do this to specify the file name. empty flow service and display its Results panel. Select the file that you want to load.11 Testing and Debugging Services Loading a Saved Pipeline into the Results Panel Use the following procedure to load a pipeline file into the Results panel... To load a pipeline file into the Results panel 1 2 Display the Results panel.1 299 .. create a  new. do one of the following: If you selected. You can use this  technique from a flow service or from a Java service. the contents of the pipeline file  completely replaces the current pipeline.flow:restorePipelineFromFile at the point where you want to load the pipeline  file. Restore pipeline locally Restore pipeline from Server Depending on your action in the previous step. Loading a Saved Pipeline at Run Time Use the following general steps to load a pipeline file programmatically.1.) Right‐click and select one of the following commands: To. webMethods Developer User’s Guide Version 7. Load a pipeline file from your local file system Load a file that resides in the default pipeline directory  on webMethods Integration Server  3 Select. use the pub.flow:restorePipelineFromFile service instead and set its merge  parameter to “true. Specify the name of the file that you want to load. (If you simply want to inspect a saved pipeline. If you want to merge the contents of the file with  the existing pipeline..

xml. For additional information about pub. Merge the contents of the file into the existing  pipeline.. A String that specifies whether you want the contents of the file  to replace or be merged with the existing pipeline.flow:restorePipelineFromFile. restorePipelineFromFile expects to  find that file in  IntegrationServer_directory\pipeline\badPipeline. 300 webMethods Developer User’s Guide Version 7. you will need to recompile the  service. false merge To. such as loading  packages and executing services. The Integration Server creates one server log per day. Other Debugging Techniques This section describes additional tools and techniques you can use to obtain run‐time  information that is useful for debugging a service. Set merge to. if you set  filename to “badPipeline.. the file is assumed to be relative to  IntegrationServer_directory\pipeline. If you do not  specify a fully qualified path..) Execute the service. For example.  true 4 5 Save the service. Note that error messages are posted for services that the server  cannot load.. reregister it on webMethods Integration Server. see the webMethods  Integration Server Built‐In Services Reference.log The log contains information about actions that the server executes. Replace the existing pipeline with the one  from the file.1.xml”. Using the Server’s Debug Facility webMethods Integration Server maintains a log file in which it records information about  activity on the server. and reload its package.1 .  The following example shows the series of messages that are posted to server log when  the server is started. (If you are using your own IDE.11 Testing and Debugging Services 3 Set the following parameters: Key filename Description A String that specifies the name of the pipeline file. This log file resides in: IntegrationServer_directory\logs\serveryyyymmdd.

 the HTTP port records requests that it receives.0001C] [ISS.11 Testing and Debugging Services Section of server log from the start-up process 2002-05-24 2002-05-24 2002-05-24 2002-05-24 2002-05-24 2002-05-24 2002-05-24 2002-05-24 2002-05-24 2002-05-24 2002-05-24 2002-05-24 2002-05-24 2002-05-24 2002-05-24 2002-05-24 2002-05-24 2002-05-24 2002-05-24 2002-05-24 2002-05-24 2002-05-24 2002-05-24 2002-05-24 2002-05-24 2002-05-24 2002-05-24 2002-05-24 2002-05-24 2002-05-24 2002-05-24 2002-05-24 15:46:58 15:46:58 15:47:00 15:47:03 15:47:10 15:47:10 15:47:11 15:47:14 15:47:14 15:47:14 15:47:14 15:47:15 15:47:18 15:47:20 15:47:20 15:47:21 15:47:21 15:47:21 15:47:21 15:47:22 15:47:22 15:47:22 15:47:22 15:47:22 15:47:26 15:48:07 15:49:12 15:49:14 15:49:15 15:49:30 15:49:35 15:49:36 EDT EDT EDT EDT EDT EDT EDT EDT EDT EDT EDT EDT EDT EDT EDT EDT EDT EDT EDT EDT EDT EDT EDT EDT EDT EDT EDT EDT EDT EDT EDT EDT [ISS.0022C] [ISS. to Trace. the package subsystem logs information into server log when it  loads and unloads packages.0024C] [ISS. The debug level can  range from Off.0001D] [ISS.0001C] [ISS. and so forth.0005C] [ISS.0025.0098.0098.0032C] [ISS.0025.0025.0028.0023C] [ISS.0028.0021D] [ISS.0005C] [ISS.0025.0001C] [ISS. where nothing is logged. For information about writing information to the log file.  you can code your service to write information to the server log.0025.0005C] [ISS.0005C] [ISS.0025.0028. the flow manager records information in the log when it  processes a flow service.0025. Be aware that the server does not log exceptions thrown by individual services.0025.0026D] [ISS.0021C] [ISS.0005C] [ISS.  You can specify the server debug level when you start the server.0025.0028.0025.0005D] [ISS.0028. see “Writing  Information to the Server Log” on page 302.0025.0011C] [ISS.0 License Manager started Repository Manager started JDBC Connection Manager started Audit Log Manager started ACL Manager started State Manager started Service Manager started Validation Processor started Statistics Processor started Invoke Manager started Cache Manager started Transient Store DefaultStore initialized Transient Store TriggerStore initialized Trigger Dispatcher started Join Message Cache initialized Join Timeout Thread initialized Join Manager initialized Dispatcher initialized Web Container started Flow Service Manager started Package Manager started Package Replicator Manager started Loading packages Loading WmRoot package Loading WmPublic package Loading SGXOrders package Loading WmAdminResource package Loading WmAdmin package Loading WmPKI package Loading Purchasing package Loading Default package The Contents of the Server Log The server log file receives operational and error information from the server’s major  subsystems.0018C] [ISS. which can be useful for  debugging.0012C] [ISS.0100.1 301 .0004C] [ISS. However.0106.0005C] [ISS.0010C] [ISS.1.0028.0005C] [ISS.0008C] [ISS.0106.0020C] [ISS. For example. Server Debug Levels The amount and type of information that is logged by the server is determined by the  debug level under which the server or a specific facility within the Integration Server is  operating.0006C] [ISS.0106.0025.0003D] [ISS.0028.0025.0025.0026D] [ISS.0028.0002C] [ISS.0017C] [ISS.0025.0025.0028.0005C] Integration Server 6.0098. in which the server keeps an extremely  webMethods Developer User’s Guide Version 7.

There are two ways to write information to the server log at run time.flow:debugLog from a flow service or a coded service  (such as a Java service). These can be useful during debugging because  you can use them to build signals that indicate whether certain segments of code were  executed. the debug level is set.11 Testing and Debugging Services detailed log. you invoke the built‐in service  pub.  Once you start the server. see your  webMethods Integration Server administrator. You can also use them to record the run‐time value of a specific variable. The default value of  watt. For more information about  configuring server logging. Writing an Arbitrary Message to the Log To write an arbitrary message to the server log. For more information about the available logging levels.bat –debug trace (under Windows) If you do not explicitly set the debug switch when you start the server.flow:debugLog.  You may also optionally redirect server log messages to the console instead of a file  using the –log none startup switch. see “Starting the webMethods Integration Server” in the webMethods  Integration Server Administrator’s Guide.  bin\server.debug.level parameter is used. see webMethods Logging Guide. You should not run your server at the Debug or Trace levels  except for brief periods when you are attempting to troubleshoot a particular issue. you can increase  the logging level for a specific facility in Integration Server. see the webMethods  Logging Guide. You can invoke pub.1. „ Dump the contents of the entire pipeline to the log using pub. You can: „ Write an arbitrary message to the log using pub.flow:debugLog. you might set  the logging level for the Services facility to Trace. For more information about this switch and  debug levels.1 . For example.debug. When the server is running.level is Info. it inserts a text string that you specify  into the server log.flow:tracePipeline.  Writing Information to the Server Log webMethods Integration Server provides built‐in services that allow you to write  information to the server log at run time.  The following example shows the startup command you would use to start the server at  the trace debug level. the default value  specified in the watt. you can  change the debug level using the Integration Server Administrator. You might use it to post progress messages at certain points in a  service (to indicate whether certain segments of code were executed) or to record the  302 webMethods Developer User’s Guide Version 7. Instead of running the entire Integration Server at a higher debug level. When this service executes.  Important! Debug levels above Info produce lots of detail and can quickly generate an  extremely large log file. If you do not know  the debug level under which your webMethods Integration Server operates.

 For more information about debug level. Example of messages posted to server log with pub.  only the first 6 characters appear in the log.) Execute the service. level Optional.0004C] Loading LogDemo package New LogDemo:demoService begin database update database update completed To use pub. take the following general steps: 1 2 Invoke pub.0081.0005C] [ISC.flow:debugLog 2002-05-28 2002-05-28 2002-05-28 2002-05-28 16:56:12 16:56:53 16:57:56 16:57:56 EDT EDT EDT EDT [ISS.1.1 303 . see  “Server Debug Levels” on page 301. reregister it on webMethods Integration Server.0001E] [ISP. A String that identifies your service.  3 4 Save the service. Although you can assign a text string of any length to function. keep in mind that assigning a value to function will make it  easier for you to locate your service’s message when you examine the  log file. and reload its package. which means that  the message is posted to the log file regardless of which debug level the  server is running at. it is often useful to link this parameter to a  pipeline variable whose run‐time value you want to capture. the Fatal level is assumed. however. Optional.  The following example shows two progress messages (highlighted) that were posted to  the server log using pub.flow:debugLog. If the server is running at a debug  level lower than the value set in level. A String specifying the debug levels under which this  message is to be posted to the log.0028. debugLog omits the label. The String you specify  will appear in the second column of the message that debugLog writes to  server log. (If you are using your own IDE.0090. The purpose of this label is to identify which component  posted the message to the log. Set the following parameters: Key message Description A String that specifies the message that you want written to server log.11 Testing and Debugging Services value of a particular variable in the log file so you can examine it after the service  executes.  However.  This can be a literal string that you assign to message. the message is not put into the  log file. you will need to recompile the  service.0090. If you do not specify level. function webMethods Developer User’s Guide Version 7.flow:debugLog.flow:debugLog at the point where you want the service to write a message to  the server log.0004C] [ISP.  If you do not assign a value to function. for  debugging purposes.

0008C] 2 Code = 965007 2002-05-28 17:37:10 EDT [ISP.0008C] 1 postalCode = 55124 2002-05-28 17:37:10 EDT [ISP.0008C] 2 Code = 965003 2002-05-28 17:37:10 EDT [ISP. it is useful to obtain a snapshot of the  entire pipeline at a certain point in the flow.flow:tracePipeline 2002-05-28 17:37:10 EDT [ISP.0090.0008C] 2 Description = Hikes 10.0090.0090.0008C] 1 City = Apple Valley 2002-05-28 17:37:10 EDT [ISP. which puts a copy of the current pipeline in server log.0090. You can do this by invoking  pub.0008C] 1 Items[1] => 2002-05-28 17:37:10 EDT [ISP.0090.0090.0090. Example of pipeline written to server log with pub.0090.0090.0001C] --.0008C] 2 Description = MaxGear D LtWt D Carabiner 2002-05-28 17:37:10 EDT [ISP.0090.flow:tracePipeline.0090. The following example shows the start and end pipeline that was written to the server log  with pub.flow:debugLog.0008C] 2 Qty = 300 2002-05-28 17:37:10 EDT [ISP.11 Testing and Debugging Services For additional information about pub.flow:tracePipeline.START tracePipeline [5/28/02 5:37 PM] -2002-05-28 17:37:10 EDT [ISP.1 .0008C] 1 State = MN 2002-05-28 17:37:10 EDT [ISP.0090.0090.0090.0090.0090. You may  invoke pub.xml 2002-05-28 17:37:10 EDT [ISP.0008C] 2 Description = MaxGear D Quick Lock 304 webMethods Developer User’s Guide Version 7.0008C] 0 Order => 2002-05-28 17:37:10 EDT [ISP.0090.0008C] 2 Price = 175 2002-05-28 17:37:10 EDT [ISP.0008C] 1 Items[0] => 2002-05-28 17:37:10 EDT [ISP.0090.0008C] 2 Total = 2800 2002-05-28 17:37:10 EDT [ISP.0008C] 0 Buyer = Caroline Wielman 2002-05-28 17:37:10 EDT [ISP.0008C] 1 Items[2] => 2002-05-28 17:37:10 EDT [ISP.0008C] 0 filename = D:\Program Files\IntegrationServer_directory\packages\Examples\pub\goes\catalogue. see the webMethods Integration Server  Built‐In Services Reference.0008C] 2 Price = 8.0090.0090.0008C] 2 Total = 8750 2002-05-28 17:37:10 EDT [ISP.flow:tracePipeline from a flow service or a coded service (such as a Java service).0008C] 1 Street1 = 15788 Cedar Avenue 2002-05-28 17:37:10 EDT [ISP.0090. Dumping the Pipeline to the Log Sometimes when you are debugging a service.1.0090.0008C] 0 Address => 2002-05-28 17:37:10 EDT [ISP.50 2002-05-28 17:37:10 EDT [ISP.0090.0090.0008C] 1 Date = 5/25/2002 2002-05-28 17:37:10 EDT [ISP.5x50 Standard Rope 2002-05-28 17:37:10 EDT [ISP.0008C] 2 Qty = 50 2002-05-28 17:37:10 EDT [ISP.0008C] 2 Code = 896301 2002-05-28 17:37:10 EDT [ISP.0090.

 For additional information about pub.  3 4 Save the service. If the server is running at a debug level lower  than the value set in level. take the following general steps: 1 2 Invoke pub.1. see the  webMethods Integration Server Built‐In Services Reference. Fatal is assumed.flow:tracePipeline. reregister it on webMethods Integration Server. the pipeline is not written to the log file. which means that the  pipeline is posted to the log file regardless of which debug level the  server is running at. For more information about debug level.1 305 .) Execute the service. If you do not specify level. you will need to recompile the  service. Set the following parameters:  Key level Description Optional. and reload its package.flow:tracePipeline at the point where you want the service to dump a copy of  the pipeline to the server log.flow:tracePipeline. (If you are using your own IDE. A String specifying the debug levels under which the pipeline  will be posted to the log. see  “Server Debug Levels” on page 301.11 Testing and Debugging Services To use pub. webMethods Developer User’s Guide Version 7.

1.11 Testing and Debugging Services 306 webMethods Developer User’s Guide Version 7.1 .

. . . . . . . . . . . „ Invoking Methods from Existing COM and DCOM Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Building Java Services with Developer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . webMethods Developer User’s Guide Version 7. . . . . . . . . . . . „ How Java Services Are Organized on the Server . . . . . „ Building Services Using COM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Building Services Using C/C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1 307 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12 Building Coded Services 308 310 310 311 317 323 327 328 „ Basic Concepts . . . . . . . „ Building Java Services with Your Own IDE . . . . . . . . . . . . „ Building Services Using Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

  The service extracts the actual input values it needs from the elements within the IData  object. . } 308 webMethods Developer User’s Guide Version 7. This allows you to  create a library of custom code that can be accessed and executed from a flow service or  from a client application.1. For example: public final static void myservice (IData pipeline) throws ServiceException { IDataCursor myCursor = pipeline. return. } When a service is invoked. .getCursor().first( "inputValue1" )) { String myVariable = (String) myCursor. The IData Object The IData object is the universal container that services use to receive input from and  deliver output to other programs. For example: public final static void myservice (IData pipeline) throws ServiceException { return. This chapter describes how to create your own services using Java. and only one. webMethods Integration Server passes the IData object to it.  you can create customized services in a variety of program languages. . input variable: an IData object. you must wrap them to appear as a Java class to webMethods Integration  Server. The values can be any Java objects  (including IData objects).getValue().12 Building Coded Services Basic Concepts In addition to using the built‐in services that webMethods Integration Server provides.1 . It contains an ordered collection of key/value pairs on  which a service operates. When you create services in other  languages. Important! Java is the native language for services. An IData object can contain any number of key/values pairs  (elements). if (myCursor. } myCursor. .destroy(). and Visual  Basic. The keys in an IData object must be Strings. C/C++. Services Take IData Objects as Input and Return IData as Output Services take one.

insertAfter("DE". For more information about using the cursor classes. myCursor. if (myCursor. static { myObject = IDataFactory.1 309 . } For more information about using the IDataFactory class. myCursor.getCursor(). return. you can use  the getValue or setValue methods to read or write the value of that element. new Double("0.  This class also provides methods for inserting new elements.getCursor(). myCursor. myOutputVariable ). After you position the cursor on the element with which you want to work.insertAfter("MD". last. you must  position the cursor at the IData element.insertAfter( "outputValue1".1.05")).getValue(). First.first( "inputValue1" )) { String myVariable = (String) myCursor. or next element in the object. new Double("0. myCursor. } myCursor. The  class that you can use to position a cursor in an IData object is IDataCursor. and  deleting elements.html.insertAfter("VA". see the data package in the  webMethods Integration Server Java API Reference at  Developer_directory\doc\api\Java\index. see the data package in the  webMethods Integration Server Java API Reference at:  Developer_directory\doc\api\Java\index. new Double("0.045")). you get or set the data in that element. Any information that is  produced by the service and must be returned to the calling program must be written to  the IData object. . myCursor.create(). respectively. getting key names.last(). webMethods Developer User’s Guide Version 7. For example: static IData myIDataObject.destroy(). Creating IData Objects You use the IDataFactory class to create IData objects. IDataCursor myCursor = myObject.html.0")). For example: public final static void myservice (IData pipeline) throws ServiceException { IDataCursor myCursor = pipeline. .12 Building Coded Services A service returns output by inserting it into an IData object. Next. } Getting and Setting Elements in an IData Object Getting data from and putting data into IData elements takes two steps. The  IDataCursor class contains methods for performing basic cursor operations such as  placing the cursor at the first.

 if you build  a Java service in your own IDE. For example. you must insert special  comment code in your source code. Java services follow a simple naming scheme: „ The service name represents the Java method name. Since Java class names cannot contain the “. 310 webMethods Developer User’s Guide Version 7. All Java services that reside in the same folder are methods of the same class. it is the easiest language in which to build a  service. if you want that service to be recognized by Developer. „ The interface name represents the fully qualified Java class name. When you use your own IDE.  And. compile. The IDE automatically  generates an appropriately structured source file that you simply “fill in” using the built‐ in editor. you must  create all of the code yourself. it automatically combines your service  into the class file associated with the folder in which you created it. you will need to add the class file to the server yourself. webMethods Developer provides an Integrated Development Environment (IDE) that  you can use to create. How Java Services Are Organized on the Server A Java service is a public static method in a Java class file on webMethods Integration  Server.1 .  see “Building Java Services with Your Own IDE” on page 317. simple services. However.1. services that reside in nested  folders are implemented in a class that is scoped within a Java package.  webMethods Integration Server provides utilities to publish services you write in your  own IDE.12 Building Coded Services Building Services Using Java Since Java is the native language of services. the IDE automatically compiles it and registers it  on the server. When you build a Java service with Developer. Although Developer’s IDE is useful for creating small. a  service named recording. When you save the source file. you may want to  use your own Java IDE to build large services. For more information about creating Java services without using Developer. and manually copy and register the class file on the server.accounts:createAccount is made up of a Java method called  createAccount in a Java class called accounts within the recording package.” character. and publish Java services.

 For  information about this stage. you must: „ Make sure the package in which you want to create the service already exists. Stage 1 Specify the inputs and outputs of the service. For details. you assign  parameters that configure the run‐time environment for this service. For details.  „ Make sure the folder in which you want to create the service already exists. Specify the service’s run-time parameters. but  recommended.1 311 . Stage 2 Stage 3 Before you create a Java service. see “Setting Run‐Time Options for a Java  Service” on page 317. For details. see “Creating a Package” on page 72. For information about this stage. If the folder does  not already exist.1. For information about  this stage. you write your  program in Developer’s IDE. Create the Java service using Developer. see “Generating Java Code from Service Input and Output  Parameters” on page 315. webMethods Developer User’s Guide Version 7. If the package  does not already exist. you use the Java service editor and its Shared tab to create your  source code. This class has the same name as the folder. you define the service’s inputs and  outputs (if you know these) in Developer’s IDE. use Developer or the Integration Server Administrator to  create it. During this stage. It is like a template you  “fill in” with custom Java code. see “Locking Java and C/C++ Services” on  page 91. Standard blocks of required code appear in the shaded  areas at the top and bottom of the tab. „ Make sure that all Java and C services are unlocked or locked by you in the folder in which you  want to create the new service. Important! All Java services that belong to the same folder reside in the same Java class  file.  Using the Developer IDE In the Developer IDE.12 Building Coded Services Building Java Services with Developer The following describes the basic stages involved in creating a Java service with  Developer. see “Creating New Elements”  on page 41. During this stage. You cannot alter the code in these areas. see  “Creating a Java Service with Developer’s IDE” on page 314. This stage is optional. During this stage. The Java Service Editor You use the Java service editor to build the body of your program. use Developer to create it.

1. When you build a Java service. You use the Java service editor to write the body of your service Type your code in here. you type (or paste) your code in the text box in the Java  service editor.1 . The following example shows a service that gets two values from the  pipeline and uses them to compute a sales tax. 312 webMethods Developer User’s Guide Version 7. The required code at the top of the Java service editor defines a static and final method  with a single input parameter: an IData object.12 Building Coded Services The Java service editor is like a template for building a service Developer automatically generates required code for you. It puts the computed tax into the pipeline. The block of required code at the bottom  returns the pipeline to the caller.

app.server. When you create a Java service with Developer. shared) attributes of this class. You use the Shared tab to specify the common attributes of the class The Extends field allows you to specify a super class for the implementation.wm. required imports. You are not  required to specify a super class.12 Building Coded Services The Shared Tab You use the Shared tab to the specify common (that is. like retrieving the current session ID and formatting error messages. Note: It is useful. For example. This class includes static methods for various  common tasks. get. The Implements field specifies the names of Java interfaces that you want to implement in  the extended class. The Imports field specifies the names of additional Java packages whose classes are  available to the current class. This  includes the superclass and interface declarations. The code on this tab is shared by all  services in this folder. several Java  packages are automatically added to the import list.Service.1. you  might use the Source field to define an account table and the methods to used to access it  for a set of services that create.b2b. and delete account information.1 313 . The Source field allows you to define global variables and methods that are shared by all  services in the current folder. but not necessary. to extend the class  com. and member  variables that are shared but not exposed as services. webMethods Developer User’s Guide Version 7. This is useful for building shared data structures and  supporting functions that are not intended to be exposed as services.

In the Name field. Creating a Java Service with Developer’s IDE The following procedure describes how to create the source code for a Java service using  Developer’s IDE. click New.. see the webMethods  Integration Server Java API Reference in Developer_directory\doc\api\Java\index. If you specify a superclass.. specify these using the  Input/Output tab. For information  about Java classes provided with webMethods Integration Server.. Note: You can use Developer to automatically generate Java code that gets and  puts those input and output values in the pipeline. 8 314 webMethods Developer User’s Guide Version 7.12 Building Coded Services Note: Because services are implemented as static methods. see “Generating Java Code from Service  Input and Output Parameters” on page 315. next to Folder. In the New Java Service dialog box.html. 7 Type the code for your service at the top of the Java service editor.1. Click Finish. If you want to make additional methods and/or structures available to the service.  complete the following fields on the Shared tab. Click Java Service and click Next. To create a Java service with Developer 1 2 3 4 5 6 On the File menu. type a name for the service. most shared code is usually  static as well.1 . For more information about  automatically generating Java code. Extends To specify. If you know the set of inputs and outputs your program uses. type its Java class name  (fully qualified if necessary). The name of the superclass (if any) of which this class is an  extension. select the folder into which you  want to save this service. Use this field..

 Do  the following to ensure the Integration Server can locate the Java compiler: a b c Ensure that a Java compiler is installed on the same machine as the Integration  Server.util. java. webMethods Developer User’s Guide Version 7. you can declare the service’s input/output parameters first and generate Java  code from it..wm. „ Type the name of a valid Java class name (for example. „ Type the name of a valid Java class name (fully qualified if  necessary)..1 315 . You do not need to type the “import”  keyword.  click   on the toolbar to save and compile the service.  Generating Java Code from Service Input and Output Parameters If.Table) or a package import specification (for  example. you know the set of inputs and outputs that it  will use. Developer displays an error message. When you finish specifying your code in the Java service editor and on the Shared tab. Source 9 Data structures. before you start writing your service. Implements To specify.12 Building Coded Services Use this field..util. and other Java code that you want to  make available to all services in this folder.*). 10 If Developer cannot compile the service because the Integration Server to which you  are connected cannot find a Java compiler. This code gets the specified input values from the pipeline and assigns them  to variables in your program. You do not need to type the “implements”  keyword. It also puts the output values into the pipeline. Take the following steps to specify each interface that  you want to implement: „ Click   to add a new row to the list. Take the  following steps to specify each package that you want to import: „ Click   to add a new row to the list. The names of interfaces within the superclass that this class  implements.  Add the location of the Java compiler to the system path of the machine where the  Integration Server is installed.  com.. Imports The names of Java packages that this class imports.1. methods.  Restart the Integration Server.

 see “To declare input and output parameters for a service” on page 126.getCursor(). regardless of what is declared as its input/output parameters. Note: webMethods Integration Server returns everything that your service puts into  the pipeline. "Tax" ). click Generate Code. pipelineCursor. IDataUtil. When Developer generates code from the service input/output parameters. it puts the  code on the Clipboard. "Amount" ).getString( pipelineCursor.destroy(). select  those variables. For more information about defining inputs and outputs for a  service. use Developer to create a new.1 . On the Code Generation dialog box. pipelineCursor_1. StringState = IDataUtil. "State" ). empty Java service that  you will use only for the purpose of declaring a set of input/output parameters).getString( pipelineCursor. It simply provides a formal description of  what the service requires as input and produces as output. Declaring  a serviceʹs input and output parameters does not filter what variables the service  actually receives or returns at run time. "Tax". you can paste it into your program (at the top of the  Java service editor or in your own IDE) and modify it as necessary.12 Building Coded Services For example. 2 3 4 5 316 webMethods Developer User’s Guide Version 7. From there.put( pipelineCursor_1.1. if the Input/Output tab for the service defines the following variables as input  and output: Input Variable Name State Amount Output Variable Name Tax Type String String Type String Developer will generate the following Java code for your service: // pipeline IDataCursor pipelineCursor = pipeline. select For implementing this service and click Next.destroy(). On the Tools menu. Click the Input/Output tab and define the inputs and outputs for this service if they are  not already specified. To generate Java code from the service input/output parameters 1 Open the Java service for which you want to generate code (if you are creating the  Java service in your own IDE. StringAmount = IDataUtil.getCursor(). // pipeline IDataCursor pipelineCursor_1 = pipeline. If you want to generate code for a subset of the variables on the Input/Output tab.

  you need to understand exactly how Java services are stored on webMethods Integration  Server.. For information about using these  options. „ The results of the service are maintained in cache. Under this. see “Specifying Run‐Time Parameters” on page 129 and “Assigning an Output  Template to a Service” on page 127. a package called “purch” would have the following directory structure: IntegrationServer_directory\packages\purch\ns webMethods Developer User’s Guide Version 7.. These options determine whether: „ The service runs in stateless mode. Each package on webMethods Integration Server has a namespace directory. Specification Which fields? Specify. you can set options to specify the  run‐time behavior of the service. Whether you want to generate code for all variables in the  Input/Output tab or just the selected variables. Setting Run-Time Options for a Java Service When you create a Java service with Developer. 7 8 Click Finish.”  For example.  The Namespace Directory To successfully publish (install) a Java service that you have created with your own IDE... Building Java Services with Your Own IDE There may be times when you want to use your own IDE instead of Developer to build a  Java service.12 Building Coded Services 6 Specify the following options. You specify these options in the Properties panel. or both.1. Whether you want to generate code for the input variables. called “ns. Developer generates code and places it on the Clipboard. Paste the contents of the Clipboard into your source code.1 317 . the  output variables. „ An output template is applied to the service when it is invoked by a browser.

 if you build a Java service  in your own IDE. An “entry” in  the namespace directory corresponds to a service or a folder. and Java or XML source if the source is available for that service.1. information about the service is stored in the namespace directory. You must name the files and  intermediate directories according to the name of the service you are installing.  However. do not modify this information  by hand. if available. it automatically updates and maintains  the folder and service information in the namespace. This information is usually limited  to Java source for the services in that folder. can disable your server. „ Service entries contain information about properties of the service (for example.class When you use Developer to build a Java service. the source file for the recording accounts services shown in Appendix E. Only modify this information using the appropriate webMethods tools or  utilities.12 Building Coded Services The ns directory contains information about the services in that package. save its source file in this directory (subject to  the normal Java constraints based on package declarations). The following shows the directory path to the class files in the purch  package. Important! Although you may want to examine the contents of the namespace  directories on your webMethods Integration Server. Inappropriate changes. the compiled code for that service (that is. IntegrationServer_directory\packages\purch\code\classes\recording\ accounts. „ Folder entries contain information about the folder. the input and output parameters of the service (if they have been  defined).java 318 webMethods Developer User’s Guide Version 7. The contents of each entry  depend on what kind of entry it is. if it is available. For  example. For Java services. The Source Code Directory Each package on the server has a source subdirectory that holds the Java source code for  that package.  statelessness). However. When you finish coding your Java service. the class file) is stored in the code  subdirectory. you must use a utility called jcode to compile your service and generate  the necessary files in the namespace. especially to the ns directory of the WmRoot  package.1 . “jcode  tags” would have the following path: IntegrationServer_directory\packages\purch\code\source\recording\ accounts.

 use Developer to create an empty Java template that you can  use a guideline for coding your own service (see “Creating a Java Service  with Developer’s IDE” on page 314).server.wm. com. Specify the input and output parameters (signature) of the service. The Basic Stages The following describes the basic stages involved in creating a Java service with your  own IDE. The following code  shows the basic framework for a Java service: public final static void myservice(IData pipeline) throws ServiceException { return.wm.ServiceException.data.b2b.app.data. „ For performance reasons. } Note: Services can throw ServiceException. com. You  can use Developer to generate the input and output code that you can  paste into your program (see “Generating Java Code from Service Input  and Output Parameters” on page 315).app. During this  stage.1. Do not call Service. you define the service’s inputs and outputs (if you know these). it is also recommended that you make your class final.  „ Your Java class must import the following Java packages.throwError.Service.b2b. Stage 2 webMethods Developer User’s Guide Version 7. It takes a single instance of  com. During  this stage. See the webMethods Integration Server Java API Reference in: Developer_directory\doc\api\Java\index. Stage 1 Create an empty Java service using webMethods Developer (optional).1 319 . „ Your Java class must be public.IData as input and returns output in the pipeline.  Additionally.*.12 Building Coded Services Writing the Source Code for a Service Your service must be written as a method that takes an IData object as input.wm.wm. com.server.html for a description of these classes. A Java service is a method that is public and static. Using the webMethods API webMethods Integration Server provides classes that you can use with Java services that  you build.

Saving and compiling your code using jcode (optional). To use this utility successfully. <<IS-START-IMPORTS>> --com.*. see “jcode Example” in Appendix E. see “Using the jcode Utility” on page 321. .*. For  additional information about the jcode utility. During this stage. During this stage. see the next section “Using the jcode  Utility”. <<IS-END-IMPORTS>> --- You use similar tags to mark the beginning and end of other components in your source  code.wm. . Publish the service to the webMethods Integration Server. you write and  compile your program in your IDE. 320 webMethods Developer User’s Guide Version 7. you must annotate your source code with jcode tags  (specially formatted Java comments) to “mark” the following segments of code: „ Imports „ Shared code within the class „ Service definitions and service inputs and outputs The following code fragment shows the tags used to mark the beginning and end of the  import section. you  can make your source code available for editing by Developer by using  the jcode utility. see “Writing the Source Code for a Service” on page 319. java.1.data.1 . // --import import // --. For more information about this  stage. “jcode tags”. For information. . During this stage. . you use the jcode  utility.util. see “Commenting Code for the  webMethods Integration Server” on page 320. Stage 4 Stage 5 Commenting Code for the webMethods Integration Server To install your finished service on the webMethods Integration Server. For  information. you  register your service on the Integration Server using the jcode utility. For a complete example. .12 Building Coded Services Stage 3 Create the Java service using your IDE.

You must use the make and fragment modes to run your services on webMethods  Integration Server and edit the source code from Developer. For instance. webMethods Developer User’s Guide Version 7.server. and fileList is a list of the names of source files to  compile. „ Fragment Mode (for pulling apart source code and storing fragments and signatures in  the namespace). as well as any errors that were encountered during  the process.1. The jcode utility  will report which files were compiled.compile property to a new command line  (using the arguments described above).  Make Mode You use this mode to examine source files for one or more folders in a package and  compile those that have been modified since they were last compiled. „ Composite Mode (for rebuilding the source files from fragments in the namespace).  If you do not have the JDK installed. Jcode operates in three basic modes: „ Make Mode (for compiling Java source code).12 Building Coded Services Using the jcode Utility When you finish creating and annotating your source code. you would set  this property to: jikes +E –nowarn –classpath pathName –d classDir fileList Fragment Mode You use this mode to update the Java code fragments and service signatures (input and  output parameters) in the namespace based on the jcode tags in the source code file. The  original source file is not modified. Important! Before you can compile a service using jcode. javac using the  following command: javac –classpath pathName –d classDir fileList Where pathName is the classpath to use for the compile. or you want to use another compiler. classDir is the destination  directory for the compiled classes. To make all the code in a package. you can set  webMethods Integration Server’s watt. you must set the environment  variable IS_DIR to point to the directory in which webMethods Integration Server is  installed. type the following on the command line: jcode makeall Package To compile source files. you use the jcode utility to  compile it and store its service information in the ns directory.1 321 . but namespace information is updated and the source  code for the service becomes available through Developer. the jcode utility invokes the JDK Java compiler. to use IBM’s jikes.

Other jcode Commands Because the two‐step process of making and fragmenting source code is so common.source=Unicode | UnicodeBig | UnicodeLittle. type the  following at the command line: jcode update Package To update (make and frag) all the code in all packages on webMethods Integration  Server.  The default value of this property is  “javac -encoding Unicode -classpath {0} -d {1} {2}”. User locks in Developer will not prevent this. To  update (make and frag) all the folders within a package which have changed. type: jcode hailmary 322 webMethods Developer User’s Guide Version 7. The default value  is file. if there is one. since the jcode  utility operates independently of locking functionality. set the property  watt. The “update” mode makes and fragments only source files which have changed. You use this mode to build a source  file based on the code fragments currently defined in the namespace. When Unicode is set. is overwritten by the source file  produced by jcode. the compile command line specified in the  property watt.java.unicode is used. To construct a source file based on the current information in the namespace.  Important! The existing source file.server.1 .compile. type the  following on the command line: jcode comp Package Folder Important! If your Java source code contains any non‐ASCII characters.1.encoding.  there are several shortcuts built in to jcode.12 Building Coded Services To fragment all the code in a package.server. type the following at the command line: jcode upall To force a make and frag on all packages on webMethods Integration Server. a single Java source file). type the  following on the command line: jcode frag Package Folder Composite Mode Composite mode is the opposite of fragment mode. type the following on the command line: jcode fragall Package To fragment only the code for a single folder (that is.

 For more information  about creating a package. For information about creating a specification. the make file places the compiled service (a DLL) in this  directory. It also  inserts your service’s output variables into the pipeline. When you compile  your C/C++ service. „ Make sure the folder in which you want to create the service already exists. it creates code that extracts the specified  input values from the pipeline and assigns them to variables in your program. (If you do not have  Developer or Administrator privileges. webMethods Developer User’s Guide Version 7. For details. If the folder does  not exist. see “Creating a Package” on page 72. create it using webMethods Developer. You supply this information  in a specification.  These files include: „ A Java service that calls your C program. To do this. When Developer  generates the starter code for your service. Before you create a C/C++ service. see “Creating New Elements” on  page 41.12 Building Coded Services Building Services Using C/C++ You can use Developer to build a set of starter files you can use to create a C/C++ service. ask your server administrator to do this. and Specifications”.) „ Make sure the directory for this package contains a “code/libs” directory. „ Declare the input and output parameters for your service in a specification. use Developer to create it. IS Document Types. see Chapter 9. Developer must  know the input and output requirements of your service. „ Make sure the package in which you want to create the service already exists. If the package does not already have a code/libs directory. If the package  does not already exist. create one before  you begin building the service. „ A C/C++ source‐code “template” that you use to create your C program. „ A make file you use to compile the finished program and place it on the server.1 323 .1. you must: „ Make sure you have a C compiler installed on webMethods Integration Server that you  will use to develop and test the service.  “Creating IS Schemas.

Click Finish.1. 6 7 The Java Code for a C Service When you build a C/C++ service. type a name for the service and click Next.dll files located in IntegrationServer\lib       to the        IntegrationServer directory        where IntegrationServer is the directory in which you installed the             Integration Server.  which makes it possible to include it in a flow service and link its inputs and output on  the Pipeline tab.12 Building Coded Services Note: If you are running the Integration Server as an NT service. Developer builds a Java service that calls a DLL. in the list next to Folder. you must  complete one of the following: „  Set the Windows system environment variable PATH to include      IntegrationServer\lib                ‐OR‐ „  Copy the wmJNI. 324 webMethods Developer User’s Guide Version 7. Click Next.  Generating Files for a C/C++ Service If you have satisfied the prerequisites identified above. select the folder into which  you want to save this service. To generate C/C++ project files 1 2 3 4 5 On the File menu. Select the platform that describes the machine on which your webMethods  Integration Server is running (Developer needs to know this in order to build the  right make file). The Java service is the means by which your C  program is exposed to clients (IS clients invoke this Java service. In the Name field. which  you create by writing a C program. The Java service also supplies the input/output parameters for the program. not the C program  directly).1 . Select the specification for this service. you can use the following  procedure to generate the files that you need to build a C/C++ service. In the New C Service dialog box.dll and wmJNIc. Click C Service and click Next. click New.

 but other than  that.1. this service contains everything you need. The C service editor contains code that calls the Java wrapper for the C program The Shared tab contains code that loads the library containing the C program webMethods Developer User’s Guide Version 7. You  may add your own custom code to the C service editor or its Shared tab if you want to  execute any special procedures before or after the C program is called.1 325 .12 Building Coded Services Developer generates all the Java code needed to successfully call your C program.

 You can  also refer to webMethods C API for information about how to use the webMethods  C/C++ API to make the data in your service available to other services.) 3 Edit the serviceNameImpl. if your service name is PostPO. (This step is taken to  maintain a copy of the original source file to which you can refer.c to PostPOImpl. or revert back to.  To build the C/C++ source code 1 2 Locate the source code and make files.html.c For example.12 Building Coded Services The Input/Output tab declares the input/output parameters for the service Building the C/C++ Source Code Developer also generates a source code file and a make file for you. This is the  file in which the make file expects to find your source code. You create the program in the serviceNameImpl.  during your development. Copy the source code file to a new file (in the same directory) with the following file  name:  serviceNameImpl. This file is  located in Developer_directory\doc\api\c\index.1.c.1 . not the original file. you would copy PostPO.c file as necessary to build your service. 326 webMethods Developer User’s Guide Version 7.c file. It places these files in  the following directory: IntegrationServer_directory\packages\packageName\code\source The names of the files will match the service name you specified in Developer.  This file will contain instructive comments that will guide your development.

 Following is a  typical make command: make –f SalesTax. see “Invoking Methods from Existing COM and  DCOM Objects” on page 328. For details on testing. your program will not compile successfully).1.. This allows you  to use existing COM APIs written in Visual Basic or Visual C++ without writing  low‐level bridging code. run your make file to compile it. For details.mak The make file compiles your program and puts the finished DLL in the code\libs  directory in the package in which the service resides (if this directory does not exist  when you run the make file. You can: „ Invoke methods/properties on existing COM or DCOM objects. The directory in which webMethods Integration Server is  installed.12 Building Coded Services 4 Edit the make file to customize it for your development environment. Important! The source code file serviceName. restart webMethods Integration Server to  reload the code\libs directory.. To the directory that contains the Java Development Kit.. „ Create services using COM. For more information about generating source code files for a  C/C++ service. indistinguishable from their  Java counterparts.1 327 . Developer does not update the serviceName. If you edit the specification. see Chapter 11. see “Generating Files for a C/C++ Service” on page 324. you need to  regenerate the source code file. These objects (compiled into ActiveX  DLLs or EXEs) can then be registered as native services..c file  automatically. webMethods Integration Server includes libraries for use in  your own Visual Basic or Visual C++ code. webMethods Integration  Server includes built‐in services for instantiating any COM or DCOM object  registered on your system and invoking its methods and properties. Set the  following path settings: Set. Building Services Using COM There are two ways in which you can use COM objects with webMethods Integration  Server. webMethods Developer User’s Guide Version 7. “Testing  and Debugging Services”. 6 Once your program compiles successfully. JDKDIR SEVRDIR To. This makes the service available for execution and  allows you to test it with Developer.c contains code based on the  specification you selected for the service. They allow you to create COM objects that  perform work on webMethods data structures. 5 After you finish coding your service.

 the dispatch services can help.1. LOCAL_SERVER  (EXE). For example.  You need to provide this service with the following inputs: Name progid   –OR– guid context server user password domain The Globally Unique Identifier (GUID) of the object that you want to  invoke. Optional. DCOM only. In  these cases.COM. DCOM only.rubicon.1 . DCOM only. For example.com or 128. 328 webMethods Developer User’s Guide Version 7.001. The TCP/IP domain name of the machine where the DCOM  object is located. The context for the object. do not use the debug mode in the Visual Basic  development environment to test your code.dispatch:createObject service (located in the WmWin32 package) will create  an object given a Program ID or the Globally Unique Identifier (GUID) for that object.  Optional.2 or later. doc. Description The program ID of the object that you want to invoke. DCOM only.12 Building Coded Services Requirements To use webMethods Integration Server with COM or DCOM. your webMethods  Integration Server must be running Java Virtual Machine 1.  Optional. Note: The WmWin32 package is deprecated for Integration Server 7.111. It may not be sensible or desirable to wrap this object with a service if  the component is simple enough and/or part of an existing.222. you may have a  COM object that performs a validation routine on a String and returns an encrypted  String in response. use a logging feature  in your development environment to test the code. The password associated with user. The Windows domain associated with user. (The debugger does not maintain  references to webMethods Integration Server libraries. which is INPROC (DLL). Creating the Object The win32. unmodifiable application. Invoking Methods from Existing COM and DCOM Objects You can use webMethods Integration Server to access methods in existing COM and  DCOM libraries that do not use webMethods IData objects. The name of the user in which to launch the  remote COM object. or REMOTE_SERVER (EXE).) Instead.1. Important! If you modify Visual Basic code intended for use with webMethods  Integration Server libraries.

dispatch:invoke. PUTREF) to be  performed on dispName.12 Building Coded Services The service will return a reference to the object called pDispatch or throw an error if the  object cannot be created. examine  the component’s type library using OLEVIEW or a Microsoft  development environment. you may have to create this value within your  own service. always set  accessType to GET. by default. The type of operation (METHOD.” If the result is an  object variable.  If you are unsure whether a dispName is a method or property.1 329 . The name of the COM method or property that you want to invoke. Incorrect setting of this parameter will cause the  invoke to fail. To view the package and access its  services within Developer. first enable it using the Integration Server Administrator. You need to supply this service with the following inputs: Name pDispatch dispName accessType Description An object reference previously obtained by the call to createObject or  obtained in the result value of a previous call to invoke. Optional. but is in reality an Object array. Tip! The WmWin32 package is installed with the Integration Server on Microsoft  Windows platforms but.1. is not enabled.  Invoking the Object To invoke methods or properties on this object once you have created it. This is exposed in Developer as  an array of Strings for usability (because Objects cannot be manipulated  in Developer). params Optional. If you are invoking a DCOM object. webMethods Developer User’s Guide Version 7. it can then be the target of subsequent calls to invoke by linking the result  to pDispatch in the next invoke. use  win32. the return value is contained in “result. An object array of parameters. PUT. GET. If you need to pass  complex or native types.COM. If the invocation is successful.

1.1 .12 Building Coded Services 330 webMethods Developer User’s Guide Version 7.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . webMethods Developer User’s Guide Version 7. . . . . . „ Building a C/C++ Client . . . . . . . . . . . . . . . . . . .1. . . . . . . . . . . . . . . . . . . . .13 Creating Client Code 332 332 335 337 339 341 „ Basic Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Building a Browser-Based Client . . . . . . . . . .1 331 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Building a Java Client . . . . . . . . . . . . . . . . . . . . „ Building an Excel Client . „ Building a Visual Basic Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

 If you are using the JVM that was installed with  the Integration Server. Assumptions „ webMethods Integration Server is running. Building a Java Client You can use Developer to generate Java client code that invokes a service.1 .  do the following to obtain the files the Integration Server needs to support signed  libraries: 332 webMethods Developer User’s Guide Version 7. Client code is application code that invokes a  service on a webMethods Integration Server. „ A fully functional JDK is installed.1. no further action is needed. If you are using a different JVM. It typically performs the following basic  tasks: „ Prompts the user for input values (if your service takes input) „ Places the inputs into an input document (if your service takes input) „ Opens a session on webMethods Integration Server „ Invokes a service „ Receives output from the service „ Closes a session on webMethods Integration Server „ Displays the output to the user The client code that Developer generates can serve as a good starting point for your own  development.13 Creating Client Code Basic Concepts webMethods Developer enables you to automatically generate client code in a variety of  languages and for several environments.

4. If you are using a different  provider.* Do the following..ibm.jar and US_export_policy.4. „ You are using one of the cryptographic service providers (CSPs) that webMethods  Integration Server provides (Sun.. webMethods Developer User’s Guide Version 7.4.*. the classpath must contain the  following: webMethods_directory\common\lib\ext\enttoolkit.*.4.*. Entrust.com/developerworks/java/jdk/security/.com/developerworks/java/jdk/security/.jsp. you will need to modify the client code that  Developer generates.  „ The client code that Developer generates does not support multiple input or output  variables with the same name. download the files from  http://java. it ignores input or output variables that are of  type Object or Object list.1.jar and US_export_policy.  If these files are not installed. download the files from  http://www‐106.1 333 .ibm.jar) are installed as part of  your JVM installation. or IAIK).13 Creating Client Code If your runtime JDK is.. download the files from  http://java.jar Limitations „ When Developer generates client code.* Ensure that the unlimited strength jurisdiction policy files  (local_policy. JDK 1.1/download. download the files from  http://www‐106.*. Developer replaces any space in a variable  name with an underscore.  If these files are not installed. If you want to override these limitations. JDK 1.html/. „ When Developer generates client code. „ If you are running the IBM JDK 1. „ If you are running the IBM JDK 1.5.sun. IBM.jar webMethods_directory\common\lib\ext\mail.. download them as follows: „ If you are running the Sun JDK 1.5.com/javase/downloads/index.com/j2se/1.jar „ If you want to use any classes in the Entrust Toolkit. Ensure that the unlimited strength jurisdiction policy files  (local_policy. „ Your classpath consists of at least the following:    webMethods_directory\common\lib\wm-isclient.sun.jar) are installed as part of  your JVM installation.5. download them as follows: „ If you are running the Sun JDK 1. Client code is not generated for these variables. the libraries supplied by that provider must be digitally signed.

 Developer creates the directory.13 Creating Client Code Procedure Use the following procedure to generate Java client code that invokes a service: To generate Java client code that invokes a service 1 2 3 4 5 Open the service for which you want to generate client code.html. The Java client code is written to the hard disk in ISO8859_1. select For calling this service from a client. and then click Next. On the Tools menu. An example file.java) and  a Readme. the  character set in which the file is encoded. It is not intended for use “as is” in custom  applications. Specify the directory where you want Developer to place the generated client code. File Name Readme. Click Finish. Documentation for the Java API can be found at  Developer_directory\doc\api\Java\index.txt Description A file that contains information and instructions for the Java client  code. You can update the client  code to invoke built‐in services and to use the provided Java API.java 334 webMethods Developer User’s Guide Version 7. select Java. To complete your client application. that contains the  application code for the Java client. Developer generates the file that contains the Java client code (ServiceName. 6 Files that Are Generated This section describes the files that Developer generates for a Java client application.  Either select an existing directory or type the path for a new directory. For information  about the built‐in services that are available. and then  click Next.1 . ServiceName. click Generate Code.txt file located in the same  directory as your client code. The application code includes  a rudimentary user interface that uses the classes in the  FolderName directory. If you type the  path for a new directory. In the Language field. Modify the generated client code to meet your site’s needs.1.txt file. refer to the Readme. see the webMethods Integration Server  Built‐In Services Reference. In the Code Generation dialog box. Refer to this file for information about compiling and  running the Java client application. encoded in ISO8859_1.

13 Creating Client Code

Building a C/C++ Client
You can use Developer to generate C/C++ client code that invokes a service.

Assumptions
„ webMethods Integration Server is running. „ A platform that has the C/C++ compiler (for example, GCC) is installed. webMethods  generates code for the following platforms: Windows, Solaris, HP‐UX, Linux, AIX. „ The wm‐isclient.jar file is in the classpath for Developer. The client.jar file is a  webMethods file that is located in the webMethods_directory\common\lib directory.  „ The Make facility is installed. „ JDK 1.1.x is installed (if you intend to use the C libraries provided with Integration  Server and Developer).  Important!  The provided C libraries are built using JDK 1.1.7. If you want to use a  different version of the JDK to compile C/C++ services, you need to rebuild the C/C++  libraries with that JDK and then replace the old library files with the rebuilt ones. For  more information about rebuilding the C libraries, see the README installed with  the C/C++ SDK.  To rebuild the C libraries, you need use the C/C++ SDK. The C/C++ SDK is not  installed by default. To install the C/C++ SDK, select it from the list of installable  components during installation.

Limitations
„ The client code that Developer generates does not support multiple input or output  variables with the same name. „ When Developer generates client code, Developer replaces any space in a variable  name with an underscore.  If you want to override these limitations, you will need to modify the client code that  Developer generates.

webMethods Developer User’s Guide Version 7.1.1

335

13 Creating Client Code

Procedure
Use the following procedure to have Developer generate C/C++ client code that invokes a  service: To generate C/C++ client code that invokes a service 1 2 3 4 5 Open the service for which you want to generate client code. On the Tools menu, click Generate Code. In the Code Generation dialog box, select For calling this service from a client; then click  Next. In the Language field, select the C/C++ platform for which you are creating client code.  Click Next. Identify the directory where you want Developer to place the generated client code.  Either select an existing directory or type the path for a new directory. If you type the  path for a new directory, Developer creates the directory. Click Finish. Developer generates the file that contains the C client code (ServiceName.c), a file that  contains compiling settings (ServiceName.mak), and a CReadme.txt file. Modify the generated client code to meet your site’s needs. You can update the client  code to invoke built‐in services and to use the webMethods C API. For information  about the built‐in services that are available, see the webMethods Integration Server  Built‐In Services Reference. For documentation about the C API, see  Developer_directory\doc\api\C\index.html. To complete your client application, refer to the CReadme.txt file located in the same  directory as your client code.

6

Files that Are Generated
This section describes the files that Developer generates for a C/C++ client application. File Name CReadme.txt Description A file that contains information and instructions for the C client  code. Refer to this file for information about compiling, running,  and deploying your C/C++ client application. A file that contains compiling settings for the C/C++ client. Be sure  to update this file with the correct settings for your environment. An example file that contains the C/C++ client code. It is not  intended for use “as is” in custom applications.

ServiceName.mak ServiceName.c

336

webMethods Developer User’s Guide Version 7.1.1

13 Creating Client Code

Building a Visual Basic Client
You can use Developer to generate Visual Basic client code that invokes a service.  Developer creates files that contain the layout and the code for your application.

Assumptions
„ webMethods Integration Server is running. „ Visual Basic Version 6 is installed. „ webMethods7 Type Library is installed. Note: The webMethods7 Type Library is a COM object that Visual Basic uses to  interact with webMethods Integration Server. The webMethods7 Type Library is  automatically installed when you install Developer.

Environment Setup
Your system PATH environment variable must include the following directory: webMethods7\jvm\win150\jre\bin\client

Limitations
„ The client code that Developer generates supports only input values and output  values of type String, String list, and String table. „ The client code that Developer generates does not support multiple input or output  variables with the same name. „ When Developer generates client code, Developer replaces any space in a variable  name with an underscore.  If you want to override these limitations, you will need to modify the client code that  Developer generates.

Procedure
Use the following procedure to have Developer generate Visual Basic client code that  invokes a service. To generate Visual Basic client code that invokes a service 1 2 Open the service for which you want to generate client code. On the Tools menu, click Generate Code.

webMethods Developer User’s Guide Version 7.1.1

337

13 Creating Client Code

3 4 5

In the Code Generation dialog box, select For calling this service from a client, and click  Next. In the Language field, select Visual Basic 5/6, and click Next. Identify the directory where you want Developer to place the generated client code.  Either select an existing directory or type the path for a new directory. If you type the  path for a new directory, Developer creates the directory. Click Finish. Developer generates several files, including the serviceNameReadMe.txt file. This file  contains detailed information about all the generated files. Refer to it to complete  your client application and for information about deploying your client application.

6

Files that Are Generated
This section describes the files that Developer generates for a Visual Basic client  application.

General Files
File Name ServiceName.vbp ServiceNameReadme.txt Description The Visual Basic project file. The file that contains information and instructions for the  Visual Basic client code. Refer to this file for information  about deploying your Visual Basic client application.

Files for the User Interface
File Name frmArrayInput.frm frmOutput.frm Description Contains layout and code that is used if any of the input  values for the service are of type String list. Contains layout and code that is used when the service  returns output. It also contains the Setup, Invoke, and Exit  buttons. Contains layout and code that prompts for the server  properties for the webMethods Integration Server on  which the service to execute resides. Contains layout and code that is used if any of the input  values for the service are of type String.

frmSetup.frm

frmStringInput.frm

338

webMethods Developer User’s Guide Version 7.1.1

13 Creating Client Code

File Name frmTableInput.frm wmSampleLib.bas

Description Contains layout and code that is used if any of the input  values for the service are of type String table. Contains code that is specific to the sample template that  Developer generates.

Files Containing the Code that Invokes the Service
File Name ServiceName.bas Description An example file that illustrates how to use the service class  in an application. This module is dependent on objects in  the project template that Developer provides. It is not  intended for use “as is” in custom applications. The service object. You include this object in your own  project.

ServiceName.cls

File Containing the Code that Interacts with webMethods Integration Server
File Name wmVBConnection.bas Description Code used as a layer of abstraction to interact with  webMethods Integration Server.

Building an Excel Client
You can use Developer to generate client code that executes a service from a MS Excel  spreadsheet.

Assumptions
„ webMethods Integration Server is running. „ Excel 97 or Excel 2000 is installed. „ webMethods7 Type Library is installed. Note: The webMethods7 Type Library is a COM object that Visual Basic uses to  interact with webMethods Integration Server. The webMethods7 Type Library is  automatically installed when you install Developer.

webMethods Developer User’s Guide Version 7.1.1

339

13 Creating Client Code

Limitations
„ The client code that Developer generates only supports input values of type String  and output values of type String, String list, and String table. „ The client code that Developer generates does not support multiple input or output  variables with the same name. „ When Developer generates client code, Developer replaces any space in a variable  name with an underscore.  If you want to override these limitations, you will need to modify the client code that  Developer generates.

Procedure
Use the following procedure to have Developer generate Excel client code that invokes a  service. To generate Excel client code that invokes a service 1 2 3 4 5 Open the service for which you want to generate client code. On the Tools menu, click Generate Code. In the Code Generation dialog box, select For calling this service from a client, and click  Next. In the Language field, select Excel 97/2000, and click Next. Identify the directory where you want Developer to place the generated client code.  Either select an existing directory or type the path for a new directory. If you type the  path for a new directory, Developer creates the directory. Click Finish. Developer generates several files, including the serviceNameReadMe.txt file. This file  contains detailed information about all generated files. 7 Copy the wmXLTemplate.xls file that Developer provides to the directory that  contains the client code that Developer generated. The wmXLTemplate.xls file is  located in the Developer_directory\support\Excel directory. Open the wmXLTemplate.xls file. When prompted to indicate whether you want to  enable macros, select Enable Macros. Follow the instructions in the wmXLTemplate.xls file to complete your client  application. See the ServiceNameReadMe.txt file for information about deploying your  client application.

6

8 9

340

webMethods Developer User’s Guide Version 7.1.1

13 Creating Client Code

Files that Are Generated
This section describes the files that Developer generates for an Excel client application. File Name ServiceNameReadMe.txt Description A file that contains information and instructions for the  Visual Basic client code. Refer to this file for information  about deploying your Visual Basic client application. An example file that illustrates how to use the service class  in a spreadsheet. This module is dependent on objects in  the project template that Developer provides. It is not  intended for use “as is” in custom applications. The service object. You include this object into your own  project.

ServiceName.bas

ServiceName.cls

Building a Browser-Based Client
You can invoke a service with a URL. This means that you can invoke a service by  entering the URL into your Web browser or by embedding the URL in Web pages. To build a browser‐based client, create one or more Web pages that invoke URLs for one  or more services. When webMethods Integration Server receives the first URL from a  Web browser, it creates a session for the client on webMethods Integration Server. The  session information is stored in a cookie in the browser. As the user of the browser‐based  application clicks on links to URLs that invoke services, webMethods Integration Server  uses the cookies to find session information for the client. webMethods Integration Server  keeps the session information for the client until the session expires. Sessions expire  based on the configured session time‐out value. For more information about setting the  session time‐out limit, refer to the webMethods Integration Server Administrator’s Guide. Note: You cannot use Developer to generate browser‐based clients.

Assumptions
„ webMethods Integration Server is running. „ The input values for the services you want to invoke are determined. You will need to  include the input values in the URL that you use to invoke a service.

Limitations
When you test a service using the Run in Browser command, only input values of the type  String and String list will be passed to the service. Input values of the type document,  document list, Object, and Object list will not be displayed when the Web page is served.

webMethods Developer User’s Guide Version 7.1.1

341

13 Creating Client Code

Invoking Services with a URL
First, build your Web pages using any tool you choose. To invoke the URL, use either the  HTTP GET or the POST method. In either case, use a URL similar to the following:
1 2 3 4 5

http://IS_server:5555/invoke/sample.webPageDemo/getProductCost?sku=A1&quantity=1

Item
1 2 3

Description Identifies the webMethods Integration Server on which the service you want  to invoke resides. Specifies the required keyword “invoke”, which tells webMethods  Integration Server that the URL identifies a service that is to be invoked. Identifies the folder in which the service to invoke resides. Separate  subfolders with periods. This field is case sensitive. Be sure to use the same  combination of upper and lower case letters as specified in the folder name  on webMethods Integration Server.  Identifies the service that you want to invoke. This field is case sensitive. Be  sure to use the same combination of upper and lower case letters as specified  in the service name on webMethods Integration Server.  Specifies the input values for the service. Specify a question mark (?) before  the input values. The question mark signals the beginning of input values.  Each input value is represented as variable=value. The variable portion is case  sensitive. Be sure to use the same combination of upper and lower case letters  as specified in your service. If your service requires more than one input  value, separate each variable=value with an ampersand (&). Note:  Only specify this part of the URL when using the HTTP GET method.

4

5

Note: If you are serving the Web pages that invoke services from a webMethods  Integration Server, you can use a relative URL to invoke the service. By doing so, you  can serve the exact Web page from several servers without having to update the  URLs.

Using the HTTP GET Method
To use the GET method, embed a URL that includes all the input values for the service in  the query string portion of the URL. When the server receives the URL, it translates the  input values into an IData object. For more information about how the server creates the  IData object that it sends to the service, refer to “Input to the Service” on page 343.

342

webMethods Developer User’s Guide Version 7.1.1

13 Creating Client Code

Using the HTTP POST Method
To use the POST method, create an HTML form in your Web page. Create fields in the  HTML form in which a user will supply the input information. The values you specify for  the NAME attributes of the HTML form fields should match the names of input values  that the service expects. Be sure to use the exact combination of upper and lower case  letters as specified in your service. For example, if your service requires the input values  sku and quantity, you might create an HTML form with the following fields:
<SELECT NAME="sku"> <OPTION VALUE="A1">A1</OPTION> <OPTION VALUE="B2">B2</OPTION> <OPTION VALUE="C3">C3</OPTION> </SELECT> <INPUT TYPE="TEXT" NAME="quantity" VALUE="1">

Specify the URL for the service in the ACTION attribute and “POST” in the METHOD attribute.  For example:
<FORM ACTION="/invoke/sample.webPageDemo/getProductCost" METHOD="POST">

After the user fills in the form and submits it, the Web browser creates a document that  contains the information the user supplied in the HTML form (performs an HTTP POST).  The browser invokes the URL identified in the ACTION attribute, which invokes the  service on webMethods Integration Server, and the browser posts the document that  contains the user’s input information to webMethods Integration Server. For more  information about how the server creates the IData object that it sends to the service, see  “Input to the Service” on page 343.

Input to the Service
Regardless of whether webMethods Integration Server receives a URL that uses the  HTTP GET or POST method, it creates an IData object from the input information. It then  passes the IData object to the specified service. This becomes the pipeline upon which the  service operates. To create the pipeline object, webMethods Integration Server creates two key/value pairs  for each input value: one of type String and one of type String list. For example, if the  input values contain the variable sku with value A1 and quantity with value 1, the service  is passed the following IData object: Key sku skuList quantity quantityList Value A1 A1 1 1 Data Type String String list String String list

webMethods Developer User’s Guide Version 7.1.1

343

13 Creating Client Code Note: Avoid using input variable names that end in “List. The following  shows the IData object that the server passes to the service: Key Color ColorList Value blue blue green red Data Type String String list 344 webMethods Developer User’s Guide Version 7.1. the following  shows sample HTML code that renders check boxes: <INPUT TYPE="checkbox" NAME="Color" VALUE="blue">Blue<BR> <INPUT TYPE="checkbox" NAME="Color" VALUE="green">Green<BR> <INPUT TYPE="checkbox" NAME="Color" VALUE="red">Red<BR> If the browser user selects all check boxes. For example. For example.  abcListXX). If you must use “List” at the end of your variable name. if you were to pass in variables named “sku” and  “skuList. the String list variable contains all values.  the String list variable contains all values. the String variable in the IData object contains only the value of  the first variable.1 .” Although the Integration  Server will accept variable names ending in “List. the following shows a URL that  contains two values for the variable year and the resulting IData object that the server  creates: /invoke/sample. if the HTML form contains two fields with the same name and a user supplies  values for more than one. For example. the String variable in the IData object contains only the value of the first variable.webPageDemo/checkYears?year=1998&year=1999 Key year yearList Value 1998 1998 1999 Data Type String String list Similarly. When the server receives multiple input values that are associated with the same variable  name. consider using “list”  (lowercase) or appending one or more characters at the end of the name (for example.” the resulting IData may not be  structured in the way you need. the document that is posted to webMethods  Integration Server will contain three values for the variable named Color.” subsequent “sku” and “skuList” variables in the query string may not be  placed in the IData fields as expected. if you were to pass in a variable called  “skuList.” Moreover.” the resulting IData will contain a String called “skuList” and a String list  called “skuListList.

 you can format the output  using output templates. You can use an output template that formats the output from one  service and includes a URL that invokes another service. see “Assigning an Output Template to a Service” on page 127.1 345 . webMethods Developer User’s Guide Version 7. webMethods Integration Server displays the output from a service in a HTML  Web page.13 Creating Client Code Output from the Service By default. For more information about  output templates.1. However. using a table to render the output values.

13 Creating Client Code 346 webMethods Developer User’s Guide Version 7.1.1 .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Building an Event Handler . . . . . . . . .1. . . . . . webMethods Developer User’s Guide Version 7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1 347 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Working with Transaction Events . . . . . . . . . . . . . . . . . . . . . . . „ Managing Event Subscriptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Working with Session Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Working with Replication Events . . . . . . .14 Subscribing to Events 348 350 357 359 360 362 364 366 367 368 370 372 „ The Event Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Working with Port Status Events . . . . . . . . . . . . . . . . . . . . . „ Working with Exception Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Working with Guaranteed Delivery Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Working with Alarm Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Working with Stat Events . . . . . . . . . . . „ Working with Audit Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

 you might want to use the event handler  to send notification or log information about the undelivered JMS  message. An event handler is a service that you write to perform some  action when a particular event occurs.    Audit Exception Guaranteed Delivery JMS Delivery Failure JMS Retrieval Failure 348 webMethods Developer User’s Guide Version 7. a  user is denied access to a port. Occurs when the contents of a JMS message sent from the client side  queue cause the JMS provider to throw a non‐transient error. The server generates alarm events  when a user cannot log on to the server.  Subscribe to JMS delivery failure events to capture information  about JMS messages that the JMS provider did not process  successfully. a port cannot be started. There are two types of guaranteed  delivery events: GD Start and GD End. An event is a specific action that the Event Manager recognizes and an  event handler can react to.  Occurs when a JMS trigger service ends because of a non‐transient  or transient error and Integration Server is configured to generate  JMS retrieval failure events. Subscribe to audit  events to invoke specific actions when a particular service or class of  service executes.1. For example. or sending information to a console when a port cannot be  started.1 . Subscribe to alarm  events to invoke event handlers that perform specific actions such as  notifying administrators about port access exceptions and service  failures. Occurs when a client uses guaranteed delivery to invoke a service  on an Integration Server and when the server returns the service  results to the requesting client. Occurs when a service generates audit data.14 Subscribing to Events The Event Manager The Event Manager monitors the server for events and invokes event handlers when those  events occur. the Event Manager recognizes the following types of events:  Event Type Alarm Description Occurs when Integration Server throws an exception regarding the  status or health of the server. Subscribe to GD Start and  GD End events to invoke event handlers that perform actions such  as logging guaranteed delivery transactions to a file or sending  notification. Currently. Occurs every time a service throws an exception. Subscribe to  exception events to invoke specific event handlers when a particular  service or class of service fails.  or a service cannot execute because of errors. Subscribe to JMS retrieval failure events  to invoke event handlers when JMS message processing ends in  error. an error occurs in Cluster Manager.

  Administrative actions refer to configuration changes related to  Integration Server security activities. Occur when an Integration Server begins and finishes processing a  guaranteed delivery transaction. Replication Security Session Occurs when a client starts or ends a session on the Integration  Server or when the Integration Server terminates an inactive  session. port settings. authentication. and session expire.  Occurs when the pub. There are two types of transaction  events: Tx Start and Tx End. Operational actions refer to successful and unsuccessful login  attempts to Integration Server.log). session  end. Subscribe to session events to invoke event  handlers that perform actions such as maintaining your own log  files.replicator:generateReplicationEvent service executes. password lengths. SSL configuration.1. and portlets.14 Subscribing to Events Event Type Port Status  Description Occurs each time Integration Server updates the server statistics.  Occurs when an administrative or operational security action takes  place on Integration Server and that security action is configured for  auditing. documents. and root  certificates.  The port status event provides information about the status of all  the ports configured on Integration Server. Subscribe to port status  events to invoke event handlers that perform actions such as  sending port status data to a network monitoring system or writing  port status data to a log file.  Occur each time Integration Server updates the statistics log  (stats. There are three types of session events: session start. and successful or unsuccessful access  to Integration Server services.  Subscribe to replication events to invoke event handlers that  perform actions such as notifying package subscribers when a  package is published and maintaining a log of pulled or distributed  packages. Stat events  Transaction events webMethods Developer User’s Guide Version 7.  audit settings. Subscribe to stat events to invoke event handlers that  perform actions such as maintaining your own log file or sending  server statistics to a network monitoring system. Examples of security actions  include: modification to authorization.1 349 . Subscribe to transaction events to  invoke event handlers that perform specific actions (such as sending  notification or logging information) when a particular guaranteed  delivery transaction begins or finishes processing.

 it does not generate an exception event. you should encapsulate the entire sequence within a single event handler.) „ An event handler can subscribe to more than one event. (An event handler can be any type of service. Managing Event Subscriptions You can use the Event Manager in Developer to manage all of your event subscriptions. This is true  for all event handlers but exception event handlers.) Event handlers subscribe to the events that they want to be notified of. They do not execute serially and they are not invoked in any  particular order. the execution path of the invoking service is not blocked or altered in  any way (in fact.  What Happens When an Event Occurs? When an event occurs.1. it generates an exception event. If the execution of a service invokes an event handler (as with audit and  exception events). „ If an event invokes more than one event handler. its execution is completely asynchronous of the event  that invoked it.  „ If an event handler throws an exception. the run‐time properties set on both Integration Server  and the service that generated the event. The event handlers receive an input object containing run‐time  information. such as a flow service or a  Java service. it is never even aware that it invoked an event handler).1 . „ View or edit event subscriptions. if you wanted an event handler to execute when a particular service throws an  exception. 350 webMethods Developer User’s Guide Version 7.  Once an event handler is invoked. (If you have a series of actions that must execute in a specific  sequence. all the event handlers execute  simultaneously.14 Subscribing to Events What Are Event Handlers? An event handler is a service that you write to perform some action when a particular  event occurs. When an exception event handler  throws an exception. they do not generate audit events. For  example. Other points to keep in mind about events and event handlers: „ An event can have more than one subscriber. you subscribe the event handler to the exception event for that service. for audit events. the Event Manager automatically invokes all event handlers that  subscribe to the event. „ Suspend event subscriptions. „ When event handlers run. The exact content of this input object varies depending on the type of event  that occurred and. which means that a single event might  invoke several event handlers.  The Event Manager can perform the following tasks: „ Subscribe event handlers to events.  „ Delete event subscriptions.

..a filter to select the specific events you want to react to. . Subscribing to an Event You can use the Event Manager in Developer to subscribe to an event on the current  server..  webMethods Developer User’s Guide Version 7. click Event Manager. you must have already:  „ Identified the event type you want to subscribe to „ Identified the service or services that generate an event you want to subscribe to (if  you want to subscribe to an audit event.and the name of the event handler that is to be executed when this event occurs. modify. Note: You can also use built‐in services to add.14 Subscribing to Events The following sections contain more information about each of these tasks. and delete event subscriptions. To access the Event Manager. see the webMethods Integration Server Built‐In Services Reference. This action registers the event handler with the Event Manager and specifies  which events will invoke it. Use the Event Manager in Developer to subscribe to events To subscribe to an event.1 351 .  Click   to add a new subscriber..1. in the View event subscribers for list. For more information about built‐in  services. To perform  this procedure. In the Event Manager dialog box. use the ToolsEvent Manager  command.  These services are located in the pub. Use the following procedure to subscribe to an event on the current server. exception event.. specify the type of event that you want to react to.. or GD Start event) „ Written the event handler that will execute when the identified event occurs To subscribe to an event on the current server 1 2 3 On the Tools menu. select the event  type to which you want to subscribe...event folder..

 user. Example:   sgxorders. Note: Integration Server saves information for event types and event subscriptions in  the eventcfg. Service The fully qualified name of the event handler that will subscribe to the  event (that is.bin file. This file is generated the first time you start the Integration  Server and is located in the following directory: IntegrationServer_directory\config. Specify.  create a filter to specify the names of services whose events this event  handler subscribes to (that is. will  invoke the event handler specified in Service). or port. Or. You can use the * character as a wildcard (this is the only wildcard  character recognized by this pattern string). Comment Enabled An optional descriptive comment about this subscription... you might want an event handler to be  invoked only when a specific service generates an audit event.. Event  filters limit the events for an event type that invoke an event handler. you can subscribe an event handler to only those events generated by a particular  service. Filters vary depending on the event type you are subscribing to. (This allows you  to temporarily suspend a subscription without deleting it.  Creating Event Filters Event filters allow you to be very selective about which events you subscribe to. complete the following fields: In this field. see “Creating Event  Filters” on page 352.) 5 Click OK.1. Set to false to deactivate the subscription. For more information about creating event filters. Set to true to activate the  subscription. For example.Authorization:LogAuthTrans Filter A pattern string to further limit the events this event handler subscribes  to.1 .  Whether the subscription is active or inactive. when executed.14 Subscribing to Events 4 In the Enter Input Values dialog box. the service that will execute when the event occurs). you might want an  event handler to be invoked only when a specific user logs on to the Integration Server.  Copy this file from one Integration Server to another to duplicate event subscriptions  across servers. if you are subscribing to an audit or exception event.. You  can either type the name in the Service field or click   to locate and  select the service from a list. Subscriptions take effect immediately. The pattern string is case  sensitive.  352 webMethods Developer User’s Guide Version 7. the services that. package. By using event  filters. For example.

. The message generated by the alarm event.14 Subscribing to Events The following table identifies the information that you can filter on for each event type.  The following pattern string specifies that all services that start  with the word “sendPO” and belong to any folder will invoke the  event handler: *:sendPO* webMethods Developer User’s Guide Version 7. Create a filter to specify the services whose audit events  you want to invoke the event handler. All  other characters in the pattern string are treated as literals.  Notice that you cannot create a filter for some event types. Create a filter to specify the services that. The following filter specifies that any alarm events that generate a  message containing the word “port” will invoke the event  handler: *port* Audit Event The fully qualified name of the service that generates the audit  event. Pattern strings are case  sensitive.  when invoked using guaranteed delivery. The following filter specifies that all services that start with the  word “credit” and belong to any folder will invoke the event  handler: *:credit* GD End Event N/A The filter for all GD End events is the following: * GD Start Event The fully qualified name of the service that is being invoked using  guaranteed delivery. will invoke the event  handler. Create a filter to specify the services whose  exception events you want to invoke the event handler... The event handler with  this filter will process all alarm events containing the specified  text. Important! The asterisk (*) is the only wildcard character allowed in an event filter.1. The following filter specifies that the service  sgxorders.1 353 . Create a filter that  specifies some of the text of the message.Authorization:creditAuth will invoke the event handler: sgxorders. For this event type.. every  generated event invokes the event handlers subscribed to it.Authorization:creditAuth Exception Event The fully qualified name of the service that generates the  exception event. Alarm Event You create a filter for. For these event types.

. JMS Delivery Failure Event You create a filter for.1 .. The following filter specifies that a replication event involving the  package named “AcmePartnerPkg” will invoke the event handler: AcmePartnerPkg Security Event Session End Event N/A  You cannot filter on security events.  *Administrators* 354 webMethods Developer User’s Guide Version 7.  The following filter specifies that a JMS delivery failure event  involving a JMS connection alias with “XA” in the JMS connection  alias name will invoke the event handler: *XA* JMS Retrieval Failure Event The fully qualified name of the JMS trigger that called the trigger  service for which the error occurred..1. The name of the JMS connection alias used to send the message to  the JMS provider. Create a filter to  specify which users or which user groups invoke an event handler  when they start a session on the server. N/A  The filter for all session end events is the following:  * Session Expire Event N/A The filter for all session expire events is the following:  * Session Start Event The user name for the user starting the session on the Integration  Server or the groups to which the user belongs.. will invoke the event handler.  The following filter specifies that a JMS retrieval failure event  involving a JMS trigger named “ordering:processTransaction” will  invoke the event handler: *ordering:processTransaction* Port Status Event N/A The filter for all port status events is the following: * Replication Event The name of the package being replicated. when replicated. Create a filter to specify  the packages that. The following filter specifies that a session start event generated  by a user in the “Administrators” group will invoke the event  handler.14 Subscribing to Events For this event type.

All services in the sgxorders folder and its subfolders. you can be very selective about which  service’s events you subscribe to. The following examples show ways you can use regular expressions as  event filters to specify an event that a particular service generates.Auth folder. The service sgxorders.Auth folder.* *. sgxorders.Auth*:credit* *:credit* * Viewing and Editing Event Subscriptions To view or edit an event subscription on the current server 1 2 On the Tools menu. All services in the sgxorders.Auth:* sgxorders.” All services in the sgxorders. select the event type for which you want to view  subscriptions... Stat Event You create a filter for.. starting with the  characters “credit.1 355 .14 Subscribing to Events For this event type.  sgxorders.Auth:credit* Will select events generated by. All services. In the View event subscribers for list.1... click Event Manager..Auth:creditAuth sgxorders. webMethods Developer User’s Guide Version 7...”  All services starting with the characters “credit” in any  folder. This filter. N/A The filter for all stat events is the following: * Tx End Event N/A The filter for all Tx End events is the following:  * Tx Start Event N/A The filter for all Tx Start events is the following:  * Creating Event Filters for Services When you create a filter for a service name. You can use regular expressions to create event filters  for service names. All services starting with the characters “credit” that  reside in any subfolder whose name starts the  characters “Auth.Auth:creditAuth.

  Click OK when you finish viewing or editing event subscriptions.  Repeat steps 2–4 for each event subscription you want to suspend. select the event  type for which you want to delete a subscription. Click the subscription you want to edit. Click the subscription you want to delete. in the Enabled list. Repeat steps 2–4 for each subscription you want to view or edit. select the event  type for which you want to suspend a subscription. in the View event subscribers for list. By suspending an event subscription. In the Event Manager dialog box.  Click OK when you finish suspending event subscriptions. 356 webMethods Developer User’s Guide Version 7. Click OK when you finish deleting events.  To suspend an event subscription 1 2 3 4 5 6 On the Tools menu. Your changes take effect  immediately. and then click  .1. and then click  .  Modify the fields in the Enter Input Values dialog box as needed and then click OK. Suspending Event Subscriptions You can suspend an event subscription. click Event Manager. In the Event Manager dialog box. Deleting an Event Subscription To delete an event subscription 1 2 3 4 5 On the Tools menu. in the View event subscribers for list. You can resume an event subscription at any time. While the event subscription is suspended. In the Enter Input Values dialog box.1 . Your changes take  effect immediately. the Event Manager does not  invoke the associated event handler when the server generates the event to which it is  subscribed. you  temporarily stop the execution of the event handler without deleting or removing the  event handler. Your changes take effect immediately. select false.  Repeat steps 2 and 3 for each subscription you want to delete. and then click  .14 Subscribing to Events 3 4 5 6 Click the subscription you want to edit. click Event Manager.

In the Select dialog box. navigate to and select the pub. During this stage. make sure to link data  between services and the pipeline. This action registers the event  handler with the Event Manager and specifies which events will invoke it. you insert the logic. code.  Stage 2 To assign input and output parameters to the event handler . you use the testing and  debugging tools available in Developer to make sure the event handler  works properly. click  Click OK. If you are building a flow service. The specification and IS  document type indicate the run‐time data that will be contained in the IData  object passed to the event handler.  webMethods Developer User’s Guide Version 7. During this stage.  You can create filters to be more selective about which events you subscribe  to. or  services to perform the action you want the event handler to take when the  event occurs. code. Subscribing to the event.14 Subscribing to Events Building an Event Handler Building an event handler involves the following basic stages: Stage 1 Stage 2 Creating an empty service. Declaring the input and output. 1 2 3 On the Input/Output tab. Inserting logic. you use the Event Manager to  subscribe the event handler to the event.event:sessionStart specification.1. you create the empty service that  you want to use as an event handler. or services. next to the Specification Reference field. Stage 3 Stage 4 Stage 5 Sample Event Handler Following are instructions for building an event handler named processLogon.  Stage 1 To create the event handler „ Create an empty flow service and name it processLogon. The  processLogon event handler sends a notification to a specified email address (such as the  Server Administrator) when anyone in the Administrators group logs in to the  Integration Server.event. you declare the input and  output parameters for the event handler by selecting the specification or IS  document type for the event type in pub. During this stage. During this stage. Testing and debugging the service.1 357 . During this stage.

Stage 5 To subscribe the event handler to the event 1 2 3 On the Tools menu. 358 webMethods Developer User’s Guide Version 7. session  name. 1 2 3 On the editor toolbar. click Event Manager. 4 On the File menu. click  In the Browse dialog box. see Chapter 11. in the View event subscribers for list. select Session Start Event.  To test and debug the event handler Stage 4 „ Use the testing and debugging tools in Developer (such as TestRun) to test and  debug the service. For more information about these tools.1 .client:smtp service. Click   to add a new event subscription.  mail@mycompany. navigate to and select the pub. click Save to save the service. In the Event Manager dialog box. mailhost body The network name of your mailhost (for example. “Testing  and Debugging Services”. and session ID for the person who logged on to the  Integration Server as an Administrator.1. Click OK. On the Pipeline tab. Administrators user %userid% logged into session %sessionName% with session ID %ssnid% The body of the email message will contain the user name. use the Set Value  variables in Service In:  For this field… to subject Specify… The email address for the person to send event notification to.  %userid% logged in  modifier to assign values to the following  The subject of the email message will contain the user ID of the  person who logged on to the Integration Server as a member of the  Administrators group.14 Subscribing to Events Stage 3 To insert services into the event handler  and select Browse.com).

 A  client cannot log on because of “invalid credentials. For example. you might want to  create an event handler that notifies the administrator when a user is denied access to the  server or to a port. see “Building Handlers for Session Start  Events” on page 369. webMethods Developer User’s Guide Version 7. Subscriptions take effect immediately. The inability to add a port to a cluster can cause  errors in Cluster Manager. (This can happen when a  user tries to execute a service not allowed on the port. Type: *Administrators* This pattern string specifies that the processLogon event handler will  execute only when a user belonging to a user group containing the  string “Administrators” logs on to the server. „ A port cannot be started.1. Working with Alarm Events An alarm event occurs when the Integration Server generates a message related to the  status of the server.  5 Click OK. An alarm event can be generated for the following reasons: „ A client experiences a logon failure or is denied access to the Integration Server.  For more information. complete the following fields: In this field… Service Filter Do this… Click   and use the Select dialog box to navigate to and select the  processLogon service.”  „ Errors occur in the Cluster Manager.) This type of alarm event is  sometimes called a port access exception. For a flow service.  Select true to activate the subscription.  „ A service cannot be loaded or executed due to setup errors. possible errors include a  missing class file or method. For a Java service.  „ A user tries to access a port and is denied access to the port. a  possible error is a missing XML metafile. Comment Enabled Specify a descriptive comment about this subscription. or when a port does not start. The most common reason a port cannot start is that the port  is being accessed by another application.14 Subscribing to Events 4 In the Enter Input Values dialog box.  You can also create event handlers to send data to a network monitoring system.  You can use alarm events to invoke event handlers that execute when the server  generates messages related to the status of the server. when a service fails to load or execute.1 359 .

SS A String containing the fully qualified name of the service that generated  the event. A String containing the identification number for the session during which  the alarm event was generated. In these cases. Some alarm events are not generated  during sessions.  sessionID msg Tip! When you subscribe an event handler to an alarm event. you might want  an audit event generated for a critical service to invoke a logging service or a notification  service. or zero times during execution.  A String containing the error message from the alarm event. A service can generate an alarm event when a client invokes a  service that accesses information or a service on a remote server. If the  client is not a member of an allowed group for the port on the remote  server. twice. You can use the options in a  service’s Audit properties to specify when a service generates audit data.1.event folder. You can use audit events  to invoke other services when a particular service executes.1 . the sessionID variable will not contain a  value.)  Key time service Description A String containing the date and time that the alarm event occurred. For more information about specifying when a service generates audit data. see  “Configuring Service Auditing” on page 140.14 Subscribing to Events Building Handlers for Alarm Events When the Event Manager invokes an event handler for an alarm event. (A specification and IS  document type for these parameters are provided in the pub. the service will generate an alarm event. in the  format yyyy/MM/dd HH:mm:ss.  360 webMethods Developer User’s Guide Version 7. the event handler  receives an IData object containing the following run‐time data. For example. you can create a filter for  the msg field to be more selective about the alarm events that invoke the event  handler.  Working with Audit Events An audit event occurs when a service generates audit data. A service can  generate audit data once.

server.) Key time Description A String containing the date and time the event occurred. see the following  section. A String containing the hash identifying the server thread that generated the  audit event. threw an exception) and is not  configured to retry or has exhausted all retries. (A specification and an  IS document type for the input data are provided in the pub. Note: To capture details about any exception that is thrown  when a service fails. By default. For instructions about how to  specify server property settings. Will be one of the following: String Started Ended threadID service ssnid result Description This event marks the beginning of a service. You can set the format by specifying  the watt. A String indicating the audit point. This event marks the end of a service that executed  successfully. the  format is yyyy‐MM‐dd HH:mm:ss z.dateStampFmt property.  A String containing the identification number for the session of the service  that generated the event. Failed Retried A retried event will be created each time a service is retried. the event handler  receives an IData object that contains the following run‐time data.  A String containing the fully qualified name of the service that generated  the event.  Events are only created for a service if auditing for that type of  event is enabled for the service (for example. you must subscribe to Exception Events.14 Subscribing to Events Building Handlers for Audit Events When the Event Manager invokes an event handler for an audit event. webMethods Developer User’s Guide Version 7.1 361 .1.event folder. start events will  not be created unless auditing for service start is enabled for  that service).  For information about Exception Events. see the webMethods Integration Server  Administrator’s Guide. This event marks the end of a service that executed  unsuccessfully (that is.

1. you can specify which services’ audit events invoke the event handler. For example. such as notifying an administrator.1 . you can create a filter for  the service field to specify the services whose audit events you want to subscribe to. an exception event is generated by each service in  the call stack. if service A1 calls service B1. the pipeline  element won’t be included in the input object that is passed to your event handler. A String containing the user name that invoked the service that generated  the event. You can use exception events to invoke some prescribed  action.auditLog server property is set to verbose. They are completely separate. Otherwise. For more information about the Log on property in the Audit category of the  Properties panel. and B1 throws an exception. see “Specifying When Audit Data Is Generated” on page 142. Note: Keep in mind that event handlers are processed independently of the services  that invoke them.  both B1 and A1 generate exception events (in that order). Your event handler can check the value of the result parameter to  determine whether it is processing an audit event from before or after the service  executed.  Working with Exception Events An exception event occurs when a service throws an exception (including when a flow  service “exits on failure”). if your event handler needs data from the invoking service’s pipeline. Event  handlers are not designed to replace the error handling and/or error recovery  procedures that you would normally include in your service.  Note that this element is only included in the input object if the Include pipeline property is set to Always or On errors only or if the watt.14 Subscribing to Events Key pipeline Description A copy of the state of the pipeline at the point where the event occurred. If a nested service throws an exception.server. Tip! When you subscribe an event handler to an audit event.  That is. see “Including  the Pipeline in the Audit Log” on page 143. and start an audit  event handler is called twice each time a service runs: once when the service starts and  again when it ends. success. when a particular service fails. make sure  that service’s Include pipeline option is set to Always or On errors only. For more information about the Include pipeline property in the Audit category of the Properties panel. 362 webMethods Developer User’s Guide Version 7. asynchronous processes.  Keep in mind that when the service’s Log on option is set to Error. Also.  user The audit event handlers that you build can make use of these inputs as they need to.

A document (IData object) containing the items in the call stack.wm.1.event folder. the event  handler receives an IData object containing the following run‐time data. A String identifying the thread that invoked the service.14 Subscribing to Events Building Handlers for Exception Events When the Event Manager invokes an event handler for an exception event.server. A document (IData object) containing additional exception information  provided by the author of the Java service. A String containing more detailed information about the exception (if  the exception object contains dump information).  A String containing the identification number for the error message. A String containing the error message text in the language that  corresponds to your locale.event:callStackItem IS document type for the definition of the  documents in callStack.dateStampFmt property. See the  pub.  the format is yyyy‐MM‐dd HH:mm:ss z.LocalizedException class. A String containing the exception type that was thrown. See the pub. For instructions  about how to specify server property settings. (A specification  and an IS document type for this signature reside in the pub. webMethods Developer User’s Guide Version 7.  A String containing the fully qualified name of the service that  generated the event. A String containing the error message from the exception.1 363 .util. A String containing the user that requested the service that generated  this event.  A String containing the identification number of the session during  which the exception occurred. You can set the format by  specifying the watt.  error localizedError errorType errorDump service user callStack pipeline threadID ssnid errorMsgID errorDetails nestedErrorInfo  A document (IData object) containing any nested errors and  exceptions. A copy of the state of the pipeline at the point when the exception  occurred. For more information about  constructing exceptions to return additional information. By default. see the webMethods  Integration Server Administrator’s Guide.) Key time Description A String containing the date and time the event occurred.event:exceptionInfo IS document type for the  definition of the items in nestedErrorInfo. see the  webMethods Integration Server Java API Reference for the  com.

14 Subscribing to Events Tip! When you subscribe an event handler to an exception event. and when the server returns the service results to  the requesting client. That is. In a flow service.  Working with Guaranteed Delivery Events A guaranteed delivery event occurs when a client uses guaranteed delivery to invoke a  service on a remote Integration Server.  if you use guaranteed delivery to invoke a service that processes purchase orders.gd:start service  generates a GD Start event. You might also want to use  guaranteed delivery events to invoke event handlers that send notification. or when the value of a purchase order is greater than a certain  amount.  Guaranteed delivery events begin when a client requests a guaranteed delivery  transaction (GD Start) and when the client receives the results of the guaranteed delivery  transaction (GD End).1.remote. executing the pub. a local  Integration Server uses guaranteed delivery to invoke a service on a remote server. you can specify which services’ exception events invoke the  event handler. In a flow service.  The following diagram illustrates when guaranteed delivery events and transaction  events occur during a guaranteed delivery transaction. For example.1 . Guaranteed Delivery Events and Transaction Events Guaranteed delivery events are related to transaction events (Tx Start and Tx End).  364 webMethods Developer User’s Guide Version 7.  You can subscribe to GD Start and GD End events to invoke event handlers that log  guaranteed delivery transactions to a file or database.gd:end service generates  a GD End event. There are two types of guaranteed delivery events: „ GD Start events occur when a client uses guaranteed delivery to invoke a service on a  remote the Integration Server. Each guaranteed delivery transaction generates a GD Start event and a GD End event. you  might want to send notification to a business account manager about purchase orders  from a particular client. executing the pub. In the following scenario. you can create a filter  for the service field to specify the services whose exception events you want to  subscribe to. „ GD End events occur when a client receives the results of the service it requested using  guaranteed delivery. Transaction events occur when a service invoked using guaranteed  delivery begins executing (Tx Start event) and when the service finishes executing (Tx  End event).remote.

log file.log  file. the GD End event is logged to the  txoutyyyymmdd.SS. Building Handlers for Guaranteed Delivery Start Events When the Event Manager invokes an event handler for a GD Start event. By default. the local Integration Server). the remote  server generates a Tx Start event. By default.event folder. the local server  generates a GD Start event. see the Guaranteed Delivery Developer’s Guide. The remote Integration Server sends the results of Service B to the requesting  client (here. the GD Start event is logged to the  txoutyyyymmdd.14 Subscribing to Events A Guaranteed Delivery Transaction generates Guaranteed Delivery Events and Transaction Events webMethods Integration Server (local) 1 Service A 2 Service B webMethods Integration Server (remote) 5 4 3 Stage 1 Description Service A uses guaranteed delivery to invoke Service B on the remote  Integration Server. the Tx End event is logged to the txinyyyymmdd. 2 3 4 5 For details about guaranteed delivery.log file. the Tx Start event is logged to  the txinyyyymmdd. By default. When the local server requests Service B.log file. A String containing the transaction identification number of the service  that generated the GD Start event. the event  handler receives an IData object containing the following run‐time data. By default.) Key time TID Description A String containing the date and time that the event occurred. The local Integration Server receives the results of Service B and generates a  GD End event. When the remote server begins executing Service B. The remote Integration Server receives the request and begins executing  Service B.1 365 .1.   webMethods Developer User’s Guide Version 7. The remote Integration Server finishes executing Service B and generates a Tx  End event. in the format  yyyy/MM/dd HH:mm:ss. (A specification  and an IS document type for these parameters reside in the pub.

1. the event  handler receives an IData object containing the following run‐time data.event folder. A String containing the transaction identification number of the service that  generated the GD End event. see the webMethods Integration Server  Administrator’s Guide. The default frequency is 60 seconds.  The port status event provides current status information about all of the configured  ports on the Integration Server.14 Subscribing to Events Key svcname result Description A String containing the name of the service invoked using guaranteed  delivery. such as  DONE. You can also use port status events to invoke services that write port  status data to a log file. you can specify the services that when invoked  using guaranteed delivery will invoke the event handler.   A String containing the status of the guaranteed delivery transaction.server. you can create a filter  for the svcname field to specify the services in a guaranteed delivery transaction that  you want to subscribe to.pollTime property determines the frequency with which the  Integration Server updates server statistics.) Key time TID result Description A String containing the date and time that the event occurred. you must restart the Integration Server for the change to take  effect. For more information about this property. 366 webMethods Developer User’s Guide Version 7. such  as NEW. Working with Port Status Events A port status event occurs each time the Integration Server updates the server statistics.1 . Tip! When you subscribe an event handler to a GD Start event. You can use port status events to invoke services that send port status data to a network  monitoring system.  Building Handlers for Guaranteed Delivery End Events When the Event Manager invokes an event handler for an GD End event.stats. A String containing the status of the guaranteed delivery transaction. That is. in the format  yyyy/MM/dd HH:mm:ss.SS.  Note: The watt. (A specification  and an IS document type for these parameters reside in the pub. If  you change this value.

A String indicating the primary port. the event  handler receives an IData object that contains the following run‐time data.event folder. http.) Key portStatusInfo Description A document reference list containing status information for each  configured port on the Integration Server. By default.replicator:generateReplicationEvent service executes. A String indicating the type of port (for example. the  Integration Server designates an HTTP port at port 5555 as  the primary port. For  example.  (A specification and an IS document type with these parameters are provided in the  pub.14 Subscribing to Events Building Handlers for Port Status Events When the Event Manager invokes an event handler for a port status event.  A String indicating whether or not the port is enabled. or e‐mail). A String containing the number for the port. The port is disabled.SS. ftp. you could create replication event handlers that do the following: „ Notify package subscribers when a package is published.1. „ Maintain a log of the packages distributed or “pushed” to your subscribers.1 367 . „ Maintain a log of the packages your partners pulled from you. Working with Replication Events A replication event occurs when the pub.  https. For more information about the pub. A String indicating the status of the port. see the  webMethods Integration Server Built‐In Services Reference. in the format yyyy/MM/dd HH:mm:ss.replicator:generateReplicationEvent service.  You might want to generate and subscribe to replication events to invoke event handlers  that automate the completion of the package replication and distribution processes.  webMethods Developer User’s Guide Version 7. String time Description A String containing the date and time that the event  occurred. The  value will be one of the following: String true false port status protocol primary enabled Description The port is enabled. „ Maintain a log of replicated packages.

 you can create a filter  to specify the package that.1 . A user‐defined String describing the action (such as create or push) for  the replication event.  Working with Session Events A session event occurs when a client starts or ends a session on the Integration Server or  when the Integration Server terminates an inactive session. in the  format yyyy/MM/dd HH:mm:ss. A String containing the name of the released or pushed package. You can use the value of the action variable to  maintain separate logs for each action type. 368 webMethods Developer User’s Guide Version 7.  You can subscribe to session events to invoke event handlers that maintain your own log  files or to invoke event handlers that send notification about users opening sessions on  the server.  package service Tip! When you subscribe an event handler to a replication event.  „ Session Expire events occur when the Integration Server terminates an inactive session.1.) Key time action Description A String containing the date and time that the event occurred. when replicated. You can subscribe to any of  the following types of session events: „ Session Start events occur when a developer uses Developer to open a session on the  Integration Server or when an IS client opens a session on the server to execute  services. (A  specification and an IS document type for these parameters are provided in the pub. the event  handler receives an IData object that contains the following run‐time data. will invoke the event handler.event  folder.14 Subscribing to Events Building Handlers for Replication Events When the Event Manager invokes an event handler for a replication event.replicator:generateReplicationEvent service.  A String containing the name of the flow service that invoked the  pub.SS. „ Session End events occur when a developer or IS client specifically issues a disconnect  instruction to the Integration Server.

  A String containing the name of the new session. in the  format yyyy/MM/dd HH:mm:ss. (A specification  and an IS document type for these parameters reside in the pub. A String identifying how long the session existed (in milliseconds)  before it ended.) Key time  sessionID userid sessionName Description A String containing the date and time the event occurred.14 Subscribing to Events Building Handlers for Session Start Events When the Event Manager invokes an event handler for a session start event.) Key time sessionID rpcs age Description A String containing the date and time that the event occurred. (A specification  and an IS document type for these parameters reside in the pub.  Tip! When you subscribe an event handler to a Session Start event.  webMethods Developer User’s Guide Version 7. the event  handler receives an IData object containing the following run‐time data. in the format  yyyy/MM/dd HH:mm:ss.event folder. A String containing the user ID that the IS client or developer used to  log on to the Integration Server.1. you can create a  filter so that only session start events generated by a specific user or by a member of a  specific group invoke the event handler. A String containing the identification number of the session.event folder.SS.SS.  Building Handlers for Session End Events When the Event Manager invokes an event handler for a session end event. A String containing the identification number of the session. A String containing the number of service calls performed during the  session.1 369 . the event  handler receives an IData object containing the following run‐time data.

 in the format  yyyy/MM/dd HH:mm:ss.pollTime property determines the frequency with which the  Integration Server updates statistics.  Working with Stat Events A stat event occurs each time the Integration Server updates the statistics log (stats.stats. (A specification and an IS  document type for these parameters reside in the pub.server. A String identifying how long the session existed (in milliseconds)  before it expired.) Key startTime uptime Description A String containing the date and time that the event occurred. in  the format yyyy/MM/dd HH:mm:ss.) Key time sessionID rpcs age Description A String containing the date and time the event occurred.SS. 370 webMethods Developer User’s Guide Version 7. (A specification  and an IS document type for these parameters reside in the pub.  Building Handlers for Stat Events When the Event Manager invokes an event handler for a stat event.SS. The watt. the event  handler receives an IData object containing the following run‐time data. A String containing the identification number of the session. A String containing the number of service calls performed during the  session.event folder. The default frequency is 10 seconds. the event handler  receives an IData object containing the following run‐time data.event folder.1.  The statistics log maintains statistical information about the consumption of system  resources.1 . You can use stat events to invoke event handlers that maintain your own log file or to  invoke event handlers that send server statistics to a network monitoring system.jar file located in the IntegrationServer_directory\lib  directory.log).  Note: The Integration Server provides an agent that you can configure for use with a  network monitoring system. see the  readme file in the agentInstall. A String identifying the length of time the server has been running.14 Subscribing to Events Building Handlers for Session Expire Events When the Event Manager invokes an event handler for a session expire event. For information about implementing this agent. in the  format yyyy/MM/dd HH:mm:ss.SS.

A String identifying the average processing duration for a service  during the previous poll cycle. A String identifying the number of errors that were not caused by  services in the previous poll cycle.  A String identifying the total number of requests during the poll cycle.1 371 .  A String identifying the number of threads in use. A String identifying the percentage of free memory. Maximum number of sessions for which the server is licensed. A String identifying the amount of storage used (in kilobytes) by the  Integration Server. A String identifying the amount of unused storage space available (in  kilobytes) to the Integration Server. Greatest number of licensed sessions that have run concurrently on the  server.  A String identifying the number of current sessions on the Integration  Server. A String identifying the percentage of used memory. A String identifying the number of service starts and ends per second  during the last poll cycle.  A String identifying the maximum number of threads that executed  concurrently during the previous poll cycle. A String identifying the number of services that completed with errors  since the Integration Server started.14 Subscribing to Events Key totalMem freeMem usedMem freeMemPer usedMemPer svrT svrTMax sysT sysTMax conn connMax reqTotal reqAvg newReqPM endReqPM errSvc svcRate ssnUsed ssnPeak ssnMax errSys Description A String identifying the total amount of used and unused storage  space available (in kilobytes) to the Integration Server.  Number of licensed sessions currently active. webMethods Developer User’s Guide Version 7. A String identifying the maximum number of services that executed  concurrently during the previous poll cycle. A String identifying the new requests per minute at the end of the poll  cycle.  A String identifying the maximum number of connections that ran  concurrently during the previous poll cycle.1.  A String identifying the new requests per minute at the beginning of  the poll cycle. A String identifying the number of executing services.

A String containing the transaction ID for the guaranteed delivery  transaction that generated the event. such  as NEW. in the format  yyyy/MM/dd HH:mm:ss.  „ Tx End events occur when an Integration Server finishes executing a service invoked  with guaranteed delivery. A String containing the status of the guaranteed delivery transaction.1 .  Building Handlers for Transaction Start Events When the Event Manager invokes an event handler for a Tx Start event. In fact.SS. There are two types of transaction events: „ Tx Start events occur when an Integration Server begins executing a service invoked  with guaranteed delivery. You can subscribe to Tx Start and Tx End events to invoke event handlers that log  guaranteed delivery transactions to a file or database. the event handler  receives an IData object containing the following run‐time data. see “Guaranteed Delivery Events and Transaction Events” on page 364.1.14 Subscribing to Events Working with Transaction Events A transaction event occurs when an Integration Server begins and finishes executing a  guaranteed delivery transaction. (A specification and an IS  document type for these parameters reside in the pub. For more information about how transaction events relate to guaranteed  delivery events. Each guaranteed  delivery transaction generates a Tx Start event and a Tx End event. the transaction  events occur between the guaranteed delivery events. 372 webMethods Developer User’s Guide Version 7.event folder.) Key time TID result Description A String containing the date and time that the event occurred. You might also want to use  transaction events to invoke event handlers that send notification.  Transaction events result from guaranteed delivery transactions. A Tx Start event occurs  immediately after a GD Start event and a Tx End event occurs immediately before a GD  End event.

 the event handler  receives an IData object containing the following run‐time data. (A specification and an IS  document type for these parameters reside in the pub.SS. A String containing the transaction ID of the guaranteed delivery  transaction that generated the event. webMethods Developer User’s Guide Version 7.14 Subscribing to Events Building Handlers for Transaction End Events When the Event Manager invokes an event handler for a Tx End event. in the format  yyyy/MM/dd HH:mm:ss.  A String containing the status of the guaranteed delivery transaction.1 373 . such  as DONE.1.event folder.) Key time TID result Description A String containing the date and time that the event occurred.

1.1 .14 Subscribing to Events 374 webMethods Developer User’s Guide Version 7.

. . . . . . . . . . . . . . . . . . . . .1 375 . „ Building a Service that Throws an Exception for Retry . . . . . . . . . . . . . . . . . . „ Requirements for Retrying . . . . . . . . . . . . . . . . . . . . . . . . . . .15 Building Services that Retry 376 376 377 „ Overview . . . . . . . . . . . . . . . . . . . . . . . . . . webMethods Developer User’s Guide Version 7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1. . . . . . . . . . . . . . . . . . . . . . . .

server. For information about configuring retry for JMS triggers. Then.ISRuntimeException(). A transient error is an  error that arises from a temporary condition that might be resolved or restored. you can construct and configure the service to retry  automatically if a transient error occurs during service execution. At run time. Integration Server will re‐execute the service using the  original service input. re‐throw it as an ISRuntimeException.  To signal the Integration Server to re‐execute the service. Requirements for Retrying If you want a service to catch a transient error. For more  information about configuring retry for Broker/local triggers. the service can use  com. such as  the unavailability of a resource due to network issues or failure to connect to a database.b2b. you  must configure the Transient error handling properties for the trigger.flow:throwExceptionForRetry.15 Building Services that Retry Overview When creating a service.1 .1. you can build the service to  throw an ISRuntimeException when a transient error occurs. see “Configuring Service Retry” on page 135.app. the following criteria must be met:  „ You must configure the Retry on ISRuntimeException properties for the top‐level service. „ If the service is a flow service. 376 webMethods Developer User’s Guide Version 7.  The service might execute successfully if the Integration Server waits a short interval of  time and then retries the service. the service must invoke pub.  Adapter Services and Retry Behavior Adapter services built on Integration Server 6.0 or later. This behavior allows for the automatic  retry when the service is invoked by a trigger or invoked within a flow that is configured  to retry when an ISRuntimeException occurs.  For more information about configuring service retry and how the Integration Server  retries services. and  then re‐execute. see the  webMethods Integration Server JMS Client Developer’s Guide. The adapter service propagates an  exception that is based on ISRuntimeException.  This appendix provides guidance for building flow services that retry if a transient error  occurs during service execution. and based on the ART  framework. detect and propagate exceptions that signal a retry if a transient error is  detected on their back‐end resource.wm. if a service ends  because of an ISRuntimeException and you set retry properties for the service (or the  trigger calling the service). adapter services detect if their back‐end  server is down or the network connection is broken. „ If the service functions as a trigger service (the service is invoked by a trigger). see the Publish‐Subscribe  Developer’s Guide.  „ If the service is written in Java.

 make sure that the catch structure  can interpret the adapter service exception that signals a retry.  „ An outer sequence that exits successfully if either the try sequence or catch sequence  succeeds. For details about building a flow service that throws an  ISRuntimeException. and indicates whether the  Integration Servers should retry the service.  „ A throw exception for retry block that executes only if the catch block indicated that  the service should be retried. You must ensure that  the error evaluating logic in the catch structure can account for the adapter service  exception that signals a retry. This SEQUENCE step will act as the outer sequence for the try  sequence and the catch sequence.  below.  Note: This section describes one possible way to build a service that throws an  exception for retry.  1 Insert a SEQUENCE step.1 377 .  determines if a transient error caused the exception. an ISRuntimeException will not be thrown. the Integration Server will not retry the  flow service.  How to Build a Service that Throws an Exception for Retry The following describes the general steps that you take to build a service that will retry if  a transient error occurs during service execution. If it does not.  For more information about adapter services. Set this outer SEQUENCE to exit on SUCCESS. This indicates that the sequence will  exit when any child step in the sequence succeeds. see “Building a Service that Throws an Exception for Retry”.  Building a Service that Throws an Exception for Retry A flow service that will be retried if a transient error occurs during service execution  consists of the following basic sections of logic: „ A try sequence that executes the work that you want the service to perform. If the inner try sequence (the first  child of this parent SEQUENCE) succeeds.15 Building Services that Retry Note: If you invoke an adapter service within a flow service that uses the try‐catch  structure.  webMethods Developer User’s Guide Version 7. and the try contains an adapter service. then the inner catch sequence will be  skipped.  „ A catch sequence that handles any exception that occurs during the try sequence. and the entire service will have  executed successfully. see the relevant adapter guides.1.

 determine its cause. the pub.  4 5 Invoke pub. For example. In this  case. the adapter service throws an  exception that extends the ISRuntimeException. This indicates that the Integration Server  executes every step in the catch sequence.  Note: If the flow service includes an adapter service. 6 Insert error evaluation logic.flow:throwExceptionForRetryService.  Make sure that the try sequence is a child of the outer sequence that you inserted in  step 1.flow:getLastError to catch the error information is optional. This indicates that the try sequence  will exit when a step in the SEQUENCE fails. which is the catch sequence.  378 webMethods Developer User’s Guide Version 7. This sequence contains the steps needed  to catch the exception.flow:getLastError service must be the first service invoked within  the catch sequence.1 .  Make sure to indent the steps below/under the try SEQUENCE step. A subsequent BRANCH step will use  the flag to determine whether to execute the pub. This logic should do the following: „ Determine whether the last error is a transient error that can be retried. Keep in mind that you might need to use more than one service to handle the error.flow:getLastError invoke step below the catch SEQUENCE  step. and a transient error  occurs during adapter service execution.  Important! The pub.flow:getLastError in the catch sequence to retrieve error information. 3 Insert the logic that you want the service to perform. and a preceding service in  the catch sequence fails.  Make sure to indent the pub. and set the transient error flag. you might set a  variable named isTransientError to “true”. „ If the service can be retried.  Make sure that the catch sequence is a child of the outer sequence that you inserted in  step 1. This sequence will contain the logic  that you want the service to perform.  Using pub.  Set this inner try sequence to exit on FAILURE.15 Building Services that Retry 2 Insert an inner SEQUENCE step for the try sequence. If it is not the first service invoked. Set the catch sequence to exit when DONE.  determine if it was caused by a transient error.flow:getLastError service retrieves information about the error that caused  the try sequence to fail. This service  retrieves information about the last exception that occurred in the flow service. even if one of the steps fails. and then determine whether the service  can be retried. the error thrown in the try sequence will be overwritten  with the new error. These steps contain the work that you  want the service to do. Insert a SEQUENCE step for the catch sequence.1. set a flag to indicate this. The Integration Server will then execute  the next step in the flow service.

  and rolling back the transaction. This service wraps an exception and  rethrows it as an ISRuntimeException.1.1 379 . For example.  webMethods Developer User’s Guide Version 7. If you are branching on an expression. committing.flow:getLastError service. „ . set the Evaluate labels property to True.  A string containing a message to be logged as part of this  exception.  You can also provide the following optional parameters to the  pub. For example. Specifically. if the service attempts to connect to a  database and the connection attempt fails. set the Label property to: true. specify the name of  the pipeline variable whose value will act as the switch.flow:throwExceptionForRetry service  to execute. Name wrappedException Description An Object containing any exception that you want to include  as part of this ISRuntimeException. message Note: If you want to insert retry logic into a service that makes database calls or  involves transactions.flow:throwExceptionForRetry service. For example. your service needs to include logic for starting. in the Switch property.  you would use isTransientError as the switch. You can branch on a  switch value or branch on an expression. This is because exceptions  thrown within a sequence are ignored and the BRANCH step will contain the  pub. you might map the  exception generated by the database connection failure to the  wrappedException parameter. This BRANCH  step will determine if an ISRuntimeException should be thrown.  7 Insert a BRANCH step that branches on the value of the transient error flag.15 Building Services that Retry Make sure to insert the exception evaluation logic within the catch sequence. if you use  the isTransientError variable as the flag to indicate that a transient error occurred. This might be the  exception that causes the pub. the rollback call should be made in the  catch sequence. if you built the BRANCH step to use  isTransientError is set to true when a transient error occurred and you want the  Integration Server to retry the service. Make sure that this step is a child of the BRANCH step. Do one of the following: „ If you are branching on a switch value. but after  the pub. Assign this service a label that indicates that this step should execute when the  transient error flag is true.flow:throwExceptionForRetry service.flow:throwExceptionForRetry service. Important! You must position the BRANCH step so that it is outside of the try and  catch sequences and is a sibling of the outer sequence. 8 Invoke the pub.

  determines if a transient error caused the exception.  This step is set to exit on failure so that the Integration Server will  execute the next step (the catch sequence) within the outer sequence. 380 webMethods Developer User’s Guide Version 7.  Step 1.  Trying a service. catches any exception that occurs. catching an error.1 . This step creates a sequence that  wraps the try sequence and the catch sequence. and throwing an exception for retry # Step 1 Description Create outer SEQUENCE that exits on SUCCESS. The sequence is set to exit on  success so that the outer sequence will exit when a child step executes  successfully.15 Building Services that Retry Example—Building a Service that Throws an Exception for Retry The following flow service executes a nested service.1. setting the outer sequence to exit on success allows the  outer sequence to exit without executing the catch sequence when the try  sequence succeeds. That is. This step creates the try  sequence that contains all of the logic you want the service to execute.1 Description Create try SEQUENCE that exits on FAILURE. throws an  ISRuntimeException so that the entire service can be retried. and. if necessary.

 This step evaluates the  contents of the lastError document returned by the  pub. In many services. In many services.1 381 . This step creates the catch  sequence that contains the logic that should be performed when an  error occurs during the try sequence.2. Determine if error was a transient error. The  Integration Server considers the catch sequence to be successful after all  the child steps execute. the try sequence  exits (it is set to exit on FAILURE).1. the entire outer  sequence exits.flow:getLastError  service to catch the error that caused the try sequence to fail.  Step 1. and the Integration Server  executes the catch sequence.1.15 Building Services that Retry # Description Step 1.flow:getLastError service to determine whether the try  sequence failed because of a transient error.  If the try sequence executes successfully.  To determine whether a transient error occurred.  The catch sequence is set to exit on DONE. This step invokes the pub. The Integration Server  then executes the next step in the flow service (the BRANCH  on ‘/isTransientError’ step).  webMethods Developer User’s Guide Version 7.  you might use multiple services or flow steps to determine  whether a transient error occurred. this step contains the  following steps. and the Integration  Server executes the next step in the flow service. The Integration Server skips the catch sequence  because the outer sequence exits upon the success of any child  step (in this case. the  outer sequence exits (it is set to exit on SUCCESS). the service logic  might consist of multiple services or flow steps.2 Create catch SEQUENCE that exits on DONE. This step represents the logic that you want  the service to perform. 1. If an error occurs while executing this step. the try sequence). Because the catch sequence is successful.1 1.2 Description Catch the last error.2. This means that the  Integration Server executes all the steps in the catch sequence. This step contains logic that  evaluates the error to determine whether the entire service can be  retried.1 Description Insert service logic.

Step 2.  382 webMethods Developer User’s Guide Version 7. exits the outer sequence. In this case. the Integration Server exits the catch  sequence.flow:throwExceptionForRetry service if the value of isTransientError is  “true”.  If the try sequence executed successfully. the Integration Server considers the execution of the flow  service to be successful. if a transient error occurred.  The Integration Server will retry the service.15 Building Services that Retry # Description 1.1.  the transient error flag (the variable isTransientError) is set to  “true”. This step specifies that the value of the isTransientError  variable should be used to determine whether the service should throw an  ISRuntimeException. This step executes the  pub. In this case.  Step 2 Check transient error flag. isTransientError is  null). After this step executes. and then executes the next  step in the flow service (the BRANCH on ‘/isTransientError’  step).1 .1 Description Throws ISRuntimeException. the Integration Server falls through  to the end of the service because the value of the switch variable does not  match any of the target steps (if the try sequence succeeded. This step sets the  transient error flag to indicate if a try sequence failed because  of a transient error. This service wraps the exception generated by the transient  error in the try sequence and rethrows it as an ISRuntimeException.2.3 Set flag to indicate whether service should retry.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1 383 . . . . . . . . . . . . . . . „ INVOKE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ MAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ SEQUENCE . . . . . . . . . . . . . . . . webMethods Developer User’s Guide Version 7. . .A webMethods Flow Steps 384 386 388 389 390 391 394 „ BRANCH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ EXIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ REPEAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ LOOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

 you specify the  value of the switch variable that will cause that child step to execute. set  the label of the child step to $default. In the Label property for each child step. 384 webMethods Developer User’s Guide Version 7. At run time. If you want to specify a child step to execute when none of the expressions are true. you write an expression that  includes one or more variables.1 . BRANCH flow step using a switch if the value of choice is if the value of choice is Name1 Name2 Name of the switch field is choice if the value of choice is if choice does not exist or has a value of ‘$null’ if the value of choice is an empty string “ “ Otherwise NameN $null no $defaul Branching on Expressions When you branch on expressions. you specify the switch variable in the Switch  property of the BRANCH step. If you want to execute a child step  when the Switch property is a null or unmatched string. In the Label property for each child step. the  BRANCH flow step executes the child step that has the same label as the value of the  Switch property. you set the Evaluate labels property of the BRANCH  step to true. the BRANCH step executes the first child  step with an expression that evaluates to true. leave the Label property of the child step blank. At run time. You indicate the variables you want to branch on by specifying a  switch value or by writing an expression that includes the variables.  Branching on a Switch Value When you branch on a switch value. set the Label of the child step to  $null or $default.A webMethods Flow Steps BRANCH The BRANCH step selects and executes a child step based on the value of one or more  variables in the pipeline. If you want to execute a child step when the value of the Switch property is an empty  string.1.

 Specifies a descriptive comment for the step.1. the server  waits for the step to complete and then raises an exception.A webMethods Flow Steps BRANCH step using expressions if the expression of first child is if the expression of second child is true Child1 Child2 Evaluate labels is set to true if the expression of nth child is Otherwise ChildN $defau The BRANCH step in the following illustration evaluates expressions to determine which  child steps execute.  If you want to use the value of a pipeline variable for this property.  Timeout webMethods Developer User’s Guide Version 7. Specifies the maximum number of seconds that this step  should run. leave Timeout blank. or  shippingMethod determines the shipping charges added to an order. PromotionalCode. If this time elapses before the step completes. %expiration%. If you do not need to specify a time‐out period. Simple BRANCH step using expressions Properties The BRANCH step has the following properties.1 385 . The run‐time value of BuyerAccount. type  the variable name between % symbols.  Property Comments Scope Description Optional. If you want this step to  have access to the entire pipeline. Optional. Optional. For example. Specifies the name of a document (IData object) in the  pipeline to which you want to restrict this step. leave this property blank.

 user‐specified error message text is displayed by typing it directly or  by assigning it to a variable in the pipeline. the parent step. the server executes the first child step whose label  evaluates to True. „ The matching child step fails. you  enter expressions in the Label property for the children of the BRANCH  step. Specifies the String field that the BRANCH step uses to determine  which child flow step to execute. a specified ancestor step. select True. When you branch on expressions. Do not specify a value if you set the Evaluate labels  property to True.A webMethods Flow Steps Property Label Description Optional. or a null. or the  entire flow service. EXIT The EXIT step exits the entire flow service or a single flow step. When an  exception is thrown. The BRANCH step executes the child  flow step whose label matches the value of the field specified in the  Switch property.  $default. Switch Evaluate labels Conditions that Will Cause a BRANCH Step to Fail „ The switch field is not in the pipeline and the BRANCH step does not contain a  default child step or a child step to handle null values. At run time. Specifically. 386 webMethods Developer User’s Guide Version 7. unmatched. or empty string ($null. „ The BRANCH step does not complete before the time‐out period expires. The EXIT step can throw an exception if the exit is considered a failure. To branch on the  Switch value.1 . it may exit  from the nearest ancestor loop step. select False.1.) Specifies a name for this instance of  the BRANCH step. To branch on expressions. blank). (Required if you are using this BRANCH step as a target for  another BRANCH or EXIT step.   Specifies whether or not you want the server to evaluate labels of child  steps as conditional expressions.

 (Required if you are using this EXIT step as a target for a  BRANCH step. Nearest ancestor step that has a label that  matches this value. Specifies the flow step or service from which you want to  exit. If you want to use the value of a pipeline  variable for this property. A FAILURE  condition exits the flow service or step and throws an exception. Signal Required.  For example.throwError( ). $default.) Specifies a name for this specific step. Required. Specify this value… $parent $loop $flow label To exit the… Parent flow step. „ Exit a LOOP or REPEAT flow step without throwing an exception.1. Nearest parent LOOP or REPEAT step. webMethods Developer User’s Guide Version 7. Optional. regardless of the type of step. Entire flow. or a null.   Property Comments Label Description Optional.1 387 . Specifies the text of the exception message that is displayed  when Signal is set to FAILURE. Specifies a descriptive comment for the step. type the variable name between % symbols. Exit from Failure message Examples of When to Use „ Exit an entire flow service from within a series of deeply nested steps. or empty string ($null. Specifies whether the exit is considered a success or a  failure. %mymessage%. Optional. „ Throw an exception when you exit a flow service or a flow step without having to  write a Java service to call Service.  unmatched. blank). A SUCCESS condition exits the flow service or step. Note: If the label you specify does not match the  label of an ancestor flow step. The  text of the exception message is contained in the Failure message property.A webMethods Flow Steps Properties The EXIT step has the following properties. the flow will exit  with an exception.

 If you want the input to be  validated. If you want the output to  be validated. If this time elapses before the step completes. If you do not want the input to be validated. If you do not need to specify a time‐out period. „ The specified service is disabled.1. 388 webMethods Developer User’s Guide Version 7. select True. Optional. (Required if you are using this step as a target for a  BRANCH or EXIT step.) Specifies a name for this specific step. „ The specified service does not exist.A webMethods Flow Steps INVOKE The INVOKE flow step invokes another service. including another flow service.  %expiration%. Specifies whether the server validates the input to the  service against the service input signature. For example. or a  null. Specifies the name of a document (IData object) in the  pipeline to which you want to restrict this step. You can use it to invoke any type of  service. Optional. blank). unmatched. Specifies the fully qualified name of the service to invoke. Properties The INVOKE step has the following properties.  select False.  If you want to use the value of a pipeline variable for this property. leave this property blank. Specifies the maximum number of seconds that this step  should run. Required. Specifies a descriptive comment for the step. If you want this step to  have access to the entire pipeline.  type the variable name between % symbols. Optional. Optional. select True. leave Timeout blank. or empty string ($null.  Label Optional.1 . Specifies whether the server validates the output of the  service against the service output signature. $default. If you do not want the output to be validated. the server  waits for the step to complete and then raises an exception.  Timeout Service Validate input Validate output Conditions that Will Cause an INVOKE Step to Fail „ The service that is invoked fails.    Property Comments Scope Description Optional.  select False.

The LOOP step No more input array members? Yes get next member of input array input is an array child child child Properties The LOOP step has the following properties. %expiration%.  specify a document that contains the fields you want to collect for the output variable. Optional. the server  waits for the step to complete and then raises an exception.  use the LOOP step to invoke the service one time for each string in the string list. You can also designate a single variable for output.  Timeout webMethods Developer User’s Guide Version 7. leave Timeout blank. If you want to collect more than one variable. Specifies a descriptive comment for the step.A webMethods Flow Steps LOOP The LOOP step takes as input an array variable that is in the pipeline. Specifies the maximum number of seconds that this step  should run. If this time elapses before the step completes. Optional.   Property Comments Scope Description Optional. If you want this step to  have access to the entire pipeline. if you have a service that takes a string as input and a string list in the pipeline. For example. It loops over the  members of an input array. executing its child steps each time through the loop. leave this property blank. If you want to use the value of a pipeline variable for this property. You identify a single array variable to use as input when you set the properties for the  LOOP step. Specifies the name of a document (IData object) in the  pipeline to which you want to restrict this step.1. The LOOP step collects  an output value each time it runs through the loop and creates an output array that  contains the collected output values. If you do not need to specify a time‐out period.1 389 . type  the variable name between % symbols. For  example.

„ The input field is not an array field. it is no longer available to subsequent services in the flow. You must  specify a variable in the pipeline that is an array data type (that is. you can: „ Link (copy) the value of a pipeline input field to a new or existing pipeline output  field.) „ Assign a value to a pipeline output field.  Input array Output array Conditions that Will Cause a LOOP Step to Fail „ The pipeline does not contain the input array. Specifies the name of the field in which the server places  output data for an iteration of the loop. „ A child step of the LOOP step fails during any iteration of the loop. You do not  need to specify this property if the loop does not produce output values.) Specifies a name for this specific step. (Required if you are using this step as a target for a BRANCH  or EXIT step. $default. The server collects the output  from the iterations into an array field with the same name.  String list. Specifies the input array over which to loop.1. MAP The MAP step adjusts the pipeline at any point in a flow. Within the MAP step. „ The LOOP step does not complete before the time‐out period expires. document list. 390 webMethods Developer User’s Guide Version 7. or empty string ($null.A webMethods Flow Steps Property Label Description Optional. Optional. or a null.  unmatched. blank). (Keep in mind that once you drop a field from  the pipeline. Required. It makes pipeline modifications  that are independent of an INVOKE step. or Object list). String table. „ Perform document‐to‐document mapping in a single view by inserting transformers.1 . „ Drop an existing pipeline input field.

 (Required if you are using this step as a target for a BRANCH or  EXIT step. to initialize  variables). blank).1 391 .1. the server waits for the  step to complete and then raises an exception. You insert the MAP step at the beginning of the flow. You can set the repeat condition to one of the following: „ Repeat if any one of the child steps fails. For example.   If you want to use the value of a pipeline variable for this property. see “What Are  Transformers?” on page 212. Optional. unmatched. Property Comments Scope Description Optional. Timeout Example of When to Use „ You want to assign an initial set of input values in a flow service (that is. leave this property blank. Insert transformers into the MAP step to perform the needed data  transformations.  Label Optional. $default. webMethods Developer User’s Guide Version 7. If you do not need to specify a time‐out period. or a null. Specifies the maximum number of seconds that this step should  run.) Specifies a name for this specific step. If you want this step to have access to the  entire pipeline. „ You want to map a document from one format to another (for example. Specifies the name of a document (IData) in the pipeline to which  you want to restrict this step. type the  variable name between % symbols. %expiration%. „ Repeat if all of the elements succeed. Specifies a descriptive comment for this step. It determines whether to re‐execute the child steps based on a Repeat on  condition. and then use the Set Value modifier to assign values to the appropriate variables in Pipeline Out. If this time elapses before the step completes. Optional. leave Timeout blank. For more information about transformers. cXML to  XML).A webMethods Flow Steps Properties The MAP step has the following properties. REPEAT The REPEAT step repeatedly executes its child steps up to a maximum number of times  that you specify. or  empty string ($null. You can also specify a time period that you want the REPEAT flow step to wait before it  re‐executes its child steps.

 leave Timeout blank. %expiration%. leave this property blank.1. Set Count to 0 (zero) to instruct the  server that the child steps should not be re‐executed. unmatched. Specifies the maximum number of times the server re‐executes  the child steps in the REPEAT step.A webMethods Flow Steps The REPEAT step reps=0 child reps = reps + 1 child child wait for repeat interval Yes reps < Count ? No Exit Yes Repeat condition met? No Exit Properties The REPEAT step has the following properties. $default. Specifies a descriptive comment for this step. If this time elapses before the step completes. Specifies the name of a document (IData object) in the pipeline  to which you want to restrict this step. For example.  If you want to use the value of a pipeline variable for this property. If you want this step to have access  to the entire pipeline. (Required if you are using this step as a target for a BRANCH or  EXIT step. Set Count to -1 to instruct the server to re‐ execute the child steps as long as the specified Repeat on condition is true.1 . Property Comments Scope Description Optional. Required. If you do not need to specify a time‐out period. For example.  If you want to use the value of a pipeline variable for this property. blank). type  the variable name between % symbols. Timeout Count 392 webMethods Developer User’s Guide Version 7. Set Count to a value  greater than zero to instruct the server to re‐execute the child steps up to a  specified number of times. %servicecount%. Optional. type  the variable name between % symbols. or a null. or  empty string ($null. Optional. the server waits for the  step to complete and then raises an exception.) Specifies a name for this specific step.  Label Optional. Specifies the maximum number of seconds that this step should  run.

 Use in a Web‐automation service when you want  to repeat a load and query step and a “Next Page” button exists in the current  document. the  REPEAT flow step attempts to retry the service again.  Select SUCCESS to re‐execute the child steps when the all the child steps  complete successfully. Examples of When to Use „ “Repeat on” property is set to FAILURE. If the REPEAT step is a child of another step.  When Does REPEAT Fail? The following conditions cause the REPEAT step to fail: If “Repeat on” is set to… SUCCESS FAILURE The REPEAT step fails if… A child within the REPEAT block fails. type  the variable name between % symbols. indicating that there are additional pages to be processed. You also set a Repeat interval that  causes the REPEAT flow condition to wait a period of time before invoking the  service again. the failure is propagated to its parent. %waittime%. Specifies when the server re‐executes the REPEAT child steps. Specify 0 (zero) to re‐execute the child steps  without a delay. For example.A webMethods Flow Steps Property Repeat interval Description Optional. Use when a service accesses a remote server and  you want the service to retry if the server is busy.1 393 .    If you want to use the value of a pipeline variable for this property. If the service attempts to access the Web site and it fails. The Count limit is reached before its children execute  successfully. „ “Repeat on” property is set to SUCCESS. Select FAILURE to re‐execute the child steps when  any one of the child steps fails. Repeat on Required. and then set the Repeat on  property to FAILURE.1. End the  REPEAT flow step when the query step fails to retrieve a “Next Page” button in the  current document. Make the service that accesses the  remote server a child element of a REPEAT flow step.  webMethods Developer User’s Guide Version 7. Specifies the number of seconds the server waits before re‐ executing the child steps.

 under what condition. If a child step  succeeds. Scope Optional. if so. child If exit condition is child If exit condition is child Properties The SEQUENCE step has the following properties. The SEQUENCE step First. If this time elapses before the step completes. leave this property blank. the server waits for the  step to complete and then raises an exception. If you want this step to have access to  the entire pipeline. Use this condition when you want to ensure that  all child steps are completed successfully. Use this condition when you want to  execute all of the child steps regardless of their outcome. For example. another is attempted. so that if one fails. Use this condition when you want to define  a set of alternative services. unmatched. type the  variable name between % symbols..  Label Optional. $default. Timeout 394 webMethods Developer User’s Guide Version 7. Optional.  If you want to use the value of a pipeline variable for this property. If any child step fails. If you do not need to specify a time‐out period. blank). „ Exit the sequence when a child step succeeds..) Specifies a name for this specific step. Specifies a descriptive comment for this step.1 . the sequence ends prematurely and the sequence succeeds. The sequence does not end  prematurely. %expiration%. Specifies the name of a document (IData object) in the pipeline to  which you want to restrict this step. Specifies the maximum number of seconds that this step should  run. „ Exit the sequence after executing all child steps. This is  useful when you want to group a set of steps as a target for a BRANCH step.A webMethods Flow Steps SEQUENCE The SEQUENCE step forms a collection of child steps that execute sequentially. or a null. leave Timeout blank. (Required if you are using this step as a target for a BRANCH or  EXIT step. or  empty string ($null. Property Description Comments Optional. You can set an exit condition that indicates whether the sequence should exit prematurely  and.1. Specify one of the following exit conditions: „ Exit the sequence when a child step fails. the sequence ends  prematurely and the sequence fails.

webMethods Developer User’s Guide Version 7.   DONE Conditions that Will Cause the SEQUENCE Step to Fail This section describes the conditions that cause failure based on the exit condition for the  sequence. The SEQUENCE step executes all of its child steps  regardless of whether they succeed or fail.A webMethods Flow Steps Property Exit on Description Required. Specify this value. This is the  default.1. (Execution  continues with the next flow step in the flow service. conditions that will cause a failure include:  „ All the child steps fail.. If Exit on is set to FAILURE. the Integration Server returns the pipeline to the state  it was in before the SEQUENCE step executed. If Exit on is set to SUCCESS. the  Integration Server rolls back the pipeline contents. „ The SEQUENCE step does not complete before the time‐out period expires. Specifies when to exit the SEQUENCE step. Exit the sequence when a child step fails. If Exit on is set to DONE. „ The SEQUENCE step does not complete before the time‐out period expires.) The SEQUENCE step executes its child steps until either  one fails or until it executes all its child steps. Note: When a SEQUENCE step exits on failure.1 395 . conditions that will cause a failure include:  „ One of the child steps fails. FAILURE To... (Execution  continues with the next flow step in the flow service.  SUCCESS Exit the sequence when a child step executes  successfully or after all child steps fail. That  is. conditions that will cause a failure include:  „ The SEQUENCE step does not complete before the time‐out period expires.) Exit the sequence after all child steps execute..

A webMethods Flow Steps 396 webMethods Developer User’s Guide Version 7.1 .1.

. . . . . . . . . . . . . . . . . . . . . . . . .B Regular Expressions 398 398 398 „ What Is a Regular Expression? . . . . . . . . . „ Regular Expression Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . webMethods Developer User’s Guide Version 7. . . . . . . . . . . „ Using a Regular Expression in a Mask . . . . . . .1 397 . . . . . . . .

 for example. the regular expression /webMethods/ would match all of the  following strings: “webMethods” “You use webMethods Integration Server to execute services” “Exchanging data with XML is easy using webMethods” “webMethods Integration Server” Important! Characters in regular expressions are case sensitive. you must enclose the expression between / symbols. the object reference: doc. To… Match any single character except a new line. Example  doc. To specify a regular expression.*/] retains the first 30 characters in each matching element and discards the rest. you use parenthesis to specify which  characters you want to collect. For example. A simple pattern‐matching string such as /string/ matches any element that contains  string.p[/web.text This example would return any paragraph containing the string ‘web’  followed by any single character and the string ‘ethods’. So. For example. a property.{30}).  When the server encounters this symbol.B Regular Expressions What Is a Regular Expression? A regular expression is a pattern‐matching technique used extensively in UNIX  environments. Using a Regular Expression in a Mask When you use a regular expression as a mask. It would match  both ‘webMethods’ and ‘webmethods’. Use this symbol… .p[].ethods/]. you can use a regular  expression to specify an index. webMethods Developer lets you use regular expressions to specify  pattern‐matching strings for some of its functions.1. or a mask in a webMethods Query Language  (WQL) statement.text[/(. You can also use a regular expression to specify the switch value for a  BRANCH step. it knows to interpret the characters between  these symbols as a pattern‐matching string (that is. Regular Expression Operators Following are the operators supported in the webMethods implementation of regular  expressions. a regular expression). 398 webMethods Developer User’s Guide Version 7.1 .

text This example would return any paragraph containing the string ‘part’  followed by zero or more spaces and then the characters ‘555‐A’. When used in a mask.B Regular Expressions Use this symbol… ^ To… Match the beginning of the string or line.p[]. Example  doc. + Match the preceding item 1 or more times.text[(^.p[/webMethods$/].p[/^webMethods/].0)+May/].0’ and then the  characters ‘May”.text This example would return any paragraph containing the string  ‘webMethods’ at the end of the paragraph element or at the end of any  line within that element. they specify characters that you want to retain.1 399 . ? Match the preceding item 0 or 1 times.p[/part *555-A/]. Example  doc.{25}). $ Match the end of the string or line. * Match the preceding item zero or more times. Example  doc. Example  doc.text This example would return any paragraph containing the string ‘part’  followed by one or more spaces and then the characters ‘555‐A’.text This example would return any paragraph containing the string ‘part’  followed by one or more occurrences of the characters ‘.p[/part(.p[/part +555-A/].p[/part ?555-A/].text This example would return any paragraph containing the string  ‘webMethods’ at the beginning of the element or at the beginning of any  line within that element.text This example would return any paragraph containing the string ‘part’  followed by zero or one space and then the characters ‘555‐A’.*] This example would keep the first 25 characters within each paragraph  and discard the rest. Example  doc.1. Example  doc. Example doc. these characters group an item within the regular  expression. webMethods Developer User’s Guide Version 7. (   ) When used in an index.

text This example would return any paragraph that contained the characters  ‘555‐A’ as part of a larger word such as AZ555‐A.1 . {n . ‘support’.4}webmethods/].p[/^.{1.p[/webmethods|webMethods/]. but not more than m times. \B Match a boundary that is not a word boundary.text This example would return any paragraph in which the word  ‘webmethods’ started in character position 2 through 5 of the paragraph.1. {n .text This example would return any paragraph that contained the word ‘port’. but not  ‘555‐A’ alone. or Dept555‐A.m } Match the preceding item at least n times.B Regular Expressions Use this symbol… {n } To… Match the preceding item exactly n times.  {0.text This example would return any paragraph in which the word  ‘webmethods’ started in any of the first 5 character positions of the  paragraph.{10. \b Match a word boundary.} Match the preceding item n or more times.4}webmethods/].{0. Example  doc.}webmethods/]. Example  doc.p[/^.p[/\B555-A/].  but not paragraphs that contained these characters as part of a larger  word.p[/\bport\b/].p[/^. ‘ports’ or ‘ported’.text This example would return any paragraph in which the word  ‘webmethods’ appeared anywhere after the 10th character position of the  paragraph. Example   doc. Example  doc.p[/^.m } Match the preceding item none or at most m times. such as ‘import’. That is. Example  doc. | Match the expression that precedes or follows this character.text This example would return any paragraph that contained either  ‘webmethods’ or ‘webMethods’.text This example would return any paragraph in which the word  ‘webmethods’ started in the 25th character position of the paragraph. Example  doc. this example would return a paragraph in which the  word ‘webmethods’ started in the 11th or later character position of the  paragraph. Example  doc. 400 webMethods Developer User’s Guide Version 7.{24}webmethods/].

text This example would return any paragraph containing the string  ‘webMethods’ at the beginning of the element or at the beginning of any  line within that element.text This example would return any paragraph containing the string  ‘webMethods’ followed by a form feed character. Example  doc. Example  doc.p[/webMethods\Z/]. \f Match a form feed character.1 401 .text This example would return any paragraph containing the string  ‘webMethods’ preceded by a tab character.p[/webMethods\r/].B Regular Expressions Use this symbol… \A To… Match only at the beginning of a string (equivalent to ^). \d Match any digit. \t Match a tab character. \n Match a new line.text This example would return any paragraph containing the string  ‘webMethods’ followed by the new line character.p[/part \d555-A/]. Example  doc. \Z Match only at the end of a string (or before a new line at the end).p[/\twebMethods/].p[/\AwebMethods/].p[/webMethods\n/]. and is followed by the characters 555‐A. \r Match a carriage return. Example  doc. webMethods Developer User’s Guide Version 7. Same as [0‐9]. it would match ‘part 1555‐A’ but not ‘part A555‐A’ or ‘part  #555‐A’. Example  doc.1.text This example would return any paragraph containing a part number that  starts with any digit 0 through 9. Example  doc.text This example would return any paragraph containing the string  ‘webMethods’ at the end of the paragraph element or at the end of any  line within that element. Example  doc.text This example would return any paragraph containing the string  ‘webMethods’ followed by a carriage return.  Therefore.p[/webMethods\f/].

1. Example  doc.p[/part \W4555-A/]. Same as [0‐9a‐z_A‐Z]. Example  doc. and is followed by the  characters 555‐A.p[/\x1FwebMethods/]. Example  doc. \W Match any nonword character. Same as [\t\n\r\f]. \xnn Match any character with the hexadecimal value nn. a  carriage return.text This example would return any paragraph containing the string  ‘webMethods’ if it is preceded by a tab character. or a form‐feed character.text This example would return any paragraph that is not empty (null). it would match ‘part A555‐A’ and ‘part 1555‐A’.text This example would return any paragraph containing a part number that  starts with a character other than a letter or digit.p[/\swebMethods/]. it would match ‘part A555‐A’ and ‘part #555‐ A’.  Therefore. Same as [^\t\n\r\f]. Therefore. \0 Match a null string. 402 webMethods Developer User’s Guide Version 7. Same as [^0‐9a‐z_A‐Z]. \s Match any white‐space character. a carriage return.text This example would return any paragraph containing a part number that  starts with any character other than 0 through 9.p[/[^\0]/]. a new line  character.text This example would return any paragraph containing the ASCII unit‐ separator character (1F) followed by the characters ‘webMethods’. and is followed by the  characters 555‐A.B Regular Expressions Use this symbol… \D To… Match any non‐digit. a new line character. \S Match any nonwhite‐space character. Example  doc. but not ‘part 1555‐A’. Example  doc. \w Match any word character. but not ‘part  #555‐A’. or a form‐feed character. but not ‘part 1555‐A’ or ‘part A555‐A’. Same as [^0‐9].p[/part \w4555-A/].p[/part \D555-A/]. Therefore. it would match ‘part #555‐A’ and ‘part ‐555‐ A’. Example  doc.p[/\SwebMethods/]. Example  doc.text This example would return any paragraph containing a part number that  starts with a letter or digit and is followed by the characters 555‐A. if that string is not preceded by a tab character.1 .text This example would return any paragraph containing the string  ‘webMethods’.

 but not  ‘part 0555‐A’.p[/part [A-M]555-A/]. Example  doc.text This example would return any paragraph containing a  part number that starts with any letter A through M and  is followed by the characters 555‐A. it would  match ‘part A555‐A’ and ‘part J555‐A’.p[/part [^023]555-A/].  Therefore. but is followed by the characters 555‐A.  or 3.B Regular Expressions Use this symbol… [  ] To… Match any character within the brackets. Example  doc. 2. it would match ‘part 0555‐A’ and ‘part 2555‐A’. but not ‘part  N555‐A’.text This example would return any paragraph containing a  part number that does not start with the numbers 0. The following characters have special meaning when used within  brackets: Use this char… ^ To… Exclude characters from the pattern. or 3 and is followed by the characters 555‐A. Example  doc.1 403 .p[/part [023]555-A/].  it would match ‘part 4555‐A’ and ‘part A555‐A’.text This example would return any paragraph containing a part number that  starts with the numbers 0. 2. but not ‘part  4555‐A’. Therefore. webMethods Developer User’s Guide Version 7. - Specify a range of allowed characters.1. Therefore.

B Regular Expressions 404 webMethods Developer User’s Guide Version 7.1 .1.

. . webMethods Developer User’s Guide Version 7. .C Supported Data Types 406 409 „ Data Types . . . . . . . . . . . . . . . . . .1 405 . . . . . . . . . . . . . . . . . . . . .1. . . . . . . . . . . . . . . . . . . . . . . . „ Default Pipeline Rules for Linking to and from Array Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . .

 including additional IData objects and  IDataCodable objects. An IData object is the  collection of name/value pairs on which a service operates.util.wm.IData interface or  a reference to an existing  com.data. A one‐dimensional String  array.IData interface or  a reference to an existing  com. A document whose  structure is defined by an  IS document type.data.Values [ ] com.wm.util.wm.wm.  A one‐dimensional array  of IS document types  (IData [ ]or Values [ ]).util. Documents can  contain variables of any  other data type.String[ ][ ] com.IData [ ] com. see the  webMethods Integration Server  Java API Reference.lang.wm. The  contents of a document  (IData object) are stored as  key/value pairs where the  variable name is the key. Reference to an existing object  which implements the  com.Table Document  reference Reference to an existing object  which implements the  com. Java Type java. Document list com.Values For more information.lang.wm.IData com.util.data.String java.wm.data. A two‐dimensional String  array.util.C Supported Data Types Data Types Data is passed in and out of a service through an IData object.wm. Document  reference list A document  list whose  structure is defined by an  IS document type.1 .1.lang.wm. An IData object can contain  any number of elements of any valid Java objects.Values object.  A data structure that is a  container for other  variables. The following table  identifies the data types supported by Developer.String[ ] java. Each element stored in an IData object corresponds to a data type.Values object.  Data Type String  String list  String table Document  Icon Description String of characters. 406 webMethods Developer User’s Guide Version 7.

 Developer validates the data to make sure it is of the  correct type.  „ You can assign values to variables in the pipeline using the Set Value   modifier. see “Applying Constraints to Variables” on page 255. and is not  declared to be one of the  basic Java classes  supported natively by  Integration Server.  Example  java.  „ Other developers can easily see the types contained in an IS document type. Note: Developer displays small symbols next to a variable icon to indicate validation  constraints.  „ You can input values for the variable when testing and debugging. Java Classes for Objects You can further describe the contents of an Object or Object list variable by applying a  Java class to the variable.Object.  An array of Objects of  unknown type.InputStream Object list  An array of any subclass of  java. Developer uses   to indicate an optional variable.  Example  java. This  icon is used for Objects of  unknown type. Java Type Any subclass of java.InputStream[ ] Note: You can view the actual data types represented by Object or Object list icons in  built‐in services by looking up the service in the webMethods Integration Server Built‐In  Services Reference.C Supported Data Types Data Type Object  Icon Description A data type that does not  fall into any of the data  types described in the  above rows.lang. webMethods Developer User’s Guide Version 7. When you apply a supported Java class to an Object or Object  list variable. Applying Java classes to Objects  and Object lists can provide the following benefits: „ Other developers can easily see the types your service expects as inputs and produces  as output.1 407 . Developer uses the ‡  symbol to denote a variable with a content constraint. Developer changes the icon for the variable.lang.util. For information about applying  constraints to variables. Note: When you input values for a constrained Object during testing or when  assigning a value in the pipeline.util.Object.1.

Float[ ] java.lang. Standard‐precision floating point  number.lang.Integer[ ] java.1.lang. The value must be  greater than or equal to –128 but  less than or equal to 127.lang.lang.  A one‐dimensional byte array. The value must be  greater than or equal to   –9223372036854775808 but less  than or equal to  9223372036854775807. Double‐precision floating point  number.Boolean[ ] java. The value must be  greater than or equal to  ‐ 2147483647 but less than or equal  to 2147483647. Signed integer.Float java. Signed integer.Integer integer list long java. A one‐dimensional character  array. A one‐dimensional boolean array.Byte byte [ ] byte list character character list date date list double double list float float list integer primitive type java. A one‐dimensional float array. A single unicode character.lang.  A one‐dimensional date array.lang. A one‐dimensional byte array. Signed integer.Boolean java.lang.lang.Character[ ] java. A one‐dimensional double array.lang.Double java.Byte[ ] java.Character java.Date java.1 .lang. Date and time. A one‐dimensional long array. Java Class java.util.Double[ ] java.lang.C Supported Data Types The following table identifies the Java classes you can apply to Objects and Object list  variables in Developer.util. Data Type boolean boolean list byte Icon Description True or false. A one‐dimensional integer array.lang.Date[ ] java.lang.Long long list java.Long[ ] 408 webMethods Developer User’s Guide Version 7.

 For more information about  specifying Java classes for Objects.C Supported Data Types Data Type short Icon Description Signed integer. Scalar variables are those that hold a  single value. For  example. Services in the WmDB package use tables  that are instances of wm.util. you can specify which element  of the array variable you want to link to or from. Tables can also be declared as Objects.lang. Developer does not provide a separate data type for  tables. see “Considerations for Object Constraints” on  page 257.Table appear as document lists in webMethods Developer. Although Developer permits a link between constrained Objects of different  Java classes. such as String list.WMIDataList interface appear as Objects of  unknown type in webMethods Developer.util.  Developer uses the default rules on the Pipeline tab to determine the value of the target  variable.lang. IS document type.1 409 .1. How webMethods Developer Supports Tables With the exception of String table. you can link a String to the second element of a String list. Default Pipeline Rules for Linking to and from Array Variables When you create links between scalar and array variables. webMethods Developer User’s Guide Version 7. These tables  can be used as document lists in flow services. such as String.Short[ ] Note: Object and Object list variables constrained with a Java classes should be linked  only to other Object and Object list variables of the same Java class or of unknown  type. tables can appear as document lists or Objects. Objects or user‐defined table‐like objects that do  not implement the com. A one‐dimensional short array.  If you do not specify which element in the array variable that you want to link to or from. document list. The following table identifies the default pipeline rules for linking to and from  array variables. String table. and Object list.util.wm.Short short list  java.Table. Tables that are instances  of com.wm.pluggable. However. Java Class java. Array variables are those that  hold multiple values.com. The value must be  greater than or equal to ‐32768 but  less than or equal to 32767. the run‐time behavior is undefined. and Object.

value If you link… A scalar  variable [empty] To… An array variable with a  defined length value Then… The length of the array is preserved  and each element of the array is  assigned the value of the scalar  variable.1. it contains  one element and has length of one. that is. value X Y Z To… A scalar variable value value value Then… The scalar variable is assigned the  first element in the array.C Supported Data Types If you link… A scalar  variable To… An array variable that is  empty (the variable does not  have a defined length) Then… The link defines the length of the  array variable.1 . If you link… An array  variable X Y Z [empty] X 410 webMethods Developer User’s Guide Version 7.  The first (and only) element in the  array is assigned the value of the  scalar variable.

1 411 .  For example:   webMethods Developer User’s Guide Version 7. If the lengths are equal.1. If the lengths  do not match.C Supported Data Types If you link… An array  variable To… An array variable that does  not have a defined length Then… The link defines the length of the  target array variable. To… An array variable that has a  defined length X Y Z A B C X Y Z No link occurs. the link will not  occur. the  elements in the target array variable  are assigned the values of the  corresponding elements in the  source array variable. that is. X Y Z If you link… An array  variable [empty] X Y Z Then… The length of the source array  variable must equal the length of the  target array variable. it will  be the same length as the source  array variable. The elements in the  target array variable are assigned  the values of the corresponding  elements in the source array  variable. V W X Y Z A B C Note: A source variable that is the child of a document list is treated like an array  because there is one value of the source variable for each document in the document  list.

DocumentLis DocumentList1 a DocumentList1 String b DocumentList1 String c String Then the value of StringList1 is… StringList a b c 412 webMethods Developer User’s Guide Version 7.1..C Supported Data Types If you link...1 . DocumentLis String To.. StringList Where the value of DocumentList1 is...

. . . . . „ Rules for Use of Expression Syntax with the Broker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Precedence . . . . . . . . . . . . . . . . . . webMethods Developer User’s Guide Version 7. . . . „ Operators . . . . . . . . . . . . . . . . . . . . . . . . .1. . . . . . . . . . . „ Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Addressing Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1 413 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .D Conditional Expressions 414 415 418 424 425 428 „ Overview . . . . . .

 For more information. you can create local filters to further limit the messages a JMS  trigger processes. see “The BRANCH Step” on page 160 „ In pipeline mapping.D Conditional Expressions Overview webMethods Integration Server provides syntax and operators that you can use to create  expressions for use with the BRANCH step. „ For JMS triggers.  Integration Server applies a local filter to the message after the JMS trigger receives  the message from the JMS provider. Important! If multiple conditions in the trigger specify the same publishable  document type. „ Some syntax that is valid on the Integration Server is not valid on the Broker. „ In a BRANCH step. the filter applied to the publishable document type must be the  same in each condition.1 . At run  time. see “Rules for Use of Expression Syntax with the Broker” on page 428. the Integration Server executes  the first child step whose conditional expression evaluates to “true”.” For more information about applying conditions to links between  variables. Subscriptions and filters are always  saved on the Integration Server. A filter specifies criteria for the contents of the message body. If the  syntax is valid for a Broker. you can use an expression to determine the child step that  webMethods Integration Server executes. see the Publish‐ Subscribe Developer’s Guide. the Broker or Integration Server applies the filter to the  document. „ White space between the tokens of an expression is ignored. „ For Broker/local triggers. When you write expressions and filters. For a list and an example of syntax that prevents a filter from being saved on the  Broker. the Integration Server saves the filter with the  subscription on the Broker.1. webMethods Integration Server only executes the link if the assigned condition  evaluates to “true. A filter specifies criteria for the contents of a  document. keep the following points in mind: „ Operators. the Integration Server saves the  subscription without the filter on the Broker. see “Applying Conditions to Links Between Variables” on page 204. you can further refine a subscription by creating filters for  the publishable document types. At run time. If the message meets the filter criteria. The Broker or Integration Server will route or process the document only  if the document meets the filter criteria. For more  information about the BRANCH step. variable names. you can place a condition on the link between variables. and strings are case sensitive. and triggers. If the syntax is not valid. At run time. pipeline mapping.      414 webMethods Developer User’s Guide Version 7. Integration  Server executes the trigger service specified in the routing rule.

 numbers. The following table identifies the types of values you can use in an  expression and the syntax for each value type.  WM95157) Variable variableName –OR– %variableName% Variable name.1 415 .D Conditional Expressions Syntax When you create an expression. Values can be represented as variable names.1.  Example price Explanation Value of the price  variable Value of the postalCode  variable in the address  document Value of the first  element in the poItems  array  %address/postalCode% %poItems[0]% webMethods Developer User’s Guide Version 7.  and strings. you need to determine which values to include in the  expression. see “Addressing  Variables” on page 425.  Value Type Regular  Expression Syntax /regularExpression/ Description Pattern‐matching string. regular expressions.  see Appendix B. Example sku = /^WM[0-9]+/ Explanation Evaluates to true if the  sku variable has a value  that starts with “WM”  and is followed by one  or more digits (WM001. “Regular Expressions”. Use the following  syntax for pattern matching of variable values: variableName = /regularExpression/  For more information about regular expressions. For information about how to use  this syntax to address children of other variables  or elements of array variables.

Example %quantity% = $null Explanation Evaluates to true if the  quantity variable is  missing from the input  data or is null 416 webMethods Developer User’s Guide Version 7.345e+4 Null $null Variable is null or missing.Double) Scientific notation 6. The following examples indicate the  accepted number formats: Examples -10.lang. 5. Typically compared  with a variable name to determine if the variable  is null or missing from the input data.02 Explanation Integers Floating point number  (java. 6.D Conditional Expressions Value Type String Syntax ʺstringʺ –OR– ʹstringʹ Description Literal string.1 . Number number Number.  Example “Favorite Customer” Explanation Value is the literal string  “Favorite Customer”  Value is the literal string  “Favorite Customer” ‘Favorite Customer’ Note: Strings not enclosed in quotes (ʹ or ʺ) are  interpreted as variable names. Use this value type to compare the  value of a variable to a string.1. 100 5.0.

 For  example.x or ‐xxxx..x Example: 1234.1. you must use the following syntax to represent the constant value: If the object is constrained as type. Byte ʺxxʺ  Example: ʺ10ʺ (for 0X0A) Character ʺaʺ  Example: ʺCʺ  Double xxxxxx.1 Integer xxxxx or ‐xxxxx Example: 12345.. ‐1234..x or xxxxxx or ‐xxxxxx Example: 123456..1 417 .0. the expressions %myBoolean%=="true" and  %myBoolean%=="tRUe" are equivalent. 123456. ʺtrueʺ or ʺfalseʺ  Example: %myBoolean%=="true" The string constant in the expression is case insensitive.D Conditional Expressions Comparing Java Objects to Constants If you want to create a conditional expression that compares a constrained Java Object to  a constant value.1. ‐123456 Float xxxx. ‐12345 Long xxxxxx or ‐xxxxxx Example: 123456 or ‐123456 Short xxx or ‐xxx Example: 123 or ‐123 Date ʺyyyy‐MM‐dd HH:mm:ss timezoneʺ Example: ʺ2002‐06‐25 00:00:00 EDTʺ webMethods Developer User’s Guide Version 7. Boolean Use this syntax.

The color variable does not exist or  is null and the size variable does  not exist or is null.  „ Lexical relational operators can be used to compare the contents of fields (variables)  with string values in Broker/local trigger filters.D Conditional Expressions Checking for Variable Existence Sometimes you might want to create an expression that checks only for the existence of a  variable or checks to see whether a variable is null. This example. The quantity variable does not  exist or is null. This example.. Logical operators are used to combine multiple expressions  into a single condition. Relational Operators You can use relational operators to compare the value of two fields or you can compare  the value of a field with a constant.. !color & !size Operators Expressions can include relational and logical operators.  Relational operators are sometimes called comparison operators. customerID Evaluates to true if... !quantity Evaluates to true if. The customerID variable exists and  is not null.1.. The Integration Server provides two types of  relational operators: standard and lexical. 418 webMethods Developer User’s Guide Version 7. The following table describes the  syntax used to check for variable existence. „ Standard relational operators can be used in expressions and filters to compare the  contents of fields (variables) with other variables or constants. Relational operators are used to  compare values to each other.. Variable  does not  exist !variableName Evaluates to true if the specified variable does not  exist or is null. To see if… Variable  exists Use this syntax… variableName Description Evaluates to true if the specified variable exists and  has a non‐null value.1 ...

 the Integration Server  compares each byte in the first string with each byte in the second string to determine  which string is numerically greater. “A” has a value of 65 and “a” has a  value of 97.1 419 . the Broker automatically places the document  in the subscriber’s queue. string. A < a. This example. the Integration Server uses a  binary code point comparison algorithm.. The value of the sku variable is  “WM001.” == a == b Equal to. a > A. etc. This example. The Broker does not evaluate the filter for the document.  When comparing strings using the standard operators.D Conditional Expressions Note: You can also use standard relational operators to compare string values. B > A.. customerID = "webMethods" Evaluates to true if.. A < Z. In this algorithm.1. c > A)... filters that use standard relational operators to compare string values will  not be saved with the trigger subscription on the Broker. The following table identifies the standard relational operators you can use in  expressions and filters.  „ The Integration Server considers lowercase letters to be greater than the matching  uppercase letter (for example. A < B. The value of the customerId  variable is “webMethods.  Operator = Syntax a = b Description Equal to. sku == "WM001" webMethods Developer User’s Guide Version 7. For example.. dates. a < B.) or another variable.. If the subscription filter  resides only on the Integration Server.” Evaluates to true if. Standard Relational Operators You can use the standard relational operators to compare the contents of a variable with  any type of value (numerical. creating greater network traffic  between the Broker and the Integration Server and requiring more processing by the  Integration Server. Z > A). Boolean.  Keep the following points in mind when using standard relational operators to compare  strings:  „ The Integration Server considers A to be the lowest letter and Z to be the highest (for  example. so “a” is greater than “A”.  However.  The Broker routes all of documents to the subscriber.

quantity < 5 companyID < "Acme" 420 webMethods Developer User’s Guide Version 7. quantity != 0 Evaluates to true if. <> a <> b Not equal to. The value of the companyID  variable is greater than or equal to  Acme.1 .... Evaluates to true if.. The value of the quantity variable  is less than 5. %totalPrice% >= 100 companyID >= "Acme" < a < b Less than. Evaluates to true if. The value of the companyID  variable is less than Acme. Evaluates to true if. This example... This example. The value of the state variable does  not equal ME (Maine)... price > 100 %companyID% > "Acme" >= a >= b Greater than or equal to.... Evaluates to true if. state <> 'ME' > a > b Greater than.1. The value of the companyID  variable is greater than Acme.D Conditional Expressions Operator != Syntax a != b Description Not equal to. The value of the quantity variable  does not equal 0 (zero). This example. This example. This example... The value of the totalPrice variable  is greater than or equal to 100.. The value of the price variable is  greater than 100..

  „ When you view filters on the Broker user interface. in the expression (%myInt% L_EQUALS ""). the lexical relational operators behave like the standard  relational operators.. „ Filters that use lexical relational operators to compare string values will be saved with  the trigger subscription on the Broker. the expression %myString% L_EQUALS "abc" appears as myString=="abc". select the locale you  want to use. on the  Change Filter Collation Locale screen. For example. use the Broker user interface to select the  Broker Server for which you want to change the locale. Then.  For example. a lexical operator appears as its  equivalent standard operator. The value of the companyID  variable is less than or equal to  Acme.  Keep the following points in mind when using the lexical operators: „ When evaluating filters that contain lexical operators. This example. the %myInt% variable is  declared to be of type integer. Restart the Broker Server for the change to take effect.. in the New Locale list.  The following table describes the lexical operators that you can use in filters. Filters that use standard relational operators to  compare string values will not be saved on the Broker. If  no locale is specified. ʺʺ).1 421 . the Integration Server treats the non‐string value as an empty string (that is. This expression always evaluates to true because  %myInt% contains an integer value that the Integration Server treats as an empty string  (ʺʺ) when it evaluates the expression. webMethods Developer User’s Guide Version 7..  The behavior of lexical operators depends on whether a locale is set for the Broker. unitPrice <= 100 Evaluates to true if. „ If you use a lexical operator to compare strings in an expression (such as in a  BRANCH step or in a pipeline link). the Integration Server uses the  locale collating sequence specified on the Broker to compare the values of the strings. On the Broker Server  Information screen.1. The value of the unitPrice variable  is less than or equal to 100.D Conditional Expressions Operator <= Syntax a <= b Description Less than or equal to. companyID <= "Acme" Lexical Relational Operators You can use the lexical relational operators to create filters that compare string values. Note: To set the filter collation locale. the Integration Server treats the lexical operators  as if they were standard relational operators. „ If you use a lexical operator to compare a value that is not a string with another string  value. select Change Broker Server Filter Collation Locale.

.. Evaluates to true if. Evaluates to true if... The value of the  myString variable is  less than abc..  L_NOT_EQUALS Lexical not equal to. This example. Evaluates to true if. This example. The value of the  myString variable is  greater than or equal  to abc. %myString% L_EQUALS "abc" Evaluates to true if. The value of the  myString variable is  less than or equal to  abc..1 .  This example.. %myString% L_GREATER_OR_EQUAL "abc" 422 webMethods Developer User’s Guide Version 7.. %myString% L_LESS_OR_EQUAL "abc" L_GREATER_THAN Lexical greater than.. The value of the  myString variable is  abc.. Evaluates to true if.1. Evaluates to true if. This example.D Conditional Expressions Operator L_EQUALS Description Lexical equal to.. %myString% L_LESS_THAN "abc" L_LESS_OR_EQUAL Lexical less than or equal to.. This example. %myString% L_GREATER_THAN "abc" L_GREATER_OR_EQUAL Lexical greater than or equal to. This example.... The value of the  myString variable is  not abc... The value of the  myString variable is  greater than abc. %myString% L_NOT_EQUALS "abc" L_LESS_THAN Lexical less than..

D Conditional Expressions Logical Operators You can use the following logical operators in expressions to create conditions consisting  of more than one expression: Operator ! Syntax ! expr Description Negates the next expression. not (color = "blue") | expr | expr Logical *OR. The color variable is not equal  to blue.  Evaluates to true if.. The value of the totalPrice  variable is greater than 1000 or  the value of the customerID  variable equals Favorite  Customer.. This example.1 423 . True if either of the expressions is true.. totalPrice > 1000 || customerID = 'Favorite Customer' or expr or expr Logical OR. %color% = "blue" | %color% = "red" || expr || expr Logical OR. Evaluates to true if. This example.. ! (%sku% = "WM001") Evaluates to true if. Evaluates to true if. This example. Evaluates to true if..1. True if either of the expressions is true. The value of the creditCardNum  variable is null or missing or if  the value of the cardExpireDate  variable is null or missing or if  the value of the cardExpireDate  variable is less than or equal to  the value of the orderDate  variable. The value of the sku variable is  not equal to WM001... This example.....  not not expr Negates the next expression. creditCardNum = $null or cardExpireDate = $null or cardExpireDate <= orderDate webMethods Developer User’s Guide Version 7. True if either of the expressions is true.. The value of the color variable  is blue or red. This example....

. Both expressions must evaluate to true for the  entire condition to be true. The following table identifies the precedence level of each operator you can use in an  expression. <...D Conditional Expressions Operator & Syntax expr & expr Description Logical AND..1. This example. || 424 webMethods Developer User’s Guide Version 7. This example. This example. && or. <= and. >. Both expressions must evaluate to true for the  entire condition to be true. Precedence webMethods Integration Server evaluates expressions in a condition according to the  precedence level of the operators in the expressions.. ! =. %customerID% = 'Favorite Customer' & %sku% = 'WM001' Evaluates to true if. quantity >= 20 && totalPrice >= 100 Evaluates to true if. ==. |. Both expressions must evaluate to true for the  entire condition to be true. and expr and  expr Logical AND.. &. >=..  Precedence Level 1 2 3 4 5 Operators (  ) not. The value of the quantity  variable is greater than or  equal to 20 and the value of the  totalPrice variable is greater  than or equal to 100... The color variable does not  exist in the input or is null and  the size variable does not exist  in the input or is null. && expr &&  expr Logical AND. !color and !size Evaluates to true if. The value of the customerID  variable is Favorite Customer  and the value of the sku  variable is WM001. <>. !=.1 .

  Example:   dictionary[1][2] Value of the element located in the  third column of the second row in the  dictionary array. Example:   %buyerInfo/state% Variable state within IS document type  buyerInfo.1. enclose  the operations you want evaluated first in parentheses. Example:   orderItems[0] Value of the first element in the  orderItems array. arrayVariableName[index] Address an element in an array. arrayVariableName[rowIndex][columnIndex] Address an element in a  two‐dimensional array (String table). Example:   state Variable state. Addressing Variables In an expression. To address children of  variables or an element in an array. you need to use a directory‐like notation to describe  the position of the value. webMethods Integration  Server evaluates expressions contained in parentheses first. variableName/childVariableName Address the child variable of a  variable (such as a field in a  document). you can refer to the values of variables that are children of other  variables and refer to the values of elements in an array variable.1 425 . webMethods Developer User’s Guide Version 7.  Use this notation… variableName To… Address a variable.D Conditional Expressions Note: To override the order in which expressions in a condition are evaluated.

  „ You can enclose variable names in %. right‐click.  For more information. „ To copy the path to a variable in a pipeline.D Conditional Expressions Use this notation… duplicateVariableName(index) To… Address an occurrence of a variable  where there are multiple variables  with the same name in the document  or pipeline. If the variable  name includes special characters.1 . Example:   %ʺaddress(work)ʺ% Value of the variable named  address(work). you must enclose the path to the variable in %  (percent) symbols and enclose the variable name in ʺ ʺ (quotation marks). Notes: „ To view the path to a variable in the pipeline. The index is zero‐based. Variables  that contain special characters must  be enclosed in quotation marks. select the variable. for example %buyerInfo/state%. Addressing Variables that Contain Special Characters If a variable name contains any of the special characters listed in below. rest the mouse pointer over the variable  name. you need to use  the following notation to address the variable: „ Enclose the path to the variable and the variable name in % (percent symbols). For more  information about using variables as values in expressions. see “Syntax” on page 415. 426 webMethods Developer User’s Guide Version 7.1.  Example:   address(1) Value of the second variable named  address.  „ Enclose the variable name that contains special characters in ʺ (quotation marks). Developer displays the variable path in a tool tip. see  “Addressing Variables that Contain  Special Characters” below. %ʺvariableWithSpecialCharactersʺ% Address a variable whose name  contains special characters. and select  Copy.

D Conditional Expressions Following are some examples of how to address variables that contain special characters.. and instead had  %purchaseOrder/Date/Time% or  %ʺpurchaseOrder/Date/Timeʺ%. \% \ʺ Special sequence \\   webMethods Developer User’s Guide Version 7. Address a variable named Date/Time.. you need to use a combination of keys.  The following table identifies the special characters for variable names and any key  sequences that you need to use to enter a variable name with that character in an  expression. Type. However. %ʺaddress(work)ʺ/ʺphone(cell)ʺ% %ʺDate\\Timeʺ% Address a variable named phone(cell) in the  document variable address(work). and quotation marks). Typing Special Characters in Expressions You enter most of the special characters in an expression just as you would enter them  when creating the variable name. the expression  would address a variable named Time in a  document named Date that was contained in a  document named purchaseOrder. Character \ [ ] ( ) % " / Character Name backslash opening bracket closing bracket opening parenthesis closing parenthesis percent quotation marks slash mark (forward) Important! When you use variable names with special characters in expressions or  filters. %ʺDate/Timeʺ% %purchaseOrder/"Date/Timeʺ% To.1.1 427 .. you must enclose the variable name in ʺ ʺ (quotation marks). for three of the special characters (the  backslash. Note: If you did not enclose Date/Time in  quotation marks. Address a variable named Date\Time.. percent symbol. Address a variable named Date/Time in the  document variable purchaseOrder.

 characters.  suppose that a filter consists of more than one expression. Broker saves the subscription and  the filter.  „ Use the =. <= and >=) to compare fields  that are not of type String. The filter will only be saved on Integration  Server.  Tip! You can use the Broker user interface to view the filters (expressions) saved with a  subscription.  (Integration Server saves all the expressions. <. If the syntax is invalid on Broker. <>. ==. If the expression does not appear with the subscription on the Broker.  The following table identifies syntax that the Broker considers invalid.  „ Use standard relational operators (such as =. Broker saves the expressions it  considers valid but does not save the expression containing invalid syntax. „ Use lexical relational operators (such as L_EQUALS. If the syntax is valid on Broker. !=.  or != operators to compare a value with an Object constrained as a  Boolean. Expressions with  this syntax will be saved on the Integration Server but not on the Broker. Integration Server and Broker evaluate the filter to make sure that  it uses proper syntax. symbols. Note:  Broker saves as much of a filter as possible with the subscription. „ All expressions must contain a relational (comparison) operator. 428 webMethods Developer User’s Guide Version 7.)  Keep the following points in mind when writing filters for Broker/local triggers: „ Expressions that specify field names that contain syntax. ==.  then the expression contains invalid syntax. keep in mind  that some syntax that is valid on Integration Server is not valid on Broker.1 . L_LESS_THAN) to compare fields of  type String.1.D Conditional Expressions Rules for Use of Expression Syntax with the Broker When you create filters for documents in Broker/local trigger conditions. When you save  a Broker/local trigger. For example. and only one of the  expressions contains syntax Broker considers invalid. or  words the Broker considers restricted or reserved will not be saved on the Broker. >. Integration Server automatically removes the  filter before the Broker saves the subscription.

5}/ fieldName = /\w/ webMethods Developer User’s Guide Version 7. or words the Broker considers  restricted or reserved  Examples eventtype L_EQUALS “addEmployee” tax% < 5 Note: Although the Broker considers a  field name that contains the % symbol to  be invalid.1 429 ... The string constant in the  expression (“true” or “false”) is case  insensitive. and * Regular expressions that use extended  metacharacters /a{1}/  /a{1. or <> to  compare an Object constrained as a  Boolean with a value  An Object constrained as a Boolean  compared with a field of type String %price% L_LESS_THAN 50 "stringName" > 12 myBoolean <= "true" myBoolean = "stringFieldName" Note: Expressions that check an Object  constrained as a Boolean for a true or false  value should include “true” or”false” as  part of the filter. "fieldName" "!fieldName" %myString% < "yourString" No comparison operators A standard relational operator to  compare fields of type String A lexical relational operator to compare  fields that are not of type String A field of type String compared with a  numeric value Operators other than =. you can use the % symbol to  enclose field names in the expression. Field names with syntax.  symbols. characters.  %fieldName% = $null stringList[1] L_EQUALS "a" fieldName = /^(a|b)\1$/ A $null token A reference to an array field Regular expressions that contain back  references Regular expressions that use quantifiers  other than +.D Conditional Expressions The Broker considers expressions invalid when they contain.. !=. ?. ==.1.

1 .D Conditional Expressions 430 webMethods Developer User’s Guide Version 7.1.

. . . . . . . . . . . . . . . . . . . . . .1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ jcode Example . . . . . webMethods Developer User’s Guide Version 7. . . . . . . . . .E jcode tags 432 432 „ jcode Template . . . . . . . . . . . . . . . . . .1 431 . . . . . . . . . . . . . . . . . . . . . . . . . . .

wm. package Interface1.IData.1 .E jcode tags jcode Template The following code provides a template describing the tags (highlighted) that the jcode  utility uses to identify code segments in a Java source file. } // --.b2b.<<IS-END-IMPORTS>> --public class Interface0 { public static void Service1 (IData pipeline) throws ServiceException { // --.app. import com. package recording. /** * This is an example of an empty Java source code file.b2b.<<IS-END>> --return.Service.IDataCursor.<<IS-START-SHARED>> --// --.data. all comments will be stripped out of this * file during the process of fragmenting the code. } public static void Service2 (IData pipeline) throws ServiceException { // --.wm. * properly annotated for use with the jcode utility. Sample Code—IData The following is an example of a class whose services (methods) take IData objects as  input.1.<<IS-END-SHARED>> --} jcode Example The following is a complete example of properly commented Java source code.<<IS-START(Service2)>> --// --. unless * noted otherwise.app. // --.<<IS-START-IMPORTS>> --// --. Note that. import com.<<IS-END>> --return. */ import com.<<IS-START(Service1)>> --// --.server.wm. */ 432 webMethods Developer User’s Guide Version 7.server. import com.ServiceException. /** * This is an example of Java source code properly annotated * for use with the IS jcode utility.data.wm.

ServiceException.Service. Each signature line has the following format: * * [direction] type:dimension:option name * * direction: "i" (input) or "o" (output) * type: * field (corresponds to instances of java.data. import com.b2b.field:1:required phone // [o] field:1:required message webMethods Developer User’s Guide Version 7.String) * document type (corresponds to instances of com.app.lang.IDataUtil.1 433 . // --.app. a string array ("references").*. * and a document type. * * Also note the use of comments to establish a signature for the * service. import java. Note that each service is * defined by a method with the same name. It returns two strings ("message" and "id").a string ("name").1.E jcode tags /** * == IMPORTS == * All your imports should be wrapped with the START-IMPORTS * and END-IMPORTS tags.<<IS-END-IMPORTS>> --/** * == CLASS NAMING == * This class contains the definition of all the Java services * within the recording.<<IS-START-IMPORTS>> --import com.util. import com.server.field:1:required address // [i] .b2b. This service expects three * parameters -.wm. */ public class accounts { /** * == INDIVIDUAL SERVICES == * The createAccount service.wm. import com.data. * * Note the special tags delimiting the start and end of the * service.accounts interface (note the recording * package declaration up top).data. */ // --.server. The two lines immediately before start tag and after * the end tags are mandatory. */ public static void createAccount (IData pipeline) throws ServiceException { // --.wm. import com.data.wm.wm. use a single "-" at the beginning of * each line for each level of nesting.IDataCursor.IData) * object (corresponds to instances of any other class) * option: * required (this parameter is mandatory) * optional (this parameter is optional) * name: the name of the parameter * * To indicate nesting.wm.<<IS-START(createAccount)>> --// [i] field:0:required name // [i] field:1:required references // [i] record:0:required data // [i] .IData.

IData data = IDataUtil. } catch (Exception e) { throw new ServiceException(e. // --. Note the use of the helper functions * (defined below). This service takes a single string * "id". Note that this // comment inside the service body is the only one that won't // get discarded when fragmenting the service (i.destroy(). data).getCursor(). "00000000"). and returns a complex structure representing the * account information.getString(idc).destroy().getIData(idc.getStringArray(idc.insertAfter ("message".record:0:required contact // [o] -. "data").getString(idc. "createAccount not fully implemented").E jcode tags // [o] field:1:required id IDataCursor idc = pipeline. Note the tags delimiting the start * and end of the shared code section.last(). String [] refs = IDataUtil.first("id")) { try { String id = IDataUtil.field:0:required address // [o] -.e. if(idc.insertAfter ("account".<<IS-START(getAccount)>> --// [i] field:0:required id // [o] record:1:required account // [o] .insertAfter ("id".getCursor(). } } idc.<<IS-END>> --return. */ public static void getAccount (IData pipeline) throws ServiceException { // --.last().) idc.1 .field:1:required refs // [o] . "references").<<IS-END>> --} /** * == SHARED SOURCE == * This is where the shared code lives.toString()). "name").1. it will // show up in Developer. idc. idc. idc. // Do something with the information here.field:0:required name // [o] . idc. idc.. This includes both * global data structures and non-public functions that aren't * exposed as Services. IData data = getAccountInformation(id). */ 434 webMethods Developer User’s Guide Version 7. String name = IDataUtil. // --.field:0:required phone IDataCursor idc = pipeline. } /** * == COMPLEX SIGNATURES == * The getAccount service.

E jcode tags // --.<<IS-END-SHARED>> --} webMethods Developer User’s Guide Version 7.<<IS-START-SHARED>> --private static Vector accounts = new Vector().1. private static IData getAccountInformation (String id) { throw new RuntimeException ("this service is not implemented yet"). } // --.1 435 .

1.E jcode tags 436 webMethods Developer User’s Guide Version 7.1 .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .1 437 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Constraining Facets . . . . . . . . . . . . . . . . . . „ Content Types . . . . . . . . . . . . . . . . . . . . . .1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . webMethods Developer User’s Guide Version 7. . . . . . . . . . . . . .F Validation Content Constraints 438 438 448 „ Overview . . . . . . . . . . . . . . . . . . . . . . . . . . .

 or  String table variables. see  Chapter 10. A content type specifies the type of data for the variable value.  restrict the value of the variable to which the content type is applied.1. boolean.  “Supported Data Types”. for a String variable named itemQuantity. you can set a length restriction for a  string content type. or  service signatures that you want to use as blueprints in data validation. When applying content constraints to variables. String list. The World Wide Web  Consortium (W3C) defines the built‐in data types and constraining facets in the  specification XML Schema Part 2: Datatypes (http://www. 438 webMethods Developer User’s Guide Version 7. For more information about validation.  For example. you can do the following: „ Select a content type. or a maximum value restriction for an integer content type. which in turn. see Appendix C. Each of these content types corresponds to a built‐in simple type  defined in the specification XML Schema Part 2: Datatypes. Note: For details about constraints for Objects and Object lists.org/TR/xmlschema‐2). or date. „ Set constraining facets.  such as string.F Validation Content Constraints Overview You can apply content constraints to variables in the IS document types. A content type corresponds to a simple type  definition in a schema. the validation  engine considers the value to be invalid. For example.w3c. if the variable  value does not conform to the content constraints applied to the variable. you might specify a content type  that requires the variable value to be an integer.  The content types and constraining facets described in this appendix correspond to the  built‐in data types and constraining facets in XML Schema. At validation time. “Performing Data Validation”. Content  constraints describe the data a variable can contain. Each content  type has a set of constraining facets. You could then set constraining facets  that limit the content of itemQuantity to a value between 1 and 100. integer. Constraining facets restrict the content type.1 .  Content Types The following table identifies the content types you can apply to String. specifications.

false.  Constraining Facets enumeration. MM the month. 1.F Validation Content Constraints Content Types anyURI Description A Uniform Resource Identifier Reference.  minExclusive. DD  the day. 125 date A calendar date from the Gregorian calendar. -26. pattern Example 1997-08-09 (August 9. YY the year. maxInclusive. minExclusive. Constraining Facets pattern Example true. minInclusive. maxExclusive. maxInclusive. 1997) webMethods Developer User’s Guide Version 7. maxLength. maxExclusive. length. minLength. webMethods Integration  Server does not validate URI references because it is impractical  for applications to check the validity of a URI reference. minLength. fractionDigits. Constraining Facets enumeration. 0. Values need to  match the following pattern:  CCYY‐MM‐DD Where CC represents the century. 0 byte A whole number whose value is greater than or equal to –128 but  less than or equal to 127. pattern.  minInclusive. Constraining Facets enumeration. length. pattern Note: The anyURI type indicates that the variable value plays the  role of a URI and is defined like a URI. maxLength.1. totalDigits Example -128.  base64Binary Base64‐encoded binary data. The pattern can include a Z at the end to indicate  Coordinated Universal Time or to indicate the difference between  the time zone and coordinated universal time. The value of anyURI  may be absolute or relative. pattern boolean True or false.1 439 . 15. Constraining Facets enumeration.

1. DD  the day. (Eastern Standard Time is 5 hours behind  Coordinated Universal Time.14.01. -26. minExclusive. 1. mm the minutes. MM the month. The pattern can include a Z at the end to  indicate Coordinated Universal Time or to indicate the difference  between the time zone and coordinated universal time. pattern Example 6.  Constraining Facets enumeration. -47.  minExclusive.02E23. minExclusive.  minInclusive. 2000.) decimal A number with an optional decimal point. T the date/time separator. maxExclusive.  Constraining Facets enumeration.  and ss the seconds. 290. totalDigits Example 8. maxInclusive. maxInclusive.25e-2 440 webMethods Developer User’s Guide Version 7. pattern. Constraining Facets enumeration.24 double Double‐precision 64‐bit floating point type. YY the year. minInclusive. maxExclusive. Values need to  match the following pattern:  CCYY‐MM‐DDThh:mm:ss. pattern Example 2000-06-29T17:30:00-05:00 represents 5:30 pm Eastern Standard  time on June 29. maxExclusive. fractionDigits. maxInclusive.F Validation Content Constraints Content Types dateTime Description A specific instant of time (a date and time of day).  minInclusive. 3. hh the hour.sss Where CC represents the century.1 .

1 441 . maxExclusive. -5. nM the number of minutes and nS the  number of seconds. 25. maxExclusive. maxInclusive. Values need to match the following pattern:  PnYnMnDTnHnMnS Where nY represents the number of years. Precede the duration with a minus (‐) sign to  indicate a negative duration. Constraining Facets enumeration. nD the number of days. maxLength.0  Recommendation. whiteSpace float A number with a fractional part.1. Represents the ENTITIES attribute type from the XML 1. Represents  the ENTITY attribute type from the XML 1. minExclusive. T separates the date and time. nM the number of  months. minLength ENTITY Name associated with an unparsed entity of the DTD. maxLength. length. and 50 minutes ENTITIES Sequence of whitespace‐separated ENTITY values declared in the  DTD. length. pattern  Example P2Y10M20DT5H50M represents a duration of 2 years. pattern Example 8.01.  Constraining Facets enumeration. 6. 5 hours. Constraining Facets enumeration. maxInclusive.  minInclusive.02E23. nH  the number of hours. minExclusive.0 Recommendation.  minInclusive.5 webMethods Developer User’s Guide Version 7. minLength.F Validation Content Constraints Content Types duration Description A length of time.  Constraining Facets enumeration. 20  days. 10 months. pattern.

 The pattern can include a Z at  the end to indicate Coordinated Universal Time or to indicate the  difference between the time zone and coordinated universal time.  minInclusive. pattern Example --11 represents November gMonthDay A specific day and month that recurs every year in the Gregorian  calendar. maxInclusive.1 .1. maxExclusive. The  pattern can include a Z at the end to indicate Coordinated  Universal Time or to indicate the difference between the time zone  and coordinated universal time. maxInclusive. maxExclusive.F Validation Content Constraints Content Types gDay Description A specific day that recurs every month. Constraining Facets enumeration. maxExclusive. minExclusive.  minInclusive. Constraining Facets enumeration. Values must match the  following pattern:  ‐‐‐DD Where DD represents the day. maxInclusive. pattern Example ---24 indicates the 24th of each month gMonth A Gregorian month that occurs every year.  minInclusive. pattern Example --09-24 represents September 24th  442 webMethods Developer User’s Guide Version 7. The pattern can include a Z at the  end to indicate Coordinated Universal Time or to indicate the  difference between the time zone and coordinated universal time. minExclusive. Values must match the following pattern:  ‐‐MM‐DD Where MM represents the month and DD represents the day. minExclusive. Constraining Facets enumeration. Values must match the  following pattern:  ‐‐MM Where MM represents the month.

 minExclusive. maxLength. maxExclusive. Constraining Facets enumeration. Constraining Facets enumeration. whiteSpace webMethods Developer User’s Guide Version 7. maxLength. pattern. pattern ID A name that uniquely identifies an individual element in an  instance document. length. Values must match the  following pattern:  CCYY Where CC represents the century.0 Recommendation. Values must  match the following pattern:  CCYY‐MM Where CC represents the century.1 443 .0 Recommendation. The value for ID needs to be a valid XML  name. pattern Example 2001 indicates 2001 gYearMonth A specific month and year in the Gregorian calendar. YY the year. The IDREF datatype represents the  IDREF attribute type from the XML 1. and YY the year. The pattern can include a Z at the end to indicate  Coordinated Universal Time or to indicate the difference between  the time zone and coordinated universal time. maxExclusive. maxLength. minExclusive.  Constraining Facets enumeration. The ID datatype represents the ID attribute type from the  XML 1. The value of IDREF is  the same as the ID value.1. The pattern  can include a Z at the end to indicate Coordinated Universal Time  or to indicate the difference between the time zone and  coordinated universal time. minLength.  minInclusive. whiteSpace IDREF A reference to an element with a unique ID. Constraining Facets enumeration. length.  minInclusive. maxInclusive. minLength. length. Constraining Facets enumeration. pattern.F Validation Content Constraints Content Types gYear Description A specific year in the Gregorian calendar. minLength. pattern Example 2001-04 indicates April 2001 hexBinary Hex‐encoded binary data. and MM the  month. maxInclusive.

  minExclusive. maxLength. totalDigits Example -55600. -23. 0. maxInclusive. pattern. length. pattern. minLength. maxExclusive. 256. Constraining Facets enumeration. whiteSpace long A whole number with a value greater than or equal to   –9223372036854775808 but less than or equal to  9223372036854775807. totalDigits Example -21474836.0 (Second  Edition).0 Recommendation. minInclusive. length.1. 15.1 . maxExclusive. pattern. minLength int A whole number with a value greater than or equal to   ‐2147483647 but less than or equal to 2147483647. maxLength.  Constraining Facets enumeration. maxInclusive.  minExclusive.  Constraining Facets enumeration. maxInclusive. fractionDigits. pattern. maxLength. minInclusive. fractionDigits. -55500. minLength. 3211569432 Name XML names that match the Name production of XML 1. Constraining Facets enumeration. 0. 0. whiteSpace 444 webMethods Developer User’s Guide Version 7. length. 33123. maxExclusive. Set of all strings that match the  NCName production of Namespaces in XML. totalDigits Example -2500. Constraining Facets enumeration. 365 language Language identifiers used to indicate the language in which the  content is written. whiteSpace NCName Non‐colonized XML names. minLength. Natural language identifiers are defined in  IETF RFC 1766. Constraining Facets enumeration.  minExclusive.F Validation Content Constraints Content Types IDREFS Description Sequence of white space separated IDREFs used in an XML  document. Constraining Facets enumeration. 4271974 integer A positive or negative whole number. maxLength. fractionDigits. minInclusive. pattern. The IDREFS datatype represents the IDREFS attribute  type from the XML 1. -5. length. pattern.

 Set of strings  (sequence of UCS characters) that do not contain the carriage  return (#xD). pattern.  Constraining Facets enumeration.  minExclusive. 0 normalizedString Represents white space normalized strings. Constraining Facets enumeration. Constraining Facets enumeration. length. whiteSpace Example MAB-0907 webMethods Developer User’s Guide Version 7. minInclusive. minLength nonNegativeInteger An integer with a value greater than or equal to 0. -354. -1. -3. minInclusive.1. Constraining Facets enumeration. maxExclusive.  minExclusive. minLength.1 445 . Represents the NMTOKENS attribute  type from the XML 1. Constraining Facets enumeration. pattern. maxLength. -357. whiteSpace Example -256453.F Validation Content Constraints Content Types negativeInteger Description An integer with a value less than or equal to –1. pattern. 32123 nonPositiveInteger An integer with a value less than or equal to 0. maxExclusive. totalDigits.  Constraining Facets enumeration. Represents the NMTOKEN  attribute type from the XML 1. fractionDigits.0 Recommendation.0 Recommendation. pattern. length. fractionDigits. pattern. maxExclusive. maxInclusive. fractionDigits.  minExclusive. maxLength. maxInclusive. line feed (#xA). 15. or tab (#x9) characters. maxInclusive. minLength. maxLength. whiteSpace NMTOKENS Sequences of NMTOKENS. totalDigits Example -255556. -1 NMTOKEN Any mixture of name characters. minInclusive. length. totalDigits Example 0.

 fractionDigits. Constraining Facets enumeration. minLength. line feed (#xA). fractionDigits. maxInclusive. totalDigits Example 1. maxExclusive. pattern. pattern. or sequences of two or more  spaces. mm the minutes.1. 3265 string Character strings in XML. Constraining Facets enumeration. -543.1 .  The pattern can include a Z at the end to indicate Coordinated  Universal Time or to indicate the difference between the time zone  and coordinated universal time. or tab (#x9) characters. maxExclusive. pattern Example 18:10:00-05:00 (6:10 pm. maxExclusive. Constraining Facets enumeration. length. whiteSpace token 446 webMethods Developer User’s Guide Version 7. maxLength. maxInclusive. Values must match the  following pattern: hh:mm:ss.  minExclusive. 23000 short A whole number with a value greater than or equal to ‐32768 but  less than or equal to 32767. minInclusive. pattern. pattern. Constraining Facets enumeration.  Represents tokenized strings.  minInclusive. minInclusive. length. 456. whiteSpace Example MAB-0907 time An instant of time that occurs every day. 0. minLength.F Validation Content Constraints Content Types positiveInteger Description An integer with a value greater than or equal to 1. and ss the seconds. By default. Set of strings that do not contain the  carriage return (#xD). A sequence of UCS characters (ISO  10646 and Unicode).  leading or trailing spaces (#x20).sss  Where hh indicates the hour. minExclusive. totalDigits Example -32000. maxInclusive. Eastern Standard Time) Eastern  Standard Time is 5 hours behind Coordinated Universal Time. Constraining Facets enumeration. all white space is preserved for  variables with a string content constraint. maxLength.  minExclusive. 1500.

 pattern.1 447 . totalDigits Example 0.  minExclusive. maxInclusive. maxExclusive. 123223333 unsignedLong A whole number greater than or equal to 0. Constraining Facets enumeration.  minExclusive. maxExclusive. Constraining Facets enumeration. but less than or equal  to 255. pattern. Constraining Facets enumeration. pattern. minInclusive. Constraining Facets enumeration. 1000.F Validation Content Constraints Content Types unsignedByte Description A whole number greater than or equal to 0. but less than or equal  to 4294967295. minInclusive. maxInclusive.  minExclusive. totalDigits Example 0. 2001. totalDigits Example 0. maxInclusive. fractionDigits. maxInclusive. minInclusive. pattern. 200 unsignedInt A whole number greater than or equal to 0. 65000 webMethods Developer User’s Guide Version 7. fractionDigits. maxExclusive. fractionDigits. but less than or equal  to 18446744073709551615. totalDigits Example 0.1. 22335. but less than or equal  to 65535. 3363124 unsignedShort A whole number greater then or equal to 0. maxExclusive. minInclusive. 112.  minExclusive. fractionDigits.

 the enumeration  values will be used for  validation.  Each content type has a set of constraining facets. The precise units of length  required for the variable value. fractionDigits must be less than  or equal to totalDigits. fractionDigits The maximum number of digits to  the right of the decimal point. The  variable can have a value less than  or equal to maxInclusive.99 is 2. Constraining Facet enumeration Description The possible values for the  variable at run time. length If you specify length. The constraining facets described in the  following table correspond to constraining facets defined in the specification XML Schema  Part 2: Datatypes. the fractionDigits of the  value 999. The range  includes the value you specify. maxExclusive must be greater  than or equal to minExclusive.1 . you can also set constraining facets for the  content type. maxInclusive must be greater  than or equal to minInclusive. The maximum units of length  permitted for the variable value. you  cannot specify either  minLength or maxLength. The upper bound of a range of  possible values. you can set a minimum value or precision value for a decimal content type. You cannot specify  maxInclusive and maxExclusive  for the same content type. You cannot specify  maxInclusive and maxExclusive  for the same content type.1. those values  will be displayed at run time. For  example. The range  excludes the value you specify. For  example. Usage Notes If you also entered possible  values using the Pick list choices property in the  General category of the  Properties panel. maxLength must be greater  than or equal to minLength. The upper bound of a range of  possible values.F Validation Content Constraints Constraining Facets When you apply a content type to a variable. The  variable can have a value less than  but not equal to maxExclusive.  However. Constraining facets are properties that further define the content type. maxExclusive maxInclusive maxLength 448 webMethods Developer User’s Guide Version 7.

 The  variable can have a value greater  than or equal to minInclusive. A pattern (regular expression) that  the value of the variable must  match.  line feeds (#xA). The range  includes the value you specify.1.F Validation Content Constraints Constraining Facet minExclusive Description The lower bound of a range of  possible values. minInclusive must be less than  or equal to maxInclusive.  The variable can have a value  greater than but not equal to  minExclusive. You cannot specify  minInclusive and minExclusive  for the same content type. The minimum units of length  permitted for the variable value. You cannot specify  minInclusive and minExclusive  for the same content type. The white space normalization  performed on the variable value. and tabs (#x9) are  replaced with a single space  (#x20). The range does  not include the value you specify. minInclusive minLength pattern totalDigits totalDigits must be greater  than or equal to fractionDigits. the totalDigits of the value  999.99 is 5. minLength must be less than or  equal to maxLength. For  example. whiteSpace No white space  normalization is performed. The maximum number of decimal  digits allowed in a value. you can use a  regular expression to specify that a  variable that is a string content  constraint match a Social Security  number format. The lower bound of a range of  possible values. After the white space  normalization specified by replace  is performed. Carriage returns (#xD). sequences of spaces  (#x20) and leading and trailing  spaces (#x20) are removed.  The value of whiteSpace can be one  of the following: preserve: Usage Notes minExclusive must be less than  or equal to maxExclusive. replace: collapse: webMethods Developer User’s Guide Version 7. For example.1 449 .

1. encoding. and scale.1 . Note: The word “fixed” appears next to the name of a constraining facet whose value  is fixed and cannot be changed. the facet is called a  fixed facet. If you view a content type from an IS schema created  from an XML Schema Definition that used pre‐Recommendation version of XML  Schema (before May 2001) the Content Type dialog box will display the constraining  facets that were available in the pre‐Recommendation version of XML Schema. When a facet has a fixed value. The constraining  facets duration. scale was renamed fractionDigits. these constraining facets are not  included in the recommendation of XML Schema Part 2: Datatypes.  encoding. precision was renamed totalDigits. precision.F Validation Content Constraints Note: Previous versions of XML Schema contained the constraining facets duration. and period were removed. period. However.  450 webMethods Developer User’s Guide Version 7.

. . webMethods Developer User’s Guide Version 7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ Validation Exceptions . . . . . . . . . .G Validation Errors and Exceptions 452 452 465 470 „ Overview . . . . . . . . . . . . . . . . . „ Validation Errors . . . . . . . . . . . . .1 451 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . „ IS Schema Generation Errors and Warnings . . . . . . . . . . . . . . . . . . . .

 Document validation errors pertain to the  structure of the data values (for example.0082. The following sections describe the errors  and exceptions you can receive when performing validation and when creating an IS  schema. pipeline.  „ NV indicates a node validation error. webMethods Integration Server throws an exception if  the inputs or outputs are invalid. 452 webMethods Developer User’s Guide Version 7. Cause: The value does not match the specified content  type.  „ VV indicates a document validation error. or document validation. Error code prefixes indicate  the validation error type: „ DT indicates a data type validation error. Cause: The value is not an item listed in the enumeration  field. or documents) and the object does not conform to the blueprint  or model.1.9463] Length of value is not equal to specified length. Data type validation errors pertain to the  content type constraints applied to the variables. Each validation error contains a code and a default message. When you  perform input/output validation. Error messages are contained in the exception.G Validation Errors and Exceptions Overview This appendix describes error messages that can occur during data validation. You might also receive errors  and exceptions when creating an IS schema. or IS document type generation. the pipeline. Node validation errors pertain to the validation  of an XML node.0082. the server generates errors and/or exceptions. Cause: The size of the value does not equal the number  specified in the length field.9460] No matching enumeration value.9447] Value does not conform to datatype.  When the validation engine in the webMethods Integration Server validates an object (an  XML node. webMethods Integration Server  returns validation errors in the errors output variable if the object is invalid.  Error Code DT‐001 Message and Description [ISC.0082.  Validation Errors When you perform validation using a built‐in service. The following table describes the validation errors you can receive when performing  XML. DT‐003 [ISC. IS schema  generation. an invalid document structure).1 . DT‐002 [ISC.

DT‐007 [ISC. DT‐010 [ISC. DT‐013 [ISC.9489] Number of digits is greater than totalDigits.0082.1. DT‐008 [ISC. Cause: The value is less than or equal to the value  specified in the minExclusive field.9494] Value is greater than or equal to maxExclusive.  webMethods Developer User’s Guide Version 7.9464] Value is shorter than minimum length.9491] Value is less than minInclusive.0082. DT‐006 [ISC. Cause: The size of the value is less than the number  specified in the minLength field.0082.0082. Cause: The number of digits in the value is greater than  the number specified in the totalDigits field. Cause: The value is greater than or equal to the value  specified in the maxExclusive field.G Validation Errors and Exceptions Error Code DT‐004 Message and Description [ISC. Cause: The value is greater than the value specified in the  maxInclusive field. Cause: The specified whiteSpace value is invalid. Cause: The number of digits to the right of the decimal  point is greater than the number specified in the  fractionDigits field.0082.0082.0082. or  collapse. DT‐011 [ISC.0082.9493] Value is greater than maxInclusive.0082. Cause: The value is less than the value specified in the  minInclusive field.9474] The input has invalid characters.9465] Value is longer than maximum length.9492] Value is less than or equal to minExclusive.9448] Value does not match pattern. Cause: The size of the value is greater than the number  specified in the maxLength field. The  value of the whiteSpace field can be preserve.0082. DT‐005 [ISC. DT‐009 [ISC.9490] Number of fraction digits is greater than fractionDigits. replace. Cause: The value does not match the pattern specified in  the pattern field. DT‐012 [ISC.1 453 .

1.9301] Value exceeds scale Cause: The total number of digits to the right of the  decimal point is greater than the value specified in the  scale field.G Validation Errors and Exceptions Error Code DT‐Binary001 Message and Description [ISC. DT‐Decimal006 [ISC.9293] No matching choice value Cause: The binary value is not an element listed in the  choices field.0082.0082.9294] Value is less than minimum Cause: The decimal value is less than the value specified  in the minimum exclusive or minimum inclusive field.0082.0082.0082.0082. is less than the  value specified in the minimum length field.9246] Value does not conform to datatype Cause: The value is not a parsable decimal. DT‐Binary004 [ISC. in octets.0082. DT‐Decimal001 DT‐Decimal002 [ISC.  [ISC.9298] Value is longer than maximum length Cause: Size of the binary value.1 . in octets. [ISC. is not equal to  the value specified in the length field.9295] Value is greater than maximum Cause: The decimal value is greater than the value  specified in the maximum exclusive or maximum inclusive  field.9246] Value does not conform to datatype Cause: The value is not a Boolean.9296] Length of value is not equal to specified length Cause: Size of the binary value. in octets.0082.0082. DT‐Binary002 [ISC. DT‐Decimal005 [ISC.0082. is greater than  the value specified in the maximum length field.0082.9297] Value is shorter than minimum length Cause: Size of the binary value. 454 webMethods Developer User’s Guide Version 7. DT‐Binary003 [ISC. DT‐Boolean001 [ISC.9300] Value exceeds precision Cause: The total number of digits in the decimal value is  greater than the value specified in the precision field.9293] No matching choice value Cause: The decimal value is not an element listed in the  choices field. DT‐Decimal003 DT‐Decimal004 [ISC.

0082.G Validation Errors and Exceptions Error Code DT‐Double001 Message and Description [ISC. webMethods Developer User’s Guide Version 7. DT‐Float004 [ISC.9293] No matching choice value Cause: The float value is not an element listed in the  choices field.0082.1 455 .0082.0082. DT‐Float003 [ISC.9295] Value is greater than maximum Cause: The float value is greater than the value specified  in the maximum exclusive or maximum inclusive field. [ISC.1. DT‐Float001 DT‐Float002 [ISC.9294] Value is less than minimum Cause: The double value is less than the value specified in  the minimum exclusive or minimum inclusive field.9294] Value is less than minimum Cause: The integer value is less than the value specified in  the minimum exclusive or minimum inclusive field.9246] Value does not conform to datatype Cause: The value is not a parsable float. DT‐Double002 [ISC.9294] Value is less than minimum Cause: The float value is less than the value specified in  the minimum exclusive or minimum inclusive field.0082.0082.9293] No matching choice value Cause: The integer value is not an element listed in the  choices field.0082.0082. DT‐Double004 [ISC. [ISC. DT‐Int003 [ISC. DT‐Int001 DT‐Int002 [ISC.9295] Value is greater than maximum Cause: The double value is greater than the value  specified in the maximum exclusive or maximum inclusive  field.9246] Value does not conform to datatype Cause: The value is not a parsable double.9293] No matching choice value Cause: The double value is not an element listed in the  choices field.0082. DT‐Double003 [ISC.0082.9295] Value is greater than maximum Cause: The integer value is greater than the value  specified in the maximum exclusive or maximum inclusive  field.0082.

  DT‐List003 [ISC.9295] Value is greater than maximum Cause: The integer value is greater than the value  specified in the maximum exclusive or maximum inclusive  field. [ISC.0082. [ISC.9294] Value is less than minimum Cause: The long value is less than the value specified in  the minimum exclusive or minimum inclusive field.0082.0082.9293] No matching choice value Cause: The long value is not an element listed in the  choices field.1 .G Validation Errors and Exceptions Error Code DT‐Int004 Message and Description [ISC.1.0082.0082.0082.0082.0082. [ISC. DT‐Long004 [ISC. DT‐INTEGER003 DT‐INTEGER004 [ISC.9295] Value is greater than maximum Cause: The long value is greater than the value specified  in the maximum exclusive or maximum inclusive field. DT‐INTEGER001 DT‐INTEGER002 [ISC.9246] Value does not conform to datatype Cause: The value is not a parsable long.9297] Value is shorter than minimum length Cause: Size of the list is less than the value specified in the  minimum length field. DT‐Long002 [ISC.9293] No matching choice value Cause: The integer value is not an element listed in the  choices field.  DT‐List001 DT‐List002 [ISC.9246] Value does not conform to datatype Cause: The value is not a parsable integer.  456 webMethods Developer User’s Guide Version 7.0082.9246] Value does not conform to datatype Cause: The value is not a parsable integer.0082.0082.9293] No matching choice value Cause: The sequence of values in the list is not an element  in the choices field.9294] Value is less than minimum Cause: The integer value is less than the value specified in  the minimum exclusive or minimum inclusive field. DT‐Long001 [ISC.0082.9298] Value is longer than maximum length Cause: Size of the list is greater than the value specified in  the maximum length field. DT‐Long003 [ISC.

G Validation Errors and Exceptions Error Code DT‐List004 Message and Description [ISC.0082. is less than the  value specified in the minimum length field.9297] Value is shorter than minimum length Cause: The size of the string. DT‐STR003 [ISC.0082. DT‐RecurringDuration003 [ISC. webMethods Developer User’s Guide Version 7. DT‐STR004 [ISC.9293] No matching choice value Cause: The time value is not an element listed in the  choices field. DT‐RecurringDuration001 [ISC. DT‐STR001 [ISC.0082.9246] Value does not conform to datatype Cause: The recurring duration value does not match the  pattern specified in the pattern field.9293] No matching choice value Cause: The recurring duration value is not an element  listed in the choices field.9299] Datatype definition is missing Cause: Datatype or simple type definition is not found. in characters.0082. DT‐STR002 [ISC.9295] Value is greater than maximum Cause: The recurring duration value is greater than the  value specified in the maximum exclusive or maximum inclusive field. DT‐RecurringDuration004 [ISC.9307] Does not match pattern(s) Cause: The string value does not match the pattern  specified in the pattern field.0082. It  is possible that a dependent IS schema that contains this  datatype definition was removed from the IS Namespace.9298] Value is longer than maximum length Cause: The size of the string. DT‐Time001 [ISC.1.0082.0082. is greater than  the value specified in the maximum length field.1 457 .0082.0082. DT‐RecurringDuration002 [ISC. in characters.9293] No matching choice value Cause: The string value is not an element listed in the  choices field.9294] Value is less than minimum Cause: The recurring duration value is less than the value  specified in the minimum exclusive or minimum inclusive  field.0082.

0082. DT‐TimePeriod003 [ISC.  DT‐TimePeriod002 [ISC. 458 webMethods Developer User’s Guide Version 7. DT‐TimeDuration001 [ISC. DT‐Time003 [ISC.0082.0082.9294] Value is less than minimum Cause: The time duration value is less than the value  specified in the minimum exclusive or minimum inclusive  field.0082.0082.9246] Values does not conform to data type Cause: The time period value does not match data type  specified in the IS schema.1 .0082.9246] Value does not conform to datatype Cause: The time duration value does not match the  pattern specified in the pattern field.9294] Value is less than minimum Cause: The time duration value is less than the value  specified in the minimum exclusive or minimum inclusive  field.0082.0082.9293] No matching choice value Cause: The time duration value is not an element listed in  the choices field. DT‐Time004 [ISC.9295] Value is greater than maximum Cause: The time duration value is greater than the value  specified in the maximum exclusive or maximum inclusive  field. DT‐TimeDuration003 [ISC. DT‐TimeDuration002 [ISC.9246] Value does not conform to datatype Cause: The time value does not match the pattern  specified in the pattern field.0082.9293] No matching choice value Cause: The time period value is not an element listed in  the choices field.9294] Value is less than minimum Cause: The time value is less than the value specified in  the minimum exclusive or minimum inclusive field.1. DT‐TimeDuration004 [ISC.0082.G Validation Errors and Exceptions Error Code DT‐Time002 Message and Description [ISC. DT‐TimePeriod001 [ISC.9295] Value is greater than maximum Cause: The time value is greater than the value specified  in the maximum exclusive or maximum inclusive field.

webMethods Developer User’s Guide Version 7. NV‐003 [ISC. It is possible  that the XML document being validated is not well  formed.9004] [attributes] property must be empty Cause: This element carries attributes that are not  expected. NV‐001 [ISC. Response: Check to make sure that the document properly  conforms to the schema.0082.0082. Response: Check to make sure that the document only  uses element attributes that are declared in the schema. Response: Check that the document is being submitted  properly. Response: Check to make sure that the document only  uses element attributes that are declared in the schema.9005] Element information items are not allowed in [children] property Cause: This element contains child elements. NV‐004 [ISC.G Validation Errors and Exceptions Error Code DT‐TimePeriod004 Message and Description [ISC. NV‐002 [ISC.9001] Error while parsing Cause: The XML document cannot be parsed.9295] Value is greater than maximum Cause: The time duration value is greater than the value  specified in the maximum exclusive or maximum inclusive  field.0082.0082. the  element declaration in the IS schema indicates that the  element does not contain any child elements.9002] Unable to retrieve root element Cause: XML document is empty.9006] Unable to locate a matching attribute declaration Cause: This element carries an attribute that is not  declared in the element declaration in the IS schema.0082.1.9003] Unable to locate a matching element declaration Cause: An undeclared element node is found in the  instance document. however. NV‐006 [ISC. Response: Check to make sure that the document uses  only declared elements. NV‐005 [ISC.0082.1 459 .0082.

460 webMethods Developer User’s Guide Version 7. [ISC. Response: Check to make sure that the document  conforms to the schema.schema. NV‐010 [ISC. IS schema pub.9007] Missing Attribute Information Item Cause: A required attribute is not found in this element  node.9009] Child element elementName at position location is unexpected.1 .w3c:xml .schema. Cause: The element is not a valid child element or the  sequence of child elements does not satisfy the order  specified in the corresponding element declaration or  complex type definition. NV‐008 [ISC. it is possible that pub. It is possible  that a dependent IS schema that contains this attribute  declaration was removed from the IS Namespace.w3c:datatypes references an  attribute declaration (xml:lang) in pub.does not match fixed value Cause: The instance document contains an invalid  element body or attribute value.9011] Unable to locate attribute declaration Cause: An attribute declaration is not found.9008] Invalid value . If  you receive this error.0082.G Validation Errors and Exceptions Error Code NV‐007 Message and Description [ISC.0082. Specifically.1.0082. Response: Check to make sure that the document  conforms to the schema. Response: Check to make sure that the document  conforms to the schema. NV‐009 [ISC. the element  body or attribute value does not match a fixed value  found in the declaration.w3c:xml  was removed.9010] Incomplete content–one or more child elements are expected. Response: Check to make sure that all of the attribute  declarations referenced by the schema are present. Cause: The element is not a valid child element or the  sequence of child elements does not satisfy the order  specified in the definition.schema.0082.0082. For  example. Response: Check to make sure that the document  conforms to the schema.

schema.schema. NV‐013 [ISC. and either the  first type is not the same as the second type or the first  type is not validly derived from the second type. IS schema pub. If you receive  this error.0082.9016] Unable to resolve QName: localName:{uri} Cause: The schema processor uses the namespaces  declared in the instance document to resolve a QName to: {Namespace URI} Local Name However. Response: Check to make sure that the document  conforms to the schema.schema. Response: Check to make sure that all of the type  definitions referenced by the schema are present. Response: Check to make sure that all the element  declarations referenced by the schema are present.  For example.G Validation Errors and Exceptions Error Code NV‐011 Message and Description [ISC. NV‐012 [ISC.0082. webMethods Developer User’s Guide Version 7. the schema processor is unable to resolve the  QName using the namespace declarations in the instance  document.0082.  It is possible that a dependent IS schema that contains  this type definition was removed from the IS Namespace. It is possible  that a dependent IS schema that contains the element  declaration was removed from the IS Namespace. it is possible that pub. NV‐014 [ISC.1.9017] typeName is not validly derived from declaredTypeName Cause: This error occurs when the first type is used in a  context where the second type is expected. Response: Check to make sure that the correct types are  specified in the schema and that the correct  corresponding types are used in the document.9014] Unable to locate element declaration Cause: An element declaration is not found.0082.w3c:datatypes.9012] Unable to locate type definition Cause: A simple or complex type definition is not found.w3c:structures references  a type definition in pub.w3c:datatypes was  removed.1 461 .

Response: Make sure to use only concrete types when  validating element content. NV‐016 [ISC.0082.G Validation Errors and Exceptions Error Code NV‐015 Message and Description [ISC.9021] Contains invalid text Cause: The schema processor encountered an invalid  piece of text.1 .9025] Missing Object Cause: A required document (IData object) or variable is  missing from the input. NV‐018 [ISC.0082. Response: Check to make sure that the document  conforms to the schema. VV‐001 [ISC. Response: Be sure that the arguments are being passed  properly to the validator. It is possible that the instance document  contains a simple type where element declarations are  interspersed with text.9020] QName .0082. Response: Make sure to only use concrete elements in  instance documents. Simple types cannot contain  element declarations. A new  type cannot be derived from an anonymous type because  new types can be derived only from named types.xsi:type is used incorrectly (declared type is anonymous) Cause: A type is nominated using xsi:type for an element  whose declaration contains an anonymous type. NV‐017 [ISC.0082.9018] typeName is an abstract type and cannot be used directly to validate content Cause: The specified type is an abstract type that has been  either declared or nominated. Response: Be sure to use only named types when  declaring new types. Abstract elements cannot appear in  instance documents. Abstract types cannot be  used to validate element content.0082.9019] elementName is an abstract element and cannot appear in an instance Cause: The element declaration identifies the element as  an abstract element. 462 webMethods Developer User’s Guide Version 7.1.

Table expected Cause: The value being validated is a scalar value or a one‐ dimensional array (list). Single item expected Cause: The value being validated is an array value (a list  or a table). however the  variable it is being validated against is a list (one‐ dimensional array). [ISC. Response: Check to make sure that the document  conforms to the schema. Response: Check to make sure that the document  conforms to the schema. but the IS data type of the value is not a String. The variable it is being validated against is  scalar. List expected Cause: The value being validated is a scalar value or a  multi‐dimensional array (String table).1.0082.0082. [ISC. Response: Check to make sure that the document  conforms to the schema. VV‐004 [ISC. Response: Check to make sure that the document  conforms to the schema. String expected Cause: The value is being validated against a String  variable.0082.0082.9030] Type mismatch. The variable it is being validated  against is a two‐dimensional array (table).9029] Dimension mismatch.9027] Dimension mismatch.9028] Dimension mismatch. VV‐003 [ISC. (This message only appears if the Allow unspecified fields property in the Constraints category of the  Properties panel is False.)   Response: Make sure that all variables are defined. or  check the box to allow unspecified fields on the  constraints tab of the Variable Properties dialog box.9026] Undefined Object found Cause: A document (IData object) contains an orphan  variable.1 463 . webMethods Developer User’s Guide Version 7.0082.G Validation Errors and Exceptions Error Code VV‐002 Message and Description [ISC.

 but the IS data type of the value is not an Object.9031] Type mismatch.0082. Object expected Cause: The value is being validated against an Object  variable. 464 webMethods Developer User’s Guide Version 7. [ISC.9032] Type mismatch. Document expected Cause: The value is being validated against an IS  document type variable.0082. Response: Check to make sure that the document  conforms to the schema.G Validation Errors and Exceptions Error Code Message and Description [ISC. but the IS data type of the value  is not an IS document type.1. Response: Check to make sure that the document  conforms to the schema.1 .

0062. If the service fails. null value). Response: Change the value of  conformsTo to be an IS document type  or IS schema that exists in the IS  namespace. A validation exception is  generated if one of the following is true: „ Errors are detected in the object (XML node.1 465 . „ The basic validation contract is violated (for example. pipeline. or document (IData object))  that is passed (for example.9021] object is null When is it thrown? Real time and  design time Description Cause: The object to be validated does  not exist in the pipeline.G Validation Errors and Exceptions Validation Exceptions At run time.  webMethods Integration Server inserts the validation errors into the exception  message.1. Response: Link an XML node or  document variable to the object  variable in Service In.  The following table identifies and describes the validation exceptions that can be  generated.  webMethods Developer User’s Guide Version 7.  webMethods Integration Server throws a validation exception.0062. the service performing validation either succeeds or fails. „ You specify that the service should fail if the object to be validated (XML node.  pipeline. [ISS. Default Exception Message [ISS. [ISS. failIfInvalid = true). If this is the reason for the exception.9022] %NSName% object does not exists Real time and  design time Cause: The IS document type or IS  schema specified for the conformsTo  variable does not exist in the IS  Namespace. Response: Currently.0062.9024] webMethods Integration Server does not support this type of validation (may or may not support in the future) Real time and  design time Cause: The object to be validated is  not one of the types supported by  validation. or document (IData object)) did not conform to the IS schema or IS  document type (for example. and document (IData object)  validation is supported. only XML. a binary tree is passed instead  of a document (IData object) as expected).  pipeline.

0062.9203] Invalid: maxLength Design time Cause: The max length is either not a  parsable number or conflicts with  minimum length. Response: Make sure the minExclusive  is a valid number for the specified  content type.  466 webMethods Developer User’s Guide Version 7.0062. Response: Make sure the minInclusive  is a valid number for the specified  content type.1. [ISS.9211] Invalid Regular Expression: Expression Design time Cause: The pattern is an invalid Perl  regular expression.  [ISS.0062. Response: Modify the pattern and  make sure that it is Perl regular  expression.0062. Response: Change the min length value  and make sure that it is within the  allowed range for the content type. the  minExclusive value for a variable with  content type constraint of short must  also be a short. For example.9213] Invalid: minExclusive Design time Cause: The specified minExclusive  value is invalid.9212] Invalid: minInclusive Design time Cause: The specified minInclusive value  is invalid.0062.G Validation Errors and Exceptions Default Exception Message [ISS.1 . [ISS. Response: Change the max length value  and make sure that it is within the  allowed range for the content type. the  minInclusive value for a variable with  content type constraint of short must  also be a short.9202] Invalid: minLength When is it thrown? Design time Description Cause: The min length is either not a  parsable number or conflicts with max length. [ISS. For example.

9215] Invalid: maxExclusive Design time Cause: The specified maxExclusive  value is invalid.9231] Exceeds precision: minInclusive Design time Cause: The value of the minInclusive  constraining facet exceeds the value  specified for totalDigits. [ISS.0062.9233] Exceeds precision: maxInclusive Design time Cause: The value of the maxInclusive  constraining facet exceeds the value  specified for totalDigits. Response: Make sure the maxExclusive  is a valid number for the specified  content type. [ISS. Response: Make sure the maxInclusive  is a valid number for the specified  content type. For example. [ISS.0062.1.  [ISS.9232] Exceeds precision: minExclusive Design time Cause: The value of the minExclusive  constraining facet exceeds the value  specified for totalDigits. Response: Change the value of  minExclusive or totalDigits to make sure  the values do not conflict. Response: Change the value of  maxInclusive or totalDigits to make sure  the values do not conflict.0062.0062.9214] Invalid: maxInclusive When is it thrown? Design time Description Cause: The specified maxInclusive  value is invalid.G Validation Errors and Exceptions Default Exception Message [ISS. For example. the  maxInclusive value for a variable with  content type constraint of short must  also be a short.9230] Invalid scale Design time Cause: The value of a constraining  facet has an invalid scale. webMethods Developer User’s Guide Version 7.0062. Response: Change the value of  minInclusive or totalDigits to make sure  the values do not conflict.0062.1 467 .  Response: Examine the constraining  facet values to make sure the values  do not conflict.  [ISS. the  maxExclusive value for a variable with  content type constraint of short must  also be a short.

  (maximum < minimum) Response: Change the maximum or  minimum value to eliminate the  conflict. if you specify length for the  string content type. Response: Examine the constraining  facet values to make sure the values  do not conflict with each other. For  example. 468 webMethods Developer User’s Guide Version 7. [ISS.1 .9234] Exceeds precision: maxExclusive When is it thrown? Design time Description Cause: The value of the maxExclusive  constraining facet exceeds the value  specified for totalDigits.9235] Invalid enumerated item Design time Cause: A content type constraint is  defined in terms of the collective set  of constraining facet values. Together. The constraining facet value you  just specified may conflict with other  constraining facet values. [ISS.0062. The  maximum value is less than the  minimum value.1.G Validation Errors and Exceptions Default Exception Message [ISS.0062.  these values determine the allowed  values and properties of the content  type.9302] Maximum is less than minimum Design time Cause: Invalid condition.0062. Response: Change the value of  maxExclusive or totalDigits to make sure  the values do not conflict. you cannot  specify min length or max length.

 min inclusive. or min length) and make sure that it is within  the allowed range for the content  type. webMethods Developer User’s Guide Version 7.  [ISS.9304] Maximum is out of range (Valid range is from lowerBound to upperBound) Design time Cause: The specified maximum value  is out of the valid range for the  content type.  Response: Change the maximum  value (max exclusive. Response: Change the minimum value  (min exclusive.0062. max inclusive or  max length) and make sure that it is  within the allowed range for the  content type.1 469 .1.G Validation Errors and Exceptions Default Exception Message [ISS.9303] Minimum is out of range (Valid range is from lowerBound to upperBound) When is it thrown? Design time Description Cause: The minimum value is out of  the valid range for the content type.0062.

 For more  information about creating a flow service. Cause: The schema processor encountered an error in the XML Schema  definition used to create an IS document type.9502] NS Declaration is missing for prefix 'prefixName' Cause: Warns that an XML Namespace prefix is used without declaring  it. see “Creating a New Flow Service” on  page 120. Response: Contact Software AG Customer Care.0082.1. Error or warning codes that begin with DTDC  are errors that occur when you generate an IS schema from a DTD (or from an XML  document that references an existing DTD).G Validation Errors and Exceptions IS Schema Generation Errors and Warnings When you create an IS schema from a DTD or an XML Schema definition.9501] DTD is empty Cause: The DTD does not contain any information. 470 webMethods Developer User’s Guide Version 7. Note: You might also receive these errors and warnings when you generate an IS  document type or flow service from an XML Schema definition. Code CONV‐001 Message and Description [ISC. DTDC‐002 [ISC.9505] Name collision detailedWarningMessage Cause: Warns that an element type declaration is found in another  schema with the same XML Namespace. For more information about creating an IS  document type. Error or warning codes that begin with XSDC  are errors that occur when you generate an IS schema from an XML Schema definition. It is possible the DTD does  not satisfy XML 1.0082. DTDC‐001 [ISC. DTD.9101] Document type generation error: errorNumber. you may  receive errors or warnings. Response: Declare the XML Namespace prefix before using it.  DTDC‐005 [ISC.0082. The following table identifies and describes the errors you  might receive when creating an IS schema.0082.0.1 . Response: Make sure that the DTD is valid. Response: Use a different XML Namespace. DTDC‐003 [ISC. or XML  document that references a DTD.0082. see “Creating an IS Document Type” on page 233.9503] Error while parsing' Cause: Warns that a DTD cannot be parsed.

9703] Duplicate declaration found in this schema definition Cause: A duplicate attribute or element declaration is found in the XML  Schema definition.9708] Type derivation not OK Cause: An error. Response: Make sure the datatype definition is present in the XML  Schema definition. XSDC‐006 [ISC. An element declaration or attribute declaration is  missing from the XML Schema definition.0082. [ISC. the “type derivation  is not OK.0082. Response: Make sure the XML Schema definition is valid. Response: Make sure that the attribute declaration is present in the base  type definition. As per the spec (s) from the W3C. XSDC‐005 [ISC.0082.” [ISC.9705] Definition not found Cause: A simple type or complex type definition is missing from the  XML Schema definition.0082.1 471 . XSDC‐002 XSDC‐003 XSDC‐004 [ISC.G Validation Errors and Exceptions Code XSDC‐001 Message and Description [ISC. [ISC. However.0082.1.0082.9706] Declaration not found Cause: An error.0082.9704] Duplicate definition found in this schema definition Cause: A duplicate simple type or complex type definition is found in  the XML Schema definition.9709] Type derivation not OK: attribute declaration to be restricted is not found in the base type definition Cause: In a complex type derivation. Response: Make sure the XML Schema definition is valid. this attribute declaration is not found in  the base type definition. Response: Make sure the base type definition is present in the XML  Schema definition. webMethods Developer User’s Guide Version 7. an attribute declaration restricts the  use of an attribute.9707] Base type definition not found Cause: A base type definition that is used to derive either a simple type  or complex type is missing from the XML Schema definition.

Response: Use the error messages to determine which constraining  facets to remove from the type definition. XSDC‐009 [ISC. Response: Make sure that the attribute declaration is present in the base  type definition.9702] Duplicate definition found in this schema folderName:schemaName with the same target namespace Cause: Warns that an identical simple type or complex type definition is  found in the specified schema with the same target namespace.9701] Duplicate declaration found in this schema folderName:schemaNamewith the same target namespace Cause: Warns that an identical attribute declaration or element  declaration is found in the specified schema with the same target  namespace.9713] Unable to resolve QName Cause: Incorrect QName.0082.0082. The  schema processor creates the schema but does not include the duplicate  type definition. this attribute declaration is not found  in the base type definition.9710] Type derivation not OK: attribute declaration to be prohibited is not found in the base type definition Cause: In a complex type derivation. The schema processor creates the schema but does not  include the duplicate declaration. Response: None required. However.0082.9712] Incorrect facet (s) specified: typeName throws errorMessage.0082.0082. an attribute declaration prohibits  the use of an attribute.1 . Response: None required. Instead. the schema contains a  pointer to the first (original) declaration.G Validation Errors and Exceptions Code Message and Description [ISC. the schema contains a pointer to the first  (original) type definition. [ISC. XSDC‐080 XSDC‐081 472 webMethods Developer User’s Guide Version 7. XSDC‐008 [ISC.1. Response: Check the value of the QName. Instead. Cause: Constraining facets applied to the data type are incorrect or  cannot be used with the data type. [ISC.

  webMethods Developer User’s Guide Version 7. select the Generate complex types as document types option when you create a new document type  from an XML Schema in Developer.1 473 . webMethods Integration Server does not support creating a document type from an XSD with a recursive complex type.G Validation Errors and Exceptions Code Message and Description [ISC.0082. Response: If the schema you are using to generate a document type  contains a recursive complex type definition. Cause: The XML Schema contains a recursive complex type definition.  The Integration Server does not support generating a document type  from an IS schema containing a recursive complex type.9106] Complex type TypeName is recursive. This error only  occurs when you generate an IS document type from an XML Schema.1.

1 .G Validation Errors and Exceptions 474 webMethods Developer User’s Guide Version 7.1.

performing on IS elements 32 adapter notifications described 243 guidelines for moving and copying 49 adapter services. 359 reasons generated 359 uses of 359 all content model 227 Allow unspecified fields option 256 and operator 424 annotating source code for jcode 320 anonymous type definitions 227 any attribute declaration 226 any element declaration 226 anyURI content constraint 439 API for Java services 314 applying conditions to links 204 constraints to variables 255. and deletion implications 112 inheritance 109 locking implications 111 requirements for using Developer 18 testing and debugging implications 111 viewing on a server 109 actions. view. 107 assigning to packages and folders 106 checking for services 105 defined 104 element creation.1 475 . retry behavior 376 webMethods Developer User’s Guide Version 7. 438 areas of Developer window behavior and operation 31 editor 27 focus 31 general layout 21 Navigation panel 22 Properties panel 29 Recent Elements tab 27 resizing 33 Results panel 31 switching perspectives 34 UDDI Registry tab 25 zooming 33 arithmetic services 214 array variables default behavior for linking 409 definition of 409 A access control 104 ACLs assigning to elements 104.1.Index Symbols ! 423 != 420 " 427 % 427 & 424 && 424 ( 427 ) 427 / 427 < 420 <= 421 <> 420 = 419 == 419 > 420 >= 420 \ 427 _env field 243 | 423 || 423 ‡ 259 adding folders 121 packages 72 transformers 214 variables to pipeline link 211 addressing variables in expressions and filters 425 variables with special characters 426 alarm events building handlers for 360 definition of 348.

409 linking to transformers 217 using in filters 429 assigning default value to a variable 207 replication services 85 shutdown services 85 startup services 85 universal names to services 137 values to pipeline variables 206. 207 variable values to a variable 208 version numbers to packages 78 attribute declaration 226 reference 226 audit data. 146 failed services 142 for errors 146 for recovery. 384 Evaluate labels property 163 specifying default step 165 specifying label value 161 specifying switch variable 161 switch value 160 using conditional expressions 163 using in a flow 160 using SEQUENCE as a target of 166 using with regular expressions 161 breakpoints and the Trace Into command 289 clearing from flow steps 289 clearing from transformers 290 listing all 291 locating in flow services 291 overview 288 point when processing halts 289. 343 testing from 279 476 webMethods Developer User’s Guide Version 7. described 147 for resubmission purposes 146 long-running services 147 service retry 136 services 140 use cases 146 auditing options overwritten by server property 148 setting for a service 148 auditLog server property 148 B base64Binary content constraint 439 blank labels in BRANCH steps 164 blue links. creating publishable document type from 240 Broker/local trigger definition of 23 Broker/local triggers creating filters for 414 browser clients creating 341 invoking services from 342.Index guidelines for linking 203 linking to or from array variables 201. Broker restrictions 429 BRANCH step branching on empty values 164 branching on expressions 163 branching on null values 164 branching on switch value 160 creating 168 creating a multi-step child for 166 definition of 118. when generated 142 audit events building handlers for 361 definition of 348. 290 removing 291 setting in flow services 289 setting on a flow step 289 setting on a transformer 290 Broker filter collation locale 421 filter rules 428 Broker document type. in the Pipeline tab 202 booleans content constraint 439 in filters.1 . 409 linking to or from scalar variables 201. 360 when generated 142 Audit level property 149 audit log configuring 140 described 141 auditing configuring 140 failed and successful services 142.1.

324 caching definition of 131 elements to improve Developer performance 66 services not suited for 131 services suited for 131 setting 133 using prefetch 133 call stack 278 catch sequence.server.app. described 256 closing a session on webMethods Integration Server 35 coded services. 286. 287 Step Into 282. definition 156.ISRuntimeException class 137 combining Trace and Step commands 283 commands Disable Step 291. 388 compiling C/C++ services 327 error in Java compiler location 315 Java services 315. 285 comments for jcode 320 Comments property.wm.1.b2b. between packages 83 class files location of 318 clearing breakpoints on flow steps 289 breakpoints on transformers 290 client applications creating browser-based 341 creating C/C++ 335 creating Excel 339 creating Java 332 creating Visual Basic 337 closed documents. 286. 322 specifying the Java compiler 315 webMethods Developer User’s Guide Version 7. 287 Trace 282. 336 creating a make file 336 C/C++ services compiling with a make file 323 creating 323. 321 services with Developer 315 services with jcode 321. 293 Enable Step 291. 293 Load Pipeline Locally 299 Reset 283 Restore Pipeline from Server 299 Restore Pipeline Locally 299 Save Pipeline from Server 299 Save Pipeline Locally 297 Save Pipeline to Server 297 Set Breakpoint 289 Step 282. about 308 collapsing transformers 220 white space 449 COM objects invoking as services 328 using with webMethods components 327 COM services creating 327 com. 287 Step Out 286. 284 Trace Into 282. 284. in service retry 377 changing level of a step 154 passwords 37 position of a step 154 child flows described 154 stepping in/out of child flows 287 tracing 285 choice content model 227 circular dependencies.1 477 .Index building event handler sample 357 event handlers 357 flow services 116 built-in se