CONTENTS Title Page Copyright Page Information Map Information Table Preface 1 Writing Definitions with ADU 1.1 Starting and Stopping ADU 1.1.1 Starting ADU 1.1.2 Stopping ADU 1.1.3 Assigning a Default Text Editor 1.2 ACMS and the Data Dictionary 1.2.1 Dictionary Path Names 1.2.2 Creating CDO Directories and Establishing Directory and Entity Protection 1.3 Establishing Your ADU Environment 1.4 Understanding ACMS Terminology 1.4.1 Identifier 1.4.2 File Specification 1.4.3 Workspace Field Name 1.4.4 Text Strings 1.5 Creating and Processing Definitions 1.6 How ACMS Uses Definitions 1.6.1 Creating ADU Definition Files 1.6.2 ACMS Definitions: Placing in and Retrieving from CDD 1.6.3 Annotating Definitions 1.6.4 Abbreviating Commands and Keywords 1.6.5 Using Command Qualifiers 1.6.6 Using the Command Continuation Character 1.6.7 Responding to Command Prompts 1.6.8 Leaving ADU Temporarily 1.6.9 Using ADU Interactively 1.6.10 Using the Language-Sensitive Editor to Create Definition Files 1.7 Getting Help 2 Defining Tasks 2.1 Structure of an ACMS Task 2.2 Defining a Data Entry Task 2.2.1 Using Workspaces to Pass Data Between Steps 2.2.2 Defining the Block Step 2.2.3 Defining Characteristics of the Task 2.2.4 Storing a Task Definition in the Dictionary 2.2.5 Additional Considerations: Error Handling and Ease of Use 2.2.5.1 Using ACMS Workspaces 2.2.5.1.1 Using the CONTROL FIELD Clause in an Exchange Step 2.2.5.1.2 Using the IF THEN ELSE Clause in a Processing Step 2.2.5.1.3 Additional Workspace Definitions 2.2.5.2 Repeating the Task Automatically 2.3 Defining an Inquiry Task 2.3.1 Getting Information from the User 2.3.2 Retrieving Information from a File 2.3.3 Displaying Information 2.3.4 Completing the Task Definition 2.3.5 Additional Considerations: Displaying Multiple Records 2.3.5.1 Getting Information from the User 2.3.5.2 Retrieving Information 2.3.5.3 Displaying Information to the User 2.3.5.4 Completing the Task Definition 2.4 Defining an Update Task 2.4.1 Getting Information from the User 2.4.2 Retrieving Information from a File 2.4.3 Letting the User Update the Information 2.4.4 Writing the New Information to the File 2.4.5 Completing the Task Definition 3 Using DECforms with ACMS 3.1 ACMS Interface to DECforms 3.1.1 Calls to External Requests 3.1.2 Processing External Requests 3.1.3 Responses to External Requests 3.2 Writing and Compiling DECforms Escape Units 3.2.1 Writing an Escape Unit 3.2.2 Calling an Escape Unit in a Form Source IFDL File 3.3 Linking DECforms Form Objects 3.4 Linking Escape Units 3.4.1 Managing Escape Unit Files 3.4.2 Replacing Form Files 3.5 Creating Forms Trace Files 3.6 Naming Forms Image Files 3.7 User Interface Features with DECforms 3.8 Comparison of DECforms and TDMS 4 Defining Workspaces 4.1 Understanding the Types of ACMS Workspaces 4.2 Handling Errors with a Task Workspace 4.3 Using Data Supplied at the Menu 4.4 Using Group Workspaces 4.5 Using User Workspaces 4.6 Moving Data to a Workspace Field 4.7 Passing Data with User-Written Agents 4.8 Using External Global Symbols in Task Definitions 5 Using the Task-Call-Task Feature 5.1 Calling Another Task 5.1.1 Defining a Task Call 5.1.2 Task Call Example 5.1.3 Passing Workspaces 5.1.3.1 Using System Workspaces 5.1.3.2 Handling User and Group Workspaces 5.1.3.3 Tasks You Also Select from a Menu 5.1.3.4 Example of Updating Group and User Workspaces 5.1.4 Controlling Called Tasks 5.1.4.1 Passing Control Information in User-Defined Workspaces 5.1.4.2 Ending a Called Task 5.1.4.3 Controlling Parent Tasks 5.1.5 Defining Local Tasks 5.1.6 Mixing I/O Methods in Parent and Called Tasks 5.1.7 Form and Server Context in Task Calling 5.1.8 Using the NOT CANCELABLE BY TASK SUBMITTER Clause 5.1.9 Auditing and Operation 5.1.9.1 Task Auditing and Security 5.1.9.2 Using ACMS Operator SHOW and CANCEL Commands 6 Using the Detached Task Feature 6.1 Overview of Detached Tasks 6.1.1 Detached Tasks 6.1.2 Designing Your Application to Use Detached Tasks 6.1.3 Characteristics of Detached Tasks 6.2 Managing Detached Tasks 6.2.1 Starting a Detached Task 6.2.2 Setting the Retry Limit 6.2.3 Setting the Retry Wait Timer 6.2.4 Showing the Status of Detached Tasks 6.2.4.1 Using the ACMS/SHOW TASK Command 6.2.4.2 Using the ACMS/SHOW APPLICATION/DETACHED_TASKS Command 6.2.5 Stopping a Detached Task 6.2.6 Forcing a Detached Task to Not Retry 6.2.6.1 Task Failures that Cause ACMS Not to Retry a Task 6.2.7 Broadcasting Detached Task Messages 6.3 Using Group Workspaces in a Detached Task 6.4 Concurrent-Use Licensing with Detached Tasks 7 Defining Distributed Transactions 7.1 Why Use Distributed Transactions 7.2 Including Distributed Transactions Syntax in the Task Definition 7.3 Including Multiple Resource Managers in a Distributed Transaction 7.4 Using Task Sequencing Actions in a Distributed Transaction 7.5 Including a Called Task in a Distributed Transaction 7.6 How Distributed Transactions Affect Server Context 7.7 Excluding a Processing Step from a Distributed Transaction 7.8 Handling Deadlocks and Transaction Failures 8 Handling Task Execution Errors 8.1 Why Use Exception Handling 8.2 What is an Exception 8.2.1 Step Exceptions 8.2.2 Transaction Exceptions 8.2.3 Nonrecoverable Exceptions 8.3 Using the RAISE EXCEPTION Clause 8.4 Using Exception Handler Actions 8.5 Examples of Exception Handling 8.5.1 Recovering from a DECforms Time-Out Exception 8.5.2 Recovering from a Task-Call-Task Exception 8.5.3 Recovering from a Transaction Exception 8.6 How ACMS Performs Exception Handling 8.6.1 Executing a Step Exception Outside of a Distributed Transaction 8.6.2 Executing a Step Exception Within a Distributed Transaction 8.6.3 Executing a Transaction Exception 8.6.4 Executing Nonrecoverable Exceptions 8.7 How Exceptions Affect Server Cancel Procedures 8.7.1 Step Exceptions and Server Cancel Procedures 8.7.2 Nonrecoverable Exceptions Raised by Action Clauses 8.7.3 Other Nonrecoverable Exceptions and Transaction Exceptions 9 Queuing ACMS Tasks 9.1 Understanding the ACMS Queuing Facility 9.2 Using ACMS Queuing with Distributed Transactions 9.3 Steps in Using ACMS Queuing 9.4 Defining Queue Security 9.5 Using the ACMS Queue Services to Queue and Dequeue Tasks 9.5.1 Queuing Tasks Using the ACMS$QUEUE_TASK Service 9.5.2 Dequeuing Task Elements Using the ACMS$DEQUEUE_TASK Service 9.6 Using the QTI to Dequeue Tasks 9.6.1 Characteristics of Queued Tasks That are Processed by the QTI 9.6.2 Setting ACMSGEN Parameters for the QTI Process 9.6.2.1 Assigning a User Name to the QTI Process 9.6.2.2 Assigning a Priority to the QTI Process 9.6.2.3 Controlling Submitter Sign-Ins 9.6.2.4 Setting the Retry Time for Failed Tasks 9.6.2.5 Setting the Polling Time for Task Queues 9.6.3 Auditing Done by the QTI Process 9.6.4 How the QTI Handles Errors 9.7 Processing Error Queues 9.8 Debugging Queued Tasks 9.9 Online Backup of Task Queue Files 9.10 Queuing Example 9.11 Procedure Parameter Notation for Programming Services 9.12 ACMS$DEQUEUE_TASK 9.13 ACMS$QUEUE_TASK 10 Defining Task Groups 10.1 Defining a Task Group 10.2 Identifying Which Tasks Belong to the Task Group 10.3 Identifying Which Servers Are Required in the Group 10.3.1 Assigning Server Attributes 10.4 Naming Request Libraries 10.5 Identifying Which Message Files Are Used in the Group 10.6 Naming Workspaces in a Task Group Definition 10.7 Naming the Task Database for a Task Group 10.8 Changing Characteristics of Task Argument Workspaces 11 Defining Applications 11.1 Defining a Simple Application 11.2 Describing the Application Environment 11.2.1 Naming Task Groups 11.2.2 Naming a User Name for the Application Execution Controller 11.2.3 Assigning Characteristics to Tasks and Servers 11.3 Controlling Tasks 11.3.1 Controlling Access to Tasks 11.3.2 Auditing Task Events 11.3.3 Controlling What Happens When a Task Ends 11.3.4 TASK ATTRIBUTES and TASK DEFAULTS Clauses 11.3.4.1 Using the TASK ATTRIBUTES Clause 11.3.4.2 Using the TASK DEFAULTS Clause 11.3.4.3 Defaulting Task and Task Group Names 11.3.4.4 Positioning TASK ATTRIBUTES and TASK DEFAULTS Clauses 11.3.5 Enabling and Disabling Tasks in the Application Definition 11.3.6 Controlling Transaction Timeouts in the Application Definition 11.4 Controlling Servers 11.4.1 Assigning a Server User Name 11.4.2 Assigning a Dynamic or Fixed Server User Name 11.4.3 Assigning Server Default Directories 11.4.4 Assigning Server Logical Names 11.4.5 Creating Logical Name Tables for Application Servers 11.4.6 Controlling the Number of Server Processes 11.4.7 Creating and Deleting Server Processes 11.4.8 Replacing an Active Server 11.4.9 SERVER ATTRIBUTES and SERVER DEFAULTS Clauses 11.4.10 Defaulting Server and Task Group Names 11.4.11 Positioning SERVER ATTRIBUTES and SERVER DEFAULTS Clauses 11.4.12 Auditing Servers 11.4.13 Enabling Procedure Server Process Dumps 11.5 Controlling Applications 11.5.1 Assigning an Application Execution Controller User Name 11.5.2 Auditing Applications 11.5.3 Assigning Application Default Directories 11.5.4 Assigning Application Logical Names 11.5.5 Assigning Application Database Files 11.5.6 Controlling the Number of Server Processes 11.5.7 Controlling the Number of Task Instances 11.6 Modifying an Active Application 11.7 Controlling Application Failover 12 Defining Menus 12.1 Planning the Menu Structure 12.2 Defining Menus 12.2.1 Creating a Title for a Menu 12.2.2 Naming Entries on a Menu 12.2.3 Naming Menus 12.2.4 Naming Tasks on a Menu 12.2.5 Specifying WAIT or DELAY Action 12.2.6 Naming Default Application Files 12.2.7 Application Specifications and Remote Tasks 12.2.8 Naming Default Menu Files 12.2.9 Defining a Menu Forms Product 12.3 Processing the Menu Definition 13 Defining Existing Applications as ACMS Tasks 13.1 Defining Single-Step Tasks in ACMS Task Groups 13.1.1 Defining OpenVMS Images as Tasks 13.1.2 Defining DCL Commands and Command Procedures as Tasks 13.1.3 Defining DATATRIEVE Commands and Procedures as Tasks 13.2 Defining Servers to Handle Processing 13.3 Using the Task Group in an Application 14 Using the ACMS Request Interface 14.1 Overview of the ACMS Request Interface 14.2 The Request Interface and the ACMS Run-Time System 14.3 Defining Tasks and Task Groups 14.3.1 Task Definition 14.3.2 Defining a Task Group 14.3.3 How and When to Use the ACMS$RI_LIB Logical Name 14.4 Writing User Request Procedures 14.4.1 Writing an ACMS$RI_LIB_INIT Initialization Procedure 14.4.2 Writing an ACMS$RI_LIB_CANCEL Cancellation Procedure 14.4.3 Compiling and Linking URPs 14.5 Providing an RI Agent 14.5.1 Providing a Menu Interface 14.5.2 Compiling and Linking Menu Interface URPs with the RI Agent 14.6 Debugging Applications that Call URPs 14.6.1 Using the OpenVMS Debugger to Debug URPs Using a Running Application 14.6.2 Using the ACMS Task Debugger to Debug URPs and Their Tasks 14.7 Defining an Application that Uses the Request Interface 14.8 Running the Agent A Changing the ACMS Menu Format Using DECforms A.1 Modifying Menu Appearance Without Changing the Default Format A.2 Modifying the ACMS Menu Using DECforms A.2.1 Obtaining the ACMS DECforms Default Menu File A.2.2 How ACMS Uses Menu Form Record Definitions A.2.3 Instructions Performed by the Form File A.2.4 Modifying the Menu Appearance Only A.2.5 Changing SELECTION_STRING Field Lengths A.2.6 Changing the Number of Entries per Screen A.2.7 Changing the Size of the Command Line Recall Buffer A.2.8 Changing the DECforms Layout Size A.2.9 Using a Customized Response and Panel Definition A.2.10 Building and Installing the New Menu Form A.3 Disabling the SELECT Command in the ACMS Command Menu B Changing the ACMS Menu Format Using TDMS B.1 Modifying the Menu Format Using ACMS B.2 Modifying the ACMS Menu Using TDMS Requests B.2.1 Getting the ACMS Menu Request and Form B.2.2 Modifying the Menu Form Only B.2.3 Forms, Records, and Keypad Used by the Menu Request B.2.4 Instructions Performed by TDMS When ACMS Calls a Request B.2.5 Modifying the Menu Request B.2.6 Using the REQUEST Clause B.2.7 Changing the MENU_ENTRY_RECORD B.2.8 Modifying and Building the ACMS Menu Request Library B.3 Disabling the SELECT Command in the ACMS Command Menu C Using CDO for Pieces Tracking C.1 Overview of Dictionary Object Types C.2 Creating Relationships Between Entities D Using LSE with ACMS D.1 Using LSE with ACMS D.2 Creating ACMS Source Files with LSE D.2.1 Using Placeholders and Tokens in LSE D.2.2 Creating the Final Source File D.2.2.1 Syntax Differences D.2.2.2 Exiting Editing Mode D.3 Compiling Definitions with LSE COMPILE D.4 Examining Diagnostic Messages with LSE REVIEW D.4.1 Generating the Diagnostics File D.4.2 Examining the Diagnostics File with LSE REVIEW D.5 Using HELP in LSE E Request Interface Kit Components E.1 Application Independent Modules E.2 RI Sample Application E.2.1 RI Sample Application Source Modules E.2.2 RI Sample Application Run-Time Files E.3 FMS Sample Application E.3.1 FMS Sample Application Source Modules E.3.2 FMS Sample Application Run-Time Files F Modifying the FMS Menu Interface