Raincode QIX
Version 6.0.136.0
Raincode Crossbow
Raincode Crossbow is a consistent release of the entire Raincode product line, covering compilers, emulators and ancillary tools.
In practice, Raincode Crossbow is designed with three driving forces:
-
A focus on performance across the board:
-
The internal computation engine for non-binary numeric data types (display numeric or packed decimals) has been entirely overhauled, resulting in performance improvements that can go up to a factor of 5 (depending on the level of dependence on these non-binary data types)
-
The file I/O layer has been optimized to ensure the best possible performance when dealing with indexed or sequential files
-
RadaR is a revolutionary solution to run batch steps 5 to 10 times faster, without changing the application source code or even the JCL they are called from
-
The Visual Studio plugin now runs the heaviest debugging operations asynchronously, thereby dramatically improving response time and the overall user experience, even when debugging programs with hundreds of active variables
-
The views generated to access VSAMSql and IMSql data using plain SQL DML statements have been optimized dramatically
-
-
Updated .NET platform support running both on Linux and on Windows, on virtual machines or in containers, on the cloud, on laptops or servers managed on premise.
-
Consolidation of the product suite, allowing all Raincode software to be built and upgraded synchronously, thereby avoiding the headaches that come from multiple products that follow different (and sometimes, incompatible) release cycles.
Version 6.0
In addition to the above description, Raincode Crossbow v6.0 (see release notes) is a technical release that includes the following:
-
Support for .NET 10.0 and SQL Server 2025 across the board.
-
The Visual Studio plugin now supports Visual Studio 2022 and 2026, with improved support for JCL debugging.
-
Support for the File-AID JCL utility.
-
Support for TLS encryption on QIX and IMS TN3270 terminal servers.
-
Removal of support for .NET Framework and .NET 6.0.
-
Removal of support for Microsoft Host Integration Server (HIS) for Db2.
-
Removal of 32-bit support.
1. Introduction
Raincode QIX is Raincode’s CICS emulator. It is designed to allow existing CICS applications running on the mainframe to be rehosted, together with Raincode’s COBOL, PL/I and assembler compiler.
Raincode QIX aims at reproducing CICS’s observable behavior, taking advantage of the capabilities of the target platform. It does not aim at reproducing all of CICS’s internal architecture and protocols, which are very much adjusted to the idiosyncrasies of the Mainframe.
| Raincode® is a registered trademark. All other product and company names and marks mentioned in this document are the property of their respective owners. Note that PL/I, CICS, MVS, and z/OS are registered trademarks of IBM. SQL Server and Visual Studio are registered trademarks of Microsoft. |
1.1. This document
This document is designed for developers who operate Raincode QIX, and for engineers responsible for installing and configuring it. It is not a tutorial on CICS, its operating principles, its internal protocols and data structures.
Prerequisites
Raincode QIX requires two components to be installed prior to any operation:
-
.NET 10.0 or .NET 8.0
-
SQL Server
1.2. SQL Server
Raincode QIX relies on SQL Server extensively for its own operations, in addition to any application-level use of the database. SQL Server is used to store configuration information, but also, as basic infrastructure for its various components to communicate with each other.
A QIX system will thus always require SQL Server, even if it uses file-based storage or even Oracle or Db2 for its application data.
QIX does not create the database nor the configuration tables on the fly: they must have been setup separately prior to the creation of regions and other configuration artefacts, typically by a DBA who is authorized to perform such operations. Please check the section titled Setting up the QIX configuration databases for more information about this.
1.3. Concepts and architecture
This section describes the key concepts of Raincode QIX, and how they map (or don’t map) to existing concepts in CICS.
1.3.1. Regions
Raincode QIX is based on the central concept of a region, which is a direct transposition of CICS regions. In CICS, a region is a named, isolated address space that contains a collection of resources, e.g., programs, BMS map sets, transactions, terminals, files, etc., all of which are controlled by CICS as a single unit.
A QIX region is similar, except for the fact that it does not have its own address space (which would seriously limit scalability, and which would be close to impossible to support in .NET).
In practice, a QIX region is materialized by a name, and a number of records in a configuration database. In other words, a QIX region is uniquely identified by a connection string identifying the configuration database, and a name identifying the region in this database. This allows you to have multiple regions in a single configuration database, or to have separate configuration databases, each containing a single region if that is your preference.
Upon creation of the region, a number of service broker queues are created as well. These queues define the endpoints one must connect to, to interact with the region.
By default, these queues are created in the configuration database. For performance reasons, one has the option of creating these queues on a separate database instance.
1.3.2. Terminal servers and processing servers
As explained above, a QIX region is materialized by a configuration in a configuration database together with service broker queues, but that does not make the region usable. In order to start running transactions, you must start one or more processing servers, as well as one or more terminal servers.
The figure below shows QIX’s general architecture.
-
Terminal server: The terminal server deals with
TN3270connections. It serves as the entry point for online users accessing the system through a 3270 terminal emulator that supports theTN3270Eprotocol (including IBM Personal Communication). It handles all3270related features, including the primary mapping support component (BMS) equivalent inQIX. For instance, it converts theCICS SEND MAPcommand into a3270output datastream, and translates incoming3270datastreams into the equivalent data structure used by the underlyingPL/I,COBOLorAssemblerprogram. When a user connects using a standard 3270 emulator, the terminal server uses the service broker queues to communicate with a processing server where the actual programs will execute (See below). The output is then returned to the terminal server through another queue, and will then be sent back to the user through the 3270 connection. -
Processing server: The processing server is responsible for performing the actual transactional processing. For a given region, it processes tasks stored in the task queue. This queue is filled by the terminal server, e.g. when the user presses enter in the terminal. Multiple processing servers can take from the queue, allowing parallel execution of CICS tasks.
The Terminal servers and Processing servers are not started or controlled centrally. They are started independently, connect to the region by starting to listen to its service broker queues, and then begin interacting with it.
| For more information about SQL Server’s Service Broker used for the communication between the components in this architecture, please refer to documentation on Service Broker. |
In addition to its name, a QIX region can also be given an APPLID if
required by the underlying application. By specifying a different region name with the same APPLID, multiple
instances of QIX can run with the same APPLID, which can prove helpful in a development environment.
|
1.3.3. Distributed Architecture
As explained in detail above, Raincode QIX is based on a distributed architecture. Its components can run on different nodes within a local area network, as required. This architecture is scalable, as there are no performance bottlenecks other than those related to network and database bandwidth.
On the other hand, this means that QIX cannot provide true shared memory services in the same way CICS does on the mainframe. It directly contradicts the distributed paradigm. QIX must instead emulate shared memory, which can only work if it is updated sparingly. Applications that depend heavily on shared memory, including updates at high frequency, may not be usable on QIX without change. More limited uses may be supported adequately. For more details on how QIX emulates shared memory and the limitations of this emulation, please refer to the documentation on the Common Work Area (CWA).
1.3.4. Extensibility
Rather than have an ever growing list of options to support even more uncommon capabilities,
Raincode QIX supports a plugin mechanism that can be used to extend or override existing behaviors. Such plugins
can be implemented in any .NET language, and they are loaded dynamically to enable the customization of
specific components and behaviors within QIX.
An example of such a plugin is the authentication plugin used in the terminal server. For more details on implementing a plugin, please refer to the section Implementing a plugin.
1.3.5. Administration
A QIX system must be administered. One must be able to create a region, configure it, enable transactions, etc. QIX supports two means to perform these administration tasks:
-
The Raincode Console provides a web-based interface.
-
The QIX.Cmd tool provides similar capabilities, usable from the command line.
There is a lot of overlap between these two tools, but this is very much by design, as they serve different purposes: the Console is meant to be used by a human, provides visualization capabilities, etc. On the other hand, the QIX.Cmd allows for automation of administration tasks, for instance, to start and stop QIX regions at specific times.
1.4. Samples
Seeing a working QIX application in action is the best way to understand its operating principles.
Raincode 360 includes several such sample applications,
each demonstrating a specific feature set of QIX. A good example to get started is the bank application (located
in the folder Qix - Emulator - Bank Application). This example illustrates a typical use case and contains
instructions on how to debug an application that runs with QIX.
1.5. Manually configuring Raincode QIX
1.5.1. Setting up the QIX configuration databases
To run an instance of QIX, the configuration and service broker database(s) must be created,
where QIX will store its configuration settings and queues, respectively. These databases must be
created externally, typically by a DBA, before invoking any of the QIX tools.
In practice, the following steps must be followed:
-
In your SQL Server instance, create a database named
RegionConfig(or any name of your choice) to serve as the configuration database. -
The Service Broker database can be the same as the configuration database or a separate one, in which case this additional database must be created as well. If a separate database is used, two distinct connection strings will have to be provided in some circumstances. See the options listed in ServiceBrokerConnectionString.
-
Ensure that the Service Broker is enabled on the Service Broker database. If the configuration database is also your Service Broker database, enable the Service Broker when creating the database, as shown in the screenshot below. If the database has already been created, then activate the Service Broker as explained in how to activate the Service Broker in an existing database.
Figure 2. Enable Service Broker -
On the configuration database, execute the T-SQL script
rcqix_db.sqllocated in the%RCDIR%\sqldirectory. -
If your programs utilize Temporary Storage queues, execute the T-SQL script
rcqix_ts.sqlin the configuration database, also found in the%RCDIR%\sqldirectory. Just as for the Service Broker queues, it is also possible to have a separate database for Temporary Storage for improved performance. To use this option, first create the database before running thisrcqix_ts.sqlscript on it, and ensure to pass the QueueConnectionString option where needed. -
If the
CICSprograms need to access files, the file names as specified in the program need to be mapped to a data set. This mapping is done by providing a configuration file to the processing server, using theFileConfigargument. The most straightforward format of this file is given below: it first refers to the Raincode Catalog and then simply links file names to data set names usingFileConfigelements. For each link, the file name is given as theLogicalNameattribute, while thePathelement, by starting withDSN:, states that it refers to a data set name that is contained in the catalog (the data set name being the part afterDSN:).<FileConfigCollection> <CatalogConfiguration>D:\Mainframe\Raincode.Catalog.xml</CatalogConfiguration> <FileConfig LogicalName="MFSFAIX"> <Path>DSN:MAIN.PROD.AIX</Path> </FileConfig> <FileConfig LogicalName="MFSFATC"> <Path>DSN:MAIN.PROD.ATC</Path> </FileConfig> </FileConfigCollection> -
Create your regions, by using the Console or the QIX.Cmd tool and then adding transactions, TD queues, and other necessary components using Add commands or by importing them from a
DFHCSDUPLIST ALL OBJECTSoutput using Setup environment.
1.5.2. Interacting with your application database
In addition to the SQL Server database(s) used by QIX to manage the regions, their configurations, the Service Broker queues and/or Temporary Storage queues, QIX application may rely on business data stored in an application database. Raincode supports Db2, SQL Server and Oracle as application databases.
To enable a QIX application to connect and interact with this database, the
region must have a reference to its connection string. This connection
string is added as an extra parameter when creating or adding regions to your QIX environment.
This connection string must be prefixed by #, followed by the kind of SQL runtime that is used
by the database (#SqlServer|#DB2|#Oracle).
For instance, below is a PowerShell example, using the QIX.Cmd tool add-region command,
that creates a new region called MyRegion, which specifies an Oracle database to be used by the
application for its own data:
$APPCONN = '#Oracle' + '#$Env:CONNECTIONSTRING';
& "$env:RCBIN/QIX.Cmd" -CS="$QIXCONN" add-region -RegionName=MyRegion -ApplicationConnectionString="$APPCONN"
Using an application database also implies that e.g. the PL/I or COBOL programs referring and
interacting with this database must be compiled with the correct flags to ensure that the SQL
commands are translated to the appropriate target SQL dialect. These flags are available in
the Miscellaneous code generation information
section in the Raincode Stack user guide.
2. Using Raincode QIX
Raincode QIX is composed of several utilities located in the %RCBIN% directory. These include:
-
The QIX.cmd command-line configuration utility
-
The terminal server and processing server
-
The BMS compiler
You can get usage information for each tool, together with the matching supported command-line options, by running it from the command line without any parameters.
More detailed documentation is provided in the following sections for reference.
2.1. QIX command-line configuration
Earlier versions of QIX supported a separate utility named RegionCreator for managing regions. This utility
has been fully replaced by the much more versatile command line tool QIX.Cmd that can be used to
query, create, remove, and modify the
components of a QIX region using the command line. QIX.Cmd commands can be
classified into four broad categories:
Each command provides additional flags that are used to control how the actions will be performed.
A mandatory flag for the QIX.Cmd tool is -ConnectionString, which holds the connection string to the
SQL Server instance, where QIX will store the configuration for the region(s).
This flag can be abbreviated with -CS.
| The bare minimum elements for a region to function correctly are the name of the region, program path, map path, transaction list and an application connection string when the application uses a database. By default, all paths are set to the current working directory, i.e. the path of where the terminal or processing server is started. |
2.1.1. Setup environment
Instead of starting from scratch, and defining resources one by one,
QIX.Cmd can be used to create a fully initialized region based on a CSD file coming from the mainframe.
This will allow the existing transactions, TD queues and files of the CICS environment to be created automatically in QIX.
A CSD file can be generated on the mainframe with the DFHCSDUP utility
and using the LIST ALL OBJECTS command.
To set up a region in QIX, the only thing that the setup-env command needs is the path to the CSD file and the
name of the new region.
The CSD file itself contains lists, groups, and the resources (such as, transactions and TD queues)
assigned to them. While parsing the CSD file, QIX.Cmd builds the structure of all the resources in the file
which can be added to the QIX region. By default, setup-env imports all transactions, TD queues and files found in the CSD file.
However, if you want to include only specific parts of the CICS environment as defined in the CSD file,
setup-env offers two filtering options:
-
-filterList: imports only the resources belonging to the specified list(s). -
-filterGroup: imports only the resources belonging to the specified group(s).
Both flags can be repeated to include multiple lists and/or groups. If no filter flags are
provided, all transactions, TD queues and files defined in the CSD file are imported to the QIX environment.
.\QIX.Cmd -CS="$env:CS" setup-env -FileName="path\to\csd.txt" -RegionName="NewRegionName"
2.1.2. Add commands
Add commands can be used to create new objects and add them to the QIX configuration. They
start with the add- prefix and support multiple flags that are used to initialize the fields
of the new object.
For instance, the following command will add a transaction named TR01, referencing program MyProgram to the region named MyRegion.
.\QIX.Cmd -CS="$env:CS" add-transaction -RegionName="MyRegion" -Name="TR01" -Program="MyProgram"
QIX.Cmd provides two separate commands to create a region:
-
add-region: creates a new empty region with the given region name and connection strings. This region will only become usable as soon as transactions (and TD queues, if applicable) are created as well. -
clone-region: creates a new region and duplicates all the information from another existing region e.g., transactions, maps paths, …
Creating a region with a list of transactions, TD queues, … requires multiple
commands: add-region, add-transaction for every transaction, add-td-queue for every TD queue, ….
|
2.1.3. Get commands
Get commands can be used to retrieve information from the QIX configuration, either as plain text or as JSON.
These commands start with the get prefix, and can be followed by two flags to control the output:
-
-OutputFile: to redirect the output to a file instead of the console -
-JSON: to print the data either in a JSON format or as a table
This is followed by the type of requested data and additional flags to filter and sort
the data to retrieve.
For instance, .\QIX.Cmd -CS="$env:CS" get -JSON transactions -RegionName="MyRegion"
returns the transactions of the region named MyRegion in a JSON format.
2.1.4. Remove commands
Remove commands (recognizable by the remove- prefix) delete data from the QIX configuration,
based on identifying information (such as the transaction name, for instance).
.\QIX.Cmd -CS="$env:CS" remove-transaction -RegionName="MyRegion" -Name="TR01"
2.1.5. Edit commands
Edit commands can be used to edit existing data. Similarly, to remove commands, some command-line options are mandatory for identifying the data to modify. Additional options can be used to modify the current information. For example, the following statement will overwrite the program name of the transaction TR01 in the region MyRegion.
.\QIX.Cmd -CS="$env:CS" edit-transaction -RegionName="MyRegion" -Name="TR01" -Program="NewProgramName"
2.1.6. Disabling Functions and Files
Raincode QIX also offers the functionality to enable and disable transactions and files. By default, transactions and files are enabled just as on the mainframe, but they can be disabled dynamically at runtime. If one attempts to execute a transaction marked as disabled, it will result in an abend with EIBRESP = INVREQ and RESP2 = 17. Similarly, when a program tries to access a file marked as disabled, the abend comes with EIBRESP = DISABLED and RESP2 = 50.
| In Raincode QIX’s distributed architecture, each server maintains a local cache of the region configuration to avoid latency. However, this approach can result in discrepancies between the transaction or file status (enabled or disabled) stored in the region configuration database and the one stored in the local cache. To address this inconsistency, Raincode QIX automatically notifies all servers about these critical operations, i.e., the transaction or file status in the cache is kept up to date. |
2.1.7. Execute Program on a QIX Region
In Raincode, programs can be executed on a QIX region without a 3270 screen by using QIX.Cmd.
| Only programs that do not perform screen operations can be executed; any program that attempts to access a screen is rejected. |
To run a program on a QIX region, a processing server with an active API listener is required. This can be achieved by adding the region option APIListener with a value of True to the region. Furthermore, the region should have a program path to the dll of the desired program. Finally, a processing server can be started with QIX.ProcessingServerRunner.
With the following command, the program NewProgramName will be executed on the region named MyRegion. The Data flag gives the path to a file containing the input commarea. The resulting commarea of the program is written in the file specified by Outputfile. The sizes of these commarea can be adjusted using additional options, refer to the execute command for more details.
.\QIX.Cmd -CS="$env:CS" Execute -RegionName="MyRegion" -Program="NewProgramName" -Data="input/commarea.txt" -Transaction="TR01" -OutputFile="output/commArea.txt"
2.1.8. Granting Permission to Database Users
QIX.Cmd supports a command named generate-permission-files to
generate SQL files that specify the roles and permissions required for
the users of the configuration and queue databases. These files are
saved in the specified output directory or, if no directory is provided,
in the current working directory by default.
The generated files are:
-
QixConfigPermissionsFile.sql - This file contains the permissions required for the QixConfig database user to interact with the stored procedures and functions related to the QIX instance.
-
QixTsQueuePermissionsFile.sql - This file contains the permissions required for the QixTsQueue database user to interact with the TS queues.
A database user must be granted specific access permissions to interact with tables, stored procedures, functions, queues, and services within the QIX instance. The four types of access that are supported are listed below.
Reader Access
Reader access allows a database user to retrieve and view data from tables within the specified QIX instance database.
Writer Access
Writer access allows a database user to insert, update or delete data from tables within the specified QIX instance database.
Execute access
Execute access grants a database user the right to execute the stored procedures and functions within the specified QIX instance.
To determine the specific stored procedures and functions that require access within the QIX instance, please refer to the following SQL files:
-
QixConfigPremissionFile.sql, has details about the stored procedures and functions associated with the QIX config database user. -
QixTsQueuePermissionFile.sql, has details about the stored procedures and functions associated with the QIX TS queue database user.
If the database administrator (DBA) grants execute access to the QIX user on the QIX
database, in that case, the QixConfigPremissionFile.sql and QixTsQueuePermissionFile.sql
files become obsolete since the user will have access to all the stored procedures and functions by default.
|
Receive access
Receive access allows a database user to receive messages from a queue within the specified QIX region.
Multiple queues are provisioned within the service broker when a new region is created. These queues facilitate the message exchange within the Raincode QIX instance. Below is the screenshot of the Raincode console, which shows a typical representation of queues in a region.
| Granting receive access must be repeated each time a new region is created, as each region has its own queues. This is true, even when a region is created by cloning another existing region. |
2.2. QIX command line tool options
QIX.Cmd can query, create, remove, and modify the components of a QIX environment. QIX.Cmd submits the following return codes: 0: Success; 1: QixCmdError; 2: DatabaseError; 3: DoesNotExists; 4: AlreadyExists; 99: UnexpectedError;
2.2.1. Options
Configuration
| Command-line option | Description |
|---|---|
|
SQL Database connection string to connect. This argument is mandatory. |
Miscellaneous
| Command-line option | Default value | Description |
|---|---|---|
|
This command-line option is an additional .net 'app.config' file. |
|
|
Displays the tool’s help information. |
|
|
||
|
|
Displays a description of the program. |
|
|
Specifies the log level. Valid values are:
|
|
|
Displays the version information. |
2.2.2. SubCommands
get: returns specific type of data based on its subcommand. Will return nothing when no subcommand is given
add-region: creates and adds a new empty region
clone-region: creates and adds a new empty region and copies all the components (transactions, maps paths, programs paths, …) of another region into it
remove-region: removes a region with all its components
edit-region: edits a region
add-region-option: adds a region option (OptionName → OptionValue)
remove-region-option: removes a region option
edit-region-option: edits the value of a region option
add-transaction: adds a transaction
add-transactions: adds multiple transactions
remove-transaction: removes a transaction
enable-transaction: enable a transaction
disable-transaction: disable a transaction
edit-transaction: edits a transaction
add-maps-path: adds a mapsPath
remove-maps-path: removes a mapsPath
add-programs-path: adds a programsPath
remove-programs-path: removes a programsPath
add-tdqueue: adds a TD queue
remove-tdqueue: removes a TD queue
edit-tdqueue: edits a TD queue
write-tdqueue: write data to a TD queue
read-tdqueue: reads data from a TD queue
add-forward-transaction: adds a forward transaction
remove-forward-transaction: removes a forward transaction
edit-forward-transaction: edits a forward transaction
add-forward-destination: adds a forward destination
remove-forward-destination: removes a forward destination
edit-forward-destination: edits a forward destination
add-file: add a file entry with the logical name, dsn name and a status to the configuration
remove-file: remove a file entry from the configuration
enable-file: enable a file so that it can again be accessed in the current region
disable-file: disable a file so that it can no longer be accessed in the current region until it is re-enabled
edit-file: edits a file
download-file-config: creates a file config based on the files in the config database and writes it in a file
upload-file-config: given a file config, add all files in the config database
setup-env: creates a region with the transactions, TD queues and files of the given CSD file
Execute: Call a region external api to execute a program.
Admin: Set of commands to administrate the Qix configuration and database
status-region: returns the status of a region: active when it has at least one active server; otherwise inactive
stop-region: stops all the servers in a region
stop-server: stops a server
recycle-server: shuts down a server with exit code 2 to allow reloading after stopping when catching this exit code. Note, restarting the server should be done manually after catching exit code 2
generate-permission-files: generates two SQL files that specify the roles and permissions: (1) QixConfigPermissionsFile.sql contains the permissions for the QixConfig database user to interact with the stored procedures and functions related to the QIX instance; (2) QixTsQueuePermissionsFile.sql contains the permissions required for the QixTsQueue database user to interact with the TS queues. For more information, see the above section
QIX.Cmd get
returns specific type of data based on its subcommand. Will return nothing when no subcommand is given
Options
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
print content in a specific format. The default is CSV Valid values are:
|
|
Redirect the output to this file instead of the console |
SubCommands
regions: returns all the regions
maps-paths: returns all the mapsPaths
programs-paths: returns all the programsPaths
region-options: returns all the region options
forward-destinations: returns all the forward destinations
forward-transactions: returns all the forward transactions
transactions: returns all the transactions
servers: returns all the servers
tdqueues: returns all the td queues
files: returns all the files
QIX.Cmd get regions
returns all the regions
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
Filter the output based on the region id |
|
Filter the output based on the region name |
|
Filter the output based on the application connection string |
|
Filter the output based on the cwa size |
|
Filter the output based on secmgrcfg |
|
Filter the output based on the code page |
|
Filter the output based on the queue connection string |
|
Filter the output based on the string runtime encoding |
|
Filter the output based on the parallel destination |
|
Filter the output based on the logLevel Valid values are:
|
|
Sort the output Valid values are:
|
QIX.Cmd get maps-paths
returns all the mapsPaths
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
Filter the output based on the region id |
|
Filter the output based on the region Name |
|
Filter the output based on the mapsPath id |
|
Filter the output based on the mapsPath path |
|
Sort the output Valid values are:
|
QIX.Cmd get programs-paths
returns all the programsPaths
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
Filter the output based on the region id |
|
Filter the output based on the region name |
|
Filter the output based on the programsPath id |
|
Filter the output based on the programsPath path |
|
Sort the output Valid values are:
|
QIX.Cmd get region-options
returns all the region options
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
Filter the output based on the region id |
|
Filter the output based on the region name |
|
Filter the output based on the option name Valid values are:
|
|
Filter the output based on the option value |
|
Sort the output Valid values are:
|
QIX.Cmd get forward-destinations
returns all the forward destinations
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
Filter the output based on the region id |
|
Filter the output based on the region Name |
|
Filter the output based on the forwardDestination id |
|
Filter the output based on the forwardDestination host name |
|
Filter the output based on the forwardDestination host id |
|
Filter the output based on the forwardDestination port |
|
Sort the output Valid values are:
|
QIX.Cmd get forward-transactions
returns all the forward transactions
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
Filter the output based on the region id |
|
Filter the output based on the region Name |
|
Filter the output based on the id |
|
Filter the output based on the transaction id |
|
Filter the output based on the destination |
|
Filter the output based on the remote transaction |
|
Sort the output Valid values are:
|
QIX.Cmd get transactions
returns all the transactions
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
Filter the output based on the region id |
|
Filter the output based on the region name |
|
Filter the output based on the transaction id |
|
Filter the output based on the transaction name |
|
Filter the output based on the program name |
|
Filter the output based on the twa size |
|
Filter the output for disabled transactions |
|
Filter the output for enabled transactions |
|
Filter the output for transactions that always use the cache or follow the region option |
|
Sort the output Valid values are:
|
QIX.Cmd get servers
returns all the servers
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
Filter the output based on the region id |
|
Filter the output based on the region Name |
|
Filter the output based on the server id |
|
Filter the output based on the status of the servers Valid values are:
|
|
Filter the output to only get terminal servers |
|
Filter the output to get only processing servers |
|
Filter the output based on the server host |
|
Sort the output Valid values are:
|
QIX.Cmd get tdqueues
returns all the td queues
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
Filter the output based on the region id |
|
Filter the output based on the region Name |
|
Filter the output based on the td queue id |
|
Filter the output based on the td queue name |
|
Filter the output based on the transaction msmq host |
|
Filter the output based on the td queue enabled/disabled |
|
Sort the output Valid values are:
|
QIX.Cmd get files
returns all the files
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
Filter the output based on the region id |
|
Filter the output based on the region name |
|
Filter the output based on the file name |
|
Filter the output based on the dsn |
|
Filter the output based on file status Valid values are:
|
QIX.Cmd add-region
creates and adds a new empty region
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
The name of the region to create This argument is mandatory. |
|
Connection string to the business database. |
|
The logLevel of the new region Valid values are:
|
|
The runtime encoding of the new region |
|
Service Broker Admin Connection string to create queues and services on the Service Broker Database. If omitted, the QixConnectionString will be used |
|
Service Broker User Connection string to send and receive messages on the Service Broker Database. If omitted, the ServiceBrokerConnectionString will be used |
|
The connection string to the SQLServer database used for storing the temporary storage queues |
|
DB Target for the applications Valid values are:
|
|
The connection string to the queues |
|
The CWA size |
|
Secmgrcfg |
|
The code page |
QIX.Cmd clone-region
creates and adds a new empty region and copies all the components (transactions, maps paths, programs paths, …) of another region into it
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
Region name to copy from This argument is mandatory. |
|
Region name to copy to This argument is mandatory. |
QIX.Cmd edit-region
edits a region
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
The name of the region in question This argument is mandatory. |
|
The new application connection string of the region |
|
The new cwa size of the region |
|
The new secmgrcfg of the region |
|
The new queue connection string of the region |
|
The new codepage of the region |
|
The new string runtime encoding of the region |
|
The new parallel destination of the region |
|
The new logLevel of the region Valid values are:
|
QIX.Cmd add-region-option
adds a region option (OptionName → OptionValue)
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
The region name in question This argument is mandatory. |
|
The name of the option that will be added Valid values are:
This argument is mandatory. |
|
The value of the option that will be added This argument is mandatory. |
QIX.Cmd remove-region-option
removes a region option
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
The region name in question This argument is mandatory. |
|
The name of the option that will be deleted Valid values are:
This argument is mandatory. |
QIX.Cmd edit-region-option
edits the value of a region option
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
The region name in question This argument is mandatory. |
|
The name of the option that will be updated Valid values are:
This argument is mandatory. |
|
The new value for the option This argument is mandatory. |
QIX.Cmd add-transaction
adds a transaction
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
The region name in question This argument is mandatory. |
|
The name of the transaction that will be added This argument is mandatory. |
|
The program name of the transaction that will be added This argument is mandatory. |
|
The twa size of the transaction that will be added |
|
The transaction as the initial transaction |
|
Disable the transaction that will be added |
|
Enable the transaction that will be added |
|
Always check the cached config for disabled transactions regardless of the region option |
QIX.Cmd add-transactions
adds multiple transactions
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
The region name in question This argument is mandatory. |
|
a semicolon separated list of the transaction name and program name separated by a colon. E.g., -Transaction='TR01:Pr01;TR02;Pr02' This argument is mandatory. |
QIX.Cmd remove-transaction
removes a transaction
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
The region name in question This argument is mandatory. |
|
The name of the transaction that will be removed This argument is mandatory. |
QIX.Cmd enable-transaction
enable a transaction
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
The region name in question This argument is mandatory. |
|
The name of the transaction that will be enabled This argument is mandatory. |
QIX.Cmd disable-transaction
disable a transaction
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
The region name in question This argument is mandatory. |
|
The name of the transaction that will be disabled This argument is mandatory. |
QIX.Cmd edit-transaction
edits a transaction
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
The region name in question This argument is mandatory. |
|
The name of transaction in question This argument is mandatory. |
|
The name of the new region to which the transaction is connected |
|
The new program name of the transaction |
|
The new twa size of the transaction |
|
Always check the cached config for disabled transactions regardless of the region option |
QIX.Cmd add-maps-path
adds a mapsPath
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
The region name in question This argument is mandatory. |
|
The path of the mapsPath that will be added This argument is mandatory. |
QIX.Cmd remove-maps-path
removes a mapsPath
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
The region name in question This argument is mandatory. |
|
The mapsPath that will be deleted This argument is mandatory. |
QIX.Cmd add-programs-path
adds a programsPath
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
The region name in question This argument is mandatory. |
|
The programsPath path that will be added This argument is mandatory. |
QIX.Cmd remove-programs-path
removes a programsPath
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
The region name in question This argument is mandatory. |
|
The programsPath that will be deleted This argument is mandatory. |
QIX.Cmd add-tdqueue
adds a TD queue
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
The region name in question This argument is mandatory. |
|
The name of the TD queue that will be added This argument is mandatory. |
|
The msmq host of the TD queue that will be added |
|
Enables/disables the tq queue that will be added |
|
Service Broker Admin Connection string to create queues and services on the Service Broker Database. If omitted, the QixConnectionString will be used |
|
Name of the transaction that is to be automatically initiated when the trigger level is reached |
|
The number of records to be accumlated before a task is automatically initiated to process them |
|
Properties that can be added to the td queue |
QIX.Cmd remove-tdqueue
removes a TD queue
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
The region name in question This argument is mandatory. |
|
The name of the TD queue that will be deteled This argument is mandatory. |
QIX.Cmd edit-tdqueue
edits a TD queue
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
The region name in question This argument is mandatory. |
|
The name of the TD queue in question This argument is mandatory. |
|
The new msmq host of the TD queue |
|
Enable or disable the TD queue |
|
Name of the transaction that is to be automatically initiated when the trigger level is reached |
|
The number of records to be accumlated before a task is automatically initiated to process them |
|
New properties for the td queue |
|
Clear the error status of the trigger transaction |
QIX.Cmd write-tdqueue
write data to a TD queue
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
The region name in question This argument is mandatory. |
|
The name of the TD queue that will be added This argument is mandatory. |
|
Path to the file containing the bytes to send This argument is mandatory. |
QIX.Cmd read-tdqueue
reads data from a TD queue
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
The region name in question This argument is mandatory. |
|
The name of the TD queue that will be added This argument is mandatory. |
|
Output file path. If not provided program will output to STDOUT |
QIX.Cmd add-forward-transaction
adds a forward transaction
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
The region name in question This argument is mandatory. |
|
The transaction id of forward transaction that will be added This argument is mandatory. |
|
The destination of forward transaction that will be added This argument is mandatory. |
|
The remote transaction of forward transaction that will be added This argument is mandatory. |
QIX.Cmd remove-forward-transaction
removes a forward transaction
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
The region name in question This argument is mandatory. |
|
The transaction id of forward transaction that will be deleted This argument is mandatory. |
QIX.Cmd edit-forward-transaction
edits a forward transaction
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
The region name in question This argument is mandatory. |
|
The transaction id of forward transaction that will be edited This argument is mandatory. |
|
The new destination of the forward transaction |
|
The new remote transaction of the forward transaction |
QIX.Cmd add-forward-destination
adds a forward destination
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
The region name in question This argument is mandatory. |
|
The host name of forward destination that will be added This argument is mandatory. |
|
The host id of forward destination that will be added This argument is mandatory. |
|
The port of forward destination that will be added This argument is mandatory. |
QIX.Cmd remove-forward-destination
removes a forward destination
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
The region name in question This argument is mandatory. |
|
The host id of forward destination that will be deleted This argument is mandatory. |
QIX.Cmd edit-forward-destination
edits a forward destination
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
The region name in question This argument is mandatory. |
|
The host id of forward destination in question This argument is mandatory. |
|
The new host name of the forward destination |
|
The new port of the forward destination |
QIX.Cmd add-file
add a file entry with the logical name, dsn name and a status to the configuration
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
The name of the region in question This argument is mandatory. |
|
The name of the file in question This argument is mandatory. |
|
The dsn name of the file This argument is mandatory. |
|
The status of the file Valid values are:
|
QIX.Cmd remove-file
remove a file entry from the configuration
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
The name of the region in question This argument is mandatory. |
|
The name of the file in question This argument is mandatory. |
QIX.Cmd enable-file
enable a file so that it can again be accessed in the current region
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
The name of the region in question This argument is mandatory. |
|
The name of the file that should be enabled This argument is mandatory. |
QIX.Cmd disable-file
disable a file so that it can no longer be accessed in the current region until it is re-enabled
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
The name of the region in question This argument is mandatory. |
|
The name of the file that should be disabled This argument is mandatory. |
QIX.Cmd edit-file
edits a file
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
The region name in question This argument is mandatory. |
|
The name of file in question This argument is mandatory. |
|
The new dsn of the file |
|
The new status of the file Valid values are:
|
QIX.Cmd download-file-config
creates a file config based on the files in the config database and writes it in a file
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
The region name in question This argument is mandatory. |
|
The path to the file where the resulting file config should be written This argument is mandatory. |
|
The name of the catalog used in the file config. When not given, the value for the region option Catalog will be used. If that is not given, the default value becomes 'Raincode.Catalog.xml' |
QIX.Cmd upload-file-config
given a file config, add all files in the config database
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
The region name in question This argument is mandatory. |
|
The path to the file config This argument is mandatory. |
|
Indicates what to do in case of a conflict between given fileconfig and existing config. Error will throw an error if a new value is given for an existing catalog/file. Ignore ignores the difference and keeps the value in the existing config. Update will update the existing value with the new value of the given file config Valid values are:
|
QIX.Cmd setup-env
creates a region with the transactions, TD queues and files of the given CSD file
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
The file containing the environment of the mainframe, from which we will retrieve the transaction with their corresponding transactions and the TD queues This argument is mandatory. |
|
The name of the region to create and to which the transactions and TD queues will be added This argument is mandatory. |
|
The connection string to the business database used to create the region |
|
The runtime encoding used to create the region |
|
Service Broker Admin Connection string to create queues and services on the Service Broker Database. If omitted, the QixConnectionString will be used |
|
Service Broker User Connection string to send and receive messages on the Service Broker Database. If omitted, the ServiceBrokerConnectionString will be used |
|
The connection string to the SQLServer database used for storing the temporary storage queues |
|
DB Target for the applications Valid values are:
|
|
Filter on list so that only their resources are added |
|
Filter on groups so that only their resources are added |
QIX.Cmd Execute
Call a region external api to execute a program.
Miscellaneous
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
|
The name of the region you are connecting to This argument is mandatory. |
|
Name of the Program you are executing This argument is mandatory. |
|
Length of the CommArea. Only needs to be specified if the length of the commArea is different from the length of the data present in the file. |
|
Length of the result data. Only need to be provided if the server should return only a small portion of the commarea. |
|
Value EIBTRNID will return to the program. |
|
Path to the file containing the bytes to send |
|
Output file path. If not provided program will output to STDOUT |
QIX.Cmd Admin
Set of commands to administrate the Qix configuration and database
Options
| Command-line option | Description |
|---|---|
|
Displays the tool’s help information. |
SubCommands
DropAllObjects: Drop all service broker objects.
CreateObjects: Create all service broker objects.
ClearConversations: End all the conversations in conversations queues.
QIX.Cmd status-region
returns the status of a region: active when it has at least one active server; otherwise inactive
QIX.Cmd recycle-server
shuts down a server with exit code 2 to allow reloading after stopping when catching this exit code. Note, restarting the server should be done manually after catching exit code 2
QIX.Cmd generate-permission-files
generates two SQL files that specify the roles and permissions: (1) QixConfigPermissionsFile.sql contains the permissions for the QixConfig database user to interact with the stored procedures and functions related to the QIX instance; (2) QixTsQueuePermissionsFile.sql contains the permissions required for the QixTsQueue database user to interact with the TS queues. For more information, see the above section
2.3. BMS compiler
The BMS compiler (rcbms.exe) is a command-line tool that can be used compile the original BMS screen
definitions into a COBOL or PL/I symbolic map and an XML version of the map. These XML maps
need to be placed in the maps path and are used by the terminal server to create the TN3270 data stream.
| This is an area where QIX is very different from CICS on the mainframe, where BMS maps are compiled into a binary format. XML has been preferred, as it is more flexible and versatile. |
Miscellaneous
| Command-line option | Default value | Description |
|---|---|---|
|
|
Align the symbolic map fields with fillers to have the fields start on even offsets. |
|
|
Symbolic map file extension for COBOL |
|
Directory where the copybooks will be created. |
|
|
|
Symbolic map file extension for C# |
|
This command-line option is an additional .net 'app.config' file. |
|
|
The location where the map compiler will save the expanded version of the map. The expanded file will have the form 'filename.expanded.extension' |
|
|
|
Check the actual name of a field in the comment on the line before. |
|
|
When specifying a directory, only the files with the specified extension will be processed. Can be specified with or without dot. Specify an empty string for extensionless files, specify * for all files. |
|
|
Generate the symbolic mapset copybook in a single file, with the output structure based/redefining the input structure. |
|
Generate the symbolic mapset copybook. Two different files will be created: one for the input structure, and one for the output structure. |
|
|
Displays the tool’s help information. |
|
|
||
|
|
Specify the directories containing the BMS include files. Several directories can be specified separated by ';'. |
|
|
Provides a semicolon separated set of extensions to use when opening include files. '.' character must be explicitly specified. Example: -IncludeExtension=.foo,.bar. |
|
|
Displays a description of the program. |
|
|
The encoding of the BMSFile. |
|
Indicate the language for the symbolic map. Valid values are:
|
|
|
|
Specifies the log level. Valid values are:
|
|
Directory that will contain the physical XML maps. |
|
|
The encoding of the generated include/copybooks. |
|
|
|
Symbolic map file extension for PL/I |
|
|
The number of spaces by which a tab character will be replaced when found in the BMS file. |
|
|
Displays the version information. |
Repository
| Command-line option | Default value | Description |
|---|---|---|
|
The repository connection string. See also the DBDriver option. |
|
|
Sets the connection string to use for the repository persistence system as an ODBC connection string if ODBC persistence is used or as a physical file name if SQLITE is used instead. See also the DBConnectString option. Values can be any of the following: Valid values are:
|
|
|
|
Parse and scan the DBD, but do not produce any code (.sql or .cs). This is useful for checking DBD syntax for compatibility. |
2.4. Terminal Server Transport Layer Security
Introduction
Raincode QIX and IMSql both support Transport Layer Security (TLS/SSL) on their Terminal Servers, including mutual authentication through client certificate validation.
| For the sake of the readability of the documentation, this section is repeated identically in the QIX and IMSql manuals. |
Server authentication
To enable TLS on the Terminal Server, the -TlsServerCertificatePath option must be provided, giving a path to the server certificate chain in PEM format. The -TlsServerPrivateKeyPath option must also be provided, giving the path to the (unencrypted) server private key in PEM format.
| The server must be configured with the full certificate chain, i.e. its own certificate and all necessary intermediate CA certificates required to establish a trust chain to the root CA. Without this, server authentication will not succeed. |
| For security reasons, users should ensure that the unencrypted server private key is properly protected, e.g. by way of restrictive file access permissions. |
TerminalServer [other options] -TlsServerCertificatePath=/path/to/cert/server-chain.cert.pem -TlsServerPrivateKeyPath=/path/to/key/server.key.pem
Client authentication
The Terminal Server also supports client authentication (also known as mutual authentication). It can be configured to require clients to present a valid certificate, and it also allows the server to use a custom trust store to validate those certificates. By default, client certificates are not required.
| The client authentication only makes sense if server authentication is enabled. |
To enable client authentication, set the -TlsRequireClientAuthentication flag. By default, client certificates are validated using the system’s trust store (e.g. Trusted Root Certification Authorities on Windows, or the OpenSSL trust store on Linux). The trust store used for validation can be overridden by using the TlsCertificateAuthorityFilePath option, which should point to a PEM file containing all the CA certificates trusted by the Terminal Server for client authentication.
By default, the revocation status of client certificates is checked online by way of certificate revocation list (CRL) checks or the OCSP protocol. Client authentication will fail if the client certificate has been revoked by its certificate authority, or if the revocation status cannot be assessed (e.g. if the CRL cannot be accessed through the network). To disable revocation checks (i.e. trust any client certificate signed by a trusted CA, regardless of revocation status), the -TlsCheckClientCertificateRevocation=false flag can be passed to the Terminal Server.
| Revocation status checks are enabled by default. |
TerminalServer [other options] -TlsServerCertificatePath=/path/to/cert/server-chain.cert.pem -TlsServerPrivateKeyPath=/path/to/key/server.key.pem -TlsRequireClientAuthentication -TlsCheckClientCertificateRevocation=false -TlsCertificateAuthorityFilePath=/path/to/store/custom-ca-certificates.pem
2.5. Runners
Each Raincode QIX server component materialized by an executable supports its own set of command-line options.
2.5.1. Terminal Server command-line options
Miscellaneous
| Command-line option | Default value | Description |
|---|---|---|
|
The SQL Server connection string to the database where the region configuration will be fetched. |
|
|
|
Disables the automatic relodin of the configuration every heart beat |
|
This command-line option is an additional .net 'app.config' file. |
|
|
good morning message |
|
|
Displays the tool’s help information. |
|
|
|
Ignore connection from localhost (127.0.0.1) send by Azure monitoring |
|
||
|
|
Displays a description of the program. |
|
|
Specifies the log level. Valid values are:
|
|
Dump server logs in the specified directory. |
|
|
||
|
||
|
|
The mode in which the parallel mode is to be run Valid values are:
|
|
||
|
The name of the region to join. |
|
|
The name of the server as it will appear in the administration interface. |
|
|
The TCP/IP port on which the terminal server will listen for incoming TN3270 connections. Defaults to 23, or 992 if TLS is enabled. |
|
|
|
The size of the TCTUA in bytes. |
|
|
Displays the version information. |
Plugin
| Command-line option | Description |
|---|---|
|
The list of plugins to be loaded when the tool executes. |
|
This command-line option specifies the path to plugins that are searched. |
Transport Layer Security
| Command-line option | Default value | Description |
|---|---|---|
|
Path to the Certificate Authority file to be used for client certificate validation. If not specified, the default system trust store will be used. |
|
|
|
Check revocation status of client certificates. Defaults to true. |
|
Require client certificate validation (mutual authentication) to establish TLS sessions. Defaults to false. |
|
|
Path to the server certificate in PEM format to be used for TLS. Enables TLS. |
|
|
Path to the (unencrypted) server private key in PEM format to be used for TLS. Required if TLS is enabled. |
2.5.2. Processing Server command-line options
Miscellaneous
| Command-line option | Default value | Description |
|---|---|---|
|
The path to a batch Catalog configuration file, enabling usage of DSN in FileConfig |
|
|
The SQL Server connection string to the database where the region configuration will be fetched. |
|
|
|
Disables the automatic relodin of the configuration every heart beat |
|
This command-line option is an additional .net 'app.config' file. |
|
|
The path to a file configuration file |
|
|
Displays the tool’s help information. |
|
|
||
|
|
Displays a description of the program. |
|
|
Specifies the log level. Valid values are:
|
|
|
Includes what would be written to the console by the program to the QIX log file. This has no effect when SYSOUT is redirected to a file. |
|
Dump server logs in the specified directory. |
|
|
The maximum number of transactions the processing server can execute concurrently. |
|
|
The name of the region to join. |
|
|
Enables safe mode in memory allocator. Works in conjunction with the :VerifyMemory flag on the compilers. |
|
|
The name of the server as it will appear in the administration interface. |
|
|
Enable all QIX statements tracing. |
|
|
|
Displays the version information. |
3. Implementing a plugin
The Raincode runtime enables for certain selected functionalities to provide a custom implementation dynamically. Depending on the specifics of each functionality, the classes, methods, parameters and return values will vary, but they all follow a common mechanism. This section explains how to implement and register a Raincode QIX plugin, as well as the various plugin interfaces that QIX supports.
The QIX processing and terminal servers automatically load all plugins from their respective plugin directory.
Within the %RCDIR%\plugins directory, both the terminal and the processing server have their own subdirectories.
Additionally, both servers support the use of the Plugin and PluginPath command-line arguments,
so plugins can be placed anywhere on the file system.
3.1. Developing a plugin
To develop a plugin for QIX, a reference to a rcqixlib library, which is located in %RCDIR%/rcpackages needs to be added to the project.
This library contains the classes and interfaces required to interact with QIX at the C# level.
Plugins must abide to the existing type system to interact gracefully with QIX components.
Every plugin hook in Raincode QIX is exposed using a static instance of the generic
Raincode Plugin class (see the list of plugin hooks for QIX ).
The assembly of the plugin needs to declare itself as an assembly that will interact with the plugin hook, i.e. providing a plugin implementation.
To do this, an assembly attribute of the following form needs to be added:
[assembly:PluginProvider(typeof(NameSpace.To.Plugin.Plugin),"RegisterPlugin")]
where the first parameter (NameSpace.To.Plugin.Plugin) is the type of the class of the plugin that contains a RegisterPlugin method,
as stated in the second parameter.
QIX will call the RegisterPlugin method right after loading the assembly.
This method should register the entry point of the plugin with the QIX hook.
To register the plugin, the method calls the static Provide method of the plugin hook.
For example, in the case of creating a Qix Factory plugin this would be:
RaincodeLegacyQixInterface.QixInstances.QixFactory.ConstructorPlugin.Provide(priority, delegateMethod)
The Provide method takes two parameters:
-
Priority: determines the order in which plugins are executed
-
delegateMethod: .NET delegate type (i.e. a method signature). Each specific plugin hook will have its own kind of delegate, i.e. its own kind of method that accepts a list of parameters and return a value.
Calling the Provide method adds the method delegate to the plugin hook, with the chosen priority.
From this point on, whenever the runtime needs a plugin, e.g. for QixFactory, the hook will call each registered delegate (i.e. method implementation) in descending priority order until one returns an object. Depending on the type of plugin hook, the method will receive different types of arguments, and can use these to perform any plugin initialization, as needed.
To continue the QixFactory example, a possible delegate is the following builder method,
which simply instantiates a new factory with the given QIX context:
public static QixFactory builder(IQixContext context){
return new MyQixFactory(context);
}
Once a plugin has been initialized in this way, the methods on this object will be called according to the API for the plugin (as specified in the interface or abstract class definition of the plugin).
3.2. Minimal example: a Password Plugin
Raincode supports the use of a password plugin to allow the secure management of database credentials. The plugin is invoked just before executing the connection call to the database layer, ensuring that the actual password is retrieved at the latest possible moment of code execution. This approach securely injects connection details into the Processing and Terminal Servers at runtime, eliminating the need to hardcode credentials and ensuring that the full connection string, including the password, never appears in any log file.
This section provides a minimal example plugin that retrieves credentials from an environment variable,
e.g. QIX_PROD_CONNSTRING, and uses them as the connection string to the database.
This allows the actual connection string to be securely provided by the environment variable,
instead of being hardcoded in source code or a file.
To include the plugin at execution of the terminal server, e.g. for the BankDemo example, the command line is as follows:
"%RCBIN%\QIX.TerminalServerRunner.exe" -Region="BankDemo" -ConfigConnectionString="QIX_PROD_CONNSTRING" -PluginPath="C:\Plugins" -Plugin="ConnectionStringRewriter.dll"
The command line specifies that the configuration connection string is QIX_PROD_CONNSTRING
and that the plugin in C:\Plugins\ConnectionStringRewriter.dll, detailed below, needs to be used.
Looking at the source code below, we see:
-
The assembly attribute identifying the plugin class and registration method (
Register). -
The
Registermethod that registers the plugin with thePasswordRewriterhook, giving a priority of 10 and theMapConnectionStringmethod as the entry point for the plugin. -
The
MapConnectionString(string connectionString)method that will receive the value of theConfigConnectionStringargument and look up the environment variable with that name.
If environment variable lookup fails, the system will return null, which the plugin hook will interpret as a refusal of the plugin to cooperate. The hook will then attempt to execute lower-priority plugins,
and if none exist or cooperate, the value of the ConfigConnectionString argument will be used as the connection string to the database.
|
using RainCode.Core.Plugin;
using RainCodeLegacyRuntimeUtils;
[assembly: PluginProvider(typeof(ConnectionStringRewriter.RewriteConnectionString), nameof(ConnectionStringRewriter.RewriteConnectionString.Register))]
namespace ConnectionStringRewriter
{
public class RewriteConnectionString
{
public static void Register()
{
PasswordMapping.PasswordRewriter.Provide(10, MapConnectionString);
}
private static string MapConnectionString(string connectionString)
{
/* Get the actual connection string from the environment variable */
return Environment.GetEnvironmentVariable(connectionString);
}
}
}
3.3. Sample: Terminal Server Session
As the name implies, this plugin is designed for the Terminal Server. It establishes a terminal session either with QIX or a remote mainframe through an API.
The plugin can be found in the TSPlugin subdirectory within the plugins directory.
It contains one class called SessionPlugin and the plugin hook method with the type Plugin<IPluginSessionApi, string, bool> .
This means that the delegate method that creates the plugin is provided with an IPluginSessionApi
and string arguments, and should return a bool to acknowledge whether initialization was successful.
The first argument is an object that implements the IPluginSessionApi interface.
It provides methods for initiating and terminating terminal sessions,
as well as sending and receiving messages within a session.
The second argument, the configuration string is currently unused but reserved for future use, such as receiving a command-line argument of the terminal server.
The plugin connects to a remote terminal and performs a number of operations. (For further details, refer to the source code in the TSPlugin directory).
3.3.1. The IPluginSessionApi interface
This section provides a bit more detail on the IPluginSessionApi interface.
public interface IPluginSessionApi
{
Guid ConnectLocal(ITerminalInfo terminalInfo, Encoding terminal, Encoding local);
Guid ConnectRemote(TcpClient client);
void Disconnect(Guid guid);
byte[] Receive(Guid guid);
void Send(Guid guid, byte[] dataBuffer);
}
The ConnectLocal function has the transaction’s executions performed by the local QIX processing server.
It takes the following input parameters:
-
The IBM 3270 model. (The
ITerminalInfointerface provides methods for retrieving theIBM3270terminal model.) -
The terminal encoding.[1]
-
The encoding used by the application programs
In contrast, the ConnectRemote function connects to a remote QIX server
and takes a TcpClient instance to connect remotely to:
-
The target hostname
-
The target port number
Both connect functions return the Guid.[2] of the created session, which is the first parameter of the send, receive, and disconnect functions.
The Send function takes the following input parameters:
-
A session Guid
-
An array of bytes containing the input 3270 stream
The Receive function takes the following input parameter:
-
A session Guid
The Receive function returns an array of bytes.
If no new data is currently available from the target, it returns null;
if data is available, it returns the output 3270 stream.
This function is non-blocking. If no new data is available, it immediately returns null without waiting.
It is the responsibility of the calling thread to invoke it again after an adequate sleeping time.
The Disconnect function takes the following input parameter:
-
The Guid of the session that need to be closed
3.4. Sample: Active Directory Plugin
This plugin is also for the Terminal Server and
allows authentication in QIX via the SIGNON and SIGNOFF commands.
An example Active Directory plugin is included and can be found inside the QIX directory in the plugins directory.
This implementation for QIX provides almost full support for the SIGNON and SIGNOFF commands,
with one exception that the user groups are not supported.
The plugin has to be configured, e.g., to configure the creation of the Active Directory PrincipalContext object
that acts as a gateway to the directory service.
This configuration string is contained in the SecurityManagerConfig parameter of the QIX region.
For more details on how to set it, refer to the section Configuring Raincode QIX.
The available input parameters are given below. For more details, see the respective Microsoft Active Directory documentation:
-
ContextParameters: These parameters will be used to create a
System.DirectoryServices.AccountManagement.PrincipalContextobject. The names of these parameters map naturally to the parameters of thePrincipalContextconstructor.-
ContextType -
ContextName -
ContextContainer -
ContextOptions -
ContextUser -
ContextPasswordThe ContextTypeparameter is mandatory, and depending on its value, other parameters may be required as well.
-
-
Identity parameters are used to find a
System.DirectoryServices.AccountManagement.UserPrincipalobject associated with the userId specified in the QIX SIGNON command.-
IdentityType: specifies the format of the identity. The default isName. -
IdentityFormat: .NET composite format string mapping a userId to the name used by the directory service. The default is{0}.For example, if QIX user
ABCDEhas the Security Account Manager nameU_ABCDE, then theidentityType=SamAccountNameandidentityFormat=U_{0}.
-
-
User parameters are used in the
PrincipalContext.ValidateCredentialsmethod call. These parameters will have different default values, depending on theContextType. IfContextType=Machine, the default values forUserOptionsandUserLoginareNegotiateandName. In any other case, it will beSimpleBindandDistinguishedName.-
UserOptions: The type is
System.DirectoryServices.AccountManagement.ContextOptions -
UserLogin: The type is
System.DirectoryServices.AccountManagement.IdentityType
-
To pass the specified parameters for the QIX region where the signon or signoff occurs,
they should be separated by the ';' symbol, concatenated, and contained in the SecurityManagerConfig parameter.
Below are some example configuration strings:
-
ContextType=Machine: this is the minimal example. -
ContextType=Machine;UserOptions=Negotiate|Sealing: In the case of multiple values for ContextOptions parameter type likeContextOptionsorUserOptionsthe values should be separated by '|'. -
ContextType=ApplicationDirectory;ContextName=127.0.0.1:389;ContextContainer=CN=Partition1,DC=raincode,DC=com;ContextOptions=SimpleBind;ContextUser=Me;ContextPassword=myPassword;IdentityType=Name;IdentityFormat={0};UserOptions=SimpleBind;UserLogin=DistinguishedName;: this is a complete example, where all the parameters are specified.
Plugin API
The ISecurityManager interface specifies the methods called when authentication is performed
either through SIGNON or SIGNOFF commands.
An authentication plugin should implement this interface.
public interface ISecurityManager
{
IUser Default { get;}
IUser SignOn (IUser currentUser,
IUser nextUser,
ISignOnStatement statement);
IUser SignOff(IUser currentUser,
IUser nextUser,
ISignOffStatement statement);
}
The currentUser is the user who executes a CESN or CESF transaction for SIGNON and SIGNOFF,
respectively, and the nextUser will be the user after completion of this command.
The description of helper interfaces is provided below.
Note that for IUser, the result of a CICS ASSIGN USERID
will be the value that is contained in Name.
public interface IUser
{
bool IsDefault { get;}
string Name { get;}
}
public interface ISignOnStatement
{
string USERID { get; set; }
string PASSWORD { get; set; }
string NEWPASSWORD { get; set; }
byte[] OIDCARD { get; set; }
int ESMReason { get; set; }
int ESMRESP { get; set; }
string LANGINUSE { get; set; }
string NATLANGINUSE { get; set; }
EResp RESP { get; set; }
int RESP2 { get; set; }
}
public interface ISignOffStatement
{
EResp RESP { get; set; }
int RESP2 { get; set; }
}
3.5. Sample: Setting up a login transaction in QIX
3.5.1. The DFHSNP transaction
A login transaction that can be used to authenticate users before they access other transcations in a region is readily available in Raincode QIX. The login transaction can be added to your QIX project while configuring the regions using Qix.Cmd. To do so, add the following line when setting up the region for which authentication is required.
& "$env:RCBIN/QIX.Cmd" -CS="$QIXCONN" add-transaction -RegionName=REGION_NAME -Name=SIGN -Program=DFHSNP -LoginTransaction
The transaction name is specified using the -Name flag, and can be any four-letter word.
The -Program flag links this transaction name with the program that is executed when the transaction is invoked.
The login program available in the QIX codebase is called DFHSNP.
The last flag -LoginTransaction might be omitted.
If provided, it indicates that this transaction will be the first to be executed,
even if the -Initial flag has been provided for another transaction.
In that case, it means that the login transaction is executed first,
and the -Initial transaction is executed right afterwards
(For more details, see the Qix.Cmd command-line options section).
When the DFHSNP transaction executes,
the initial login screen appears on the 3270 terminal.
The user enters their login ID, group and password to connect.
If the login is successful, a new screen appears showing the user’s name and the current group.
Pressing ENTER will launch the user to the next transaction
(if an -Initial transaction was provided when configuring the region),
or prompt the user to manually enter the name of the next transaction to execute.
3.5.2. Authentication method
The default security manager provided in QIX registers the credentials into the current session, but does not perform any credential check.
The Active Directory (AD) authentication Plugin provides a more advanced authentication method that relies on an Active Directory server.
Enabling the Active Directory QIX plugin
The following steps must be followed to use the Active Directory plugin to authenticate users in a QIX application.
-
Construct the configuration string to communicate with your Active Directory server: The content of this configuration string is described in the Sample: Active Directory Plugin section, along with detailed examples. This string depends on the type and configuration of the Active Directory server used in your organization. Another example configuration string with all parameters may be structured as follows:
ContextType=Domain;ContextName=corp.raincode.com;ContextContainer=OU=All Users,DC=corp,DC=raincode,DC=com;ContextOptions=Negotiate; ContextUser=myADuser;ContextPassWord=myADPassword;IdentityType=UserPrincipalName;IdentityFormat={0};UserLogin=UserPrincipalName
The chosen parameters will impact the format of the username required during authentication.
In the case IdentityType=UserPrincipalName;UserLogin=UserPrincipalName,
a full User Principal Name (UPN) is required, for example john@corp.raincode.com.
-
Bind the configuration string to a QIX region: When creating QIX regions with Qix.Cmd, the configuration string generated in the previous step, must be provided. In the example below, the configuration string is stored in the
ADCONFIG_STRINGvariable. When the BANKDEMO region is created, the configuration string is added to theSecurityManagerConfigparameter of the region using the-Secmgrcfgflag in theedit-regioncommand.
$ADCONFIG_STRING="ContextType=Domain;ContextName=corp.raincode.com;ContextContainer=OU=All Users,DC=corp,DC=raincode,DC=com;ContextOptions=Negotiate;ContextUser=myADuser;ContextPassWord=myADPassword;IdentityType=UserPrincipalName;IdentityFormat={0};UserLogin=UserPrincipalName"
& "$env:RCBIN/QIX.Cmd" -CS="$QIXCONN" add-region -RegionName=BANKDEMO -ApplicationConnectionString="$APPCONN"
& "$env:RCBIN/QIX.Cmd" -CS="$QIXCONN" edit-region -RegionName=BANKDEMO -Secmgrcfg="$ADCONFIG_STRING"
-
Include the plugin in the execution of the Terminal Server: There are two ways to inform the Terminal server that the Active Directory plugin should be used.
It follows the same rules as the other QIX plugins (see the section Implementing a plugin).
-
Either place the
ADPlugin.dllwithin the %RCDIR%\plugins directory, in theQIX Terminal Serversubdirectory. The Terminal server will automatically load the plugin when launched. In this case, the Terminal server can be executed with no extra flags. For instance,Start-Process -FilePath "$Env:RCBIN\QIX.TerminalServerRunner.exe" -ArgumentList "-LogLevel=TRACE -Region=BANKDEMO -TcpPort=23 -TCTUASIZE=512 -ConfigConnectionString="$QIXCONN"" -
Or keep your plugin placed anywhere on the file system. In this case, the location and name of the plugin should be added as extra command-line arguments when running the Terminal server.
Therefore, the above example would have two additional arguments, as follows: Start-Process -FilePath "$Env:RCBIN\QIX.TerminalServerRunner.exe" -ArgumentList "-LogLevel=TRACE -Region=BANKDEMO -TcpPort=23 -TCTUASIZE=512 -PluginPath=<Current path of the plugin> -Plugin=ADPlugin.dll -ConfigConnectionString="$QIXCONN""
4. Raincode QIX Plugins
This section contains a list of the different kinds of plugins supported by QIX
4.1. ProcessingServer.LoadConfigPlugin
Class |
|
Field name |
|
Strategy |
Execute all |
Plugin API:
(RainCodeLegacyRuntime.QIX.Interface.IQixConfig arg0)
Description:
Allows to execute a custom action based on the newly loaded qix configuration. Called every time the config is loaded by the server.
4.2. ProcessingServer.ProcessingServerSetupPlugin
Class |
|
Field name |
|
Strategy |
Execute all |
Plugin API:
(RainCode.QIX.ProcessingServer.ProcessingServer arg0)
Description:
Allows additional steps to be taken at the setup stage of the Processing server based on the Config and arguments, e.g. starting new listeners
4.3. QixTerminalServer.TerminalServerSetupPlugin
Class |
|
Field name |
|
Strategy |
Execute all |
Plugin API:
(RainCode.QIX.TerminalServer.QixTerminalServer arg0)
Description:
Allows additional steps to be taken at the setup stage of the Terminal server based on the config and arguments, e.g. starting new listeners
4.4. TerminalServer.SecurityManagerPlugin
Class |
|
Field name |
|
Strategy |
Best non null |
Plugin API:
RainCode.QIX.Common.Security.ISecurityManager(string arg0)
Description:
Let you provide your implementation of ISecurityManager based on the SecurityManagerConfig
For more details refer to the authentication Plugin documentation.
4.5. QIX.TN3270Terminal
Class |
|
Field name |
|
Strategy |
Best |
Plugin API:
bool(RainCode.QIX.TerminalServer.Sessions.Plugin.IPluginSessionApi arg0 ,string arg1)
Description:
This plugin can be plugged into the terminal server and establish a terminal session to QIX or to a remote mainframe through an API
For more details refer to the terminal Server Session API documentation.
4.6. QIXForwardSession
Class |
|
Field name |
|
Strategy |
Best non null |
Plugin API:
RainCode.QIX.TerminalServer.Sessions.Plugin.IPluginSessionForward(RainCode.QIX.TerminalServer.Sessions.ForwardTN3270ClientSession session)
-
session- The forwarded session
Description:
Forward TN3270 session to another server. This can be used to forward some messages to another CICS server (on a mainframe) or to an IMS server. The default implementation forward the message to another CICS server. There is also a example (QixIMSqlForwardSession) to forward the message to a IMSql server
4.7. Cics synchronization Plugin
Class |
|
Field name |
|
Strategy |
Best non null |
Plugin API:
RainCode.QIX.TerminalServer.Parallel.Interfaces.IQixParallelSynchronization(RainCode.QIX.Common.TransactionServer.IQix3270TransactionServer arg0 ,RainCode.Tn3270.ITerminalInfo arg1 ,string arg2)
Description:
Provides the logic to assess if both of the parallel sessions are in sync with each other based on the screen output.
4.8. DataStream comparer
Class |
|
Field name |
|
Strategy |
Best |
Plugin API:
RainCode.QIX.TerminalServer.Parallel.IOutputComparer(RainCode.QIX.Common.Sessions.IQix3270Session arg0 ,System.Text.Encoding arg1)
Description:
Provides an action to be taken in the context of parallel sessions to compare the 2 outputs and return the list of differences.
5. CICS supported commands
This section covers all the supported CICS API calls in QIX.
The following information is given:
-
Function name
-
Option and arguments (supported syntax)
-
Degree of runtime support
Considering the degree of runtime support, there are four distinct possibilities, as follows:
-
None: There is no runtime support for this statement. The client or the integrator code provides it.
-
Library: The runtime support for this statement is identical with or without using QIX.
-
Qix Emulator: There is runtime support for this statement only when using the QIX.
-
Library and Qix emulator: The statement is also supported without QIX, and QIX extends the level of support to include more arguments/combinations.
| For all statements, the support may be incomplete. Some options or combinations of options may not be implemented. Please test and/or contact Raincode for details about your use case. |
5.2. ACQUIRE PROCESS
Supported syntax:
ACQUIRE [ ACTIVITYID(data-value) | ( PROCESS(data-value) PROCESSTYPE(data-value) ) ]
Runtime support : none
5.3. ADDRESS
Supported syntax:
ADDRESS ACEE(ptr-ref)? COMMAREA(ptr-ref)? CWA(ptr-ref)? EIB(ptr-ref)? TCTUA(ptr-ref)? TWA(ptr-ref)?
Runtime support : library and Qix emulator
5.4. ALLOCATE (APPC)
Supported syntax:
ALLOCATE [ ( SYSID(systemname) PROFILE(name)? ) | PARTNER(name) ] NOQUEUE? STATE(cvda)?
Runtime support : none
5.6. ASSIGN
Supported syntax:
ASSIGN ABCODE(data-area)? ABDUMP(data-area)? ABPROGRAM(data-area)? ACTIVITY(data-area)? ACTIVITYID(data-area)? ALTSCRNHT(data-area)? ALTSCRNWD(data-area)? APLKYBD(data-area)? APLTEXT(data-area)? APPLID(data-area)? ASRAINTRPT(data-area)? ASRAKEY(cvda)? ASRAPSW(data-area)? ASRAREGS(data-area)? ASRASPC(cvda)? ASRASTG(cvda)? BRIDGE(data-area)? BTRANS(data-area)? CHANNEL(data-area)? CMDSEC(data-area)? COLOR(data-area)? CWALENG(data-area)? DEFSCRNHT(data-area)? DEFSCRNWD(data-area)? DELIMITER(data-area)? DESTCOUNT(data-area)? DESTID(data-area)? DESTIDLENG(data-area)? DS3270(data-area)? DSSCS(data-area)? EWASUPP(data-area)? EXTDS(data-area)? FACILITY(data-area)? FCI(data-area)? GCHARS(data-area)? GCODES(data-area)? GMMI(data-area)? HILIGHT(data-area)? INITPARM(data-area)? INITPARMLEN(data-area)? INPARTN(data-area)? INVOKINGPROG(data-area)? KATAKANA(data-area)? LANGINUSE(data-area)? LDCNUM(data-area)? LDCMNEM(data-area)? MAPCOLUMN(data-area)? MAPHEIGHT(data-area)? MAPLINE(data-area)? MAPWIDTH(data-area)? MSRCONTROL(data-area)? NATLANGINUSE(data-area)? NETNAME(data-area)? NEXTTRANSID(data-area)? NUMTAB(data-area)? OPCLASS(data-area)? OPERKEYS(data-area)? OPID(data-area)? OPSECURITY(data-area)? ORGABCODE(data-area)? OUTLINE(data-area)? PAGENUM(data-area)? PARTNPAGE(data-area)? PARTNS(data-area)? PARTNSET(data-area)? PRINSYSID(data-area)? PROCESS(data-area)? PROCESSTYPE(data-area)? PROGRAM(data-area)? PS(data-area)? QNAME(data-area)? RESSEC(data-area)? RESTART(data-area)? RETURNPROG(data-area)? SCRNHT(data-area)? SCRNWD(data-area)? SIGDATA(data-area)? SOSI(data-area)? STARTCODE(data-area)? STATIONID(data-area)? SYSID(data-area)? TASKPRIORITY(data-area)? TCTUALENG(data-area)? TELLERID(data-area)? TERMCODE(data-area)? TERMPRIORITY(data-area)? TEXTKYBD(data-area)? TEXTPRINT(data-area)? TRANPRIORITY(data-area)? TWALENG(data-area)? UNATTEND(data-area)? USERID(data-area)? USERNAME(data-area)? USERPRIORITY(data-area)? VALIDATION(data-area)? ASSIGN?
Runtime support : library and Qix emulator
5.7. BIF DEEDIT
Supported syntax:
BIF DEEDIT FIELD(data-area) LENGTH(data-value)?
Runtime support : library
5.8. BIF DIGEST
Supported syntax:
BIF DIGEST RECORD(data-value) RECORDLEN(data-value) [ HEX | BINARY | BASE64 | DIGESTTYPE(cvda) ]? RESULT(data-area)
Runtime support : none
5.9. BUILD ATTACH
Supported syntax:
BUILD ATTACH ATTACHID(name) RPROCESS(name)? RRESOURCE(name)? DATASTR(data-value)? RECFM(data-value)?
Runtime support : none
5.10. CANCEL
Supported syntax:
CANCEL REQID(name) SYSID(systemname)? TRANSID(name)??
Runtime support : none
5.11. CANCEL (BTS)
Supported syntax:
CANCEL [ ACTIVITY(data-value) | ACQACTIVITY | ACQPROCESS ]
Runtime support : none
5.12. CHANGE PASSWORD
Supported syntax:
CHANGE PASSWORD(data-value) NEWPASSWORD(data-value) USERID(data-value) ESMREASON(data-area)? ESMRESP(data-area)?
Runtime support : none
5.13. CHECK ACQPROCESS
Supported syntax:
CHECK ACQPROCESS COMPSTATUS(cvda) ABCODE(data-area)? ABPROGRAM(data-area)? MODE(cvda)? SUSPSTATUS(cvda)?
Runtime support : none
5.14. CHECK ACTIVITY
Supported syntax:
CHECK [ ACTIVITY(data-value) | ACQACTIVITY ]? COMPSTATUS(cvda) ABCODE(data-area)? ABPROGRAM(data-area)? MODE(cvda)? SUSPSTATUS(cvda)?
Runtime support : none
5.15. COLLECT STATISTICS
Supported syntax:
COLLECT STATISTICS SET(ptr-ref) [ TERMINAL(data-value) | MONITOR(data-value) | DB2CONN | RECOVERY | STORAGE | TCPIP ]?
Runtime support : none
5.16. CONNECT PROCESS (APPC)
Supported syntax:
CONNECT PROCESS [ CONVID(name) | SESSION(name) ] [ ( PROCNAME(data-value) PROCLENGTH(data-value)? ) | PARTNER(name) ]? ( PIPLIST(data-area) PIPLENGTH(data-value)? )? SYNCLEVEL(data-value) STATE(cvda)?
Runtime support : none
5.17. CONVERSE
Supported syntax:
CONVERSE [ CONVID(name) | SESSION(name) ]? FROM(data-area) [ FROMLENGTH(data-value) | FROMFLENGTH(data-value) ]? [ INTO(data-area) | SET(ptr-ref) ] [ STRFIELD | ( ( ERASE [ DEFAULT | ALTERNATE ]? )? CTLCHAR(data-value)? ) ]? [ TOLENGTH(data-area) | TOFLENGTH(data-area) ]? [ MAXLENGTH(data-value) | MAXFLENGTH(data-value) ]? DEFRESP? FMH? NOTRUNCATE? ASIS? STATE(cvda)?
Runtime support : none
5.18. DEFINE ACTIVITY
Supported syntax:
DEFINE ACTIVITY(data-value) EVENT(data-value)? TRANSID(data-value) PROGRAM(data-value)? USERID(data-value)? ACTIVITYID(data-area)?
Runtime support : none
5.19. DEFINE COUNTER
Supported syntax:
DEFINE COUNTER(name) POOL(name)? ( VALUE(data-value) MINIMUM(data-value)? )? MAXIMUM(data-value)?
Runtime support : library
5.21. DEFINE PROCESS
Supported syntax:
DEFINE PROCESS(data-value) PROCESSTYPE(data-value) TRANSID(data-value) PROGRAM(data-value)? USERID(data-value)? NOCHECK?
Runtime support : none
5.22. DEFINE TIMER
Supported syntax:
DEFINE
TIMER(data-value) EVENT(data-value)? AFTER(data-value)
( DAYS(data-value)? HOURS(data-value)? MINUTES(data-value)?
SECONDS(data-value)?
)
DEFINE
TIMER(data-value) EVENT(data-value)? AT
( HOURS(data-value)? MINUTES(data-value)? SECONDS(data-value)? )
( ON YEAR(data-value)
[ ( MONTH(data-value) DAYOFMONTH(data-value) ) | DAYOFYEAR(data-value) ]
)?
Runtime support : none
5.23. DELAY
Supported syntax:
DELAY
[ INTERVAL(hhmmss) | TIME(hhmmss)
| ( FOR HOURS(data-value)? MINUTES(data-value)? SECONDS(data-value)?
MILLISECS(data-value)?
)
| ( UNTIL HOURS(data-value)? MINUTES(data-value)? SECONDS(data-value)? )
]?
REQID(name)?
Runtime support : library and Qix emulator
5.24. DELETE
Supported syntax:
DELETE
[ FILE(filename) | DATASET(filename) ]
[ TOKEN(data-area)
| ( RIDFLD(data-area)
( KEYLENGTH(data-value) ( GENERIC NUMREC(data-area)? )? )?
)
]?
SYSID(systemname)? NOSUSPEND? [ RRN | RBA ]?
Runtime support : none
5.26. DELETE CONTAINER
Supported syntax:
DELETE CONTAINER(data-value) CHANNEL(data-value)?
Runtime support : none
5.29. DELETEQ TD
Supported syntax:
DELETEQ TD QUEUE(name) SYSID(systemname)?
Runtime support : library
5.30. DELETEQ TS
Supported syntax:
DELETEQ TS? [ QUEUE(name) | QNAME(name) ] SYSID(systemname)?
Runtime support : library
5.31. DEQ
Supported syntax:
DEQ RESOURCE(data-area) [ UOW | LUW | MAXLIFETIME(cvda) | TASK ]?
DEQ RESOURCE(data-area) LENGTH(data-value) [ UOW | LUW | MAXLIFETIME(cvda) | TASK ]?
Runtime support : Qix emulator
5.32. DOCUMENT CREATE
Supported syntax:
DOCUMENT
CREATE DOCTOKEN(data-area)
[ ( [ FROM(data-area) | TEXT(data-area) | BINARY(data-area) ]
LENGTH(data-area)
)
| FROMDOC(data-area) | TEMPLATE(name)
]?
( SYMBOLLIST(data-area) LISTLENGTH(data-value) DELIMITER(data-value)?
UNESCAPED?
)?
DOCSIZE(data-area)? HOSTCODEPAGE(name)?
Runtime support : none
5.33. DUMP TRANSACTION
Supported syntax:
DUMP TRANSACTION DUMPCODE(name) ( FROM(data-area) [ LENGTH(data-value) | FLENGTH(data-value) ] )? COMPLETE? TRT? ( SEGMENTLIST(data-area) ( LENGTHLIST(data-area)? NUMSEGMENTS(data-area)? ) )? TASK? STORAGE? PROGRAM? TERMINAL? TABLES? FCT? PCT? PPT? SIT? TCT? DUMPID(data-area)?
DUMP DUMPCODE(name) ( FROM(data-area) [ LENGTH(data-value) | FLENGTH(data-value) ] )? COMPLETE? TRT? TASK? STORAGE? PROGRAM? TERMINAL? TABLES? FCT? PCT? PPT? SIT? TCT? DUMPID(data-area)?
Runtime support : Qix emulator
5.34. ENABLE
Supported syntax:
ENABLE PROGRAM(data-value) EXIT(data-value)? START? GALENGTH(data-value)?
Runtime support : none
5.35. ENDBR
Supported syntax:
ENDBR [ FILE(filename) | DATASET(filename) ] REQID(data-value)? SYSID(systemname)?
Runtime support : library
5.36. ENDBROWSE ACTIVITY
Supported syntax:
ENDBROWSE ACTIVITY BROWSETOKEN(data-value)
Runtime support : none
5.37. ENDBROWSE CONTAINER
Supported syntax:
ENDBROWSE CONTAINER BROWSETOKEN(data-value)
Runtime support : none
5.38. ENQ
Supported syntax:
ENQ RESOURCE(data-area) [ UOW | LUW | MAXLIFETIME(cvda) | TASK ]? NOSUSPEND?
ENQ RESOURCE(data-area) LENGTH(data-value) [ UOW | LUW | MAXLIFETIME(cvda) | TASK ]? NOSUSPEND?
Runtime support : Qix emulator
5.39. ENTER TRACENUM
Supported syntax:
ENTER [ TRACENUM(data-value) | TRACEID(data-value) ] ( FROM(data-area) LENGTH(data-value)? FROMLENGTH(data-area)? )? RESOURCE(name)? EXCEPTION?
Runtime support : none
5.40. EXTRACT ATTACH
Supported syntax:
EXTRACT ATTACH SESSION(name)? RECFM(data-area)?
Runtime support : none
5.41. EXTRACT EXIT
Supported syntax:
EXTRACT EXIT PROGRAM(data-value) ENTRYNAME(data-value)? GALENGTH(data-area) GASET(ptr-ref)
Runtime support : none
5.42. EXTRACT LOGONMSG
Supported syntax:
EXTRACT LOGONMSG INTO(data-area) LENGTH(data-area)
Runtime support : none
5.43. EXTRACT PROCESS (APPC)
Supported syntax:
EXTRACT PROCESS MAXPROCLEN(data-value)? CONVID(name)? PROCNAME(data-area)? PROCLENGTH(data-value)? SYNCLEVEL(data-area)? PIPLIST(ptr-ref)? PIPLENGTH(data-area)?
Runtime support : none
5.44. EXTRACT STATISTICS
Supported syntax:
EXTRACT STATISTICS RESTYPE(cvda) SET(ptr-ref)
Runtime support : none
5.45. FETCH ANY
Supported syntax:
FETCH ANY(data-area) CHANNEL(data-area)? COMPSTATUS(cvda)? ABCODE(data-area)? NOSUSPEND? TIMEOUT(data-value)?
Runtime support : none
5.46. FETCH CHILD
Supported syntax:
FETCH CHILD(data-value) CHANNEL(data-area)? COMPSTATUS(cvda)? ABCODE(data-area)? NOSUSPEND? TIMEOUT(data-value)?
Runtime support : none
5.47. FORMATTIME
Supported syntax:
FORMATTIME ABSTIME(data-area) DATE(data-area)? FULLDATE(data-area)? DATEFORM(data-area)? DATESEP(data-value)? DAYCOUNT(data-area)? DAYOFMONTH(data-area)? DAYOFWEEK(data-area)? DDMMYY(data-area)? DDMMYYYY(data-area)? MILLISECONDS(data-area)? MMDDYY(data-area)? MMDDYYYY(data-area)? MONTHOFYEAR(data-area)? MONTH(data-area)? TIME(data-area)? TIMESEP(data-value)? YEAR(data-area)? YYDDD(data-area)? YYDDMM(data-area)? YYMMDD(data-area)? YYYYDDD(data-area)? YYYYDDMM(data-area)? YYYYMMDD(data-area)? DATESTRING(data-area)? STRINGFORMAT(cvda)? ( DATASTRING(data-area) STRINGZONE(cvda)? )?
Runtime support : library
5.48. FREE
Supported syntax:
FREE [ CONVID(name) | SESSION(name) ]? STATE(cvda)?
Runtime support : none
5.49. FREEMAIN
Supported syntax:
FREEMAIN [ DATA(data-area) | DATAPOINTER(ptr-value) ]
Runtime support : library
5.50. GET COUNTER
Supported syntax:
GET COUNTER(name) POOL(name)? VALUE(data-area) ( INCREMENT(data-value) REDUCE? )? WRAP? COMPAREMIN(data-value)? COMPAREMAX(data-value)?
Runtime support : library
5.51. GET CONTAINER
Supported syntax:
GET
CONTAINER(data-value)
[ ( INTO(data-area)
( [ FLENGTH(data-area) | LENGTH(data-area) ] BYTEOFFSET(data-area)? )?
)
| ( SET(ptr-ref) [ FLENGTH(data-area) | LENGTH(data-area) ]
BYTEOFFSET(data-area)?
)
| ( NODATA [ FLENGTH(data-area) | LENGTH(data-area) ] )
]
[ [ CHANNEL(data-value)?
| [ INTOCCSID(data-value) | INTOCODEPAGE(data-value)
| ( CONVERTST(cvda) CCSID(data-area)? )
]?
]
| [ ACTIVITY(data-value) | ACQACTIVITY | PROCESS | ACQPROCESS ]?
]?
Runtime support : library
5.52. GETMAIN
Supported syntax:
GETMAIN SET(ptr-ref) [ ( FLENGTH(data-value) BELOW? ) | LENGTH(data-value) ] INITIMG(data-value)? SHARED? NOSUSPEND? [ USERDATAKEY | CICSDATAKEY ]?
Runtime support : library
5.53. GETNEXT ACTIVITY
Supported syntax:
GETNEXT ACTIVITY(data-area) BROWSETOKEN(data-value) ACTIVITYID(data-area)? LEVEL(data-area)?
Runtime support : none
5.54. GETNEXT CONTAINER
Supported syntax:
GETNEXT CONTAINER(data-area) BROWSETOKEN(data-value)
Runtime support : none
5.55. HANDLE ABEND
Supported syntax:
HANDLE ABEND [ CANCEL | PROGRAM(name) | LABEL(label) | RESET ]?
Runtime support : library
5.59. INQUIRE ACTIVITYID
Supported syntax:
INQUIRE ACTIVITYID(data-value) ABCODE(data-area)? ABPROGRAM(data-area)? ACTIVITY(data-area)? COMPSTATUS(cvda)? EVENT(data-area)? MODE(cvda)? PROCESS(data-area)? PROCESSTYPE(data-area)? PROGRAM(data-area)? SUSPSTATUS(cvda)? TRANSID(data-area)? USERID(data-area)?
Runtime support : none
5.60. INQUIRE ASSOCIATION
Supported syntax:
INQUIRE
ASSOCIATION(data-value)
( APPLID(data-area)? FACILTYPE(cvda)? ODAPPLID(data-area)?
ODUSERID(data-area)? ODFACILNAME(data-area)? ODNETWORKID(data-area)?
ODFACILTYPE(cvda)?
)
Runtime support : none
5.61. INQUIRE CONNECTION
Supported syntax:
INQUIRE CONNECTION(name) ACCESSMETHOD(data-value)? ACQSTATUS(data-value)? AIDCOUNT(data-value)? AUTOCONNECT(data-value)? CHANGEAGENT(data-value)? CHANGEAGREL(data-value)? CHANGETIME(data-value)? CHANGEUSRID(data-value)? CONNSTATUS(data-value)? CONNTYPE(data-value)? CQP(data-value)? DEFINESOURCE(data-value)? DEFINETIME(data-value)? EXITTRACING(data-value)? GRNAME(data-value)? INSTALLAGENT(data-value)? INSTALLTIME(data-value)? INSTALLUSRID(data-value)? LINKSYSTEM(data-value)? MEMBERNAME(data-value)? NETNAME(data-value)? NQNAME(data-value)? PENDSTATUS(data-value)? PROTOCOL(data-value)? RECEIVECOUNT(data-value)? RECOVSTATUS(data-value)? REMOTENAME(data-value)? REMOTESYSNET(data-value)? REMOTESYSTEM(data-value)? SENDCOUNT(data-value)? SERVSTATUS(data-value)? XLNSTATUS(data-value)? ZCPTRACING(data-value)?
Runtime support : none
5.62. INQUIRE DB2ENTRY
Supported syntax:
INQUIRE DB2ENTRY(data-value) PLAN(data-area)?
Runtime support : none
5.64. INQUIRE EXITPROGRAM
Supported syntax:
INQUIRE EXITPROGRAM(data-value) EXIT(data-value)? ENTRYNAME(data-area)? APIST(cvda)? CONCURRENTST(cvda)? CONNECTST(cvda)? ENTRY(ptr-ref)? FORMATEDFST(cvda)? GAENTRYNAME(data-area)? GALENGTH(data-area)? GAUSECOUNT(data-area)? INDOUBTST(cvda)? NUMEXITS(data-area)? PURGEABLEST(cvda)? QUALIFIER(data-area)? SHUTDOWNST(cvda)? SPIST(cvda)? STARTSTATUS(cvda)? TALENGTH(data-area)? TASKSTARTST(cvda)? USECOUNT(data-area)?
Runtime support : none
5.65. INQUIRE FILE
Supported syntax:
INQUIRE [ FILE(filename) | DATASET(filename) ] ACCESSMETHOD(cvda)? ADD(cvda)? BASEDSNAME(data-area)? BLOCKFORMAT(cvda)? BLOCKKEYLEN(data-area)? BLOCKSIZE(data-area)? BROWSE(cvda)? CFDTPOOL(data-area)? CHANGEAGENT(cvda)? CHANGEAGREL(data-area)? CHANGETIME(data-area)? CHANGEUSRID(data-area)? DEFINESOURCE(data-area)? DEFINETIME(data-area)? DELETE(cvda)? DISPOSITION(cvda)? [ DSNAME(data-area) | OBJECTNAME(data-area) ]? EMPTYSTATUS(cvda)? ENABLESTATUS(cvda)? EXCLUSIVE(cvda)? FWDRECSTATUS(cvda)? INSTALLAGENT(cvda)? INSTALLTIME(data-area)? INSTALLUSRID(data-area)? JOURNALNUM(data-area)? KEYLENGTH(data-area)? KEYPOSITION(data-area)? LOADTYPE(cvda)? LSRPOOLNUM(data-area)? MAXNUMRECS(data-area)? OBJECT(cvda)? OPENSTATUS(cvda)? RBATYPE(cvda)? READ(cvda)? READINTEG(cvda)? RECORDFORMAT(cvda)? RECORDSIZE(data-area)? RECOVSTATUS(cvda)? RELTYPE(cvda)? REMOTENAME(data-area)? REMOTESYSTEM(data-area)? REMOTETABLE(cvda)? RLSACCESS(cvda)? STRINGS(data-area)? TABLE(cvda)? TABLENAME(data-area)? TYPE(cvda)? UPDATE(cvda)? UPDATEMODEL(cvda)?
Runtime support : none
5.66. INQUIRE IPCONN
Supported syntax:
INQUIRE IPCONN(cvda) APPLID(data-area)? AUTOCONNECT(cvda)? CERTIFICATE(data-area)? CHANGEAGENT(data-area)? CHANGEAGREL(data-area)? CHANGETIME(data-area)? CHANGEUSRID(data-area)? CIPHERS(data-area)? CLIENTLOC(data-area)? CONNSTATUS(cvda)? DEFINESOURCE(data-area)? DEFINETIME(data-area)? HA(cvda)? HOST(data-area)? HOSTTYPE(cvda)? IDPROP(cvda)? IPFAMILY(cvda)? IPRESOLVED(data-area)? INSTALLAGENT(cvda)? INSTALLTIME(data-area)? INSTALLUSRID(data-area)? LINKAUTH(cvda)? MAXQTIME(data-area)? MIRRORLIFE(cvda)? NETWORKID(data-area)? NUMCIPHERS(data-area)? PARTNER(data-area)? PENDSTATUS(cvda)? PORT(data-area)? QUEUELIMIT(data-area)? RECEIVECOUNT(data-area)? RECOVSTATUS(cvda)? SECURITYNAME(data-area)? SENDCOUNT(data-area)? SERVSTATUS(cvda)? SSLTYPE(cvda)? TCPIPSERVICE(data-area)? USERAUTH(cvda)?
Runtime support : none
5.68. INQUIRE IPCONN NEXT
Supported syntax:
INQUIRE IPCONN(cvda) APPLID(data-area)? AUTOCONNECT(cvda)? CERTIFICATE(data-area)? CHANGEAGENT(data-area)? CHANGEAGREL(data-area)? CHANGETIME(data-area)? CHANGEUSRID(data-area)? CIPHERS(data-area)? CLIENTLOC(data-area)? CONNSTATUS(cvda)? DEFINESOURCE(data-area)? DEFINETIME(data-area)? HA(cvda)? HOST(data-area)? HOSTTYPE(cvda)? IDPROP(cvda)? IPFAMILY(cvda)? IPRESOLVED(data-area)? INSTALLAGENT(cvda)? INSTALLTIME(data-area)? INSTALLUSRID(data-area)? LINKAUTH(cvda)? MAXQTIME(data-area)? MIRRORLIFE(cvda)? NETWORKID(data-area)? NUMCIPHERS(data-area)? PARTNER(data-area)? PENDSTATUS(cvda)? PORT(data-area)? QUEUELIMIT(data-area)? RECEIVECOUNT(data-area)? RECOVSTATUS(cvda)? SECURITYNAME(data-area)? SENDCOUNT(data-area)? SERVSTATUS(cvda)? SSLTYPE(cvda)? TCPIPSERVICE(data-area)? USERAUTH(cvda)? NEXT
Runtime support : none
5.70. INQUIRE NETNAME
Supported syntax:
INQUIRE NETNAME(data-value) TERMINAL(data-area)? ACCESSMETHOD(cvda)? ACQSTATUS(cvda)? AIDCOUNT(data-area)? ALTPAGEHT(data-area)? ALTPAGEWD(data-area)? ALTPRINTER(data-area)? ALTPRTCOPYST(cvda)? ALTSCRNHT(data-area)? ALTSCRNWD(data-area)? ALTSUFFIX(data-area)? APLKYBDST(cvda)? APLTEXTST(cvda)? ASCII(cvda)? ATISTATUS(cvda)? AUDALARMST(cvda)? AUTOCONNECT(cvda)? BACKTRANSST(cvda)? COLORST(cvda)? CONSOLE(data-area)? COPYST(cvda)? CORRELID(data-area)? CREATESESS(cvda)? DATASTREAM(cvda)? DEFPAGEHT(data-area)? DEFPAGEWD(data-area)? DEFSCRNHT(data-area)? DEFSCRNWD(data-area)? DEVICE(cvda)? DISCREQST(cvda)? DUALCASEST(cvda)? EXITTRACING(cvda)? EXTENDEDDSST(cvda)? FMHPARMST(cvda)? FORMFEEDST(cvda)? GCHARS(data-area)? GCODES(data-area)? HFORMST(cvda)? HILIGHTST(cvda)? KATAKANAST(cvda)? LIGHTPENST(cvda)? LINKSYSTEM(data-area)? MAPNAME(data-area)? MAPSETNAME(data-area)? MODENAME(data-area)? MSRCONTROLST(cvda)? NATLANG(data-area)? NATURE(cvda)? NEXTTRANSID(data-area)? NQNAME(data-area)? OBFORMATST(cvda)? OBOPERIDST(cvda)? OPERID(data-area)? OUTLINEST(cvda)? PAGEHT(data-area)? PAGESTATUS(cvda)? PAGEWD(data-area)? PARTITIONSST(cvda)? PRINTADAPTST(cvda)? PRINTER(data-area)? PROGSYMBOLST(cvda)? PRTCOPYST(cvda)? QUERYST(cvda)? RELREQST(cvda)? REMOTENAME(data-area)? REMOTESYSNET(data-area)? REMOTESYSTEM(data-area)? SCRNHT(data-area)? SCRNWD(data-area)? SECURITY(cvda)? SERVSTATUS(cvda)? SESSIONTYPE(cvda)? SIGNONSTATUS(cvda)? SOSIST(cvda)? TASKID(data-area)? TCAMCONTROL(data-area)? TERMMODEL(data-area)? TERMPRIORITY(data-area)? TERMSTATUS(cvda)? TEXTKYBDST(cvda)? TEXTPRINTST(cvda)? TRACING(cvda)? TRANSACTION(data-area)? TTISTATUS(cvda)? UCTRANST(cvda)? USERAREA(ptr-ref)? USERAREALEN(data-area)? USERID(data-area)? USERNAME(data-area)? VALIDATIONST(cvda)? VFORMST(cvda)? ZCPTRACING(cvda)?
Runtime support : none
5.71. INQUIRE PROGRAM
Supported syntax:
INQUIRE PROGRAM(name) LOADPOINT(ptr-ref)? LENGTH(data-value)? APIST(data-value)? CEDFSTATUS(data-value)? CHANGEAGENT(data-value)? CHANGEAGREL(data-area)? CHANGETIME(data-area)? CHANGEUSRID(data-value)? COBOLTYPE(data-value)? COPY(data-value)? CONCURRENCY(data-value)? DATALOCATION(data-value)? DEFINESOURCE(data-area)? DEFINETIME(data-area)? DYNAMSTATUS(data-value)? ENTRYPOINT(ptr-ref)? EXECKEY(data-value)? EXECUTIONSET(data-value)? HOLDSTATUS(data-value)? INSTALLAGENT(data-value)? INSTALLTIME(data-area)? INSTALLUSRID(data-value)? JVMCLASS(data-value)? JVMPROFILE(data-value)? LANGDEDUCED(data-value)? LANGUAGE(data-value)? LIBRARY(data-value)? LIBRARYDSN(data-value)? LPASTATUS(data-value)? PROGTYPE(data-value)? REMOTENAME(data-value)? REMOTESYSTEM(data-value)? RESCOUNT(data-value)? RUNTIME(data-value)? SHARESTATUS(data-value)? STATUS(data-value)? TRANSID(data-value)? USECOUNT(data-value)?
Runtime support : library
5.73. INQUIRE STORAGE
Supported syntax:
INQUIRE
STORAGE
[ ( ADDRESS(ptr-value) ELEMENT(ptr-ref)? FLENGTH(data-area)? )
| ( NUMELEMENTS(data-area) ELEMENTLIST(ptr-ref)? LENGTHLIST(ptr-ref)?
TASK(data-value)?
)
]
Runtime support : none
5.74. INQUIRE SYSTEM
Supported syntax:
INQUIRE SYSTEM AKP(data-area)? APPLID(data-area)? CDSASIZE(data-area)? CICSSTATUS(cvda)? CICSSYS(data-area)? CMDPROTECT(cvda)? DATEFORM(data-area)? DFLTREMSYS(data-area)? DFLTUSER(data-area)? DSALIMIT(data-area)? DTRPROGRAM(data-area)? DUMPING(cvda)? ECDSASIZE(data-area)? EDSALIMIT(data-area)? ERDSASIZE(data-area)? ESDSASIZE(data-area)? EUDSASIZE(data-area)? [ GMMTEXT(data-area) | GMMLENGTH(data-area) ]? GMMTRANID(data-area)? INITSTATUS(cvda)? INTROINTVL(data-area)? JOBNAME(data-area)? LOCALE(data-area)? MAXREGIONPOOL(data-area)? MAXSERVER(data-area)? MAXTASKS(data-area)? MAXTASKSHPOOL(data-area)? MINSERVER(data-area)? MROBATCH(data-area)? OPREL(data-area)? OPSYS(data-area)? PROGAUTOCTLG(cvda)? PROGAUTOEXIT(data-area)? PROGAUTOINST(cvda)? PRTYAGING(data-area)? RDSASIZE(data-area)? REENTPROTECT(cvda)? REGIONTHRESH(data-area)? RELEASE(data-area)? RUNAWAY(data-area)? SCANDELAY(data-area)? SDSASIZE(data-area)? SDTRAN(data-area)? SECURITYMGR(cvda)? SHUTSTATUS(cvda)? SOSSTATUS(cvda)? STARTUP(cvda)? STARTUPDATE(data-area)? STOREPROTECT(cvda)? SYSID(data-area)? TASKSHTHRESH(data-area)? TIME(data-area)? TRANISOLATE(cvda)? UDSASIZE(data-area)? XPRECVTIMEOUT(ptr-ref)? XRFSTATUS(cvda)? MEMLIMIT(data-area)? ETDSASIZE(data-area)? GCDSASIZE(data-area)? GSDSASIZE(data-area)? GUDSASIZE(data-area)? CICSTSLEVEL(data-area)? OSLEVEL(data-area)? RLSSTATUS(cvda)? ACTOPENTCBS(data-area)? AIDCOUNT(data-area)? COLDSTATUS(cvda)? DB2CONN(data-area)? DEBUGTOOL(cvda)? DSRTPROGRAM(data-area)? FORCEQR(cvda)? LASTCOLDTIME(data-area)? LASTEMERTIME(data-area)? LASTINITTIME(data-area)? LASTWARMTIME(data-area)? LOGDEFER(data-area)? MAXOPENTCBS(data-area)? MESSAGECASE(cvda)? MQCONN(data-area)? MVSSMFID(data-area)? MVSSYSNAME(data-area)? PLTPIUSR(data-area)? REGIONUSERID(data-area)? SOSABOVEBAR(cvda)? SOSABOVELINE(cvda)? SOSBELOWLINE(cvda)?
Runtime support : none
5.75. INQUIRE TASK
Supported syntax:
INQUIRE TASK(data-value) ACTIVITY(data-area)? ACTIVITYID(data-area)? ATTACHTIME(data-value)? BRFACILITY(data-area)? BRIDGE(data-value)? CMDSEC(data-value)? CURRENTPROG(name)? DB2PLAN(data-area)? DTIMEOUT(data-value)? DUMPING(data-value)? FACILITY(data-value)? FACILITYTYPE(data-value)? IDENTIFIER(data-value)? INDOUBT(data-value)? INDOUBTMINS(data-value)? INDOUBTWAIT(data-value)? IPFACILITIES(ptr-ref)? IPFLISTSIZE(data-value)? ISOLATEST(data-value)? PRIORITY(data-value)? PROCESS(data-value)? PROCESSTYPE(data-value)? PROFILE(data-value)? PROGRAM(data-value)? PURGEABILITY(data-value)? REMOTENAME(data-value)? REMOTESYSTEM(data-value)? RESSEC(data-value)? ROUTING(data-value)? RTIMEOUT(data-value)? RUNAWAY(data-value)? RUNSTATUS(data-value)? SCRNSIZE(data-value)? STARTCODE(data-value)? STORAGECLEAR(data-value)? SUSPENDTIME(data-value)? SUSPENDTYPE(data-value)? SUSPENDVALUE(data-value)? TASKDATAKEY(data-value)? TASKDATALOC(data-value)? TCB(data-value)? TCLASS(data-value)? TRACING(data-value)? TRANCLASS(data-value)? TRANPRIORITY(data-value)? TRANSACTION(data-value)? TRPROF(data-value)? TWASIZE(data-value)? UOW(data-area)? USERID(data-value)? RECUNITID(data-area)?
Runtime support : none
5.76. INQUIRE TASK LIST
Supported syntax:
INQUIRE TASK LIST? LISTSIZE(data-area) DISPATCHABLE? RUNNING? SUSPENDED? ( SET(ptr-ref) SETTRANSID(ptr-ref)? )?
Runtime support : none
5.77. INQUIRE TDQUEUE
Supported syntax:
INQUIRE TDQUEUE(data-value) ATITRANID(data-area)? RECORDLENGTH(data-area)? RECORDFORMAT(cvda)?
Runtime support : none
5.78. INQUIRE TERMINAL
Supported syntax:
INQUIRE TERMINAL(data-value) NETNAME(data-area)? ACCESSMETHOD(cvda)? ACQSTATUS(cvda)? AIDCOUNT(data-area)? ALTPAGEHT(data-area)? ALTPAGEWD(data-area)? ALTPRINTER(data-area)? ALTPRTCOPYST(cvda)? ALTSCRNHT(data-area)? ALTSCRNWD(data-area)? ALTSUFFIX(data-area)? APLKYBDST(cvda)? APLTEXTST(cvda)? ASCII(cvda)? ATISTATUS(cvda)? AUDALARMST(cvda)? AUTOCONNECT(cvda)? BACKTRANSST(cvda)? COLORST(cvda)? CONSOLE(data-area)? COPYST(cvda)? CORRELID(data-area)? CREATESESS(cvda)? DATASTREAM(cvda)? DEFPAGEHT(data-area)? DEFPAGEWD(data-area)? DEFSCRNHT(data-area)? DEFSCRNWD(data-area)? DEVICE(cvda)? DISCREQST(cvda)? DUALCASEST(cvda)? EXITTRACING(cvda)? EXTENDEDDSST(cvda)? FMHPARMST(cvda)? FORMFEEDST(cvda)? GCHARS(data-area)? GCODES(data-area)? HFORMST(cvda)? HILIGHTST(cvda)? KATAKANAST(cvda)? LIGHTPENST(cvda)? LINKSYSTEM(data-area)? MAPNAME(data-area)? MAPSETNAME(data-area)? MODENAME(data-area)? MSRCONTROLST(cvda)? NATLANG(data-area)? NATURE(cvda)? NEXTTRANSID(data-area)? NQNAME(data-area)? OBFORMATST(cvda)? OBOPERIDST(cvda)? OPERID(data-area)? OUTLINEST(cvda)? PAGEHT(data-area)? PAGESTATUS(cvda)? PAGEWD(data-area)? PARTITIONSST(cvda)? PRINTADAPTST(cvda)? PRINTER(data-area)? PROGSYMBOLST(cvda)? PRTCOPYST(cvda)? QUERYST(cvda)? RELREQST(cvda)? REMOTENAME(data-area)? REMOTESYSNET(data-area)? REMOTESYSTEM(data-area)? SCRNHT(data-area)? SCRNWD(data-area)? SECURITY(cvda)? SERVSTATUS(cvda)? SESSIONTYPE(cvda)? SIGNONSTATUS(cvda)? SOSIST(cvda)? TASKID(data-area)? TCAMCONTROL(data-area)? TERMMODEL(data-area)? TERMPRIORITY(data-area)? TERMSTATUS(cvda)? TEXTKYBDST(cvda)? TEXTPRINTST(cvda)? TRACING(cvda)? TRANSACTION(data-area)? TTISTATUS(cvda)? UCTRANST(cvda)? USERAREA(ptr-ref)? USERAREALEN(data-area)? USERID(data-area)? USERNAME(data-area)? VALIDATIONST(cvda)? VFORMST(cvda)? ZCPTRACING(cvda)?
Runtime support : Qix emulator
5.79. INQUIRE TRANCLASS
Supported syntax:
INQUIRE TRANCLASS(data-value) ACTIVE(data-area)? CHANGEAGENT(cvda)? CHANGEAGREL(data-area)? CHANGETIME(data-area)? CHANGEUSRID(data-area)? DEFINESOURCE(data-area)? DEFINETIME(data-area)? INSTALLAGENT(data-area)? INSTALLTIME(data-area)? INSTALLUSRID(data-area)? MAXACTIVE(data-area)? PURGETHRESH(data-area)? QUEUED(data-area)?
Runtime support : none
5.81. INQUIRE TRANCLASS NEXT
Supported syntax:
INQUIRE TRANCLASS(data-value) ACTIVE(data-area)? CHANGEAGENT(cvda)? CHANGEAGREL(data-area)? CHANGETIME(data-area)? CHANGEUSRID(data-area)? DEFINESOURCE(data-area)? DEFINETIME(data-area)? INSTALLAGENT(data-area)? INSTALLTIME(data-area)? INSTALLUSRID(data-area)? MAXACTIVE(data-area)? PURGETHRESH(data-area)? QUEUED(data-area)? NEXT
Runtime support : none
5.82. INQUIRE TRANCLASS START
Supported syntax:
INQUIRE TRANCLASS [ START | ( START AT(data-value) ) | AT(data-value) ]
Runtime support : none
5.83. INQUIRE TRANDUMPCODE
Supported syntax:
INQUIRE TRANDUMPCODE(data-value) CHANGEAGENT(cvda)? CHANGEAGREL(data-area)? CHANGETIME(data-area)? CHANGEUSRID(data-area)? CURRENT(data-area)? DEFINESOURCE(data-area)? DEFINETIME(data-area)? DUMPSCOPE(cvda)? INSTALLAGENT(cvda)? INSTALLTIME(data-area)? INSTALLUSRID(data-area)? MAXIMUM(data-area)? SHUTOPTION(cvda)? SYSDUMPING(cvda)? TRANDUMPING(cvda)?
Runtime support : none
5.85. INQUIRE TRANDUMPCODE NEXT
Supported syntax:
INQUIRE TRANDUMPCODE(data-value) CHANGEAGENT(cvda)? CHANGEAGREL(data-area)? CHANGETIME(data-area)? CHANGEUSRID(data-area)? CURRENT(data-area)? DEFINESOURCE(data-area)? DEFINETIME(data-area)? DUMPSCOPE(cvda)? INSTALLAGENT(cvda)? INSTALLTIME(data-area)? INSTALLUSRID(data-area)? MAXIMUM(data-area)? SHUTOPTION(cvda)? SYSDUMPING(cvda)? TRANDUMPING(cvda)? NEXT
Runtime support : none
5.86. INQUIRE TRANDUMPCODE START
Supported syntax:
INQUIRE TRANDUMPCODE START
Runtime support : none
5.87. INQUIRE TRANSACTION
Supported syntax:
INQUIRE TRANSACTION(data-value) CMDSEC(cvda)? DTIMEOUT(data-area)? DTB(cvda)? DUMPING(cvda)? ISOLATEST(cvda)? PRIORITY(data-area)? PROFILE(data-area)? PROGRAM(data-area)? PURGEABILITY(cvda)? REMOTENAME(data-area)? REMOTESYSTEM(data-area)? RESSEC(cvda)? ROUTING(cvda)? RTIMEOUT(data-area)? RUNAWAY(data-area)? RUNAWAYTYPE(cvda)? SCRNSIZE(cvda)? SHUTDOWN(cvda)? STATUS(cvda)? STORAGECLEAR(cvda)? TASKDATAKEY(cvda)? TASKDATALOC(cvda)? TCLASS(data-area)? TRANCLASS(data-area)? TRACING(cvda)? TRPROF(data-area)? TWASIZE(data-area)?
Runtime support : none
5.88. INQUIRE TSQUEUE
Supported syntax:
INQUIRE [ TSQUEUE(data-area) | TSQNAME(data-area) ] NEXT LASTUSEDINT(data-area)? LOCATION(data-area)? NUMITEMS(data-area)?
INQUIRE [ TSQUEUE(data-area) | TSQNAME(data-area) ] LASTUSEDINT(data-area)? LOCATION(data-area)? NUMITEMS(data-area)?
Runtime support : none
5.89. INQUIRE UOW
Supported syntax:
INQUIRE UOW(data-area) AGE(data-area)? LINK(data-area)? NETNAME(data-area)? NETUOWID(data-area)? OTSTID(data-area)? SYSID(data-area)? TASKID(data-area)? TERMID(data-area)? TRANSID(data-area)? UOWSTATE(cvda)? USERID(data-area)? WAITCAUSE(cvda)? WAITSTATE(cvda)?
Runtime support : none
5.90. INQUIRE URIMAP
Supported syntax:
INQUIRE URIMAP(data-value) WEBSERVICE(data-area)?
Runtime support : none
5.91. INQUIRE WEBSERVICE
Supported syntax:
INQUIRE WEBSERVICE(name) BINDING(data-area)?
Runtime support : none
5.92. INVOKE SERVICE
Supported syntax:
INVOKE [ SERVICE(data-value) | WEBSERVICE(data-value) ] CHANNEL(data-value) OPERATION(data-value) [ URI(data-value) | URIMAP(data-value) ]? ( SCOPE(data-value) SCOPELEN(data-value)? )?
Runtime support : none
5.93. ISSUE (APPC)
Supported syntax:
ISSUE [ PRINT | EODS ]
ISSUE [ ABEND | ERROR | CONFIRMATION | PREPARE ] CONVID(name)? STATE(cvda)?
ISSUE DISCONNECT SESSION(name)?
ISSUE ERASEAUP WAIT?
ISSUE SIGNAL [ ( CONVID(name)? STATE(cvda)? ) | SESSION(name) ]
Runtime support : none
5.94. LINK
Supported syntax:
LINK PROGRAM(name) [ ( COMMAREA(data-area) LENGTH(data-value)? DATALENGTH(data-value)? ) | CHANNEL(name) ]? [ ( INPUTMSG(data-area) INPUTMSGLEN(data-value)? ) | ( SYSID(systemname)? SYNCONRETURN? TRANSID(name)? ) ]? ( RETCODE(data-area) APPLID(name) )?
Runtime support : library
5.95. LOAD
Supported syntax:
LOAD PROGRAM(name) SET(ptr-ref)? [ LENGTH(data-area) | FLENGTH(data-area) ]? ENTRY(ptr-ref)? HOLD?
Runtime support : none
5.96. MONITOR
Supported syntax:
MONITOR POINT(data-value) DATA1(data-area)? DATA2(data-area)? ENTRYNAME(data-area)?
Runtime support : library
5.97. MOVE CONTAINER
Supported syntax:
MOVE CONTAINER(data-value)? AS(data-value)? CHANNEL(data-value)? TOCHANNEL(data-value)?
Runtime support : none
5.99. POST
Supported syntax:
POST [ TIME(data-value) | INTERVAL(data-value) | ( AFTER HOURS(data-value)? MINUTES(data-value)? SECONDS(data-value)? ) | ( AT HOURS(data-value)? MINUTES(data-value)? SECONDS(data-value)? ) ]? SET(ptr-ref) REQID(name)?
Runtime support : none
5.102. PUT CONTAINER
Supported syntax:
PUT CONTAINER(data-value) [ CHANNEL(data-value) | [ ACTIVITY(data-value) | ACQACTIVITY | PROCESS | ACQPROCESS ]? ]? FROM(data-area) [ FLENGTH(data-value) | LENGTH(data-value) ]? [ BIT | DATATYPE(cvda) | CHAR ]? [ FROMCCSID(data-value) | FROMCODEPAGE(data-value) ]? [ APPEND | PREPEND ]?
Runtime support : library
5.103. QUERY COUNTER
Supported syntax:
QUERY COUNTER(name) POOL(name)? VALUE(data-area)? MINIMUM(data-area)? MAXIMUM(data-area)?
Runtime support : none
5.104. QUERY SECURITY
Supported syntax:
QUERY SECURITY RESTYPE(data-value) RESID(data-value) LOGMESSAGE(cvda)? READ(cvda)? UPDATE(cvda)? CONTROL(cvda)? ALTER(cvda)? NOLOG?
QUERY SECURITY RESCLASS(data-value) RESIDLENGTH(data-value) RESID(data-value) LOGMESSAGE(cvda)? READ(cvda)? UPDATE(cvda)? CONTROL(cvda)? ALTER(cvda)? NOLOG?
Runtime support : none
5.105. READ
Supported syntax:
READ [ FILE(filename) | DATASET(filename) ] [ UNCOMMITTED | CONSISTENT | REPEATABLE | ( UPDATE TOKEN(data-area)? ) ]? [ INTO(data-area) | SET(ptr-ref) ] RIDFLD(data-area) ( KEYLENGTH(data-value) GENERIC? )? SYSID(systemname)? LENGTH(data-area)? [ DEBKEY | DEBREC | RBA | RRN | XRBA ]? [ EQUAL | GTEQ ]? NOSUSPEND?
Runtime support : none
5.106. READNEXT
Supported syntax:
READNEXT [ FILE(filename) | DATASET(filename) ] [ INTO(data-area) | SET(ptr-ref) ] [ UNCOMMITTED | CONSISTENT | REPEATABLE | ( UPDATE TOKEN(data-area)? ) ]? RIDFLD(data-area)? KEYLENGTH(data-value)? REQID(data-value)? SYSID(systemname)? LENGTH(data-area)? [ RBA | RRN | XRBA ]? NOSUSPEND?
Runtime support : none
5.107. READPREV
Supported syntax:
READPREV [ FILE(filename) | DATASET(filename) ] [ INTO(data-area) | SET(ptr-ref) ] [ UNCOMMITTED | CONSISTENT | REPEATABLE | ( UPDATE TOKEN(data-area)? ) ]? RIDFLD(data-area)? KEYLENGTH(data-value)? REQID(data-value)? SYSID(systemname)? LENGTH(data-area)? [ RBA | RRN | XRBA ]? NOSUSPEND?
Runtime support : none
5.108. READQ TD
Supported syntax:
READQ TD QUEUE(name) [ INTO(data-area) | SET(ptr-ref) ] LENGTH(data-area)? SYSID(systemname)? NOSUSPEND?
Runtime support : library
5.109. READQ TS
Supported syntax:
READQ TS? [ QUEUE(name) | QNAME(name) ] [ INTO(data-area) | SET(ptr-ref) ] LENGTH(data-area)? NUMITEMS(data-area)? [ NEXT | ITEM(data-value) ]? SYSID(systemname)?
Runtime support : library
5.110. RECEIVE (APPC)
Supported syntax:
RECEIVE [ CONVID(name) | SESSION(name) ]? INTO(data-area)? [ LENGTH(data-area) | FLENGTH(data-area) ]? [ MAXLENGTH(data-value) | MAXFLENGTH(data-value) ]? BUFFER? ASIS? NOTRUNCATE? STATE(cvda)?
RECEIVE [ CONVID(name) | SESSION(name) ]? SET(ptr-ref) [ LENGTH(data-area) | FLENGTH(data-area) ] [ MAXLENGTH(data-value) | MAXFLENGTH(data-value) ]? BUFFER? ASIS? NOTRUNCATE? STATE(cvda)?
Runtime support : none
5.111. RECEIVE MAP
Supported syntax:
RECEIVE MAP(name) MAPSET(name)? INTO(data-area)? [ ( TERMINAL? ASIS? INPARTN(name)? ) | ( FROM(data-area) LENGTH(data-value)? ) ]
RECEIVE MAP(name) MAPSET(name)? SET(ptr-ref) [ ( TERMINAL? ASIS? INPARTN(name)? ) | ( FROM(data-area) LENGTH(data-value)? ) ]
Runtime support : Qix emulator
5.112. RECEIVE MAP MAPPINGDEV
Supported syntax:
RECEIVE MAP(name) MAPPINGDEV(data-value) FROM(data-area) LENGTH(data-area)? MAPSET(name)? INTO(data-area)?
RECEIVE MAP(name) MAPPINGDEV(data-value) FROM(data-area) LENGTH(data-area)? MAPSET(name)? SET(ptr-ref)
Runtime support : none
5.113. RECEIVE PARTN
Supported syntax:
RECEIVE PARTN(data-area) [ INTO(data-area) | SET(ptr-ref) ] LENGTH(data-area) ASIS?
Runtime support : none
5.117. RESETBR
Supported syntax:
RESETBR [ FILE(filename) | DATASET(filename) ] RIDFLD(data-area) ( KEYLENGTH(data-value) GENERIC? )? SYSID(systemname)? [ EQUAL | GTEQ ]? [ RBA | RRN | XRBA ]?
Runtime support : library
5.118. RESUME
Supported syntax:
RESUME [ ACTIVITY(data-value) | ACQACTIVITY | ACQPROCESS ]
Runtime support : none
5.119. RETRIEVE
Supported syntax:
RETRIEVE [ INTO(data-area) | SET(ptr-ref) ] LENGTH(data-area)? RTRANSID(data-area)? RTERMID(data-area)? QUEUE(data-area)? WAIT?
Runtime support : Qix emulator
5.120. RETRIEVE REATTACH EVENT
Supported syntax:
RETRIEVE REATTACH EVENT(data-area) EVENTTYPE(cvda)?
Runtime support : none
5.121. RETURN
Supported syntax:
RETURN
( TRANSID(name)
[ ( COMMAREA(data-area) LENGTH(data-value)? ) | CHANNEL(name) ]?
IMMEDIATE?
)?
( INPUTMSG(data-area) INPUTMSGLEN(data-value)? )? ENDACTIVITY?
Runtime support : library and Qix emulator
5.122. REWIND COUNTER
Supported syntax:
REWIND COUNTER(name) POOL(name)? INCREMENT(data-value)?
Runtime support : none
5.123. REWRITE
Supported syntax:
REWRITE [ FILE(filename) | DATASET(filename) ] TOKEN(data-area)? FROM(data-area) LENGTH(data-value)? SYSID(systemname)? NOSUSPEND?
Runtime support : none
5.124. ROUTE
Supported syntax:
ROUTE [ INTERVAL(hhmmss) | TIME(hhmmss) | ( AFTER HOURS(data-value)? MINUTES(data-value)? SECONDS(data-value)? ) | ( AT HOURS(data-value)? MINUTES(data-value)? SECONDS(data-value)? ) ]? ERRTERM(name)? TITLE(data-area)? LIST(data-area)? OPCLASS(data-area)? REQID(name)? LDC(name)? NLEOM?
Runtime support : none
5.125. RUN
Supported syntax:
RUN [ ACTIVITY(data-value) | ACQACTIVITY | ACQPROCESS ] [ SYNCHRONOUS | ( ASYNCHRONOUS FACILITYTOKN(data-value)? ) ] INPUTEVENT(data-value)?
Runtime support : none
5.126. RUN TRANSID
Supported syntax:
RUN TRANSID(name) CHANNEL(name)? CHILD(data-area)?
Runtime support : none
5.127. SEND
Supported syntax:
SEND FROM(data-area)? [ CONVID(name) | SESSION(name) | DEST(name) ]? [ LENGTH(data-value) | FLENGTH(data-value) ]? [ CONFIRM | WAIT ]? [ INVITE | LAST ]? ATTACHID(name)? ( ( ERASE [ DEFAULT | ALTERNATE ]? )? CTLCHAR(data-value)? STRFIELD? ) DEFRESP? FMH?
Runtime support : Qix emulator
5.128. SEND CONTROL
Supported syntax:
SEND CONTROL CURSOR(data-value)? FORMFEED? [ ( ERASE [ DEFAULT | ALTERNATE ]? ) | ERASEAUP ]? PRINT? FREEKB? ALARM? FRSET? MSR(data-value)? [ LDC(name) | ( OUTPARTN(name)? ACTPARTN(name)? ) ] ACCUM? [ SET(ptr-ref) | PAGING | ( TERMINAL WAIT? LAST? ) ]? REQID(name)? [ HONEOM | L40 | L64 | L80 ]?
Runtime support : Qix emulator
5.129. SEND MAP
Supported syntax:
SEND MAP(name) MAPSET(name)? [ ( FROM(data-area)? DATAONLY? LENGTH(data-value)? ) | MAPONLY ] CURSOR(data-value)? FORMFEED? [ ( ERASE? [ ALTERNATE | DEFAULT ]? ) | ERASEAUP ] PRINT? FREEKB? ALARM? FRSET? NLEOM? MSR(data-value)? FMHPARM(name)? [ [ OUTPARTN(name) | ACTPARTN(name) ]? | LDC(name) ] ACCUM? TERMINAL? WAIT? LAST? NOFLUSH? [ HONEOM | L40 | L64 | L80 ]? PAGING?
SEND MAP(name) MAPSET(name)? [ ( FROM(data-area)? DATAONLY? LENGTH(data-value)? ) | MAPONLY ] CURSOR(data-value)? FORMFEED? [ ( ERASE? [ ALTERNATE | DEFAULT ]? ) | ERASEAUP ] PRINT? FREEKB? ALARM? FRSET?
SEND MAP(name) MAPSET(name)? [ ( FROM(data-area)? DATAONLY? LENGTH(data-value)? ) | MAPONLY ] CURSOR(data-value)? FORMFEED? [ ( ERASE? [ ALTERNATE | DEFAULT ]? ) | ERASEAUP ] PRINT? FREEKB? ALARM? FRSET? NLEOM? MSR(data-value)? FMHPARM(name)? [ [ OUTPARTN(name) | ACTPARTN(name) ]? | LDC(name) ]
Runtime support : Qix emulator
5.130. SEND MAP MAPPINGDEV
Supported syntax:
SEND MAP(name) MAPSET(name)? MAPPINGDEV(data-value) MAPONLY? FROM(data-area)? DATAONLY? CURSOR(data-value)? FORMFEED? ERASE? ERASEAUP? PRINT? FREEKB? ALARM? FRSET? SET(ptr-ref)?
Runtime support : none
5.131. SEND PAGE
Supported syntax:
SEND PAGE [ ( RELEASE TRANSID(name)? ) | RETAIN ]? TRAILER(data-area)? SET(ptr-ref)? [ ( AUTOPAGE [ CURRENT | ALL ]? ) | NOAUTOPAGE ]? OPERPURGE? FMHPARM(name)? LAST?
Runtime support : Qix emulator
5.133. SEND TEXT
Supported syntax:
SEND TEXT FROM(data-area) LENGTH(data-value)? CURSOR(data-value)? FORMFEED? ( ERASE [ DEFAULT | ALTERNATE ]? )? PRINT? FREEKB? ALARM? NLEOM? FMHPARM(name)? [ LDC(name) | ( OUTPARTN(name)? ACTPARTN(name)? ) ] MSR(data-value)? ( [ PAGING | TERMINAL ]? WAIT? LAST? ) REQID(name)? HEADER(data-area)? TRAILER(data-area)? [ JUSTIFY(data-value) | JUSFIRST | JUSLAST ]? ACCUM? [ HONEOM | L40 | L64 | L80 ]?
Runtime support : Qix emulator
5.134. SEND TEXT MAPPED
Supported syntax:
SEND TEXT MAPPED FROM(data-area)? TERMINAL? PAGING? WAIT? LAST? REQID(name)?
Runtime support : none
5.135. SEND TEXT NOEDIT
Supported syntax:
SEND TEXT NOEDIT ( FROM(data-area) LENGTH(data-value)? )? ERASE? DEFAULT? ALTERNATE? PRINT? FREEKB? ALARM? OUTPARTN(name)? TERMINAL? PAGING? WAIT? LAST? REQID(name)? HONEOM? L40? L64? L80?
Runtime support : none
5.136. SET CONNECTION
Supported syntax:
SET CONNECTION(data-value) [ CONNSTATUS(cvda) | ACQSTATUS(cvda) | ACQUIRED | RELEASED ]? [ AFFINITY(cvda) | ENDAFFINITY ]? [ EXITTRACING(cvda) | EXITTRACE | NOEXITTRACE ]? [ PENDSTATUS(cvda) | NOTPENDING ]? [ PURGETYPE(cvda) | CANCEL | FORCECANCEL | FORCEPURGE | KILL | PURGE ]? [ RECOVSTATUS(cvda) | NORECOVDATA ]? [ SERVSTATUS(cvda) | INSERVICE | OUTSERVICE ]? [ UOWACTION(cvda) | BACKOUT | COMMIT | FORCEUOW | FORCE | RESYNC ]?
Runtime support : none
5.138. SET FILE
Supported syntax:
SET [ FILE(data-value) | DATASET(data-value) ]? [ ADD(cvda) | ADDABLE | NOTADDABLE ]? [ BROWSE(cvda) | BROWSABLE | NOTBROWSABLE ]? [ BUSY(cvda) | WAIT | FORCE | NOWAIT ]? CFDTPOOL(data-value)? [ DELETE(cvda) | DELETABLE | NOTDELETABLE ]? [ DISPOSITION(cvda) | OLD | SHARE ]? [ DSNAME(data-value) | OBJECTNAME(data-value) ]? [ EMPTYSTATUS(cvda) | EMPTY | EMPTYREQ | NOEMPTYREQ ]? [ ENABLESTATUS(cvda) | DISABLED | ENABLED ]? [ OPENSTATUS(cvda) | CLOSED | OPEN ]? [ EXCLUSIVE(cvda) | EXCTL | NOEXCTL ]? KEYLENGTH(data-value)? [ LOADTYPE(cvda) | LOAD | NOLOAD ]? LSRPOOLNUM(data-value)? MAXNUMRECS(data-value)? [ READ(cvda) | NOTREADABLE | READABLE ]? RECORDSIZE(data-value)? [ READINTEG(cvda) | UNCOMMITTED | CONSISTENT | REPEATABLE ]? [ RLSACCESS(cvda) | RLS | NOTRLS ]? STRINGS(data-value)? [ TABLE(cvda) | CFTABLE | CICSTABLE | NOTTABLE | USERTABLE ]? TABLENAME(data-value)? [ UPDATE(cvda) | NOTUPDATABLE | UPDATABLE ]? [ UPDATEMODEL(cvda) | CONTENTION | LOCKING ]?
Runtime support : none
5.139. SET PROGRAM
Supported syntax:
SET PROGRAM(data-value) [ STATUS(cvda) | ENABLED | DISABLED ]? [ CEDFSTATUS(cvda) | CEDF | NOCEDF ]? [ COPY(cvda) | NEWCOPY | PHASEIN ]? [ EXECUTIONSET(cvda) | DPLSUBSET | FULLAPI ]? [ REPLICATION(cvda) | REPLICATOR | NOREPLICATOR ]? [ SHARESTATUS(cvda) | PRIVATE | SHARED ]? VERSION(cvda)? OPERATION(data-value)?
Runtime support : none
5.140. SET TASK
Supported syntax:
SET TASK(data-value) PRIORITY(data-value)? [ PURGETYPE(cvda) | PURGE | KILL | FORCEPURGE ]?
Runtime support : none
5.141. SET TDQUEUE
Supported syntax:
SET TDQUEUE(data-value) [ ATIFACILITY(cvda) | NOTERMINAL | TERMINAL ]? ATITERMID(data-value)? ATITRANID(data-value)? ATIUSERID(data-value)? [ ENABLESTATUS(cvda) | DISABLED | ENABLED ]? [ OPENSTATUS(cvda) | CLOSED | OPEN ]? TRIGGERLEVEL(data-value)?
Runtime support : none
5.142. SET TERMINAL
Supported syntax:
SET TERMINAL(data-value) [ TERMSTATUS(cvda) | ACQSTATUS(cvda) | ACQUIRED | COLDACQ | RELEASED ]? ALTPRINTER(data-value)? [ ALTPRTCOPYST(cvda) | ALTPRTCOPY | NOALTPRTCOPY ]? [ ATISTATUS(cvda) | ATI | NOATI ]? [ CREATESESS(cvda) | CREATE | NOCREATE ]? [ DISCREQST(cvda) | DISCREQ | NODISCREQ ]? [ EXITTRACING(cvda) | EXITTRACE | NOEXITTRACE ]? MAPNAME(data-value)? MAPSETNAME(data-value)? NEXTTRANSID(data-value)? [ OBFORMATST(cvda) | OBFORMAT | NOOBFORMAT ]? OPERID(data-value)? [ PAGESTATUS(cvda) | AUTOPAGEABLE | PAGEABLE ]? PRINTER(data-value)? [ PRTCOPYST(cvda) | PRTCOPY | NOPRTCOPY ]? [ PURGETYPE(cvda) | FORCEPURGE | KILL | CANCEL ]? [ RELREQST(cvda) | RELREQ | NORELREQ ]? [ SERVSTATUS(cvda) | INSERVICE | OUTSERVICE ]? TERMPRIORITY(data-value)? [ TRACING(cvda) | SPECTRACE | STANTRACE ]? [ TTISTATUS(cvda) | NOTTI | TTI ]? [ UCTRANST(cvda) | UCTRAN | NOUCTRAN | TRANIDONLY ]? [ ZCPTRACING(cvda) | NOZCPTRACE | ZCPTRACE ]?
Runtime support : Qix emulator
5.143. SET TRANDUMPCODE
Supported syntax:
SET TRANDUMPCODE(data-value) [ ACTION(cvda) | ADD | REMOVE | RESET ]? [ DUMPSCOPE(cvda) | LOCAL | RELATED ]? MAXIMUM(data-value)? [ SHUTOPTION(cvda) | NOSHUTDOWN | SHUTDOWN ]? [ SYSDUMPING(cvda) | NOSYSDUMP | SYSDUMP ]? [ TRANDUMPING(cvda) | NOTRANDUMP | TRANDUMP ]?
Runtime support : none
5.144. SET TRANSACTION
Supported syntax:
SET TRANSACTION(data-value) [ DUMPING(cvda) | TRANDUMP | NOTRANDUMP ]? PRIORITY(data-value)? [ PURGEABILITY(cvda) | NOTPURGEABLE | PURGEABLE ]? RUNAWAY(data-value)? [ RUNAWAYTYPE(cvda) | SYSTEM | USER ]? [ SHUTDOWN(cvda) | SHUTDISABLED | SHUTENABLED ]? [ STATUS(cvda) | DISABLED | ENABLED ]? [ TCLASS(data-value) | TRANCLASS(data-value) ]? [ TRACING(cvda) | SPECTRACE | SPRSTRACE | STANTRACE ]?
Runtime support : none
5.146. SIGNON
Supported syntax:
SIGNON
USERID(data-value) ESMREASON(data-area)? ESMRESP(data-area)?
GROUPID(data-value)? [ LANGUAGECODE(data-value) | NATLANG(data-value) ]?
LANGINUSE(data-area)? NATLANGINUSE(data-area)?
[ ( PASSWORD(data-value) NEWPASSWORD(data-value)? )
| ( PHRASE(data-area) PHRASELEN(data-value)
( NEWPHRASE(data-area) NEWPHRASELEN(data-value) )?
)
]?
OIDCARD(data-value)?
Runtime support : Qix emulator
5.147. SOAPFAULT CREATE
Supported syntax:
SOAPFAULT CREATE [ FAULTCODE(cvda) | CLIENT | SERVER | SENDER | RECEIVER ]? FAULTCODESTR(data-value)? FAULTCODELEN(data-value)? ( FAULTSTRING(data-value) FAULTSTRLEN(data-value)? ) NATLANG(data-value)? ( ROLE(data-value) ROLELENGTH(data-value)? )? ( FAULTACTOR(data-value) FAULTACTLEN(data-value)? )? ( DETAIL(data-value) DETAILLENGTH(data-value)? )? FROMCCSID(data-value)?
Runtime support : none
5.148. SPOOLCLOSE
Supported syntax:
SPOOLCLOSE TOKEN(data-area) [ KEEP | DELETE ]?
Runtime support : none
5.149. SPOOLOPEN
Supported syntax:
SPOOLOPEN INPUT TOKEN(data-area) USERID(data-value) CLASS(data-value)?
SPOOLOPEN OUTPUT TOKEN(data-area) USERID(data-value) NODE(data-value) CLASS(data-value)? OUTDESCR(ptr-ref)? [ NOCC | ASA | MCC ]? [ ( PRINT RECORDLENGTH(data-value)? ) | PUNCH ]?
Runtime support : none
5.150. SPOOLREAD
Supported syntax:
SPOOLREAD TOKEN(data-area)? MAXLENGTH(data-value)? NOHANDLE? RESP? RESP2? INTO(data-area)? TOLENGTH(data-area)?
Runtime support : none
5.151. SPOOLWRITE
Supported syntax:
SPOOLWRITE TOKEN(data-area) FROM(data-area) FLENGTH(data-value)? [ LINE | PAGE ]?
Runtime support : none
5.152. START
Supported syntax:
START [ TRANSID(name) | TRANS(name) ] [ INTERVAL(hhmmss) | TIME(hhmmss) | ( AFTER HOURS(data-value)? MINUTES(data-value)? SECONDS(data-value)? ) | ( AT HOURS(data-value)? MINUTES(data-value)? SECONDS(data-value)? ) ]? REQID(name)? ( FROM(data-area) LENGTH(data-value)? FMH? )? [ TERMID(name) | USERID(data-value) ]? SYSID(systemname)? RTRANSID(name)? RTERMID(name)? QUEUE(name)? NOCHECK? PROTECT?
Runtime support : Qix emulator
5.153. START ATTACH
Supported syntax:
START ATTACH TRANSID(name) ( FROM(data-area) LENGTH(data-value)? )?
Runtime support : none
5.154. START CHANNEL
Supported syntax:
START TRANSID(name) CHANNEL(name) [ TERMID(name) | USERID(data-value) ]? SYSID(systemname)?
Runtime support : none
5.155. STARTBR
Supported syntax:
STARTBR [ FILE(filename) | DATASET(filename) ] RIDFLD(data-area) ( KEYLENGTH(data-value) GENERIC? )? REQID(data-value)? SYSID(systemname)? [ DEBKEY | DEBREC | RBA | RRN | XRBA ]? [ EQUAL | GTEQ | LTEQ ]?
Runtime support : library
5.156. STARTBROWSE ACTIVITY
Supported syntax:
STARTBROWSE ACTIVITY [ ACTIVITYID(data-value) | ( PROCESS(data-value) PROCESSTYPE(data-value) ) ]? BROWSETOKEN(data-area)
Runtime support : none
5.157. STARTBROWSE CONTAINER
Supported syntax:
STARTBROWSE CONTAINER [ ACTIVITY(data-value) | ( PROCESS(data-value) PROCESSTYPE(data-value) ) | CHANNEL(data-value) ]? BROWSETOKEN(data-area)
Runtime support : none
5.158. SUSPEND
Supported syntax:
SUSPEND [ ACTIVITY(data-value) | ACQACTIVITY | ACQPROCESS ]?
Runtime support : none
5.160. SYNCPOINT ROLLBACK
Supported syntax:
SYNCPOINT ROLLBACK
Runtime support : library and Qix emulator
5.161. UNLOCK
Supported syntax:
UNLOCK [ FILE(filename) | DATASET(filename) ] TOKEN(data-area)? SYSID(systemname)?
Runtime support : none
5.162. UPDATE COUNTER
Supported syntax:
UPDATE COUNTER(name) POOL(name)? VALUE(data-value) COMPAREMIN(data-value)? COMPAREMAX(data-value)?
Runtime support : none
5.163. VERIFY PASSWORD
Supported syntax:
VERIFY PASSWORD(data-value) USERID(data-value) CHANGETIME(data-area)? DAYSLEFT(data-area)? ESMREASON(data-area)? ESMRESP(data-area)? EXPIRYTIME(data-area)? INVALIDCOUNT(data-area)? LASTUSETIME(data-area)?
Runtime support : none
5.165. WAIT JOURNAL
Supported syntax:
WAIT JOURNAL JOURNALNAME(data-value)? REQID(data-value)? JOURNALNUM(data-value)?
Runtime support : none
5.166. WAIT TERMINAL
Supported syntax:
WAIT TERMINAL [ CONVID(name) | SESSION(name) ]?
Runtime support : none
5.168. WEB CONVERSE
Supported syntax:
WEB CONVERSE SESSTOKEN(data-value) [ ( PATH(data-area) PATHLENGTH(data-value) ) | URIMAP(data-value) ]? [ GET | HEAD | POST | PUT | TRACE | OPTIONS | DELETE | METHOD(cvda) ] ( QUERYSTRING(data-area) QUERYSTRLEN(data-value) )? [ ( DOCTOKEN(data-value) [ NODOCDELETE | DOCDELETE | DOCSTATUS(cvda) ]? ) | ( FROM(data-area) FROMLENGTH(data-value) ) | ( CONTAINER(data-value) CHANNEL(data-value)? ) ] MEDIATYPE(data-value)? [ CLICONVERT | NOCLICONVERT | CLIENTCONV(cvda) ]? CHARACTERSET(data-value)? [ EXPECT | ACTION(cvda) ]? [ NOCLOSE | CLOSE | CLOSESTATUS(cvda) ]? [ NONE | BASICAUTH | AUTHENTICATE(cvda) ]? ( USERNAME(data-value) USERNAMELEN(data-value)? )? ( PASSWORD(data-value) PASSWORDLEN(data-value)? )? [ CHUNKNO | CHUNKYES | CHUNKEND | CHUNKING(cvda) ]? ( STATUSCODE(data-value) STATUSTEXT(data-area) STATUSLEN(data-value) )? [ INTO(data-area) | SET(ptr-ref) ] LENGTH(data-area) MAXLENGTH(data-value)? NOTRUNCATE? BODYCHARSET(data-area)?
Runtime support : none
5.169. WEB EXTRACT
Supported syntax:
WEB EXTRACT SESSTOKEN(data-area)? SCHEME(cvda)? ( HOST(data-area) HOSTLENGTH(data-value) HOSTTYPE(cvda)? )? ( HTTPMETHOD(data-area) METHODLENGTH(data-area) )? ( HTTPVERSION(data-area) VERSIONLEN(data-area) )? ( PATH(data-area) PATHLENGTH(data-area) )? PORTNUMBER(data-area)? ( QUERYSTRING(data-area) QUERYSTRLEN(data-area) )? REQUESTTYPE(cvda)? URIMAP(data-area)? ( REALM(data-area) REALMLEN(data-area) )?
Runtime support : none
5.170. WEB OPEN
Supported syntax:
WEB
OPEN
[ URIMAP(data-value)
| ( HOST(data-value) HOSTLENGTH(data-value) PORTNUMBER(data-value)
[ SCHEME(cvda) | HTTP | HTTPS ]?
)
]
CERTIFICATE(data-value)? ( CIPHERS(data-value) NUMCIPHERS(data-value) )?
CODEPAGE(data-value)? SESSTOKEN(data-area)
( HTTPVNUM(data-area) HTTPRNUM(data-area) )?
Runtime support : none
5.171. WEB READ HTTPHEADER
Supported syntax:
WEB READ HTTPHEADER(data-area) NAMELENGTH(data-value) SESSTOKEN(data-area)? VALUE(data-area) VALUELENGTH(data-area)
Runtime support : none
5.172. WEB RECEIVE (client)
Supported syntax:
WEB RECEIVE SESSTOKEN(data-value) MEDIATYPE(data-area)? ( STATUSCODE(data-value) STATUSTEXT(data-area) STATUSLEN(data-value) )? [ INTO(data-area) | SET(ptr-ref) ] LENGTH(data-area) MAXLENGTH(data-value)? NOTRUNCATE? [ CLIENTCONV(cvda) | CLICONVERT | NOCLICONVERT ]? BODYCHARSET(data-area)?
Runtime support : none
5.173. WEB RECEIVE (container client)
Supported syntax:
WEB RECEIVE SESSTOKEN(data-value) MEDIATYPE(data-area)? STATUSCODE(data-value)? ( STATUSTEXT(data-area) STATUSLEN(data-value) )? TOCONTAINER(data-value) TOCHANNEL(data-value)? BODYCHARSET(data-area)?
Runtime support : none
5.174. WEB RECEIVE (container server)
Supported syntax:
WEB RECEIVE TOCONTAINER(data-value) TOCHANNEL(data-value)? TYPE(cvda)? CHARACTERSET(data-value)? BODYCHARSET(data-area)? MEDIATYPE(data-value)?
Runtime support : none
5.175. WEB RECEIVE (server)
Supported syntax:
WEB RECEIVE [ INTO(data-area) | SET(ptr-ref) ] LENGTH(data-area) MAXLENGTH(data-value)? NOTRUNCATE? TYPE(cvda)? [ SERVERCONV(cvda) | SRVCONVERT | NOSRVCONVERT ]? CHARACTERSET(data-value)? HOSTCODEPAGE(data-value)? BODYCHARSET(data-area)? MEDIATYPE(data-value)?
Runtime support : none
5.176. WEB SEND (client)
Supported syntax:
WEB SEND SESSTOKEN(data-value) [ GET | HEAD | POST | PUT | TRACE | OPTIONS | DELETE | METHOD(cvda) ] [ ( PATH(data-area) PATHLENGTH(data-value) ) | URIMAP(data-value) ]? ( QUERYSTRING(data-area) QUERYSTRLEN(data-value) )? [ ( DOCTOKEN(data-value) [ NODOCDELETE | DOCDELETE | DOCSTATUS(cvda) ]? ) | ( FROM(data-area) FROMLENGTH(data-value) ) | ( CONTAINER(data-value) CHANNEL(data-value)? ) ] MEDIATYPE(data-value)? [ CLICONVERT | NOCLICONVERT | CLIENTCONV(cvda) ]? CHARACTERSET(data-value)? [ EXPECT | ACTION(cvda) ]? [ NOCLOSE | CLOSE | CLOSESTATUS(cvda) ]? [ NONE | BASICAUTH | AUTHENTICATE(cvda) ]? ( USERNAME(data-value) USERNAMELEN(data-value)? )? ( PASSWORD(data-value) PASSWORDLEN(data-value)? )? [ CHUNKNO | CHUNKYES | CHUNKEND | CHUNKING(cvda) ]?
Runtime support : none
5.177. WEB SEND (server)
Supported syntax:
WEB
SEND
[ ( DOCTOKEN(data-value) [ NODOCDELETE | DOCDELETE | DOCSTATUS(cvda) ]? )
| CHUNKEND
| ( FROM(data-area) FROMLENGTH(data-value)
[ CHUNKNO | CHUNKYES | CHUNKEND | CHUNKING(cvda) ]?
HOSTCODEPAGE(data-value)?
)
| ( CONTAINER(data-value) CHANNEL(data-value)? )
]
MEDIATYPE(data-value)? [ SRVCONVERT | NOSRVCONVERT | SERVERCONV(cvda) ]?
CHARACTERSET(data-value)?
( STATUSCODE(data-value) STATUSTEXT(data-area)
[ STATUSLEN(data-value) | LENGTH(data-value) ]
)?
[ IMMEDIATE | EVENTUAL | ACTION(cvda) ]?
[ NOCLOSE | CLOSE | CLOSESTATUS(cvda) ]?
Runtime support : none
5.178. WEB WRITE HTTPHEADER
Supported syntax:
WEB WRITE HTTPHEADER(data-area) NAMELENGTH(data-value)? SESSTOKEN(data-value)? VALUE(data-area) VALUELENGTH(data-value)?
Runtime support : none
5.179. WRITE
Supported syntax:
WRITE [ FILE(filename) | DATASET(filename) ] MASSINSERT? FROM(data-area) RIDFLD(data-area) KEYLENGTH(data-value)? SYSID(systemname)? LENGTH(data-value)? [ RBA | RRN | XRBA ]? NOSUSPEND?
Runtime support : none
5.180. WRITE JOURNAL
Supported syntax:
WRITE [ JOURNALNAME(data-value) | ( JOURNALNUM(data-value) STARTIO? ) ] JTYPEID(data-value) FROM(data-area) [ LENGTH(data-value) | FLENGTH(data-value) ]? REQID(data-value)? ( PREFIX(data-value) PFXLENG(data-value)? )? WAIT? NOSUSPEND?
Runtime support : none
5.181. WRITE OPERATOR
Supported syntax:
WRITE
OPERATOR TEXT(data-value) TEXTLENGTH(data-value)?
( ROUTECODES(data-value) NUMROUTES(data-value) )?
[ EVENTUAL | ACTION(cvda) | CRITICAL | IMMEDIATE
| ( REPLY(data-area) MAXLENGTH(data-value) REPLYLENGTH(data-area)?
TIMEOUT(data-value)?
)
]?
Runtime support : none
5.182. WRITEQ TD
Supported syntax:
WRITEQ TD QUEUE(name) FROM(data-area) LENGTH(data-value)? SYSID(systemname)?
Runtime support : library
6. Limitations
QIX comes with a few limitations, described below.
6.1. Printing support
In practice, there is an extremely wide array of implementations of printing support, both on and off the mainframe. Moreover, requirements for how things need to be printed vary greatly from CICS installation to CICS installation. As a consequence, support for printing in QIX almost always needs to be customized for the application being migrated.
Given the need for such customization, Raincode does not provide any out-of-the-box printing support. This is because any such support would need to be customized anyway, and hence it is arguable that a complete custom solution is a cleaner approach. Typically, on the mainframe, there is an existing program, e.g., written in COBOL, that handles printing. This can serve as a reference for a C# implementation of printing logic.
For example, if printing is implemented using TD queues, the original program that reads the queue and spools the content to a printer can be replaced by a C# program that sends the content to a different printer. Alternatively, if a printer is addressed as a 3287 terminal through a SEND MAP command, then a specific handler for such an operation needs to be created. This can be done as a customization of QIX, e.g., by reusing the open-source pr3287 tool.
6.2. Common Work Area
Due to the distributed nature of QIX, allowing multiple processing servers to run simultaneously, running transactions accessing the same piece of shared memory in the QIX region is a bit tricky and is only supported in a limited way.
The Common Work Area (CWA) is more or less supported, depending on how the application uses it:
-
Without resource locking: when starting a new transaction, QIX allocates a copy of the CWA in the address space of the new task. When the task ends, QIX checks if this task’s CWA changed, and if it did, propagates it to other running processing servers. Each task has its own copy of the CWA, and it is not updated for a running task when another task writes in its own copy. Only tasks started after a task writing in the CWA will get a
freshcopy. There is no guarantee as to which CWA will be used by subsequent tasks when two or more tasks update their copy of the CWA and get propagated simultaneously. -
With resource locking: the previous paragraph still holds; with the addition, QIX can propagate the CWA even to running tasks. When issuing the ENQ command on a location inside the CWA, QIX can better keep track of changes and propagate the updated CWA to all running tasks, including tasks running on other processing servers, but only when the resource is released. When issuing the corresponding DEQ to release the lock, QIX takes care of propagating the CWA and copies it into the address space of every running task. Tasks waiting on the same lock will therefore get the most up-to-date version of the CWA.
Using a name lock (as opposed to an address lock) will not protect the CWA, as QIX only propagates on DEQ when a location inside the CWA is locked.
7. Telemetry
7.1. Introduction
This section describes Raincode’s approach to Telemetry across all relevant products.
| For the sake of readability of the documentation, this section is repeated identically in the following manuals: QIX, IMSql, and JCL. |
7.1.1. What is Telemetry
According to Wikipedia, Telemetry is the automatic process of measuring and transmitting data for the purpose of monitoring applications and assessing their health and performance.
This definition implies the clear separation between the production of this continuous stream of data and the collection, summarization, storage, etc., of this data. As a response to this separation, the OpenTelemetry standard has emerged, enabling a vibrant market for visualization and monitoring tools. It provides a single, open-source standard and a set of technologies to capture and export metrics, traces, and logs from cloud-native applications and infrastructure.
7.1.2. How about Raincode
Telemetry applies to the subset of Raincode’s products that include a runtime component:
-
QIX, Raincode’s CICS emulator
-
IMSql, Raincode’s IMS emulator (and in the context of Telemetry, focusing on the IMS/TM part of this product)
-
Raincode JCL.
While very different in functionality, these products share the ability to send events that can be used to monitor the health and performance of the running processes.
While the Raincode Console can be used to manage the static aspects of the configuration of these products and some more dynamic aspects (inspecting IMS/TM queues, for instance), it does not offer any telemetry capabilities. This is not an oversight: the Raincode product line is designed to connect to third-party solutions for Telemetry instead.
Further, the section below explains how the Raincode products mentioned above can be configured to external telemetry services for monitoring, visualization, alerts, and more.
7.2. In practice
The Raincode products are agnostic as per the telemetry platform (or even Telemetry standard) they will connect to.
Using user-defined plugins, one has full control over how events produced by the products (starting or stopping a JCL, QIX transactions, etc.) are handled, what to connect to, etc.
The QIX, IMSql, and Raincode JCL distributions include a plugin that connects to an OpenTelemetry endpoint, which can be easily replaced or extended for more functionality or to connect to an entirely different platform if necessary.
7.2.1. Event Structure
The events produced by all Raincode products follow a consistent naming convention. The event names are made of three parts, separated by colons, according to the following pattern:
-
Product: The name of the product, forced in lower case, e.g. qix or ims
-
Name: The type object the event is about, e.g. transaction or aplitdli
-
Verb: The action that was done on that object, e.g. start, stop, abort
For instance, valid event names include:
-
qix:transaction:start
-
ims:transaction:stop
This simple scheme allows optimal flexibility when filtering events by product, object, action or any combination thereof.
| Event | Arguments | Description |
|---|---|---|
ims:transaction:start |
the transaction code |
Start of an IMS transaction |
ims:transaction:stop |
the transaction code |
End of an IMS transaction |
ims:appltdli:start |
the function |
Start of a IMS call (EXEC DLI, CBLTDLI, PLITDLI, CEETDLI, ASMTDLI) using a DB PCB |
ims:appltdli:stop |
the function |
End of a IMS call (EXEC DLI, CBLTDLI, PLITDLI, CEETDLI, ASMTDLI) using a DB PCB |
ims:appltdli_io:start |
the function |
Start of a IMS call (EXEC DLI, CBLTDLI, PLITDLI, CEETDLI, ASMTDLI) using a IO PCB |
ims:appltdli_io:stop |
the function |
End of a IMS call (EXEC DLI, CBLTDLI, PLITDLI, CEETDLI, ASMTDLI) using a IO PCB |
ims:appltdli_alt:start |
the function |
Start of a IMS call (EXEC DLI, CBLTDLI, PLITDLI, CEETDLI, ASMTDLI) using a alternate PCB |
ims:appltdli_alt:stop |
the function |
End of a IMS call (EXEC DLI, CBLTDLI, PLITDLI, CEETDLI, ASMTDLI) using a alternate PCB |
qix:transaction:start |
the transaction code |
Start of on CICS transaction |
qix:transaction:stop |
the transaction code |
End of on CICS transaction |
batch:job:preexecute |
the name of the job |
Start of a job (JCL) |
batch:job:postexecute |
the name of the job |
End of a job (JCL) |
batch:step:preexecute |
the name of the step |
Start of a step |
batch:step:postexecute |
the name of the step |
End of a step |
7.2.2. The Telemetry plugin
The plugin provides a single interface for events behind which the user can customize the filtering and connection to the telemetry API of choice. This interface is made using a single method.
LogTelemetryEvent(name, args…)
To which the first parameter will always be the event name, and the following parameters will depend on the event itself.
LogTelemetryEvent("qix:transaction:start", Transaction.ID);
LogTelemetryEvent("qix:transaction:stop", Transaction.ID, transactionResult.Error);
If only a subset of the events must be reacted to, one can use an appropriate filtering regular expression, taking advantage of the naming convention described above.
public void LogTelemetryEvent(string eventName, params string[] eventData){
switch (eventName)
{
case "ims:transaction:start":
StartIMSqlTransactionTelemetry(eventData[0]);
break;
case "ims:transaction:stop":
StopIMSqlTransactionTelemetry(eventData[0], eventData[1]);
break;
case "ims:appltdli:start":
StartAppltdliTelemetry(eventData[0]);
break;
case "ims:appltdli:stop":
StopAppltdliTelemetry(eventData[0]);
break;
default:
break;
}
}
| The sample telemetry plugin can be found at %RCDIR%\plugins\AppInsights. |
7.2.3. Using a plugin: command line
Providing the telemetry plugin follows the same options as providing any plugin to an application.
Use -Plugin to provide a path to an assembly.
Submit.exe -Plugin=<path to assembly>
Or you can use -PluginPath to provide a path to a folder where all the assemblies will be scanned for plugins.
Submit.exe -PluginPath=<path to folder>
The screenshot below was captured by connecting Raincode JCL to .NET Aspire® and using Application Insight for visualization.
8. Raincode dual SQL runtime- Introduction
This document describes how to use the Raincode dual SQL runtime (also known as RainCodeLegacySqlDB2OleDbSqlServer) across multiple Raincode products. The dual SQL runtime targets both SQL Server and Db2, using the Microsoft OLE DB Provider for DB2. It can leverage Microsoft Distributed Transaction Coordinator (MSDTC, or DTC) to allow distributing the transaction and guarantee transactional integrity between SQL Server and Db2.
8.1. Prerequisites
-
SQL Server
-
Db2
-
Raincode Stack
-
Microsoft OLE DB Provider for DB2
-
Create packages in Db2 using Data Access Tool (when using DTC)
-
8.2. RainCodeLegacySqlDB2OleDbSqlServer
This is an SQL runtime implementation compatible with the Raincode Stack suite. It is designed to enable connections to both SQL Server and Db2, allowing a single COBOL program to work with both databases in the same execution.
| It is not a generic SQL runtime that can be used to target any SQL database; it is confined to targeting SQL Server and Db2. |
The rest of this section will explain how RainCodeLegacySqlDB2OleDbSqlServer works. Later sections will explain how to configure and use it in the Raincode product suite with the help of samples.
SQL Server is the main database, and when the program starts, a connection is opened using the connection string specified in the configuration file (see Configuration file). All EXEC SQL statements will be run against SQL Server until it encounters an EXEC SQL CONNECT TO statement.
When an EXEC SQL CONNECT TO statement is executed, RainCodeLegacySqlDB2OleDbSqlServer establishes a connection to Db2 using the name specified in the CONNECT TO statement (see the Configuration file for details on how to configure this). Once the connection is established, all subsequent EXEC SQL statements will be executed against Db2, until a new CONNECT TO, SET CONNECTION or CONNECT RESET command is issued.
SET CONNECTION will switch to a previously opened Db2 connection.
CONNECT RESET will set the Db2 connection aside (not closed), and all subsequent SQL queries will be run against SQL Server. Calling CONNECT RESET always causes RainCodeLegacySqlDB2OleDbSqlServer to switch back to using the SQL Server connection.
8.3. Instantiating RainCodeLegacySqlDB2OleDbSqlServer
The RainCodeLegacySqlDB2OleDbSqlServer requires two or more connection strings: one for SQL Server and one or more for Db2. To achieve this, RainCodeLegacySqlDB2OleDbSqlServer requires a configuration file providing, among other things, the necessary connection strings.
In the Raincode Stack suite, wherever a connection string can be specified, and when using RainCodeLegacySqlDB2OleDbSqlServer, the path to the configuration file should be specified instead. For instance, in Raincode JCL, RcDbConnections.csv should have a plan specifying RainCodeLegacySqlDB2OleDbSqlServer as the SQL target, and instead of a connection string, the path to a configuration file, like so:
DUALPLAN,RainCodeLegacySqlDB2OleDbSqlServer,DualRuntimeConfig.cfg
8.3.1. Configuration file
| The format of this file is subject to change in the future. |
The configuration is an XML file defining the following attributes:
-
SqlServerConnectionString: A mandatory connection string for SQL Server.
-
XXXX_ConnectionString: An optional connection string for Db2. Replace XXXX with the name passed to the
CONNECT TOin the COBOL program. You can specify multiple such connection strings, one for each Db2 instance that the program can connect to. -
UseDTC: An optional boolean flag specifying whether the dual runtime should use DTC (Distributed Transaction Coordinator).
Valid values are
trueandfalse(case insensitive). The default value isfalse.In practice, this suppresses any ambient transaction by instantiating a
TransactionScopewith optionTransactionScopeOption.Suppress. Commits and rollbacks are handled separately for each database used.When UseDTC="true", make sure to specifyUnits of Work=DUW;AutoCommit=False;in the OLE DB for Db2 connection string, otherwise the distributed transaction will fail with exceptionSystem.InvalidOperationException: The ITransactionLocal interface is not supported by the 'DB2OLEDB' provider. Local transactions are unavailable with the current provider.when enlisting the Db2 connection into the current transaction.When UseDTC="false", make sure to specifyUnits of Work=RUW;AutoCommit=False;in the OLE DB for Db2 connection string, otherwise you’ll get exceptionSystem.InvalidOperationException: The ITransactionLocal interface is not supported by the 'DB2OLEDB' provider. Local transactions are unavailable with the current provider.when querying Db2 for the first time.
8.3.2. Samples
Three sample examples are provided to illustrate how the dual runtime integrates with the different Raincode products:
-
Raincode JCL
-
Raincode QIX
-
Raincode Stored Procedure Runner
These can be found in %RCDIR%\samples\Dual SQL runtime
Sample batch job: batch sample
This sample shows how to run a batch job with the dual SQL runtime. It consists of a single COBOL program that showcases the dual SQL runtime and distributed transactions.
Description of files
-
dual.jcl: A JCL script used to execute a batch job. It starts the program
DUALCOBusing the planDUALPLAN.//SIMPLE JOB CLASS=A,MSGCLASS=C //STEP0 EXEC PGM=IKJEFT01 //SYSTSIN DD * RUN PROGRAM(DUALCOB) PLAN(DUALPLAN) END /*
-
RcDbConnections.csv: A database connections file mapping
DUALPLANto theRainCodeLegacySqlDB2OleDbSqlServerand the configuration file for said runtime.DUALPLAN,RainCodeLegacySqlDB2OleDbSqlServer,DualRuntimeConfig.cfg
-
DualRuntimeConfig.cfg: An XML configuration file, specific to
DualRuntimeConfig.cfg. It’s contains all necessary connection strings to be used by the dual SQL runtime.<RainCodeLegacySqlDDB2OleDbSqlServer SqlServerConnectionString="..." DB2SRV_ConnectionString="..." />
-
DUALCOB.cob: A COBOL program that connects to Db2 and performs the following SQL queries (not necessarily in this order):
-
SELECT on SQL Server
-
SELECT on Db2
-
INSERT on Db2
-
CONNECT TO
-
SET CONNECTION
-
CONNECT RESET
-
-
sqlserver.ddl and db2.ddl: the DDLs for creating the tables used in
DUALCOB.COB.
Running the sample
-
Update the connection strings in DualRuntimeConfig.cfg
-
Create the required tables in SQL Server and Db2 using the provided DDL files
-
Compile the program by running ./compile.ps1
-
Execute the program with ./run.ps1
After the run completes, you should see the following in the log output:
BEGIN SQL Server SELECT: SQLCODE: 0000000000 WS-C2: initial sql server data -------------- Connect to 'DB2SRV ': SQLCODE: 0000000000 -------------- DB2 Init data SQLCODE: 0000000000 -------------- DB2 SELECT: SQLCODE: 0000000000 C1: initial db2 data -------------- DB2 INSERT: SQLCODE: 0000000000 -------------- DB2 SELECT: SQLCODE: 0000000000 C1: John Dough -------------- SQLCODE: 0000000000 SQL Server SELECT: SQLCODE: 0000000000 WS-C2: initial sql server data -------------- SET CONNECTION: SQLCODE: 0000000000 -------------- DB2 INSERT: SQLCODE: 0000000000 -------------- DB2 SELECT: SQLCODE: 0000000000 C1: John Dough -------------- END
Sample QIX transaction: qix sample
This sample shows how to run a Raincode QIX transaction, running a COBOL program showcasing the dual SQL runtime and distributed transaction.
Description of files
-
createregion.ps1: Edits the file to add connection strings and run to create the QIX region
-
buildbms.ps1: PowerShell script to compile the screen
-
MMENU.bms: the map used by the transaction
-
compile.ps1: PowerShell script to compile the COBOL program
-
DualRuntimeConfig.cfg: configuration file for the
RainCodeLegacySqlDB2OleDbSqlServerSQL runtime. It’s an XML file containing all necessary connection strings to be used by the dual SQL runtime.<RainCodeLegacySqlDDB2OleDbSqlServer SqlServerConnectionString="..." DB2SRV_ConnectionString="..." />
-
DUALCOBQIX.cob: A COBOL program that connects to Db2 and performs the following SQL queries (not necessarily in this order):
-
SELECT on SQL Server
-
SELECT on Db2
-
INSERT on Db2
-
CONNECT TO
-
SET CONNECTION
-
CONNECT RESET
-
-
sqlserver.ddl and db2.ddl: the DDLs for creating the tables used in
DUALCOB.COB. -
startqix.ps1: PowerShell script to start the Raincode QIX region
Running the sample
-
Update the application connection strings in DualRuntimeConfig.cfg.
-
Update the QIX connection string in createregion.ps1 and startqix.ps1.
-
Create the required tables in SQL Server and Db2 using the provided DDL files.
-
Compile the map with buildbms.ps1
-
Compile the program with compile.ps1
-
Run startqix.ps1
-
In a 3270 terminal emulator, connect to the QIX terminal server.
After the run completes, you should see the following on the terminal emulator:
MYTR CUSTOMER CATALOG Raincode TERMID: DEMO 08:46 SQL Server SELECT: SQLCODE = 00000000, C2 = initial sql server data Connect to: DB2SRV , SQLCODE = 00000000 DB2 Init data (DELETE): SQLCODE = 00000000 DB2 Init data (INSERT): SQLCODE = 00000000 DB2 SELECT: SQLCODE = 00000000, C1 = initial db2 data DB2 INSERT: SQLCODE = 00000000 DB2 SELECT: SQLCODE = 00000000, C1 = John Dough CONNECT RESET SQLCODE = 00000000 SQL Server SELECT: SQLCODE = 00000000, C2 = initial sql server data SET CONNECTION: SQLCODE = 00000000 DB2 INSERT: SQLCODE = 00000000 F3: Exit ENTER: Process
Sample COBOL stored procedure: sp sample
This sample shows how to run a COBOL stored procedure using the dual SQL runtime, in the context of the Raincode Stored Procedure Runner.
Description of files
-
compile.ps1: A PowerShell script to compile the COBOL program and generate the C# helper program.
-
config.xml: An XML configuration file for the Raincode Stored Procedure Runner. In the context of using the dual sql runtime, the most important lines are these:
SqlRuntime="RainCodeLegacySqlDB2OleDbSqlServer" SqlRuntimeConnectionString="path_to_DualRuntimeConfig.cfg"
The other attributes
ProgramsPath,HelpersPathshould be filled according to Raincode Stored Procedure Runner Configuration file -
DualRuntimeConfig.cfg: configuration file for the
RainCodeLegacySqlDB2OleDbSqlServerSQL runtime. It’s an XML file containing all necessary connection strings to be used by the dual SQL runtime. In the context of running a COBOL stored procedure, theUseDTCattribute is set to false.<RainCodeLegacySqlDDB2OleDbSqlServer SqlServerConnectionString="..." DB2SRV_ConnectionString="..." UseDTC="false" />
-
DUALCOBSP.cob: A COBOL program that connects to Db2 and performs the following SQL queries (not necessarily in this order):
-
SELECT on SQL Server
-
SELECT on Db2
-
INSERT on Db2
-
CONNECT TO
-
SET CONNECTION
-
CONNECT RESET
-
-
sqlserver.ddl and db2.ddl: the DDLs for creating the tables used in
DUALCOB.COB -
startqix.ps1: A PowerShell script to start the Raincode QIX region
Running the sample
Run compile.ps1 to generate the helper program and the .dll file of the COBOL program. Then, follow instructions at Deploying a COBOL stored procedure to deploy the COBOL stored procedure.
Specifically, udpate $env:RCDIR\StoredProcedureRunner\config.xml with appropriate values, using the config.xml included in this sample as reference.
The COBOL stored procedure can be tested by running the following T-SQL script in SQL Server Management Studio, for example.
DECLARE @return_value int EXEC @return_value = [dbo].[DUALCOBSP] @P0 = 42 SELECT 'Return Value' = @return_value GO
After the successful execution, you should see the following output in the Messages tab:
BEGIN2 P1: 000000042 SQL Server SELECT: SQLCODE: 0000000000 WS-C2: initial sql server data -------------- Connect to 'DB2SRV ': SQLCODE: 0000000000 -------------- DB2 SELECT: SQLCODE: 0000000000 C1: John Dough -------------- DB2 INSERT: SQLCODE: 0000000000 --------- STDOUT message(s) from external script: ----- DB2 SELECT: SQLCODE: 0000000000 C1: John Dough -------------- SQLCODE: 0000000000 SQL Server SELECT: SQLCODE: 0000000000 WS-C2: initial sql server data -------------- SET CONNECTION: SQLCODE: 0000000000 -------------- DB2 INSERT: SQLCODE: 0000000000 -------------- DB2 SELECT: SQLCODE: 0000000000 C1: John Dough -------------- END
8.4. Troubleshooting
8.4.1. System.InvalidOperationException: The 'DB2OLEDB' provider is not registered on the local machine.
Cause: The Microsoft OLE DB Provider for Db2 is not installed.
Fix: install Microsoft OLE DB Provider for Db2
8.4.2. System.Transactions.TransactionManagerCommunicationException: Network access for Distributed Transaction Manager (MSDTC) has been disabled.
Cause: MSDTC network access is disabled.
Fix: Enable MSDTC network access in Component Services
8.4.3. Error: MSDTC was unable to read its configuration information. (0x8004D027)
Cause: when running a COBOL stored procedure with the dual sql runtime, the Db2 connection is enlisted in the TransactionScope, causing MSDTC to kick in. MSDTC does not work in SQL Server Language Extensions (the environment used to run a COBOL stored procedure).
Fix: Disable DTC by specifying xml attribute UseDTC="false" in the configuration file.
8.4.4. System.InvalidOperationException: The ITransactionLocal interface is not supported by the 'DB2OLEDB' provider. Local transactions are unavailable with the current provider.
Cause: There’s a mismatch in the configuration file.
Fix:
-
When DTC is used, make sure you specify
Units of Work=DUWin the Db2 connection string. -
Without DTC, make sure you specify
Units of Work=RUWin the Db2 connection string.