Introducing Modernization Workbench

Introduces Modernization Workbench.

Micro Focus Modernization Workbench (MW) offers centralized storage and analysis of enterprise application portfolios:

  • Language-specific parsers generate a common repository of application objects, in the industrial-strength DBMS of your choice.
  • Sophisticated analysis tools give you convenient interactive access to the repository, in a multiuser environment that facilitates exchange of information and insight across the enterprise.

The result is a single easy-to-use interface in which you analyze assets written in modern languages like Java and C# alongside assets written in legacy languages like Cobol and PL/I. And in which you perform the analysis with industry-leading tools that offer deep, detailed, and comprehensive insight into complex modern distributed applications.

  • Modernization Workbench Products
    Introduces Modernization Workbench products.
  • How Modernization Workbench Models Applications
    Introduces the Modernization Workbench object and construct models.
  • Workspaces and Projects
    Describes Modernization Workbench workspaces and projects.
  • Single-User versus Multiuser Environments
    Compares Modernization Workbench single-user and multiuser environments.
  • Multiuser Environment Basics
    Introduces the Modernization Workbench multiuser environment
Copyright 2010 Micro Focus (IP) Limited. All rights reserved.


Modernization Workbench Products

Introduces Modernization Workbench products.

Modernization Workbench is a suite of PC-based software products for storing, analyzing, and re-architecting enterprise applications. The products are deployed in an integrated environment with access to a common repository of program objects. Language-specific parsers generate repository models that serve as the basis for a rich set of diagrams, reports, and other documentation. Each product is separately licensed.

  • Application Analyzer
    Introduces Application Analyzer.
  • Enterprise View
    Introduces Enterprise View.
  • Business Rule Manager
    Introduces Business Rule Manager.
  • Application Architect
    Introduces Application Architect.
Parent topic: Introducing Modernization Workbench


Application Analyzer

Introduces Application Analyzer.

Application Analyzer is a robust set of non-invasive interactive tools that work with source code, system files, DDL, screen maps, and more. Use it for analyzing and documenting legacy systems at both the application and program levels.

Use Application Analyzer at the application level to:

  • Create diagrams of applications.
  • Perform change analysis across applications.
  • Estimate application complexity and effort.

Use Application Analyzer at the program level to:

  • Perform program analysis in stages.
  • Perform impact analysis on a program.
  • Model and search the repository.
Parent topic: Modernization Workbench Products


Enterprise View

Introduces Enterprise View.

Enterprise View (EV) is a Web server-based tool that offers IT executives "at-a-glance" application portfolio management (APM). EV charts and tables provide powerful graphical insight into APM trends and current status, on dashboards that make it easy to drill down from the "big picture" captured at the highest level to the lower-level details that support it.

With EV you can:
  • Create, distribute, and gather responses to surveys about your organization’s application portfolio and business processes.
  • Mine application complexity metrics from the MW repository.
  • Track survey and repository metrics in EV's rich variety of interactive charts, displayed on dashboards structured to show the rollup of data from lower to higher levels.

For users who need to drill down even deeper into an application portfolio, EV lets you search, filter, and analyze MW repository data. You can:

  • Query the repository for information about application objects.
  • Search, browse, and edit business rules and triggers.
Parent topic: Modernization Workbench Products


Business Rule Manager

Introduces Business Rule Manager.

Business rule mining encapsulates your application’s business logic, making the application easier to understand, document, and test. It lowers the risk and cost of maintenance and enhancement, and ensures that all business logic is implemented in modernization efforts.

A business rule is a named container for program code that performs a discrete task in a business process. It identifies and documents the code segment that performs this task. A business rule named Calculate Date Difference, for example, might consist of this segment:

COMPUTE WS-DATE-VARIANCE = WS-C-CARD-DATE-CCYYMM - WS-TODAYS-DATE-CCYYMM.

Business Rule Manager (BRM) offers a powerful set of tools for autodetecting, and autodocumenting, business rules. You can batch edit rule attributes; create custom attributes suited to your particular needs; match input/output data elements with the business names you’ve assigned to them in your project glossary; and much more.

Parent topic: Modernization Workbench Products


Application Architect

Introduces Application Architect.

Application Architect offers a variety of advanced algorithms for slicing logic from program source: all the code you need for a computation, for example, or the code you need to "specialize" a program based on the value of a variable. You can create a self-contained program, called a component, from the sliced code or simply generate a list of sliced constructs for further analysis.

Both the component generation and list functions are supported in the full version of the Component Maker tool available to users of Application Architect. The list function only is supported in the restricted version of Component Maker, called Logic Analyzer, available to users of Application Analyzer.

Parent topic: Modernization Workbench Products


How Modernization Workbench Models Applications

Introduces the Modernization Workbench object and construct models.

Modernization Workbench is a model-based technology that generates information about legacy applications at two levels:

  • Application-level information describes the relationships between the objects that comprise an application: its programs, copybooks, JCLs, BMS files, and so forth.
  • Object-level information describes the relationships between the abstract syntactical constructs that comprise an object: its sections, paragraphs, statements, conditions, variables, and so forth.

At both levels, the models are conceived as Entity Relationship Diagrams (ERDs). Each object or construct the parser generates is modeled as an entity in one of the diagrams. The models are represented in tree form to users.

  • Understanding Application-Level Information
    Describes the Modernization Workbench object model.
  • Understanding Object-Level Information
    Describes the Modernization Workbench construct model.
Parent topic: Introducing Modernization Workbench


Understanding Application-Level Information

Describes the Modernization Workbench object model.

The object model for an application defines the relationships between the objects that comprise the application. These can be physical objects, like program source files or JCLs, or logical objects that identify abstract program elements: entry points, data stores, screens, jobs, and the like.

The relationships between objects describe the ways in which they interact. In the figure, the source file GSS.CBL defines the GSS program. The program, in turn, reads the data file GSS.FCSTSEC.

Parent topic: How Modernization Workbench Models Applications
Related information
Understanding Object-Level Information
Workspaces and Projects


Understanding Object-Level Information

Describes the Modernization Workbench construct model.

The construct model for an object defines its syntax. It shows in abstract form how the syntactical constructs that comprise the object (its sections, paragraphs, statements, conditions, variables, and so forth) are related. A variable, for example, can be related in the construct model to its declaration, a dataport (if it is used in an I/O statement), or a condition (if the condition uses an expression of which the variable forms a part).

The figure shows a portion of the construct model for the GSS program. The model shows that the program executes a PERFORM statement if the value of the variable EIBRESP satisfies the condition EIBRESP NOT EQUAL DFHRESP(NORMAL).

If you are interested in investigating other uses of EIBRESP in the program, you can navigate to the declaration of the variable in the construct model, and from the declaration to each instance of the variable’s use in the program.

Parent topic: How Modernization Workbench Models Applications
Related information
Understanding Application-Level Information
Workspaces and Projects


Workspaces and Projects

Describes Modernization Workbench workspaces and projects.

Modernization Workbench uses the familiar notions of workspace and project to help users organize application source files conveniently. A workspace is a named container for one or more applications. Every workspace has a corresponding database repository of model objects.

You can divide a workspace up into projects that represent different applications or different portions of an application. You might have a project for the batch portion of an application and another project for the online portion, for example. You can also use a project to collect items for discrete tasks: all the source files affected by a change request, for example.

When you set up a workspace in Modernization Workbench, the system creates a default project with the same name as the workspace. You can create new projects and move or copy entities between projects as needed.

A workspace can contain objects coded in different programming languages. You can create multiple workspaces on the same machine.

Parent topic: Introducing Modernization Workbench
Related tasks
Creating a Workspace in Oracle or DB/2
Connecting to a Workspace in Oracle or DB/2
Opening a Workspace
Registering Source Files
Related information
Understanding Application-Level Information
Understanding Object-Level Information


Single-User versus Multiuser Environments

Compares Modernization Workbench single-user and multiuser environments.

Modernization Workbench can be deployed in a single-user or multiuser environment:

  • In a single-user environment, the workspace repository resides on the local machine, and can be accessed by the owner of the machine only. Limited facilities exist for sharing work with other users.
  • In a multiuser environment, the workspace repository resides on a database server, and can be accessed by any user with appropriate database privileges.

Most installations deploy Modernization Workbench in a multiuser environment. Single-user mode typically is reserved for special needs.

The guidelines that follow for multiuser environments apply equally to single-user environments. For installation instructions, see the installation guide for your product.

Parent topic: Introducing Modernization Workbench
Related information
Multiuser Environment Basics


Multiuser Environment Basics

Introduces the Modernization Workbench multiuser environment

A multiuser Modernization Workbench environment gives members of a development team common access to a workspace repository on a database server. Workspace setup is the responsibility of a master user, leaving team members free to focus on their tasks. Common access makes it easy to share insights across the team, and ensures that team members view the same source and work with the same option settings.

  • Deployment Scenario
    Provides an overview of the standard deployment scenario.
  • Workbench Privileges
    Provides an overview of workbench privileges.
  • Dropping Indexes
    Describes how to drop and restore repository indexes.
  • Computing Statistics
    Describes how to gather system statistics for the RDBMS optimizer.
Parent topic: Introducing Modernization Workbench
Related information
Single-User versus Multiuser Environments


Deployment Scenario

Provides an overview of the standard deployment scenario.

The figure below shows a standard deployment scenario for the Modernization Workbench multiuser environment. The role each machine performs and its key relationships are described below. Keep in mind that the view is logical. Machine roles can be combined or separated as required.

  • Mainframe and Network Server
    Describes the role of the mainframe and network server.
  • Modernization Workbench Server
    Describes the role of the workbench server.
  • Database Server
    Describes the role of the database server.
  • Modernization Workbench Client
    Describes the role of the workbench client.
  • Enterprise View Web Server
    Describes the role of the Enterprise View web server.
  • Enterprise View Web Client
    Describes the role of the Enterprise View web client.
Parent topic: Multiuser Environment Basics


Mainframe and Network Server

Describes the role of the mainframe and network server.

The mainframe hosts the application to be modeled in Modernization Workbench. Application source files are downloaded from the mainframe (and, if necessary, a network server) to the Modernization Workbench server via FTP or SFTP.

Parent topic: Deployment Scenario


Modernization Workbench Server

Describes the role of the workbench server.

The Modernization Workbench server hosts workspaces, workspace support files (including the copies of application source files the workbench creates at workspace loading), and workspace output. This server leverages multiple processes to enhance parsing performance in online or batch mode.

Parsed data is sent via ODBC to the database server. Some analysis output is stored on the workbench server as well.

Parent topic: Deployment Scenario


Database Server

Describes the role of the database server.

The database server hosts the database for one or more multiuser repositories. This server provides centralized, network-accessible storage for parsed data and analysis output.

The workbench server, Enterprise View Web Server, and workbench clients access the database server via ODBC. For guidance on database setup, see the installation guide for your product.

Parent topic: Deployment Scenario


Modernization Workbench Client

Describes the role of the workbench client.

Workbench clients host the link files that let team members connect to workspaces on the workbench server. These clients access repository data stored in the database server via ODBC.

Parent topic: Deployment Scenario


Enterprise View Web Server

Describes the role of the Enterprise View web server.

The Enterprise View web server hosts services used by intranet and internet clients to display charts and to access web-based view of repositories.

Parent topic: Deployment Scenario


Enterprise View Web Client

Describes the role of the Enterprise View web client.

Enterprise View web clients provide multiuser access to charts and workspace repository data via the Enterprise View web server.

Parent topic: Deployment Scenario


Workbench Privileges

Provides an overview of workbench privileges.

Privileges in a multiuser environment work on two assumptions:

  • Team members typically do not need to modify files until they have completed analysis and are ready to test a proposed change.
  • The team lead is best situated to make the change and reverify the modified file.

For these reasons, the workbench multiuser environment has no need for file checkout and locking of the kind seen in conventional multiuser environments.

  • Understanding Master Users
    Describes Modernization Workbench master users.
  • Understanding Workspace Security Policies
    Describes workspace security policies.
  • Using the Optional File Server
    Describes the workbench file server.
  • Public and Private Visibility
    Describes the difference between public and private resources.
  • Protecting Projects
    Describes how to protect a project.
Parent topic: Multiuser Environment Basics


Understanding Master Users

Describes Modernization Workbench master users.

The user who creates a workspace on a Modernization Workbench server machine is referred to as its owner. Initially, only the owner has master user privileges for the workspace.

The master user can delete the workspace, upgrade the workspace configuration, register and verify source files, modify source, autoresolve decisions, perform restricted Clipper searches, create, assign, and delete tags, and so forth. The master user can also designate new master users for the workspace.

Ordinary users connect to the workspace from Modernization Workbench client machines. These users can perform any task not restricted to the master user: analyze programs, mine business rules, extract components, and so forth.

If you do not have master user privileges for a workspace, you will not see menu choices for privileged methods. The same team member can be a master user for one workspace and an ordinary user for another.

Parent topic: Workbench Privileges


Understanding Workspace Security Policies

Describes workspace security policies.

When you create a workspace, you can choose from two workspace security policies:

  • The Simple Security Policy recognizes two classes of users, master users and ordinary users.
  • The Three-Group Security Policy recognizes a third class of users, subject matter experts (SMEs), with special privileges to create, assign, and delete tags.

In each policy, the master user can create new master users.

Parent topic: Workbench Privileges
Related tasks
Designating Users in a Simple Security Policy
Designating Users in a Three-Group Security Policy
Related information
Designating Users for Security Policies


Using the Optional File Server

Describes the workbench file server.

When you create a workspace, you can restrict Windows access to workspace source files to master users, while using the optional File Server to make the source files available in the workbench only to ordinary users. As long as you set up workspace folder privileges correctly, ordinary users can view and analyze sources in the workbench, but cannot access them otherwise. For file server installation instructions, see the installation guide for your product.

Parent topic: Workbench Privileges


Public and Private Visibility

Describes the difference between public and private resources.

In a multiuser environment, the user who creates a workspace resource (a project or a Clipper list, for example) is referred to as its owner. Only the owner can share the resource with other users.

A shared, or public, resource is visible to other members of your team. A private resource is not. If a public resource is protected, team members can view but not edit or delete the resource. A Clipper list, for example, is always protected.

You can turn sharing on and off in the tool you use to create the resource. Look for a symbol like this one for a shared project [image] to indicate that the resource is shared.

Parent topic: Workbench Privileges
Related information
Protecting Projects


Protecting Projects

Describes how to protect a project.

By default, projects are unprotected: any user to whom the project is visible can delete the project, add source files, or remove source files.

The project owner or master user can designate a project as protected, in which case no user can delete or modify the project, including the project owner or master user: the project is read-only, until the project owner or master user turns protection off.

Turn on protection by selecting the project in the Repository pane and choosing Project > Toggle Protection. Choose Project > Toggle Protection again to turn it off. Look for a symbol like this one [image] to indicate that a project is protected.

Parent topic: Workbench Privileges
Parent topic: Setting Up Projects
Related information
Public and Private Visibility
Sharing Projects


Dropping Indexes

Describes how to drop and restore repository indexes.

If you are a master user with responsibility for verifying source files in a multiuser environment, you will almost always want to drop database indexes to improve verification performance. You will be prompted to drop indexes when you verify the application, or you can drop indexes at a time of your own choosing by selecting Prepare > Drop Repository Indexes.

When you drop indexes, you are prompted to restore the indexes when you analyze the files. If you want to restore indexes at a time of your own choosing, choose Prepare > Restore Repository Indexes.

Parent topic: Multiuser Environment Basics
Related information
Computing Statistics


Computing Statistics

Describes how to gather system statistics for the RDBMS optimizer.

You typically need to gather statistics for your system before the optimizer for your RDBMS can determine the most efficient way to execute SQL statements. If you are a master user with responsibility for verifying source files in a multiuser environment, you will almost always want to gather system statistics after verification to improve performance of the Modernization Workbench analysis tools.

Check with your DBA before gathering system statistics. In Oracle, you must have GATHER_SYSTEM_STATISTICS privileges to execute this method. Make sure to restore indexes before gathering system statistics.

To gather system statistics, choose Prepare > Compute Database Statistics. You can view the generated statistics in your RDBMS.

Parent topic: Multiuser Environment Basics
Related information
Dropping Indexes


Modernization Workbench Basics

Introduces basic Modernization Workbench tasks.

This section describes elementary workbench tasks: how to create a workspace and project, register and verify source files, use the browser and other workbench windows, set options, and export system diagrams and reports.

  • Creating a Workspace in Oracle or DB/2
    Describes how to create a workspace in Oracle or DB/2.
  • Creating a Workspace in SQL Server
    Describes how to create workspaces in SQL Server.
  • Designating Users for Security Policies
    Introduces Modernization Workbench security policies.
  • Refreshing the Workspace Path
    Describes how to refresh the path of a workspace when you share the workspace folder after creating the workspace.
  • Connecting to a Workspace in Oracle or DB/2
    Describes how ordinary workbench users connect to a workspace.
  • Connecting to a Workspace in SQL Server
    Describes how ordinary workbench users connect to a workspace.
  • Opening a Workspace
    Describes how to open a workspace.
  • Registering Source Files
    Describes how to register source files in the repository.
  • Verifying Source Files
    Describes how to verify source files.
  • Using the Modernization Workbench Main Window
    Introduces the Modernization Workbench main window.
  • Using Tool Windows
    Provides an overview of tool window behavior.
  • Setting Options
    Provides an overview of Modernization Workbench options.
  • Working with Reports and Diagrams
    Provides an overview of diagram and report generation in workbench tools.
  • Using the Guide for a Tool
    Describes how to use the guide for a workbench tool.


Creating a Workspace in Oracle or DB/2

Describes how to create a workspace in Oracle or DB/2.

You create a workspace on the Modernization Workbench server machine. Other users connect to the workspace from Modernization Workbench client machines. The workspace repository resides on a database server, and can be accessed by any user with database privileges to the repository.
Do not modify the name of the workspace after you create it. Doing so will cause unpredictable results.

Before creating a workspace, you must configure an ODBC data source name (DSN) for the database that holds the workspace repository, as described in the installation guide for your product. You will need the following DSN configuration information to create the workspace:

  • The data source name.
  • The database schema name your DBA created for the repository.
  • The database user name and password that give access to the schema.
  • If required by your DBMS, the name of the tablespace your DBA created for the repository. If the DBA also created a tablespace for database indexes, you will need the name of that tablespace as well.

The folder in which you plan to create workspaces must be shared with team members. It’s usually more convenient to share the folder before you create workspaces, but you can do it afterward if necessary, then refresh the workspace path.

It is the responsibility of the workspace creator to designate users for security policies. Perform this task as soon as you have finished creating the workspace, then periodically edit the list of users as required.

STEPS:
  1. Choose Start > Programs > Micro Focus > Modernization Workbench Administration. The Administration window opens.

  2. Choose Administer > New Workspace. The Create new workspace dialog opens.

  3. In the Create new workspace dialog, double-click the New Workspace icon for the RDBMS in use at your site or select it and click OK. The New workspace dialog opens.

  4. In the New workspace dialog, choose the location for the workspace in the Save in drop-down. In the File name field, enter the name of the workspace. Choose a name that describes the legacy application as closely as possible. Click Save. The Define Connection Parameters dialog opens.

  5. In the Define Connection Parameters dialog, click the Connection tab. On the Connection tab, enter:
    • The ODBC data source name you defined at ODBC data source configuration. If you have not defined a data source name, or want to use a different data source name, click ODBC Manager to open the data source name configuration dialog, then follow the instructions for ODBC data source configuration in the installation guide for your product.
    • The database schema name your DBA created for the workspace repository.
    • The database user name and password that give access to the schema.
    • If required by your DBMS, the name of the tablespace your DBA created for the repository. If your DBA also created a tablespace for database indexes, enter the name of that tablespace in the Tablespace for Indexes field. These fields are displayed only for DBMSs that require a tablespace name to be specified.
  6. Click the Security tab. In the Policies list box, select:
    • Simple Security Policy if you want to enforce a workspace security policy that recognizes two classes of users, master users and ordinary users.
    • Three-Group Security Policy if you want to enforce a workspace security policy that recognizes a third class of users, subject matter experts (SMEs), with special privileges to create, assign, and delete tags.
  7. In the Files access group box on the Security tab, select:
    • Direct sources access via Windows share if your site does not restrict Windows access to workspace source files to the master user.
    • Secure sources access via RMW file server if your site restricts Windows access to workspace source files to the master user, while using the optional file server to make the source files available in the workbench to ordinary users. Make sure the values for the server name and port number fields are correct.
    For File Server installation and setup instructions, see the installation guide for your product.
  8. Click OK.
    If you created the workspace in a non-shared folder, you are warned to that effect and prompted to share the folder. After you share the folder, make sure to refresh the workspace path.
    You are notified that the workspace was created successfully. The workbench creates a workspace file (.rwp) and a folder with the same name in the specified location. The workspace folder contains support files and subfolders for workbench output. A project with the same name as the workspace is displayed in the Repository Browser.
Parent topic: Modernization Workbench Basics
Related tasks
Connecting to a Workspace in Oracle or DB/2
Opening a Workspace
Registering Source Files
Related information
Workspaces and Projects


Creating a Workspace in SQL Server

Describes how to create workspaces in SQL Server.

You create a workspace on the Modernization Workbench server machine. Other users connect to the workspace from Modernization Workbench client machines. The workspace repository resides on a database server, and can be accessed by any user with database privileges to the repository.

Do not modify the name of the workspace after you create it. Doing so will cause unpredictable results.

The folder in which you plan to create workspaces must be shared with team members. It’s usually more convenient to share the folder before you create workspaces, but you can do it afterward if necessary, then refresh the workspace path.

It is the responsibility of the workspace creator to designate users for security policies. Perform this task as soon as you have finished creating the workspace, then periodically edit the list of users as required.

You can use Microsoft SQL Server Express to create a workspace on your local machine. Modernization Workbench creates a database for the workspace "on the fly," with no intervention on your part. If you do use SQL Server Express, keep in mind that the Windows user who creates the workspace must have been configured with appropriate permissions in SQL Server Express. The user who installed SQL Server Express will always have the appropriate permissions. See the SQL Server Express documentation for configuration instructions.

For Windows XP installations using the Italian locale, you must set the Time format in the Control Panel Regional Language Options to "HH:mm:ss" before attempting to verify an MW workspace with a SQL Server repository. Click Settings > Control Panel > Regional and Language Options > Customize > Time and choose "HH:mm:ss" from the Time format drop-down.
STEPS:
  1. Choose Start > Programs > Micro Focus > Modernization Workbench Administration. The Administration window opens.

  2. Choose Administer > New Workspace. The Create new workspace dialog opens.

  3. In the Create new workspace dialog, double-click the New Workspace icon for the RDBMS in use at your site or select it and click OK. The New workspace dialog opens.

  4. In the New workspace dialog, choose the location for the workspace in the Save in drop-down. In the File name field, enter the name of the workspace. Choose a name that describes the legacy application as closely as possible. Click Save. The Define Connection Parameters dialog opens.
    This dialog does not open for Microsoft SQL Server Express. The workbench starts creating the workspace immediately.

  5. In the Define Connection Parameters dialog, click the Connection tab. Define the connection:
    • In the Server field, enter the server name. The server name must be of the form <machine>\<SQL server>.
    • In the Database Name field, enter the database name your DBA created for the workspace repository.
    • In the Integrated Security drop-down, select the integrated security provider interface in use at your site. Choose:
      • Windows Authentication if users connect to the workspace repository through a Windows user account.
      • Server Authentication if users connect to the workspace repository through an SQL Server login account.
    • If you chose Server Authentication, enter the database login name in the User Name field and the login password in the Password field.
      The database user name and login name are typically, but not always, the same. If you have trouble connecting, it may be because you are specifying the database user name rather than the login name.
  6. Click the Security tab. In the Policies list box, select:
    • Simple Security Policy if you want to enforce a workspace security policy that recognizes two classes of users, master users and ordinary users.
    • Three-Group Security Policy if you want to enforce a workspace security policy that recognizes a third class of users, subject matter experts (SMEs), with special privileges to create, assign, and delete tags.
  7. In the Files access group box on the Security tab, select:
    • Direct sources access via Windows share if your site does not restrict Windows access to workspace source files to the master user.
    • Secure sources access via RMW file server if your site restricts Windows access to workspace source files to the master user, while using the optional file server to make the source files available in the workbench to ordinary users. Make sure the values for the server name and port number fields are correct.
    For File Server installation and setup instructions, see the installation guide for your product.
  8. Click OK.
    If you created the workspace in a non-shared folder, you are warned to that effect and prompted to share the folder. After you share the folder, make sure to refresh the workspace path.
    You are notified that the workspace was created successfully. The workbench creates a workspace file (.rwp) and a folder with the same name in the specified location. The workspace folder contains support files and subfolders for workbench output. A project with the same name as the workspace is displayed in the Repository Browser.
Parent topic: Modernization Workbench Basics


Designating Users for Security Policies

Introduces Modernization Workbench security policies.

When you create a workspace, you choose from two workspace security policies:

  • The Simple Security Policy recognizes two classes of users, master users and ordinary users.
  • The Three-Group Security Policy recognizes a third class of users, subject matter experts (SMEs), with special privileges to create, assign, and delete tags.

In each policy, the master user can create new master users.

  • Designating Users in a Simple Security Policy
    Describes how master users set up simple security policies.
  • Designating Users in a Three-Group Security Policy
    Describes how master users set up three-group security policies.
Parent topic: Modernization Workbench Basics
Related tasks
Creating a Workspace in Oracle or DB/2


Designating Users in a Simple Security Policy

Describes how master users set up simple security policies.

A Simple Security Policy recognizes two classes of users, master users and ordinary users. Initially, only the workspace creator has master user privileges. The master user can designate new master users as described in this section.

STEPS:
  1. Choose Start > Programs > Micro Focus > Modernization Workbench Administration. The Administration window opens.

  2. Choose Administer > Edit Users. The Edit Users dialog opens.

  3. In the Edit Users dialog, select the workspace (.rwp file) for which you want to edit users and click Open. The Security dialog opens.

  4. The Security dialog displays a list of users who have connected to the workspace in the Known Users list box and a list of master users in the Master Users list box. Select a known user and click the [image] button to move the known user into the list of master users. Select a master user and click the [image] button to move the master user into the list of known users.
    Click Refresh at any time to update the lists.
  5. To create a new master user, click (New User...) in the Master User list box. A dialog opens prompting you to enter the name of the new master user. Enter the name and click OK.
  6. When you are satisfied with your entries, click Close.
Parent topic: Designating Users for Security Policies
Related tasks
Designating Users in a Three-Group Security Policy
Related information
Designating Users for Security Policies
Understanding Workspace Security Policies


Designating Users in a Three-Group Security Policy

Describes how master users set up three-group security policies.

A Three-Group Security Policy recognizes a third class of workspace users in addition to master users and ordinary users: subject matter experts (SMEs), with special privileges to create, assign, and delete tags. Initially, only the workspace creator has master user privileges. The master user can designate SMEs and new master users as described in this section.
STEPS:
  1. Choose Start > Programs > Micro Focus > Modernization Workbench Administration. The Administration window opens.

  2. Choose Administer > Edit Users. The Edit Users dialog opens.

  3. In the Edit Users dialog, select the workspace (.rwp file) for which you want to edit users and click Open. The Security dialog opens.

  4. The Subject Matter Experts and Master Users tabs of the Security dialog display a list of users who have connected to the workspace in the Known Users list box and a list of subject matter experts and master users, respectively, in the opposite list box. Select a known user and click the [image] button to move the known user into the list of subject matter experts or master users. Select a master user and click the [image] button to move the subject matter expert or master user into the list of known users.
    Click Refresh at any time to update the lists.
  5. To create a new subject matter expert or master user, click (New User...) in the Subject Matter Experts or Master Users list box. A dialog opens prompting you to enter the name of the new subject matter expert or master user. Enter the name and click OK.
  6. When you are satisfied with your entries, click Close.
Parent topic: Designating Users for Security Policies
Related tasks
Designating Users in a Simple Security Policy
Related information
Designating Users for Security Policies
Understanding Workspace Security Policies


Refreshing the Workspace Path

Describes how to refresh the path of a workspace when you share the workspace folder after creating the workspace.

The folder in which you plan to create workspaces must be shared with team members. It’s usually more convenient to share the folder before you create workspaces, but you can do it afterward if necessary, then refresh the workspace path as described below. You can also use the refresh path feature when you move a workspace.

For instructions on how to share a workspace folder, see the installation guide for your product.
STEPS:
  1. Choose Start > Programs > Micro Focus> Modernization Workbench Administration. The Administration window opens.

  2. Choose Administer > Refresh Workspace Path. The Select workspace dialog opens.

  3. In the Select workspace dialog, select the workspace (.rwp file) whose path you want to refresh and click Open. The Workspace directory network path dialog opens.

  4. In the Workspace directory network path dialog, enter the path of the workspace in the text field. The path must be of the form \machine_name\share_name\workspace_folder_name, where machine_name is the name of the machine where the shared folder resides, share_name is the value of the Share name field on the Sharing tab of the Properties dialog for the shared folder, and workspace_folder_name is the name of the folder for the workspace.
    The shared folder is the folder that contains the .rwp file for the workspace, not the workspace folder. The workspace folder (containing support files and subfolders for workbench output) resides on the same level as the .rwp file.
  5. When you are satisfied with your entry, click OK.
Parent topic: Modernization Workbench Basics
Related tasks
Creating a Workspace in Oracle or DB/2


Connecting to a Workspace in Oracle or DB/2

Describes how ordinary workbench users connect to a workspace.

Once a workspace has been created on the Modernization Workbench server machine, other users can connect to the workspace from workbench clients. When you connect to a workspace, you create a link file with connection information that points to the workspace. Because the connection information is already stored in the file, you don’t have to enter it again when you reopen the workspace connection. Like a workspace file, a link file has a .rwp extension.

Before connecting to a workspace, you must configure an ODBC data source name (DSN) for the database that holds the workspace repository you want to link to, as described in the installation guide for your product. You will need the following DSN configuration information to connect to the workspace:

  • The data source name.
  • The database schema name your DBA created for the repository you want to link to.
  • The database user name and password that give access to the schema.
STEPS:
  1. Choose Start > Programs > Micro Focus > Modernization Workbench. The Open Existing workspace dialog opens above the Modernization Workbench main window. Click Cancel to dismiss the dialog.
  2. Choose File > Build New Connection. The Define Server Workspace Connection dialog opens.

  3. In the Define Server Workspace Connection dialog, select the ODBC driver for the RDBMS in use at your site in the Database Provider drop-down. In the Required Parameters group box, enter:
    • The ODBC data source name you defined at ODBC data source configuration. If you have not defined a data source name, or want to use a different data source name, click ODBC Manager to open the data source name configuration dialog, then follow the instructions for ODBC data source configuration in the installation guide for your product.
    • The database schema name your DBA created for the workspace repository.
    • The database user name and password that give access to the schema.
    The Tablespace and Tablespace for Indexes fields are for future use.
  4. When you are satisfied with your entries in the Define Server Workspace Connection dialog, click the Browse button for the Save Link As (.rwp) field. The Save Server Workspace Connectivity dialog opens.

  5. In the Save Server Workspace Connectivity dialog, choose the location for the workspace link in the Save in drop-down. In the File name field, enter the name of the link. Click Save. The linked workspace opens in the Modernization Workbench main window. The workbench creates a link file (.rwp) in the specified location.
Parent topic: Modernization Workbench Basics
Related tasks
Creating a Workspace in Oracle or DB/2
Opening a Workspace
Registering Source Files
Related information
Workspaces and Projects


Connecting to a Workspace in SQL Server

Describes how ordinary workbench users connect to a workspace.

Once a workspace has been created on the Modernization Workbench server machine, other users can connect to the workspace from workbench clients. When you connect to a workspace, you create a link file with connection information that points to the workspace. Because the connection information is already stored in the file, you don’t have to enter it again when you reopen the workspace connection. Like a workspace file, a link file has a .rwp extension.

STEPS:
  1. Choose Start > Programs > Micro Focus > Modernization Workbench. The Open Existing workspace dialog opens above the Modernization Workbench main window. Click Cancel to dismiss the dialog.
  2. Choose File > Build New Connection. The Define Server Workspace Connection dialog opens.

  3. In the Define Server Workspace Connection dialog, click the Connection tab. Define the connection:
    • In the Server field, enter the server name. The server name must be of the form <machine>\<SQL server>.
    • In the Database Name field, enter the database name your DBA created for the workspace repository.
    • In the Integrated Security drop-down, select the integrated security provider interface in use at your site. Choose:
      • Windows Authentication if you connect to the workspace repository through a Windows user account.
      • Server Authentication if you connect to the workspace repository through an SQL Server login account.
    • If you chose Server Authentication, enter the database login name in the User Name field and the login password in the Password field.
      The database user name and login name are typically, but not always, the same. If you have trouble connecting, it may be because you are specifying the database user name rather than the login name.
  4. When you are satisfied with your entries in the Define Server Workspace Connection dialog, click the Browse button for the Save Link As (.rwp) field. The Save Server Workspace Connectivity dialog opens.

  5. In the Save Server Workspace Connectivity dialog, choose the location for the workspace link in the Save in drop-down. In the File name field, enter the name of the link. Click Save. The linked workspace opens in the Modernization Workbench main window. The workbench creates a link file (.rwp) in the specified location.
Parent topic: Modernization Workbench Basics


Opening a Workspace

Describes how to open a workspace.

The procedure for opening a workspace is the same whether you created the workspace or simply connected to it. You can also open a workspace by double-clicking it in the file system. You don’t have to close a workspace before opening another workspace.

STEPS:
  1. Choose Start > Programs > Micro Focus > Modernization Workbench. The Open Existing workspace dialog opens above the Modernization Workbench main window.
    If Modernization Workbench is already open, choose File > Open Workspace.

  2. Click the tab you want to work in:

    • In the Existing tab, choose the drive and folder for the workspace you want to open. A list of workspaces in the selected folder is displayed in the righthand pane. Double-click the workspace you want to open, or select it and click OK.

    • In the Recent tab, double-click the recently opened workspace you want to open, or select it and click OK.
    If you created the workspace in a previous release of Modernization Workbench, the system prompts you to upgrade the workspace to the new release. Click Yes.
    The workspace is displayed in the Modernization Workbench window. If a workspace was already open in the window, the selected workspace replaces it.
Parent topic: Modernization Workbench Basics
Related tasks
Creating a Workspace in Oracle or DB/2
Connecting to a Workspace in Oracle or DB/2
Registering Source Files
Related information
Workspaces and Projects


Registering Source Files

Describes how to register source files in the repository.

Before you can analyze application source files in Modernization Workbench, you need to load, or register, the source files in a workspace.

In a multiuser environment, only a master user can register source files.

The workbench creates copies of the registered files on the server machine (or locally in a single-user environment) in the Sources folder for the workspace. These are the files you view and edit in the workbench tools. You can restore a file to its original state, update it to its current state, or export it as necessary.

Source files must have recognized DOS file extensions before they can be registered. You can view and add to the recognized extensions in the Workspace Registration options window. Files without extensions are checked for content, and if the content is recognized, the files are registered with appropriate extensions appended.

The workbench assumes that input source files are ASCII files in DOS format. Occasionally, files may be converted incorrectly from other formats to DOS-based ASCII with an extra special character (like “M”) at the end of each line. While Modernization Workbench accepts these files as input, some workbench tools may not work correctly with them. Make sure all source files are in valid ASCII format.

You can register source files in compressed formats (ZIP or RAR), as well as uncompressed formats. Modernization Workbench automatically unpacks the compressed file and registers its contents.

The workbench extracts compressed source files using the command line syntax for archiver versions most widely in use. If you use newer archiver versions, specify the command line syntax in the Archivers tab of the User Preferences window.

Workspace Registration options determine registration behavior. The default values for these options are preset based on your configuration and should be appropriate for most installations.

STEPS:
  1. In the Repository Browser, create a project for the source files you want to register, or use the default project. To create a project, choose Project > New Project. The Create Project dialog opens. Enter the name of the new project and click OK. The new project is displayed in the Repository Browser.
  2. Select the project in the Repository Browser, then drag-and-drop the file or folder for the source files you want to register onto the Repository Browser. You are notified that you have registered the files successfully and are prompted to verify the files. Click Close. The Repository Browser displays the contents of the new workspace, organized by file type.
    In the notification dialog, select Never ask again if you do not want to be prompted to verify files. On the Environment tab of the User Preferences window, select Ask user about verification if you want to be prompted again.
  • Setting Registration Options: Extensions Tab
    Describes how to set workspace registration options on the Extensions tab.
  • Setting Registration Options: Source Files Tab
    Describes how to set workspace registration options on the Source Files tab.
  • Creating New Source Files
    Describes how to create new source files.
  • Refreshing Source Files
    Describes how to update source files in the workspace.
  • Exporting Source Files from a Workspace
    Describes how to export source files from a workspace.
  • Deleting Objects from a Workspace
    Describes how to delete a file or folder from a workspace.
  • Deleting a Workspace
    Describes how to delete a workspace.
  • Japanese Language Support
    Describes Modernization Workbench support for Japanese-language applications
Parent topic: Modernization Workbench Basics
Related tasks
Creating a Workspace in Oracle or DB/2
Connecting to a Workspace in Oracle or DB/2
Opening a Workspace
Verifying Source Files
Setting Registration Options: Extensions Tab
Setting Registration Options: Source Files Tab
Setting Archivers User Preferences
Setting Environment User Preferences
Related information
Workspaces and Projects
How Verification Results Are Indicated
Understanding Master Users


Verifying Source Files

Describes how to verify source files.

Parsing, or verifying, an application source file generates the object model for the file. Only a master user can verify source files.

You can verify a single file, a group of files, all the files in a folder, or all the files in a project. It’s usually best to verify an entire project. Modernization Workbench parses the files in appropriate order, taking account of likely dependencies between file types.

You need not verify copybooks. Copybooks are parsed when the including source file is verified.

If your RPG or AS/400 Cobol application uses copy statements that reference Database Description or Device Description files, or if your MCP Cobol application uses copy statements that reference DMSII DASDL files, you need to generate copybooks for the application before you verify program files.

Workspace and Project Verification options determine verification behavior. The default values for these options are preset based on your configuration and should be appropriate for most installations.

STEPS:
  1. In the Repository Browser, select the project, folder, or files you want to verify and choose Prepare > Verify.
  2. You are prompted to drop repository indexes to improve verification performance. Click Yes. You will be prompted to restore the indexes when you analyze the files.
The parser builds an object model for each successfully verified file. For an unsuccessfully verified file, the parser builds an object model for as much of the file as it understands.
  • How Verification Results Are Indicated
    Describes how verification results are denoted.
  • Enabling Parallel Verification
    Describes how to enable parallel verification.
  • How the System Refreshes the Repository
    Describes how the system refreshes the repository.
  • Invalidating Objects Before Reverification
    Describes how to invalidate objects before reverification.
  • Setting Workspace Verification Options: Legacy Dialects Tab
    Describes how to set workspace verification options on the Legacy Dialects tab.
  • Setting Workspace Verification Options: Settings Tab
    Describes how to set workspace verification options on the Settings tab.
  • Setting Workspace Verification Options: Parallel Verification Tab
    Describes how to set workspace verification options on the Parallel Verification tab.
  • Setting Project Verification Options
    Describes how to set project verification options.
  • Identifying System Programs
    Describes how to identify system programs to the parser.
  • Specifying Boundary Decisions
    Describes how to specify a boundary decision object.
  • Generating Copybooks
    Describes how to generate copybooks for RPG programs, Cobol programs that execute in the AS/400 environment, and MCP Cobol programs.
  • Performing Post-Verification Program Analysis
    Describes how to perform post-verification program analysis.
Parent topic: Modernization Workbench Basics
Related tasks
Registering Source Files
Related information
How Verification Results Are Indicated
Viewing Verification Reports


How Verification Results Are Indicated

Describes how verification results are denoted.

If you have not verified a workspace file, the file is displayed in the Repository pane in bold type. Since the system has not generated an object model of the file’s contents, only the file itself is displayed.

A verified file shows all the objects in the model generated for the file. Verification results are denoted as follows:

  • A blue dot [image] means that the parser has verified the file successfully.
  • A red dot [image] means that the parser has encountered an error in the file.
  • A yellow dot [image] means that the parser has encountered an error in the file, but that the file has been successfully verified under the relaxed parsing option.
When you edit a file, the modified file and any dependent files are invalidated, and need to be verified again. You can learn more about how objects are invalidated and how the system refreshes the repository in Preparing Projects in the workbench documentation set.
Parent topic: Verifying Source Files
Related tasks
Registering Source Files
Verifying Source Files


Using the Modernization Workbench Main Window

Introduces the Modernization Workbench main window.

The Modernization Workbench main window lets you view and edit projects, set workbench options, and open workbench tools. The window’s state is saved across sessions.

Open a pane in the main window by selecting the appropriate choice in the View menu. Resize a pane by using the mouse to grab its border with another pane, called a splitter, and dragging it to a new location. Close a pane by clicking the [image] button in the upper righthand corner.

The figure shows the Modernization Workbench main window in a typical configuration.

  • Menus
    Introduces Modernization Workbench menus.
  • Customizing Menus
    Describes how to customize Modernization Workbench menus.
  • Toolbars
    Introduces Modernization Workbench toolbars.
  • Using the Repository Pane
    Introduces the Modernization Workbench Repository pane.
  • Using the Editor and Viewer
    Describes how to use the Editor.
  • Using the Object Information Pane
    Describes how to use the Object Information pane.
  • Viewing Object Properties
    Describes how to view object properties.
  • Viewing Inventory Reports
    Describes how to view Inventory Reports.
  • Viewing Key Object Relationships with Query Repository
    Describes how to use the Query Repository feature to view key object relationships.
  • Using the Activity Log
    Introduces the Activity Log.
  • Creating a To Do List
    Describes how to create a to do list.
  • Viewing a To Do List
    Describes how to view a to do list.
Parent topic: Modernization Workbench Basics


Menus

Introduces Modernization Workbench menus.

Modernization Workbench menus let you access workbench tools and other workbench functionality. Menus are displayed only for the products you have enabled in the Configuration Manager. The table below shows the relationship between products and menus.

The screens shown in the workbench documentation set display the menu bar with all products installed.

Most workbench menu choices have equivalent choices in the right-click menu. Menu selections for panes in the main window are available only if the pane has the focus.

Product | Menu
Application Analyzer | Analyze
Enterprise View | Profile
Application Architect | Architect
Business Rule Manager | Extract
Parent topic: Using the Modernization Workbench Main Window
Related information
Menus
Toolbars


Customizing Menus

Describes how to customize Modernization Workbench menus.

Modernization Workbench-specific menus are fully customizable. You control which menus, choices, and tool bars the system displays. You can save a menu bar configuration and restore it with a single mouse click.

You cannot customize the Windows standard menus (File, Edit, View, and so forth).
STEPS:
  1. Choose Tools > Customize Menu. If the Editor pane is open, you are prompted to close it. Click OK. The Customize Menu window opens.

  2. In the Customize Menu window, deselect the menus and/or menu choices you want to hide. Select the menus and/or choices you want to show.
  3. Enter a name for the specified menu configuration in the drop-down list below the Load button.
  4. Click Save to save the configuration without dismissing the window. Click OK to save the configuration and dismiss the window. The new configuration is applied in the Modernization Workbench main window.
To restore a menu configuration, select its name in the drop-down list and click Load. To restore the default configuration, select (default) in the drop-down list and click Load.
Parent topic: Using the Modernization Workbench Main Window


Toolbars

Introduces Modernization Workbench toolbars.

You can access a Modernization Workbench menu function by clicking its tool bar icon. The tool tip for an icon tells you what it does. Place your cursor over the icon for a moment. The tool tip will display.

A tool bar is displayed only if its corresponding menu is displayed. You can change the position of a tool bar by grabbing the delimiter at the left of the tool bar and dragging it to a new location.

Parent topic: Using the Modernization Workbench Main Window
Related information
Menus


Using the Repository Pane

Introduces the Modernization Workbench Repository pane.

The Repository pane displays the contents of the repository for the current workspace in three tabs. Use:

  • The Search tab to find key relationships and available methods for an object.
  • The Browser tab to view the object model for the workspace.
  • The Legacy Search tab to narrow search results using a search filter.
    Choose View > Search to show the Search tab.

If more than one tab is open, click the tabs to switch between them. In the Browser and Legacy Search tabs, place your cursor over an object for a moment to display a tool tip that describes the object in more detail.

Hide a tab by selecting it and choosing Hide in the right-click menu. To restore the tab, select the appropriate choice in the View menu.

  • Using the Search Tab
    Describes how to use the Repository pane Search tab.
  • Using the Browser Tab
    Describes how to use the Repository pane Browser tab.
  • Using the Legacy Search Tab
    Describes how to use the Repository pane Legacy Search tab.
  • Finding and Replacing Text in Source Files
    Describes how to find and replace text in source files.
Parent topic: Using the Modernization Workbench Main Window


Using the Search Tab

Describes how to use the Repository pane Search tab.

The Search pane displays a sorted list of workspace objects returned by a search of the repository. Use the list to find key relationships and available methods for an object.
STEPS:
  1. Enter the text for the search in the Item to search for field. Modernization Workbench locates text matches as you type.
  2. Select an object in the results list to see the relationship types and methods available for it in the Available functions pane.
  3. In the Available functions pane, double-click:
    • A method to launch the relevant process.

    • A relationship type to view the relationships of that type for the object. A results pane opens over the Editor/Viewer. From the results pane, you can launch further queries by selecting objects in the right-hand column and choosing Query Repository > <Relationship> in the right-click menu.

Parent topic: Using the Repository Pane


Using the Browser Tab

Describes how to use the Repository pane Browser tab.

The Browser tab displays the object model for the workspace, organized in tree form by project, object type, and object relationship. The Browser tab is commonly called the Repository Browser.

  • Selecting Objects
    Describes the basic ways to select objects.
  • Expanding Subtrees
    Describes how to expand subtrees in the browser.
  • Filtering Subtrees
    Describes how to improve browser display performance by showing only objects of interest in a subtree.
  • Refreshing the Browser
    Describes how to refresh the browser.
  • Viewing the Entire Workspace
    Describes how to display all the objects in the workspace.
Parent topic: Using the Repository Pane


Selecting Objects

Describes the basic ways to select objects.

Select an object in the Browser tab by clicking it with the left mouse button. You can select all, select multiple, or type-ahead select.

Use the Select choices in the Edit menu to select objects based on their verification status. The choices operate on the entire list in the Search tab and on the objects under the selected workspace, project, or folder in the Browser tab.

If you use the Select choices in the Edit menu to select objects in the Browser tab based on their verification status, and all the objects have not been fetched, the results are returned in the Search tab.

The Project drop-down displays the current project. You can navigate quickly to another project in the Browser tab by clicking the project name in the drop-down.

  • Selecting All
    Describes how to select all objects.
  • Selecting Multiple
    Describes how to select multiple objects.
  • Using the Type-Ahead Select Functions
    Describes how to use the type-ahead select functions.
Parent topic: Using the Browser Tab
Related information
Selecting Multiple
Using the Type-Ahead Select Functions
Expanding Subtrees


Selecting All

Describes how to select all objects.

To select all the objects in the tree or all the objects in the selected node, choose Edit > Select All. To deselect the objects, choose Edit > Unselect All.

Parent topic: Selecting Objects


Selecting Multiple

Describes how to select multiple objects.

To select a range of objects, hold down the Shift key, click the first object in the range, then click the last object in the range. To select objects that are not in a range, hold down the Control key, then click each object you want to select.

Parent topic: Selecting Objects
Related information
Selecting Objects
Using the Type-Ahead Select Functions
Expanding Subtrees


Using the Type-Ahead Select Functions

Describes how to use the type-ahead select functions.

Use the simple type-ahead select function to select displayed objects as you type. To use the simple function, make sure the Browser tab is current, then type the characters you want to match.

You cannot use the simple type-ahead select function in the Search tab.

Use the advanced type ahead select function to select objects in the Browser or Search tab whether or not they are currently displayed. To use the advanced function, click an object that has the same type as the object you want to select, then click the [image] button next to the [image] button at the bottom of the Repository pane (or if the filter subtree function is enabled, next to the [image] button). From the drop-down menu, choose:

  • Select to match text explicitly.

  • Wildcard Select to match text using wildcard patterns.

Enter the text you want to match in the field next to the [image] button. The tool selects matched objects as you type, as long as they are in the same subtree. Click the [image] button to repeat the select with the same criterion.

To select multiple objects, enter the text you want to match in the field next to the [image] button, then click the adjacent [image] button. From the drop-down menu, choose:

  • Select All to select multiple objects that match text explicitly.

  • Wildcard Select All to select multiple objects that match text using wildcard patterns.

The tool selects matched objects as long as they are in the same subtree. Click the [image] button to repeat the select with the same criterion.

Parent topic: Selecting Objects
Related information
Selecting Objects
Selecting Multiple
Expanding Subtrees
Using Wildcard Patterns in Searches


Expanding Subtrees

Describes how to expand subtrees in the browser.

Click the [image] symbol next to an item to expand its subtree one level. Click the [image] symbol to collapse the subtree one level.

In the Repository Browser, select an item and choose Expand Subtree in the right-click menu to expand all its subtree levels in a single step. Select an item and choose Save Subtree in the right-click menu to export the label text for expanded subtree levels to a text file.

For subtrees with a great many objects, you can improve browser display performance by filtering the subtree and/or by lowering the fetch buffer size in the General tab of the Workspace Options window.
Parent topic: Using the Browser Tab
Related information
Selecting Objects
Selecting Multiple
Using the Type-Ahead Select Functions
Filtering Subtrees


Filtering Subtrees

Describes how to improve browser display performance by showing only objects of interest in a subtree.

For a subtree with a great many objects, you can improve browser display performance by showing only objects of interest in the subtree. To filter out objects from a subtree, select the subtree, then enter the text you want to match in the field next to the [image] button at the bottom of the Repository pane (or if the type-ahead select function is enabled, next to the [image] button). Click the adjacent [image] button and choose Filter from the drop-down menu.

The tool filters out unmatched objects from the subtree, and places a [image] symbol next to the subtree in the browser display. The filter and filter text are persistent for the subtree across sessions. To remove the filter and its text, enter an empty string in the text field and choose Filter again.

Parent topic: Using the Browser Tab
Related information
Expanding Subtrees


Refreshing the Browser

Describes how to refresh the browser.

In a multiuser environment, you need to refresh the browser after another user adds, deletes, or modifies a workspace file. Choose View > Refresh Browser to refresh the browser.

Parent topic: Using the Browser Tab


Viewing the Entire Workspace

Describes how to display all the objects in the workspace.

By default, the Browser tab displays repository trees for projects only. These trees show only objects you can act on in the browser. To view all the objects in the workspace, choose View > Entire Workspace, or select (none) in the Project drop-down. Choose View > Entire Workspace again, or select a project in the Project drop-down, to display the project only.

Parent topic: Using the Browser Tab


Using the Legacy Search Tab

Describes how to use the Repository pane Legacy Search tab.

The Legacy Search tab displays a sorted list of workspace objects returned by a search filter. Select objects in the Legacy Search tab the same way you do in the Browser tab.

To execute an existing search filter, choose Edit > Search Criteria. In the Filter Name drop-down, choose the filter for the search, then click Find. The results are returned in the Search tab.

By default, the results list shows two attributes of an object: its name and file type. Use the General tab of the Workspace Options window to display additional attributes.
  • Creating a Search Filter
    Describes how to create a search filter.
  • Specifying a Search Criterion
    Describes how to define a search criterion.
  • Using Wildcard Patterns in Searches
    Describes the supported wildcard patterns.
Parent topic: Using the Repository Pane
Related tasks
Creating a Search Filter
Specifying a Search Criterion
Related information
Using Wildcard Patterns in Searches


Creating a Search Filter

Describes how to create a search filter.

You can use predefined filters to search for objects in the Repository pane or create your own filters. You cannot modify a predefined filter.
STEPS:
  1. Choose Edit > New Criteria. The Search dialog opens.

  2. Choose any allowed combination of the following:
    • To filter on object type, select the Entity Type check box and choose the entity type in the pane below.
    • To filter on object name, select the Object Name Like check box and enter a matching pattern for the name in the accompanying field. You can use wildcard patterns allowed in LIKE statements by Visual Basic for Applications (VBA).
    • To filter on verification status, select the Where Parse Status check box and choose the status in the group box below.
    • To filter on a text string in the source, select the Scan Legacy Sources For check box, then specify the search criterion. Select the check boxes below the drop-down if you want the search to match case, skip comments, and/or match whole lines.
  3. In the Filter Name drop-down, enter the name of the search filter and click Save.
  4. To edit a search filter, select it in the Filter Name drop-down and follow the instructions for creating a filter. To delete a search filter, select it in the Filter Name drop-down and click Delete. To clear a search filter, select it in the Filter Name drop-down and click Clear.
    To execute a search directly from the Search dialog, select the search filter in the Filter Name drop-down and click Find. The results are returned in the Search tab.
Parent topic: Using the Legacy Search Tab
Related tasks
Specifying a Search Criterion
Related information
Using the Legacy Search Tab
Using Wildcard Patterns in Searches


Specifying a Search Criterion

Describes how to define a search criterion.

Follow these instructions to specify a search criterion in find and replace operations and in search filters.

STEPS:
  1. Click the radio button for the type of pattern matching you want to use.
  2. In the combo box:
    • Select the pattern for the text you want to match. The drop-down lists matching patterns from previous searches.
    • Enter a new matching pattern by typing in the combo box. You can enter plain character strings, Posix regular expressions, or wildcard patterns allowed in LIKE statements by Visual Basic for Applications (VBA). For regular expressions and wildcard patterns, click the [image] button next to the drop-down to display a pop-up menu of elements you can insert in the pattern. Click an element to insert it. The matching pattern is saved when you execute the search.
Parent topic: Using the Legacy Search Tab
Related tasks
Creating a Search Filter
Related information
Using the Legacy Search Tab
Using Wildcard Patterns in Searches


Using Wildcard Patterns in Searches

Describes the supported wildcard patterns.

In most searches you perform in the workbench tools, you can use wildcard patterns allowed in LIKE statements by Visual Basic for Applications (VBA). The table below shows the wildcard characters and what they match.
Character | Matches
? | Any single character.
* | Zero or more characters.
# | Any single digit (0–9).
[charlist] | Any single character in charlist.
[!charlist] | Any single character not in charlist.

To match the special characters left bracket ([), question mark (?), number sign (#), and asterisk (*), enclose them in brackets. The right bracket (]) cannot be used within a group to match itself, but it can be used outside a group as an individual character.

Specify a range of characters in a charlist by using a hyphen (–) to separate the upper and lower bounds of the range. [A-Z], for example, results in a match if the corresponding character position in a string contains any uppercase letters in the range A–Z. You can specify multiple ranges in brackets without delimiters.

Parent topic: Using the Legacy Search Tab
Related tasks
Creating a Search Filter
Specifying a Search Criterion
Related information
Using the Legacy Search Tab


Finding and Replacing Text in Source Files

Describes how to find and replace text in source files.

You can find and replace text in source files from the Browser or Search tab of the Repository pane. Use the Editor to replace text in a selection of source code.

STEPS:
  1. In the Browser or Search tab, select the source files or the node that contains the source files you want to search and choose:

    • Edit > Find if you simply want to search.

    • Edit > Replace if you want to search and replace.
  2. The Find and Replace dialog opens. Click the tab for the operation you want to perform.
    The find functionality in the Find tab is bidirectional. You can search up or down, and specify that the search wrap. The find functionality in the Replace tab is unidirectional. Otherwise, the find functionality is identical in each tab. The remaining steps assume that you want to both search and replace.
  3. In the Find What combo box, specify the search criterion. Select the check boxes below the drop-down if you want the search to match case and/or match whole words.
  4. In the Replace With combo box, select the replacement text. The drop-down lists text strings from previous replace operations. Enter new replacement text by typing in the combo box. If you used regular expressions for the find, click the [image] button next to the drop-down to display a list of elements you can insert in the replacement text field.
  5. Click Find Next. When the search finds a match, click Replace. You are prompted to confirm the replacement. Click Yes. Click Find Next again to find the next match, or click Replace All to replace all matching text.
Parent topic: Using the Repository Pane
Related information
Finding and Replacing Source in a Selection


Using the Editor and Viewer

Describes how to use the Editor.

The Editor lets you view and edit the source code for a file. The Viewer lets you view renderings of logical objects like screens and transformation target models. Double-click a file in the Repository pane to view it in the Editor or Viewer. Choose File > Recent Sources to open a file from a list of recently opened files.

  • Editing Source
    Describes how to edit source in the Editor.
  • Finding and Replacing Source in a Selection
    Describes how to find and replace source in a selection.
  • Viewing a List of Errors
    Describes how to view a list of errors in the Editor.
  • Extracting and Expanding Copybooks (Cobol, MFS Only)
    Describes how to extract and expand Cobol copybooks in the Editor.
  • Commenting Out Source
    Describes how to comment out source in the Editor.
  • Printing Source
    Describes how to print source in the Editor.
  • Setting Editor User Preferences
    Describes how to set Editor User Preferences.
  • Specifying the Color of Items
    Describes how to specify the color of items.
Parent topic: Using the Modernization Workbench Main Window


Editing Source

Describes how to edit source in the Editor.

Edit file source as you would text in a word processor (cut-and-paste, drag-and-drop, undo, and so forth). Click File > Save to save your changes. Edits are saved in the copy of the file maintained in the \Workspace\Source subfolder.

When you edit a file, the modified file and any dependent files are invalidated, and need to be verified again. Only a master user can edit and verify source in a multiuser environment.
Parent topic: Using the Editor and Viewer


Finding and Replacing Source in a Selection

Describes how to find and replace source in a selection.

To find and replace source in a selection of text, select the text, then follow the instructions for the source file find and replace function.

Parent topic: Using the Editor and Viewer
Related tasks
Finding and Replacing Text in Source Files


Viewing a List of Errors

Describes how to view a list of errors in the Editor.

For a source files with errors or warnings, right-click in the Editor and choose:

  • Errors > View Errors from the popup menu to list the errors and warnings in a separate pane below the Editor. Choose Edit > Errors > View Errors again to hide the pane.
  • Errors > Next Error from the popup menu to navigate to the offending source code for the next error in the list.
  • Errors > Previous Error to navigate to the offending source code for the previous error in the list.
  • Errors > Severity Filter from the popup menu to filter the list by severity.
    You can set a severity filter for all your workspaces in the Editor User Preferences.
  • Errors > Copy Errors in the pop-up menu to copy the list of errors and warnings to the clipboard.

To hide the Editor and show only the list of errors and warnings for the selected file, right-click in the Repository pane and choose Show Errors in the pop-up menu. Double-click the source file in the Repository pane to show the Editor again.

Parent topic: Using the Editor and Viewer
Related tasks
Setting Editor User Preferences


Extracting and Expanding Copybooks (Cobol, MFS Only)

Describes how to extract and expand Cobol copybooks in the Editor.

To extract source code as a copybook, select the code you want to extract, then choose Edit > Extract Copybook. A dialog box opens, where you can enter the name of the new copybook. Click OK. The new copybook is added to the repository and the extracted code is replaced by a COPY statement referencing the new copybook.

To expand COPY statements, choose Edit > Expand Copy Statements. The added lines of code are highlighted and a comment line is inserted to identify the source copybook.

Parent topic: Using the Editor and Viewer


Commenting Out Source

Describes how to comment out source in the Editor.

To comment out a block of source, select the block and choose Edit > Comment Block. To uncomment the block, select it and choose Edit > Uncomment Block.

Parent topic: Using the Editor and Viewer


Printing Source

Describes how to print source in the Editor.

To print the source for a file, choose File > Print.

Parent topic: Using the Editor and Viewer


Setting Editor User Preferences

Describes how to set Editor User Preferences.

Use the Editor tab of the User Preferences window to specify the display characteristics of the Editor.

STEPS:
  1. Choose Tools > User Preferences. The User Preferences window opens. Click the Editor tab.
  2. In the Font drop-down, select the display font for source code.
  3. Select the Colorize Text check box if you want to use a color scheme to identify source elements, then specify the color of each source element.
  4. In the Show Errors pane, select the check box for each type of error you want to show in the error list.
Parent topic: Using the Editor and Viewer


Specifying the Color of Items

Describes how to specify the color of items.

You use a standard Windows color control to specify a color scheme for source elements and other items. Use the Palette tab to select a color from the Windows palette. Use the System tab to match the color of a standard Windows element. Depending on the element, you can specify the foreground color, background color, and/or font color.

Parent topic: Using the Editor and Viewer
Related tasks
Setting Editor User Preferences


Using the Object Information Pane

Describes how to use the Object Information pane.

The Object Information pane displays comments you have entered for an object. Select an object in the Repository pane and choose View > Object Information to show the Object Information pane.

Enter comments for an object by selecting the object in the Repository pane and choosing Properties in the right-click menu. In the Description tab, enter your comment in the text area and click OK.

You cannot use this method to enter comments for a workspace (that is, when an entire workspace is displayed in the Repository Browser). Use the General tab of the Workspace Options window to enter comments for a workspace.
Parent topic: Using the Modernization Workbench Main Window
Related tasks
Setting General Options


Viewing Object Properties

Describes how to view object properties.

The properties of an object describe its characteristics: its language, complexity metrics, relationships, and the like. Select an object in the Repository pane and choose View > Properties to display a set of tabs with object properties. The table below describes the tabs in the Properties window.

In other workbench tools, use the right-click menu or the View menu to display the properties of the selected object.
Tab | Description
Description | Displays comments you have entered for the object.
General | Displays the name and other general information for the object.
Internal | Displays verification option settings and other internal information for the object.
System | Displays system information for the object.
Statistic | Displays the complexity metrics for the object and their values.
Relationships | Displays the relationships of the object. Select Restricted to the current project to restrict relationships to those in the current project. Select Workspace wide to show all the relationships of the object in the workspace.
Object Tags | Displays the tags assigned to the object.
Parent topic: Using the Modernization Workbench Main Window


Viewing Inventory Reports

Describes how to view Inventory Reports.

Inventory Reports give high-level statistics for source file types in the current workspace: number of files of each type, whether verified, number of lines of source code (verified files only), and the like. To generate an Inventory Report, choose Prepare > Inventory Report. The table below describes the columns in the Inventory Report.
Column | Description
Type | The source file type.
Source Lines | The number of lines of source code in verified files of the specified type.
Quantity | The number of source files of the specified type.
Unverified | The number of source files of the specified type for which verification was not attempted. Copybooks do not need to be verified. Copybooks are parsed when the including source file is verified.
Verified | The number of successfully verified source files of the specified type.
Erroneous | The number of unsuccessfully verified source files of the specified type.
Relaxed | The number of source files of the specified type that were verified despite errors, under the relaxed parsing option.
Missing | The number of missing support files (copybooks, JCL procedures, and the like).
Parent topic: Using the Modernization Workbench Main Window


Viewing Key Object Relationships with Query Repository

Describes how to use the Query Repository feature to view key object relationships.

The Query Repository feature lets you home in on key relationships of an object: all the programs that call another program, or all the programs that update a data store, for example. From the results, you can launch further queries without having to return to the Repository Browser. You can create printable relationship reports and export them to a variety of standard formats.
STEPS:
  1. In the Repository pane, select the workspace, project, folder, files, or objects you want to view relationships for and choose Query Repository > <Relationship> in the right-click menu. The Query Repository results pane opens over the Editor/Viewer.
  2. To launch a query from the results, select one or more objects in the right-hand column and choose Query Repository > <Relationship> in the right-click menu.
Parent topic: Using the Modernization Workbench Main Window


Using the Activity Log

Introduces the Activity Log.

The Activity Log is a chronological record of your activities in the current session. Choose View > Activity Log to show the Activity Log pane.

  • Viewing Errors
    Describes how to view errors in the Activity Log.
  • Viewing History
    Describes how to view entries across sessions in the Activity Log.
  • Copying Records
    Describes how to copy records in the Activity Log.
  • Generating Reports
    Describes how to generate reports from the Activity Log.
  • Clearing the Log
    Describes how to clear the Activity Log.
  • Hiding a Column
    Describes how to hide a column in the Activity Log.
Parent topic: Using the Modernization Workbench Main Window


Viewing Errors

Describes how to view errors in the Activity Log.

If the parser generated errors or warnings for a file, double-click the Activity Log entry for the file or select the entry and choose Expand in the right-click menu to show a list of the errors and/or warnings. Double-click a message to navigate to the offending source in the Editor. Choose Collapse in the right-click menu to collapse the list.

Parent topic: Using the Activity Log


Viewing History

Describes how to view entries across sessions in the Activity Log.

To view Activity Log entries across sessions, choose History in the right-click menu. Click a date to view the session log. To clear the session log, right-click in the log and choose Clear Log in the pop-up menu. To clear a log entry, select the entry and choose Delete in the right-click menu.

Parent topic: Using the Activity Log


Copying Records

Describes how to copy records in the Activity Log.

To copy Activity Log records to the clipboard, select the records and choose Copy in the right-click menu.

Parent topic: Using the Activity Log


Generating Reports

Describes how to generate reports from the Activity Log.

To generate a report from the Activity Log, right-click in the log and choose Report in the pop-up menu.

Parent topic: Using the Activity Log


Clearing the Log

Describes how to clear the Activity Log.

To clear the Activity Log, right-click in the log and choose Clear Log in the pop-up menu. To clear a log entry, select the entry and choose Delete in the right-click menu.

Parent topic: Using the Activity Log


Hiding a Column

Describes how to hide a column in the Activity Log.

To hide a column in the Activity Log, right-click in the log and deselect the column name in the Columns choice in the pop-up menu. Select the column name to show the column again.

Parent topic: Using the Activity Log


Creating a To Do List

Describes how to create a to do list.

A to do list is a record of tasks you need to perform before completing your project. You can create a to do list for a workspace, project, folder, source file, or extracted object.

STEPS:
  1. In the Repository Browser, select a workspace, project, folder, source file, or generated object and choose View > ToDo List. The ToDo List window opens.
  2. If you selected:
    • A workspace, project, or folder, choose Edit > Add to enter a task for the item and all the items it contains. Otherwise, choose Add for Item to enter a task for the workspace, project, or folder only.
    • A source file or generated object, choose Edit > Add to enter a task for the item.
  3. The New Properties dialog opens. In the Subject field, enter the name of the task. In the Content field, enter a description of the task. Click OK. The task is listed in the ToDo List window.
Parent topic: Using the Modernization Workbench Main Window
Related information
Viewing a To Do List


Viewing a To Do List

Describes how to view a to do list.

To view the to do list for an item, select the item in the Repository Browser and choose View > ToDo List. Use the options in the ToDo List window Edit menu to mark a task as done, delete a task, or view its properties. You can generate a report from a to do list by choosing File > Report.

Parent topic: Using the Modernization Workbench Main Window
Related tasks
Creating a To Do List


Using Tool Windows

Provides an overview of tool window behavior.

When you open a Modernization Workbench tool, the window for the tool appears above the workbench main window. Simply move the tool window if you want to work in the main window again. A tool window’s state is saved across sessions. Close a tool window by clicking the [image] button in the upper righthand corner.

Tool windows are modeless: in principle, you can open as many tool windows as you want. In practice, the workbench will prompt you to close an “unprotected” tool window if the activity you want to perform could result in a repository change. An unprotected tool window cannot be updated to reflect a concurrent repository change.

In tool windows with lists, you can select all, select multiple, size columns, and sort by column.

  • Resizing Panes
    Describes how to resize tool window panes.
  • Moving Panes
    Describes how to move tool window panes.
Parent topic: Modernization Workbench Basics
Related information
Resizing Panes
Moving Panes


Resizing Panes

Describes how to resize tool window panes.

Resize a pane in a tool window by using the mouse to grab its border with another pane, called a splitter, and dragging the border to a new location. To control how panes are resized when you resize the window, select the splitter and choose one of the following in the right-click menu:

  • For a vertical splitter, Keep First preserves the size of the panes to the left of the splitter. For a horizontal splitter, Keep First preserves the size of the panes above the splitter.
  • For a vertical splitter, Keep Second preserves the size of the panes to the right of the splitter. For a horizontal splitter, Keep Second preserves the size of the panes below the splitter.
  • Keep Proportion preserves the length and width ratio of the panes on either side of the splitter.
Parent topic: Using Tool Windows
Related information
Using Tool Windows


Moving Panes

Describes how to move tool window panes.

Move a pane in the window by grabbing its title bar to show the “virtual rectangle” for the pane. The virtual rectangle is a dotted color frame that you can drag to the position in the window at which you want the pane to appear. When you are satisfied with the new position, release the mouse button. The other panes in the window are adjusted as necessary.

You may have to drag the virtual rectangle beyond the edge of the tool window to achieve the effect you want.

To swap the positions of the panes on either side of a splitter, select the splitter and choose Swap in the right-click menu. To change the color of the splitter when it is selected (and of its virtual rectangle), select the splitter and choose Color in the right-click menu. Use the standard Windows color control to specify the color.

Parent topic: Using Tool Windows
Related information
Using Tool Windows


Setting Options

Provides an overview of Modernization Workbench options.

Modernization Workbench options control the look and feel of the workbench tools and how they perform their tasks. The Tools menu gives you access to three sets of options:

  • Workspace Options control the appearance and behavior of workbench tools for the current workspace.
  • Project Options control the appearance and behavior of workbench tools for the current project.
  • User Preferences control the appearance and behavior of the Editor, HyperView, and Change Analyzer across workspaces, and miscellaneous other tasks.

Each tool has an Options choice in the View menu that lets you set the options for that tool.

Many options are preset based on your choices in the Modernization Workbench Configuration Manager. For more information, see the installation guide for your product.

Tool options are described in detail in the relevant sections of the documentation set. This section shows you how to manage option sets and how to set general workbench and environment options

  • Managing Option Sets
    Introduces option sets.
  • Setting General Options
    Describes how to set General Workspace Options.
  • Setting Environment User Preferences
    Describes how to set Environment User Preferences.
  • Setting Archivers User Preferences
    Describes how to set Archivers User Preferences.
  • Setting Export Options
    Describes how to set Export Project Options.
  • Adding a Selectable Item
    Describes how to add a selectable item in options windows.
Parent topic: Modernization Workbench Basics


Managing Option Sets

Introduces option sets.

An option set is a particular configuration of settings for one of the option groupings. In a given Project Options set, for example, you might choose to show GO TO statements in the HyperView Callie tool, while in the other Project Options sets you would not.

Option sets let you switch back and forth between configurations in the same session, without having to change settings manually. You can also use them to ensure uniform results across your team by sharing customized settings with team members.

  • Understanding the Options Manager Window
    Describes the Options Manager window.
  • Creating an Option Set
    Describes how to create an option set.
  • Renaming an Option Set
    Describes how to rename an option set.
  • Editing an Option Set
    Describes how to edit an option set.
  • Copying an Option Set
    Describes how to copy an option set.
  • Deleting an Option Set
    Describes how to delete an option set.
  • Sharing an Option Set
    Describes how to share an option set.
  • Making an Option Set the Default
    Describes how to make an option set the default.
  • Assigning an Option Set
    Describes how to make an option set active.
  • Importing and Exporting Option Sets
    Describes how to import and export an option set.
Parent topic: Setting Options


Understanding the Options Manager Window

Describes the Options Manager window.

Use the Options Manager to define custom options sets. Choose Tools > Options Manager to open the Options Manager window.

The figure below shows the Options Manager window at startup, with the tab for the Workspace Options grouping selected. For each grouping, there is an initial read-only default option set, denoted by a [image] symbol, that reflects your current workbench configuration. The active option set is displayed in bold type in the Options Manager tab for the grouping. You make an option set active by assigning it. Assignments persist across workbench sessions.

The user who defines a custom option set is referred to as its owner. Only the owner can share a custom option set with other users, as indicated by a [image] symbol. A shared option set cannot be deleted or unshared if it is being used. The Used By drop-down at the bottom of the owner’s Options Manager window lists the names of option set users. The owner’s name appears in the Owner column in the Options Manager window displayed to other users (but not in the owner’s Options Manager window).

The initial default option set is always shared with other users. An owner can designate another option set as the default, provided the option set is shared. The new default option set will automatically be assigned to every user who has not explicitly defined a custom option set. A default option set cannot be modified or deleted.

Parent topic: Managing Option Sets
Related information
Creating an Option Set
Renaming an Option Set
Editing an Option Set
Copying an Option Set
Deleting an Option Set
Sharing an Option Set
Making an Option Set the Default
Assigning an Option Set
Importing and Exporting Option Sets


Creating an Option Set

Describes how to create an option set.

If there is only a “(Default)” option set for the grouping, select it and click Edit. Otherwise, select any option set and click Edit. Options Manager displays the available tabs for the selected options grouping.

Modify the options displayed on each tab as necessary and click Apply. When you are satisfied with your choices, click OK. The new option set is displayed in the Options Manager window with the name of the grouping.

If a default option set already uses one of the grouping names, Options Manager prepends “Copy of” to the name.
Parent topic: Managing Option Sets


Renaming an Option Set

Describes how to rename an option set.

To rename an option set, select it and click Rename. The system displays the current name in an edit box. Enter the new name in the edit box and click outside the box.

Parent topic: Managing Option Sets


Editing an Option Set

Describes how to edit an option set.

To edit an option set, select it and click Edit, then follow the instructions for creating an option set. You cannot edit a default option set.

Parent topic: Managing Option Sets
Related information
Understanding the Options Manager Window


Copying an Option Set

Describes how to copy an option set.

To copy an option set, select it and click Copy. Options Manager prepends “Copy of” to the name of the copied option set.

Parent topic: Managing Option Sets


Deleting an Option Set

Describes how to delete an option set.

To delete an option set, select it and click Delete. You cannot delete a default option set, or a shared option set that has been assigned by another user.

Parent topic: Managing Option Sets
Related information
Understanding the Options Manager Window


Sharing an Option Set

Describes how to share an option set.

To share an option set, select it and click Sharing. The button is a toggle. Select it again to revoke sharing. You cannot revoke sharing for an option set that has been assigned by another user.

Parent topic: Managing Option Sets
Related information
Understanding the Options Manager Window


Making an Option Set the Default

Describes how to make an option set the default.

To make a custom option set the default, share it first, then select it and click Default.

In the Project Options tab, a dialog opens that prompts you to select or create a new project. Select the project and click OK.

The new default option set is automatically assigned to every user who has not explicitly defined a custom option set. A default option set cannot be modified or deleted.

Parent topic: Managing Option Sets
Related information
Understanding the Options Manager Window


Assigning an Option Set

Describes how to make an option set active.

To make an option set active, select it and click Assign.

In the Project Options tab, a dialog opens that prompts you to select or create a new project. Select the project and click OK.
Parent topic: Managing Option Sets
Related information
Understanding the Options Manager Window


Importing and Exporting Option Sets

Describes how to import and export an option set.

To import an option set, click Import. A Load dialog opens, where you can specify the option set you want to import.

To export an option set, select it and click Export. A Save dialog opens, where you can specify the name and location of the option set.

Parent topic: Managing Option Sets


Setting General Options

Describes how to set General Workspace Options.

Use the General tab of the Workspace Options window to specify the description of the workspace displayed in the Object Information pane, the attributes displayed in the Repository pane Search tab, and the browser fetch buffer size.
STEPS:
  1. Choose Tools > Workspace Options. The Workspace Options window opens. Click the General tab.
  2. In the Workspace description field, enter a description of your workspace. This description is shown in the Object Information pane.
  3. In Repository Browser (Search), check the boxes for the object attributes that should be displayed in the Search tab of the Repository pane. Click Select All to check all the attributes.
    Only attributes in the repository model for an object are displayed. That is, if you choose Cyclomatic Complexity, and only JCL files appear in the Search tab results list, the attribute will not be displayed in the list, because Cyclomatic Complexity is not an attribute of a JCL file.
  4. In the Browser Fetch Buffer Size field, enter the size of the buffer the workbench uses to populate the repository tree. When you expand a node in the Repository Browser, the workbench populates the display from a buffer that contains the objects last fetched from the repository. For very large repositories, you may want to lower the buffer size so that you can work with objects in the Repository Browser while the workbench performs subsequent fetches.
Parent topic: Setting Options


Setting Environment User Preferences

Describes how to set Environment User Preferences.

Use the Environment tab of the User Preferences window to specify whether you want to be prompted to verify source files after registering them and the scope of relationships shown in the Object Properties window.
STEPS:
  1. Choose Tools > User Preferences. The User Preferences window opens. Click the Environment tab.
  2. In After new files are registered, choose:
    • Verify registered files if you want the workbench to verify files after they have been registered.
    • Ask user about verification if you want to be prompted to verify files after they have been registered. Available whether or not Verify registered files is selected.
  3. In Show relationships in the object properties view window, choose whether you want to restrict the relationships displayed in the Relationships tab of the Object Properties window:
    • Restricted to the current project if you want to restrict the relationships of the object to those in the current project.
    • Workspace wide if you want to display all the relationships of the object in the current workspace.
  4. For Java support, specify the path of the folder for the Java Runtime Environment (JRE) on your machine in the Path to JRE Folder field. If you do not enter a path, the current version specified in the Windows registry is used. You must use JRE version 1.5 or later.
    If your application was compiled with a previous version of the JRE, specify the path of the Java SE runtime library (rt.jar) used to compile the application in the Enter classpath to JAR Files and/or path to external Java file root directories field in Workspace Options > Verification > Settings.
Parent topic: Setting Options


Setting Archivers User Preferences

Describes how to set Archivers User Preferences.

The workbench registration process extracts compressed source files using the command line syntax for archiver versions most widely in use. Use the Archivers tab of the User Preferences window to specify the command line syntax for newer archiver versions.

STEPS:
  1. Choose Tools > User Preferences. The User Preferences window opens. Click the Archivers tab.
  2. In the Command Line for Archiver drop-down, choose the archiver whose command line syntax you want to specify.
  3. In the Unpack All field, enter the command line syntax for the unpack all operation.
  4. In the Extract File field, enter the command line syntax for the extract file operation.
Parent topic: Setting Options


Setting Export Options

Describes how to set Export Project Options.

Use the Export Options tab of the Project Options window to specify where Modernization Workbench stores generated files. The default location is the \<Workspace Home>\Output folder.
STEPS:
  1. Choose Tools > Project Options. The Project Options window opens. Click the Export Options tab.
  2. In the Target directory field, enter the folder you want Modernization Workbench to store generated files in.
  3. Deselect the Move Files check box if you want to copy generated files to both the default and the specified directories.
Parent topic: Setting Options


Adding a Selectable Item

Describes how to add a selectable item in options windows.

Many options windows allow you to add an item to a list of available items. In the Extensions tab of the Workspace Registration options, for example, you can add an extension to the list of recognized extensions.

Add an item by right-clicking in the selection pane and choosing Add in the pop-up menu. The workbench displays an empty text field next to a selected check box. Enter the name of the item in the text field and click outside the field.

If you are entering a file extension, make sure to enter the dot (.).

Edit an item by selecting it and choosing Edit in the right-click menu. Delete an extension by selecting it and choosing Delete in the right-click menu.

Parent topic: Setting Options


Working with Reports and Diagrams

Provides an overview of diagram and report generation in workbench tools.

When you generate a diagram or report in the Modernization Workbench, you typically have the option of saving it to a file or printing it. You can save to a wide variety of standard formats.

Word must be installed to save reports to RTF and Word. Excel must be installed to save reports to Excel, CSV, and TXT. Visio 2002 must be installed to save a diagram to Visio. Visio 2002 is not required to save to Visio XML.

Click Page Setup in a report window to set up the page for a printed report. Click Print to print the report. The Print dialog opens, where you can set options for the print job. Click OK.

Click Save in a report window to export a report. A Save As dialog opens, where you can specify the name, location, and file type of the report.

Parent topic: Modernization Workbench Basics


Using the Guide for a Tool

Describes how to use the guide for a workbench tool.

Many Modernization Workbench tools have guides that you can use to get started quickly in the tool. The guides are help-like systems with hyperlinks that you can use to access functions otherwise available only in menus and other program controls.

To open the guide for a tool, choose View > Guide. Use the table of contents in the Page drop-down to navigate quickly to a topic.

Parent topic: Modernization Workbench Basics


Setting Registration Options: Extensions Tab

Describes how to set workspace registration options on the Extensions tab.

Source files must have recognized DOS file extensions before they can be registered. Files without extensions are checked for content, and if the content is recognized, the files are registered with appropriate extensions appended.

Files with unknown extensions are flagged, provided that you uncheck Ignore Unknown and Overloaded Extensions on the Extensions tab of the Workspace Registration options window. If a file fails to register because its extension is unknown, simply add the extension to the list of recognized extensions on the Extensions tab and register the file again.

STEPS:
  1. Choose Tools > Workspace Options. The Workspace Options window opens. Click the Registration tab, then the Extensions tab.
  2. In the Source Type pane, select the source file type whose extensions you want to view. The extensions for the file type are listed in the Extensions pane. Select each extension you want the system to recognize. Add extensions as necessary.
    If a source file does not specify an extension when it references an included file, the verification process assumes that the included file has one of the recognized extensions. If multiple included files have the same name but different extensions, the system registers the file with the first extension in the list.
  3. Select Ignore Unknown and Overloaded Extensions if you do not want the registration process to issue warnings about unrecognized and overloaded extensions. An overloaded extension is one assigned to more than one file type.
  4. For Cobol programs and copybooks, select Remove Sequence Numbers if you want the system to replace preceding enumeration characters, or sequence numbers, with blanks. Sequence numbers are removed only from the source file versions maintained by the workbench.
  5. For Copybook, C, C++, PowerBuilder, or Java files, select Preserve Folder Structure if you want to register files with names derived from their locations in the folder structure rather than simple base names or, in the case of Java files, names based on the package declaration. As long as you drag-and-drop the folders (or a parent folder) onto the Repository Browser when you register the files, the folder structure is reflected in the name. Choose this option when:
    • Copybook, C, C++, or PowerBuilder files with identical names reside in different folders. Your application might use the same copybook in different Partitioned Data Sets on the mainframe, for example, in which case the copybook will reside in different folders on your PC.
    • Java files with the same name and package declaration are used in different applications. So Id.java in the app1 folder is registered as "app1\com\company\Id.java", for example, while Id.java in the app2 folder is registered as "app2\com\company\Id.java".
    For all but Java files, the folder structure for the application is preserved in the display names of the files in the Repository Browser. For Java files, check Properties > General for the full repository name.
Parent topic: Registering Source Files
Related tasks
Setting Registration Options: Source Files Tab
Related information
Adding a Selectable Item


Setting Registration Options: Source Files Tab

Describes how to set workspace registration options on the Source Files tab.

If your legacy application executes on a mainframe, it’s usually best to convert the application source to workstation encoding. If that’s not practical, you can have Modernization Workbench convert it for you, using the options on the Registration > Source Files tab of the Workspace Options window.

STEPS:
  1. Choose Tools > Workspace Options. The Workspace Options window opens. Click the Registration tab, then the Source Files tab.
  2. In the Legacy Source Encoding group box, choose:
    • Workstation if the source is workstation-encoded. For DBCS configurations, if Japanese-language source files were downloaded in workstation (text) mode, specify how DBCS escape control characters were handled.
    • Mainframe if the source is mainframe-encoded. When this option is selected, the registration process automatically converts source files to workstation-encoding. Only the source files maintained by the workbench are converted.
  3. In the Object System Encoding group box, choose:
    • English - US (ANSI MS-1252) if the original source was U.S. English ANSI-encoded (Unisys 2200 and HP3000 Cobol).
    • English - US (EBCDIC-CCSID-37) if the original source was U.S. English EBCDIC-encoded (IBM Cobol).
    • Japanese (EBCDIC-CCSID-930, 5026) if the original source was Japanese EBCDIC-encoded, CCSID-930, 5026 (DBCS configurations only).
    • Japanese (EBCDIC-CCSID-939, 5035) if the original source was Japanese EBCDIC-encoded, CCSID-939, 5035 (DBCS configurations only).

    During analysis and transformation, hexadecimal literals in Cobol programs and BMS files are translated into character literals according to this setting.

    Do not change these settings after source files are registered in a workspace.
  4. Select Strip trailing numeration if you want the system to strip trailing numeration characters (columns 73 through 80) from source lines. Trailing numeration characters are removed only from the source files maintained by the workbench.
  5. Select Expand tabulation symbols if you want the system to replace tabulation symbols with a corresponding number of spaces. Tabulation symbols are replaced only in the source files maintained by the workbench. You must select this option if you want to view HyperView information for C or C++ programs.
  6. In the Default Source Directory field, enter the root folder on your PC from which the system should refresh unresolved files. You can type over the path in the text box or click the button to the right of the text box to browse for a new location.
Parent topic: Registering Source Files
Related tasks
Setting Registration Options: Extensions Tab
Related information
How the System Refreshes the Repository
Japanese Language Support
Job Scheduler Support


Creating New Source Files

Describes how to create new source files.

To create a new source file, select the project for the source file in the Repository Browser and choose File > New. A dialog box opens, where you can specify the file name (with extension) and source file type. To create a new source file with the same content as an existing file, select the file and choose File > Save As. The system automatically registers the created files and stores them in the appropriate folder.

Parent topic: Registering Source Files


Refreshing Source Files

Describes how to update source files in the workspace.

Use the Modernization Workbench refresh feature to update registered source files to their current state. You can refresh all of the objects in a project or folder, or only selected objects.

The refresh looks for updated legacy source in the original location of the file or, for unresolved source, the location you specified in the Registration > Source Files tab of the Workspace Options window. Once it finds the source, it overwrites the version of the source file maintained by the system. Reverify the file after the refresh.

If the refreshed file is unresolved, the referring source is not invalidated. To resolve the refreshed file, reverify both the unresolved file and the referring source.
STEPS:
  1. In the Repository Browser, select the project, folder, or file you want to refresh and choose File > Refresh Sources from Disk.
    If you are licensed to use the Batch Refresh feature, you can perform the refresh in batch mode. Contact support services for more information. The behavior you will see when refreshing source from disk on an unresolved object, the file that refers to that object is not invalidated. If the referring file is reverified, then the missing object that was refreshed will be resolved.
  2. You are prompted to confirm that you want to refresh the selected files. Click Yes.
The system overwrites the workspace source files.
Parent topic: Registering Source Files


Exporting Source Files from a Workspace

Describes how to export source files from a workspace.

To export the workspace source for a project or file to a new location, select the project or file in the Repository Browser and click File > Export Sources. A dialog box opens, where you can specify the location.

Parent topic: Registering Source Files


Deleting Objects from a Workspace

Describes how to delete a file or folder from a workspace.

To delete an object from a workspace, select it and choose File > Delete from Workspace. To delete a folder and all its contents from a workspace, select it and choose File > Delete Contents from Workspace.

Parent topic: Registering Source Files


Deleting a Workspace

Describes how to delete a workspace.

To delete a workspace, choose File > Delete Workspace in the Modernization Workbench Administration tool. A Delete workspace dialog opens, where you can select the workspace you want to delete.

Only a master user can delete a workspace in a multiuser environment.
Parent topic: Registering Source Files


Japanese Language Support

Describes Modernization Workbench support for Japanese-language applications

Modernization Workbench provides full support for mainframe-based Cobol or PL/I Japanese-language applications. Make sure to set Windows system and user locales to Japanese before registering source files.

You can register Japanese source files downloaded in text or binary mode:

  • Source files downloaded in text (workstation) mode must be in Shift-JIS encoding. If Shift-Out and Shift-In delimiters were replaced with spaces or removed during downloading, Modernization Workbench restores them at registration.
  • Source files downloaded in binary (mainframe) mode are recoded by Modernization Workbench from EBCDIC to Shift-JIS encoding at registration.

Use the options on the Registration > Source Files tab of the Workspace Options window to specify how DBCS escape control characters were handled in source file downloaded in text mode:

  • Replaced with spaces if DBCS escape control characters were replaced with spaces.
  • Removed if DBCS escape control characters were removed.

  • Retained or not used if DBCS escape control characters were left as is or were not used.

Preserving delimiters during download is recommended. Replacing delimiters with spaces during download generally yields better restoration results than removing them.

In all workbench tools that offer search and replace facilities, you can insert Shift-Out and Shift-In delimiters into patterns using Ctrl-Shift-O and Ctrl-Shift-I, respectively. You need only insert the delimiters if you are entering mixed strings.

Parent topic: Registering Source Files


Setting Up Projects

Introduces Modernization Workbench projects.

Workspace projects typically represent different portions of the application modeled in the workspace. You might have a project for the batch portion of the application and another project for the online portion. You can also use a project to collect items for discrete tasks: all the source files affected by a change request, for example.

  • Creating Projects
    Describes how to create a project.
  • Sharing Projects
    Describes how to share a project.
  • Protecting Projects
    Describes how to protect a project.
  • Moving or Copying Files into Projects
    Describes how to move or copy files in projects.
  • Including Referenced and Referencing Objects in a Project
    Describes how to include referenced or referencing objects in projects.
  • Removing Unused Support Objects from a Project
    Describes how to remove unused support objects from a project.
  • Emptying a Project
    Describes how to delete source files from a project without deleting them from the workspace.
  • Deleting a Project
    Describes how to delete a project from a workspace without removing its source files from the workspace.


Creating Projects

Describes how to create a project.

When you set up a workspace in Modernization Workbench, the system creates a default project with the same name as the workspace. Create projects in addition to the default project when you need to analyze subsystems separately or organize source files in more manageable groupings.

STEPS:
  1. Choose Project > New project. The Create Project dialog opens.
  2. Enter the name of the new project and click OK. The new project is displayed in the Repository Browser. The project is selected by default.
Parent topic: Setting Up Projects
Related tasks
Moving or Copying Files into Projects
Related information
Sharing Projects
Protecting Projects
Including Referenced and Referencing Objects in a Project
Removing Unused Support Objects from a Project
Emptying a Project
Deleting a Project


Sharing Projects

Describes how to share a project.

In a multiuser environment, the user who creates a project is referred to as its owner. Only the owner can share the project with other users.

A shared, or public, project is visible to other members of your team. A private project is not. If the project is not protected, these team members can delete the project, add source files, or remove source files.

Projects are private by default. Turn on sharing by choosing Project > Toggle Sharing. Choose Project > Toggle Sharing again to turn it off. A [image] symbol indicates that the project is shared.

Parent topic: Setting Up Projects
Related information
Protecting Projects


Moving or Copying Files into Projects

Describes how to move or copy files in projects.

Copy the contents of a project, folder, or file to a different project by selecting it and dragging and dropping the selection onto the project, or by using the Edit menu choices to copy and paste the selection. Use the Project menu choices described below to move selections, or to include referenced or referencing objects in a move or copy.

In other workbench tools, use the right-click menu or the File menu to include files into projects.
STEPS:
  1. In the Repository Browser, select the project, folder, or file you want to move or copy, then choose Project > Copy Project Contents (if you selected a project) or Project > Include into Project (if you selected a folder or file). The Select Project window opens.
  2. In the Select Project window, select the target project. Click New to create a new project.
  3. Select:
    • Include All Referenced Objects if you want to include objects referenced by the selected object (the Cobol copybooks included in a Cobol program file, for example).

    • Select Include All Referencing Objects if you want to include objects that reference the selected object.

    This feature is available only for verified files.
  4. Select:
    • Copy to copy the selection to the target project.
    • Move From Current Project to move the selection to the target project.
    • Move From All Projects to move the selection from all projects to the target project.
  5. Click OK to move or copy the selection.
Parent topic: Setting Up Projects
Related tasks
Creating Projects
Related information
Including Referenced and Referencing Objects in a Project
Removing Unused Support Objects from a Project


Including Referenced and Referencing Objects in a Project

Describes how to include referenced or referencing objects in projects.

After verification, you can include referenced or referencing objects in a project to ensure a closed system. You can include all referencing objects or only “directly referencing” objects: If program A calls program B, and program B calls program C, A is said to directly reference B and indirectly reference C. You can also remove unused support objects.

To include in a project:

  • Every object referenced by the objects in the project (including indirectly referenced objects), select the project in the Repository Browser and choose Project > Include All Referenced Objects.
  • Every object that references the objects in the project (including indirectly referencing objects), select the project in the Repository Browser and choose Project > Include All Referencing Objects.
  • Every object that directly references the objects in the project, select the project in the Repository Browser and choose Project > Include Directly Referencing Objects.
Parent topic: Setting Up Projects
Related tasks
Creating Projects
Moving or Copying Files into Projects
Related information
Removing Unused Support Objects from a Project


Removing Unused Support Objects from a Project

Describes how to remove unused support objects from a project.

To move unused support objects (Cobol copybooks, JCL procedures, PL/I include files, and so forth) from a project to the workspace, select the project in the Repository Browser and choose Project > Compact Project.

Parent topic: Setting Up Projects
Related tasks
Creating Projects
Moving or Copying Files into Projects
Related information
Including Referenced and Referencing Objects in a Project


Emptying a Project

Describes how to delete source files from a project without deleting them from the workspace.

To empty a project (without deleting the project or its contents from the workspace), select the project and choose Project > Empty Project Contents.

Parent topic: Setting Up Projects
Related tasks
Creating Projects
Related information
Deleting a Project


Deleting a Project

Describes how to delete a project from a workspace without removing its source files from the workspace.

To delete a project from a workspace (without deleting its source files from the workspace), select it and choose either File > Delete from Workspace or Project > Delete Project.

Only the owner of a project can delete it.
Parent topic: Setting Up Projects
Related tasks
Creating Projects
Related information
Emptying a Project


Enabling Parallel Verification

Describes how to enable parallel verification.

Parallel verification typically improves verification performance for very large workspaces by using multiple execution agents, called HyperCode Converters, to process source files concurrently. You can start any number of converters on the local machine, remote machines, or some combination of local and remote machines. You can run parallel verification online in the Modernization Workbench or in batch mode with the Batch Refresh Process (BRP).

Important: When you run parallel verification on more than one machine, you need to make sure that workspace and project verification options are set identically on each machine. The easiest way to do this is to log in as the same Windows user on each machine. Alternatively, you can define a default option set that is automatically assigned to every user in the environment who has not explicitly defined a custom option set. See the related topics for more information on option sets.
You enable parallel verification in three steps:
  • Select the parallel verification method and the minimum number of concurrent converters on the Verification > Parallel Verification tab of the Workspace Options.
  • Start the converters on the local and/or remote machines. If you start fewer than the minimum number of converters specified on the Parallel Verification tab, the verification process starts the needed converters automatically on the local machine.
  • Verify the workspace online in the Modernization Workbench or in batch mode using the Batch Refresh Process (BRP).
Verification results are reported in the Activity Log History window. They are not reported in the Activity Log itself (for online verification) or BRP log files (for batch verification). You can also use a Verification Report to view the results.

Follow the instructions below to launch HyperCode Converters and to specify the type of work the converters perform. You can launch multiple converters on the same machine. Once the minimum number of converters has been started, you can launch the converters at any point in the verification process.

STEPS:
  1. In the Modernization Workbench Administration window, choose Administer > Launch HyperCode Converter. The Launch HyperCode Converter window opens.
  2. In the Serve workspace combo box, specify the workspace to be processed.
  3. In the Processing Mode pane, select any combination of:
    • Conversion to perform operations used to generate a HyperView construct model.
    • Verification to perform verification operations.
  4. Select Produce Log File to generate a log file for parallel verification. The log file has a name of the form <workspace_name>HCC.<random_number>.log and is stored at the same level as the workspace (.rwp) file.
  5. Click OK. The workbench launches the HyperCode Converter. Click the [image] button on the Windows toolbar to view the HyperCode Converter window.
    Once verification has started, you can change the processing mode for a converter by selecting the appropriate choice in the Processing menu in the HyperCode Converter window.
Parent topic: Verifying Source Files
Parent topic: Using the Batch Refresh Process
Related tasks
Setting Workspace Verification Options: Parallel Verification Tab
Related information
Managing Option Sets


How the System Refreshes the Repository

Describes how the system refreshes the repository.

When you edit a source file in the Modernization Workbench, the system recursively checks every repository object that may be affected by the edit: refreshes the repository. If the edit invalidates the object, you need to reverify the source file that contains it. The file with the invalidated object is displayed in bold type in the Repository Browser.

Parent topic: Verifying Source Files
Related information
Invalidating Objects Before Reverification


Invalidating Objects Before Reverification

Describes how to invalidate objects before reverification.

You can save time reverifying very large applications by invalidating some or all of the source files in them before you reverify. You can invalidate a single file, a group of files, all the files in a folder, or all the files in a project.

In the Repository Browser, select the project, folder, or files you want to invalidate and choose File > Invalidate Selected Objects. Invalidated files are displayed in bold type in the Repository Browser.

Parent topic: Verifying Source Files
Related information
How the System Refreshes the Repository


Setting Workspace Verification Options: Legacy Dialects Tab

Describes how to set workspace verification options on the Legacy Dialects tab.

Use the Verification > Legacy Dialects tab of the Workspace Options window to identify the dialect of the source files in your application.

STEPS:
  1. Choose Tools > Workspace Options. The Workspace Options window opens. Click the Verification tab, then the Legacy Dialects tab.
  2. In the Source Type pane, select the source file type whose dialect you want to specify, then select the dialect in the dialect pane.
  3. Set verification options for the dialect. The table below shows the available options.
    Option | Dialect | Description
    48-character set | All PL/I | Specifies that the parser handle the 48-character set used with older hardware for logical operators.
    Allow long copybook names Cobol/390, Enterprise Cobol Specifies that the parser allow references to copybooks with names longer than 8 characters. The reference is flagged as unresolved.
    By default, names longer than 8 characters are truncated in the parse tree.
    Allow long program names Cobol/390, Enterprise Cobol Specifies that the parser allow references to programs with names longer than 8 characters. The reference is flagged as unresolved.
    By default, names longer than 8 characters are truncated in the parse tree.
    ASCII Compatibility | Unisys 2200 UCS Cobol | Specifies that the parser ensure consistency with the ASCII version of Unisys Cobol. Emulates behavior of compiler COMPAT option.
    Binary Storage Mode | ACUCOBOL-GT®, Micro Focus Cobol | Specifies the binary storage mode: Word (2, 4, or 8 bytes) or Byte (1 to 8 bytes).
    COPY REPLACING Substitutes Partial Words | All Cobol | Specifies that the application was compiled with partial-word substitution enabled for COPY REPLACE operations.
    COPY statements as in COBOL-68 | All Cobol | Specifies that the application was compiled with the OLDCOPY option set.
    Currency Sign | All Cobol, all PL/I | Specifies the national language currency symbol.
    Data File Assignment | Micro Focus Cobol | Specifies the setting of the compiler ASSIGN option: Dynamic or External.
    Enable MF comments | Micro Focus Cobol | Specifies that the application contains comments in the first position.
    Extralingual Characters | All PL/I | Add the specified lower-case national language characters to the supported character set. Do not separate characters with a space.
    Extralingual Upper Characters | All PL/I | Add the specified upper-case national language characters to the supported character set. Do not separate characters with a space.
    Graphical System | ACUCOBOL-GT® | Specifies that the application was executed on a graphical rather than character-based system.
    In Margins | All | Specifies the current margins for source files.
    Line Number Step | All Natural | Specifies the line-numbering increment to use in restoring stripped line numbers in Natural source files: Autodetect, to use a line-numbering increment based on line number references in the source code, or User defined, to use the line-numbering increment you specify. If you select User defined, enter the increment in the Value field.
    Logical Operators | All PL/I | Specifies handling of logical operator characters used in source files: Autodetect, to autodetect logical operator characters, or Characters, to use the logical operator characters you specify. If you select Characters, specify the characters used for NOT and OR operations.
    Out Margins | All PL/I | Specifies the margins for components to be created with the Modernization Workbench Component Maker tool.
    PERFORM behavior | ACUCOBOL-GT®, Micro Focus Cobol | Specifies the setting of the compiler PERFORM-type option: Stack, to allow recursive PERFORMS, or All exits active, to disallow them.
    Picture clause N-symbol | Cobol/390, Enterprise Cobol | Specifies the national language behavior of picture symbol N and N-literals: DBCS or National. Emulates behavior of compiler NSYMBOL option.
    Preserve dialect for verified objects | All Cobol | Specifies that the parser reverify Cobol files with the same dialect it used when the files were verified first.
    RM/Cobol compatibility | ACUCOBOL-GT® | Specifies that the parser ensure proper memory allocation for applications written for Liant RM/COBOL. Emulates behavior of -Ds compatibility option.
    Support Hogan Framework | Cobol/390, Enterprise Cobol | Specifies that the parser create relationships for Hogan Cobol programs. Enter the location of Hogan Cobol configuration files in the Hogan Files Location field.
    Treat COMP-1/COMP-2 as FLOAT/DOUBLE | ACUCOBOL-GT® | Specifies that the parser treat picture data types with COMP-1 or COMP-2 attributes as FLOAT or DOUBLE, respectively.
    Unisys MCP Control Options | Unisys MCP Cobol-74, Unisys MCP Cobol-85 | Specifies that the application was compiled with control options set or reset as specified. Add control options as necessary.
Parent topic: Verifying Source Files
Related tasks
Setting Workspace Verification Options: Settings Tab
Setting Project Verification Options
Setting Workspace Verification Options: Parallel Verification Tab
Related information
Adding a Selectable Item


Setting Workspace Verification Options: Settings Tab

Describes how to set workspace verification options on the Settings tab.

Use the Verification > Settings tab of the Workspace Options window to specify verification behavior for the workspace. Among other tasks, you can:

  • Enable staged parsing, which may improve verification performance by letting you control which verification stages the parser performs.
  • Enable relaxed parsing, which lets you verify source despite errors.
  • Enable advanced data flow analysis for control language files.
  • Enable sort card analysis.
STEPS:
  1. Choose Tools > Workspace Options. The Workspace Options window opens. Click the Verification tab, then the Settings tab.
  2. In the Source Type pane, select the source file type whose verification options you want to specify.
  3. Set verification options for the source file type. The table below shows the available options.
    Click the More or Details button if an option listed below does not appear on the Settings tab.
    Option | Source File | Description
    Allow Implicit Instream Data JCL

    Specifies that a DD * statement be inserted before implicit instream data if the statement was omitted from JCL.

    Allow Keywords to Be Used as Identifiers | Cobol, Copybook | Enables the parser to recognize Cobol keywords used as identifiers.
    At Sign | System Definition File | Specifies the national language character for the at symbol.
    C/C++ Parser Parameters | C, C++ | Specifies the parameters used to compile the application. You can also specify these parameters in the Project Verification options, in which case the project parameters are used for verification.
    Create Alternative Entry Point | Cobol | Specifies that an additional entry point be created with a name based on the conversion pattern you enter in the Conversion Pattern field. Supports systems in which load module names differ from program IDs. For assistance, contact support services.
    Cross-reference Report | TWS Schedule | Specifies the full path of the TWS cross-reference report (.xrf).
    Currency Sign | System Definition File | Specifies the national language character for the currency symbol.
    Debugging Lines | Cobol | Specifies parsing of debugging lines: Off, to parse lines as comments, On, to parse lines as normal statements, Auto, to parse lines based on the program debugging mode.
    Detect Potential Code Anomalies | Cobol | Enables generation of HyperView information on potential code anomalies.
    Enable extended ASCII characters in SQL identifiers | Cobol, PL/I | Enables the parser to recognize extended ASCII characters in SQL identifiers. The extended ASCII characters set includes national language characters not included in the basic ASCII character set and special symbols used for drawing pictures.
    Enable HyperView | Cobol, Natural, PL/I, RPG | Enables generation of HyperView information.
    Enable Quoted SQL Identifiers | Assembler File, Cobol, DDL | Enables the parser to recognize quoted SQL identifiers. Strings delimited by double quotation marks are interpreted as object identifiers.
    Enable Reference Reports | Cobol, Control Language, ECL, JCL, Natural, PL/I, RPG, W.L. | Enables generation of complete repository information for logical objects.
    Enter classpath to JAR Files and/or path to external Java file root directories Java

    Specifies any combination of:

    • JAR files containing class libraries referenced in the Java application, or Zip files containing external Java files referenced in the application. Alternatively, specify the path of the folder for the JAR or Zip files, then select Include Jar/Zip Files From Directories.
    • Paths of the root folders for external Java files referenced in the application.
    This option is checked after the identical option in the project verification options. Setting the project verification option effectively overrides the setting here.
    Extralingual Characters | System Definition File | Adds the specified lower-case national language characters to the supported character set. Do not separate characters with a space.
    Extralingual Upper Characters | System Definition File | Adds the specified upper-case national language characters to the supported character set. Do not separate characters with a space.
    Generate program entry points for functions with same name as file | C | Specifies that a program entry point be created for the function that has the same name as the file. Typically used to trace calls to C programs from Cobol, PL/I, Natural, RPG, or Assembler programs.
    Ignore Duplicate Entry Points | All | Enables the parser to recognize duplicate entry points defined by the Cobol statement ENTRY ‘PROG-ID’ USING A, or its equivalent in other languages. The parser creates an entry point object for the first program in which the entry point was encountered and issues a warning for the second program. To use this option, you must select Enable Reference Reports. You cannot use this option to verify multiple programs with the same program ID.
    Ignore Text After Column 72 | DDL | Allows the parser to ignore trailing enumeration characters (columns 73 through 80) in source lines.
    Libraries | PowerBuilder | Specifies the PowerBuilder libraries used by the application. Libraries must be listed in the order they appear in the PBL File folder in the Repository Browser. Add libraries as necessary.
    Libraries support | Natural | Enables Natural library support. For more information, see "Natural Support."
    List of Include Directories | C, C++ | Specifies the full path of the folders for include files (either original folders or Repository Browser folders if the include files were registered). Choose a recognized folder in the List of Include Directories pane. Add folders as necessary. You can also specify these folders in the Project Verification options, in which case the parser looks only for the folders for the project.
    Number Sign | System Definition File | Specifies the national language character for the number symbol.
    Perform Dead Code Analysis | Cobol, PL/I, RPG | Enables collection of dead code statistics.
    Perform DSN Calling Chains Analysis | Control Language, ECL, JCL, WFL | Enables analysis of dataset calling chains.
    Perform System Calls Analysis | JCL | Enables analysis of system program input data to determine the application program started in a job step.
    Relaxed Parsing | AS400 Screen, BMS, Cobol, Copybook, CSD, DDL, Device Description, DPS, ECL, MFS, Natural, Netron Specification Frame, PL/I | Enables relaxed parsing.
    Relaxed Parsing for Embedded Statements | Assembler File, Cobol, PL/I | Enables relaxed parsing for embedded SQL, CICS, or DLI statements.
    Resolve Decisions Automatically | Control Language, WFL | Enables automatic decision resolution.
    Show Macro Generation | C, C++ | Specifies whether to display statements that derive from macro processing in HyperView.
    Sort Program Aliases | JCL | Enables batch sort card analysis. Choose a recognized sort utility in the Sort Program Aliases pane. Add sort utilities as necessary.
    SQL Statements Processor | Cobol | Specifies whether the SQL Preprocessor or Coprocessor was used to process embedded SQL statements.
    System Procedures | JCL | Specifies the system procedures referenced by JCL files. Add system procedures as necessary.
    Timeout in seconds to stop verification execution | All | The number of seconds to wait before stopping a stalled verification process
    Treat every file with main procedure as a program | C, C++ | Specifies whether to treat only files with main functions as programs.
    Trim Date from Active Schedule Names | TWS Schedule | Specifies whether to append the effective date range to a TWS jobstream object.
    Truncate Names of Absolute Elements | ECL | Allows the parser to truncate suffixes in the names of Cobol programs called by ECL. Specify a suffix in the adjoining text box.
    Use Database Schema | Assembler File, Cobol, PL/I | Specifies whether to associate a program with a database schema. When this option is selected, the parser collects detailed information about SQL ports that cannot be determined from program text (SELECT *). If the schema does not contain the items the SQL statement refers to, an error is generated.
    Workstation Report | TWS Schedule | Specifies the full path of the TWS workstation report (.wdr).
  • Enabling Staged Parsing
    Introduces the staged parsing verification options.
  • Enabling Relaxed Parsing
    Describes how to enable relaxed parsing.
  • Enabling Advanced Data Flow Analysis for Control Language Files
    Describes how to enable advanced data flow analysis for control language files.
  • Enabling Sort Card Analysis
    Describes how to enable sort card analysis.
  • Truncating Names of Absolute Elements
    Describes how to truncate suffixes in the names of Cobol programs called by ECL.
Parent topic: Verifying Source Files
Related tasks
Setting Workspace Verification Options: Legacy Dialects Tab
Setting Workspace Verification Options: Parallel Verification Tab
Related information
Preparing TWS (OPC) Job Schedule Information
Natural Support


Enabling Staged Parsing

Introduces the staged parsing verification options.

File verification generates repository information in four stages, as described in this section. You can control which stage the workbench parser performs by setting the staged parsing options on the Settings tab for Workspace Verification options. That may save you time verifying very large applications.

Rather than verify the application completely, you can verify it one or two stages at a time, generating only as much information as you need at each point. When you are ready to work with a full repository, you can perform the entire verification at once, repeating the stages you’ve already performed and adding the stages you haven’t.

  • Basic Repository Information
    Describes how to generate basic repository information only.
  • Full Logical Objects Information
    Describes how to generate complete repository information for logical objects.
  • HyperView Information
    Describes how to generate a HyperView construct model.
  • Dead Code Statistics
    Describes how to generate dead code statistics.
Parent topic: Setting Workspace Verification Options: Settings Tab


Basic Repository Information

Describes how to generate basic repository information only.

To generate basic repository information only, deselect Enable HyperView, Enable Reference Reports, and Perform Dead Code Analysis on the Workspace Verification options Settings tab. The parser:

  • Generates relationships between source files (Cobol program files and copybooks, for example).
  • Generates basic logical objects (programs and jobs, for example, but not entry points or screens).
  • Generates Defines relationships between source files and logical objects.
  • Calculates program complexity.
  • Identifies missing support files (Cobol copybooks, JCL procedures, PL/I include files, and so forth).
If you generate only basic repository information when you verify an application, advanced program analysis information is not collected, regardless of your settings in the Project Options Verification tab.
Parent topic: Enabling Staged Parsing


Full Logical Objects Information

Describes how to generate complete repository information for logical objects.

To generate complete repository information for logical objects, select Enable Reference Reports on the Workspace Verification options Settings tab. Set this option to generate all relationships between logical objects, and to enable non-HyperView analysis tools, including Reference Reports and Orphan Analysis.

If you select this staged parsing option only, verify all legacy objects in the workspace synchronously to ensure complete repository information.
Parent topic: Enabling Staged Parsing


HyperView Information

Describes how to generate a HyperView construct model.

To generate a HyperView construct model, select Enable HyperView on the Workspace Verification options Settings tab. A HyperView construct model defines the relationships between the constructs that comprise the file being verified: its sections, paragraphs, statements, conditions, variables, and so forth.

To generate HyperView information on potential code anomalies, select Detect Potential Code Anomalies ion the Workspace Verification options Settings tab.

If you do not generate HyperView information when you verify an application, impact analysis, data flow, and execution flow information is not collected, regardless of your settings on the Project Verification options tab.
Parent topic: Enabling Staged Parsing


Dead Code Statistics

Describes how to generate dead code statistics.

To generate dead code statistics, and to set the Dead attribute to True for dead constructs in HyperView, select Perform Dead Code Analysis on the Workspace Verification options Settings tab. The statistics comprise:

  • Number of dead statements in the source file and referenced copybooks. A dead statement is a procedural statement that can never be reached during program execution.
  • Number of dead data elements in the source file and referenced copybooks. Dead data elements are unused structures at any data level, all of whose parents and children are unused.
  • Number of dead lines in the source file and referenced copybooks. Dead lines are source lines containing dead statements or dead data elements.

You can view the statistics in the Statistic tab of the Properties window for an object or in the Complexity Metrics tool.

Parent topic: Enabling Staged Parsing


Enabling Relaxed Parsing

Describes how to enable relaxed parsing.

The relaxed parsing option lets you verify a source file despite errors. Ordinarily, the parser stops at a statement when it encounters an error. Relaxed parsing tells the parser to continue to the next statement.

Use relaxed parsing when you are performing less rigorous analyses that do not need every statement to be modeled (estimating the complexity of an application written in an unsupported dialect, for example). Select Relaxed Parsing or Relaxed Parsing for Embedded Statements as appropriate on the Workspace Verification options Settings tab.

Relaxed parsing may affect the behavior of other tools. You cannot generate component code, for example, from source files verified with the relaxed parsing option.
Parent topic: Setting Workspace Verification Options: Settings Tab


Enabling Advanced Data Flow Analysis for Control Language Files

Describes how to enable advanced data flow analysis for control language files.

Ordinarily, Modernization Workbench data flow analysis tools let you trace the flow of data into or out of a dataset only up to the program actually referenced in the control language file, whether or not that program writes to or reads from the dataset. If you need to trace the flow of data through the entire “calling chain,” that is, not only the referenced program, but also any programs that program calls, and any programs they call in turn:

  • Select Perform DSN Calling Chains Analysis on the Workspace Verification options Settings tab for the control language file.
  • Verify control language files after you verify the source files for the programs they use. If you reverify the source file for a program, you must also reverify the control language file that uses it.

If you verify an entire project, the workbench parses the files in appropriate order, taking account of the dependencies between control language and program files.

Parent topic: Setting Workspace Verification Options: Settings Tab


Enabling Sort Card Analysis

Describes how to enable sort card analysis.

If you use sort utilities in JCL files, you can enable sort card analysis by specifying the names of the sort utilities to the parser in the Sort Program Aliases pane on the Workspace Verification options Settings tab. The parser creates an artificial program entity that defines the inputs and outputs for each sort utility invocation. The program has a name of the form JCLFileName.JobName.StepName.SequenceNumber, where SequenceNumber identifies the order of the step in the job.

Parent topic: Setting Workspace Verification Options: Settings Tab


Truncating Names of Absolute Elements

Describes how to truncate suffixes in the names of Cobol programs called by ECL.

If you are verifying ECL files for an application in which absolute element names differ from program IDs, you can tell the parser to truncate suffixes in the names of Cobol programs called by ECL. Select Truncate Names of Absolute Elements on the Workspace Verification options Settings tab for the ECL file.

If a Cobol program named CAP13MS.cob, for example, defines the entry point CAP13M, and an ECL program named CAP13M.ecl executes an absolute element called CAP13MA, then setting this option causes the parser to create a reference to the entry point CAP13M rather than CAP13MA.

Parent topic: Setting Workspace Verification Options: Settings Tab


Setting Workspace Verification Options: Parallel Verification Tab

Describes how to set workspace verification options on the Parallel Verification tab.

Use the Verification > Parallel Verification tab of the Workspace Options window to enable online or batch parallel verification and to specify the minimum number of HyperCode Converters the workbench should expect.

Important: When you run parallel verification on more than one machine, you need to make sure that workspace and project verification options are set identically on each machine. The easiest way to do this is to log in as the same Windows user on each machine. Alternatively, you can define a default option set that is automatically assigned to every user in the environment who has not explicitly defined a custom option set. See the related topics for more information on option sets.
STEPS:
  1. Choose Tools > Workspace Options. The Workspace Options window opens. Click the Verification tab, then the Parallel Verification tab.
  2. Select:
    • Run Parallel Verification in the Online Tool to enable parallel verification online. In the Minimum HyperCode Converters combo box, specify the minimum number of concurrent HyperCode Converters the workbench should expect.
    • Run Parallel Verification in BRP to enable parallel verification in the Batch Refresh Process (BRP) tool. In the Minimum HyperCode Converters combo box, specify the minimum number of concurrent HyperCode Converters the workbench should expect.
    Before running verification, start the necessary HyperCode Converters on the local and/or remote machines. If you start fewer than the minimum number of converters, the verification process starts the needed converters automatically on the local machine.
Parent topic: Verifying Source Files
Related tasks
Setting Workspace Verification Options: Legacy Dialects Tab
Setting Workspace Verification Options: Settings Tab
Setting Project Verification Options
Enabling Parallel Verification
Related information
Adding a Selectable Item
Managing Option Sets


Setting Project Verification Options

Describes how to set project verification options.

Use the Verification tab of the Project Options window to specify verification behavior for the selected project. Among other tasks, you can:
  • Specify how the parser treats environment-related code.
  • Specify the conditional constants the parser uses to compile programs in the project.
  • Specify schedule IDs for CA-7 jobs triggered by datasets.
  • Optimize verification for advanced program analysis.
STEPS:
  1. Choose Tools > Project Options. The Project Options window opens. Click the Verification tab.
  2. In the Source Type pane, select the source file type whose verification options you want to specify.
  3. Set verification options for the source file type. The table below shows the available options.
    Click the Environments, CopyLibs, Advanced, or Cobol Dialect button if an option listed below does not appear on the Verification tab.
    Option | Source File | Description
    AIM/DB Environment | Cobol | Specifies how the parser treats AIM/DB-environment-related code or its absence.
    C/C++ Parser Parameters | C, C++ | Specifies the parameters used to compile the application.
    CAP Processor predefined variables | Netron Specification Frame | Specifies the values of predefined environment variables the parser uses to compile Netron Specification Frames. Select each predefined variable you want the parser to recognize, then enter its value. Add variables as necessary.
    CICS Environment | Assembler, Cobol, PL/I | Specifies how the parser treats CICS-environment-related code or its absence.
    Context-Sensitive Value Analysis | Cobol | Specifies that the parser perform context-sensitive automatic decision resolution for Unisys MCP COMS analysis. Choosing this option may degrade verification performance.
    Dialect Specific Options | Cobol | Specifies dialect-specific options, including the conditional constants the parser uses to compile programs in the project. Select the Cobol dialect, then choose the constant in the Macro Settings pane. Add constants as necessary.
    DMS Environment | Cobol | Specifies how the parser treats DMS-environment-related code or its absence.
    DMSII Environment | Cobol | Specifies how the parser treats DMSII-environment-related code or its absence.
    DPS routines may end with error | Cobol | Specifies that the parser perform call analysis of Unisys 2200 DPS routines that end in an error. Error-handling code for these routines is either analyzed or treated as dead code.
    Enable Data Element Flow | Cobol, Natural, PL/I, RPG | Enables the Global Data Flow, Change Analyzer, and impact trace tools.
    Enable Execution Flow | Cobol, PL/I | Enables the Execution Path tool.
    Enable Extraction of Computation-Based Components | Cobol | Enables computation-based componentization with Application Architect.
    Enable Impact Report | Cobol, Natural, PL/I, RPG | Enables the impact trace tools. You must also set Enable Data Element Flow to perform impact analysis.
    Enable Parameterization of Components | Cobol | Enables parameterized structure- and computation-based componentization with Application Architect.
    Enter classpath to JAR Files and/or path to external Java file root directories Java

    Specifies any combination of:

    • JAR files containing class libraries referenced in the Java application, or Zip files containing external Java files referenced in the application. Alternatively, specify the path of the folder for the JAR or Zip files, then select Include Jar/Zip Files From Directories.
    • Paths of the root folders for external Java files referenced in the application.
    This option is checked before the identical option in the workspace verification options. Setting it here effectively overrides the setting in the workspace verification options.
    Helproutines | Natural Map | Specifies how you want the parser to treat helproutines, as programs or helpmaps.
    IDMS Environment | Cobol | Specifies how the parser treats IDMS-environment-related code or its absence.
    IMS Environment | Cobol | Specifies how the parser treats IMS-environment-related code or its absence.
    Java Classpath | JSP | For JSP files that reference Java types or packages defined in JAR files, external Java files, or Java files registered with the Preserve Folder Structure option, specifies a list of patterns used to resolve the location of the files. For more information, see "Resolving the Location of Java Types and Packages Referenced in JSP Files" in the "JSP Support" section of the help.
    Java Source Level | Java | Specifies the Java version. Set this option if your application uses constructs that are incompatible with the latest Java version. You would set this option to 1.4, for example, if your application used "enum" as an identifier, since "enum" is a reserved word in Java 5.
    Job to Schedule Ids File | CA-7 Schedule | Specifies the full path of a file that supplies schedule IDs for CA-7 jobs triggered by the creation of a dataset.
    Libraries | Natural | If you selected Libraries support in the Verification > Settings tab of the Workspace Options window for Natural files, specifies the order in which the parser searches for library names when it resolves program calls. Place a check mark next to a library to include it in the search. The parser always searches for the current library first. For more information, see "Natural Support."
    List of Include Directories | C, C++ | Specifies the full path of folders for include files (either original folders or Repository Browser folders if the include files were registered). Choose a recognized folder in the List of Include Directories pane. Add folders as necessary.
    List of Include Folders Cobol For applications using copybooks registered with the Preserve Folder Structure option, specifies the full path of folders for copybooks. Choose a recognized folder in the List of Include Folders pane. Add folders as necessary.
    Use this option to verify applications with identically named copybooks in different Partitioned Data Sets (PDS) on the mainframe. The order of folders in the list must correspond to the order of PDS files in the mainframe compilation job.
    Maximum Number of Variable’s Values | Cobol | Specifies the maximum number of values to be calculated for each variable during verification for advanced program analysis. Limit is 200.
    Maximum Size of Variable to Be Calculated | Cobol | Specifies the maximum size in bytes for each variable value to be calculated during verification for advanced program analysis.
    Override CICS Program Terminations | Cobol, PL/I | Specifies that the parser interpret CICS RETURN, XCTL, and ABEND commands as not terminating program execution. Error-handling code after these statements is either analyzed or treated as dead code.
    Perform COMS Analysis | Cobol | Specifies that the parser define relationships for Unisys MCP COMS SEND statements.
    Perform Generic API Analysis | Cobol, PL/I | Specifies that the parser define relationships with objects passed as parameters in calls to unsupported program interfaces, in addition to relationships with the called programs themselves.
    Perform Program Analysis | Cobol | Enables program analysis and component extraction features.
    Perform Unisys Common-Storage Analysis | Cobol | Specifies that the parser include in the analysis for Unisys Cobol files variables that are not explicitly declared in CALL statements, but that participate in interprogram communications. You must set this option to include Unisys Cobol common storage variables in impact traces and global data flow diagrams.
    Perform Unisys TIP and DPS Calls Analysis | Cobol | Specifies that the parser perform Unisys 2200 TIP and DPS call analysis.
    Report Writer Environment | Cobol | Specifies how the parser treats Report Writer-environment-related code or its absence.
    Resolve Decisions Automatically | Cobol, Natural, PL/I, RPG | Specifies that the parser autoresolve decisions after successfully verifying files.
    SQL Environment | Assembler, Cobol, RPG | Specifies how the parser treats SQL-environment-related code or its absence.
    Support CICS HANDLE statements | Cobol | Specifies that the parser detect dependencies between CICS statements and related error-handling statements,
    Use overwritten VALUEs | Cobol | Specifies that the parser use constants from VALUE clauses as known values even if they are overwritten in the program by unknown values.
    Use Precompiled Header File | C, C++ | Specifies that the parser verify the project with the precompiled header file you enter in the adjacent field. Do not specify the file extension. Using a precompiled header file may improve verification performance significantly. The content of the header file must appear in both a .c or .cpp file and a .h file. The precompiled header file need not have been used to compile the application.
    Use VALUEs from Linkage Section | Cobol | Specifies that advanced analysis tools not ignore parameter values in the Linkage Section.
  • Specifying the Processing Environment
    Describes how to specify the parser's handling of environment-related code.
  • Specifying Conditional Compiler Constants
    Describes how to specify the conditional constants the parser uses to compile programs in the project.
  • Optimizing Verification for Advanced Program Analysis
    Describes how to optimize verification for advanced program analysis.
Parent topic: Verifying Source Files
Related tasks
Setting Workspace Verification Options: Legacy Dialects Tab
Setting Workspace Verification Options: Parallel Verification Tab
Setting Workspace Verification Options: Settings Tab
Related information
Preparing CA-7 Job Schedule Information
Supplying Schedule IDs for a CA-7 Job Triggered by a Dataset
Natural Support
Performing Post-Verification Program Analysis
Adding a Selectable Item


Specifying the Processing Environment

Describes how to specify the parser's handling of environment-related code.

The Modernization Workbench parser autodetects the environment in which a file is intended to execute, based on the environment-related code it finds in the file. To ensure correct data flow, it sets up the internal parse tree for the file in a way that emulates the environment on the mainframe.

For Cobol CICS, for example, the parser treats an EXEC CICS statement or DFHCOMMAREA variable as CICS-related and, if necessary:

  • Adds the standard CICS copybook DFHEIB to the workspace.
  • Declares DFHCOMMAREA in the internal parse tree.
  • Adds the phrase Procedure Division using DFHEIBLK, DFHCOMMAREA to the internal parse tree.

Autodetection is not always appropriate, of course. You may want the parser to treat a file as a transaction-processing program even in the absence of CICS- or IMS-related code, for example. For each autodetected environment on the Project Verification options tab, select:

  • Auto, if you want the parser to autodetect the environment for the file.
  • Yes, if you want to force the parser to treat the file as environment-related even in the absence of environment-related code.
  • No, if you want to force the parser to treat the file as unrelated to the environment even in the presence of environment-related code. The parser classifies environment-related code as a syntax error.
Parent topic: Setting Project Verification Options


Specifying Conditional Compiler Constants

Describes how to specify the conditional constants the parser uses to compile programs in the project.

Compiler constant directives let you compile programs conditionally. Specify the conditional constants the parser uses to compile programs in the project in the Dialect Specific Options for your dialect on the Project Verification options tab. For Micro Focus Cobol, two formats are supported:
  • constant_name=value (where no space is allowed around the equals sign). In the following example, if you specify WHERE=PC on the Project Verification options tab, the source that follows the $if clause is compiled:
    $if WHERE = "PC"
           evaluate test-field
               when 5 perform test-a
           end-evaluate
  • constant_name. In the following example, if you specify NOMF on the Project Verification options tab, the source that follows the $if clause is compiled:
    $if NOMF set
           $display Not MF dialect
               go to test-a test-b depending on test-field
           $end
Parent topic: Setting Project Verification Options


Optimizing Verification for Advanced Program Analysis

Describes how to optimize verification for advanced program analysis.

When you enable advanced program analysis options for Cobol projects, the parser calculates constant values for variables at every node in the HyperView parse tree. That’s one reason why very large Cobol applications may encounter performance or memory problems during verification.

You may be able to improve verification performance and avoid out-of-memory problems by manipulating the Maximum Number of Variable’s Values and Maximum Size of Variable to Be Calculated options in the Project Verification options tab. The lower the maximums, the better performance and memory usage you can expect.

For each setting, you are warned during verification about variables for which the specified maximum is exceeded. It’s usually best to increase the overflowed maximum and reverify the application.

Parent topic: Setting Project Verification Options


Identifying System Programs

Describes how to identify system programs to the parser.

A system program is a generic program provided by the underlying operating system and used in unmodified form in the legacy application: a mainframe sort utility, for example. You need to identify system programs to the parser so that it can distinguish them from application programs and create relationships for them with their referencing files.

The most convenient way to identify the system programs your application uses is to run an unresolved report after verification. Once you learn from the report which system programs are referenced, you can identify them in the System Programs tab of the Workspace Options window and reverify any one of their referencing source files.

The reference report tool lets you bring up the System Programs tab of the Workspace Options window while you are in the tool itself. Choose View > System Programs in the reference report window to display the tab.
STEPS:
  1. Choose Tools > Workspace Options. The Workspace Options window opens. Click the System Programs tab.
  2. In the System Program Patterns pane, select the patterns that match the names of the system programs your application uses. Add patterns as necessary.
Parent topic: Verifying Source Files
Related information
Adding a Selectable Item


Specifying Boundary Decisions

Describes how to specify a boundary decision object.

Specify a boundary decision object if your application uses a method call to interface with a database, message queue, or other resource. Suppose the function f1f() in the following example writes to a queue named abc:

int f1f(char*)
{
    return 0;
}
int f2f()
{
    return f1f(“abc”);
}

As far as the parser is concerned, f1f(“abc”) is a method call like any other method call. There is no indication from the code that the called function is writing to a queue.

When you specify the boundary decisions for a workspace, you tell the parser to create a decision object of a given resource type for each such call. Here is the decision object for the write to the queue:

int f2f().InsertsQueue.int f1f(char*)

You can resolve the decision objects to the appropriate resources in the Decision Resolution tool.

STEPS:
  1. Choose Tools > Workspace Options. The Workspace Options window opens. Click the Boundary Decisions tab.
  2. In the Decision Types pane, select the decision types associated with called procedures in your application. For the example, you would select the Queue decision type.
  3. In the righthand pane, select each signature of a given method type you want to associate with the selected decision type. For the example, the method type signature would be int f1f(char*). Add signatures as necessary. Do not insert a space between the parentheses in the signature. You can use wildcard patterns allowed in LIKE statements by Visual Basic for Applications (VBA).
    Keep in mind that the signatures of C or C++ functions can contain an asterisk (*) character, as in the example. So if you specify a signature with a * character, you may receive results containing not only the intended signatures but all signatures matching the wildcard pattern. Delete the unwanted decision objects manually.
  4. Select the project, folder, or source files for the application and choose:
    • Prepare > Verify if the source files have not been verified.
    • Prepare > Apply Boundary Decisions if the source files have been verified, but boundary decisions have not been specified for the application, or the specification has changed.
    A decision object is added to the tree for the source files in the Repository Browser.
Parent topic: Verifying Source Files
Related information
Adding a Selectable Item
Using Wildcard Patterns in Searches


Generating Copybooks

Describes how to generate copybooks for RPG programs, Cobol programs that execute in the AS/400 environment, and MCP Cobol programs.

RPG programs and Cobol programs that execute in the AS/400 environment often use copy statements that reference Database Description or Device Description files rather than copybooks. MCP Cobol programs occasionally use copy statements that reference DMSII DASDL files. If your application uses copy statements to reference these types of files, you need to verify the files and generate copybooks for the application before you verify program files.

Copybook generation takes place in two steps:

  • For each database and device file object generated at verification, the system creates a target copybook object.
  • For each target copybook object, the system creates one or more physical copybooks.

Settings on the Generate Copybooks tab of the Project Options window determine conversion behavior. The default values should be appropriate for most installations.

STEPS:
  1. Verify:
    • Database Description files. For each Database Description file, the system creates a database file object with the same name as the Database Description file.
    • Device Description files. For each Device Description file, the system creates a device file object with the same name as the Device Description file.
    • DMSII DASDL files. For each DMSII DASDL file, the system creates a DMSII database file object with the same name as the DMSII DASDL file.
  2. In the Repository Browser, select the project, database file, or device file and choose:
    • Prepare > Generate RPG Copybooks for Project for RPG.
    • Prepare > Generate Copybooks for Project for AS/400 Cobol or MCP Cobol.
    Skip this step for MCP Cobol if you selected Generate After Successful Verification on the Generate Copybooks tab of the Project options window.

    The system creates a target copybook for each database or device file object, with a name of the form database file.DBCOPYBOOK or device file.DVCOPYBOOK, in the Target Copybooks folder.

  3. The system automatically converts the target copybooks to physical copybooks if you selected Convert Target Copybooks to Legacy Objects on the Generate Copybooks tab of the Project options window. If you chose not to convert target copybooks automatically, select the target copybooks and choose Prepare > Convert to Legacy. The system generates physical copybooks with names of the form DD_OF_database file.CPY or DV_OF_device file.CPY,
    After generating copybooks, you can generate screens for AS/400 Cobol device file objects by selecting the objects in the Repository Browser and choosing Prepare > Generate Screens.
  • Setting Generate Copybooks Options
    Describes how to set Generate Copybook options.
  • Copybook Generation Order
    Describes the order in which copybooks should be generated.
Parent topic: Verifying Source Files


Setting Generate Copybooks Options

Describes how to set Generate Copybook options.

For RPG or AS/400 Cobol application that use copy statements to reference Database Description or Device Description files, or MCP Cobol applications that use copy statement to reference DMSII DASDL files, use the Generate Copybooks tab of the Project Options window to specify how the system converts the files to physical copybooks.
STEPS:
  1. Choose Tools > Project Options. The Project Options window opens. Click the Generate Copybooks tab.
  2. For Cobol MCP only, select Generate After Successful Verification if you want to generate target copybooks automatically on verification of DMSII DASDL files.
  3. Select Convert Target Copybooks to Legacy Objects if you want to convert target copybooks automatically to physical copybooks when they are generated. then select:
    • Assign Converted Files to the Current Project if you want the system to create physical copybooks in the current project.
    • Keep Old Legacy Objects if you want the system not to overwrite existing physical copybooks, Replace Old Legacy Objects if you want the system to overwrite existing physical copybooks.
    • Remove Target Copybooks After Successful Conversion if you want the system to remove target copybooks from the current project after physical copybooks are generated.
Parent topic: Generating Copybooks


Copybook Generation Order

Describes the order in which copybooks should be generated.

It’s usually best to generate copybooks for an entire project, because the system processes objects in the appropriate order, taking account of the dependencies between them. That is not the case when you generate copybooks for given objects. Follow these rules to ensure correct results:

  • Copybooks for database file objects must be generated before copybooks for device file objects.
  • Copybooks for referenced objects must be generated before copybooks for referencing objects.
Parent topic: Generating Copybooks


Performing Post-Verification Program Analysis

Describes how to perform post-verification program analysis.

Much of the performance cost of program verification for Cobol projects is incurred by the advanced program analysis options in the Project Verification Options window. These features enable impact analysis, data flow analysis, and similar tasks.

You can improve verification performance by postponing some or all of advanced program analysis until after verification. As long as you have verified source files with the Enable Reference Reports and Enable HyperView workspace verification options, you can use the post-verification program analysis feature to collect the remaining program analysis information without having to reverify your entire legacy program.

To perform post-verification program analysis, select the project verification options for each program analysis feature you want to enable. In the Repository Browser, select the programs you want to analyze (or the entire project) and choose Prepare > Analyze Program.

The system collects the required information for each analysis feature you select. And it does so incrementally: if you verify a Cobol source file with the Enable Data Element Flow option selected, and then perform post-verification analysis with both that option and the Enable Impact Analysis option selected, only impact analysis information will be collected.

The same is true for information collected in a previous post-verification analysis. In fact, if all advanced analysis information has been collected for a program, the post-verification analysis feature simply will not start. In that case, you can only generate the analysis information again by reverifying the program.

  • Restrictions on Cobol Post-Verification Program Analysis
    Describes restrictions on Cobol post-verification program analysis.
  • Restrictions on PL/I Post-Verification Program Analysis
    Describes restrictions on PL/I post-verification program analysis.
Parent topic: Verifying Source Files
Related tasks
Setting Project Verification Options


Restrictions on Cobol Post-Verification Program Analysis

Describes restrictions on Cobol post-verification program analysis.

With the exception of Enable Impact Report and Enable Execution Flow, you should select all of the Perform Program Analysis options you are going to need for Cobol program analysis the first time you collect analysis information, whether during verification or subsequent post-verification analysis.This is because, with the exception of Enable Impact Report and Enable Execution Flow, selecting any of the options dependent on the Perform Program Analysis project verification option, whether during a previous verification or a previous program analysis, results in none of the information for those options being collected in a subsequent post-verification program analysis.

So if you verify a program with the Resolve Decisions Automatically option selected, then perform a subsequent program analysis with the Perform Generic API Analysis option selected, API analysis information is not collected. Whereas if you perform the subsequent program analysis with the Enable Impact Report option selected, impact analysis information is collected.

Similarly, if you perform program analysis with the Enable Impact Report option selected, then perform a subsequent program analysis with the Enable Parameterization of Components option selected, no parameterization information is collected. Whereas if you perform the subsequent program analysis with the Enable Execution Flow option selected, execution flow information is collected.

Parent topic: Performing Post-Verification Program Analysis


Restrictions on PL/I Post-Verification Program Analysis

Describes restrictions on PL/I post-verification program analysis.

For PL/I programs, selecting Resolve Decisions Automatically causes information for Enable Data Element Flow also to be collected, whether or not it already has been collected. Select these options together when you perform program analysis.

Parent topic: Performing Post-Verification Program Analysis


Using Post-Verification Reports

Introduces Modernization Workbench post-verification reports.

Use Modernization Workbench post-verification reports to check verification results, perform detailed executive assessments of the application, and view key data operations:

  • Verification Reports offer a convenient way to analyze project verification results.
  • Executive Reports offer HTML views of application inventories that a manager can use to assess the risks and costs of supporting the application.
  • CRUD Reports show the data operations each program in the project performs, and the data objects on which the programs operate.
  • Viewing Verification Reports
    Describes Modernization Workbench Verification Reports.
  • Viewing Executive Reports
    Describes Modernization Workbench Executive Reports.
  • Viewing CRUD Reports
    Describes Modernization Workbench CRUD Reports.


Viewing Verification Reports

Describes Modernization Workbench Verification Reports.

Use Verification Reports to display the verification errors and warnings for each source file in the selected project and to navigate to the offending code in source. To open the Verification Report window, select a project in the Repository Browser and choose Prepare > Verification Report. The verification report is displayed in the Verification Report window.

To show the verification report for a different project, select the project in the Projects drop-down on the toolbar. To refresh the report after reverifying a file, choose File > Generate Report.

The figure below shows the Verification Report window. By default, the Report and Source windows are displayed. Select the appropriate choice in the View menu to hide a window. Select the choice again to show the window.

  • Errors Pane
    Describes the Errors pane of the Verification Report window.
  • Files Affected Pane
    Describes the Files Affected pane of the Verification Report window.
  • Source Pane
    Describes the Source pane of the Verification Report window.
  • Marking Items
    Describes how to mark items in the Verification Report window.
  • Including Files into Projects
    Describes how to move or copy files listed in Verification Reports into projects.
  • Generating HTML Reports
    Describes how to generate HTML reports of Verification Report results.
Parent topic: Using Post-Verification Reports


Errors Pane

Describes the Errors pane of the Verification Report window.

The Errors pane of the Verification Report window displays the errors and warning for the project, sorted by the Files Affected column. Click the [image] button to display the errors for the project. Click the [image] button to display the warnings for the project. The buttons are toggles. Click the buttons again to hide errors or warnings.

Click an error or warning to display the affected files in the Files Affected pane and to highlight each instance of offending code in the Source pane. Mark an error or warning to mark the affected files in the Files Affected pane. The table below describes the columns in the Errors pane.

Column | Description
Severity | The severity of the error or warning.
Number | The error or warning number.
Count | The number of occurrences of errors or warnings of this type in the project.
Files Affected | The number of files affected by the error or warning.
Sample Text | The text of the error or warning message. If there are multiple occurrences of the error or warning, and the text of the message differs among occurrences, then the text of a sample occurrence.
Parent topic: Viewing Verification Reports


Files Affected Pane

Describes the Files Affected pane of the Verification Report window.

The top portion of the Files Affected pane displays the files affected by the error or warning selected in the Errors pane, the verification status of the file, and the numbers of occurrences of the error and warning in the file. Click a file to display the occurrences in the Details portion of the Files Affected pane. Select Show All Errors to display every error and warning for the selected file.

Errors are indicated with a [image] symbol. Warnings are indicated with a [image] symbol. Click an occurrence of an error or warning to navigate to the offending code in the Source pane.

Parent topic: Viewing Verification Reports


Source Pane

Describes the Source pane of the Verification Report window.

The Source pane displays view-only source for the file selected in the Files Affected pane. Offending code is highlighted in red.

Usage is similar to that for the Modernization Workbench HyperView Source pane. For more information, see Analyzing Programs in the workbench documentation set.

Parent topic: Viewing Verification Reports
Related information
Using the Source Pane


Marking Items

Describes how to mark items in the Verification Report window.

To mark an item, place a check mark next to it. To mark all the items in the selected tab, choose Edit > Mark All. To unmark all the items in the selected tab, choose Edit > Unmark All.

Parent topic: Viewing Verification Reports


Including Files into Projects

Describes how to move or copy files listed in Verification Reports into projects.

In very large workspaces, you may find it useful to move or copy files into different projects based on the errors they contain. Follow the instructions below to move or copy files listed in a Verification Report into a project.

STEPS:
  1. In the Files Affected pane, mark the items you want to move and choose File > Include Into Project. The Select Project window opens.
  2. In the Select Project window, select the target project. Click New to create a new project.
  3. Select:
    • Include All Referenced Objects if you want to include objects referenced by the selected object (the Cobol copybooks included in a Cobol program file, for example).

    • Select Include All Referencing Objects if you want to include objects that reference the selected object.

    This feature is available only for verified files.
  4. Select:
    • Copy to copy the selection to the target project.
    • Move From Current Project to move the selection to the target project.
    • Move From All Projects to move the selection from all projects to the target project.
  5. Click OK to move or copy the selection.
Parent topic: Viewing Verification Reports
Related information
Marking Items


Generating HTML Reports

Describes how to generate HTML reports of Verification Report results.

To generate HTML reports of Verification Report results, choose File > Report > <Report Type>. Before generating the Details for Checked Files report, mark each file on which you want to report.

Tip: The Missing Files report is a convenient alternative to an Unresolved Report when you are interested only in missing source files, and not in unresolved objects like system programs.
Parent topic: Viewing Verification Reports


Viewing Executive Reports

Describes Modernization Workbench Executive Reports.

Executive Reports offer HTML views of application inventories that a manager can use to assess the risks and costs of supporting the application:

  • The Application Summary view gives statistics for industry-standard metrics such as program volume, maintainability, cyclomatic complexity, and number of defects.
  • The Potential Code Anomalies view gives statistics for potential code anomalies that may mark programs as candidates for re-engineering: GOTO non-exits, range overlaps, and the like. You can customize potential code anomalies using the Define Anomalies feature.
    You must set Detect Potential Code Anomalies in the Verification > Settings tab of the Workspace Options window to generate these statistics.
  • The Repository Statistics view gives statistics for Modernization Workbench verification results and unresolved or unreferenced application elements.
  • The Standard Deviations view displays graphs that plot the deviation of the programs in the application from the means for six key industry-standard metrics.

To generate an Executive Report, choose Prepare > Executive Report. Project options on the Report > Executive Report tab determine the entities included in the report, and the functions the report performs. The report is stored in \<Workspace Home>\Output\Executive Report\Project\index.htm.

The figure below shows an Executive Report. The top page in each view displays the available statistics and graphs. Click the links to view the detail for each type of statistic or graph. In the statistic or graph detail page, click the link for a program to view the detail for that program.

After generating an Executive Report, use the Executive Report category in the HyperView Clipper tool to view potential code anomalies in program context.

  • Setting Executive Report Options
    Describes how to set Executive Report options.
  • Defining Potential Code Anomalies
    Describes how to modify existing definitions of potential code anomalies in the HyperView advanced search criteria.
  • Cobol Range Overlaps and Range Jumps Detected in the Executive Report
    Describes Cobol range overlaps and range jumps detected in the Executive Report.
Parent topic: Using Post-Verification Reports
Related information
Cobol Range Overlaps and Range Jumps Detected in the Executive Report


Setting Executive Report Options

Describes how to set Executive Report options.

Use the Report > Executive Report tab of the Project Options window to specify the entities included in executive reports, and the functions the report performs. Generally, the fewer entities and functions you choose, the better report generation performance you can expect. You should especially consider not reporting on:

  • Detail for code anomalies. Leave Generate Details unchecked.
  • Data stores. Leave data store entities unchecked.
  • Relationships, if you do not need cross-reference information. Leave Relationships unchecked.
STEPS:
  1. Choose Tools > Project Options. The Project Options window opens. Click the Report tab, then the Executive Report tab.
  2. Click Functionality, then select each report function you want to enable. For the Application Summary function, click Select Metrics. In the Application Summary (Averages) window, select Application Summary (Averages) to enable the function, then choose each metric you want to include in the report.
  3. Select each type of entity you want to include in the report. To edit the attributes included in the report for the entity type, click Attributes. In the Attributes window, select each attribute of the selected entity type to include in the report.
Parent topic: Viewing Executive Reports


Defining Potential Code Anomalies

Describes how to modify existing definitions of potential code anomalies in the HyperView advanced search criteria.

You can view and modify existing definitions of potential code anomalies (other than range overlaps and range jumps) in the HyperView advanced search criteria in the Coding Standards folder.

To define a new code anomaly, you must define an advanced search criterion for the anomaly and a matching entry in the file <Workbench Home>\Data\CodeDefects.xml. The entry has the form:

<DEFECT Id="name"
Internal="True|False"
Enabled="True|False"
Caption="display name"
ListName="list name"
Criterion="path of criterion"/>

where:

  • Id is a unique name identifying the code anomaly in the workbench.
  • Internal specifies whether the anomaly is implemented internally in program code (True), or externally in an advanced search criterion (False).
    You must specify False. Code anomalies with an Internal value of True cannot be modified.
  • Enabled specifies whether the code anomaly is displayed in the Executive Report.
  • Caption is the display name for the anomaly in the Executive Report.
  • ListName is the name of the list of anomalous code constructs displayed in the Executive Report category of the HyperView Clipper tool.
  • Criterion is the full path name of the criterion in the HyperView Advanced Search tool, including the tab name (General) and any folder names. For example, General:Coding Standards\MOVE Statements\Possible Data Padding.

You can display the anomaly caption in Japanese or Korean in the Executive Report by creating an entry for the anomaly in the file <Workbench Home>\Language\[Jpn|Kor]\CodeDefects.xrc. The entry has the form:

<String name="name"
listname="list name"
caption="translated display name"
description="description"/>

where:

  • name is the unique name of the code anomaly in the workbench (Id attribute of CodeDefects.xml entry).
  • listname is the name of the list of anomalous code constructs displayed in the Executive Report category of the HyperView Clipper tool (ListName attribute of CodeDefects.xml entry).
  • caption is the translated display name for the anomaly in the Executive Report.
  • description contains a description of the entry.
Parent topic: Viewing Executive Reports


Cobol Range Overlaps and Range Jumps Detected in the Executive Report

Describes Cobol range overlaps and range jumps detected in the Executive Report.

This section lists Cobol range overlaps and range jumps detected in the Executive Report. S* defects appear in the report under “Range Overlaps” as the sum of all defects S1+S2+S3+S4+S5+S6. G* defects appear in the report under “Range Jumps” as the sum of all defects G1+G2+G3+G5+G6+G7.

S0. No defects

Perform A1 thru A2.
Perform B1 thru B2.
…
.--A1.
| StatementsA1.
| …
| A2.
‘--- StatementsA2.
…
.--B1.
| StatementsB1.
| …
| B2.
‘--- StatementsB2.

S1. Overlapped sections

Perform A1 thru A2.
Perform B1 thru B2.
…
.--A1.
| StatementsA1.
| …
| B1. --.
| StatementsB1. |
| … |
| A2. |
‘--- StatementsA2. |
… |
B2. |
StatementsB2. –-’

S2. Overlapped sections

Perform A1 thru A2.
Perform B1 thru B2.
…
.--B1.
| StatementsB1.
| …
| A1. --.
| StatementsA1. |
| … |
| B2. |
‘--- StatementsB2. |
… |
A2. |
StatementsA2. –-’

S3. Overlapped sections

Perform A1 thru A2.
Perform B1 thru B2.
…
.--A1.
| StatementsA1.
| …
| B1. --.
| StatementsB1. |
| … |
| B2. |
| StatementsB2. –-’
| …
| A2.
‘--- StatementsA2.

S4. Overlapped sections

Perform A1 thru A2.
Perform A1 thru B2.
…
.--A1. --.
| StatementsA1. |
| … |
| B2. |
| StatementsB2. –-’
| …
| A2.
‘--- StatementsA2.

S5. Overlapped sections

Perform A1 thru A2.
Perform B1 thru A2.
…
.--A1.
| StatementsA1.
| …
| B1. --.
| StatementsB1. |
| … |
| A2. |
‘--- StatementsA2. --’

S6. Overlapped sections

Perform A1 thru A2.
…
.--A1.
| StatementsA1.
| …
| Perform B1 thru B2.
| …
| B1. --.
| StatementsB1. |
| … |
| B2. |
| StatementsB2. –-’
| …
| A2.
‘--- StatementsA2.

G0. No defects

Perform A1 thru A2.
…
.--A1.
| StatementsA1.
| …
| goto B1.
| …
| B1.
| StatementsB1.
| …
| A2.
‘--- StatementsA2.

G0. No defects

Perform A1 thru A2.
goto B1.
…
.--A1.
| StatementsA1.
| …
| A2.
‘--- StatementsA2.
…
B1.
StatementsB1.

G0. No defects

Perform A1 thru A2.
goto B1.
…
B1.
StatementsB1.
…
.--A1.
| StatementsA1.
| …
| A2.
‘--- StatementsA2.

G0. No defects

Perform A1 thru A2.
.--A1.
| StatementsA1.
| …
| A2.
‘--- StatementsA2.
…
goto B1.
…
B1.
StatementsB1.

G1. Break-in goto

Perform A1 thru A2.
…
goto B1.
…
.--A1.
| StatementsA1.
| …
| B1.
| StatementsB1.
| …
| A2.
‘--- StatementsA2.

G2. Break-in goto

Perform A1 thru A2.
…
goto A1.
…
.--A1.
| StatementsA1.
| …
| A2.
‘--- StatementsA2.

G3. Break-in goto

Perform A1 thru A2.
…
goto A2.
…
.--A1.
| StatementsA1.
| …
| A2.
‘--- StatementsA2.

S3G4=G1. Overlapped sections, break-in goto

Perform A1 thru A2.
…
.--A1.
| StatementsA1.
| …
| Perform B1 thru B2.
| …
| goto C1.
| B1. --.
| StatementsB1. |
| … |
| C1. |
| … |
| B2. |
| StatementsB2. –-’
| …
| A2.
‘--- StatementsA2.

G5. Break-out goto

Perform A1 thru A2.
…
.--A1.
| StatementsA1.
| …
| goto B1.
| …
| A2.
‘--- StatementsA2.
…
B1.
StatementsB1.

G6. Break-out goto

Perform A1 thru A2.
…
.--A1.
| StatementsA1.
| …
| goto A1.
| …
| A2.
‘--- StatementsA2.

G7. Break-out goto

Perform A1 thru A2.
…
.--A1.
| StatementsA1.
| …
| goto A2.
| …
| A2.
‘--- StatementsA2.

G8. No Defects

Perform A1 thru A2.
…
.--A1.
| StatementsA1.
| …
| goto A2.
| …
| A2.
‘--- EXIT.

S3G9=G5. Overlapped sections, break-out goto

Perform A1 thru A2.
…
.--A1.
| StatementsA1.
| …
| Perform B1 thru B2.
| …
| B1. --.
| StatementsB1. |
| … |
| goto C1. |
| … |
| B2. |
| StatementsB2. –-’
| …
| C1.
| …
| A2.
‘--- StatementsA2.
Parent topic: Viewing Executive Reports
Related information
Viewing Executive Reports


Viewing CRUD Reports

Describes Modernization Workbench CRUD Reports.

The CRUD Report for a project shows the data operations each program in the project performs, and the data objects on which the programs operate. To generate a CRUD Report, select a project in the Repository Browser and choose Prepare > CRUD Report. The figure below shows a CRUD Report.

Project options on the Report > CRUD Report tab determine the data operations and program-to-data object relationships displayed in CRUD reports. To refresh the report after modifying display options, choose File > Refresh in the CRUD Report window. To generate the report in HTML, choose File > Report.

The IMS data column of the CRUD report behaves differently from the columns for other data types. What appears in the IMS data column cells depends on what can be determined. If the segment can be determined, the cell is populated with the PSB name and segment name. Otherwise, the segment name is left blank. The format is xxxxxx.yyyyyyy, where xxxxxx is the PSB name and yyyyyyy is the segment name or blank if the segment cannot be determined.

  • Setting CRUD Report Options
    Describes how to set CRUD Report options.
Parent topic: Using Post-Verification Reports
Related information
Working with Reports and Diagrams


Setting CRUD Report Options

Describes how to set CRUD Report options.

Use the Report > CRUD Report tab of the Project Options window to specify the data operations and program-to-data object relationships displayed in CRUD Reports.

STEPS:
  1. Choose Tools > Project Options. The Project Options window opens. Click the Report tab, then the CRUD Report tab.
  2. Place a check mark next to each type of program-to-data object relationship you want to display.
  3. Place a check mark next to each type of data operation you want to display.
Parent topic: Viewing CRUD Reports


Inventorying Applications

Introduces the inventory analysis tools.

Users often ask why the Modernization Workbench parser encounters errors in working production systems. The reasons usually have to do with the source file delivery mechanism: incorrect versions or copybooks, corruption of special characters because of source code ambiguities, FTP errors, and so forth.

Use Modernization Workbench inventory analysis tools to ensure that all parts of your application are available to the parser:

  • Reference Reports let you track referential dependencies in verified source.
  • Orphan Analysis lets you analyze and resolve objects that do not exist in the reference tree for any top-level program object, so-called orphans. Orphans can be removed from a system without altering its behavior.
  • Decision Resolution identifies and lets you resolve dynamic calls and other relationships that the parser cannot resolve from static sources in Cobol, PL/I, and Natural programs.
  • Using Reference Reports
    Describes Modernization Workbench Reference Reports.
  • Using Orphan Analysis Reports
    Introduces orphan analysis.
  • Resolving Decisions
    Introduces decision resolution.


Using Reference Reports

Describes Modernization Workbench Reference Reports.

When you verify a legacy application, the parser generates a model of the application that describes the objects in the application and how they interact. If a Cobol source file contains a COPY statement, for example, the system creates a relationship between the file and the Cobol copybook referenced by the statement. If the copybook doesn’t exist in the repository, the system flags it as missing by listing it with a [image] symbol in the tree view of the Repository Browser.

Reference Reports let you track these kinds of referential dependencies in verified source:

  • An Unresolved Report identifies missing application elements.
  • An Unreferred Report identifies unreferenced application elements.
  • A Cross-reference Report identifies all application references.
  • An External Reference Report identifies references in object-oriented applications to external files that are not registered in the workspace, such as .java, Java Archive (JAR), or C++ include files (assuming you have identified the locations of these files in the Workspace Verification options window for the source files). These references are not reported as unresolved in the Unresolved Report.
Tip: The Missing Files report in the Verification Report tool is a convenient alternative to an Unresolved Report when you are interested only in missing source files, and not in unresolved objects like system programs.
  • Understanding the Reference Reports Window
    Describes the Reference Reports window
  • Setting Reference Reports Options
    Describes how to set Reference Reports options.
Parent topic: Inventorying Applications
Related tasks
Setting Workspace Verification Options: Settings Tab


Understanding the Reference Reports Window

Describes the Reference Reports window

Use Reference Reports to track referential dependencies in verified project source. To open the Reference Reports window, select a project in the Repository Browser and choose Prepare > Reference Reports.

When the Reference Reports window opens, choose the Reference Report type in the Report type drop-down. To limit the report to references in the current project, choose View > Restrict References to Project. To generate the report in HTML, choose File > Report.

The figure below shows an Unreferred Report window. The windows for the other reports are similar. By default, all Reference Report panes are displayed. Select the appropriate choice in the View menu to hide a pane. Select the choice again to show the pane.

  • Main Pane
    Describes the Reference Reports Main pane.
  • Preview Pane
    Describes the Reference Reports Preview pane.
Parent topic: Using Reference Reports
Related information
Working with Reports and Diagrams


Main Pane

Describes the Reference Reports Main pane.

The Main pane displays the objects in the Reference Report and their relationships. The table below describes the columns in the Main pane.

Column | Report Type | Description
Object Name | All | The name of the unresolved, unreferenced, cross-referenced, or externally referenced object.
Object Type | All | The entity type of the unresolved, unreferenced, cross-referenced, or externally referenced object.
Legacy Object | Unreferred Report, Cross-reference Report | The source file that contains the unreferenced or cross-referenced object.
Source | Unreferred Report, Cross-reference Report | The location in the workspace folder of the source file that contains the unreferenced or cross-referenced object.
Referred by | Unresolved Report, Cross-reference Report, External Reference Report | The name of the referring object.
Referring Object Type | Unresolved Report, Cross-reference Report, External Reference Report | The entity type of the referring object.
Relationship | Unresolved Report, Cross-reference Report, External Reference Report | The relationship between the unresolved, cross-referenced, or externally referenced object and the referring object.
Object Description | All | The description of the unresolved, unreferenced, cross-referenced, or externally referenced object entered by the user on the Description tab of the Object Properties window.
Parent topic: Understanding the Reference Reports Window


Preview Pane

Describes the Reference Reports Preview pane.

The Preview pane lets you browse HyperView information for the object selected in the Report pane. The information available depends on the type of object selected. You see only source code for a copybook, for example, but full HyperView information for a program. Choose the information you want to view for the object from the Source drop-down.

Parent topic: Understanding the Reference Reports Window
Related information
Using the Source Pane


Setting Reference Reports Options

Describes how to set Reference Reports options.

Use the Report > Reference Reports tab of the Project Options window to specify the entity types for which reference report information is collected.

STEPS:
  1. Choose Tools > Project Options. The Project Options window opens. Click the Report tab, then the Reference Reports tab.
  2. Place a check mark next to each type of entity you want to be included in reference reports.
Parent topic: Using Reference Reports


Using Orphan Analysis Reports

Introduces orphan analysis.

An object that does not exist in the reference tree for any top-level object is called an orphan. Orphans can be removed from a system without altering its behavior. Use the Orphan Analysis tool to find orphans.

What’s the difference between an orphan and an unreferenced object?

  • All unreferenced objects are orphans.
  • Not every orphan is unreferenced.

Suppose an unreferred report shows that the copybook GSS3.CPY is not referenced by any object in the project. Meanwhile, a cross-reference report shows that GSS3.CPY references GSS3A.CPY and GSS3B.CPY.

These copybooks do not appear in the unreferred report because they are referenced by GSS3.CPY. Only orphan analysis will show that the two copybooks are not in the reference tree for the GSS program and, therefore, can be safely removed from the project.

  • Understanding the Orphan Analysis Window
    Describes the Orphan Analysis window.
  • Setting Orphan Analysis Options
    Describes how to set Orphan Analysis options.
  • Deleting Orphans from a Project
    Describes how to delete orphans from a project without deleting them from the workspace.
  • Deleting Orphans from a Workspace
    Describes how to delete orphans from a workspace.
Parent topic: Inventorying Applications
Related information
Using Reference Reports


Understanding the Orphan Analysis Window

Describes the Orphan Analysis window.

Use the Orphan Analysis tool to determine whether an object exists in the reference tree for a top-level program object. To open the Orphan Analysis tool window, select a project in the Repository Browser and choose Prepare > Orphan Analysis.

Project options on the Report > Orphan Analysis tab specify the search filter for the report. To refresh the report after modifying the options, choose Orphans > Refresh in the Orphan Analysis window. To generate the report in HTML, choose File > Save Report As.

The Filter, Startup, and Find panes let you use hyperlinks to set up and apply the Orphan Analysis search filter. Use these panes instead of the options window if you prefer.

The figure below shows the Orphan Analysis window. By default, all Orphan Analysis panes are displayed. Select the appropriate choice in the View menu to hide a pane. Select the choice again to show the pane.

  • Found Objects Pane
    Describes the Orphan Analysis Found Objects pane.
  • Orphan Source Pane
    Describes the Orphan Analysis Source pane.
Parent topic: Using Orphan Analysis Reports
Related information
Working with Reports and Diagrams


Found Objects Pane

Describes the Orphan Analysis Found Objects pane.

The Found Objects pane shows the name, type, and source location of orphans. To show the list of orphans only, deselect View > Report View.

Parent topic: Understanding the Orphan Analysis Window


Orphan Source Pane

Describes the Orphan Analysis Source pane.

The Orphan Source pane lets you browse HyperView information for the object selected in the Found Objects pane. The information available depends on the type of object selected. You see only source code for a copybook, for example, but full HyperView information for a program. Choose the information you want to view for the object from the Source drop-down.

Parent topic: Understanding the Orphan Analysis Window
Related information
Using the Source Pane


Setting Orphan Analysis Options

Describes how to set Orphan Analysis options.

Use the Report > Orphan Analysis tab of the Project Options window to specify the search filter for an Orphan Analysis report.

STEPS:
  1. Choose Tools > Project Options. The Project Options window opens. Click the Report tab, then the Orphan Analysis tab.
  2. In the Startup pane, click Select Startup Types. The Startup dialog opens.
  3. In the Startup dialog, set up a search filter for the startup objects in the orphan analysis. You can filter on entity type, entity name, or both:
    • To filter on entity type, place a check mark next to the entity type you want to search for in the Roots pane.
    • To filter on entity name, place a check mark next to a recognized matching pattern in the Like pane, the Unlike pane, or both. Add patterns as necessary. You can use wildcard patterns allowed in LIKE statements by Visual Basic for Applications (VBA).
  4. When you are satisfied with your choices in the Startup dialog, click OK.
  5. In the Find pane, define the terms of the search by selecting the appropriate choice in the Relationships to Checked Startups drop-down, the Relationships to Unchecked Startups drop-down, or both.
  6. In the Entities pane, click Displayed Types. The Entities dialog opens. In the Entities dialog, place a check mark next to each type of entity to include in the report. When you are satisfied with your choices in the Entities dialog, click OK.
Parent topic: Using Orphan Analysis Reports
Related information
Using Wildcard Patterns in Searches


Deleting Orphans from a Project

Describes how to delete orphans from a project without deleting them from the workspace.

To delete an orphan from a project (but not the workspace), select the orphan in the Found Objects pane and choose Orphans > Exclude from Project.

Parent topic: Using Orphan Analysis Reports


Deleting Orphans from a Workspace

Describes how to delete orphans from a workspace.

To delete an orphan from the workspace, select the orphan in the Found Objects pane and choose Orphans > Delete from Workspace.

Parent topic: Using Orphan Analysis Reports


Resolving Decisions

Introduces decision resolution.

You need to have a complete picture of the control and data flows in a legacy application before you can diagram and analyze the application. The parser models the control and data transfers it can resolve from static sources. Some transfers, however, are not resolved until run time. Decision resolution lets you identify and resolve dynamic calls and other relationships that the parser cannot resolve from static sources.

  • Understanding Decisions
    Describes the decision resolution feature.
  • Understanding the Decision Resolution Tool Window
    Describes the Decision Resolution Tool window.
  • Resolving Decisions Manually
    Describes how to resolve decisions manually.
  • Restoring Manually Resolved Decisions
  • Resolving Decisions Automatically
  • Setting Decision Resolution Tool User Preferences
    Describes how to set Decision Resolution Tool user preferences.
Parent topic: Inventorying Applications


Understanding Decisions

Describes the decision resolution feature.

A decision is a reference to another object, a program or screen, for example, that is not resolved until run time. Consider a Cobol program that contains the following statement:

CALL ‘NEXTPROG’.

The Modernization Workbench parser models the transfer of control to program NEXTPROG by creating a Calls relationship between the original program and NEXTPROG.

But what if the statement read this way instead:

CALL NEXT.

where NEXT is a field whose value is only determined at run time. In this case, the parser creates a Calls relationship between the program and an abstract decision object called PROG.CALL.NEXT, and lists the decision object with a [image] icon in the tree view of the Repository Browser.

The Decision Resolution tool creates a list of such decisions and helps you navigate to the program source code that indicates how the decision should be resolved. You may learn from a declaration or MOVE statement, for example, that the NEXT field takes either the value NEXTPROG or ENDPROG at run time. In that case, you would resolve the decision manually by telling the system to create resolves to relationships between the decision and the programs these literals reference.

Of course, where there are hundreds or even thousands of such decisions in an application, it may not be practical to resolve each decision manually. In these situations, you can use the autoresolve feature to resolve decisions automatically.

The Decision Resolution tool analyzes declarations and MOVE statements, and any other means of populating a decision point, to determine the target of the control or data transfer. The tool may not be able to autoresolve every decision, or even every decision completely, but it should get you to a point where you can complete decision resolution manually.

Parent topic: Resolving Decisions


Understanding the Decision Resolution Tool Window

Describes the Decision Resolution Tool window.

Use the Decision Resolution tool to view and manually resolve decisions. To open the Decision Resolution tool window, select a project in the Repository Browser and choose Prepare > Resolve Decisions.

To save decision resolutions to the repository, choose File > Save. To generate the Decision Resolution report in HTML, choose File > Report.

The figure below shows the Decision Resolution window. By default, all Decision Resolution panes are displayed. Select the appropriate choice in the View menu to hide a pane. Select the choice again to show the pane.

  • Decision List Pane
    Describes the Decision Resolution Tool Decision List pane.
  • Available Targets Pane
    Describes the Decision Resolution Tool Available Targets pane.
  • Source Pane
    Describes the Decision Resolution Tool Source pane.
Parent topic: Resolving Decisions
Related information
Working with Reports and Diagrams


Decision List Pane

Describes the Decision Resolution Tool Decision List pane.

The Decision List pane displays the decisions in the project. To filter the list, choose the type of decision you want to display in the Decision Type drop-down. The table below describes the columns in the Decision List pane.

Column | Description
Name | The name of the object that contains the decision.
Type | The type of the object that contains the decision.
Variable | The program variable that requires the decision.
Completed | Whether the decision has been resolved.
Unreachable | Whether the decision is in dead code.
Manual | Whether the decision was resolved manually.
Resolved to | The target object the variable resolves to (an entry point, for example). An unresolved decision contains the grayed-out text Some Object.
Parent topic: Understanding the Decision Resolution Tool Window


Available Targets Pane

Describes the Decision Resolution Tool Available Targets pane.

For the selected decision type, the Available Targets pane lists the objects in the workspace to which the decision can be resolved. To resolve a decision to an available target, select the decision in the Decision List pane and place a check mark next to the target.

To limit the targets to objects in the current project, choose View > Restrict to Current Project. To delete a decision resolution, remove the check mark next to the target. To undo changes, choose Edit > Undo all changes.

Parent topic: Understanding the Decision Resolution Tool Window


Source Pane

Describes the Decision Resolution Tool Source pane.

The Source pane lets you browse HyperView information for the object selected in the Decision List pane. The information available depends on the type of object selected. You see only source code for a copybook, for example, but full HyperView information for a program. Choose the information you want to view for the object from the drop-down in the upper lefthand corner of the pane.

Parent topic: Understanding the Decision Resolution Tool Window
Related information
Using the Source Pane


Resolving Decisions Manually

Describes how to resolve decisions manually.

Follow the instructions below to resolve decisions manually to targets in or out of the workspace.
STEPS:
  1. To resolve decisions to available targets, select one or more entries in the Decision List pane and place a check mark next to one or more target objects in the Available Targets pane. If you link an entry to multiple targets, the Decision Resolution tool creates as many entries in the Decision List pane as there are targets.
    If you are linking an entry to multiple targets, you can save time by selecting the targets and choosing Edit > Link Selected Targets. You can also choose Edit > Copy to copy selected targets to the clipboard, then Edit > Paste to link the targets to an entry.
  2. To resolve decisions to targets not in the workspace, select one or more entries in the Decision List pane and choose Edit > Link New Target. The Link New Target window opens.
  3. In the Link New Target window, enter the name of the new target in the field on the righthand side of the window, or populate the field by clicking a literal in the list of program literals on the Literals tab. Filter the list by using:
    • The Minimum Literal Length slider to specify the minimum number of characters the literal can contain.
    • The Maximum Literal Length slider to specify the maximum number of characters the literal can contain.
    • The Names Like field to enter a matching pattern for the literal. You can use wildcard patterns allowed in LIKE statements by Visual Basic for Applications (VBA).
  4. Place a check mark next to Completed if you want the resolution to be marked as completed. When you are satisfied with your entry, click OK.
Parent topic: Resolving Decisions
Related tasks
Setting Decision Resolution Tool User Preferences
Related information
Restoring Manually Resolved Decisions
Using Wildcard Patterns in Searches
Resolving Decisions Automatically


Restoring Manually Resolved Decisions

Reverifying a file invalidates all of its objects, including its manually resolved decisions. The decision persistence feature lets you restore manually resolved decisions when you return to the Decision Resolution tool.

After reverifying a file for which you have manually resolved decisions, reopen the Decision Resolution tool. A dialog box prompts you to restore manually resolved decisions. Click Yes if you want to restore the decisions. Click No otherwise.

Place a check mark next to Don’t show me again if you want the Decision Resolution tool to open without prompting you to restore manually resolved decisions. In the Decision Resolution Tool tab of the User Preferences window, place a check mark next to Ask before restoring previous manual changes if you want to be prompted again.
Parent topic: Resolving Decisions
Related tasks
Resolving Decisions Manually
Setting Decision Resolution Tool User Preferences


Resolving Decisions Automatically

You can autoresolve decisions during verification by setting the Resolve decisions automatically option on the Verification tab of the Project Options window for a source file type.

For programs only, you can autoresolve decisions after verification by selecting the project, folder, or files for which you want to autoresolve decisions and choosing Prepare > AutoResolve Decisions. Only a master user can autoresolve decisions in a multiuser environment.

Decision Resolution cannot autoresolve every decision. The target name may be read from a data file, for example.
Parent topic: Resolving Decisions
Related tasks
Resolving Decisions Manually


Setting Decision Resolution Tool User Preferences

Describes how to set Decision Resolution Tool user preferences.

Use the Decision Resolution Tool tab of the User Preferences window to specify whether you want to be prompted to restore invalidated manually resolved decisions when you reopen the Decision Resolution tool.
STEPS:
  1. Choose Tools > User Preferences. The User Preferences window opens. Click the Decision Resolution Tool tab.
  2. Select Ask before restoring previous manual changes if you want to be prompted to restore manually resolved decisions when you reopen the Decision Resolution tool.
Parent topic: Resolving Decisions
Related tasks
Resolving Decisions Manually
Related information
Restoring Manually Resolved Decisions


Identifying Interfaces for Generic API Analysis

Introduces Generic API Analysis.

Use the Generic API Analysis feature if your legacy program calls an unsupported API to interface with a database manager, transaction manager, or similar external facility. In this call, for example:

CALL 'XREAD' using X

where X evaluates to a table name, the call to XREAD is of less interest than its parameter, the table the called program reads from. But because the parser does not recognize XREAD, only the call is modeled in the workbench repository.

You enable the Generic API Analysis feature by identifying unsupported APIs and their parameters in the file \<Workbench Home>\Data\Legacy.xml. Before you verify your application, set Perform Generic API Analysis on the Verification tab of the Project Options window. That option tells the parser to define relationships with the objects passed as parameters in the calls, in addition to relationships with the unsupported APIs themselves.

This section shows you how to identify the programs and parameters to the parser before verifying your application. You can specify both object and construct model information, and create different relationships or entities for the same parameter in a call.

The specification requires a thorough understanding of the Modernization Workbench repository models. For background on the repository models, see the Software Development Kit manual, available from support services.

Only the predefined definitions described in this section are guaranteed to provide consistent data to workbench databases.
  • Identifying Unsupported API Calls to the Parser
    Provides a checklist of Generic API Analysis tasks.
  • Using Expressions
    Describes how to use expressions to extract parameter values and context information.
  • Understanding Decisions
    Describes how to specify decisions.
  • Understanding Conditions
    Describes how to specify conditions.
  • Usage Example
    Provides sample code illustrating use of the Generic API Analysis feature.
  • Support for IMS Aliases
    Describes Generic API Analysis support for IMS aliases.


Identifying Unsupported API Calls to the Parser

Provides a checklist of Generic API Analysis tasks.

Follow the instructions in the steps below and the detailed specifications in the following sections to identify unsupported API calls to the parser. For each call, you need to define an entry in \<Workbench Home>\Data\Legacy.xml that specifies at a minimum:

  • The name of the called program and the method of invocation in the <match> tag.
  • The program control flow in the <flow> tag, and the direction of the data flow through the parameters of interest in the <param> subtags.
  • How to represent the call in the object model repository in the <rep> tag, and in the construct model repository in the <hc> tag.

Use the optional <vars> tag to extract values of a specified type, size, and offset from a parameter for use in a <rep> or <hc> definition.

Most repository entities can be represented in a <rep> or <hc> definition with the predefined patterns in \<Workbench Home>\Data\Legacy.xml.api. These patterns do virtually all of the work of the specification for you, supplying the relationship of the entity to the called program, its internal name, and so forth.

The syntax for specifying predefined patterns in a <rep> or <hc> definition is described in the section for the tag. Consult Legacy.xml.api for supported patterns and for required parameters and values.

STEPS:
  1. Open the file \<Workbench Home>\Data\Legacy.xml in an editor.
  2. Locate the <GenericAPI> section for the language and dialect you use.
  3. Create entries for each unsupported API call, following the specifications in the sections below and the samples of Generic API usage in Legacy.xml.
  4. Set Perform Generic API Analysis on the Verification tab of the Project Options window.
  5. Verify the project.
  • Using the API Entry Tag
    Describes how to use the API Entry tag.
  • Using the match Tag
    Describes how to use the match tag.
  • Using the flow Tag
    Describes how to use the flow tag.
  • Using the vars Tag
    Describes how to use the vars tag.
  • Using the rep and hc Tags
    Describes how to use the rep and hc tags.
Parent topic: Identifying Interfaces for Generic API Analysis


Using the API Entry Tag

Describes how to use the API Entry tag.

The name attribute of the <API Entry> tag is the name of the entry, used for error diagnostics only.

Parent topic: Identifying Unsupported API Calls to the Parser


Using the match Tag

Describes how to use the match tag.

The stmt attribute of the <match> tag identifies the method of invocation: a CALL, LINK, or XCTL statement. The value attribute of the <name> subtag identifies the name of the program to be matched. It can also be used to specify an alternative name for the entry.

The name of the program to be matched must be unique in the <GenericAPI> section. If names are not unique, the parser uses the last entry in which the name appears.

Example

<match stmt="CALL">
  <name value="XREAD"/>
</match>
Parent topic: Identifying Unsupported API Calls to the Parser


Using the flow Tag

Describes how to use the flow tag.

The <flow> tag characterizes the program control flow. The halts attribute of the <flow> tag specifies whether the calling program terminates after the call:

  • yes, if control is not received back from the API.
  • no (the default), if the calling program returns normally.

The <param> subtag identifies characteristics of the call parameters. Attributes are:

  • index is the index of the parameter that references the item of interest, beginning with 1. Use an asterisk (*) to specify all parameters not specified directly.
  • usage specifies the direction of the data flow through the parameter: r for input, w for output, rw for input/output. Unspecified parameters are assumed to be input/output parameters.
halts is supported only for call statements. For PL/I, input parameters are treated as input/output parameters.

Example

<flow halts='no'>
  <param index='1' usage='r'/>
  <param index='2' usage='r'/>
  <param index='3' usage='rw'/>
  <param index='*' usage='rw'/>
</flow>
Parent topic: Identifying Unsupported API Calls to the Parser


Using the vars Tag

Describes how to use the vars tag.

Use the <vars> tag to extract values of a specified type, size, and offset from a call parameter. You can then refer to the extracted values in the <rep> and <hc> tags using the %var_name notation.

The <arg> subtag characterizes the argument of interest. Attributes are:

  • var specifies the variable name.
  • param specifies the index of the parameter.
  • type specifies the variable type.
  • offset specifies the offset of the field in bytes.
  • bitoffset specifies the offset of the field in bits.
  • size specifies the size of the field in bytes.
  • bitsize specifies the size of the field in bits.

Additional attributes for PL/I are:

  • len specifies the size of a character or bit string field.
  • mode specifies the binary or decimal mode for a numeric field.
  • scale specifies the scale of a fixed-point numeric field.
  • prec specifies the precision of a fixed-point or floating-point numeric field.
  • varying specifies whether a bit string variable is encoded as a varying-length string in the structure (yes or no, the default).

Supported data types are described in the language-specific sections below.

Example

Suppose a call to a database-entry API looks like this:

CALL 'DBNTRY' USING DB-USER-ID
                    DB-XYZ-REQUEST-AREA
                    XYZ01-RECORD
                    DB-XYZ-ELEMENT-LIST.

If the second parameter contains a 3-character table name in bytes 6-8, the following definition extracts the name for use as the right end of a relationship:

<vars>
  <arg var='TableName'
       param='2'
       type='auto'
       offset='5'
       size='3'/>
</vars>
<rep>
  <rel>
    <target type='TABLE'
            name='%TableName'/>
    .
    .
    .
  </rel>
</rep>
  • Cobol-Specific Usage
    Describes Cobol-specific usage for the vars tag.
  • PL/I-Specific Usage
    Describes PL/I-specific usage for the vars tag.
Parent topic: Identifying Unsupported API Calls to the Parser


Cobol-Specific Usage

Describes Cobol-specific usage for the vars tag.

For Cobol, use the following data types in the <vars> tag:

  • data extracts a subarea of the parameter as raw byte data. You must specify the size and offset.
  • auto automatically determines the type of the variable, using the offset. If that is not possible, auto looks for a matching variable declaration and uses its type. You must specify the offset.
  • int behaves as auto, additionally checking that the resulting value is a valid integer and converting it to the canonical form. Offset defaults to 0.
bitoffset and bitsize are currently not supported. auto is not always reliable. Use data whenever possible.
Parent topic: Using the vars Tag


PL/I-Specific Usage

Describes PL/I-specific usage for the vars tag.

For PL/I, use the following data types in the <vars> tag:

  • data extracts a subarea of the parameter as raw byte data. You must specify the size and offset.
  • char specifies a character variable, with attribute varying if the string is encoded as a varying-length string in the structure. Offset defaults to 0, and size is specified via the required len attribute, which specifies the string length.
  • bit specifies a bit string variable, with attribute varying if the string is encoded as a varying-length string in the structure. Offset defaults to 0, and size is specified via the required len attribute, which specifies the string length in bits.
  • fixed specifies a fixed-point numeric variable, with attributes mode (binary or decimal, the default), scale (default 0), and prec (precision, default 5). Offset defaults to 0, and size is overridden with a value calculated from the type.
  • float specifies a floating-point numeric variable, with attributes mode (binary or decimal, the default) and prec (precision, default 5). Offset defaults to 0, and size is overridden with a value calculated from the type.
Do not use bitoffset and bitsize for types other than bit string.
Parent topic: Using the vars Tag


Using the rep and hc Tags

Describes how to use the rep and hc tags.

Use the <rep> tag to represent the API call in the object model repository. Use the <hc> tag and the <attr> subtag to represent the construct model (HyperCode) attributes of entities defined in the call.

You can use predefined or custom patterns to specify the relationship of interest. Expressions let you extract parameter values and context information for use in specifications of entity or relationship characteristics.

  • Using Predefined Patterns
    Describes how to use predefined patterns to specify repository relationships.
  • Using Custom Patterns
    Describes how to use custom patterns to specify repository relationships.
Parent topic: Identifying Unsupported API Calls to the Parser


Using Predefined Patterns

Describes how to use predefined patterns to specify repository relationships.

Most repository entities can be represented with the predefined patterns in \<Workbench Home>\Data\Legacy.xml.api. These patterns do virtually all of the work of the specification for you, supplying the relationship of the entity to the called program, its internal name, and so forth. They are guaranteed to provide consistent data to workbench databases.

To specify a predefined pattern, use the pattern name as a tag (for example, <tip-file>) anywhere you might use a <rel> tag. If the predefined pattern is specified at the top level of the entry, the parser creates a relationship with the calling program. If the predefined pattern is nested in an entity specification, the parser creates a relationship with the parent entity.

Each pattern has parameters that you can code as XML attributes or as subtags. So:

<transaction name='%2' params='' hc-kind='dpsSETRX'/>

Is equivalent to:

<transaction params=''>
  <name value='%2'/>
  <hc-kind value ='dpsSETRX'/
</transaction>

Use the subtag method when a parameter can have multiple values:

<file filename= '%2' data-record='%3'>
  <action switch-var='%op'>
    <case eq='1' value='Reads'/>
    <case eq='2' value='Reads'/>
    <case eq='4' value='Updates'/>
    <case eq='28' value='Inserts'/>
  </action>
  <hc-kind switch-var='%op'>
    <case eq='1' value='fcssRR'/>
    <case eq='2' value='fcssRL'/>
    <case eq='4' value='fcssWR'/>
    <case eq='28' value='fcssAW'/>
  </hc-kind>
</file>

Check Legacy.xml.api for further details of predefined pattern usage and for required parameters and values.

Parent topic: Using the rep and hc Tags


Using Custom Patterns

Describes how to use custom patterns to specify repository relationships.

Use custom patterns only when a predefined pattern is not available. Custom patterns are not guaranteed to provide consistent data to workbench databases.

  • Using the entity Subtag
    Describes how to use custom patterns with the entity subtag to specify repository relationships.
  • Using the rel Subtag
    Describes how to use custom patterns with the rel subtag to represent repository relationships.
Parent topic: Using the rep and hc Tags


Using the entity Subtag

Describes how to use custom patterns with the entity subtag to specify repository relationships.

The <entity> subtag represents an entity in the object model repository. Attributes are:

  • type specifies the entity type.
  • name specifies the entity name.
  • produced optionally indicates whether the entity is extracted, in which case it is deleted from the repository when the source file is invalidated (yes or no, the default).

Use the <attr> subtag to specify entity attributes. Attributes of the subtag are:

  • name specifies the attribute name.
  • value contains an expression that defines the attribute value.
  • join specifies the delimiter to use if all possible variable values are to be joined in a single value.

Use the <cond> subtag to specify a condition.

Parent topic: Using Custom Patterns


Using the rel Subtag

Describes how to use custom patterns with the rel subtag to represent repository relationships.

The <rel> subtag represents a relationship in the object model repository. Attributes are:

  • name specifies the relationship end name, which can be unrolled into a separate tag like the name or type of an entity.
  • decision specifies a decision.

The <target> and <source> subtags represent, respectively, the right and left ends of the relationship. These subtags are equivalent in function and syntax to the <entity> tag. Use the <cond> subtag to specify a condition.

As a practical matter, you will almost never have occasion to use the <entity> subtag.

If the <rel> subtag is specified at the top level of the entry, and no <source> tag is specified, the parser creates the relationship with the calling program; otherwise, it creates the relationship between the <source> and <target> entities. If the <rel> subtag is nested in an entity specification, the parser creates the relationship with the parent entity.

Example

Assume that we know that the second parameter in the API call described earlier for the <vars> tag contains a variable in bytes 1-3 that specifies the CRUD operation, in addition to the variable in bytes 6-8 specifying the table name. The following definition extracts the CRUD operation and table name:

<vars>
  <arg var='OpName'
       param='2'
       type='data'
       offset='0'
       size='3'/>
  <arg var='TableName'
       param='2'
       type='auto'
       offset='5'
       size='3'/>
</vars>
<rep>
  <rel>
    <target type='TABLE'
            name='%TableName'/>
    <name switch-var='OpName'>
      <case eq='RED' value='ReadsTable'/>
      <case eq='UPD' value='UpdatesTable'/>
      <case eq='ADD' value='InsertsTable'/>
      <case eq='DEL' value='DeletesTable'/>
    </name>
  </rel>
</rep>
Parent topic: Using Custom Patterns


Using Expressions

Describes how to use expressions to extract parameter values and context information.

Expressions let you extract parameter values and context information for specifications of entity or relationship characteristics. You can use simple variable names in expressions, or apply a primitive function call to a variable.

  • Basic Usage
    Describes basic usage of expressions.
  • Using a Function Call
    Describes how to use a function call in expressions.
  • Understanding Enumeration Order
    Describes enumeration rules for expressions.
Parent topic: Identifying Interfaces for Generic API Analysis


Basic Usage

Describes basic usage of expressions.

Use the %var_name or %parameter_number notation to define variables for parameter values. The number corresponds to the index of the parameter; parameters are indexed beginning with 1. Negative numbers index from the last parameter to the first.

Variables with names beginning with an underscore are reserved for special values. They generally have only one value. The table below describes the reserved variable names.

Name | Description
_line, _col | Line and column numbers of the call in source code.
_file | Index of the file in the file table.
_uid | UID of the node of the call in the syntax tree.
_fail | A permanently undefined variable. Use it to cause explicit failure.
_yes | A non-empty string for use as a true value.
_no | An empty string for use as a false value.
_pgmname | Name of the calling program.
_hcid | HyperCode ID of the call node.
_varname nn | If parameter number nn is passed using a simple variable reference (not a constant or an expression), this substitution variable contains its name. Otherwise, it is undefined.
  • Simple Notation
    Describes simple notation for expressions.
  • Switch Usage
    Describes switch usage in expressions.
  • Fallback Chain Usage
    Describes fallback chain usage in expressions.
Parent topic: Using Expressions


Simple Notation

Describes simple notation for expressions.

The simplest way to use a variable is to include it in an attribute value, prefixed with the percent character (%). (%% denotes the character itself.) If the character directly after the % is a digit or a minus sign (-), the end of the variable name is considered to be the first non-digit character. Otherwise, the end of the name is considered to be the first non-alphanumeric, non-underscore character. In:

'%abc.%2def'

the first variable name is abc and the second is 2. It is also possible to specify the end of the variable name explicitly by enclosing the name in curly brackets:

'%{abc}.%{2}def'

When evaluated, a compound string like this produces a string value that concatenates variable values and simple text fragments, or fails if any of the variables is undefined.

Parent topic: Basic Usage


Switch Usage

Describes switch usage in expressions.

Use a switch-var attribute instead of the value attribute when a tag expects a value with a compound string expression. The switch-var attribute contains a single variable name (which may be prefixed by %, but cannot be enclosed in curly brackets). Use <case>, <undef>, or <default> subtags to specify switch cases. These tags also expect the value attribute, so switches can be nested:

<name switch-var='var'>
  <case eq='value1' value='...'/>
  <case eq='value2' switch-var='%var2'>
    <undef value='...'/>
  </case>
  <undef value='...'/>
  <default value='...'/>
</name>

When a switch is evaluated, the value of the variable specified using the switch-var attribute is matched against the literal specified in the <case> tags. The literal must be the same size as the variable. (The literals value1 and value2 in the example assume that var is defined as having six bytes.) If an appropriate case is found, the corresponding case value is evaluated.

Set the value and type of the variable to __fail__ (two underscores) if you do not want a relationship to be produced for the variable:

<progname switch-var="%fname">
  <case eq="LINKDATA" value="%pname" type="Calls" params="%3" />
  <case eq="LINK" value="%pname" type="Calls" params="%3" />
  <case eq="READQTS" value="__fail__" type="__fail__" />
  <default value="" />
  </progname>

If the variable is undefined, and the <undef> tag is specified, its value is used; if not, the switch fails. Otherwise, if the <default> case is specified, it is used; if not, the switch fails.

Parent topic: Basic Usage


Fallback Chain Usage

Describes fallback chain usage in expressions.

Whenever multiple tags specifying a single attribute are presented in a <name>, <type>, or <case>/<undef>/<default> specification, those tags are joined into a fallback chain. If an entry in the chain fails, evaluation proceeds to the next entry. Only when the last entry of the chain fails is the failure propagated upward:

<name value='%a'/>
<name value='%b'/>
<name value='UNKNOWN'/>

If %a is defined, the name is its value. Otherwise, if %b is defined, the name is %b. Finally, if both are undefined, the name is UNKNOWN.

  • Fallback Semantics for Attributes
    Describes fallback semantics for attributes.
Parent topic: Basic Usage


Fallback Semantics for Attributes

Describes fallback semantics for attributes.

To determine the value of an attribute, the <attr> definitions for that attribute are processed one by one in order of appearance within the parent tag. For each definition, all combinations of variables used within it are enumerated, and all non-fail values produced are collected into a set:

  • If the set contains exactly one value, it is taken as the value of the attribute.
  • If the set contains multiple values, and the <attr> tag has a join attribute specified, the values are concatenated using the value of the join attribute as a delimiter, and the resulting string is used as the value for the repository attribute.
  • Otherwise, the definition fails, and the next definition in the sequence is processed. If there are no definitions left, the attribute is left unspecified.

This behavior provides a way to determine if the variable has a specific value in its value set. The following example sets the attribute to False if the first parameter can be undefined, to True otherwise:

<attr name='Completed' switch-var='1'>
  <undef value='False'/>
</attr>
<attr name='Completed' value='True'/>
Parent topic: Fallback Chain Usage


Using a Function Call

Describes how to use a function call in expressions.

When a variable name contains commas, it is split into a sequence of fragments at their boundaries, and then interpreted as a sequence of function names and their parameters. In the following example:

%{substr,0,4,myvar}

the substr function extracts the first four characters from the value of %myvar. The table below describes the available functions.

Functions can be nested by specifying additional commas in the last argument of the preceding function. In the following example:

%{int,substr,0,4,map}
switch-var='trim,substr,4,,map'

the first line takes the first four characters of the variable and converts them to a canonical integer, the second line takes the remainder, removes leading and trailing spaces, and uses the result in a switch, and so forth.

Function | Description
substr,<start>,<size>,<variable> | Extracts a substring from the value of the variable. The substring begins at position <start> (counted from 0), and is <size> characters long. If <size> is an empty string, the substring extends up to the end of the value string.
int,<variable> | Interprets the value of the variable as an integer and formats it in canonical form, without preceding zeroes or explicit plus (+) sign. If the value is not an integer, the function fails.
trim,<variable> | Removes leading and trailing spaces from a string value of the variable.
const,<string> or =,<string> | Returns the string as the function result.
warning,<id-num>[,<variable>] | Produces the warning specified by <id-num>, a numeric code that identifies the warning in the backend.msg file, and returns the value of the variable. If the variable is not specified, the function fails. So %{warning,12345} is equivalent to %{warning,12345,_fail}.
Parent topic: Using Expressions


Understanding Enumeration Order

Describes enumeration rules for expressions.

If the definition of the name of a relationship or the name or type of an entity contains substitution variables that have several possible values, the parser enumerates the possible combinations. The loops are performed at the boundary of the innermost <entity> or <rel> tag that contains the reference. (Loops for the target or source are raised to the <rel> level.)

Once the value for a variable has been established at a loop insertion point, it is propagated unchanged to the tags within the loop tag. So an entity attribute specification that refers to a variable used in the name of the entity will always use the exact single value that was used in the name.

If the expression for a name or type fails, the specified entity or relationship is locked out from processing for the particular combination of values that caused it to fail. This behavior can be used to completely block whole branches of entity/relationship definition tags:

<entity ...>
  <type switch-var='a'>
    <case eq='1' value='TABLE'/>
  </type>
  <rel name='InsertsTable' ..../>
</entity>
<entity ...>
  <type switch-var='a'>
    <case eq='2' value='MAP'/>
  </type>
  <rel name='Sends'..../>
</entity>

If %a is 1, the first declaration tree is used, and the table relationship is generated; the second declaration is blocked. If %a is 2, the second declaration tree is used, and the map relationship is generated; the first declaration is blocked.

These enumeration rules require that the value of a repository entity attribute not depend on variables used in the name of an enclosing <rel> tag, unless that variable is also used in the name of the entity itself. Otherwise, the behavior is undefined.
Parent topic: Using Expressions


Understanding Decisions

Describes how to specify decisions.

A decision is a reference to another object (a program or screen, for example) that is not resolved until run time. If there are multiple possible combinations of values of variables used in the name of the target entity, or if some of the variables are undefined, the parser creates a decision entity, replacing the named relationship with a relationship to the decision and a set of relationships from the decision to each instance of the target entity.

When you use the <rel> tag at the top level of the repository definition, you can specify a decision attribute that tells the parser to create a decision regardless of the number of possible values:

  • yes means that a decision is created regardless of the number of possible values.
  • no means that a decision is never created (multiple values results in multiple direct relationships).
  • auto means that a decision is created if more than one possible value exists, and is not created if there is exactly one possible value.

Both the relationship name and the type of the target entity must be specified as plain static strings, without any variable substitutions or switches:

<rep>
  <rel name='ReadsDataport' decision='yes'>
    <target type='DATAPORT' name='%_pgmname.%x'/>
  </rel>
</rep>
Parent topic: Identifying Interfaces for Generic API Analysis


Understanding Conditions

Describes how to specify conditions.

The <cond> subtag specifies a condition that governs the evaluation of declarations in its parent <entity> or <relationship> tag. The evaluation semantics of the tag follow the semantics for the <attr> tag: a non-empty string as a result indicates that the condition is true, an empty string or a failure indicates that the condition is false. Multiple <cond> tags can be specified, creating a fallback chain with <attr>-style fallback semantics.

Notice in the example given in the section on decisions that the parser creates a decision entity even when the name of the target resolves to a single value. Use a <cond> subtag in the relationship definition to avoid that:

<rel name='ReadsDataportDecision'>
  <cond if-multi='%x' value='%_yes'/>
  <target type='DECISION'>
    <attr name='HCID' value='%_hcid'/>
    <attr name='DecisionType' value='DATAPORT'/>
    <attr name='AKA'
          value='%_pgmname.ReadsDataport.%_varname1'/>
    <attr name='AKA'
          value='%_pgmname.ReadsDataport.'/>
    <attr name='VariableName' value='%_varname1'/>
    <attr name='Completed' if-closed='%x'
          value='True'/>
    <rel name='ResolvesToDATAPORT'>
      <target type='DATAPORT'
              name='%_pgmname.%x'/>
    </rel>
  </target>
</rel>
<rel name='ReadsDataport'>
  <cond if-single='%x' value='%_yes'/>
  <target type='DATAPORT' name='%_pgmname.%x'/>
</rel>

This repository definition produces the same result as the example in the section on decisions, except that no decision is created when the name of the target resolves to a single value.

_yes and _no are predefined variables that evaluate, respectively, to a non-empty and empty string for true and false, respectively. The if-single attribute means that the <cond> tag should be interpreted only if the specified variable has a single defined value. The if-multi attribute means that the <cond> tag should be interpreted if the variable has multiple values, none, or can be undefined. The if-closed attribute blocks the <cond> tag if the variable has an undefined value.

if-single, if-multi, and if-closed can also be used with the <attr> tag.

Conditions have join set to an empty string by default, resulting in a _yes outcome if any combination of values of the variables used in switches within causes it to evaluate to _yes. If a particular condition definition should fail when some of the values evaluate to _no and others to _yes, use a yes-only='yes' attribute specification. That causes join to be unset, and the condition to give a non-fail outcome only when all values evaluate to _yes.

In a relationship definition, <cond> determines whether the relationship is generated. For a decision relationship, it also determines whether the decision entity should be generated.

In an entity definition, <cond> governs all attribute and subrelationship definitions in the tag, and the creation of the entity in case of a standalone entity. For an entity specified in a <target> or <source> tag, instantiation of the relationship automatically spawns the corresponding entity, meaning that a false condition on the source or target of a relationship does not prevent creation of corresponding entities.

Parent topic: Identifying Interfaces for Generic API Analysis


Usage Example

Provides sample code illustrating use of the Generic API Analysis feature.

The following example illustrates use of the Generic API Analysis feature:

<APIEntry name='Call another program'>
  <match stmt="CALL">
    <name value="INVOKEPGM"/>
  </match>
  <flow halts='no'>
    <param index='1' usage='r'/>
    <param index='*' usage='w'/>
  </flow>
  <vars>
    <arg var='a' param='2' type='bit' len='5'/>
  </vars>
  <rep>
    <rel name='CallsDecision'>
      <target type='DECISION'>
        <attr name='AKA'
              value='%_pgmname.
              Calls.INVOKEPGM(%_varname1)'/>
        <attr name='AKA'
              value='%_pgmname.
              Calls.INVOKEPGM'/>
        <attr name='DecisionType'
              value='PROGRAMENTRY'/>
        <attr name='HCID' value='%_hcid'/>
        <attr name='VariableName'
              value='%_varname1'/>
        <attr name='Completed' switch-var='1'>
          <undef value='False'/>
        </attr>
        <attr name='Completed' value='True'/>
        <rel name='ResolvesToProgramEntry'>
          target type='PROGRAMENTRY'
                 name='%1'/>
        </rel>
      </target>
    </rel>
  </rep>
  <hc>
    <attr name='test' switch-var='a' join=','
      <case eq='00101' value='X'/>
      <undef value='?'/>
      <default value='%a'/>
    </attr>
  </hc>
</APIEntry>
Parent topic: Identifying Interfaces for Generic API Analysis


Support for IMS Aliases

Describes Generic API Analysis support for IMS aliases.

The <IMSC> subtag in the <Auxiliary> section of Legacy.xml contains definitions for the standard CBLTDLI or PLITDLI programs. You can also use it to define aliases for non-standard IMS batch interfaces.

If the order of parameters in the alias program is the same as the order of parameters in the standard program, simply enter the alias name in the <Detect> and <APIEntry> tags, as follows:

<IMSC>
  <Cobol>
    <Detect>
      <item> 'CBLTDLI' </item>
      <item> 'MYCBLTDLI' </item>
    </Detect>
    ...
    <Process>
      <APIEntry name='IMS call'>
        <match stmt="CALL">
          <name value="CBLTDLI"/>
          <name value="MYCBLTDLI"/>
        </match>
    ...
    </Process>
  </Cobol>
</IMSC>

If the order of parameters in the alias program differs from the order in the standard program, you also need to specify a full API entry, using the:

  • <match> tag to define the alias name and method of invocation.
  • <flow> tag to characterize the program control flow.
  • <ims-call> tag to specify the call parameters.

Use the definitions for CBLTDLI or PLITDLI as examples.

Attributes of <ims-call> are:

  • count specifies the index of the parameter that contains the argument count.
  • opcode specifies the index of the parameter that contains the operation code.
  • pcb specifies the index of the parameter that contains the Program Control Block (PCB) pointer.
  • arg-base specifies the index of the first data parameter, usually io-area.
Alternative parameter order is allowed only for the params-num, function-code, and pcb parameters. All other parameters (io-area and ssa) must appear in the same order as they do in the standard IMS call, at the end of the parameter list.
  • Skip Type Usage
    Describes skip type usage with IMS aliases.
Parent topic: Identifying Interfaces for Generic API Analysis


Skip Type Usage

Describes skip type usage with IMS aliases.

Use the skip-type attribute of the <param> subtag in the <halts> section to ensure that the optional first parameter of a Cobol IMS CALL is parsed only if necessary. If the actual parameter passed by the program in the first position has the type specified by the regular expression in skip-type, the parameter is filled with a dummy value and the actual value is used in the next parameter.

Skip definitions are also available for use in non-IMS generic API entries.

Example

If the first parameter in a call is a 4-character picture, the following definition inserts a dummy value in the first position and treats the actual value as that of the second parameter:

<param index='1'
       usage='r'
       skip-type='PIC:(X\(4\)'/>
Skip definitions are currently limited to declarations having picture clauses. Use regular expression syntax to specify normalized picture strings.
Parent topic: Support for IMS Aliases


Managing Tags

Introduces Tag Manager.

You use a simple tagging language to identify workspace objects as members of functional, structural, or other types of groupings. After you set up these groupings, you can chart them in EV or “black-box” them in the Diagrammer.

Each member of a grouping is identified by a tag, "Payroll," for example. Each grouping can, in turn, reference a more inclusive grouping, "HR," for instance. The figure below shows the tag hierarchy for a typical enterprise:

In fact, this is the default tag structure that ships with MW. The "Enterprise" tag is the root of the structure. The "Finance," "HR," and "Sales" tags represent departments in the enterprise. The "Accounting," "Payroll," and "CRM" tags are the applications owned by the departments.

  • Understanding the Tag Manager Window
    Describes the Tag Manager window.
  • Creating Tags
    Describes how to create tags.
  • Specifying Access to Tags
    Describes how to specify access rights to tags.
  • Assigning Tags
    Describes how to assign tags.
  • Removing Tags
    Describes how to unassign tags.
  • Creating Relationships Between Tags
    Describes how to create relationships between tags.
  • Deleting Tags
    Describes how to delete tags.
  • Creating Tag Queries
    Describes how to create tag queries.
  • Deleting Tag Queries
    Describes how to delete tag queries.
  • Refreshing the Tag Manager Window
    Describes how to refresh the Tag Manager window.
  • Cleaning Up the Tag Manager Window
    Describes how to clean up the Tag manager window.
  • Generating Reports
    Describes how to generate Tag Manager reports.


Understanding the Tag Manager Window

Describes the Tag Manager window.

Use the Tag Manager to create and assign tags to objects, and create relationships between tags. To open the Tag Manager, choose Analyze > Tag Manager.

The figure below shows the Tag Manager window. The Objects List pane shows repository objects and their tags. Your selections in the other Tag Manager panes filter the objects displayed in the Objects List pane.

By default, all Tag Manager panes are displayed. Select the appropriate choice in the View menu to hide a pane. Select the choice again to show the pane.

  • Object List Pane
    Describes the Object List pane.
  • Category Pane
    Describes the Category pane.
  • Projects Pane
    Describes the Projects pane.
  • Object Types Pane
    Describes the Object Types pane.
  • Search Pane
    Describes the Search pane.
  • Query Pane
    Describes the Query pane.
  • Tags Pane
    Describes the Tags pane.
Parent topic: Managing Tags


Object List Pane

Describes the Object List pane.

The Object List pane displays workspace objects filtered by your selections in the Category, Project, Object Types, Search, and/or Query panes; or by your selections in the Tags pane.

By default, the Object List pane displays up to 100 repository objects and their tags. Click the [image] button next to the [image] icon on the toolbar and choose:

  • More Objects in the drop-down menu to display the next 100 objects that match the filter criteria.
  • All Objects in the drop-down menu to display all the objects that match the filter criteria.
Parent topic: Understanding the Tag Manager Window


Category Pane

Describes the Category pane.

The Category pane displays the categories you can use to filter objects in the Object List pane:

  • All Objects comprises source and generated objects in the workspace.
  • Generated Objects comprises generated objects in the workspace.
  • Legacy Objects comprises source objects in the workspace.
Parent topic: Understanding the Tag Manager Window


Projects Pane

Describes the Projects pane.

The Projects pane displays the workspace projects you can use to filter objects in the Object List pane. Entire Workspace comprises all the projects in the workspace.

Parent topic: Understanding the Tag Manager Window


Object Types Pane

Describes the Object Types pane.

The Object Types pane displays the objects types you can use to filter objects in the Object List pane.

Parent topic: Understanding the Tag Manager Window


Search Pane

Describes the Search pane.

The Search pane lets you filter the objects in the Object List pane using wildcard patterns allowed in LIKE statements by Visual Basic for Applications (VBA). Enter the pattern in the Object Name field. The Object List pane is refreshed as you type.

In large repositories, the Object List pane may not immediately refresh as you type. Press the Enter key to instantly display matching objects for the current string.
Parent topic: Understanding the Tag Manager Window
Related information
Using Wildcard Patterns in Searches


Query Pane

Describes the Query pane.

The Query pane lets you filter the objects in the Object List pane using complex queries. Select a query to filter the Object List by its terms. Select another query and choose:

  • Add Tags > with <And> in the right-click menu to AND its results with the results of previous queries.
  • Add Tags > with <Or> in the right-click menu to OR its results with the results of previous queries.
Parent topic: Understanding the Tag Manager Window
Related tasks
Creating Tag Queries
Related information
Deleting Tag Queries


Tags Pane

Describes the Tags pane.

The Tags pane lists the tags in the workspace. Select one or more tags to display the objects assigned the tags in the Object List pane.

Parent topic: Understanding the Tag Manager Window


Creating Tags

Describes how to create tags.

To create a tag, choose Edit > Create in the Tag Manager window. A dialog box prompts you to enter the name of the new tag. Enter the name and click OK. The tag is displayed in the Tags pane.

Parent topic: Managing Tags
Related tasks
Assigning Tags


Specifying Access to Tags

Describes how to specify access rights to tags.

By default, the tags you create are public. To make a tag private, that is, visible only to you, select it and choose Set Access > Private in the right-click menu. To make the tag public again, choose Set Access > Public in the right-click menu.

Tags shipped with the workbench are always public. You cannot change their access.
Parent topic: Managing Tags
Related information
Public and Private Visibility


Assigning Tags

Describes how to assign tags.

You can assign tags to objects individually, or to all the objects generated from a source file. You can also assign tags to objects in the Repository pane, by selecting the objects and choosing Assign/Remove Tags in the right-click menu. Select a project or folder to assign tags to every first-level object in the project or folder.

STEPS:
  1. In the Object List pane, select the object(s) you want to assign a tag and choose Edit > Assign/Remove Tags. The Entity Tag Browser window opens.

  2. In the Entity Tag Browser window, select the tag(s) you want to assign and click the Assign button.
  3. If you are assigning a tag to a legacy source file, check Apply to Derived Objects to assign the selected tag(s) to all objects generated from the source file.
  4. Click OK to assign the selected tags.
The Object Tag column for the selected object(s) is updated to show the assigned tag(s) in the Objects List pane.
Parent topic: Managing Tags
Related tasks
Black-Boxing Tagged Objects
Related information
Creating Tags
Deleting Tags


Removing Tags

Describes how to unassign tags.

Removing a tag simply “unassigns” the tag from the selected object. The tag is not deleted from the repository. You can also remove tags from objects in the Repository pane, by selecting the objects and choosing Assign/Remove Tags in the right-click menu. Select a project or folder to remove tags from every first-level object in the project or folder.

STEPS:
  1. In the Object List pane, select the object(s) for which you want to remove tags and choose Edit > Assign/Remove Tags. The Entity Tag Browser window opens.

  2. In the Entity Tag Browser window, select the tag(s) you want to remove and click the Remove button.
  3. If you are removing a tag from a legacy source file, check Apply to Derived Objects to remove the selected tag(s) from all objects generated from the source file.
  4. Click OK to remove the selected tags.
The Object Tag column for the selected object(s) is updated in the Objects List pane.
Parent topic: Managing Tags


Creating Relationships Between Tags

Describes how to create relationships between tags.

The relationships between tags define the tag hierarchy. Create relationships between tags as described below.
STEPS:
  1. Choose Edit > Reference in the Tag Manager window. The References window opens.

  2. In the References window, click the [image] button on the toolbar.
  3. The Select dialog opens. Select the tags you want to create relationships between and click OK.
    You can also draw relationships between tags by clicking the [image] button on the toolbar. Select the first tag in the relationship and drag the mouse to the second tag in the relationship, then release the mouse button. See the Diagrammer help for instructions on how to use the other diagramming functions in the References window.
The tool draws a line between the referenced tags. To delete a relationship line, select it and click the [image] button on the toolbar.
Parent topic: Managing Tags
Related information
Analyzing Relationship Flows


Deleting Tags

Describes how to delete tags.

To delete tags from the repository, select them in the Tags pane and choose Edit > Delete Tags. You can also delete tags in the References window, by selecting them and clicking the [image] button on the toolbar.

Parent topic: Managing Tags
Related tasks
Assigning Tags


Creating Tag Queries

Describes how to create tag queries.

Use tag queries to filter the objects in the Object List pane in more complex ways than the other panes allow. Create a tag query as described below.
STEPS:
  1. Choose Query > New Query in the Tag Manager window. A dialog box prompts you to enter the name of the new query. Enter the name and click OK. The query is displayed in the Query pane.
  2. Select the query in the Query pane and choose Query > Edit Query. The Query window opens.

  3. Define the terms of the query. Click in the term field you want to define, then select the tag you want to add to the term definition and click Add. Tags added to the same term are ORed. Tags added to a different term are ANDed. Click Clear to clear the term definition.
  4. When you are satisfied with the query definition, click OK.
Parent topic: Managing Tags


Deleting Tag Queries

Describes how to delete tag queries.

To delete a tag query, select it and choose Delete in the right-click menu.

Parent topic: Managing Tags


Refreshing the Tag Manager Window

Describes how to refresh the Tag Manager window.

To refresh the Tag Manager window with the latest information from the repository, including changes made by other users, click the [image] button next to the [image] button on the toolbar and choose Refresh in the drop-down menu. If objects have been deleted from the repository, they will remain visible in the Object List pane until you clean up the Tag Manager window.

Parent topic: Managing Tags
Related information
Cleaning Up the Tag Manager Window


Cleaning Up the Tag Manager Window

Describes how to clean up the Tag manager window.

When objects are deleted from the repository, Tag Manager continues to display them in the Object List pane until you clean up the Tag Manager window. To clean up the window, click the [image] button next to the [image] button on the toolbar and choose Clean Up in the drop-down menu.

This feature is only available to master users. Running a clean up may take several minutes, depending on the size of your repository.
Parent topic: Managing Tags
Related information
Refreshing the Tag Manager Window


Generating Reports

Describes how to generate Tag Manager reports.

To generate an HTML report for all objects currently displayed in the Object List pane, choose File > Save Report.

Parent topic: Managing Tags
Related information
Working with Reports and Diagrams


Analyzing Relationship Flows

Introduces the Diagrammer.

Use the Diagrammer to view the relationships between objects in a scope, a data flow or call map, for example. These relationships describe the ways in which objects in the scope interact. In the data flow fragment below, for example, the GSS2 program reads the file GSS2.STATEMS. The file, in turn, is assigned to the CXXCP.OPK00.SNFILE data store.

The Diagrammer’s high-level analysis of relationships lets you quickly trace the flow of information in an application. You can use it to view program to program calls; program, transaction, and screen flows; job, program, and data store flows; and much more.

  • Understanding Relationship Flow Diagrams
    Describes relationship flow diagrams.
  • Understanding Diagram Scopes
    Explains diagram scopes.
  • Understanding Diagram Layouts
    Describes diagram layouts.
  • Generating a Diagram for the Selected Project
    Describes how to generate a diagram for a project.
  • Generating a Diagram for Objects Copied and Pasted onto the Canvas
    Describes how to generate a diagram for copied-and-pasted objects.
  • Understanding the Diagrammer Window
    Describes the Diagrammer window.
  • Excluding Objects Outside the Project
    Describes how to exclude objects outside the project from a diagram.
  • Showing Incomplete Composite Relationships
    Describes how to show incomplete composite relationships in the Diagrammer.
  • Colorizing Project Boundaries
    Describes how to colorize project boundaries in a diagram.
  • Showing and Hiding Object Labels
    Describes how to show and hide object labels.
  • Working with Groups
    Introduces the Diagrammer grouping feature.
  • Black-Boxing Tagged Objects
    Describes how to black-box tagged objects in a diagram.
  • Filtering Objects
    Describes how to filter objects from a diagram.
  • Clustering Objects
    Describes how to cluster objects on a diagram.
  • Setting Diagrams User Preferences
    Describes how to set Diagrams User Preferences.
  • Using the Scope Editor
    Describes the Scope Editor.
  • Pruning a Scope
    Describes how to prune relationships from a scope.
  • Mirroring a Scope
    Describes how to mirror a scope.


Understanding Relationship Flow Diagrams

Describes relationship flow diagrams.

Relationship flow diagrams use boxes and lines to show the relationships between objects in a scope. Depending on the Diagrammer mode, you can display the relationships for:

  • All the objects in the selected project.
  • Only the objects you copy and paste onto the canvas.

In each mode, all related workspace objects are included in the diagram. In copy-and-paste mode, you can add objects to an existing diagram and expand the diagram one level at a time.

Objects are color-coded, based on a color scheme of your choosing. If you have assigned business names to objects, their business names appear in the diagram as well as their technical names. You can “black-box” items in higher-level groupings that make it easy to visualize their roles in your application, cluster highly related objects, filter drivers and utilities, and much more.

Parent topic: Analyzing Relationship Flows


Understanding Diagram Scopes

Explains diagram scopes.

The scope of a diagram determines the relationships it displays. To view a diagram of the relationships, select the scope in the Scope drop-down and choose Scope > View Scope.

The Diagrammer provides default scopes that you can use for most analysis tasks, but you can create your own scopes if you like. You might want to exclude data stores from a data flow, or include source files in a call map. Use the Scope Editor to create your own scopes.

Parent topic: Analyzing Relationship Flows


Understanding Diagram Layouts

Describes diagram layouts.

Diagrammer layout styles are designed to produce aesthetically pleasing, easy-to-understand diagrams for a wide variety of needs. To choose a layout style, click the [image] symbol on the button for the active layout style, then select the layout style in the drop-down menu. The following styles are available:

  • The symmetric layout style (the default) organizes nodes based on symmetries detected in their relationships. Click the [image] button to choose the symmetric layout style.
    The symmetric style typically offers the best performance for very large diagrams.
  • The hierarchical layout style organizes nodes in precedence relationships, with levels for parent and child object types. Click the [image] button to choose the hierarchical layout style.
  • The orthogonal layout style organizes nodes in relationships drawn with horizontal and vertical lines only. Click the [image] button to choose the orthogonal layout style.
  • The tree layout style organizes nodes in parent-child relationships, with child nodes arranged on levels farther from the root node than their parents. Click the [image] button to choose the tree layout style.
  • The circular layout style organizes nodes in clusters of related objects. Click the [image] button to choose the circular layout style.

Click a layout style button in the drop-down to change the style after a diagram is drawn.

Parent topic: Analyzing Relationship Flows


Generating a Diagram for the Selected Project

Describes how to generate a diagram for a project.

Follow the instructions below to generate a relationship flow diagram for the selected project. You can exclude related workspace objects that are not in the project, colorize project boundaries, and show incomplete relationship chains. You can use tags to “black-box” objects in the diagram.

STEPS:
  1. In the Scope drop-down, choose the scope of the diagram.
  2. On the Diagram pane tool bar, choose the layout style for the diagram.
  3. in the Project drop-down or Browser pane, select the project.
  4. Click the [image] button on the Diagrammer tool bar
Parent topic: Analyzing Relationship Flows
Related tasks
Black-Boxing Tagged Objects
Related information
Excluding Objects Outside the Project
Showing Incomplete Composite Relationships
Colorizing Project Boundaries
Showing and Hiding Object Labels


Generating a Diagram for Objects Copied and Pasted onto the Canvas

Describes how to generate a diagram for copied-and-pasted objects.

Follow the instructions below to generate a relationship flow diagram for objects copied and pasted onto the canvas. In this mode, you can expand the diagram one level at a time and add objects to an existing diagram. You can exclude related workspace objects that are not in the project, colorize project boundaries, and show incomplete relationship chains. You can use tags to “black-box” objects in the diagram.

STEPS:
  1. In the Scope drop-down, choose the scope of the diagram.
  2. On the Diagram pane tool bar, choose the layout style for the diagram.
  3. in the Browser pane, select the startup objects for the diagram, then press CTRL-C to copy them onto the clipboard.
    Make sure to select startup objects in the diagram’s intended scope. Most scopes include logical objects rather than source files.
  4. To show the entire relationship flow for the selected objects, choose View > Auto Expand. Turn off Auto Expand if you want to expand the diagram one level at a time after it is drawn. Only immediate relationships of the selected objects are drawn initially.
  5. Click in the Diagram pane, then choose Diagram > Paste or press CTRL-V to paste the objects onto the Diagrammer canvas.
  6. Repeat the preceding step for each object whose relationships you want to add to the diagram. The diagram is automatically redrawn.
Parent topic: Analyzing Relationship Flows
Related tasks
Black-Boxing Tagged Objects
Related information
Expanding and Collapsing Relationships
Excluding Objects Outside the Project
Showing Incomplete Composite Relationships
Colorizing Project Boundaries
Showing and Hiding Object Labels


Understanding the Diagrammer Window

Describes the Diagrammer window.

Use the Diagrammer to view the relationships between application objects interactively. To open the Diagrammer, select a project in the Repository Browser and choose Analyze > Diagram.

The figure below shows the Diagrammer window. By default, all Diagrammer panes are displayed. Select the appropriate choice in the View menu to hide a pane. Select the choice again to show the pane.

  • Diagram Pane
    Describes the Diagram pane.
  • Browser Pane
    Describes the Browser pane.
  • Relationships Pane
    Describes the Relationships pane.
  • Quick View Pane
    Describes the Quick View pane.
  • Overview Pane
    Describes the Overview pane.
Parent topic: Analyzing Relationship Flows


Diagram Pane

Describes the Diagram pane.

The Diagram pane displays the diagram for the selected scope. To save a diagram in one of the supported diagram formats, click the [image] on the Diagram pane tool bar. To save a diagram in one of the supported image formats, click the [image] on the Diagram pane tool bar.

To print a diagram, click the [image] button on the Diagram pane tool bar. To preview the printed diagram, click the [image] button on the Diagram pane tool bar.

  • Selecting an Object or Relationship
    Describes how to select objects or relationships.
  • Searching for an Object
    Describes how to search for an object.
  • Navigating to an Object from a Relationship
    Describes how to navigate to an object from a relationship.
  • Expanding and Collapsing Relationships
    Describes how to expand and collapse relationships.
  • Moving an Object or Relationship
    Describes how to move an object or relationship.
  • Resizing an Object
    Describes how to resize an object.
  • Hiding an Object
    Describes how to hide objects on the canvas.
  • Deleting an Object or Relationship
    Describes how to delete an object or relationship from a diagram.
  • Assigning Tags
    Describes how to assign tags in the Diagrammer.
  • Assigning Business Names
    Describes how to assign and unassign a business name and business description.
  • Displaying Labels for Multiple Relationships
    Describes how to display the labels for multiple relationships.
  • Hiding Relationship Labels
    Describes how to hide relationship labels on the canvas.
  • Displaying the Legend for a Diagram
    Describes how to display the legend for a diagram.
  • Zooming
    Describes how to zoom in a diagram.
  • Moving a Diagram
    Describes how to move a diagram.
  • Clearing a Diagram
    Describes how to clear a diagram.
  • Saving a Diagram
    Describes how to save a diagram.
  • Printing a Diagram
    Describes how to print a diagram.
  • Generating Diagram Reports
    Describes how to generate diagram reports.
Parent topic: Understanding the Diagrammer Window


Selecting an Object or Relationship

Describes how to select objects or relationships.

To enable select mode, click the [image] button on the Diagram pane tool bar.

  • To select an object in a diagram, click it on the diagram canvas. Use Ctrl-click to select multiple objects, or click a blank area of the canvas, then drag the mouse over multiple objects to “lasso” the objects. Selected objects are displayed with handles that you can use to size the object.
  • To select a relationship in a diagram, click it on the diagram canvas. The selected relationship is displayed in blue.
Parent topic: Diagram Pane


Searching for an Object

Describes how to search for an object.

To search for an object in a diagram, enter the text you want to match in the Search field on the Diagrammer tool bar and press Enter. You can use wildcard patterns allowed in LIKE statements by Visual Basic for Applications (VBA).

Parent topic: Diagram Pane


Navigating to an Object from a Relationship

Describes how to navigate to an object from a relationship.

To navigate to the diagram object on the left side of a relationship, select the relationship and choose Locate Left in the right-click menu. To navigate to the diagram object on the right side of a relationship, select the relationship and choose Locate Right in the right-click menu.

Use the Overview pane to navigate to general locations in a diagram.
Parent topic: Diagram Pane
Related information
Overview Pane


Expanding and Collapsing Relationships

Describes how to expand and collapse relationships.

To expand the incoming relationships for an object in a diagram generated in copy-and-paste mode, select the object on the diagram canvas and choose Expand > Expand Incoming in the right-click menu. To expand the outgoing relationships, select the object on the diagram canvas and choose Expand > Expand Outgoing in the right-click menu.

To collapse the incoming relationships for an object, select the object on the diagram canvas and choose Collapse > Collapse Incoming in the right-click menu. To expand the outgoing relationships, select the object on the diagram canvas and choose Collapse > Collapse Outgoing in the right-click menu.

Parent topic: Diagram Pane


Moving an Object or Relationship

Describes how to move an object or relationship.

To move an object or relationship in a diagram, select it and drag it to the desired location on the diagram canvas.

Parent topic: Diagram Pane


Resizing an Object

Describes how to resize an object.

To resize an object in a diagram, select it on the diagram canvas and drag one of its handles to the desired location.

Parent topic: Diagram Pane


Hiding an Object

Describes how to hide objects on the canvas.

To hide objects on the canvas, select an object and choose:
  • Hide > Selected in the right-click menu to hide the selected object.
  • Hide > Incoming in the right-click menu to hide incoming nodes of the selected object.
  • Hide > Outgoing in the right-click menu to hide outgoing nodes of the selected object.
To display the object again, double-click the [image] button for a related object.
Parent topic: Diagram Pane


Deleting an Object or Relationship

Describes how to delete an object or relationship from a diagram.

To delete an object in a diagram, select the object on the diagram canvas and choose Delete Node in the right-click menu. To delete a relationship in a diagram, select the relationship on the diagram canvas and choose Delete Edge in the right-click menu.

Parent topic: Diagram Pane


Assigning Tags

Describes how to assign tags in the Diagrammer.

You can assign tags manually in Diagrammer or automatically, to all the objects in a cluster. Follow the instructions below to assign tags manually.

STEPS:
  1. Select the objects you want to assign tags on the diagram canvas and choose Assign Tags in the right-click menu. The Entity Tag Browser window opens.
  2. In the Entity Tag Browser window, select the tag(s) you want to assign and click the Assign button.
  3. If you are assigning a tag to a legacy source file, check Apply to Derived Objects to assign the selected tag(s) to all objects generated from the source file.
  4. Click OK to assign the selected tags.
Parent topic: Diagram Pane
Related information
Generating Tags from Clusters


Assigning Business Names

Describes how to assign and unassign a business name and business description.

To assign a business name and business description to an object, select the object and choose Set Business Attributes in the right-click menu. A dialog box opens, where you can enter the business name and business description. To unassign a business name or business description, simply delete the value in the dialog box.

If multiple objects are selected, Diagrammer displays the dialog box as many times as there are objects.
Parent topic: Diagram Pane


Displaying Labels for Multiple Relationships

Describes how to display the labels for multiple relationships.

The Diagrammer denotes that an object has multiple relationships with another object by displaying a number in parentheses (n) along the relationship line, where n represents the number of relationships. Double-click the parenthesis to display the relationship labels. Double-click the relationship labels to hide them again.

Parent topic: Diagram Pane


Hiding Relationship Labels

Describes how to hide relationship labels on the canvas.

To hide relationship labels on the canvas, click the [image] button on the tool bar and choose Hide Relationship Labels in the drop-down menu. To show the relationship labels again, click the [image] button on the tool bar and choose Show Relationship Labels in the drop-down menu. To show hidden nodes as well as hidden relationship labels, click the [image] button on the tool bar and choose Unhide All in the drop-down menu.

Parent topic: Diagram Pane


Displaying the Legend for a Diagram

Describes how to display the legend for a diagram.

To display the legend for a diagram, click the [image] button on the tool bar and choose Show Legend in the drop-down menu.

Parent topic: Diagram Pane


Zooming

Describes how to zoom in a diagram.

To zoom in interactive mode, click [image] button on the Diagram pane tool bar, then drag the mouse over the diagram to zoom on it.

To zoom in marquee mode, click [image] button on the Diagram pane tool bar, then drag the mouse over the diagram to draw a marquee. The Diagrammer displays the portion of the diagram inside the marquee.

To fit the diagram in the Diagram pane, click the [image] button on the Diagram pane tool bar.

Parent topic: Diagram Pane


Moving a Diagram

Describes how to move a diagram.

To move a diagram in the Diagram pane, click the [image] button on the Diagram pane tool bar to choose panning mode, then hold down the left mouse button and drag the mouse to move the diagram.

Parent topic: Diagram Pane


Clearing a Diagram

Describes how to clear a diagram.

To clear the Diagram pane, choose Diagram > Clear.

Parent topic: Diagram Pane


Saving a Diagram

Describes how to save a diagram.

Click the [image] button on the Diagram pane tool bar to save a diagram in one of the supported image types. A Save As dialog opens, where you can specify the image type and characteristics. Click the [image] button on the Diagram pane tool bar to save a diagram in one of the supported diagram types. A Save dialog opens, where you can specify the name, type, and location of the file.

Parent topic: Diagram Pane


Printing a Diagram

Describes how to print a diagram.

Click the [image] button on the Diagram pane tool bar to print a diagram. A Print dialog opens, where you can specify the properties of the print job. Click the [image] button to preview the printed diagram.

Parent topic: Diagram Pane


Generating Diagram Reports

Describes how to generate diagram reports.

Choose File > Save Type Report to display a printable report based on a diagram. Choose File > Save Blackbox Interface Report to display a printable report showing the relationship of black boxes in a diagram to each other and to other diagram objects. In the printable report, click Print to print the report. Click Save to export the report to HTML, Excel, RTF, Word, or formatted text.

Parent topic: Diagram Pane


Browser Pane

Describes the Browser pane.

The Browser pane displays the workspace repository in tree form. The current project is expanded one level when you first open the Diagrammer.

To improve Diagrammer startup performance in your next session, hide the Browser pane before you end your current session. Click the close box in the upper righthand corner to hide the pane. To show the pane again, choose View > Browser.
Parent topic: Understanding the Diagrammer Window


Relationships Pane

Describes the Relationships pane.

The Relationships pane displays the relationships in the selected scope, as they appear from left to right in the diagram. Select the relationship for an object in the Relationships pane to navigate to the object in the Diagram pane.

The list includes relationship chains, or composite relationships, such as Program[IsDefinedInCobol]Cobol[Includes]Copybook[GeneratesTargetXml]TargetXML. If you chose View > Potential Incomplete Composite Relationships when you drew the diagram, the list shows incomplete relationship chains, in which the final object in the chain is unresolved or otherwise unavailable.

Parent topic: Understanding the Diagrammer Window
Related information
Showing Incomplete Composite Relationships


Quick View Pane

Describes the Quick View pane.

The Quick View pane lets you browse HyperView information for the object selected in the Diagram pane. The information available depends on the type of object selected. You see only source code for a copybook, for example, but full HyperView information for a program. Choose the information you want to view for the object from the drop-down in the upper lefthand corner of the pane.

Parent topic: Understanding the Diagrammer Window


Overview Pane

Describes the Overview pane.

The Overview pane lets you navigate to a general location in a diagram. It displays the entire diagram, with a frame surrounding the portion of the diagram visible in the Diagram pane. Drag the frame to the area of the diagram you want to view in the Diagram pane. Diagrammer displays the selected area in the Diagram pane.

Parent topic: Understanding the Diagrammer Window
Related information
Navigating to an Object from a Relationship


Excluding Objects Outside the Project

Describes how to exclude objects outside the project from a diagram.

To restrict the diagram to related objects in the current project, choose View > Exclude Objects Outside Project. Otherwise, all related workspace objects are included in the diagram.

Parent topic: Analyzing Relationship Flows


Showing Incomplete Composite Relationships

Describes how to show incomplete composite relationships in the Diagrammer.

A composite relationship defines the indirect interaction of two objects. If a job runs a program entry point that belongs to a program, for example, the relationship between the job and program is said to be composite: defined by the chain of relationships between the job and program.

To show incomplete relationship chains in the diagram and list of relationships, choose View > Potential Incomplete Composite Relationships. Intermediate objects in the chain are displayed even if the final object in the chain is unresolved or otherwise unavailable. Relationships are displayed in red in the diagram.

Parent topic: Analyzing Relationship Flows


Colorizing Project Boundaries

Describes how to colorize project boundaries in a diagram.

Boundary objects are objects with relationships to objects outside the project. To colorize boundary objects in the diagram, choose View > Project Boundary Entities. Boundary objects are displayed in the diagram with a red border. Related external objects are displayed in the diagram with a blue border.

Parent topic: Analyzing Relationship Flows


Showing and Hiding Object Labels

Describes how to show and hide object labels.

The View > Show in Label menu choice controls the labels displayed for objects in a diagram. Choose:
  • View > Show in Label > Show Type to display the type of an object in its label.
  • View > Show in Label > Show Name to display the name of an object in its label.
  • View > Show in Label > Show Business Name to display the business name of an object in its label.
  • View > Show in Label > Show Business Description to display the business description of an object in its label.
A check mark next to a choice means that the label will be displayed. The choices are toggles. Click the choice again to hide the information in the label.
Parent topic: Analyzing Relationship Flows


Working with Groups

Introduces the Diagrammer grouping feature.

Grouping objects reduces diagram clutter and makes it easy to visualize the roles of the grouped objects in your application. Groups are automatically created when you black-box tagged objects and when you filter or cluster objects.

  • Grouping and Ungrouping Objects
    Describes how to group and ungroup objects.
  • Expanding and Collapsing Groups
    Describes how to expand and collapse groups.
  • Moving Objects Between Groups
    Describes how to move objects between groups.
  • Naming Groups
    Describes how to name a group.
  • Deleting Groups
    Describes how to delete a group.
Parent topic: Analyzing Relationship Flows
Related tasks
Black-Boxing Tagged Objects
Setting Diagrams User Preferences
Related information
Filtering Objects
Clustering Objects


Grouping and Ungrouping Objects

Describes how to group and ungroup objects.

To group objects manually, select the objects on the diagram canvas, then click the [image] button on the tool bar and choose Group Selected in the drop-down menu. Inclusive groups are allowed.

To ungroup objects, select the group on the diagram canvas, then click the [image] button on the tool bar and choose Ungroup Selected in the drop-down menu.

Parent topic: Working with Groups


Expanding and Collapsing Groups

Describes how to expand and collapse groups.

Expand a group to view its contents. Collapse a group to hide its contents.

  • If a group is collapsed (including a group in a more inclusive group), double-click it to expand its contents. To expand all the groups in an inclusive group, select the group on the diagram canvas, then click the [image] button on the tool bar and choose Expand Groups in the drop-down menu.
  • If a group is expanded (including a group in a more inclusive group), double-click it to collapse it. To collapse all the groups in an inclusive group, select the group on the diagram canvas, then click the [image] button on the tool bar and choose Collapse Groups in the drop-down menu.

To view a diagram consisting only of objects in a group, select the group and choose Navigate to Child Diagram in the right-click menu. To restore the full diagram, click the [image] button on the tool bar and choose Return to Parent in the drop-down menu.

Parent topic: Working with Groups


Moving Objects Between Groups

Describes how to move objects between groups.

To move objects between groups, expand the groups, then click the [image] button on the toolbar. Select the object you want to move and drag it to the new group.

Parent topic: Working with Groups


Naming Groups

Describes how to name a group.

To rename a group, select it and choose Rename Group in the right-click menu.

The name does not persist after ungrouping. You cannot rename a black box.
Parent topic: Working with Groups


Deleting Groups

Describes how to delete a group.

To delete a group, select it and choose Delete Group in the right-click menu. You are prompted to confirm the deletion. Click Yes.

Parent topic: Working with Groups


Black-Boxing Tagged Objects

Describes how to black-box tagged objects in a diagram.

The deeper your understanding of your application, the more confidently you can abstract from its lower-level details to a “bigger picture” view, one that organizes related programs in functional, structural, or other types of groupings: a Customer Maintenance subsystem, for example, in an Order Acceptance application. This is the kind of view a subject matter expert uses to evaluate whether an application does everything it is supposed to do, in the appropriate order.

The Diagrammer black-box feature lets you assign lower-level objects to higher-level groupings that make it easy to visualize their roles in your application. Your diagram might have one black box for the Customer Maintenance subsystem, another for the Order Entry subsystem, and so forth. Because the details of these relationships are hidden in the black box until you need to view them, the subject matter expert can home in quickly on the higher-order functions you have abstracted from them.

You use the Tag Manager to identify the items in each higher-level grouping. Each grouping can, in turn, reference a more inclusive grouping. If you assign the Customer Maintenance tag to one set of programs, for example, and the Order Entry tag to another, and both tags reference the Application Functions tag, then when you choose Application Functions in the Diagrammer Group By drop-down, the Diagrammer puts the programs in black boxes named Application Functions Customer Maintenance and Application Functions Order Entry.

STEPS:
  1. To black-box objects in a diagram, choose the tag for the objects in the Group By drop-down.
    To show only top-level tags in the drop-down, choose View > Root Tags Only.
  2. Generate the diagram in project or copy-and-paste mode. The figure below shows expected results.

Parent topic: Analyzing Relationship Flows
Related tasks
Assigning Tags
Setting Diagrams User Preferences
Related information
Grouping and Ungrouping Objects
Expanding and Collapsing Groups
Working with Groups
Filtering Objects
Clustering Objects


Filtering Objects

Describes how to filter objects from a diagram.

A driver is an object with many outputs, a startup program, for example. A utility is an object with many inputs, DATEFMT, for example. Filtering drivers and utilities from large diagrams reduces diagram clutter and typically provides a better picture of what your application does.

You set thresholds for filtering in the Diagrams User Preferences. If you set the driver threshold for outgoing relationships to 40, for example, then any object with 40 or more outgoing relationship will be considered a driver and displayed outside the main relationship flow. The driver and its related nodes in the relationship flow appear with a [image] symbol in the diagram. Click the [image] symbol to display the relationships for the driver and its related nodes again.

You generate a filtered diagram the same way you generate any diagram. The only difference is that when the filtering thresholds are met, Diagrammer displays the Large Dataset Returned dialog. Choose Enable Node Filtering in the dialog to draw the diagram with the filter applied. Choose Disable Node Filtering and Clustering in the dialog to draw the diagram without the filter applied. A [image] symbol on the tool bar indicates that a diagram is filtered.
Tip: Use the Filter Override options on the [image] drop-down menu to override the thresholds in the Diagrams User Preferences. If the diagram has already been generated, choosing an override option redraws the diagram with the new filter applied.
  • Setting Filter Overrides
    Describes how to set filtering overrides.
Parent topic: Analyzing Relationship Flows
Related tasks
Black-Boxing Tagged Objects
Related information
Working with Groups


Setting Filter Overrides

Describes how to set filtering overrides.

Use the Filter Override Options window to override the filtering thresholds in the Diagrams User Preferences. If the diagram has already been generated, choosing an override option redraws the diagram with the new filter applied.
These settings do not persist between Diagrammer sessions.
STEPS:
  1. Click the [image] button on the tool bar and choose Filter Override in the drop-down. The Filter Override Options window opens.
  2. Select Filters Enabled to enable filtering.
  3. Select Hide Utilities to hide objects with many inputs, DATEFMT, for example. Specify the filtering thresholds for inputs and outputs:
    • In the Incoming Relationships field, enter the filtering threshold for incoming relationships.
    • In the Outgoing Relationships field, enter the filtering threshold for outgoing relationships.
  4. Select Hide Drivers to hide objects with many outputs, a startup program, for example. Specify the filtering thresholds for inputs and outputs:
    • In the Incoming Relationships field, enter the filtering threshold for incoming relationships.
    • In the Outgoing Relationships field, enter the filtering threshold for outgoing relationships.
  5. Select Hide High Input Nodes to hide objects with many inputs that do not meet the incoming relationship threshold for utilities. Specify the thresholds for inputs in the With Incoming Relationships field.
  6. Select Hide High Output Nodes to hide objects with many outputs that do not meet the outgoing relationships threshold for drivers. Specify the thresholds for outputs in the With Outgoing Relationships field.
Tip: Select Reset Values to restore the filtering thresholds to their settings in the Diagrams User Preferences.
Parent topic: Filtering Objects


Clustering Objects

Describes how to cluster objects on a diagram.

Clustering objects on a diagram groups them by their degree of relatedness. Once clusters are generated, you can move objects in and out of the groups, name the groups, and create new clusters as needed. When you are satisfied that a cluster meets your needs, you can assign an existing tag to its members or generate a tag from the cluster itself, each member of which receives the tag.

You enable clustering in the Diagrams User Preferences. Use the Clustering options on the [image] drop-down menu to specify clustering factors. Assuming the appropriate filtering thresholds are me, drivers and utilities are grouped in special clusters named "Drivers" and "Utilities." A third special cluster, "Miscellaneous Components," contains relationship flows with too few objects to cluster.

You generate a clustered diagram the same way you generate any diagram. The only difference is that Diagrammer displays the Large Dataset Returned dialog. Choose Enable Node Clustering in the dialog to draw the diagram with clustering applied. Choose Disable Node Filtering and Clustering in the dialog to draw the diagram without clustering applied.

  • Creating Clusters Manually
    Describes how to create clusters manually.
  • Generating Tags from Clusters
    Describes how to generate tags based on cluster names.
  • Setting Clustering Factors
    Describes how to set clustering factors.
Parent topic: Analyzing Relationship Flows
Related tasks
Black-Boxing Tagged Objects
Related information
Working with Groups


Creating Clusters Manually

Describes how to create clusters manually.

To create a cluster manually, right-click on white space on the Diagrammer canvas. The Clustering dialog opens. Select Create New Cluster, then enter the cluster name in the Cluster Name field. Click OK.

Parent topic: Clustering Objects


Generating Tags from Clusters

Describes how to generate tags based on cluster names.

To generate tags based on cluster names, right-click on white space on the Diagrammer canvas. The Clustering dialog opens. Select Create Tags from Clusters, then enter the name of the parent tag in the Top Level tag field.

The parent tag is required.

Click OK. Each member of a cluster is assigned a tag based on the cluster name.

Parent topic: Clustering Objects
Related tasks
Assigning Tags


Setting Clustering Factors

Describes how to set clustering factors.

Use the Clustering Options window to specify values by which the degree of relatedness between clustered objects is factored.
These settings do not persist between Diagrammer sessions.
STEPS:
  1. Click the [image] button on the tool bar and choose Clustering in the drop-down. The Clustering Options window opens.
  2. In the Quality drop-down, select:
    • Draft for the lowest clustering quality and best performance.
    • Proof for the highest clustering quality and worst performance.
    • Medium for the best balance of clustering quality and performance.
  3. In the Balance combo box, specify the clustering balance factor. The higher the balance factor, the lower the number of relationships between objects in different clusters.
  4. In the Cluster Size Factor combo box, specify the clustering size factor. The higher the clustering size factor, the larger and fewer the clusters.
  5. In the Max Number of Clusters combo box, specify the maximum number of clusters. A value of 0 means any number of clusters.
  6. In the Min Number of Clusters combo box, specify the minimum number of clusters. A value of 0 means any number of clusters.
Parent topic: Clustering Objects


Setting Diagrams User Preferences

Describes how to set Diagrams User Preferences.

Use the Diagrams tab of the User Preferences window to specify the color-coding used in relationship flow diagrams, the thresholds for clustering and filtering, and performance limits for large diagrams.
STEPS:
  1. Choose Tools > User Preferences. The User Preferences window opens. Click the Diagrams tab.
  2. Select Prompt When Diagram Mode Changes to be prompted when you switch between a diagram generated for a project and a diagram generated for copied-and-pasted objects.
  3. In the Color Scheme pane, click the object type whose color you want to edit. The current background color of the type (if any) is displayed in the Color drop-down.
  4. Click the adjacent Down Arrow Icon button and choose ForeColor from the pop-up menu if you want to specify the color of the caption for the object type, or BackColor if you want to specify the color of the background for the object type.
  5. In the Shape drop-down, select the shape of the object type in the diagram. Select Lock Shape Aspect to specify that the shape not be adjusted to fit the caption.
  6. Click the Performance button. The Performance Option Limits dialog opens.
  7. Deselect Relayout Subgraphs if you do not want child groups to be redrawn when you choose a new layout style.
    Selecting this option may result in poor performance for very large diagrams.
  8. In the Maximum relationships to return from repository field, enter the maximum number of relationships to display in the diagram. Relationships are truncated when the maximum is exceeded.
    Setting this option too high may result in poor performance for very large diagrams.
  9. In the Force Symmetric Layout (all relationships) field, enter the maximum number of relationships to display in the diagram before forcing symmetric layout style.
    Symmetric layout style typically offers the best performance for very large diagrams. Setting this option too high may result in poor performance for very large diagrams.
  10. In the Offer Auto Clustering Layout (all relationships) field, enter the maximum number of relationships to display in the diagram before offering to perform clustering.
  11. Select Filter Options Enabled to enable filtering.
  12. In the Hide Drivers (all relationships) field, enter the maximum number of relationships to display in the diagram before filtering drivers. (A driver is an object with many outputs, a startup program, for example.) Specify the filtering thresholds for inputs and outputs:
    • In the Incoming Relationships field, enter the filtering threshold for incoming relationships.
    • In the Outgoing Relationships field, enter the filtering threshold for outgoing relationships.
  13. In the Hide Utilities (all relationships) field, enter the maximum number of relationships to display in the diagram before filtering utilities. (A utility is an object with many inputs, DATEFMT, for example.) Specify the filtering thresholds for inputs and outputs:
    • In the Incoming Relationships field, enter the filtering threshold for incoming relationships.
    • In the Outgoing Relationships field, enter the filtering threshold for outgoing relationships.
  14. In the Hide High Output Nodes (all relationships) field, enter the maximum number of relationships to display in the diagram before filtering objects with many outputs that do not meet the outgoing relationships threshold for drivers. Specify the filtering thresholds for outputs in the Outgoing Relationships field.
  15. In the Hide High Input Nodes (all relationships) field, enter the maximum number of relationships to display in the diagram before filtering objects that do not meet the incoming relationship threshold for utilities. Specify the filtering threshold for inputs in the Incoming Relationships field.
Parent topic: Analyzing Relationship Flows
Related tasks
Black-Boxing Tagged Objects
Related information
Working with Groups


Using the Scope Editor

Describes the Scope Editor.

Use the Scope Editor to manage the scopes in your repository, create custom composite relationships, and define relationship filters. To open the Scope Editor, choose Scope > Scope Editor. The Scope Editor opens, with the workspace scopes listed in the lefthand pane and their relationships in the righthand pane. The figure below shows the Scope Editor.

  • Understanding the Lefthand Pane of the Scope Editor
    Describes the lefthand pane of the Scope Editor.
  • Understanding the Righthand Pane of the Scope Editor
    Describes the righthand pane of the Scope Editor.
  • Managing Scopes
    Introduces scope management.
  • Creating Custom Composite Relationships
    Describes how to create custom composite relationships.
  • Defining a Relationship Filter
    Describes how to define a relationship filter.
Parent topic: Analyzing Relationship Flows
Related information
Understanding Diagram Scopes


Understanding the Lefthand Pane of the Scope Editor

Describes the lefthand pane of the Scope Editor.

The lefthand pane of the Scope Editor window lists every scope in the repository. The table below describes the columns in the lefthand pane.
Column | Description
Scope

The name of the scope. Scopes are color-coded as follows:

  • Blue means that the scope is available in the Diagrammer Scope drop-down.
  • Gray means that the scope is not available in the Scope drop-down, because it is hidden or because it is a private scope owned by another user. You can copy a private scope, then edit it as you would your own scope
  • Red means that the scope has no relationships associated with it.
Type

The type of the scope, public or private. The type determines availability of the scope in the Diagrammer Scope drop-down:

  • A public scope is available to every user of the workspace.
  • A private scope is available only to its owner. You can copy a private scope, then edit it as you would your own scope.
Owner | The owner of the scope. SYSTEM denotes a default scope.
Hide | Whether the scope is hidden in the Diagrammer Scope drop-down. A check mark means that the scope is hidden.
Parent topic: Using the Scope Editor
Related information
Creating a Scope


Understanding the Righthand Pane of the Scope Editor

Describes the righthand pane of the Scope Editor.

The righthand pane of the Scope Editor window lists every relationship in the repository. The table below describes the columns in the righthand pane.

Column | Description
Use | Whether the relationship is used in the selected scope. A check mark means that the relationship is used.
Relationship Name | The name of the relationship. Relationships for which a filter has been defined are color-coded magenta.
Left Entity | The entity on the left end of the relationship. Entities for which a relationship filter has been defined are color-coded magenta. A tool tip displays the text of the condition.
Caption | The caption of the relationship.
Right Entity | The entity on the right end of the relationship. Entities for which a relationship filter has been defined are color-coded magenta. A tool tip displays the text of the condition.
Class

The class of the relationship, basic or composite:

  • A basic relationship defines the direct interaction of two objects: a program and a program entry point, for example.
  • A composite relationship defines the indirect interaction of two objects. If a job runs a program entry point that belongs to a program, for example, the relationship between the job and program is said to be composite: defined by the chain of relationships between the job and program.
Occurs | The number of times a basic relationship occurs in the repository. For composite relationships, N/A, indicated with an asterisk (*).
Parent topic: Using the Scope Editor
Related information
Creating a Scope


Managing Scopes

Introduces scope management.

Use the Scope Editor to edit the Diagrammer Scope drop-down, view scope diagrams, create, edit, copy, and delete scopes, import and export scopes, and more.

  • Hiding a Scope in the Scope Dropdown
    Describes how to hide a scope.
  • Displaying Only the Relationships Used in a Scope
    Describes how to hide unused relationships.
  • Hiding Empty Relationships
    Describes how to hide empty relationships.
  • Viewing a Diagram of a Scope
    Describes how to view a scope diagram.
  • Viewing a Diagram of a Composite Relationship
    Describes how to view a diagram of a composite relationship.
  • Creating a Scope
    Describes how to create a scope.
  • Specifying the Relationships in a Scope
    Describes how to specify the relationships in a scope.
  • Editing Scope Details
    Describes how to edit scope details.
  • Copying a Scope
    Describes how to copy a scope.
  • Deleting a Scope
    Describes how to delete a scope.
  • Deleting a Composite Relationship
    Describes how to delete a composite relationship.
  • Importing and Exporting Scopes
    Describes how to import and export scopes.
  • Hiding Columns in the Scope Editor
    Describes how to hide columns in the Scope Editor.
Parent topic: Using the Scope Editor


Hiding a Scope in the Scope Dropdown

Describes how to hide a scope.

To hide a scope in the Diagrammer Scope drop-down (but not remove it from the repository), select the scope in the Scope Editor and put a check mark next to it in the Hide column.

Parent topic: Managing Scopes


Displaying Only the Relationships Used in a Scope

Describes how to hide unused relationships.

To display only the relationships used in a scope, select the scope in the Scope Editor and click the Hide Unused button in the righthand pane.

Parent topic: Managing Scopes


Hiding Empty Relationships

Describes how to hide empty relationships.

To hide relationships that have no instances in the repository, click the Hide Empty button in the righthand pane.

Parent topic: Managing Scopes


Viewing a Diagram of a Scope

Describes how to view a scope diagram.

To view the diagram of a scope, select the scope in the Scope Editor and choose File > Diagram. You can also view a scope diagram by selecting the scope in the Diagrammer Scope drop-down and choosing Scope > View Scope.

Parent topic: Managing Scopes


Viewing a Diagram of a Composite Relationship

Describes how to view a diagram of a composite relationship.

To view the diagram of a composite relationship, select the relationship in the Scope Editor and choose Diagram in the right-click menu.

Parent topic: Managing Scopes


Creating a Scope

Describes how to create a scope.

To create a scope, choose File > New Scope. A dialog box prompts you to enter the name, optional caption, class, and owner of the scope. Enter the requested information and click Save.

Parent topic: Managing Scopes
Related information
Understanding the Lefthand Pane of the Scope Editor
Understanding the Righthand Pane of the Scope Editor
Editing Scope Details
Copying a Scope


Specifying the Relationships in a Scope

Describes how to specify the relationships in a scope.

To specify the relationships in a scope, select the scope in the Scope Editor and put a check mark in the Use column next to each relationship you want to include in the scope. To save the scope, choose File > Save.

You can specify relationships only for a scope you own.
Parent topic: Managing Scopes


Editing Scope Details

Describes how to edit scope details.

To edit the name, caption, class, and owner of a scope, select the scope in the Scope Editor and choose File > Edit. A dialog box displays the current details for the scope. Enter the new information and click Save.

You can edit details only for a scope you own.
Parent topic: Managing Scopes
Related information
Creating a Scope


Copying a Scope

Describes how to copy a scope.

To copy a scope, select the scope in the Scope Editor and choose File > Copy. A dialog box prompts you to enter the name, optional caption, class, and owner of the new scope. Enter the requested information and click Save. You can copy default scopes and public or private scopes owned by another user, then edit them as you would your own scope.

Parent topic: Managing Scopes
Related information
Creating a Scope


Deleting a Scope

Describes how to delete a scope.

To delete a scope, select the scope in the Scope Editor and choose File > Delete.

You can delete only a scope you own.
Parent topic: Managing Scopes


Deleting a Composite Relationship

Describes how to delete a composite relationship.

To delete a composite relationship, select the relationship in the Scope Editor and choose Delete in the right-click menu.

You can delete only a composite relationship you own.
Parent topic: Managing Scopes


Importing and Exporting Scopes

Describes how to import and export scopes.

To import a scope from an XML file, choose File > Import. A dialog opens, where you can specify the scope you want to import. The type of an imported scope defaults to public. The owner defaults to the current user.

If a scope or relationship being imported conflicts with an existing scope or relationship, you are notified and the conflicting item is ignored.

To export a scope to an XML file, select the scope in the Scope Editor and choose File > Export Selected. A Save dialog opens, where you can specify the name and location of the scope. To export all the scopes in the repository to an XML file, choose File > Export All.

Parent topic: Managing Scopes


Hiding Columns in the Scope Editor

Describes how to hide columns in the Scope Editor.

To hide a column in the Scope Editor, deselect the column name in the View menu.

Parent topic: Managing Scopes


Creating Custom Composite Relationships

Describes how to create custom composite relationships.

A composite relationship defines the indirect interaction of two objects. If a job runs a program entry point that belongs to a program, for example, the relationship between the job and program is said to be composite: defined by the chain of relationships between the job and program.

You can use the default composite relationships provided with the system, or use the Scope Editor to create custom composite relationships. Custom composite relationships are available to all users of the workspace.

Custom composite relationships are not copied or exported when a scope is copied or exported.
STEPS:
  1. In the Scope Editor, choose File > New Relationship.
  2. The New Relationship Wizard opens. In the Enter Relationship Name field, enter the name of the composite relationship, then select the object you want to appear on the left side of the relationship chain in the Select First Entity pane. Click Next.
  3. In the Select relationship pane, select the relationship you want to appear next in the relationship chain. Click Next.
  4. Repeat the preceding step for each relationship you want to include in the chain. When you are satisfied with your choices, click Finish. The New Relationship Wizard closes and the new composite relationship is added to the Scope Editor window.
Parent topic: Using the Scope Editor


Defining a Relationship Filter

Describes how to define a relationship filter.

You can define a relationship filter by setting conditions for either side of the relationships defined in a scope you own. You might want a scope to be restricted to programs that have a cyclomatic complexity greater than 300 and that are defined in COBOL source files, for example. The example below shows you how to do that step by step.

Condition definitions are based on the Repository Exchange Protocol (RXP), an XML-based API that you can use to interact with application-level information in the workspace repository.

In the Scope Editor, relationships and entities for which a filter has been defined are color-coded magenta. A tool tip over the filtered entity displays the text of the condition.

STEPS:
  1. In the Scope Editor, select the relationship you want to set conditions for and choose:
    • Left Cond in the right-click menu to qualify the entity on the left side of the relationship.
    • Right Cond in the right-click menu to qualify the entity on the right side of the relationship.
  2. The Condition window opens. In the Condition window, click:
    • attribute to qualify the entity according to the value of a given attribute. Programs that have a cyclomatic complexity greater than 300, for example.
    • has (not) related object to qualify the entity according to a given relationship type. Programs defined in COBOL source files, for example.
    • add AND condition to qualify the entity according to inclusive criteria using an AND operator. Programs that have a cyclomatic complexity greater than 300 and that are defined in COBOL source files, for example.
    • add OR condition to qualify the entity according to exclusive criteria using an OR operator. Programs that have a cyclomatic complexity greater than 300 or that are defined in COBOL source files, for example.
  3. The Condition window displays the shell definition for the selected condition. The following steps describe how to qualify the program entity using an AND operator. The procedure for other entities and conditions is similar.
  4. In the definition for the AND condition, click attribute. The definition for the attribute condition is displayed:
    <attr name="..." op="..." arg="..." negate="..."/>
    Click the X in a definition to delete the condition.
  5. Click the ellipsis (…) in name="…". The User Input dialog opens. In the User Input dialog, select the Program entity in the Choose entity drop-down and the Cyclomatic Complexity attribute in the Attributes for Program drop-down, then click OK. The attribute is added to the condition definition.
    Click Delete in the User Input dialog to delete the criterion defined in the dialog.
  6. Click the ellipsis (…) in op="…". The User Input dialog opens. In the Choose new value drop-down, choose the greater than (>) symbol, then click OK. The greater than symbol is added to the condition definition.
  7. Click the ellipsis (…) in arg="…". The User Input dialog opens. In the Enter new value drop-down, enter 300, then click OK. The new value is added to the condition definition:
    <attr name="Cyclomatic Complexity" op=">" arg="300"
negate="..."/>

    In a condition definition, negate means “not the specified criterion.” Programs that do not have a cyclomatic complexity greater than 300, for example. Click the ellipsis (…) in negate="…" to set its value to true. Ignore the field otherwise.

  8. In the definition for the AND condition, click has (not) related object. The definition for the relationship type condition is displayed:
    <hasrelated negate="...">
  9. In the choices for the relationship type condition, click define relationship type.
  10. The choices for the relationship type are displayed. Click define relationship. The definition for the relationship type is displayed:
    <rel name="..." negate="..."/>
  11. Click the ellipsis (…) in name="…". The User Input dialog opens. In the Choose entity drop-down, select the Program entity. In the Relations for Program drop-down, select the IsDefinedInCobol relationship, then click OK. The relationship is added to the condition definition:
    - <hasrelated negate="...">
- <reltype>
<rel name="IsDefinedInCobol" negate="..."/>
</reltype>
</hasrelated>
  12. The AND condition is now complete. The diagram scope will be restricted to programs that have a cyclomatic complexity greater than 300 and that are defined in COBOL source files. The full condition looks like this:
    - <cond>
<and negate="...">
<attr name="Cyclomatic Complexity" op=">"
arg="300" negate="..."/>
- <hasrelated negate="...">
- <reltype>
<rel name="IsDefinedInCobol"
negate="..."/>
</reltype>
</hasrelated>
</and>
</cond>
Parent topic: Using the Scope Editor
Related information
Repository Exchange Protocol Syntax


Pruning a Scope

Describes how to prune relationships from a scope.

You can prune relationships from a scope you own directly in the Diagrammer window. When you prune a scope, keep in mind that:

  • You are deleting relationships from the current scope exactly as if you were deleting them in the Scope Editor window. For that reason, you might want to save the original scope with a different name and use the renamed scope as the basis for the pruned diagram.
  • All the relationships of the selected type are deleted for the selected object, not just the single relationship you selected in the diagram.
STEPS:
  1. To prune a scope, select the relationship you want to prune in the diagram and choose:
    • Prune type for right object in the right-click menu to delete from the current scope all relationships of the selected type for the right object in the relationship.
    • Prune type for left object in the right-click menu to delete from the current scope all relationships of the selected type for the left object in the relationship.
  2. Generate the diagram in project or copy-and-paste mode. The Diagrammer deletes the relationships from the redrawn diagram.
Parent topic: Analyzing Relationship Flows


Mirroring a Scope

Describes how to mirror a scope.

By default, Diagrammer shows the flow of relationships from a diagrammed object rather than to a diagrammed object. Choose Scope > Mirror Scope to show the flow of relationships to the object. Choose Scope > Mirror Scope again to return to the original view.

Parent topic: Analyzing Relationship Flows


Analyzing Global Data Flows

Introduces the Global Data Flow tool.

The Global Data Flow tool traces incoming and outgoing data flows for a program variable up to a dataport, an I/O statement or call to or from another program. You can view the memory allocation and offset for the variable to determine how changes to the variable may affect other variables, and trace assignments to and from the variable across programs.

Projects must have been verified with the Enable Data Element Flow option set in the Project Verification options.

The Global Data Flow tool is implemented as both a standalone and HyperView-based tool. This section describes the standalone version. Usage is identical for the HyperView tool.

  • Understanding the Global Data Flow Window
    Describes the Global Data Flow window.
  • Data Flow Relationships
    Describes the intraprogram and interprogram relationships detected by the data flow analysis tools.
  • Assigning Business Names Manually
    Describes how to assign business names manually.
  • Setting Global Data Flow User Preferences
    Describes how to set Global Data Flow User Preferences.
  • Setting Global Data Flow Project Options
    Describes how to set Global Data Flow Project Options.


Understanding the Global Data Flow Window

Describes the Global Data Flow window.

Use the Global Data Flow tool to trace incoming and outgoing data flows for a program variable up to a dataport, an I/O statement or call to or from another program. To open the Global Data Flow tool, select a program in the Repository Browser and choose Analyze > Data Flow.

The figure below shows the Global Data Flow window. By default, all Global Data Flow panes are displayed. Select the appropriate choice in the View menu to hide a pane. Select the choice again to show the pane.

  • Data View Pane
    Describes the Data View pane.
  • Data Flow Pane
    Describes the Data Flow pane.
  • Origin Pane
    Describes the Origin pane.
Parent topic: Analyzing Global Data Flows


Data View Pane

Describes the Data View pane.

For the selected program, the Data View pane shows variable structures, substructures, and fields in hierarchical order from left to right. Double-click a variable name to generate a data flow diagram for the variable in the Data Flow pane, and a list of offsets and memory allocations for the variable and any related variables in the Origin pane.

Parent topic: Understanding the Global Data Flow Window


Data Flow Pane

Describes the Data Flow pane.

For the variable selected in the Data View pane, the Data Flow pane displays a diagram that traces its incoming and outgoing data flows up to a dataport, an I/O statement or call to or from another program. The selected variable is displayed in red, constants in gray, and dataports in blue.

Make sure you have enabled incoming and/or outgoing data flows appropriately in the Global Data Flow project options.

Two diagram views are available:

  • The Expanded View displays as many nodes for the selected variable as it has assignments.
  • The Compact View displays a single node, regardless of the number of assignments.

Click the tab for the view you want to display.

Select a dataport and choose Data Flow > Reconstruct to display the data flow diagram for the variable identified at the dataport. Select a relationship line to display all the statements that determine the data flow between variables in the Origin pane.

Place your cursor over a variable for a moment to display a tool tip that identifies the memory offset and allocation for the variable. The diagram uses Modernization Workbench common diagramming features.

Parent topic: Understanding the Global Data Flow Window
Related tasks
Setting Global Data Flow Project Options
Related information
Common Diagramming Features


Origin Pane

Describes the Origin pane.

For the variable selected in the Data View or Data Flow panes, the Origin pane displays a list of offsets and memory allocations for the variable and any related variables. For the dataport selected in the Data Flow pane, it displays related variables. For the relationship selected in the Data Flow pane, it displays the intraprogram or interprogram relationship detected by data flow analysis.

Parent topic: Understanding the Global Data Flow Window


Data Flow Relationships

Describes the intraprogram and interprogram relationships detected by the data flow analysis tools.

The table below describes the intraprogram and interprogram relationships detected by the data flow analysis tools.

Relationship | Definition | Type | Icon | Description
calls | N/A | interprogram | N/A | A parameter passed in a call to another program.
cast | MOVE A TO B with data conversion | intraprogram |  | A data item moved to a data item of a different type.
common area transitions | N/A | interprogram | N/A | For Unisys 2200 Cobol, a common-storage data area item passed in a call to another program. Perform Unisys Common-Storage Area Analysis must be set in the project verification options.
comp | STRING A ... INTO B | intraprogram |  | An arbitrary computation. The result is produced by applying complex rules to the argument, such as STRING.
comp+ | ADD A TO B | intraprogram |  | An addition-like operation: ADD, SUBTRACT, or corresponding parts of COMPUTE.
comp* | MULTIPLY A BY B | intraprogram |  | A multiplication-like operation: MULTIPLY, DIVIDE, or corresponding parts of COMPUTE.
comp@ | MOVE ARRAY (IDX) TO A | intraprogram |  | An operation with array elements.
cond | IF A = B ... | intraprogram |  | Comparison of data items with a symmetric relationship.
cond* | IF A * X = B ... | intraprogram |  | Comparison of a multiple of a data item with another data item.
const cond | IF A = 1 ... | intraprogram |  | Comparison of a data item with a constant.
const.move | MOVE 1 TO B | intraprogram |  | A constant moved into a data item.
const.comp | ADD 1 TO B | intraprogram |  | An arithmetic operation with constants.
const.init | 03 A ... VALUE 1 | intraprogram |  | A data item initialized by a constant.
DMS records | N/A | interprogram | N/A | For Unisys 2200 Cobol, data communication via Unisys DMS database records.
files | N/A | interprogram | N/A | Data communication via files. Traced only when corresponding JCL, ECL, FCT, or CSD files are verified.
files in jobs | N/A | interprogram | N/A | Data flow in JCL datasets when files is selected.
input port | N/A | intraprogram |  | A data item in which data is received.
move | MOVE A TO B | intraprogram |  | A data item moved to a data item of the same type.
network records | N/A | interprogram | N/A | For Unisys 2200 Cobol, data communication via network records.
output port | N/A | intraprogram |  | A data item from which data is sent.
screens | N/A | interprogram | N/A | Data sent to a screen by one program and received in a screen by another.
screen definitions | N/A | interprogram | N/A | Data flow in screen fields when screens is selected.
start | N/A | intraprogram |  | The startup item in an Impact pane consolidated analysis.
used | MOVE ... TO A ... MOVE A TO ... | intraprogram |  | A value assigned in a statement used as an argument in another statement.
Parent topic: Analyzing Global Data Flows
Parent topic: Analyzing Impact Traces


Assigning Business Names Manually

Describes how to assign business names manually.

To assign a business name and business description to an object, select the object and choose Set Business Attributes in the right-click menu. A dialog box opens, where you can enter the business name and business description. To unassign a business name or business description, simply delete the value in the dialog box.

Parent topic: Analyzing Global Data Flows
Parent topic: Analyzing Batch Applications
Parent topic: Introducing HyperView
Parent topic: Assigning Business Attributes


Setting Global Data Flow User Preferences

Describes how to set Global Data Flow User Preferences.

Use the HyperView > Data View tab of the User Preferences window to specify the color-coding used in the Data View pane and the order of display of variables with the same offset.
STEPS:
  1. Choose Tools > User Preferences. The User Preferences window opens. Click the HyperView tab, then the Data View tab.
  2. In the Same offset order group box, specify the order you want variables with the same offset to be displayed in the Data View pane. Choose:
    • Data item size if you want variables with the same offset to be displayed in size order, largest to smallest.

    • Appearance in the source code if you want variables with the same offset to be displayed in the order they appear in the source code.

  3. Click the arrow beside the drop-downs for Free Space Color, Used Space Color, and FILLER Color to specify the color of each item in the Data View pane.
  4. Select Display Business Names to display business names for objects in the Data View pane.
Parent topic: Analyzing Global Data Flows


Setting Global Data Flow Project Options

Describes how to set Global Data Flow Project Options.

Use the Global Data Flow tab of the Project Options window to specify whether data flow diagrams include literals, variable values set at initialization, and Unisys Cobol common storage variables; whether they show incoming, outgoing, and recursive data flows; and the number of nodes they display.
STEPS:
  1. Choose Tools > Project Options. The Project Options window opens. Click the Global Data Flow tab.
  2. In the Relationships pane, choose any combination of:
    • Literal Flow to include literals in the data flow diagram for the selected variable
    • Initial Values to include variable values set at initialization in the data flow diagram for the selected variable.
    • Common Area Transition to include Unisys Cobol common storage variables in the data flow diagram for the selected variable. Common storage variables are not explicitly declared in CALL statements.
    To include Unisys Cobol common storage variables, you must have verified the project with the Perform Unisys Common-Storage Analysis option set in the project verification options.
  3. In the Directions pane, choose any combination of:
    • Causes to generate data flows into the selected variable.
    • Consequences to generate data flows from the selected variable.
    • Self-Dependencies to show recursive data flows for the selected variable.
  4. In the Node Limit combo box, enter the maximum number of diagram nodes you want to display. You might restrict the number of nodes to improve performance or make the diagram easier to read. You can also use the slider on the Node Limit tool bar to adjust the number of displayed nodes.
    All children of a parent node are displayed even if some of them exceed the specified maximum.
Parent topic: Analyzing Global Data Flows
Related tasks
Setting Project Verification Options
Related information
Data Flow Pane


Analyzing Batch Applications

Introduces the Batch Application Viewer.

The Batch Application Viewer lets you perform low-level analysis of batch processes. Use the Batch Application Viewer’s rich set of tables and diagrams to determine if batch jobs are dependent on one another, the programs that use a data store, and the flow of data into or out of a data store.

Batch Application Viewer analyzes JCL and ECL jobs. Usage is identical except for language-specific differences in terminology.
  • Understanding the Batch Application Viewer Window
    Describes the Batch Application Viewer window.
  • Generating Batch Application Diagrams
    Describes how to generate Batch Application Diagrams.
  • Assigning Business Names Manually
    Describes how to assign business names manually.
  • Marking Items
    Describes how to mark items.
  • Creating Job Dependencies in Batch Application Diagrams
    Provides an overview of job dependencies.
  • Creating User Names for Objects in Batch Application Diagrams
    Provides an overview of user names for objects in diagrams.
  • Setting Batch Application Viewer Options
    Describes how to set Batch Application Viewer Options.


Understanding the Batch Application Viewer Window

Describes the Batch Application Viewer window.

Use the Batch Application Viewer to determine if batch jobs are dependent on one another, the programs that use a data store, and the flow of data into or out of a data store. To open Batch Application Viewer, select a project in the Repository Browser and choose Analyze > Batch Application.

The Batch Application Viewer window displays job, procedure, and data set views of the batch application. Your selection in the current view, displayed in the lefthand pane, filters the objects displayed in the other two views. Click the appropriate tab at the bottom of the window to make a view current. To generate a report for the current view in HTML, choose File > Report.

Use the [image] button and adjacent field on the toolbar to perform a standard HyperView search of the current view. In any view or diagram, select an object and click HyperView at the bottom of the window to view the object in HyperView.

You can hide a view by clicking the close box in the upper righthand corner. Select the appropriate choice in the View menu to show the view again. The figure below shows the Batch Application Viewer window.

  • Job View
    Describes the Job View.
  • Procedure View
    Describes the Procedure View.
  • Dataset View
    Describes the Dataset View.
Parent topic: Analyzing Batch Applications


Job View

Describes the Job View.

When the Job View is current, select a job to view the steps the job uses, the procedure or program each step executes, and the data stores each procedure or program reads from or writes to.

Parent topic: Understanding the Batch Application Viewer Window


Procedure View

Describes the Procedure View.

When the Procedure/Program View is current, select a procedure or program to view the jobs and steps that execute it, and the data stores programs read from or write to.

For programs executed by procedures, Batch Application Viewer displays data stores referenced by DD statements added after the substitution of the procedure.
Parent topic: Understanding the Batch Application Viewer Window


Dataset View

Describes the Dataset View.

When the Dataset View is current, select a dataset to view the procedure or program that reads from or writes to it, the step that executes the procedure or program, and the job that contains the step.

To view the flow of data into or out of a dataset, select the dataset in the Dataset View and a step in the Procedure/Program View, then click the [image] button in the Data Set Flow pane. Click the [image] button in the Data Set Flow pane to view the flow of data into the dataset, click the [image] button to view the flow of data out of the dataset.

Parent topic: Understanding the Batch Application Viewer Window


Generating Batch Application Diagrams

Describes how to generate Batch Application Diagrams.

Batch application diagrams show the relationships between jobs, programs or procedures, and data stores. The diagram uses Modernization Workbench common diagramming features.
STEPS:
  1. In the current view, mark the objects you want to diagram.
  2. In the Diagram menu, choose the relationships you want to view in the diagram:
    • Job Dependencies shows dependencies between jobs. Jobs are regarded as dependent if one writes to a dataset and the other reads from the same dataset.
    • Data Set Usage shows interactions with datasets.
    • JCL Procedures Usage shows interactions with procedures.
    • Program Usage shows interactions with programs.
    The menu choice is grayed out with a check mark beside it if the relationship must be displayed in the diagram. You can also set these choices after you display the diagram.
  3. Click Diagram at the bottom of the Batch Application Viewer window.
The diagram is displayed in the Diagram View.
Parent topic: Analyzing Batch Applications
Related information
Marking Items
Common Diagramming Features


Marking Items

Describes how to mark items.

To mark an item, place a check mark next to it. To mark all the items in the current view, choose Edit > Check All. To unmark all the items in the current view, choose Edit > Uncheck All.

To mark selected items, select the items and choose Edit > Check Selected. To unmark selected items, choose Edit > Uncheck Selected.

Parent topic: Analyzing Batch Applications
Related tasks
Generating Batch Application Diagrams


Creating Job Dependencies in Batch Application Diagrams

Provides an overview of job dependencies.

Batch Application Viewer treats jobs as dependent if one writes to a dataset and the other reads from the same dataset. Occasionally, you may want to define dependencies between jobs based on other criteria: administrative needs such as scheduling, for example. Batch Application Viewer modifies the diagram only, not the repository.

  • Defining Dependencies Between Jobs
    Describes how to define job dependencies.
  • Importing and Exporting Job Dependencies
    Describes how to import and export job dependencies.
  • Removing Job Dependencies
    Describes how to remove user-defined job dependencies.
Parent topic: Analyzing Batch Applications


Defining Dependencies Between Jobs

Describes how to define job dependencies.

To define dependencies between jobs in a batch application diagram, hold down the Alt key, select either job, and drag-and-drop the relationship to the other job. The relationship is displayed in red with three plus (+) signs at either end of the relationship line.

Parent topic: Creating Job Dependencies in Batch Application Diagrams


Importing and Exporting Job Dependencies

Describes how to import and export job dependencies.

To import job dependencies from a file, choose File > Import Dependency Changes. A dialog opens, where you can specify the file you want to import.

To export job dependencies to a file, choose File > Export Dependency Changes. A Save As dialog opens, where you can specify the name and location of the file.

Parent topic: Creating Job Dependencies in Batch Application Diagrams


Removing Job Dependencies

Describes how to remove user-defined job dependencies.

To remove all user-defined dependencies from a batch application diagram, choose File > Clean Up Dependencies.

In certain circumstances (jobs that use cataloged file generation, for example), Batch Application Viewer may create false dependencies. You must remove these relationships manually by right-clicking the dependency and choosing Remove from the pop-up menu.
Parent topic: Creating Job Dependencies in Batch Application Diagrams


Creating User Names for Objects in Batch Application Diagrams

Provides an overview of user names for objects in diagrams.

You can give diagram objects friendlier names, called user names. Batch Application Viewer modifies the diagram only, not the repository.

To display user names in a diagram, select User Names in the Batch Application Viewer workspace options.
  • Specifying User Names
    Describes how to assign user names in batch application diagrams.
  • Importing and Exporting User Names
    Describes how to import and export user names for batch application diagrams.
  • Removing User Names
    Describes how to remove user names from batch application diagrams.
Parent topic: Analyzing Batch Applications
Related tasks
Setting Batch Application Viewer Options


Specifying User Names

Describes how to assign user names in batch application diagrams.

To specify a user name for an object in a batch application diagram, select the object and choose View > User Name. The User Name dialog opens, where you can specify the user name.

Parent topic: Creating User Names for Objects in Batch Application Diagrams


Importing and Exporting User Names

Describes how to import and export user names for batch application diagrams.

To import user names from a file, choose File > Import User Names. A dialog opens, where you can specify the file you want to import.

To export juser names to a file, choose File > Export User Names. A Save As dialog opens, where you can specify the name and location of the file.

Parent topic: Creating User Names for Objects in Batch Application Diagrams


Removing User Names

Describes how to remove user names from batch application diagrams.

To remove all user names from a batch application diagram, choose File > Clean Up User Names.

Parent topic: Creating User Names for Objects in Batch Application Diagrams


Setting Batch Application Viewer Options

Describes how to set Batch Application Viewer Options.

Use the Batch Application Viewer tab of the Workspace Options window to specify the color-coding used for relationship lines in batch application diagrams. Diagram objects are color-coded based on the color scheme in the Diagrams User Preferences.
STEPS:
  1. Choose Tools > Workspace Options. The Workspace Options window opens. Click the Batch Application Viewer tab.
  2. In the Diagram Relations pane, click the relationship type whose color you want to specify, then specify the color in the Edge Color drop-down.
  3. To display user names in a diagram, select User Names.
  4. In the Node Limit combo box, enter the maximum number of diagram nodes you want to display. You might restrict the number of nodes to improve performance or make the diagram easier to read. You can also use the slider on the Node Limit tool bar to adjust the number of displayed nodes.
    All children of a parent node are displayed even if some of them exceed the specified maximum.
Parent topic: Analyzing Batch Applications
Related tasks
Setting Diagrams User Preferences
Related information
Creating User Names for Objects in Batch Application Diagrams


Estimating Complexity and Effort

Introduces the Complexity Metrics and Effort Estimation tools.

Modernization Workbench Legacy Estimation tools let you compare programs based on weighted values for selected complexity metrics. The metrics used in the calculation are a combination of industry standard and Modernization Workbench-generated statistics. Based on the comparison, you can develop a credible estimate of the time required to satisfy a change request or perform other maintenance tasks.

For definitions of the supported complexity metrics, see the "Complexity Metrics" section of this help.
  • Viewing Complexity Metrics
    Describes the Complexity Metrics tool.
  • Setting Complexity Metrics User Preferences
    Describes how to set Complexity Metrics User Preferences.
  • Estimating Effort
    Describes the Effort Estimation tool.
  • Setting Effort Estimation Options
    Describes how to set Effort Estimation Options.
  • Specifying the Change Magnitude for a Source File
    Describes how to specify a change magnitude for a source file.


Viewing Complexity Metrics

Describes the Complexity Metrics tool.

Use the Complexity Metrics report to compare raw complexity values for the objects in your project. To open the Complexity Metrics report, select a project in the Repository Browser and choose Analyze > Complexity.

When the Complexity Metrics window opens, choose the type of object you want to compare in the Entity Type drop-down. To generate the report in HTML, choose File > Report. The figure below shows the Complexity Metrics window.

Parent topic: Estimating Complexity and Effort


Setting Complexity Metrics User Preferences

Describes how to set Complexity Metrics User Preferences.

Use the Complexity Metrics tab of the User Preferences window to specify the metrics displayed in the Complexity Metrics report for each type of object in your application.
STEPS:
  1. Choose Tools > User Preferences. The User Preferences window opens. Click the Complexity Metrics tab.
  2. In the Source Type drop-down, select the type of object you want to display complexity metrics for.
  3. In the Attributes pane, select each complexity metric you want to be displayed for the selected object type.
Parent topic: Estimating Complexity and Effort


Estimating Effort

Describes the Effort Estimation tool.

Use the Effort Estimation tool to compare source files based on weighted values for selected complexity metrics. To open the Effort Estimation tool, select a project in the Repository Browser and choose Analyze > Effort.

Select the source files types to be included in the calculation and the weighted values for the metrics in the Effort Estimation options. When you are satisfied with your selections, choose File > Compute Effort.

When the effort estimation report is displayed, select a source file in the Effort pane to show the effort statistics for its generated objects in the Details pane and the HyperView information for the file in the Preview pane. To generate the report in HTML, choose File > Report. The figure below shows the Effort Estimation window.

Parent topic: Estimating Complexity and Effort
Related tasks
Setting Effort Estimation Options
Related information
Specifying the Change Magnitude for a Source File


Setting Effort Estimation Options

Describes how to set Effort Estimation Options.

Use the Effort Estimation tab of the Project Options window to specify the file types included in the effort estimation calculation and the complexity metrics for each type. These options also control the percentage factor for the change magnitudes used in the calculation.
STEPS:
  1. Choose Tools > Project Options. The Project Options window opens. Click the Effort Estimation tab.
  2. In the Factors pane, select each source file type you want to include in the calculation.
  3. For each source file type selected in the Factors pane, click Attributes to edit the complexity metrics used in the calculation.
  4. In the Attributes window, select each complexity metric you want to use in the calculation, then enter its weight in the Weighting Factor field. For example, if you want Cyclomatic Complexity to have twice the weight of Conditional Complexity, set the weighting factor for Cyclomatic Complexity to 2 and the weighting factor for Conditional Complexity to 1.
  5. To set the percentage factor for the change magnitudes used in the calculation, enter the percentage you want to be applied in the combo box for each change magnitude.
Parent topic: Estimating Complexity and Effort
Related information
Estimating Effort


Specifying the Change Magnitude for a Source File

Describes how to specify a change magnitude for a source file.

Suppose you are planning to implement a change request and want to know how long it will take to complete the change. In that situation, you typically run an effort estimation report for your project based on weighted values for selected complexity metrics.

But what if your own analysis of the project shows that a given program will actually take much less time to change than the weighted calculation would suggest. The program might have thousands of source lines, for example, increasing its calculated complexity, while actually being very easy to modify.

A change magnitude is a way of overriding the calculated value for a source file. Your "subjective" estimate of the effort involved, Small, Medium, Large, Extra Large, becomes an input to the effort calculation, along with the weighted values.

You can specify a change magnitude in the HyperView Source or Context pane, or in the Effort Estimation tool itself. Select the source file and choose Set Change Magnitude in the right-click menu. Set the change magnitude to S for Small, M for Medium, L for Large, or XL for Extra Large. The effort estimation calculation for the selected file is automatically updated.

Parent topic: Estimating Complexity and Effort
Related information
Estimating Effort


Identifying Classes of Data Items

Introduces Change Analyzer.

Change Analyzer identifies the class of data items used to perform a business function in a legacy application. Among other uses, it lets you answer the kinds of “What if?” questions posed in the past by industry-wide changes for Y2K, Zip+4, and the Euro dollar: “What if I change the type of this variable, or the length of this field? What other fields in the class will I also have to change?”

For each field in the class, you can use Change Analyzer to perform an impact trace that shows the flow of data to the field, and to detect and resolve program ports. You can generate reports showing source entities that may require modification, lines of affected code, and the like.

Projects must have been verified with the Enable Data Element Flow option set in the Project Verification options. Project options on the Impact > Relationships tab control the relationships detected during synonym and impact trace processing.
  • Understanding Data Item Classification
    Offers background on data item classification.
  • Getting Started in Change Analyzer
    Provides an example of Change Analyzer usage.
  • Understanding the Change Analyzer Window
    Provides an overview of the Change Analyzer window.
  • Searching for Seed Fields in Change Analyzer
    Describes how to search for seed fields in Change Analyzer.
  • Detecting Synonyms
    Describes how to detect synonyms for fields.
  • Batch-Detecting Synonyms
    Describes how to batch-detect synonyms for seed fields.
  • Performing an Impact Trace
    Describes how to perform an impact trace for a seed field.
  • Viewing and Resolving Ports
    Describes how to view and resolve ports.
  • Creating Projects in Change Analyzer
    Describes how to create projects in Change Analyzer.
  • Setting Change Analyzer Options
    Describes how to set Change Analyzer project options.
  • Generating Change Analyzer Reports
    Describes how to generate Change Analyzer reports.
Related tasks
Setting Project Verification Options


Understanding Data Item Classification

Offers background on data item classification.

Suppose your organization is considering adding support for a new currency and that you are going to have to expand the existing exchange rate data field from 9(5)V9(3) to 9(5)V9(6) to accommodate the currency. You will need to know the data fields that are affected in the database, intermediate fields that may contain or use the exchange rate field in calculations, and so forth.

Seed Fields

Use Change Analyzer to search for the exchange rate field. The object of the search is called a seed field:

  • If the application uses field names like EX-RATE, EXCH-RATE, EXCHANGE-RATE, and RATE-OF-EXCHG, you would search for data names that contain *EXCH* or *RATE*.
  • If you know that some fields already contain the required number of decimal positions and are interested only in those that don’t, you might further limit the search by filtering on the PICTURE clause format of the variable, selecting only data items that have a format of 9(5)V9(3).
  • You might limit the search even further by choosing fields that have a given initial value.
  • If you know there are data fields that will meet the search criteria for name, but are not what you are looking for, you might set up a list of names to exclude, such as INTEREST-RATE and *PRORATE*.

Synonyms

Once you have found the exchange rate field, you can use Change Analyzer to detect its synonyms. A synonym is a data field whose value is related to the value of a seed field: a field whose value is assigned by a MOVE or REDEFINE statement, for example. In these cases, if you increase the size of the seed field, you probably will need to increase the size of its synonyms as well.

Analyzing Seed Fields and Synonyms

Not every seed field or synonym will be affected by a proposed change. You need to examine the source code for each instance of the field carefully in the Change Analyzer Source pane and in the HyperView tools accessible from the Source pane. You may want to perform an impact trace showing the flow of data to the field as documentation, or to ensure that you have accounted for each instance.

Seed Lists

Once you determine which fields are affected by a proposed change, you can move the fields between seed lists: Working and Affected, for example. You can generate reports based on your lists, as well as reports showing the affected source code in context.

Parent topic: Identifying Classes of Data Items
Related information
Setting Impact Pane Project Options: Relationships Tab


Getting Started in Change Analyzer

Provides an example of Change Analyzer usage.

This section describes a sample use of Change Analyzer that should help you get oriented in the tool. Assume that you want to evaluate the impact of changing the YEAR field in your application.

STEPS:
  1. In the Repository Browser, select the project you want to analyze and choose Analyze > Change Analyzer.
  2. The Change Analyzer window opens. Click in the Lists pane and choose Add List in the right-click menu. Change Analyzer creates a list named NewList 1. Select NewList 1 and choose Rename List in the right-click menu. In the Rename List dialog, enter Working in the New Name field and click OK. Follow the same procedure to create another list named Affected.
  3. Choose File > Apply Filter. The Select List dialog opens. Select the Working list and click OK.
  4. The Search window opens. Click the Change Analyzer tab to view a list of recognized search criteria. Click the [image] button on the tool bar to define a new criterion. In the New Criterion dialog, enter YEAR and click OK. The YEAR criterion is displayed in the list of recognized criteria in the Change Analyzer tab in the Search window.
  5. In the Change Analyzer tab, select the YEAR criterion, enter the search text for the criterion in the Name Like tab, and click Find All Constructs. Change Analyzer returns the seed fields for the criterion in the Working list.
  6. Select a program in the Programs pane to view its seed fields in the Working list. Select a seed field to navigate to its declaration in the Source pane. Examine the declaration to determine whether the field will be affected by the proposed change.
  7. In the Working list, select each field that will be affected by the change and choose Edit > Move to.... The Move/Copy List Items dialog opens. In the Select Method drop-down, select Move. In the To List: pane, select the Affected list and click OK. Change Analyzer moves the fields to the Affected list.
  8. Select a seed field in the Affected list and choose Find Synonyms in the right-click menu. The Find Synonyms dialog opens. Specify the depth of synonym processing in the Depth combo box, then click OK. Change Analyzer displays the synonyms for the selected field on the Synonyms tab in the Synonyms and Ports pane.
  9. Examine the declaration for each synonym to determine whether the field will be affected by the proposed change. Use the procedure described above to move the affected fields to the Affected list. Find synonyms for these fields the same way you found synonyms for seed fields.
  10. Choose File > Reports. The Report Selection dialog opens. In the Report Type drop-down, select Report on the Whole List. In the Select List pane, select the Affected list and click OK. Change Analyzer displays the report for the Affected list.
Parent topic: Identifying Classes of Data Items


Understanding the Change Analyzer Window

Provides an overview of the Change Analyzer window.

Use the Change Analyzer to identify classes of data items. To open the Change Analyzer, select a project in the Repository Browser and choose Analyze > Change Analyzer.

The figure below shows the Change Analyzer window after searching for seed fields, detecting synonyms, and moving items between lists. The current contents of Change Analyzer lists are stored in the Change Analyzer folder in Clipper.

  • Programs Pane
    Describes the Change Analyzer Programs pane.
  • Lists Pane
    Describes the Change Analyzer List pane.
  • Synonyms and Ports Pane
    Describes the Change Analyzer Synonyms and Ports pane.
  • Source Pane
    Describes the Change Analyzer Source pane.
Parent topic: Identifying Classes of Data Items


Programs Pane

Describes the Change Analyzer Programs pane.

The Programs pane lists each program in the selected project and the number of fields the program has in the selected list.

Parent topic: Understanding the Change Analyzer Window


Lists Pane

Describes the Change Analyzer List pane.

The Lists pane displays the lists for the project. The number in parentheses after the list name indicates the number of fields the list contains for the selected program.

Click the appropriate tab to view a list. Select a field to navigate to its declaration in the Source pane.

The table below describes the columns in the Lists pane. You can filter a column by clicking an item in the [image] drop-down for the column.

Tip: The Comment column is especially useful for filtering lists.
Column | Description
Name | The name of the field.
Length | The length of the field.
Value | The value of the field.
Picture | The format of the field.
Normalized Picture | The normalized picture of the field.
Comment | The comment for the field.
Program | The program in which the field is used.
File | The source file that contains the declaration for the field.
  • Creating Lists
    Describes how to create lists.
  • Deleting Lists
    Describes how to delete lists.
  • Selecting Fields
    Describes how to select fields in lists.
  • Editing the Comment for a Field
    Describes how to edit the comment for a field.
  • Moving Fields Between Lists
    Describes how to move fields between lists.
  • Performing Set Operations with Lists
    Describes how to perform set operations with lists.
  • Deleting Fields
    Describes how to delete fields from lists.
Parent topic: Understanding the Change Analyzer Window


Creating Lists

Describes how to create lists.

To create a list, click in the tool bar of the Lists pane and choose Add List in the right-click menu. Change Analyzer creates a list named NewList n.

To rename the list, select it and choose Rename List in the right-click menu. In the Rename List dialog, enter the name of the list in the New Name field and click OK.

Parent topic: Lists Pane


Deleting Lists

Describes how to delete lists.

To delete a list, select it and choose Remove List in the right-click menu. You are prompted to confirm that you want to delete the list. Click Yes.

Parent topic: Lists Pane


Selecting Fields

Describes how to select fields in lists.

Click a field to select it. Use Ctrl-click to select multiple fields. Use Shift-click to select a range of fields. To select all the fields on a list, click the tab for the list and choose Edit > Select All.

Parent topic: Lists Pane


Editing the Comment for a Field

Describes how to edit the comment for a field.

To edit the comment for a field, select it and choose Edit > Comment. A dialog opens where you can edit the comment.

Parent topic: Lists Pane


Moving Fields Between Lists

Describes how to move fields between lists.

To move fields between lists, select the fields, then choose Edit > Move to. The Move/Copy List Items dialog opens. In the Select Method drop-down, select Move to move the selected fields or Copy to copy the fields. In the To List: pane, select the target list and click OK.

Parent topic: Lists Pane


Performing Set Operations with Lists

Describes how to perform set operations with lists.

To join lists using AND or OR operations, or to subtract the contents of one list from another, choose Edit > Set Operations. The List Set Operations dialog opens. In the Left pane, select the list on the left side of the set operation. In the Right pane, select the list on the right side of the set operation. In the Destination pane, select the target list. Select the operation you want to perform in the Choose Operation drop-down and click OK.

Parent topic: Lists Pane


Deleting Fields

Describes how to delete fields from lists.

To delete a field, select it and choose Edit > Delete.

Parent topic: Lists Pane


Synonyms and Ports Pane

Describes the Change Analyzer Synonyms and Ports pane.

The Synonyms and Ports pane displays two tabs:

  • The Synonyms tab displays the synonyms for the field selected in the Lists pane and/or the impact trace for the field. Select a synonym to navigate to its declaration in the Source pane. Select a field in an impact trace to navigate to its use in the Source pane.
    Batch-detected synonyms are displayed in the target list, not on the Synonyms tab.
  • The Ports tab displays the field selected in the List pane, if Change Analyzer has detected a port in which the field is used. Select the field to navigate to the port in the Source pane.

Click the appropriate tab to view an item. The table below describes the columns in the Synonyms and Ports pane.

Column | Description
Name | The name of the field.
Length | The length of the field.
Value | The value of the field.
Picture | The format of the field.
Normalized Picture | The normalized picture of the field.
Comment | The comment for the field. The comment reads "Port found" on the Ports tabs when a port has been detected.
Program | The program in which the field is used.
File | The source file that contains the declaration for the field.
Parent topic: Understanding the Change Analyzer Window


Source Pane

Describes the Change Analyzer Source pane.

The Source pane lets you browse the source code for the selected program and the declaration for the selected field or synonym. When an impact trace is displayed in the Synonyms tab, select a field in the trace to navigate to its use in the Source pane. When a field is listed on the Ports tab, select the field to navigate to the port in which the field is used.

Usage is similar to that for the Source pane in HyperView. For HyperView usage information, see Analyzing Programs in the workbench documentation set.

Parent topic: Understanding the Change Analyzer Window


Searching for Seed Fields in Change Analyzer

Describes how to search for seed fields in Change Analyzer.

The Change Analyzer search facility contains two tabs:

  • The General tab opens the HyperView advanced search facility.
  • The Change Analyzer tab opens a scoped version of the advanced search facility for Change Analyzer.

Ordinarily, the scoped version of the tool should be sufficient for most searches. If you are already familiar with the advanced search facility, however, you may want to use it instead of the scoped tool.

For Cobol programs, Change Analyzer returns only constants and literals found in the Procedure section.
STEPS:
  1. Choose File > Apply Filter. The Select List dialog opens. Select the target list for seed fields and click Select.
  2. The Change Analyzer Search window opens. Click the Change Analyzer tab. The Change Analyzer tab displays a list of recognized search criteria.
    Define a new criterion as described in the help for the advanced search facility.
  3. Select a criterion to edit its definition in the tabs in the righthand portion of the window. Each tab specifies a condition in the definition. The definition can consist of any combination of conditions.
  4. For each condition, enter a list of patterns you want to match, one pattern per line. You can use wildcard patterns allowed in LIKE statements by Visual Basic for Applications (VBA). Select:
    • Name Like to specify patterns that are like the name of the field you are searching for.
    • Name Not Like to specify patterns that are unlike the name of the field you are searching for.
    • Picture Like to specify patterns that are like the format of the field you are searching for.
    • Value Like to specify patterns that are like the initial value of the field you are searching for.
  5. Select Use OR Connection Between Lists if you want the conditions defined in the tabs to be ORed. If you do not select this option, the conditions are ANDed.
  6. Select Used Data Items Only if you want the search results to consist only of fields that are used in the selected programs. If you do not select this option, search results include fields that are declared but not used.
  7. In the Search In drop-down on the tool bar, choose:
    • All Objects if you want to execute the search against all the source files in the project.
    • A Clipper list if you want to execute the search only against the source files on the list.
  8. Click Find All Constructs to execute the search.
Change Analyzer returns the seed fields for the criterion in the target list. The results are added to any previous results.
Parent topic: Identifying Classes of Data Items
Related information
Creating a Search Criterion
Defining a Search Filter


Detecting Synonyms

Describes how to detect synonyms for fields.

To detect synonyms for fields, select the fields in the Lists or Synonyms and Ports pane and choose Find Synonyms in the right-click menu. The Find Synonyms dialog opens. Specify the depth of synonym processing in the Depth combo box, then click OK. Change Analyzer displays the synonyms for the selected field on the Synonyms tab.
Parent topic: Identifying Classes of Data Items
Related tasks
Batch-Detecting Synonyms
Performing an Impact Trace
Viewing and Resolving Ports
Related information
Setting Impact Pane Project Options: Relationships Tab


Batch-Detecting Synonyms

Describes how to batch-detect synonyms for seed fields.

Follow the instructions below to batch-detect synonyms for fields. You can batch-detect synonyms for the selected program or for all the programs in the project. Bear in mind that batch-detecting synonyms for a project can be quite time-consuming.

STEPS:
  1. In the Programs pane, select the program for which you want to find synonyms. Select any program if you want to find synonyms for all the programs in the project.
  2. Choose File > Batch Find Synonyms. The Find Synonyms dialog opens.
  3. In the Find In pane, select the list of seed fields whose synonyms you want to find. In the Add Synonyms To pane, select the list to which you want to add the synonyms.
    Tip: The lists may and often will be the same. To create a new list, enter the name of the list in the New List field and click Create List.
  4. Specify the depth of synonym processing in the Depth combo box.
  5. Choose:
    • From selected program if you want to batch-detect synonyms for the selected program.
    • From all programs if you want to batch-detect synonyms for all the programs in the project.
  6. Click OK.
Change Analyzer adds the synonyms to the target list.
Parent topic: Identifying Classes of Data Items
Related information
Detecting Synonyms


Performing an Impact Trace

Describes how to perform an impact trace for a seed field.

The impact trace for a field displays the flow of data to the field: how data items exchange values, use each other in computations, and so forth. Perform an impact trace when you want to document your analysis, or to ensure that you have accounted for each instance of a field.

To perform an impact trace for a field, select the field in the Lists or Synonyms and Ports pane and choose Find Synonyms in the right-click menu. The Find Synonyms dialog opens. Click Show Impacts, then specify the depth of the trace in the Depth combo box. Click OK. Change Analyzer appends the impact trace to the Synonyms tab.

Parent topic: Identifying Classes of Data Items
Related information
Detecting Synonyms


Viewing and Resolving Ports

Describes how to view and resolve ports.

When Change Analyzer detects synonyms for a field, it also detects any ports in which the field is used. It displays the declaration for the port in the Ports tab with the comment "Port found" along with the Hyperview information for the port. Select the declaration to navigate to the port in the Source pane.

Resolving a port identifies the port with which the detected port communicates. By tracking communications between ports, you can analyze affected fields across programs. Follow the instructions below to resolve a port.

STEPS:
  1. In the Ports pane, select the declarations for the ports you want to resolve and choose Resolve Ports in the right-click menu. The Resolve Ports dialog opens.
  2. Select the list to which you want the declarations for the communicating ports to be added.
    Tip: To create a new list, enter the name of the list in the New List field and click Add List.
  3. Click OK.
Change Analyzer adds the declarations for the communicating ports to the target list.
Parent topic: Identifying Classes of Data Items
Related information
Detecting Synonyms


Creating Projects in Change Analyzer

Describes how to create projects in Change Analyzer.

You can create a project directly in Change Analyzer from the results of your analysis. The project contains only source files with fields in the selected list.

STEPS:
  1. Select a list and choose Create Project in the right-click menu.
  2. The New Project dialog opens. Enter the name of the new project in the text field and click OK.
  3. The Change Magnitude window opens. Select Automatically calculate change magnitude if you want Change Analyzer to set change magnitudes for the listed source files based on the ranges specified in the fields below the check box. The Change Analyzer settings will override any existing change magnitudes for the files.
Parent topic: Identifying Classes of Data Items


Setting Change Analyzer Options

Describes how to set Change Analyzer project options.

Use the Change Analyzer tab of the Project Options window to specify the default depth of synonym and impact trace processing and the amount of information to display in the Affected Code report.
STEPS:
  1. Choose Tools > Project Options . The Project Options window opens. Click the Change Analyzer tab.
  2. In the Synonyms pane, specify the depth of synonym and impact trace processing in the Default Depth combo box. Click Show Impacts Default Setting if you want to display the default setting in the Change Analyzer dialog boxes you use to detect synonyms and perform impact traces.
    Tip: You can override the default depth setting in these dialog boxes.
  3. In the Affected Code Report pane, specify in the Neighborhood Size combo box the number of lines of unaffected code you want the Affected Code report to display above and below the line of affected code. (The line of affected code is displayed in bold in the report.) Choose Show unused datanames if you want the report to include unused data fields.
Parent topic: Identifying Classes of Data Items


Generating Change Analyzer Reports

Describes how to generate Change Analyzer reports.

To generate HTML reports in Change Analyzer, choose File > Reports. The Report Selection dialog opens. In the Select Lists pane, select the list you want to report on, then select the report type in the Report Type drop-down. Choose:

  • Report on the Whole List to report the contents of the list.
  • Report on Selected Program to report the contents of the list filtered by the program selected in the Programs pane.
  • Metrics Report to report, for each program with a list item, the percentage of declarations in the list relative to the total number of declarations in the program.
  • Affected Code Report to report, for each program with a list item, code that would be impacted by changing the definition or usage of items in the list. The line of affected code is displayed in bold in the report.
    Use Change Analyzer project options to specify the amount of information to display in the Affected Code Report.

Click Generate Report. Change Analyzer displays the report.

Parent topic: Identifying Classes of Data Items


Repository Exchange Protocol Syntax

Introduces the Repository Exchange Protocol (RXP).

The Repository Exchange Protocol (RXP) is an XML-based API that you can use to interact with application-level information in the workspace repository. This appendix describes the RXP query syntax and provides examples of its use.

  • Query Syntax
    Describes RXP syntax.
  • Example 1
    Provides an RXP usage example.
  • Example 2
    Provides an RXP usage example.
Related tasks
Defining a Relationship Filter


Query Syntax

Describes RXP syntax.

An RXP query consists of the tags and attributes described in this section.

Query

<query [name='QueryName']> { Object } </query>

Objects

<object [global='false']>
[ <objecttype> ObjectTypeCondition </objecttype> ]
[ <cond> Condition </cond> ]
[ <fetchtype as='FieldName'/> ]
[ <fetchid as='FieldName'/> ]
[ <fetchdisplay as='FieldName'/> ]
[ <fetchorigin as='FieldName'/> ]
[ <fetchsource as='FieldName'/> ]
[ <fetchsize as='FieldName'/> ]
{ <fetchconst type='FieldType' value='Constant'
as='FieldName'/> }
{ <fetchattr attr='AttrName' as='FieldName'/> }
[ <related [countas='FieldName'][optional='true']>
RelatedSpec
</related>]
</object>

ObjectTypeCondition

<typeset flag='FlagName' [negate='true']/>
| <type name='EntityName' [negate='true']/>
| <and [negate='true']> { ObjectTypeCondition }
</and>
| <or [negate='true']> { ObjectTypeCondition }
</or>

RelatedSpec

[ <reltype> RelTypeCondition </reltype> ]
[ <cond> Condition </cond> ]
[ <fetchtype as='FieldName'/> ]
{ <fetchattr attr='AttrName' as='FieldName'/> }
Object

RelTypeCondition

<relset flag='RelFlagName' [negate='true']
[incoming='true']/>
| <rel name='RelationName' [negate='true']/>
| <and [negate='true']> { RelTypeCondition } </and>
| <or [negate='true']> { RelTypeCondition } </or>

Condition

<attr name='AttrName' op='Operation'
arg='Argument' [negate='true']/>
| <hasrelated [negate='true']> RelatedSpec
</hasrelated>
| <id equals='Integer' [negate='true']/>
| <id in='Integer{,Integer}' [negate='true']/>
| <source equals='String' [negate='true']/>
| <source in='String{,String}' [negate='true']/>
| <origin equals='SID' [negate='true']/>
| <origin in='SID{,SID}' [negate='true']/>
| <and [negate='true']> { Condition } </and>
| <or [negate='true']> { Condition } </or>

EntityName

The name of a repository entity.

AttrName

The name of an entity attribute.

FieldName

The field name of the returned record set.

Operation

= | <> | > | >= | < | <= | like | in | between

FlagName

LEGACY | PROGRAMCODE | SYSTEM | KNOWLEDGE | GENERATED | EXTRACT | COMPOSITE

RelFlagName

REFER | USE | GENERATE | PRODUCE

RelationName

The name of a relationship.

Argument

The argument of the operation. Depends on both argument type and operation.

QueryName

A string.

Parent topic: Repository Exchange Protocol Syntax


Example 1

Provides an RXP usage example.

This example queries the repository for the object ID and parse status of the GSS.cbl source file:

<query name="Select a COBOL object by name">
  <object>
    <objecttype>
      <type name="COBOL"/>
    </objecttype>
    <fetchid as="ID"/>
      <fetchattr name="ParseStatus" as="Parsed"/>
    <cond>
      <attr name="Name" op="=" arg="GSS.cbl"/>
    </cond>
  </object>
</query>
Parent topic: Repository Exchange Protocol Syntax


Example 2

Provides an RXP usage example.

This example queries the repository for copybooks used in three Cobol programs:

<query name="Find COPYBOOKs used in given programs">
  <object>
    <objecttype>
      <type name="COBOL"/>
    </objecttype>
    <cond>
      <attr name="Name" op="in"
       arg="'GSS1.CBL','GSS2.CBL','GSS3.CBL'"/>
    </cond>
    <related>
      <reltype>
        <relset flag="USE"/>
      </reltype>
      <object>
        <fetchid as="ID2"/>
        <fetchtype as="ObjectType2"/>
        <fetchdisplay as="ObjectName2"/>
      </object>
    </related>
  </object>
</query>
Parent topic: Repository Exchange Protocol Syntax


Common Diagramming Features

Introduces the common diagrammer.

This appendix describes features shared by many of the workbench diagramming tools (although not the Diagrammer itself). Use these features to edit diagrams, save diagrams in standard formats, print diagrams, and more.

  • Zooming
    Describes how to zoom in the common diagrammer.
  • Printing Diagrams
    Describes how to print from the common diagrammer.
  • Saving Diagrams
    Describes how to save diagrams in the common diagrammer.
  • Copying Diagrams
    Describes how to copy diagrams in the common diagrammer.
  • Performing Basic Tasks in the Diagram Editor
    Describes how to perform basic editing tasks in the common diagrammer.


Zooming

Describes how to zoom in the common diagrammer.

Use the slider [image] on the tool bar in the lower lefthand corner of the tool window to zoom in or out on a diagram. Click the [image] button on the tool bar to restore the 100% zoom level.

Parent topic: Common Diagramming Features


Printing Diagrams

Describes how to print from the common diagrammer.

Click the [image] button on the tool bar in the lower lefthand corner of the tool window to print the diagram. The Print Preview window opens, where you can change the zoom factor for the diagram to control the number of pages in the print job.

Parent topic: Common Diagramming Features


Saving Diagrams

Describes how to save diagrams in the common diagrammer.

Click the [image] button on the tool bar in the lower lefthand corner of the tool window to save a diagram to BED, bitmap, JPEG, Visio, Visio XML, DOT, or EMF.

Visio 2002 must be installed to save a diagram to Visio. Visio 2002 is not required to save to Visio XML.
Parent topic: Common Diagramming Features


Copying Diagrams

Describes how to copy diagrams in the common diagrammer.

Click the [image] button on the tool bar in the lower lefthand corner of the tool window to copy the diagram to the clipboard in EMF format. You can paste the diagram from the clipboard to a document in a third-party tool such as Word.

Parent topic: Common Diagramming Features


Performing Basic Tasks in the Diagram Editor

Describes how to perform basic editing tasks in the common diagrammer.

Use the built-in Diagram Editor to edit diagrams, change the appearance of diagrams, cut-and-paste from a diagram, and other tasks.

Opening a Diagram in the Diagram Editor

Click the [image] button on the tool bar in the lower lefthand corner of a diagramming tool window. The diagram on view in the tool opens in the Diagram Editor.

Creating a Diagram in the Diagram Editor

To create a new blank diagram, choose File > New Diagram.

Using the Locate Facility

Use the Locate facility to navigate to general locations in a diagram. To invoke the Locate facility, click View > Locate. The Locate window opens.

The Locate window displays the entire diagram on view in the Diagram Editor main window. A frame surrounds the portion of the diagram visible in the main window.

Drag the frame to the area of the diagram you want to view. The Diagram Editor displays the selected area in the main window.

Using the Quick Search Facility

Use the Quick Search facility to navigate to objects in a diagram. To invoke Quick Search, choose View > Search pane. The Quick Search facility opens at the top of the window.

Enter the text for the search in the Quick Search field. You can use wildcard patterns allowed in LIKE statements by Visual Basic for Applications (VBA).

Using the Search and Replace Facility

Use the Search and Replace facility to modify captions or tool tips globally. The Diagram Editor modifies the diagram only, not the repository.

To use the search and replace facility, choose Edit > Replace. The Replace window opens. Enter the text you want to replace in the Find field. Enter the text you want to substitute in the Replace field. Select Match case if you want to match the case of the entered text.You can apply the change to any combination of object captions, relationship captions, or tool tips by selecting the appropriate choices in the Apply to pane. If you apply the change to object captions, select the appropriate choice in the Scope pane to apply the change to all the objects that contain the text or only the selected objects that contain the text.Click Replace to run the operation and dismiss the Replace window.

Selecting Objects in the Diagram Editor

Select an object or relationship in the Diagram Editor by clicking it. Deselect an object by clicking on white space or selecting another object. To select all the objects in the diagram, choose Edit > Select All.

To select a range of objects, click in the diagram, hold down the right mouse button, drag the selection box over the objects you want to select, and release the mouse button. To select objects that are not in a range, hold down the Control key, then click each object you want to select.

Parent topic: Common Diagramming Features


Introducing HyperView

Provides an overview of the HyperView program analysis tools.

Much of the power of Modernization Workbench resides in a set of program analysis tools collectively called HyperView. HyperView lets you analyze legacy programs interactively, by examining synchronized, complementary views of the same information: source, context, impacts, and so forth. You can use HyperView to analyze procedure and data flows, stage program analyses, create a project glossary, extract business rules, and much more.

HyperView is designed primarily for programs, but you can also use it to analyze map files, JCL or ECL files, IDMS schemas, and the like.

  • Understanding HyperView Models
    Provides an overview of HyperView models.
  • Using the HyperView Main Window
    Introduces the HyperView main window.
  • Using Basic Navigation Controls
    Describes how to use basic navigation controls in HyperView.
  • Using the Properties Window
    Introduces the HyperView Properties window.
  • Assigning Business Names Manually
    Describes how to assign business names manually.
Related information
Understanding HyperView Models
Using the HyperView Main Window


Understanding HyperView Models

Provides an overview of HyperView models.

For each object that comprises an application, HyperView generates a construct model that defines its syntax. The construct model shows in abstract form how the syntactical constructs that comprise the object (its sections, paragraphs, statements, conditions, variables, and so forth) are related.

A variable, for example, can be related in the construct model to its declaration, a dataport (if it is used in an I/O statement), or a condition (if the condition uses an expression of which the variable forms a part). You view the construct model for a source file in the HyperView Context pane.

The figure below shows a portion of the construct model for the GSS5.CBL program. The model shows that the program executes a PERFORM statement if the value of the variable EIBRESP satisfies the condition EIBRESP NOT EQUAL DFHRESP(NORMAL).

Use of EIBRESP Variable

If you are interested in investigating other uses of EIBRESP in the program, you can navigate to the declaration of the variable in the construct model. Select EIBRESP in the Context pane and choose Edit > Declaration.

Declaration of EIBRESP Variable

From the declaration, you can generate a list of instances in which the variable is used. Select the declaration in the Context pane and choose Edit > Instances.

Select an instance in the list to navigate to that instance in the construct model.

Parent topic: Introducing HyperView


Using the HyperView Main Window

Introduces the HyperView main window.

The HyperView main window consists of a series of panes that offer complementary views of code constructs in the selected source file. The display in each pane is synchronized with the others: selecting a construct in one pane automatically moves the cursor to the construct in the other panes.

You can invoke HyperView directly by selecting a source file in the Repository Browser and choosing Analyze > Interactive Analysis. HyperView is also available within the project analysis tools (Diagrammer, Change Analyzer, and so forth) but "silently," that is, without your ever actually invoking it as such. Tool usage is identical in either case.

The first time you open HyperView it displays the Source and Context panes. Select the appropriate choice in the View menu to show the other panes. A pane is available only if the view it offers is relevant for the source file type selected in the Objects pane. You will not see a Rules pane, for example, if a BMS file is selected in Objects pane. Choose the type of file to display in the drop-down under the title bar of the Objects pane. Select the file you want to open in the list below the drop-down.

Use the choices at the top of the View menu to configure the panes in logical groupings. Choose Control Flow, for example, to view the Source, Flowchart, Callie, and Animator panes. You can hide a pane by clicking the close box in the upper righthand corner. Edit menu choices and pane-specific menu choices have equivalent choices in the right-click menu.

Tip: Double-click the title bar of a pane to maximize the pane in HyperView, hiding any other open panes. Double-click the title bar again to restore the previous view.

The HyperView window's state (size, location, configuration, and option settings) is saved across sessions. HyperView provides access to the workbench Activity Log and relevant options windows. To view these items, select the appropriate choice in the View menu.

Usage for the Data View and Data Flow panes is identical to that for the corresponding panes in the Global Data Flow tool. For more information, see Analyzing Projects in the workbench documentation set.

For Component pane usage, see Creating Components in the workbench documentation set.

Parent topic: Introducing HyperView


Using Basic Navigation Controls

Describes how to use basic navigation controls in HyperView.

HyperView offers Explorer-style navigation controls on the tool bar, with corresponding choices in the Edit menu:

  • Click the * button on the tool bar to navigate backward in the history of your selections in the HyperView window (regardless of the pane in which they were made). Click the adjacent * button to display the selection history in a drop-down menu. Choose a selection by clicking it in the menu.
  • Click the * button on the tool bar to navigate forward in the history of your selections in the HyperView window (regardless of the pane in which they were made). Click the adjacent * button to display the selection history in a drop-down menu. Choose a selection by clicking it in the menu.
  • Click the * button on the tool bar to navigate to the parent of the selected construct in the parse tree. Click the adjacent * button to display all of the ancestors of the selected construct in a drop-down menu. Choose a selection by clicking it in the menu.
Parent topic: Introducing HyperView


Using the Properties Window

Introduces the HyperView Properties window.

The HyperView Properties window for a construct identifies its attributes and related constructs. Attributes are the construct's type, name, location, and characteristics. Related constructs are the constructs with which the construct interacts. The Properties window is not modal, so you can leave it up throughout your HyperView session.

  • Opening the Properties Window
    Describes how to open the HyperView Properties window.
  • Viewing and Navigating to Related Constructs
    Describes how to view and navigate to related constructs in the HyperView Properties window.
  • Opening a Properties Window for a Related Construct
    Describes how to open a properties window for a related construct.
Parent topic: Introducing HyperView
Related information
Navigating to Related Constructs


Opening the Properties Window

Describes how to open the HyperView Properties window.

You can open the Properties window from any HyperView pane except the Model Reference pane. Select the construct whose properties you want to view and choose Properties in the right-click menu. The Properties window opens.

Properties Window (Attributes Tab)

Parent topic: Using the Properties Window


Viewing and Navigating to Related Constructs

Describes how to view and navigate to related constructs in the HyperView Properties window.

To view related constructs in the Properties window, click the tab for the type of related constructs you want to view. Click a related construct to navigate to it in the Source or Context panes.

Click the * button in the Properties window to navigate back to the original construct.
Parent topic: Using the Properties Window


Opening a Properties Window for a Related Construct

Describes how to open a properties window for a related construct.

To open a Properties window for a related construct, select the related construct in the Properties window and choose Properties in the right-click menu.

Tip: Click the * button to "pin" a Properties window, so that it remains open when you open another Properties window. Click the button again to unpin the window.
Parent topic: Using the Properties Window


Understanding Program Context

The HyperView panes described in this chapter offer a set of complementary views of legacy source code. Together these views provide all the information you need to understand the context of a program item:

  • The Source pane displays view-only source for the selected file.
  • The Context pane displays the same code in hierarchical form, in a parse tree that defines the relationships between the code constructs that comprise the source.
  • The Objects pane lists the files in the project. Select a file to open it in the Source or Context panes.
  • The Watch pane displays program context in summary fashion, showing, in a single view, object model context for the selected source file and construct model context for the selected construct.
  • The Screen pane displays the screen object defined in the selected map file, complementing the "bottom-up" analysis of application business processes in the Source and Context panes with a "top-down" view that lets you navigate quickly to an item of interest.
  • Using the Source Pane
    Describes how to use the Source pane.
  • Using the Context Pane
    Describes how to use the Context pane.
  • Using the Objects Pane
    Describes how to use the Objects pane.
  • Using the Watch Pane
    Describes how to use the Watch pane.
  • Using the Screen Pane
    Introduces the Screen pane.
  • Using the Bird's Eye Pane
    Describes how to use the Bird's Eye pane.
  • Using the Model Reference Pane
    Describes how to use the Model Reference pane.


Using the Source Pane

Describes how to use the Source pane.

The Source pane displays view-only source for the selected file. The name of the file appears in the File drop-down.

You can display the source code for an included file by choosing the file in the File drop-down. Use the Objects pane to select a different file.

Use the Editor in the Modernization Workbench main window to modify program source code.

  • Navigating and Searching for Source
    Describes the basic methods for navigating and searching in the Source pane.
  • Selecting and Copying Code
    Provides an overview of selecting and copying code in the Source pane.
Parent topic: Understanding Program Context
Related information
Using the Objects Pane
Using the Context Pane
Using the Watch Pane


Navigating and Searching for Source

Describes the basic methods for navigating and searching in the Source pane.

Click in the Source pane to navigate to a construct. Enter a line number in the field next to the Go to Line Icon button and click the button or press Enter to navigate to the line. Tool tips show line numbers in the source file when you scroll the Source pane vertically.

  • Using the Simple Search Facility
    Describes how to use the HyperView simple search facility.
  • Navigating to Related Constructs
    Describes how to navigate to related constructs.
  • Navigating to Multiple Occurrences of an Included Construct
    Describes how to navigate to multiple occurrences of an included construct.
Parent topic: Using the Source Pane


Using the Simple Search Facility

Describes how to use the HyperView simple search facility.

HyperView provides simple and advanced search facilities for source code. To use the simple search facility, enter the text for the search in the field next to the Search Button Icon button on the tool bar. HyperView locates text matches as you type. Click the Search Button Icon button or press Enter to navigate to the next matching construct.

To view matching constructs in a list, click the adjacent Down Arrow Icon button. From the drop-down menu, choose:

  • Find All to display pattern matches in a list.
  • Wildcard Find All to display wildcard pattern matches in a list. You can use wildcard patterns allowed in LIKE statements by Visual Basic for Applications (VBA).
  • Recent Search List to display the results of the last simple search.

Double-click an item in a list to navigate to it in the Source pane.

Parent topic: Navigating and Searching for Source
Related information
Defining a Search Filter
Performing Advanced Searches


Navigating to Related Constructs

Describes how to navigate to related constructs.

The Edit menu lists choices corresponding to each type of relationship the selected construct has with other constructs in the parse tree. If you select a variable in the Source pane, for example, the Edit menu shows Conditions, Port, and Declaration choices. The choices are grayed-out if no relationships of the given type exist for the selected construct.

To view all the constructs in the source file that have a given relationship with a construct, select the construct in the Source pane and choose the appropriate relationship in the Edit menu:

  • If only one construct has the specified relationship, HyperView simply moves the cursor to that construct in every open HyperView pane.
  • If more than one construct has the specified relationship, HyperView opens a list of related constructs in the Properties window and moves the cursor to the first item in the list in every open HyperView pane. To navigate to another item in the list, choose it in the Properties window.
Parent topic: Navigating and Searching for Source
Related information
Understanding HyperView Models
Using the Properties Window


Navigating to Multiple Occurrences of an Included Construct

Describes how to navigate to multiple occurrences of an included construct.

If an included file is referenced multiple times in a program (in different structures, for example), you can use the arrows in the upper right-hand corner of the Source pane to navigate between each occurrence of an included construct in the Context pane.

In the Source pane, click on the construct in the included file. The numbers in the upper right-hand corner show the sequence number of the current construct versus the total number of constructs. The notation "2/3," for example, identifies the second occurrence of a construct that occurs three times. Use the arrows to navigate between each occurrence.

Parent topic: Navigating and Searching for Source
Related information
Using the Context Pane


Selecting and Copying Code

Provides an overview of selecting and copying code in the Source pane.

There are two ways to select and copy code in the Source pane, as construct or as text. Which you choose depends on the task you want to perform.

  • Selecting and Copying Constructs
    Describes how to select and copy code as construct.
  • Selecting and Copying Text
    Describes how to select and copy code as text.
Parent topic: Using the Source Pane


Selecting and Copying Constructs

Describes how to select and copy code as construct.

Click inside a construct in the Source pane to select it. The selected construct is highlighted. The number of the first line of the selection is displayed in the Ln field above the source code. To copy the construct to the clipboard, choose Copy Selected Construct in the Source menu.

Parent topic: Selecting and Copying Code


Selecting and Copying Text

Describes how to select and copy code as text.

Copy code as text when you are assigning code segments to business rules manually and want to select either more or less code than a construct contains. To select a code segment as text, click-and-drag from the first line of the segment to the last line of the segment. The selected text is highlighted in blue. To copy the selected segment to the clipboard, choose Source > Copy Selected Text.

Tip: Click the minus sign (-) next to a paragraph, procedure, or data definition to collapse its contents. Click the plus sign (+) to expand its contents.
Parent topic: Selecting and Copying Code


Setting Source Pane User Preferences

Describes how to set Source Pane User Preferences.

Use the HyperView > Source tab of the User Preferences window to specify the color-coding used in the Source pane and other display features.
STEPS:
  1. Choose Tools > User Preferences. The User Preferences window opens. Click the HyperView > Source tab.
  2. Select Iconic cursor to specify that the icon for a selected construct ( Data Port for a data port, for example) replace the standard cursor.
  3. In the Selected Construct Color field, click the adjacent Down Arrow Icon button to edit the color used to highlight the selected construct.
  4. In the List Highlighting Color field, click the adjacent Down Arrow Icon button to edit the color used to highlight lists.
  5. In the Color Scheme pane, click the construct types whose text you want to colorize, or click Select All to select all the construct types. The current color of the selected types (if any) is displayed in the Fore Color drop-down. Click the adjacent Down Arrow Icon button to edit the color of the construct types.
  6. Select Display Business Names to display business names rather than original identifiers in the Context pane.


Collapsing and Expanding Paragraphs or Subprograms

Describes how to expand and collapse paragraphs.

In very long programs, it may be helpful to display the names of paragraphs or subprograms only and hide their source code. To collapse paragraphs or subprograms, choose Edit > Collapse All. Click the plus sign (+) next to a collapsed paragraph or subprogram to show its source code again. To show the source code for all collapsed paragraphs or subprograms, choose Edit > Expand All.


Showing Source Code Boundaries

Describes how to demarcate source code from leading and trailing enumeration characters.

To demarcate source code from leading and trailing enumeration characters in source lines, choose Edit > Show Boundaries.


Using the Context Pane

Describes how to use the Context pane.

The Context pane displays the parse tree for the selected source file. The parse tree displays source code constructs (sections, paragraphs, statements, conditions, variables, and so forth) in hierarchical form, making it easy to locate code constructs quickly. Constructs are displayed in the order they appear in your code.

HyperView adds artificial "owning" sections or paragraphs to the parse tree as necessary. An added, or faked, section or paragraph is denoted in the parse tree with a leading underscore: _S1, for example.

The scope of the parse tree determines the constructs and relationships it displays: all constructs, only control statements, only declarations, and so forth. Scopes include the lists HyperView generates when you perform advanced searches, navigate to a related construct, or identify candidates in Clipper. Choose the scope of the parse tree in the Scopes drop-down on the Context pane tool bar.

Click the plus sign (+) next to a construct to expand its hierarchy. Click the minus sign (-) to collapse the hierarchy. The Edit menu lists every relationship type for the construct selected in the Context pane.

Perform other tasks as you do in the Source pane. Select Display Business Names in the User Preferences for the Source pane to display business names rather than original identifiers in the Context pane.

Parent topic: Understanding Program Context
Related information
Using the Source Pane
Understanding HyperView Models


Using the Objects Pane

Describes how to use the Objects pane.

The Objects pane lists the files in the project. Select a file to open it in the Source or Context panes. Choose the type of file to display in the drop-down under the title bar.

Parent topic: Understanding Program Context
Related information
Using the Source Pane


Using the Watch Pane

Describes how to use the Watch pane.

The Watch pane displays current program context in summary form, showing, in a single view, object model context (Level 1) for the selected source file and construct model context (Level 2) for the selected construct. Both the content of the Watch pane and its layout are customizable with the externalized XML queries and CSS stylesheets provided with the workbench. For more information, contact support services.

Follow the instructions below to view current context summaries in the Watch pane.

STEPS:
  1. Select the source file you want to view in the Objects pane.
  2. Select the construct you want to view in the Source or Context pane.
  3. Click the Refresh Watch Button button in the Watch pane to refresh the display:
    • The object model context (Level 1) displays the logical object extracted from the selected source file and its key metrics and relationships.
    • The construct model context (Level 2) displays the selected construct, its business name, its location in source, and other characteristics. For a variable, click the Build link to view a summary of impact trace results:
      • Data Source displays the flow of data through each port in the trace to the originating port.
      • Data Destination displays the flow of data through each port in the trace to the destination port.
      • Received Values displays the value of the watched variable at each location in the impact trace.
  4. Click the Hide link to hide a summary. Click the Show link to restore a summary.
  5. Click the Report Watch Button button to save the contents of the Watch pane to an HTML file. The Save Watch View dialog opens, where you can specify the name and folder of the HTML file. The report opens when the save operation is complete.
Parent topic: Understanding Program Context
Related information
Using the Source Pane


Using the Screen Pane

Introduces the Screen pane.

The Screen pane displays the screen object defined in the selected map file. It complements the "bottom-up" analysis of application business processes in the Source and Context panes with a "top-down" view that lets you navigate quickly to data items of interest in your application.

To view a screen object in the Screen pane, select the map file in the Objects pane, then select the screen in the Source or Context panes. Choose Screen > Best Fit to fit the screen to the Screen pane. Choose Screen > Actual Size to restore the screen to its actual size.

Gray areas on the Screen pane represent screen fields. Click on a field or screen label to select it. Select a field and choose Data Items in the right-click menu to view the declarations for the field in the Properties window.

  • Manually Extracting Business Names for Program Variables
    Describes how to manually extract business names for program variables.
Parent topic: Understanding Program Context


Manually Extracting Business Names for Program Variables

Describes how to manually extract business names for program variables.

One of the most powerful features of Modernization Workbench lets you auto-extract screen labels as business names for program variables. For each screen field with a label immediately to its left in the Screen pane, the Glossary tool generates a business name for the program variable whose value is displayed in the field. If the screen field has the label Customer Number, for example, Glossary assigns the business name "Customer Number" to the variable whose value is displayed in the field.

Occasionally, however, you may need a finer-grained approach than the auto-extract feature offers. The field of interest may not be immediately to the right of the label, or the field may have no label at all. In these situations, you can extract business names for program variables manually in the Screen pane.

STEPS:
  1. Double-click a screen label and select the portion of the label you want to use as the business name, then click Ctrl+C.
    You don't have to use the screen label. You can put any text on the clipboard and assign it as the business name.
  2. Select the field of interest and click Ctrl+V. HyperView paints a yellow box in the lower lefthand corner of the field to indicate that the program variable for the field has been assigned a business name. Double-click the field to navigate to the variable in the Glossary.
Parent topic: Using the Screen Pane
Related information
Extracting Business Names from Screens


Using the Bird's Eye Pane

Describes how to use the Bird's Eye pane.

The Bird's Eye pane lets you quickly identify the location of a code construct relative to the entire program and any included files. Click a construct in the Source or Context panes to view its location in the Bird's Eye pane.

Bird's Eye Pane

Parent topic: Understanding Program Context


Using the Model Reference Pane

Describes how to use the Model Reference pane.

The Model Reference pane displays the HyperView metamodel in text and diagram form. Check the model reference embedded in the advanced search utility for the data types and definitions of construct attributes you use in searches.

Model Reference Pane

Parent topic: Understanding Program Context


Performing Advanced Searches

Introduces the Advanced Search facility.

The HyperView Advanced Search facility distills the parse tree metamodel into a series of prompts that help you build complex filters for construct searches. It also offers predefined filters that you can use to search for dead code, hard-coded constants, nested conditionals, file and screen reads and writes, program calls, SQL ports, and more.

Certain performance-intensive searches, with criteria such as Contains or Is Nested In, may be restricted to the master user.

You typically use the batch advanced search facility, embedded in the Clipper pane, to find constructs in all files of a given type in your project. But you can also use standalone advanced search to find constructs in a single file.

The Change Analyzer tab opens a scoped version of the Advanced Search facility for Change Analyzer. For Change Analyzer usage, see Analyzing Projects in the workbench documentation set.
  • Defining a Search Filter
    Provides a sample use of the Advanced Search facility.
  • Executing Advanced Searches
    Describes how to execute an advanced search.
  • Working with Advanced Search Criteria
    Introduces tasks you perform with advanced search criteria.
Related information
Using the Simple Search Facility


Defining a Search Filter

Provides a sample use of the Advanced Search facility.

The Advanced Search facility uses the attributes and relationships of a construct to define the conditions you set in your search for the construct. As an example of how the facility works, let's look at how you might define a search filter for the conditions a program uses to validate the variable EIBRESP.

STEPS:
  1. Select the file you want to search in the Objects pane, then choose Edit > Find. The Search window opens.
    Skip this step if you are using Clipper to perform a batch search.
  2. Click the General tab.

    Search Window (General Tab)

  3. In the General tab, select a folder for the new criterion, then click the * button on the tool bar. The New Criterion dialog opens. Enter Field Validation in the text field and click OK. HyperView creates the Field Validation criterion in the selected folder.

    Search Window (After Step )

  4. Click the here link in the righthand pane of the Search window. The Select Construct Types window opens.

    Select Construct Types Window

  5. Select Condition in the list of constructs in the lefthand pane. In the righthand pane, review the definition of a condition in the parse tree metamodel, then click OK. HyperView adds the condition construct to the filter definition in the righthand pane of the Search window:
    Find All Condition
  6. Click the All link. The Condition window opens.

    Condition Window (After Editing)

  7. In the Condition window, choose:
    • Relationship in the Applies to drop-down.
    • Is Nested In in the Relationship Type list box.
    • If Statement in the Entity Type list box.
    Click OK. HyperView adds the relationship to the filter definition in the righthand pane of the Search window:
    Find Condition
which is nested in any IF statement
  8. Click the any link. The Condition window opens. In the Condition window, choose:
    • Relationship in the Applies to drop-down.
    • Contains in the Relationship Type list box.
    • Perform in the Entity Type list box.
    Click OK. HyperView adds the relationship to the filter definition in the righthand pane of the Search window:
    Find Condition
which is nested in IF statement which contains any
Perform
  9. Click the any link. The Condition window opens. In the Condition window, choose:
    • Attribute in the Applies to drop-down.
    • Caption in the Name list box.
    • Like in the Operations drop-down.
    Enter *ERROR* in the Values field and click OK. HyperView adds the attribute to the filter definition in the righthand pane of the Search window:
    Find Condition
which is nested in IF statement which contains
Perform such that Caption Like "*ERROR*"
    Except for the # symbol, you can use wildcard patterns allowed in LIKE statements by Visual Basic for Applications (VBA). Consult the Model Reference pane for attribute values.
  10. Click the is nested in link. In the pop-up menu, choose And. The Condition window opens. In the Condition window, choose:
    • Relationship in the Applies to drop-down.
    • Contains in the Relationship Type list box.
    • Variable in the Entity Type list box.
    Click OK. HyperView adds the relationship to the filter definition in the righthand pane of the Search window:
    Find Condition
which is nested in IF statement which contains
Perform such that Caption Like "*ERROR*"
and
which contains any Variable
  11. Click theany link. The Condition window opens. In the Condition window, choose:
    • Attribute in the Applies to drop-down.
    • Caption in the Name list box.
    • Like in the Operations drop-down.
    Enter *EIB* in the Values field and click OK. HyperView adds the attribute to the filter definition in the righthand pane of the Search window:
    Find Condition
which is nested in IF statement which contains
Perform such that Caption Like "*ERROR*"
and
which contains Variable such that Caption Like "*EIB*"
    To edit an element in the filter definition, select its link and choose Edit in the pop-up menu. To delete an element from the filter definition, select its link and choose Delete in the pop-up menu.
  12. Enter a description of the filter definition in the Description pane.
  13. Click the * button on the tool bar to save the filter definition.
Parent topic: Performing Advanced Searches
Related tasks
Searching for Seed Fields in Change Analyzer
Related information
Using the Simple Search Facility
Getting Started in Clipper
Executing Advanced Searches
Using the Objects Pane


Executing Advanced Searches

Describes how to execute an advanced search.

You can execute an advanced search in standalone mode, against the file or construct selected in the Source or Context pane, or in batch mode, in the embedded search pane in Clipper.

STEPS:
  1. In the Search In drop-down on the tool bar, choose:
    • Source file name with all included files if you want to execute the search against the selected source file and any included files.
    • Source file name only if you want to execute the search against the selected source file only.
    • Selected Construct - Construct if you want to execute the search against the construct selected in the Source or Context panes.
  2. Choose the criterion for the search you want to execute from the list of criteria in the lefthand pane.
  3. Select Case Sensitive Search if you want the search to match case.
  4. Select Find All Constructs. HyperView displays a dialog box with the results of the search. Click OK. The dialog and Search window are dismissed. HyperView displays the results in a list named Last Search Results in the Internal category in Clipper.
Parent topic: Performing Advanced Searches
Related information
Defining a Search Filter


Working with Advanced Search Criteria

Introduces tasks you perform with advanced search criteria.

This section describes common tasks you perform with advanced search criteria.

  • Creating a Search Criterion
    Describes how to create a search criterion.
  • Editing a Search Criterion
    Describes how to edit a search criterion.
  • Copying a Search Criterion
    Describes how to copy a search criterion.
  • Saving a Search Criterion
    Describes how to save a search criterion.
  • Deleting a Search Criterion
    Describes how to delete a search criterion.
  • Creating a Folder for Search Criteria
    Describes how to create a folder for search criteria.
  • Saving a Search Criterion as HTML
    Describes how to save a search criterion as HTML.
  • Exporting and Importing a Search Criterion
    Describes how to export and import a search criterion.
Parent topic: Performing Advanced Searches
Related tasks
Executing Clipper Searches


Creating a Search Criterion

Describes how to create a search criterion.

To create a search criterion, select the folder for the new criterion in the General tab, then click the * button on the tool bar. The New Criterion dialog opens. Enter the name of the criterion in the text field and click OK.

Parent topic: Working with Advanced Search Criteria


Editing a Search Criterion

Describes how to edit a search criterion.

To edit a search criterion, select the criterion, then select the link for the element you want to change in the filter definition. Choose Edit in the pop-up menu to edit the element, or Delete to delete the element.

Tip: To restore the original definition of a predefined search criterion, select the criterion and click the * button on the tool bar.
Parent topic: Working with Advanced Search Criteria


Copying a Search Criterion

Describes how to copy a search criterion.

To copy a search criterion, select the criterion and click the * button on the tool bar. The New Criterion dialog opens. Enter the name of the new criterion in the text field and click OK.

Parent topic: Working with Advanced Search Criteria


Saving a Search Criterion

Describes how to save a search criterion.

To save a search criterion, select the criterion and click the * button on the tool bar. The criterion is available to every project in the workspace.

Parent topic: Working with Advanced Search Criteria


Deleting a Search Criterion

Describes how to delete a search criterion.

To delete a search criterion, select the criterion and click the * button on the tool bar. You are prompted to confirm the deletion. Click OK.

You cannot delete a predefined search criterion.
Parent topic: Working with Advanced Search Criteria


Creating a Folder for Search Criteria

Describes how to create a folder for search criteria.

To create a folder for search criteria, click the * button on the tool bar. The New Folder dialog opens. Enter the name of the new folder in the text field and click OK. The new folder appears in alphabetical order in the tree in the lefthand pane of the window. Drag-and-drop search criteria to move them to the folder. You can create folders within folders.

To copy a folder and all its contents, select the folder and click the * button on the tool bar. The New Folder dialog opens. In the text field, enter text to be prepended to the folder name and to the names of each of its subfolders and search criteria, and click OK.

To modify a folder name, click in the name area for the folder to make the name editable, enter the new name, and press Enter. To delete a folder, select the folder and click the * button on the tool bar. You are prompted to confirm the deletion. Click OK.

Parent topic: Working with Advanced Search Criteria


Saving a Search Criterion as HTML

Describes how to save a search criterion as HTML.

To save a search criterion in an HTML file, select the criterion and click the * button on the tool bar. The Save Criteria dialog opens, where you can specify the name and folder for the HTML file.

Parent topic: Working with Advanced Search Criteria


Exporting and Importing a Search Criterion

Describes how to export and import a search criterion.

To export a search criterion to an XML file, select the criterion and click the * button on the tool bar. The Export Criteria dialog opens, where you can specify the name and folder for the XML file.

To import a search criterion, click the * button on the tool bar. The Import Criteria dialog opens, where you can select the criterion you want to import.

Parent topic: Working with Advanced Search Criteria


Staging Program Analysis with Clipper

Introduces the Clipper pane.

Use the Clipper pane to stage the results of a batch search as input for subsequent tasks: viewing source and context, colorizing sliced code, extracting business rules, and the like. A system analyst, for example, might use Clipper to create a list of programs impacted by a change request, then create a project that contains only the source files for those programs.

Clipper searches are executed against the current project. You can also execute searches against the results of a previous search.

Certain performance-intensive Clipper searches, with criteria such as Contains or Is Nested In, may be restricted to the master user.
  • Getting Started in Clipper
    Provides a sample use of Clipper.
  • Understanding the Clipper Pane
    Provides an overview of the Clipper pane.
  • Searching for Similar Constructs in Clipper
    Describes how to search for similar constructs in the Clipper pane.
  • Extracting Business Rules in Clipper
    Introduces business rule extraction in the Clipper pane.
  • Generating an Impact Subtree Report in Clipper
    Describes how to generate an impact subtree report in Clipper.
  • Marking and Colorizing Constructs in Clipper
    Describes how to mark and colorize constructs in Clipper.
  • Creating Projects in Clipper
    Describes how to create a project based on the results of a Clipper analysis.
  • Generating Clipper Reports
    Describes how to generate Clipper reports.
Related information
Getting Started in Clipper


Getting Started in Clipper

Provides a sample use of Clipper.

This section describes a sample use of Clipper that should help you get oriented in the tool. Assume that you want to create business rules for segments of code that write to a file.

STEPS:
  1. In the Clipper pane, click the Top view link. The Top view opens.
  2. Double-click the Rule Finder category. The Rule Finder view opens.

    Clipper Pane (Rule Finder View)

  3. Click the New List Button button on the tool bar. The New List dialog opens. Enter File Writes and click OK. An empty list named File Writes is added to the Rule Finder view.

    Clipper Pane (Rule Finder View with New List)

  4. Select the File Writes list, then click the Down Arrow Icon button next to the Search Button button on the tool bar. In the drop-down, choose the type of object you want to execute the search against, Cobol File in our example. The Search window opens.

    Search Window for Clipper

  5. In the Search In drop-down, select All Sources.
  6. Expand the Data Ports folder in the lefthand pane, then expand the Files folder. Select the predefined File Writes criterion and click Find All Constructs. HyperView displays a dialog box with the results of the search operation. Click OK. The Search window is dismissed and the results of the search are displayed in a Clipper view named for the File Writes list.
    Modify the predefined search criterion or create your own search criterion as you do in the Advanced Search facility.

    Clipper Pane (File Writes View)

    Tip: To add a construct manually to the list for a source file, select the source file in the File Writes view, select the construct in the Source or Context panes, then click the New List Button button on the tool bar.
  7. Click the Down Arrow Icon button next to the Run Button button on the tool bar and choose Create Rules in the drop-down menu. The Select Method dialog opens.

    Select Method Dialog

  8. In the Select Method dialog, select impact-based rules for variables in the list or templated rules into a specified rule set, then follow the instructions for generating business rules.
Parent topic: Staging Program Analysis with Clipper
Related tasks
Executing Clipper Searches
Related information
Defining a Search Filter
Extracting Business Rules in Clipper


Understanding the Clipper Pane

Provides an overview of the Clipper pane.

HyperView lists offer convenient ways to navigate program code and record the results of program analyses. Use the hierarchy of views in the Clipper pane to display HyperView lists and perform other list-related tasks:

  • The Top view displays the folders, or categories, for lists.
  • The Category view displays the lists in the selected category.
  • The List view displays source files with non-zero counts in the selected list.
  • The File view displays each construct in the list for the selected source file. Click a construct in the list to navigate to it in other HyperView panes.

Each view gives you access to the next-level view in the hierarchy. Click the label for a view to navigate to it. Double-click an item in the view to drill down to the next view in the hierarchy. Click the Parent Button button on the tool bar to navigate to the parent of the current view.

  • Working with Categories
    Describes how to work with categories in the Clipper pane.
  • Working with Lists
    Introduces list usage in the Clipper pane.
Parent topic: Staging Program Analysis with Clipper


Working with Categories

Describes how to work with categories in the Clipper pane.

The Top view of the Clipper pane displays the categories for HyperView lists. Categories are displayed only for lists you can create for the source file type selected in the Objects pane.

You can use predefined categories or create your own. All predefined categories are shared. Use the General and Internal categories for unenumerated tasks.

HyperView puts the results of standalone advanced searches in a predefined list called Last Search Results in the Internal categories.

To create a category, select the parent category and choose Clipper > Add. The New category dialog opens, where you can specify the new category name. A list with the category name is automatically created in the category. To edit the category name, click the name and type over it in the text box.

By default, user-defined categories are not shared. To share a user-defined category, select it and click the Share Button button on the tool bar. A [image] symbol indicates that the category is shared. Click the Share Button button again to turn sharing off.

Sharing a user-defined category automatically makes its parent categories shared. Unsharing a user-defined category automatically makes its children unshared.
Parent topic: Understanding the Clipper Pane


Working with Lists

Introduces list usage in the Clipper pane.

The Category view of the Clipper pane displays the lists in the selected category. You can use predefined lists or create your own. Use a Clipper search to populate lists.

  • Creating a List
    Describes how to create a list in the Clipper pane.
  • Deleting a List
    Describes how to delete a list in the Clipper pane.
  • Copying a List
    Describes how to copy a list in the Clipper pane.
  • Sharing a List
    Describes how to share a list in the Clipper pane.
  • Adding a Construct to a List Manually
    Describes how to add a construct to a list in the Clipper pane.
  • Deleting a Construct from a List
    Describes how to delete a construct from a list in the Clipper pane.
Parent topic: Understanding the Clipper Pane
Related tasks
Executing Clipper Searches


Creating a List

Describes how to create a list in the Clipper pane.

To create a list, double-click the category for the list in the Top view and choose Clipper > Add. The New List dialog opens, where you can specify the name of the new list.

Parent topic: Working with Lists


Deleting a List

Describes how to delete a list in the Clipper pane.

To delete a list, select it and click the Delete Button button on the tool bar. You are prompted to confirm the deletion. Click OK.

Parent topic: Working with Lists


Copying a List

Describes how to copy a list in the Clipper pane.

To copy a list, select it and click the Copy List Button button on the tool bar. In the Top view, select the category you want to copy the list into and click the Paste List Button button. The Copy List dialog opens, where you can enter the name of the new list. You can copy a list into the same category.

Parent topic: Working with Lists


Sharing a List

Describes how to share a list in the Clipper pane.

By default, lists are not shared. To share a list, select it and click the

Share Button button on the tool bar. A [image] symbol indicates that the list is shared. Click the Share Button button again to turn sharing off.

Parent topic: Working with Lists


Adding a Construct to a List Manually

Describes how to add a construct to a list in the Clipper pane.

To add a construct to a list, select a source file in the List view, then choose a construct in the Source or Context panes. Click the New LIst Button button on the tool bar to add the construct to the list of constructs for the selected file.

Parent topic: Working with Lists


Deleting a Construct from a List

Describes how to delete a construct from a list in the Clipper pane.

To delete a construct from a list, select the construct in the File view and click the Delete Button button on the tool bar. You are prompted to confirm the deletion. Click OK.

Parent topic: Working with Lists


Executing Clipper Searches

Describes how to execute a Clipper search.

Use a Clipper search to generate Clipper lists. You can modify the predefined search criteria or create your own criteria as needed. You can use a construct list itself to narrow the search.

STEPS:
  1. Select a list, then click the Down Arrow Button button next to the Search Button button on the tool bar. In the drop-down, choose the type of object you want to execute the search against. The Search window opens.
  2. In the Search In drop-down, select:
    • All Sources to execute the search against all the sources of the specified type in the project.
    • A list if you want to execute the search only against sources of the specified type with non-zero counts in the selected list. If you select Rule Finder. File Writes, for example, the search will be executed only against sources of the specified type with non-zero counts in the File Writes list in the Rule Finder folder.
  3. Choose the criterion for the search you want to execute from the list of criteria in the lefthand pane. Modify the predefined criteria or create your own criteria as needed.
  4. Select Accumulate Search Results if you want the results of the search to be added to the results of the previous search. Otherwise, the new results overwrite the previous results.
  5. Select:
    • Find All Constructs if you want HyperView to create for each searched file a list of all the constructs found by the search.
    • List Sources Only if you want HyperView simply to indicate for each searched file (with the notation >0) whether the construct of interest exists in the file.
    HyperView displays a dialog box with the results of the search operation. Click OK. The Search window is dismissed and the results of the search are displayed in the List view.
Related information
Working with Advanced Search Criteria
Using Construct Lists to Narrow a Clipper Search
Searching for Similar Constructs in Clipper


Using Construct Lists to Narrow a Clipper Search

Describes how to use a construct list to narrow a Clipper search.

Once you have generated a construct list in Clipper, you can use the list itself as a condition of a search. That is, you can use the search results to refine a subsequent search.

Suppose you have performed a Clipper search for duplicate paragraphs in Cobol programs, storing the results in a list called Matched Paragraphs in the General folder. The next step might be to search for all PERFORM statements that reference the duplicate paragraphs. The example below shows how you might use a Clipper list of duplicate paragraphs as a condition of the search.

STEPS:
  1. Select a list, then click the Down Arrow Button button next to the Search Button button on the tool bar. In the drop-down, choose the type of object you want to execute the search against. The Search window opens.
  2. Select a folder for the new criterion in the General tab, then click the New Criterion Button button on the tool bar. The New Criterion dialog opens. Enter Perform Duplicates in the text field and click OK. HyperView creates the Perform Duplicates criterion in the selected folder.
  3. Click the here link in the righthand pane of the Search window. The Select Construct Types window opens.
  4. Select Perform in the list of constructs in the lefthand pane, then click OK. HyperView adds the condition construct to the filter definition in the righthand pane of the Search window:
    Find All Perform
  5. Click the All link. The Condition window opens. Choose:
    • Relationship in the Applies to drop-down.
    • Called Paragraph in the Relationship Type list box.
  6. Click OK. HyperView adds the relationship to the filter definition in the righthand pane of the Search window:
    Find Perform
which has related any Paragraph (as Called Paragraph)
  7. Click the any link. The Condition window opens. Choose:
    • List in the Applies to drop-down.
    • General.Matched Paragraphs in the Name drop-down.
    You can filter out list constructs by selecting Does not belong to the list in the Condition window.
  8. Click OK. HyperView adds the list to the filter definition in the righthand pane of the Search window:
    Find Perform
which has related Paragraph (as Called Paragraph)
which is in list
    General.Matched Paragraphs
  9. Execute the search. HyperView displays a dialog box with the results of the search operation. Click OK. The Search window is dismissed and the results of the search are displayed in the List view.
    Tip: As a practical matter, you would probably also want to search for GO TO statements that reference the duplicate paragraphs. The results of this search you could simply add to the results of the search for PERFORM statements by using the Accumulate Search Results button.
Related tasks
Executing Clipper Searches


Searching for Similar Constructs in Clipper

Describes how to search for similar constructs in the Clipper pane.

To search for similar constructs, select a construct in the Source or Context panes, then select a list. Click the Select Similar Button button on the tool bar. The New Criterion dialog opens. Enter a criterion name or accept the default.

The Search window opens with a predefined search criterion that will generate a list of constructs similar to the selected construct. The new criterion is added to the General tab of the advanced search facility. Edit the criterion if necessary, then execute the search.

Parent topic: Staging Program Analysis with Clipper
Related tasks
Executing Clipper Searches


Extracting Business Rules in Clipper

Introduces business rule extraction in the Clipper pane.

Clipper offers two methods for extracting business rules for multiple constructs. You can:

  • Autodetect each code segment that impacts a listed construct. Clipper creates a rule for each autodetected segment. When you choose this option, you edit rule attributes in batch mode in the Rules pane.
  • Generate rules for listed constructs in a specified rule set. When you choose this option, you batch process rule attributes in the generation step.
Tip: As long as the Rules pane is open, you can generate a rule for a single construct by selecting the construct in the File view and choosing Rule > Create Rule.
  • Autodetecting Business Rules in Clipper
    Describes how to autodetect business rules in Clipper.
  • Generating Business Rules in a Specified Rule Set
    Describes how use Clipper to generate business rules in a specified rule set.
Parent topic: Staging Program Analysis with Clipper
Related information
Autodetecting Business Rules


Autodetecting Business Rules in Clipper

Describes how to autodetect business rules in Clipper.

The backward autodetect method traces the flow of data from a variable to its source, assigning each statement in the flow to a new rule. Follow the instructions below to backward-autodetect code segments that impact constructs in a Clipper list. Clipper creates a rule for each autodetected segment. The constructs must be variables.

STEPS:
  1. Select a list in the Rule Finder category, then click the Down Arrow Button button next to the Run Button button on the tool bar and choose Create Rules in the drop-down menu. The Select Method dialog opens.
  2. In the Select Method dialog, select impact-based rules for variables in the list and click OK.
  3. If the autodetect trace detects conditional logic, the Autodetected Condition Values dialog prompts you to "prune out" logic branches not of interest to you. If you set a condition to True, for example, the False branch (assuming one exists) is not explored by the trace. When you are satisfied with your choices in the Autodetected Condition Values dialog, click OK.
  4. The autodetect method creates a rule for each code segment that impacts a listed construct. HyperView displays an informational message that tells you how many rules it created. Click OK.
Parent topic: Extracting Business Rules in Clipper
Related tasks
Invoking the Backward Autodetect Method
Related information
Pruning Autodetect Results


Generating Business Rules in a Specified Rule Set

Describes how use Clipper to generate business rules in a specified rule set.

Follow the instructions below to generate rules in a specified rule set with predefined attributes. Clipper creates a rule for each construct in the Clipper list.

STEPS:
  1. Select a list in the Rule Finder category, then click the Down Arrow Button button next to the Run Button button on the tool bar and choose Create Rules in the drop-down menu. The Select Method dialog opens.
  2. In the Select Method dialog, select templated rules into a specified rule set and click OK. The Create Rule Set window opens.
  3. In the Business Function drop-down, select the business function for the rule set. The current business function is displayed. To create a new business function, click New.
  4. In the Name field, enter the name of the rule set for the rules you want to create and click OK. The Create Rules From List window opens.

    Create Rules From List Window

  5. In the Name Template combo box, select a template for the rule name attribute from the drop-down, or enter a template manually. Templates derive from the list in the Rule Defaults tab in the Project options for Business Rule Manager. If you enter a template manually in Clipper, the new template is added to the list.
  6. On the Business Description Template and Technical Description Template tabs, enter templates for the description and business description attributes, respectively.
  7. On the New Attributes tab, specify the value for each attribute you want to set in the selected rules.
  8. When you are satisfied with your entries in the Create Rules From List window, click OK. HyperView displays an informational message that tells you how many rules it created. Click OK.
Parent topic: Extracting Business Rules in Clipper
Related tasks
Setting Options on the Rule Defaults Tab
Related information
How Business Rules Are Organized
Creating Business Functions
Understanding Business Rule Attributes
Setting Options on the Rule Defaults Tab


Generating an Impact Subtree Report in Clipper

Describes how to generate an impact subtree report in Clipper.

To generate an impact subtree report for all the constructs in a list, select the list in the Impact Report category, then click the Down Arrow Button button next to the Run Button button on the tool bar and choose Create Impact SubTree Report in the drop-down menu. A Save As dialog opens, where you can specify the name, location, and file type of the report.

Parent topic: Staging Program Analysis with Clipper
Related information
Generating a Subtree Report


Marking and Colorizing Constructs in Clipper

Describes how to mark and colorize constructs in Clipper.

The Components pane offers a variety of advanced algorithms for slicing logic from legacy source: all the code you need for a computation, for example, or the code you need to "specialize" a program based on the value of a variable. You can create a self-contained program, called a component, from the sliced code or simply generate a HyperView list of sliced constructs for further analysis. You can mark and colorize the list constructs in the HyperView Source pane.

Both the component generation and list functions are supported in the full version of the Components pane available to users of Application Architect. The list function only is supported in the restricted version of the Components pane, called Logic Analyzer, available to users of Application Analyzer.

To mark and colorize list constructs in the Source pane, select the list and click the Check Button button on the tool bar. To mark and colorize sliced constructs in a single file, select the file in the List view and click the Check Button button. To mark and colorize a single construct, select it in the File view and click the Check Button button. Click the Check Button button again to turn off marking and colorizing.

For Logic Analyzer, sliced data declarations are not marked and colorized.
Parent topic: Staging Program Analysis with Clipper


Creating Projects in Clipper

Describes how to create a project based on the results of a Clipper analysis.

You can create a project based on the results of a Clipper analysis.

STEPS:
  1. Select a list, then click the Down Arrow Button button next to the Run Button button on the tool bar and choose Create Project in the drop-down menu. The New Project dialog opens. Enter the name of the new project in the text field and click OK.
  2. The Change Magnitude window opens. Select Automatically calculate change magnitude if you want Clipper to set change magnitudes for the listed source files based on the ranges specified in the fields below the check box. Modify the ranges as needed. The Clipper settings will override any existing change magnitudes for the files. If you want Cobol source files with 6 to 10 constructs to have a Large change magnitude, for example, set the range for Medium to less than 6 and the range for Large to less than 11. When you are satisfied with your choices, click OK.
  3. When you are satisfied with your choices, click OK.
Parent topic: Staging Program Analysis with Clipper
Related information
Specifying the Change Magnitude for a Source File


Generating Clipper Reports

Describes how to generate Clipper reports.

Use Clipper reports to show the distribution of list instances across a project and view the details for each instance. The following reports are available:

  • For each list in the selected category, the Metrics Report shows the number of list items in each program. To generate a Metrics Report, select a category in the Top view, then click the Down Arrow Button button next to the Report Button button on the tool bar and choose Metrics report in the drop-down menu.
  • For each source file in the selected list, the Details Report shows the constructs in the list, their type, and their location in the file. You can customize the report to include any HyperView attribute related to the constructs. To generate a Details Report, select a list in the Folder view, then click the Down Arrow Button button next to the Report Button button on the tool bar and choose Detailed report in the drop-down menu. In the Select Attributes dialog, choose the construct attributes you want to view in the report.
Parent topic: Staging Program Analysis with Clipper


Analyzing Impact Traces

Introduces the Impact pane.

An impact trace describes the flow of data within and between programs in an application: how data items exchange values, use each other in computations, and so forth. If you are extracting business rules, for example, you might want to view an impact trace to make sure that a segment encapsulates all of the business logic for a candidate rule. Or you might want to use a scoped trace to help locate candidates that exhibit a particular type of relationship.

You can analyze the entire tree for a trace, or a consolidated tree that displays only the ports and leaf nodes traversed in the trace. Options let you filter out unwanted relationships or variables. You can save trace results and restore them in a later session.

Projects must have been verified with the Enable Impact Report and Enable Data Element Flow options set in the Project Verification options.
  • Generating an Impact Trace
    Describes how to generate an impact trace.
  • Understanding the Hierarchical View
    Describes the hierarchical view of the Impact pane.
  • Understanding the Diagram View
    Describes the diagram view of the Impact pane.
  • Data Flow Relationships
    Describes the intraprogram and interprogram relationships detected by the data flow analysis tools.
  • Setting Impact Pane User Preferences
    Describes how to set Impact Pane User Preferences.
  • Setting Impact Pane Project Options: Processing Tab
    Describes how to set Impact Pane Project Options on the Processing tab.
  • Setting Impact Pane Project Options: Relationships Tab
    Describes how to set Impact Pane Project Options on the Relationships tab.
  • Setting Impact Pane Project Options: Impact Reports Tab
    Describes how to set Impact Pane Project Options on the Impact Reports tab.
  • Exporting and Importing an Impact Trace
    Describes how to export and import an impact trace.
  • Generating a Subtree Report
    Describes how to generate a Subtree Report.
  • Generating a Pane Report
    Describes how to generate a Pane Report.
  • Generating an Affected Code Report (Cobol and APS Only)
    Describes how to generate an Affected Code Report.
Related tasks
Setting Project Verification Options
Generating an Impact Trace


Generating an Impact Trace

Describes how to generate an impact trace.

The HyperView Impact pane displays a hierarchical view and diagram of an impact trace. Both views show the flow of data to or from a startup item.

STEPS:
  1. In the HyperView Source or Context pane, select the construct that contains the startup item or items and choose View > Impact. The Impact pane opens.
  2. Choose:
    • Impact > Backward Analysis to view the flow of data into the startup items.
    • Impact > Forward Analysis to view to view the flow of data out of the startup items.
    Once a trace is generated, click the * or * buttons on the tool bar to reverse the direction of the trace.
  3. Choose:
    • Impact > Detailed Analysis to generate the entire tree for a trace.
    • Impact > Consolidated Analysis to generate a consolidated tree that displays only the ports and leaf nodes traversed in the trace. Only the subtrees for ports are displayed.
    HyperView displays the trace results. Click the plus sign (+) next to an item to expand its hierarchy. Click the minus sign (-) to collapse the hierarchy.

    Impact Pane with Consolidated Analysis

  4. Click the Diagrammatic View tab to display the impact trace in a diagram.

    Impact Pane with Trace Diagram

  5. Select an item in the trace and repeat the procedure to start a trace for that item. The new trace is displayed below the previous trace.
  6. To delete a trace, select its startup item and choose Impact > Remove Root. To clear the pane, choose Impact > Remove All.
Parent topic: Analyzing Impact Traces
Related information
Understanding the Hierarchical View
Understanding the Diagram View


Understanding the Hierarchical View

Describes the hierarchical view of the Impact pane.

In the hierarchical view, each line in the trace contains a symbol indicating the type of relationship the affected data item has with the previous item and a label showing the details of the relationship. Options give you complete control over the information displayed in the label. The table shows the meaning of the typefaces used in the labels.
Typeface | Meaning
bold | An item that has not been visited by the trace.
gray | A repeated item.
blue | A repeated item at a different location.
bold blue | A repeated item at a different location that has not been visited by the trace.
red | An item filtered out of the trace.
Parent topic: Analyzing Impact Traces
Related tasks
Generating an Impact Trace
Related information
Data Flow Relationships


Understanding the Diagram View

Describes the diagram view of the Impact pane.

In the diagram view, each box in the trace contains the data item name and the name of the program it belongs to (unless the parent item belongs to the same program). Relationship lines contain the name of the relationship. Options let you display the memory offset and size of a data item. Place your cursor over a variable for a moment to display the memory offset and size in a tool tip. The table shows the meaning of the colors used in the diagram.

Color | Meaning
red outline | Startup item.
blue background | An item that has not been visited by the trace.
black outline | An item filtered out of the trace.
Parent topic: Analyzing Impact Traces
Related tasks
Generating an Impact Trace
Related information
Common Diagramming Features


Setting Impact Pane User Preferences

Describes how to set Impact Pane User Preferences.

Use the HyperView > Impact tab of the User Preferences window to control the level of detail provided in the label for each relationship type in the trace: whether to show or hide the locations of variables in source, their memory offsets and sizes, and so forth. You can also use these options to specify the level of detail to include in an Impact Subtree Report.
STEPS:
  1. Choose Tools > User Preferences. The User Preferences window opens. Click the HyperView > Impact tab.
  2. Click the tab for the type of object whose relationship labels and report attributes you want to specify.
  3. In the Root field, edit the template for the startup item label. Items preceded by a backslash are replaced with attributes reported in the Subtree Report. You can modify unescaped text as necessary.
  4. In the Relationship pane, select a relationship, then edit the template for its label in the Backward Analysis or Forward Analysis fields as appropriate. Items preceded by a backslash are replaced with attributes reported in the Subtree Report. You can modify unescaped text as necessary.
  5. Click More in the Report Attributes pane. In the Report Attributes dialog, select the attributes you want to include in the Subtree Report.
  6. Choose Display Business Names if you want to display business names in the impact trace rather than original identifiers.
Parent topic: Analyzing Impact Traces
Related information
Generating a Subtree Report
Data Flow Relationships


Setting Impact Pane Project Options: Processing Tab

Describes how to set Impact Pane Project Options on the Processing tab.

Use the Impact > Processing tab of the Project Options window to specify the variables to filter out of the trace, whether nested data items or redefines are treated as startup items, and whether recursive impacts or controlled dependency relationships are included in the trace.
STEPS:
  1. Choose Tools > Project Options. The Project Options window opens. Click the Impact > Processing tab.
  2. Choose any combination of:
    • Add to Roots Data Item Subitems if you want the trace to include, as startup items, data items in nested declarations of the startup items.
    • Add to Roots Data Item Redefines if you want the trace to include, as startup items, data items that redefine the selected startup items.
    • Process Immediate Fields Individually if you want the trace to treat each subitem of the startup item as a root. The startup item is not included in the trace.
    • Self-Dependencies if you want the trace to include recursive impacts on data items.
    • Controlled Conditions if you want the trace to include controlled dependency relationships for data items, such as that between A and B in IF ... A THEN MOVE... TO B. In this example, B depends on A, since B is assigned a value under the control of a condition that depends on A. Choose:
      • Include Implicit Conditions if you want the trace to include relationships derived from implicit control conditions. In the following example, statement (1) is explicitly controlled by the condition A > 0 because it is nested in the IF statement. Statement (2) is implicitly controlled by the condition because, on the one hand, there is no surrounding IF statement but, on the other hand, control may not reach the statement if the condition is not satisfied:
        IF A > 0 THEN
MOVE A TO B  (1)
ELSE
GOBACK.
MOVE B TO C.   (2)
      • Include Calculation of Conditions if you want the trace to show how the controlling data item is calculated.
  3. In the Variable Name Filters pane, select the patterns that match the names of the variables you want to filter out of the impact trace. Recognized patterns are listed in the pane. Add patterns as necessary. You can use wildcard patterns allowed in LIKE statements by Visual Basic for Applications (VBA).
Parent topic: Analyzing Impact Traces
Related information
Adding a Selectable Item
Using Wildcard Patterns in Searches


Setting Impact Pane Project Options: Relationships Tab

Describes how to set Impact Pane Project Options on the Relationships tab.

Use the Impact > Relationships tab of the Project Options window to specify the intraprogram and interprogram data flow relationships to include in the trace. The table below describes the intraprogram and interprogram relationships detected by the data flow analysis tools.
STEPS:
  1. Choose Tools > Project Options. The Project Options window opens. Click the Impact > Relationships tab.
  2. In the Intraprogram pane, place a check mark next to each intraprogram data flow relationship you want the trace to include.
  3. In the Interprogram pane, place a check mark next to each interprogram data flow relationship you want the trace to include.
  4. Remove the check mark next to Show All Used if you want the trace to include only used nodes that are necessary to its calculation.
    Relationship | Definition | Type | Icon | Description
    calls | N/A | interprogram | N/A | A parameter passed in a call to another program.
    cast | MOVE A TO B with data conversion | intraprogram | A data item moved to a data item of a different type.
    common area transitions | N/A | interprogram | N/A | For Unisys 2200 Cobol, a common-storage data area item passed in a call to another program. Perform Unisys Common-Storage Area Analysis must be set in the project verification options.
    comp | STRING A ... INTO B | intraprogram | An arbitrary computation. The result is produced by applying complex rules to the argument, such as STRING.
    comp+ | ADD A TO B | intraprogram | An addition-like operation: ADD, SUBTRACT, or corresponding parts of COMPUTE.
    comp* | MULTIPLY A BY B | intraprogram | A multiplication-like operation: MULTIPLY, DIVIDE, or corresponding parts of COMPUTE.
    comp@ | MOVE ARRAY (IDX) TO A | intraprogram | An operation with array elements.
    cond | IF A = B ... | intraprogram | Comparison of data items with a symmetric relationship.
    cond* | IF A * X = B ... | intraprogram | Comparison of a multiple of a data item with another data item.
    const cond | IF A = 1 ... | intraprogram | Comparison of a data item with a constant.
    const.move | MOVE 1 TO B | intraprogram | A constant moved into a data item.
    const.comp | ADD 1 TO B | intraprogram | An arithmetic operation with constants.
    const.init | 03 A ... VALUE 1 | intraprogram | A data item initialized by a constant.
    DMS records | N/A | interprogram | N/A | For Unisys 2200 Cobol, data communication via Unisys DMS database records.
    files | N/A | interprogram | N/A | Data communication via files. Traced only when corresponding JCL, ECL, FCT, or CSD files are verified.
    files in jobs | N/A | interprogram | N/A | Data flow in JCL datasets when files is selected.
    input port | N/A | intraprogram | A data item in which data is received.
    move | MOVE A TO B | intraprogram | A data item moved to a data item of the same type.
    network records | N/A | interprogram | N/A | For Unisys 2200 Cobol, data communication via network records.
    output port | N/A | intraprogram | A data item from which data is sent.
    screens | N/A | interprogram | N/A | Data sent to a screen by one program and received in a screen by another.
    screen definitions | N/A | interprogram | N/A | Data flow in screen fields when screens is selected.
    start | N/A | intraprogram | The startup item in an Impact pane consolidated analysis.
    used | MOVE ... TO A ... MOVE A TO ... | intraprogram | A value assigned in a statement used as an argument in another statement.
Parent topic: Analyzing Impact Traces


Setting Impact Pane Project Options: Impact Reports Tab

Describes how to set Impact Pane Project Options on the Impact Reports tab.

Use the Impact > Impact Reports tab of the Project Options window to exclude repeated items from the Impact Subtree Report and to limit the depth of the trace in all reports.
STEPS:
  1. Choose Tools > Project Options. The Project Options window opens. Click the Impact > Impact Reports tab.
  2. Select Output duplicates in the SubTree report if you want to include repeated items in the Impact Subtree Report.
  3. Select Limit Impact Depth if you want to limit the depth of the trace reported, then specify the maximum depth of the trace in the Max Depth combo box.
Parent topic: Analyzing Impact Traces


Exporting and Importing an Impact Trace

Describes how to export and import an impact trace.

To export an impact trace in XML format, select its startup item and click the * button on the tool bar. A Save As dialog opens, where you can specify the name and location of the impact trace.

To import a saved impact trace, click the * button on the tool bar. An Open dialog appears, where you can select the trace to import.

Parent topic: Analyzing Impact Traces


Generating a Subtree Report

Describes how to generate a Subtree Report.

A Subtree Report shows the trace for a subtree in XML format or in a database. To generate a Subtree Report, click the * button next to the * button on the tool bar and choose SubTree Report in the drop-down menu. A Save As dialog opens, where you can specify the name, location, and file type of the report.

The following table shows the columns displayed in the database report format. You can control the level of detail displayed in the report in the Impact Pane User Preferences.

The attributes listed in the table are a superset of the attributes listed in the Impact Pane User Preferences. Database IDs refer to IDs generated for the database report format.
Attribute | Description
CallStack | Not used.
Cnt | Not used.
Col | Number of the source column that contains the beginning of the affected data item.
Context | Internal ID of the context for the affected data item.
DeclHCID | Internal ID of the declaration for the affected data item.
Depth | The depth of the trace.
Direction | The direction of the trace, forward or backward.
Duplicate | Indicates that the affected data item is repeated in the trace.
EntityType | Construct type of the affected data item.
Excluded | Indicates that the affected data item is filtered from the trace.
File | Name of the file that contains the affected data item.
FromSel | Character offset from the start of the file to the beginning of the affected data item, counting from 0.
HCID | Internal ID of the affected data item.
ID | Database ID of the affected data item.
JobName | Name of the job that contains the affected data item.
JobStepID | Database ID of the job step that contains the affected data item.
Keyword | The operation on the affected data item.
Ln | Number of the source line that contains the affected data item.
Name | Name of the affected data item.
ObjName | Name of the object that contains the affected data item.
ObjType | Type of the object that contains the affected data item.
Offset | Memory offset of the affected data item.
OS | Memory offset and size in bytes of the affected data item, separated by a colon (:).
PortFlag | Port type of the affected data item: I for input, O for output, N for not a port.
PortName | Name of the port referenced in the operation identified by the Keyword.
PrevID | Database ID of the affected data item's parent node.
RelType | Data flow relationship type for the affected data item.
RootID | Database ID of the root node of the tree.
Size | Size in bytes of the affected data item.
SourceID | Database ID of the file that contains the affected data item.
SourceText | Text of the source line that contains the affected data item.
SourceType | Source type of the file that contains the affected data item.
StepName | Name of the job step that contains the affected data item.
StepNum (also Step) | Number of the job step that contains the affected data item.
ToSel | Character offset from the start of the file to the end of the affected data item, counting from 0.
Parent topic: Analyzing Impact Traces
Related tasks
Setting Impact Pane User Preferences
Related information
Data Flow Relationships


Generating a Pane Report

Describes how to generate a Pane Report.

A Pane Report shows the entire tree for a trace in XML format. To generate a Pane Report, click the * button next to the * button on the tool bar and choose Pane Report in the drop-down menu. A Save As dialog opens, where you can specify the name, location, and file type of the report.

Parent topic: Analyzing Impact Traces


Generating an Affected Code Report (Cobol and APS Only)

Describes how to generate an Affected Code Report.

An Affected Code Report shows code that would be impacted by changing a data item's definition or usage (Cobol and APS only). To generate an Affected Code Report, click the * button next to the * button on the tool bar and choose Affected Code Report in the drop-down menu. A Save As dialog opens, where you can specify the name, location, and file type of the report.

Parent topic: Analyzing Impact Traces


Analyzing Program Control Flows

Introduces the HyperView tools for analyzing control flows.

Control flows describe the processing paths in a program. Call flows, decision flows, and statement flows each offer a different way of understanding the procedures in a program. HyperView offers the following tools for analyzing program control flows:

  • The Callie pane displays a diagram that shows the call flow for paragraphs in a Cobol program, subroutines in an RPG program, or procedures in a PL/I or Natural program.
  • The Execution Path pane displays a hierarchical view and diagram that show the conditions that determine the flow of control in a Cobol or PL/I program.
  • The Flowchart pane displays a diagram that shows the flow of control between statements in a Cobol paragraph or PL/I procedure, or between steps in a job or JCL procedure.
  • The Animator lets you step through Cobol or Natural code displayed in a HyperView pane.
  • Using the Callie Pane
    Provides an overview of the Callie pane.
  • Using the Execution Path Pane
    Describes how to use the Execution Path pane.
  • Using the Flowchart Pane
    Describes how to use the Flowchart pane.
  • Using the Animator
    Describes how to use the Animator.
Related information
Using the Callie Pane
Using the Execution Path Pane
Using the Flowchart Pane
Using the Animator


Using the Callie Pane

Provides an overview of the Callie pane.

The Callie pane displays a diagram that shows the call flow for paragraphs in a Cobol program, subroutines in an RPG program, or procedures in a PL/I or Natural program. The flow is traced from a seed item to a called external program, subroutine, or procedure (if any).

Call relationship lines are color-coded as shown in the table below.

Color | Relationship
Green | GO TO
Red | Fall Thru
Brown | PERFORM
Blue | External call

The toolbar at the top of the pane displays icons used in the main Diagrammer window. For Diagrammer usage, see Analyzing Projects in the workbench documentation set.

  • Drawing the Diagram
    Describes how to draw a call flow diagram.
  • Choosing the Diagram View
    Describes the subgraph and subtree views of a call flow diagram.
  • Selecting Items
    Describes how to select items in a call flow diagram.
  • Setting Callie User Preferences
    Describes how to set Callie User Preferences.
  • Setting Callie Project Options
    Describes how to set Callie Project Options.
Parent topic: Analyzing Program Control Flows
Related information
Analyzing Program Control Flows
Using the Execution Path Pane
Using the Flowchart Pane
Using the Animator


Drawing the Diagram

Describes how to draw a call flow diagram.

To display a call flow diagram in the Callie pane, select the seed item in the Source or Context panes. The diagram is automatically redrawn when you select a new seed item in the Source or Context pane, unless the new seed already appears in the current diagram. To redraw the diagram in that case, select the new seed item in the diagram and click the [image] button on the toolbar at the bottom of the pane.

Parent topic: Using the Callie Pane


Choosing the Diagram View

Describes the subgraph and subtree views of a call flow diagram.

The Callie pane offers two views of program control flows, a subgraph view and a subtree view. The figures below show the same paragraphs in both views.

Subgraph View

The subgraph view offers a cyclic representation of the information in the diagram. Items are drawn once. Relationship lines cross. Subgraph views are often easier to understand than subtree views. Click the [image] button on the toolbar at the bottom of the pane to select the subgraph view.

Subtree View

The subtree view offers a linear representation of the information in the diagram. Items are drawn as many times as necessary. Relationship lines do not cross. Use this view if too many intersecting lines make a subgraph view hard to read. Click the [image] button on the toolbar at the bottom of the pane to select the subgraph view.
Subtree View

Parent topic: Using the Callie Pane


Selecting Items

Describes how to select items in a call flow diagram.

Select an internal item in a call flow diagram to navigate to it in the Source and Context panes. For Cobol, select an external program to display it in the Source and Context panes. For PL/I and Natural, select an external procedure and choose Switch to Procedure in the right-click menu to display it in the Source and Context panes. Select a relationship line to navigate to the call in the Source and Context panes.

Parent topic: Using the Callie Pane


Setting Callie User Preferences

Describes how to set Callie User Preferences.

Use the HyperView > Callie tab of the User Preferences window to specify the default box color for items in subgraph views and the color of the selected item in subgraph views. You can also specify the number of visited nodes that Callie displays in different colors in subtree views. For both views, you can specify that business names replace original identifiers in the diagram.

STEPS:
  1. Choose Tools > User Preferences. The User Preferences window opens. Click the HyperView > Callie tab.
  2. The current default background color of the box representing an item in the subgraph view is displayed in the Default Box Color drop-down. The current background color of the box representing the selected item in the subgraph view is displayed in the Selected Box Color drop-down. Click the adjacent Down Arrow Icon button to edit the color of the boxes.
  3. In the Track Length combo box, enter the number of visited nodes in the subtree view that Callie displays in different colors.
  4. Select Display Business Names to display business names rather than original identifiers in the Callie pane.
Parent topic: Using the Callie Pane


Setting Callie Project Options

Describes how to set Callie Project Options.

Use the Callie tab of the Project Options window to control the depth of the flow trace: how many calling and called nodes in a sequence the diagram displays to and from the seed item. You can also limit the relationship types the diagram displays and filter out items by name.

STEPS:
  1. Choose Tools > Project Options. The Project Options window opens. Click the Callie tab.
  2. In the Connections pane, select the relationship types you want to view in the diagram. Select:
    • Show GO TO to show GO TO relationships.
    • Show Performs to show PERFORMS relationships.
    • Show External Calls to show external call relationships.
    • Show Follows to show Fall Thru relationships.
    • Merge Duplicate Links to show a single relationship line rather than multiple lines when constructs are connected by identical call relationships.
  3. In the Neighborhood Size pane, use the Call Depth and Caller Depth sliders to specify the depth of the flow trace: how many calling and called nodes in a sequence, respectively, the diagram displays to and from the seed item.
    If Callie loads too slowly in subgraph mode, set these options to values lower than 5.
  4. In the Paragraph Name Filters pane, select the pattern that matches the names of items you want to exclude from the diagram. The recognized patterns are listed in the Paragraph Name Filters pane. Add patterns as needed.
Parent topic: Using the Callie Pane


Using the Execution Path Pane

Describes how to use the Execution Path pane.

The Execution Path pane displays a hierarchical view and diagram of the conditions that determine the control flow in a program. Each view traces the control flow from the first involved condition to the seed construct selected in the Source or Context pane. The seed construct can be either a paragraph or statement. Use an execution path to ensure that a code segment encapsulates all of the business logic for a candidate business rule.

For a Cobol program, the Execution Path tool may give incorrect results if the program contains a paragraph that is used in multiple PERFORM statements or in some combination of PERFORM and GO TO statements.
STEPS:
  1. Select the seed construct in the Source or Context pane.
  2. Choose Execution Path > Analyze Selected Construct. HyperView displays the execution path for the seed construct
    Tip: Click the Copy Button button on the tool bar to copy the execution path to the clipboard with all formatting preserved.

    Execution Path Pane with Hierarchy

  3. Click the Diagrammatic View tab to display the execution path in a diagram. The seed construct is displayed in red. The tool bar displays icons used in the common diagrammer. For more information, see Analyzing Projects in the workbench documentation set.
    Execution Path Pane with Diagram

Parent topic: Analyzing Program Control Flows
Related information
Analyzing Program Control Flows
Using the Callie Pane
Using the Flowchart Pane
Using the Animator


Using the Flowchart Pane

Describes how to use the Flowchart pane.

The Flowchart pane displays a diagram that shows the flow of control between statements in a Cobol paragraph or PL/I procedure, or between steps in a job or JCL procedure. The label of the box representing an item in the flow contains the text of the item.

PERFORM statements are displayed with a blue label. GO TO, RETURN, and STOP RUN statements are displayed with a red label. Conditions or conditional statement are displayed in boxes with a green background. Captions along relationship lines show the conditions or blocks that determine the flow. Select a statement or condition to navigate to it in the Source and Context panes.

Job step relationships are collapsed in a group. Double-click the maximize button for the group to expand the relationships. Double-click the minimize button for the group to collapse the relationships.

Options control grouping of same-level statements and whether business names are displayed. The toolbar at the top of the pane displays icons used in the main Diagrammer window. For Diagrammer usage, see Analyzing Projects in the workbench documentation set.

  • Drawing the Diagram
    Describes how to draw a flowchart diagram.
  • Setting Flowchart User Preferences
    Describes how to set Flowchart User Preferences.
Parent topic: Analyzing Program Control Flows
Related information
Analyzing Program Control Flows
Using the Callie Pane
Using the Execution Path Pane
Using the Animator


Drawing the Diagram

Describes how to draw a flowchart diagram.

To display a flowchart diagram in the Flowchart pane, select the paragraph, procedure, job, or JCL procedure you want to analyze in the Source or Context panes. The diagram is automatically redrawn when you select a new startup item in the Source or Context pane.

Parent topic: Using the Flowchart Pane


Setting Flowchart User Preferences

Describes how to set Flowchart User Preferences.

Use the HyperView > Flowchart tab of the User Preferences window to control grouping of same-level statements and whether business names are displayed.

STEPS:
  1. Choose Tools > User Preferences. The User Preferences window opens. Click the HyperView > Flowchart tab.
  2. Select Group Same Level Names to collapse same-level statements in a group. Double-click the maximize button for the group to expand the statements. Double-click the minimize button for the group to collapse the statements.
  3. Select Display Business Names to display business names rather than original identifiers in the Flowchart pane.
Parent topic: Using the Flowchart Pane


Using the Animator

Describes how to use the Animator.

The Animator lets you step through the code displayed in a HyperView pane. You can choose program branches yourself, or have the animator choose them randomly.

Tip: The Animator is especially useful in tracking execution paths in Callie subgraph views.

Animator Window with Context Pane

STEPS:
  1. Select the construct you want to start the animation from in the Source or Context pane.
  2. Click the Random Branch Button button on the tool bar if you want Animator to choose logical branches randomly.
    Tip: Use the slider at the right of the tool bar to set the speed of the animation.
  3. Click the Start Animation Button button on the tool bar to start the animation. If you are choosing program branches yourself, Animator stops at each condition it encounters and displays a pop-up menu that prompts you to choose a logical branch. Click the branch you want to go down, or click Break to pause the animation. HyperView populates the top part of the Animator window with each condition it encounters, the logical branch that you or the Animator chose, and the paragraph that contains the condition.
  4. In the Context pane at the bottom of the window, click the appropriate tab to view exit points, altered GO TOs, or the call stack for the paragraph currently being executed. You can hide the Context pane by choosing the Animator > Show Context. Choose it again to show the Context pane.
    Tip: Click the Step Through Button button on the tool bar to step through the code manually. Each time you click the button the Animator steps into the next piece of program code. Click the Step Over Button button if you want to step through the code manually but step over PERFORM statements.
  5. Click the Pause Animation Button button on the tool bar to pause the animation. Click the Start Animation Button button to restart the animation. Click the Stop Animation Button button to stop the animation.
  6. To save the animation results:
    • To a HyperView list, click the Down Arrow Button button next to the Save Button button on the tool bar and choose Save Trace As List in the drop-down menu. You can view the list in the Internal category in Clipper.
    • To XML, click the Down Arrow Button button next to the Save Button button on the tool bar and choose Save Trace As XML in the drop-down menu. A Save As dialog opens, where you can specify the name and location of the results report.
  7. Click the Delete Button to delete the results from the Animator window.
Parent topic: Analyzing Program Control Flows
Related information
Analyzing Program Control Flows
Using the Callie Pane
Using the Execution Path Pane
Using the Flowchart Pane


Setting Up a Glossary

Introduces the Glossary pane.

Use the Glossary pane to create a dictionary, or glossary, of meaningful names for items of interest in your workspace: data elements, paragraphs, programs, screens, tables, and the like. A glossary is especially useful for assigning business names to identifiers: natural language names that make it easy to document and retrieve business rules. The field PLC_NUM, for example, might have the business name Policy Number.

The Glossary pane lets you assign business names to identifiers manually or in batch mode. You can auto-extract business names from screens, import business names into a glossary from a file, and much more.

  • Understanding the Glossary Pane
    Describes the Glossary pane.
  • Searching for Terms
    Introduces the search facilities.
  • Assigning Business Attributes
    Describes how to assign business attributes.
  • Extracting Business Names from Screens
    Describes how to auto-extract business names for program variables.
  • Importing and Exporting Business Attributes
    Describes how to import and export business attributes.
  • Propagating Business Names
    Describes how to propagate the business name for one identifier to a related identifier with an identical meaning.
  • Deleting Business Attributes
    Describes how to delete business attributes.
  • Setting Glossary Workspace Options
    Describes how to set Glossary options.
  • Refreshing a Glossary
    Describes how to refresh a glossary.
  • Generating Glossary Reports
    Describes how to generate Glossary reports.
Related information
Understanding the Glossary Pane
Understanding Business Rules


Understanding the Glossary Pane

Describes the Glossary pane.

A term is the name of an item of interest in your workspace. The Glossary pane automatically generates a list of terms for the file selected in the Objects pane and any included files. Glossary search facilities let you home in on terms of interest in the workspace.

The Glossary tool consists of two panes:

  • The Terms pane displays the terms in the selected file, filtered by your choices in the workspace options for the Glossary pane.
  • The Search Result pane displays the terms returned by the most recent Glossary search. The scope of the search is workspace-wide, unless you use the advanced search feature to filter explicitly by project.

Each pane displays the term type, the business name and description assigned to the term, and how the business name and description were assigned (Manual, Automatic, Extracted from Screen, or From Propagation). To hide a pane, choose Glossary > View Terms or Glossary > View Search Result, as appropriate. Deselect the menu item to show the pane again.

To synch the Terms pane with other HyperView panes, choose Glossary > Synchronize with other views. Select a term in the Terms pane to navigate to the term in other HyperView panes. Deselect Glossary > Synchronize with other views to turn off synchronization.

Turning off synchronization may improve Glossary performance for very large workspaces.
Parent topic: Setting Up a Glossary


Searching for Terms

Introduces the search facilities.

Glossary search facilities let you home in on terms of interest in your workspace:

  • Use a simple search to perform coarse-grained searches for terms.
  • Use an advanced search to perform narrowly targeted searches for terms.

The scope of all searches is workspace-wide, unless you use the advanced search feature to filter explicitly by project. Results are returned in the Search Result pane. To clear the Search Result pane, choose Glossary > Clear Search Result.

  • Using the Simple Search Facility
    Describes how to use the Glossary simple search facility.
  • Using the Advanced Search Facility
    Describes how to use the Glossary advanced search facility.
  • Creating a List of Search Results
    Describes how to create a Clipper list of search results.
Parent topic: Setting Up a Glossary


Using the Simple Search Facility

Describes how to use the Glossary simple search facility.

Use a simple search to perform coarse-grained searches for terms. Follow the instructions below to use the simple search facility.

STEPS:
  1. Enter the text for the search (or select the text of a recent search) in the Search combo box on the tool bar. You can use wildcard patterns allowed in LIKE statements by Visual Basic for Applications (VBA).
    Select a column heading and click the * button on the tool bar, then enter text in the Search combo box to scroll intelligently to items in that column. The tool matches text as you type.
  2. Click the * button on the tool bar to match business names only. Click both the * button and the * button to match terms and business names (search terms are ORed).
  3. Click the * button on the tool bar. The results of the search are displayed in the Search Result pane.
Parent topic: Searching for Terms
Related information
Using the Advanced Search Facility
Using Wildcard Patterns in Searches


Using the Advanced Search Facility

Describes how to use the Glossary advanced search facility.

Use an advanced search to perform narrowly targeted searches for terms. Follow the instructions below to use the advanced search facility.
STEPS:
  1. Choose Glossary > Advanced Search. The Advanced Search dialog opens.

  2. You can create a new search filter or edit an existing search filter:
    • To create a new search filter, enter the name of the filter in the Filter Name combo box.
    • To edit an existing search filter, select the filter in the Filter Name combo box.
    To save a search filter, choose Filter > Save Current Filter. To delete a search filter, choose Filter > Delete Filter. To restore a filter to its initial values, choose Filter > Reset Values.
  3. To filter on source file type, select the type in the Source Type drop-down.
  4. To filter on source file name, select the File Name check box, then select the matching pattern for the name in the combo box below. Enter a new matching pattern by typing in the combo box. You can use wildcard patterns allowed in LIKE statements by Visual Basic for Applications (VBA). Click the * button next to the drop-down to display a pop-up menu of elements you can insert in the pattern. Click an element to insert it. The matching pattern is saved when you save or execute the filter.
  5. To filter on tags, select each tag you want to filter on in the With Tags pane. The search will return matching repository objects that have been assigned the tag and matching HyperCode constructs contained in repository objects that have been assigned the tag.
  6. To filter on projects, select the Project check box, then select the projects in the list pane below.
  7. To filter on repository object type, select each object type you want to filter on in the Repository Entities pane.
  8. To filter on HyperCode construct type, select each construct type you want to filter on in the Hypercode Entities pane.
    Both repository and Hypercode entities are filtered by your choices in the workspace options for the Glossary pane.
  9. To filter on the text for a term and/or business name, enter a matching pattern for the text in the combo boxes for terms and/or business names in the Where pane. You can enter plain character strings or wildcard patterns.
    1. Click the radio button for the type of pattern matching you want to use.
    2. For wildcard patterns, click the * button next to the drop-down to display a list of elements you can insert in the pattern. Click an element to insert it. You can use wildcard patterns allowed in LIKE statements by Visual Basic for Applications (VBA). The matching pattern is saved when you save or execute the filter.
    3. In the Condition drop-down, select AND if you want the search terms to be ANDed, OR if you want the search terms to be ORed.
    4. Select the Match Case check box if you want the search to match case.
  10. Click OK to execute the filter. The Glossary tool displays the search results in the Search Result pane.
    If you execute another advanced search with the same criteria for the term or business name, the contents of the Search Result pane act as a filter. If you don't want to filter on existing results, choose Glossary > Clear Search Result to clear the Search Result pane.
Parent topic: Searching for Terms
Related information
Using the Simple Search Facility
Using Wildcard Patterns in Searches


Creating a List of Search Results

Describes how to create a Clipper list of search results.

To create a Clipper list containing search results, choose Glossary > Add to Clipper List. Specify the list name in the New list dialog box and click OK. The list is displayed in the Glossary category in Clipper.

Parent topic: Searching for Terms


Assigning Business Attributes

Describes how to assign business attributes.

You can assign business names manually or in batch mode. You can also export terms and business attributes from the glossary for one workspace for import into the glossary of another.

  • Assigning Business Names Manually
    Describes how to assign business names manually.
  • Assigning Business Names in Batch Mode
Parent topic: Setting Up a Glossary


Assigning Business Names in Batch Mode

Ordinarily, you will want to assign business names in batch mode rather than manually. In the batch interface, you enter replacement text for each token or string you want to change in a term. For the string NUM, for example, you would enter the replacement text Number. You can also modify business names themselves in batch mode.

A token is an element in a program identifier delimited by a hyphen (-) or underscore (_). In the identifier WS01-CUST-FIELD, for example, there are three tokens: WS01, CUST, and FIELD.

STEPS:
  1. Choose Glossary > Generate/Modify Business Names. The Maintain Business Names dialog opens.

    Generate Business Names Window

  2. Click the * button on the toolbar to enable business name generation.
  3. Click the * button on the toolbar to enable token or string replacement. The button is a toggle.
  4. In the Token/String field, enter the token or string you want to replace. You can use wildcard patterns allowed in LIKE statements by Visual Basic for Applications (VBA). In the Replacement field, enter the replacement string. Repeat the procedure for each token or string you want to replace.
    Click the * button on the toolbar to clear the dialog. Click the * button on the toolbar to save the list of entries to a file. Click the * button on the toolbar to load a list of entries into the dialog.
  5. Select Overwrite existing business names if you want existing business names to be overwritten by the matching text.
  6. Click OK. The Glossary tool automatically generates business names for each term that contains the token or string, replacing the string with the text you specified.
  7. To modify business names, click the * button on the toolbar, then repeat the procedure described above for string replacement.
Parent topic: Assigning Business Attributes
Related information
Using Wildcard Patterns in Searches


Extracting Business Names from Screens

Describes how to auto-extract business names for program variables.

One of the most powerful features of Modernization Workbench lets you auto-extract screen labels as business names for program variables. For each screen field with a label immediately to its left in the Screen pane, the Glossary tool generates a business name for the program variable whose value is displayed in the field. If the screen field has the label Customer Number, for example, Glossary assigns the business name "Customer Number" to the variable whose value is displayed in the field.

To extract business names from all the screens in the workspace, choose Glossary > Extract From All Screens. To extract business names only from the screen selected in the Source or Context panes, choose Glossary > Extract From Current Screen.

Parent topic: Setting Up a Glossary
Related tasks
Manually Extracting Business Names for Program Variables


Importing and Exporting Business Attributes

Describes how to import and export business attributes.

You can export terms and business attributes from the glossary for one workspace for import into the glossary of another. You can also import terms and business attributes propagated programmatically. Term (source), business name (replacement), and business description (description) must appear in XML file format as follows:

<glossary>
  <item source="CUST_INFO" replacement="CUSTOMERINFORMATION"
   description="customer information"/>
  ...
</glossary>

To export business attributes, choose Glossary > Export Business Attributes. A save as dialog opens, where you can specify the name and location of the file to export.

To import business attributes, choose Glossary > Import Business Attributes. An open dialog displays, where you can specify the file to import. You are prompted to confirm whether you want to overwrite existing business attributes. Select Overwrite existing business attributes if you want to replace existing business attributes as well as add new ones. Click OK.

Parent topic: Setting Up a Glossary


Propagating Business Names

Describes how to propagate the business name for one identifier to a related identifier with an identical meaning.

You can propagate the business name for one identifier to a related identifier with an identical meaning in the data flow. Business names can be propagated in either direction of the relationship and transitively:

  • For the statements MOVE A to B and MOVE B to C, if A has a business name, it is propagated to B and C.
  • For the statements MOVE A to B and MOVE B to C, if C has a business name, it is propagated to B and A.

No business name is assigned to a variable if it receives values from variables with different business names:

Working-Storage Section.
10 Cust-No  PIC 9(7).
10 Ord-No  PIC 9(7).
10 Display-No  PIC 9(7).

Procedure Division.
...
Move Cust-No to Display-No.
Display Display-No.
Move Ord-No to Display-No.
Display Display-No.
...

If Cust-No has the business name Customer Number, and Ord-No has the business name Order Number, no business name is assigned to Display-No, since it receives values from variables with different business names.

To propagate business names from all existing business names, choose Glossary > Propagate All. To propagate business names from selected business names, choose a single business name in the Terms pane or multiple business names in the Search Result pane and choose Glossary > Propagate Selected. To propagate only from business names assigned in a specific way, choose Glossary > Propagate <Assignment Method>.

Parent topic: Setting Up a Glossary
Related information
Setting Glossary Workspace Options
Data Flow Relationships


Deleting Business Attributes

Describes how to delete business attributes.

To delete business attributes for a given term, select the term in the Terms or Search Result pane and choose Set Business Attributes in the right-click menu. The Set Business Attributes dialog opens, where you can delete the values in the Business Name and Description fields.

To delete all business names, right-click in the Terms or Search Result pane and choose Delete Business Names > Delete All Business Names in the pop-up menu. To delete only business names assigned in a specific way, right-click in the Terms or Search Result pane and choose Delete Business Names > Delete <Assignment Method> in the pop-up menu.

To delete all business descriptions, right-click in the Terms or Search Result pane and choose Delete All Descriptions in the pop-up menu.

Mass delete operations are workspace-wide, and should normally be performed by the master user only.
Parent topic: Setting Up a Glossary


Setting Glossary Workspace Options

Describes how to set Glossary options.

Use the Glossary tab of the Workspace Options window to filter the objects and constructs available in the Terms pane and the Advanced Search dialog, and to specify the types of data flow relationships for which business names are propagated.
STEPS:
  1. Choose Tools > Workspace Options. The Workspace Options window opens. Click the Glossary tab.
  2. Click the Entities tab, then the Hypercode tab. In the Source Type pane, select the source file type whose constructs you want to include, then select the constructs in the HyperCode Entities pane.
  3. Click the Repository tab. Select each type of repository object you want to include.
  4. Click the Propagation tab. Select each data flow relationship you want to propagate business names for.
    Click Select All to select all the items on a tab. Click Select All again to deselect all the items.
Parent topic: Setting Up a Glossary
Related information
Data Flow Relationships
Propagating Business Names


Refreshing a Glossary

Describes how to refresh a glossary.

You need to refresh a glossary if, during the current Glossary session, you assign a business name to an object in another tool and want the change to be reflected in the glossary. To refresh a glossary, choose Glossary > Refresh Glossary.

Parent topic: Setting Up a Glossary


Generating Glossary Reports

Describes how to generate Glossary reports.

The Glossary tool offers two reports:

  • The Terms report prints the contents of the Terms pane. To generate a Terms report, choose Glossary > Terms Report.
  • The Search report prints the contents of the Search Result pane. To generate a Terms report, choose Glossary > Search Report.
Parent topic: Setting Up a Glossary


Extracting Business Rules

Introduces Business Rule Manager.

Much of the code in a legacy application, by some estimates as much as 80%, is devoted to tasks with only a marginal relationship to the business logic of the application. Business rule extraction lets you separate the application's business logic from data transfer and other tasks.

That makes the application easier to understand, document, maintain, and modernize. It also makes it easier to determine the overlap between legacy applications on the one hand, and any gaps in their functionality on the other.

Business Rule Manager (BRM) offers a powerful set of tools for autodetecting and autodocumenting business rules. You can batch edit rule attributes; create custom attributes suited to your particular needs; match input/output data elements with the business names you've assigned to them in your project glossary; and much more.

  • Understanding Business Rules
    Defines business rules.
  • Extracting Business Rules Manually
    Describes how to extract business rules manually.
  • Autodetecting Business Rules
    Introduces the autodetect methods.
  • Performing Basic Tasks in the Rules Pane
    Introduces the basic tasks you perform in the Rules pane.
  • Editing Rule Attributes
    Provides an overview of tasks related to defining business rule attributes.
  • Propagating Rule Attributes
    Describes how to propagate rule attributes.
  • Identifying Triggered Rule Sets
    Describes how to identify triggered rule sets.
  • Identifying I/O Data Elements
    Provides an overview of I/O data element identification.
  • Identifying Control Conditions
    Provides an overview of control condition identification.
  • Searching for Rules
    Describes how to search for rules.
  • Batch Processing Rule Attributes
    Describes how to use the Change Rules feature to batch process rule attributes.
  • Synchronizing Sources
    Describes how to synchronize sources in different projects.
  • Validating Rule Segments after Refreshing or Editing Code
    Describes how to validate rule segments after refreshing or editing code.
  • Setting Business Rule Manager Project Options
    Introduces BRM project options.
  • Customizing Rule Attributes
    Describes how to customize rule attributes.
  • Generating Reports
    Introduces the Business Rule Manager reports.
Related information
Understanding Business Rules


Understanding Business Rules

Defines business rules.

A business rule is a named container for program code that performs a discrete task in a business process. The rule identifies and documents the code segment that performs this task. A business rule named Calculate Date Difference, for example, might consist of this segment:

COMPUTE WS-DATE-VARIANCE =
WS-C-CARD-DATE-CCYYMM - WS-TODAYS-DATE-CCYYMM.

A business rule can contain one segment only. The same segment can be assigned to different rules. Rules are identified in the Rules pane with a Rule Symbol symbol.

  • How Business Rules Are Organized
    Describes how business rules are organized in the Rules pane.
  • How to Assign Segments to Business Rules
    Describes the methods for assigning segments to business rules.
  • Understanding Business Rule Attributes
    Provides an overview of business rule attributes.
  • Understanding Triggers, I/O Data Elements, and Control Conditions
    Defines triggers, I/O data elements, and control conditions.
  • Understanding the Rules Pane Display
    Describes the layout of the Rules pane.
Parent topic: Extracting Business Rules


How Business Rules Are Organized

Describes how business rules are organized in the Rules pane.

You organize business rules in rule sets. A rule set typically consists of rules executed together, such that if one rule is executed, all are executed (the statements in a paragraph, for example). Think of a rule set as a business process, like Validate Input or Update File. Rule sets are identified in the Rules pane with a Rule Set Symbol symbol.

You organize rule sets, in turn, in business functions. A business function typically defines the order in which processes are triggered. Think of a business function as a use case, like Insert Customer or Update Order. Business functions are identified in the Rules pane with a Business Function Symbol symbol.

Business function names must be unique in the workspace. The same rule set can exist in multiple business functions; the same rule can exist in multiple rule sets. The figure below shows the HyperView Rules pane with a typical hierarchy of business functions, rule sets, and business rules.

Business Functions, Rule Sets, and Business Rules

Parent topic: Understanding Business Rules


How to Assign Segments to Business Rules

Describes the methods for assigning segments to business rules.

You create business rules from code segments identified manually in source or autodetected. Use a Clipper list to run the autodetect method on multiple constructs, or to generate business rules in a specified rule set with predefined attributes.

Parent topic: Understanding Business Rules
Related information
Extracting Business Rules Manually
Autodetecting Business Rules
Extracting Business Rules in Clipper


Understanding Business Rule Attributes

Provides an overview of business rule attributes.

Business rule attributes define the characteristics of the rule: its name, classification, status, business description, and the like. You can view rule attributes in the righthand pane of the Rules window.

Tip: Use the Technical Description, Business Description, Audit, Classification, Status, and Transition attributes for a business function or rule set to indicate that a value applies for all the rules included in the business function or rule set.

You can propagate rule attribute values to one or more rules, and you can use a variety of methods to batch edit rule attributes:

  • Clipper lets you generate business rules in a specified rule set with predefined attributes.
  • The search facility in the Rules pane lets you locate existing rules with common characteristics, which you can then modify in bulk with the Change Rules feature.

You can modify attribute characteristics and valid values, and you can create custom attributes suited to your particular needs.

Parent topic: Understanding Business Rules
Related information
Propagating Rule Attributes
Generating Business Rules in a Specified Rule Set
Searching for Rules
Customizing Rule Attributes


Understanding Triggers, I/O Data Elements, and Control Conditions

Defines triggers, I/O data elements, and control conditions.

In addition to the attributes of a rule, the righthand pane of the Rules window displays the input/output data elements of the rule, its control conditions, and whether it triggers a rule set:

  • I/O data elements identify the input, output, and input/output fields for a rule.
  • Control conditions identify the conditions that govern the execution of a rule. A rule may be executed, for example, only when the value of the State Field is California. Rules that execute conditionally are identified in the Rules pane with Condition Symbol symbol.
  • A trigger is a rule that causes another business process to be started. After the triggered process completes, the triggering process may either continue or terminate. The Valid Phone Number rule in the rule set Validate Input might trigger the rule set Update File, for example. Triggering rules are identified in the Rules pane with a Trigger Symbol symbol.
Parent topic: Understanding Business Rules


Understanding the Rules Pane Display

Describes the layout of the Rules pane.

The lefthand portion of the Rules pane displays the business functions in your workspace in tree form:

  • The Grouping tab lists rules in order of execution, if they were autodetected, or in the order you created them manually, organized by business function and rule set.
  • The Triggering tab lists rules in a hierarchy of triggers, in which each triggering rule can be a parent to triggering rules that depend on it in program logic.

The righthand pane displays the attributes and other characteristics of the business function, rule set, or rule selected in the lefthand pane.

Grouping Tab vs. Triggering Tab

Parent topic: Understanding Business Rules


Extracting Business Rules Manually

Describes how to extract business rules manually.

Even if you plan to autodetect business rules, it's important to know how to assign segments to rules manually, because in some cases it may be easier to adjust rules by hand than it is to run a full autodetect. The following instructions describe how to assign a rule segment at the same time as you create a rule. You can also assign a segment after creating a rule.

STEPS:
  1. In the Source pane, select the segment you want to assign to a business rule. In the Rules pane, select the business function or rule set (if any) for the new rule, then choose Create Rule in the Rules menu. The Create Business Rule dialog opens.
    Tip: You can select a code segment as construct or text. Select a segment as text when you want to select either more or less code than a construct contains. To select a segment as text, click-and-drag from the first line of the segment to the last line of the segment. The segment is highlighted in blue. To select a segment as construct, click inside the construct in the Source pane. The segment is highlighted in yellow.
  2. In the Business Function drop-down, select the business function for the rule. The current business function is displayed. To create a new business function, click New, then follow the instructions for creating business functions.
  3. In the Rule Set drop-down, select the rule set for the rule. The current rule set is displayed. To create a new rule set, click New, then follow the instructions for creating rule sets.
  4. Specify the rule's attributes:
    • In the Name field, enter the name of the rule.
    • On the Business Description tab, enter the business description for the rule.
    • On the Technical Description tab, enter the technical description for the rule.
    • On the Attributes tab, specify the remaining attributes of the rule.
  5. Click OK.
Parent topic: Extracting Business Rules
Related information
How to Assign Segments to Business Rules
Assigning Segments to Existing Rules
Creating Business Functions
Creating Rule Sets
Editing Rule Attributes


Autodetecting Business Rules

Introduces the autodetect methods.

BRM offers two autodetect methods:

  • The backward autodetect method identifies statements containing fields that impact a seed item: a variable, dataport, or I/O statement with nested variables.
  • The screen validation autodetect method identifies statements that validate screen data.
Tip: For either method, BRM creates an HTML diagram of the results in the Output folder for the workspace.
  • Invoking the Backward Autodetect Method
    Describes how to invoke the backward autodetect method.
  • Invoking the Screen Validation Autodetect Method
    Describes how to invoke the screen validation autodetect method.
Parent topic: Extracting Business Rules
Related information
How to Assign Segments to Business Rules
Extracting Business Rules in Clipper


Invoking the Backward Autodetect Method

Describes how to invoke the backward autodetect method.

The backward autodetect method identifies statements containing fields that impact a seed item: a variable, dataport, or I/O statement with nested variables. The method:

  • Traces the flow of data from the seed item to its source, assigning each statement in the flow to a new rule.
  • Detects when a rule's execution completes one business process and triggers another, assigning the rules for each business process to a discrete rule set, and, optionally, assigning the rule sets for a called program to a discrete business function.
  • Identifies the control conditions that govern the execution of a rule, and any business names you have assigned to controlling variables in your project glossary.
  • Detects the input/output data elements for each rule, and any business names you have assigned to them in your project glossary.

You can invoke the backward autodetect method in BRM as described below, or for every variable in a Clipper list. In either case, you can "prune out" of the trace conditional logic not of interest to you.

BRM project options determine the impact relationships traced by the backward autodetect, how the backward autodetect handles called programs, whether it groups or filters out rules based on the paragraphs they are mined from, and how it handles data items.

When you verify the project, set Enable Impact Report and Enable Data Element Flow in the project verification options to enable the impact trace.
STEPS:
  1. Select the seed item in the HyperView Source or Context pane.
  2. In the Rules pane, click the Down Arrow Button button next to the Autodetect Button button on the tool bar and choose Backward AutoDetect in the drop-down menu.
    Tip: Cancel autodetection at any time during the process by clicking the Cancel button in the upper righthand corner of the HyperView window.
  3. If the autodetect trace detects conditional logic, the Autodetected Condition Values dialog prompts you to "prune out" logic branches not of interest to you. If you set a condition to True, for example, the False branch (assuming one exists) is not explored by the trace. When you are satisfied with your choices in the Autodetected Condition Values dialog, click OK.
The autodetect method creates a rule for each code segment that impacts the selected item. HyperView displays an informational message that tells you how many rules it created. Click OK.
  • Pruning Autodetect Results
    Describes how to prune backward autodetect results.
  • Understanding Autodetect Results
    Describes naming conventions for the backward autodetect method.
  • Autodetecting Called Programs
    Describes autodetect handling of called programs.
  • Filtering Autodetected Rules
    Describes autodetect handling of called programs.
  • Grouping Autodetected Rules
    Describes autodetect handling of grouped rules.
  • Autodetect Data Item Handling
    Describes autodetect handling of data items.
Parent topic: Autodetecting Business Rules
Related tasks
Setting Project Verification Options
Related information
Autodetecting Business Rules in Clipper
Extracting Business Rules in Clipper


Pruning Autodetect Results

Describes how to prune backward autodetect results.

If the autodetect trace detects conditional logic, the Autodetected Condition Values dialog gives you the option of "pruning out" logic branches not of interest to you. If you set a condition to True, for example, the False branch (assuming one exists) is not explored by the trace.

Autodetected Condition Values Dialog

In the dialog, click the plus sign (+) next to an item to expand its tree one level. Click the minus sign (-) to collapse the tree one level. Symbols are as follows:

  • True Symbol means that the value of the condition is True.
  • False Symbol means that the value of the condition is False.
  • Any Value Symbol means that the value of the condition is not determined. Select the item and choose True in the right-click menu to set the value to True, False to set it to False. Choose Any Value to restore the item to its original state. Click Clear to restore all the items to their original state.

When you are satisfied with your choices in the Autodetected Condition Values dialog, click OK to dismiss the dialog and continue the trace.

Deselect Set values of conditions manually on the AutoDetect tab in the Project options for Business Rule Manager to disable condition pruning.
Parent topic: Invoking the Backward Autodetect Method
Related information
Setting Options on the AutoDetect Tab


Understanding Autodetect Results

Describes naming conventions for the backward autodetect method.

The business function and first rule set in the autodetect results have names of the form Seed Name at Line Number in Program. After the first rule set:

  1. Rules mined from the seed program appear in rule sets named for the paragraphs they are mined from, except as described in item 3.
  2. Rules grouped by the paragraph they are mined from appear in rule sets with names of the form Paragraph Paragraph Name.
  3. If a rule set contains rules mined from three or more statements with at least one common condition, and the rule set is triggered by a single rule executing under the conditions, the rule set has a name of the form When Conditions.
  4. Rules mined from a different program appear in rule sets named for the program.

After the first autodetect run in which a rule set is mined, a number in parentheses ((n)) is appended to its name to indicate each subsequent run in which it was mined (whether or not you have deleted an instance in the meantime). For business functions and rule sets with the same name, a number in square brackets ([n]) is appended to the name to guarantee uniqueness.

Rules are named for the statement they are mined from, unless:

  1. They are "containers" for filtered rules, in which case they have names of the form Execute Paragraph Name.
  2. They trigger rule sets that group rules by the paragraph they are mined from, in which case they have names of the form Execute Paragraph Name.
  3. They trigger rule sets that contain rules mined from three or more statements with at least one common condition, in which case they have names of the form:
    • Compute Triggered Rule Set When Conditions, if the rule set is triggered by a single rule.
    • Execute Triggered Rule Set When Conditions, if the rule set is triggered by multiple rules.

If a business name exists for a variable, it replaces the variable name in a business function, rule set, or rule. If a business name exists for a program, it replaces the program name in a rule set.

If the code for a segment is duplicated in a program, the autovalidation method will synchronize the rule with the instance of the duplicated code nearest to its previous location, whether or not that instance was originally associated with the rule. The rule will be the same, but the program context may be different from the one you intended. Recreate the rule manually.

Parent topic: Invoking the Backward Autodetect Method
Related information
Grouping Autodetected Rules


Autodetecting Called Programs

Describes autodetect handling of called programs.

When you set the Impact tool to trace Calls relationships, backward autodetect generates a rule for each CALL statement, with a trigger to the first rule set of the called program. By default, both the triggering rule and the triggered rule set are displayed in the same business function. Use the Business Rule Manager autodetect options to:

  • Skip specified called programs.
  • Group rule sets for specified called programs in discrete business functions.
Parent topic: Invoking the Backward Autodetect Method
Related information
Setting Options on the AutoDetect Tab
Filtering Autodetected Rules
Grouping Autodetected Rules
Autodetect Data Item Handling


Filtering Autodetected Rules

Describes autodetect handling of called programs.

Use the Business Rule Manager autodetect options to filter out autodetected rules based on the paragraph they are mined from. The filtered rules are replaced by a single "container" rule with a name of the form Execute Paragraph Name, in the executing rule set.

Unfiltered vs. Filtered Autodetect

Parent topic: Invoking the Backward Autodetect Method
Related information
Setting Options on the AutoDetect Tab
Autodetecting Called Programs
Grouping Autodetected Rules
Autodetect Data Item Handling


Grouping Autodetected Rules

Describes autodetect handling of grouped rules.

Use the Business Rule Manager autodetect options to group autodetected rules based on the paragraphs they are mined from. Rules mined from a specified "paragraph of interest" are assigned to a rule set with a name of the form Paragraph Paragraph Name. A triggering rule with a name of the form Execute Paragraph Name is created in the executing rule set, as shown in the comparison below.

Tip: Use this feature when you want to isolate the rules in a key paragraph, or when you want to use the name of the triggered rule set to search for rules.

If the grouping rule set contains rules mined from three or more statements with at least one common condition, a distinct rule set is created for the rules with a triggering rule in the grouping rule set.

For statements executed multiple times:

  • If the entire paragraph of interest is executed multiple times (if the paragraph is performed at different points in the program, for example), a single rule set is created with a triggering rule for each execution instance; each rule is appended with a number to guarantee uniqueness.
  • If discrete statements in the paragraph of interest are executed at different times, a rule set is created for each statement, and a triggering rule is created for the rule set.

Ungrouped vs. Grouped Autodetect

Parent topic: Invoking the Backward Autodetect Method
Related information
Understanding Autodetect Results
Setting Options on the AutoDetect Tab
Autodetecting Called Programs
Filtering Autodetected Rules
Autodetect Data Item Handling


Autodetect Data Item Handling

Describes autodetect handling of data items.

Many data item evaluations do not involve business processes. When you set backward autodetect to trace constant moves (MOVE 1 to B), for example, there may be constant initializations you want the method to ignore.

Similarly, you may want backward autodetect to skip specified I/O elements, such as system variables, or variables initialized by zero or a blank line. Use the Business Rule Manager autodetect options to skip these items.

Parent topic: Invoking the Backward Autodetect Method
Related information
Setting Options on the AutoDetect Tab
Autodetecting Called Programs
Filtering Autodetected Rules
Grouping Autodetected Rules


Invoking the Screen Validation Autodetect Method

Describes how to invoke the screen validation autodetect method.

The screen validation autodetect method identifies statements that validate screen data. The method:

  • Traces from a receive screen statement each statement that validates screen input, assigning each statement to a new rule. A screen field may be validated directly or in a downstream variable to which its value is passed, or both.
  • Detects the input/output data elements for each rule, and any business names you have assigned to them in your project glossary.

The business function and rule set for the autodetect results have names of the form Validation of Screen Receive Screen Statement Name at Line Number in Program. Rules have names of the form Validation of Screen Statement Name at Line Number in Program.

After the first autodetect run in which a rule set is mined, a number in parentheses ((n)) is appended to its name to indicate each subsequent run in which it was mined (whether or not you have deleted an instance in the meantime). For business functions and rule sets with the same name, a number in square brackets ([n]) is appended to the name to guarantee uniqueness.

If a business name exists for a variable, it replaces the variable name in a business function, rule set, or rule. If a business name exists for a program, it replaces the program name in a rule set.

STEPS:
  1. Select the receive screen statement from which you want to trace screen validations in the HyperView Source or Context pane.
  2. In the Rules pane, click the Down Arrow Button button next to the Autodetect Button button on the tool bar and choose Screen Validation in the drop-down menu. Cancel autodetection at any time during the process by clicking the Cancel button in the upper righthand corner of the HyperView window.
Parent topic: Autodetecting Business Rules


Performing Basic Tasks in the Rules Pane

Introduces the basic tasks you perform in the Rules pane.

The lefthand pane of the Rules window lists every business rule in the current project, organized by business function and rule set. Select:

  • A business function to view its attributes in the righthand pane of the window.
  • A rule set to view its attributes in the righthand pane of the window. If a rule set is triggered by a rule, the trigger is listed in the lower portion of the righthand pane.
  • A rule to view its attributes in the righthand pane of the window and its segment in the HyperView Source and Context panes.
  • Creating Business Functions
    Describes how to create a business function.
  • Creating Rule Sets
    Describes how to create a rule set.
  • Selecting Rules for Batch Processing
    Describes how to select rules for batch processing.
  • Moving or Copying Rules or Rule Sets
    Describes how to move or copy rules or rule sets.
  • Copying a Rule or Rule Set with a Different Name
    Describes how to copy a rule or rule set with a different name.
  • Deleting Rules, Rules Sets, and Business Functions
    Describes how to delete rules, rule sets, or business functions.
  • Changing the Order of Rules and Rule Sets
    Describes how to change the order of rules or rule sets.
  • Exporting Rules, Rule Sets, and Business Functions
    Describes how to export rules, rule sets, or business functions.
  • Importing Rules, Rule Sets, and Business Functions
    Describes how to import rules, rule sets, or business functions.
  • Assigning Segments to Existing Rules
    Describes how to assign a code segment to an existing rule.
  • Deleting a Segment from a Rule
    Describes how to delete a segment from a rule.
  • Flagging Segments in Source
    Describes how to flag segments in source.
  • Viewing the Activity Log
    Describes how to view the activity log for a rule.
Parent topic: Extracting Business Rules
Related information
Editing Rule Attributes


Creating Business Functions

Describes how to create a business function.

To create a business function, choose Rules > Create Business Function. The Business Function dialog opens. In the Business Function dialog, enter the attributes of the new business function and click OK.

Parent topic: Performing Basic Tasks in the Rules Pane


Creating Rule Sets

Describes how to create a rule set.

To create a rule set, select the business function for the rule set in the lefthand pane and choose Rules > Create Rule Set. The Create Rule Set dialog opens, with the current business function displayed in the Business Function drop-down. Select another business function if necessary, then enter the attributes of the new rule set and click OK.

Parent topic: Performing Basic Tasks in the Rules Pane


Selecting Rules for Batch Processing

Describes how to select rules for batch processing.

To make a rule a candidate for batch processing, click the check box next to the rule. To check all the rules in a rule set, click the check box for the rule set. To check all the rule sets and rules in a business function, click the check box for the business function.

To check all rules, choose Rules > Select All. To uncheck all rules, choose Rules > Unselect All. To invert the current selection, so that unselected rules are selected and selected rules are unselected, choose Rules > Invert Selection.

Choose Rules > Selected Only to display only the checked business functions, rule sets, or rules (and their parents or children) in the Rules pane.
Parent topic: Performing Basic Tasks in the Rules Pane


Moving or Copying Rules or Rule Sets

Describes how to move or copy rules or rule sets.

To move or copy rules, place a check mark next to the rules and choose Rules > Copy/Move Selected Rules. The Copy/Move Selected Rules dialog opens, where you can specify the rule set for the rules and whether you want to move or copy them.

To move or copy rule sets, place a check mark next to the rule sets and choose Rules > Copy/Move Selected Rule Sets. The Copy/Move Selected Rule Sets dialog opens, where you can specify the business function for the rule sets and whether you want to move, copy, or reuse them. For copied rule sets, a number in curly brackets ({n}) is appended to the name to guarantee uniqueness. For reused rule sets, no change is made to the name.

If you modify the attributes of a reused rule set, the changes appear in every instance. If you attempt to delete a reused rule set, you are prompted to confirm whether you want to delete every instance or only the selected instance.
Parent topic: Performing Basic Tasks in the Rules Pane


Copying a Rule or Rule Set with a Different Name

Describes how to copy a rule or rule set with a different name.

To copy a rule with a different name, select the rule and choose Rules > Copy/Moveu. The Copy/Move dialog opens, where you can specify the rule set for the rule and the new name of the rule.

If you select Move rather than Copy in this dialog, the rule is moved unchanged to the new location.

To copy a rule set with a different name, select the rule set and choose Rules > Copy/Move. The Copy/Move dialog opens, where you can specify the business function for the rule set and the new name of the rule set. You can also specify a technical description or business description. The rules in the rule set are not copied to the new location.

If you select Move rather than Copy in this dialog, the rule set and all its rules are moved unchanged to the new location.
Parent topic: Performing Basic Tasks in the Rules Pane


Deleting Rules, Rules Sets, and Business Functions

Describes how to delete rules, rule sets, or business functions.

To delete a rule, rule set, or business function, select it and choose Rules > Delete. You are prompted to confirm the deletion. Click OK. You cannot delete a non-empty rule set or business function. To undo the deletion, choose Rules > Undo Delete.

Parent topic: Performing Basic Tasks in the Rules Pane


Changing the Order of Rules and Rule Sets

Describes how to change the order of rules or rule sets.

To move a rule up in the sequence for its rule set, select it and choose Rules > Move Up in Sequence. To move a rule down in the sequence for its rule set, select it and choose Rules > Move Down in Sequence. You can also use these menu choices to move a selected rule set up or down in the sequence for its business function.

Tip: For reporting purposes, it's usually best to list rules in order of execution. Autodetected rules are always initially listed in order of execution.
Parent topic: Performing Basic Tasks in the Rules Pane


Exporting Rules, Rule Sets, and Business Functions

Describes how to export rules, rule sets, or business functions.

To export rules, rule sets, or business functions to an ERD file, for import to another workspace or a third-party tool, select the items you want to export and choose Rules > Rule Export. You are prompted to continue. Click Yes. The Export Objects dialog opens, where you can specify the name and folder for the ERD file.

Only the parents of exported items are exported. Children are not. That is, if you export a business function, only the business function is exported. If you export a rule set, only the rule set and its business function are exported.
Parent topic: Performing Basic Tasks in the Rules Pane
Related information
Setting Options on the Rule Export Tab


Importing Rules, Rule Sets, and Business Functions

Describes how to import rules, rule sets, or business functions.

To import rules, rule sets, or business functions from an ERD file, choose Rules > Rule Import. The Import Rules dialog opens, where you can specify the name and folder for the ERD file.

Parents are also imported. If the parent for an imported item already exists in the workspace and has different children, the item is added to the existing children.

If the segment for an imported rule does not exist in the workspace, the segment validity attribute for the rule is set to False.
Parent topic: Performing Basic Tasks in the Rules Pane


Assigning Segments to Existing Rules

Describes how to assign a code segment to an existing rule.

To assign a segment to an existing rule (whether or not a segment has already been assigned to it), select the rule, then select the segment in the Source pane. Choose Rules > Assign segment.

Parent topic: Performing Basic Tasks in the Rules Pane


Deleting a Segment from a Rule

Describes how to delete a segment from a rule.

To delete a segment from a rule, select the rule and choose Rules > Delete segment.

Parent topic: Performing Basic Tasks in the Rules Pane


Flagging Segments in Source

Describes how to flag segments in source.

To place a Blue Mark Symbol symbol in the HyperView Source pane display next to each line in the assigned segment, click the Flag Button button on the tool bar.

Parent topic: Performing Basic Tasks in the Rules Pane


Viewing the Activity Log

Describes how to view the activity log for a rule.

To view a chronological record of your activities for a rule, select the rule and choose Rules > Activity Log.

Parent topic: Performing Basic Tasks in the Rules Pane


Editing Rule Attributes

Provides an overview of tasks related to defining business rule attributes.

Before a rule will be useful to other members of your organization, you need to define its attributes: what task the rule performs, whether it has been approved, the last time it was validated, and so forth. You can view rule attributes in the righthand pane of the HyperView Rules window.

Tip: Use the Technical Description, Business Description, Audit, Classification, Status, and Transition attributes for a business function or rule set to indicate that a value applies for all the rules included in the business function or rule set. Use the Business Area attribute of a business function to classify business functions as members of a still broader category of activity, such as Customer Management.

You can propagate rule attribute values to one or more rules, and you can use a variety of methods to batch edit rule attributes:

  • Clipper lets you generate business rules in a specified rule set with predefined attributes.
  • The search facility in the Rules pane lets you locate existing rules with common characteristics, which you can then modify in bulk with the Change Rules feature.

You can modify attribute characteristics and valid values, and you can create custom attributes suited to your particular needs.

  • Editing System Attributes
    Introduces the system attributes of rules.
  • Editing User-Defined Attributes
    Introduces the user-defined attributes of a rule.
Parent topic: Extracting Business Rules
Related information
Extracting Business Rules in Clipper
Searching for Rules
Customizing Rule Attributes
Propagating Rule Attributes


Editing System Attributes

Introduces the system attributes of rules.

The names and characteristics of system attributes cannot be modified. The values for many of these attributes are set programmatically.

  • Editing the Name Attribute
    Defines the Name attribute.
  • Editing the Business Area Attribute
    Defines the Business Area attribute.
  • Editing the Technical Description Attribute
    Defines the Technical Description attribute.
  • Editing the Business Description Attribute
    Defines the Business Description attribute.
  • Editing the To Be Reviewed By Attribute
    Defines the To Be Reviewed By attribute.
  • Editing the Program Attribute
    Defines the Program attribute.
  • Editing the Segment Validity Attribute
    Defines the Segment Validity attribute.
  • Editing the Last Validation Time Attribute
    Defines the Last Validation Time attribute.
Parent topic: Editing Rule Attributes


Editing the Name Attribute

Defines the Name attribute.

You specify the name of a business function, rule set, or rule when you create it. To edit the Name attribute, enter a new name in the Name field.

Parent topic: Editing System Attributes


Editing the Business Area Attribute

Defines the Business Area attribute.

The Business Area attribute of a business function identifies the business activity of which the business function is a part, such as Customer Management. To edit the Business Area attribute, enter appropriate text in the Business Area field.

Parent topic: Editing System Attributes


Editing the Technical Description Attribute

Defines the Technical Description attribute.

The Technical Description attribute identifies the role of a rule in program logic. For autodetected rules, the field is automatically populated with the code segment for the rule, in the form Segment at Line Number in Program. To edit the Technical Description attribute, enter appropriate text in the Technical Description tab.

Parent topic: Editing System Attributes


Editing the Business Description Attribute

Defines the Business Description attribute.

The Business Description attribute identifies the business role of a rule. To edit the Business Description attribute, enter appropriate text in the Business Description tab.

Parent topic: Editing System Attributes


Editing the To Be Reviewed By Attribute

Defines the To Be Reviewed By attribute.

The To Be Reviewed By attribute identifies the business analyst responsible for reviewing and approving a rule. To edit the To Be Reviewed By attribute, enter appropriate text in the To Be Reviewed By field.

Parent topic: Editing System Attributes


Editing the Program Attribute

Defines the Program attribute.

The Program attribute identifies the program that contains the rule segment. The value is supplied when you assign a segment to a rule.

Parent topic: Editing System Attributes


Editing the Segment Validity Attribute

Defines the Segment Validity attribute.

Refreshing or editing source code may result in a mismatch between rules and segments. Lines of code may have been added or deleted during the refresh or edit, causing a rule no longer to be synchronized with its segment after re-verification.

The Segment Validity attribute specifies whether a rule segment is valid. The value is supplied when a segment is validated or invalidated.

Parent topic: Editing System Attributes
Related information
Validating Rule Segments after Refreshing or Editing Code
Editing the Last Validation Time Attribute


Editing the Last Validation Time Attribute

Defines the Last Validation Time attribute.

The Last Validation Time attribute identifies the date and time a rule segment was last validated. The value is supplied when a segment is validated.

Parent topic: Editing System Attributes
Related information
Editing the Segment Validity Attribute
Validating Rule Segments after Refreshing or Editing Code


Editing User-Defined Attributes

Introduces the user-defined attributes of a rule.

User-defined attributes can be renamed, defined with different values, or deleted altogether. Their default names and values are described below.

  • Editing the Audit Attribute
    Defines the Audit attribute.
  • Editing the Classification Attribute
    Defines the Classification attribute.
  • Editing the Status Attribute
    Defines the Status attribute.
  • Editing the Transition Attribute
    Defines the Transition attribute.
Parent topic: Editing Rule Attributes
Related information
Customizing Rule Attributes


Editing the Audit Attribute

Defines the Audit attribute.

Newly created rules are considered unapproved, pending a decision that the rule represents valid business logic. The Audit attribute identifies whether the rule has been audited and approved. To edit the Audit attribute, choose one of the following from the Audit drop-down:

  • Not Approved if the rule has not been accepted as valid business logic.
  • Approved if the rule has been accepted as valid business logic.
Parent topic: Editing User-Defined Attributes


Editing the Classification Attribute

Defines the Classification attribute.

The Classification attribute identifies the programming task a rule performs. To edit the classification attribute, choose one of the following from the Classification drop-down:

  • I/O if the rule performs an input or output function.
  • Calculation if the rule performs a calculation.
  • Security if the rule performs a security function.
  • Decision if the rule resolves a decision.
  • Validation if the rule performs validation.
  • Flow if the rule performs a data flow function.
Parent topic: Editing User-Defined Attributes


Editing the Status Attribute

Defines the Status attribute.

The Status attribute identifies the status of a rule in a code extraction or other project. To edit the Status attribute, choose one of the following from the Status drop-down:

  • (none) if the rule has no extraction status.
  • Extracted if the rule has been extracted, but not accepted or rejected.
  • Working if the rule is still being extracted.
  • Accepted if the rule has been accepted.
  • Rejected if the rule has been rejected.
Parent topic: Editing User-Defined Attributes


Editing the Transition Attribute

Defines the Transition attribute.

The Transition attribute identifies the status of a rule in an application redevelopment project. To edit the Transition attribute, choose one of the following from the Transition drop-down:

  • Valid as is if the rule is valid for redevelopment.
  • Complete if the rule has been redeveloped.
  • Obsolete if the rule is obsolete.
  • Requires modification if the rule requires modification for redevelopment.
  • Duplicate if the item is a duplicate of a rule being used for redevelopment.
Parent topic: Editing User-Defined Attributes


Propagating Rule Attributes

Describes how to propagate rule attributes.

Follow the steps below to propagate one or more attribute values for a rule to another rule or to a group of rules

STEPS:
  1. Select the rules to which you want to propagate attribute values.
  2. Click the rule whose attribute values you want to propagate and choose Rules > Propagate from Highlighted to Selected. You are prompted to continue. Click Yes. The Attribute Propagation window opens.

    Attribute Propagation Window

  3. In the Attribute Propagation window, place a check mark next to each attribute whose value you want to propagate, then click OK.
Parent topic: Extracting Business Rules
Related information
Understanding Business Rule Attributes


Identifying Triggered Rule Sets

Describes how to identify triggered rule sets.

A trigger is a rule that causes another business process to be started. After the triggered process completes, the triggering process may either continue or terminate. The Valid Phone Number rule, for example, in the rule set Validate Input might trigger the rule set Update File.

The Triggers field for a rule identifies the rule set the rule triggers. Triggering rules are identified in the Rules pane with a * symbol. A rule set can be triggered by multiple rules. A rule can trigger the rule set it belongs to.

If a rule set is triggered by a rule, the trigger is listed in the lower portion of the righthand pane for the rule set. Double-click the name of a trigger in the list to navigate to the corresponding rule in the lefthand pane.

STEPS:
  1. Select the triggering rule and click the * button next to the Triggers field in the righthand pane. The Select Triggered Rule Sets window opens.

    Select Triggered Rule Sets Dialog

  2. In the Triggered Rule Sets window, select the rule set for the rule to trigger. To create a new rule set for the rule to trigger, click New, then follow the instructions for creating a rule set.
Parent topic: Extracting Business Rules
Related information
Creating Rule Sets


Identifying I/O Data Elements

Provides an overview of I/O data element identification.

I/O data elements identify the input, output, and input/output fields in the code for a rule. You can specify the fields manually or autodetect them.

Use the autoretrieve feature to match I/O data elements with the business names you've assigned to them in your project glossary. A business name identifies the business function of a variable in natural language, and is invaluable in documenting and retrieving business rules. The field PLC_NUM, for example, might have the business name Policy Number.

Tip: Use the I/O Data Elements tab for a business function or rule set to specify the data elements for all the rules included in the business function or rule set.
  • Identifying I/O Data Elements Manually
    Describes how to identify I/O data elements manually.
  • Autodetecting I/O Data Elements
    Describes how to autodetect I/O data elements.
  • Retrieving Business Names for I/O Data Elements
    Describes how to retrieve business names for I/O data elements from a project glossary.
Parent topic: Extracting Business Rules


Identifying I/O Data Elements Manually

Describes how to identify I/O data elements manually.

Follow the instructions below to identify I/O data elements manually.
STEPS:
  1. Select a business function, rule set, or rule, then right-click in the I/O Data Elements tab and choose Create in the pop-up menu. The I/O Data Element dialog opens.

    I/O Data Element Dialog

  2. In the Name field, enter the name of the data element as it appears in the code.
  3. In the Kind group box, choose:
    • I/O for an input and output field.
    • Input for an input field.
    • Output for an output field.
    If a data element already exists for a business function, rule set, or rule, and a data element with the same name but a different type is autodetected for the item, the type of the original data element is defined as I/O (input/output).
  4. In the Business Name area, select:
    • Auto if you want to automatically retrieve the business name for the I/O element from your project glossary.
    • Manually if you want to enter the business name for the I/O element by hand. Enter the name in the field below the radio button.
  5. In the Description field, enter a description of the I/O element.
  6. Click OK to dismiss the dialog and return to the Rules window. The specified field is listed in the I/O Data Elements tab in the righthand pane of the window.
  7. Repeat this procedure for each field you want to add to the rule.
    Tip: To edit a field in the table, select the field and choose Edit in the right-click menu. The I/O Data Element dialog opens, where you can make the necessary changes. To delete a field, select it and choose Delete in the right-click menu.
Parent topic: Identifying I/O Data Elements


Autodetecting I/O Data Elements

Describes how to autodetect I/O data elements.

To autodetect I/O data elements, select a rule, then right-click in the I/O Data Elements tab and choose Detect I/O Data Elements in the pop-up menu. You are prompted to continue. Click Yes.

When the autodetect process is complete, a dialog box displays the number of autodetected I/O elements. Click OK. Click the I/O Data Elements tab in the righthand pane of the Rules window to view the autodetected I/O elements.

When you verify the project, set Enable Impact Report and Enable Data Element Flow in the project verification options to enable the autodetect method for I/O data elements.

The method is based on a set of heuristics designed to produce reasonable output. Results may need to be verified by a detailed impact analysis. For more information on the heuristics, contact support services.

Parent topic: Identifying I/O Data Elements
Related tasks
Setting Project Verification Options


Retrieving Business Names for I/O Data Elements

Describes how to retrieve business names for I/O data elements from a project glossary.

To match I/O data elements with the business names you've assigned to them in your project glossary, select a business function, rule set, or rule, then right-click in the I/O Data Elements tab and choose Populate I/O Business Names in the pop-up menu. You are prompted to continue. Click Yes.

When the autoretrieve process is complete, a dialog box displays the number of autoretrieved I/O business names. Click OK. Click the I/O Data Elements tab in the righthand pane of the Rules window to view the autoretrieved business names.

Parent topic: Identifying I/O Data Elements
Related information
Setting Up a Glossary


Identifying Control Conditions

Provides an overview of control condition identification.

Control conditions identify the conditions that govern the execution of a rule. A rule may be executed, for example, only when the value of the State field is California. Rules that execute conditionally are identified in the Rules pane with * symbol.

Tip: Use the Control Conditions tab for a business function or rule set to specify the control conditions for all the rules included in the business function or rule set.

Use the autoreplace feature to replace variable names in control conditions with the business names you've assigned to them in your project glossary. A business name identifies the business function of a variable in natural language, and is invaluable in documenting and retrieving business rules. The field PLC_NUM, for example, might have the business name Policy Number.

Tip: Move a control condition up or down in the Control Conditions tab by selecting it and choosing Move Up or Move Down in the right-click menu.
  • Specifying Control Conditions
    Describes how to specify control conditions for a rule.
  • Autoreplacing Variable Names in Control Conditions with Business Names
    Describes how to autoreplace variable names in control conditions with their business names in a project glossary.
Parent topic: Extracting Business Rules


Specifying Control Conditions

Describes how to specify control conditions for a rule.

Follow the instructions below to specify control conditions for a rule.

STEPS:
  1. Select a business function, rule set, or rule, then right-click in the Control Conditions tab and choose Create Control Condition in the pop-up menu. The Control Condition dialog opens.

    Control Condition Dialog

  2. In the Name field, enter the name of the data item evaluated by the condition as it appears in the code.
  3. In the Operator drop-down, choose the operator for the comparison that determines whether the condition is met.
  4. In the Argument field, enter the constant value to which the data item is compared. The value may be the name of another field.
  5. In the Description field, enter a description of the control condition.
  6. Click OK to dismiss the dialog and return to the Rules window. The specified condition is listed in the Control Conditions tab in the righthand pane of the window.
    Tip: To edit a field in the table, select the field and choose Edit in the right-click menu. The Control Condition dialog opens , where you can make the necessary changes. To delete a field, select it and choose Delete in the right-click menu.
  7. Repeat this procedure for each control condition you want to add to the rule.
Parent topic: Identifying Control Conditions


Autoreplacing Variable Names in Control Conditions with Business Names

Describes how to autoreplace variable names in control conditions with their business names in a project glossary.

To autoreplace variable names in control conditions with their business names in a project glossary, select a business function, rule set, or rule, then right-click in the Control Conditions tab and choose Substitute Business Names in the pop-up menu. You are prompted to continue. Click Yes.

When the autoreplace process is complete, a dialog box displays the number of autoreplaced variable names. Click OK.

Parent topic: Identifying Control Conditions
Related information
Setting Up a Glossary


Searching for Rules

Describes how to search for rules.

Use the search facility in the Rules pane to find rules based on segment location and/or attribute values. Use the Change Rules feature to batch edit the rules returned by the search.

STEPS:
  1. Select a business function, rule set, or rule and choose Rules > Start Search. The Rule Search window opens.

    Rule Search Window

  2. To search for rules by segment location, select Location of Rule Segments, then choose:
    • Covering the Current Line if you want to find rules with a segment that contains the line of code selected in the Source pane.
    • Relating to the Program if you want to find rules related to a given program. Select the program in the adjacent drop-down.
  3. To search for rules by attribute value, select:
    • The type of object that contains the attribute in the Type combo box.
    • The attribute in the Name drop-down.
    • The operator for the attribute value comparison in the Operator drop-down.
    • The value of the attribute in the Value drop-down.
    Click Add. The search criterion is added to the list box below the drop-downs. Repeat this step for each attribute you want to search by. Select a criterion and click Remove to delete the criterion from the list box.
  4. To search only the selected rules, select Among Selected Rules.
  5. To find rules in the triggering hierarchy for the selection, select Propagate Selection down Triggering Chains.
  6. To invert the search, so that rules not identified by the search criterion are found, choose Invert Selection when Done.
  7. When you are satisfied with your entries in the Rule Search window, click Find. The search facility automatically selects the check box for each rule returned by the search.
Parent topic: Extracting Business Rules
Related information
Understanding Business Rule Attributes
Batch Processing Rule Attributes


Batch Processing Rule Attributes

Describes how to use the Change Rules feature to batch process rule attributes.

Use the Change Rules feature to batch process rule attributes. You can select batch-processing candidates manually, or use the search facility to select candidates automatically.

Attributes of I/O data elements and control conditions can only be used to replace a Business Description or Technical Description. If there are multiple instance of I/O data elements or control conditions, they are displayed in the Business Description or Technical Description on separate lines.
STEPS:
  1. Select the check box for each rule you want to batch process. If you are batch processing rules returned by a search, the check boxes are already selected.
    Tip: To select all the rules returned by a previous search, select Rules > Previous Selected. To return to the rules selected in the next most recent search, select Rules > Next Selected.
  2. Choose Rules > Change Rule Attributes. You are prompted to continue. Click Yes. The Change Rules window opens.
  3. In the Attribute drop-down, select the attribute you want to batch edit. In the Find What field, enter a pattern for the search text. In the Replace With field, enter a pattern for the replacement text. You can use any combination of text and bracketed attribute names. For attributes with enumerated values, click the * button next to the Find What and Replace With fields to display the values in a drop-down. For the remaining attributes, click the * button to display the available attributes in a drop-down. Select an item in a drop-down to populate the adjacent field.
  4. When you are satisfied with your entries in the Change Rules window, click Replace. BRM modifies the selected rules. Click Close to dismiss the window and return to the Rules pane.
  • Usage Example
    Provides a batch processing example.
  • Substituting a Business Name for an I/O Element in an Attribute Value
    Describes how to substitute a business name for an I/O element in an attribute value.
Parent topic: Extracting Business Rules
Related information
Searching for Rules


Usage Example

Provides a batch processing example.

Suppose you wanted to use the Change Rules feature to rename two rules:

Rule 1 of program ABC
Rule 2 of program XYZ

as follows:

Rule 1 extracted from the ABC program
Rule 2 extracted from the XYZ program
STEPS:
  1. Select the check boxes for Rule 1 of program ABC and Rule 2 of program XYX.
  2. Choose Rules > Change Rule Attributes. You are prompted to continue. Click Yes. The Change Rules window opens.
  3. In the Select Attribute field, choose the name attribute.
  4. In the Find What field, enter:
    of program [Program]
  5. In the Replace With field, enter:
    extracted from the [Program] program
Parent topic: Batch Processing Rule Attributes


Substituting a Business Name for an I/O Element in an Attribute Value

Describes how to substitute a business name for an I/O element in an attribute value.

You can substitute a business name for an I/O element in an attribute value by appending "/bus" to the attribute name in either the Find What or Replace With fields in the Change Rules window.

Suppose the Catalog-Master variable has the business name Master Catalog. Now you want to replace the existing Business Description for the Rewrite Catalog-Master rule with the text "Rewrite Master Catalog." You would select the Business Description attribute in the Select Attribute field and enter in the Replace With field:
[Name/bus]
Parent topic: Batch Processing Rule Attributes


Synchronizing Sources

Describes how to synchronize sources in different projects.

Suppose a rule set in the current project is triggered by a rule in another project. When you synchronize sources, BRM includes the program that contains the segment for the triggering rule in the current project. To synchronize sources, choose Rules > Sync Sources.

Parent topic: Extracting Business Rules


Validating Rule Segments after Refreshing or Editing Code

Describes how to validate rule segments after refreshing or editing code.

Refreshing or editing source code may result in a mismatch between a rule and its segment. Lines of code may have been added or deleted during the refresh or edit, causing a rule no longer to be synchronized with the segment after reverification.

BRM automatically handles invalidated segments based on your instructions in the Business Rule Manager > Automatic Rule Validation tab of the Project options window. Use the procedure below when you need to override the specified handling for a rule.

STEPS:
  1. Select the rules you want to validate and choose Rules > Validate. You are prompted to continue. Click Yes. The Automatic Rule Validation dialog opens.
  2. In the Actions for invalid segments pane, select:
    • Leave segment, set Valid to false if you want BRM to keep the invalid segment with the rule, but set the Segment Validity attribute of the rule to Invalid.
    • Delete segment, set Valid to true if you want BRM to delete the invalid segment from the rule and set the Segment Validity attribute of the rule to Valid.
    • Try to match if you want BRM to resynchronize the segment with the rule.
  3. Place a check mark next to Collapse spaces in strings if you have added spaces to strings in segments and want BRM to ignore the spaces.
  4. Click OK.
When the validation process is complete, a dialog box displays the number of validated rules. Click OK. The Segment Validity attribute for the rules is updated.
  • Limitations on Automatic Rule Validation
    Describes limitations on BRM automatic rule validation.
Parent topic: Extracting Business Rules
Related information
Editing the Segment Validity Attribute
Editing the Last Validation Time Attribute
Limitations on Automatic Rule Validation
Setting Options on the Automatic Rule Validation Tab


Limitations on Automatic Rule Validation

Describes limitations on BRM automatic rule validation.

Automatic rule validation will fail to re-synchronize a segment if the segment has been modified in any way during the refresh or edit (if a line has been inserted in the segment code, for example, or if the text of a line has been changed). You must re-synchronize these segments manually. Blank lines are OK.

Note, too, that if the code for a segment is duplicated in a program, the autovalidation method will synchronize the rule with the instance of the duplicated code nearest to its previous location, whether or not that instance was originally associated with the rule. The rule will be the same, but the program context may be different from the one you intended. Here, too, you will have to recreate the rule manually.

Parent topic: Validating Rule Segments after Refreshing or Editing Code
Related information
Validating Rule Segments after Refreshing or Editing Code


Setting Business Rule Manager Project Options

Introduces BRM project options.

Project options for Business Rule Manager determine:

  • The rule name templates available when you use Clipper to create rules in a specified rule set.
  • Autodetect behavior, including how backward autodetect handles called programs, whether it groups or filters out rules based on the paragraphs they are mined from, and how it handles data items.
  • How BRM handles invalidated rule segments.
  • Whether BRM automatically includes triggered rule sets when it performs a rule export.
  • Setting Options on the Rule Defaults Tab
    Describes how to define rule name templates on the Rule Defaults tab of the BRM project options.
  • Setting Options on the AutoDetect Tab
    Describes how to set BRM autodetect options.
  • Setting Options on the Automatic Rule Validation Tab
    Describes how to set BRM automatic rule validation options.
  • Setting Options on the Rule Export Tab
    Describes how to set BRM rule export project options.
Parent topic: Extracting Business Rules


Setting Options on the Rule Defaults Tab

Describes how to define rule name templates on the Rule Defaults tab of the BRM project options.

Use the Business Rule Manager > Rule Defaults tab of the Project options window to define the rule name templates available when you use Clipper to create rules in a specified rule set.

STEPS:
  1. Choose Tools > Project Options. The Project Options window opens. Click the Business Rule Manager > Rule Defaults tab.
  2. The Rule Defaults tab displays the rule name templates available when you use Clipper to create rules in a specified rule set. Add templates as necessary.
  • Defining Rule Name Templates
    Describes how to define rule name templates in the Rule Defaults tab of the BRM project options.
Parent topic: Setting Business Rule Manager Project Options
Related information
Generating Business Rules in a Specified Rule Set
Defining Rule Name Templates


Defining Rule Name Templates

Describes how to define rule name templates in the Rule Defaults tab of the BRM project options.

Use the Business Rule Manager > Rule Defaults tab of the Project options window to define the rule name templates available when you use Clipper to create rules in a specified rule set.

You can use any combination of text and bracketed property names in a rule name template. So if you are creating rules for data ports, the entry:

File Write [Caption]

might produce the following rule names:

File Write REWRITE CATALOG-MASTER
File Write REWRITE FCOST-MASTER-REC
File Write WRITE DATASET('INVOICE')

Valid properties are any property of a construct, plus:

  • Program: the name of the program that contains the construct.
  • FileName: the name of the source file that contains the construct.
  • FromRow: the number of the first line in the source that contains the construct.
  • Caption: the label of the construct in the parse tree.

You can substitute a business name for an I/O element in a property value by appending "/bus" to the property name. If the CATALOG-MASTER variable has the business name MASTER CATALOG:

File Write [Caption/bus]

produces the output:

File Write REWRITE MASTER CATALOG
Parent topic: Setting Options on the Rule Defaults Tab
Related information
Setting Options on the Rule Defaults Tab


Setting Options on the AutoDetect Tab

Describes how to set BRM autodetect options.

Use the Business Rule Manager > AutoDetect tab of the Project options window to specify BRM autodetect behavior, including the impact relationships traced by the method, how it handles called programs, whether it groups or filters out rules based on the paragraphs they are mined from, and how it handles data items.

STEPS:
  1. Choose Tools > Project Options. The Project Options window opens. Click the Business Rule Manager > AutoDetect tab.
  2. In the Settings pane, select Data Impacts. Select the impact relationships you want the autodetect to trace:
    • Include implicit conditions if you want to trace relationships that depend on a statement that executes under the control of a condition, typically, GO TO, EXIT, or PERFORM...THRU.
    • Include constant moves if you want to trace constants moved into data items (MOVE 1 TO B).
    • Include constant initializations if you want to trace data items initialized by constants (03 A ... VALUE 1).
    • Include files if you want to trace data communication via files. Traced only when corresponding JCL, ECL, FCT, or CSD files are verified.
    • Include files in jobs if you want to trace data flow in JCL datasets when Include files is selected.
  3. In the Settings pane, select Called Paragraph Management. In the:
    • Exclusion of called programs pane, place a check mark next to each called program you want the autodetect method to skip. Add called programs as necessary.
    • Business Functions from called programs pane, place a check mark next to each called program whose rule sets you want the autodetect method to group in a discrete business function. Add called programs as necessary.
  4. In the Settings pane, select Paragraph Management. In the:
    • Filtered Paragraphs pane, place a check mark next to each paragraph whose rules you want the autodetect method to filter out of the results. Add paragraphs as necessary.
    • Paragraphs of interest pane, place a check mark next to each paragraph of interest you want the autodetect method to use in identifying results. Add paragraphs as necessary.
  5. In the Settings pane, select Variables and Constants Filters. Select Ignore variable initialization by zero or blank line if you want the autodetect method to ignore variables initialized by zero or a blank line. In the:
    • Constants to ignore as initial values pane, place a check mark next to each initial value of a constant you want the autodetect method to ignore. Add initial constant values as necessary.
    • Templates of I/O data elements names to be skipped pane, place a check mark next to the template for each I/O data element you want the autodetect method to skip. Add I/O data element template names as necessary.
  6. Select Set values of conditions manually if you want to enable condition pruning during the autodetect.
  7. In the Settings pane, select Common Conditions Management. Specify how you want common control conditions for rules in a business function to be displayed:
    • Business Function if you want to display common control conditions in the business function only.
    • Rules if you want to display common control conditions in rules only.
    • Business Function and Rules if you want to display common control conditions in the business function and rules.
Parent topic: Setting Business Rule Manager Project Options
Related information
Autodetecting Called Programs
Filtering Autodetected Rules
Grouping Autodetected Rules
Autodetect Data Item Handling


Setting Options on the Automatic Rule Validation Tab

Describes how to set BRM automatic rule validation options.

Refreshing or editing source code may result in a mismatch between a rule and its segment. Lines of code may have been added or deleted during the refresh or edit, causing a rule no longer to be synchronized with the segment after reverification. BRM automatically handles invalidated segments based on your instructions in the Business Rule Manager > Automatic Rule Validation tab of the Project options window.

STEPS:
  1. Choose Tools > Project Options. The Project Options window opens. Click the Business Rule Manager > Automatic Rule Validation tab.
  2. In the Actions for invalid segments pane, select:
    • Leave segment, set Valid to false if you want BRM to keep the invalid segment with the rule, but set the Segment Validity attribute of the rule to Invalid.
    • Delete segment, set Valid to true if you want BRM to delete the invalid segment from the rule and set the Segment Validity attribute of the rule to Valid.
    • Try to match if you want BRM to resynchronize the segment with the rule.
  3. Place a check mark next to Collapse spaces in strings if you have added spaces to strings in segments and want BRM to ignore the spaces.
Parent topic: Setting Business Rule Manager Project Options
Related information
Validating Rule Segments after Refreshing or Editing Code


Setting Options on the Rule Export Tab

Describes how to set BRM rule export project options.

Use the Business Rule Manager > Rule Export tab of the Project options window to specify whether BRM automatically includes triggered rule sets when it performs a rule export.

STEPS:
  1. Choose Tools > Project Options. The Project Options window opens. Click the Business Rule Manager > Rule Export tab.
  2. In the Close Dependencies pane, select:
    • Only Selected if you want BRM to export only the selected rules.
    • Including Triggered Rule Set if you want BRM to include triggered rule sets when it performs the rule export.
Parent topic: Setting Business Rule Manager Project Options
Related information
Exporting Rules, Rule Sets, and Business Functions


Customizing Rule Attributes

Describes how to customize rule attributes.

Use the Modernization Workbench Administration tool to modify characteristics and valid values of user-defined attributes, and to create custom attributes suited to your particular needs. Custom attributes are available to each workspace you create in the workbench.

The attribute definitions are stored in a file with a name of the form *.Repstry.xml. You can create multiple custom attribute files if you want, and switch back and forth between them as needed. Modernization Workbench applies the most recently saved definitions to your business rules.

Choose Rules > Extended Rule Attributes to open a limited version of this tool in which you can modify or delete the values for character-type attributes. If you delete values in use in existing business functions, rule sets, or rules, the default value of the attribute is restored.

You must upgrade workspaces after customizing rule attributes. For upgrade instructions, see the installation manual for your product.
STEPS:
  1. In the Modernization Workbench Administration window, choose Administer > Edit Rule Attributes.
    • If you have never customized attributes, the Extended Rule Attributes window opens automatically with the default attributes.
    • If you have already customized attributes, and Administer > Use Latest File is not selected, an Open dialog appears where you can select the *.Repstry.xml file that contains the customized attributes you want to modify. The Extended Rule Attributes window opens.
    • If you have already customized attributes, and Administer > Use Latest File is selected, the Extended Rule Attributes window opens with the customized attributes for the *.Repstry.xml file you last saved in the window.
    Tip: Select Open as read-only in the Open dialog if you want to open a read-only version of the *.Repstry.xml file.

    Extended Rule Attributes Window
  2. Click the Business Function, Rule Set, or Business Rule tab as appropriate.
  3. To modify an existing attribute, select the attribute in the lefthand pane, then edit the characteristics or values you want to modify in the righthand pane. To remove an attribute, select it and click Remove.
  4. To create a new attribute, click Add, then edit the characteristics of the new attribute as necessary. The new attribute is added to the list in the lefthand pane.
    Tip: To add a value in the Values pane, go to the end of any line containing a value, press Enter to create a new line, and type in the new value.
  5. When you are satisfied with your entries, click OK. A Save As dialog opens, where you can specify the name and location of the *.Repstry.xml file. Modernization Workbench applies the definitions to your business functions, rule sets, or rules.
    Tip: To switch to the definitions in a different **.Repstry.xml file, deselect Administer > Use Latest File, open the file in the Edit Rule Attributes window, and click OK (whether or not you make changes to the file). Then save the file in the Save As dialog.
You must upgrade workspaces after customizing rule attributes. For upgrade instructions, see the installation manual for your product.
Parent topic: Extracting Business Rules
Related information
Understanding Business Rule Attributes


Generating Reports

Introduces the Business Rule Manager reports.

BRM reports make it easy to develop the kind of detailed specification you'll need for a code extraction or redevelopment project. The following reports are available:

  • The Business Rules Report lists the business function, rule set, segments, attributes, data elements, and control condition definitions of selected rules.
  • The Process Outline Report shows the call context in which rules are executed.
  • The Coverage Report shows the percentage of program logic (including blank lines and comments) that contains rule segments.
  • Generating Business Rule Reports
    Describes how to generate a Business Rule Report.
  • Generating Process Outline Reports
    Describes how to generate a Process Outline Report.
  • Generating Coverage Reports
    Describes how to generate a Coverage Report.
Parent topic: Extracting Business Rules


Generating Business Rule Reports

Describes how to generate a Business Rule Report.

Business Rule Reports list the business function, rule set, segments, attributes, data elements, and control condition definitions of selected rules. Options let you filter out rules from the report and control the attributes displayed in the report.

STEPS:
  1. Select the business functions, rule sets, or rules you want to report on, click the * button on the tool bar, and choose Business Rule Report in the pull-down menu. The Configure Report Options window opens.
  2. Select:
    • Report rules with technical description if you want only rules with a technical description to be included in the report.
    • Report rules with business description if you want only rules with a business description to be included in the report.
    • Report all rules with all description types if you want all rules to be included in the report.
  3. Place a check mark next to Print additional rule attributes if you want to display other rule attributes in the report.
    • In the righthand pane, select each attribute you want to display in the report and click the * button to move the attribute into the lefthand pane. Attributes appear in the report in the order they are listed in the lefthand pane. Click the * button to move all the attributes into the lefthand pane.
    • In the lefthand pane, select an attribute and click the * button to move the attribute back into the righthand pane. Click the * button to move all the attributes into the righthand pane.
  4. Click OK. The Business Rule Report window opens.
Parent topic: Generating Reports


Generating Process Outline Reports

Describes how to generate a Process Outline Report.

Process Outline Reports show the context in which rules are executed. The report lists every paragraph in the selected program, the call flow, or process outline, of the paragraph, every rule with a segment that starts in the paragraph, and the segment itself.

To generate a Process Outline Report, select the program you want to report on, click the * button on the tool bar, and choose Process Outline Report in the pull-down menu. The Process Outline Report window opens.

Parent topic: Generating Reports


Generating Coverage Reports

Describes how to generate a Coverage Report.

The Coverage Report shows the percentage of program logic (including blank lines and comments) that contains rule segments. The report lists the programs in the project, the total number of lines of code they contain, the number of lines of code with program logic, the number of business rule segments the program contains, and the percentage of program logic that contains business rule segments.

To generate a Coverage Report, click the * button on the tool bar and choose Coverage Report in the pull-down menu. The Coverage Report window opens.

Parent topic: Generating Reports


Using the Batch Duplicate Finder

Introduces the Batch Duplicate Finder (BDF).

Use the Batch Duplicate Finder (BDF) to perform sophisticated comparisons of similarly structured paragraphs. You can also use it to analyze paragraphs or procedures across workspaces, and to compare entire programs for their similarity.

  • Marking Items for Comparison
    Describes how to mark items in BDF.
  • Setting BDF Search Options
    Describes how to set BDF search options.
Related information
Finding Duplicates


Finding Duplicates

Describes how to find duplicates with BDF.

Follow the instructions below to find duplicate paragraphs with BDF. Make sure to verify the workspace files you plan to compare before running the tool.

STEPS:
  1. If BDF is not already open, double-click the file \<Workbench Home>\Bin\BDF.exe. If BDF is already open, choose Options > Startup Options. In either case, the BDF scope window opens.
  2. In the BDF scope window, specify the scope of the comparison:
    • In the Select Model drop-down, select the object model for the workspace(s) to be analyzed.
    • In the Select Unit drop-down, select the unit of comparison: Paragraph/Procedure or Program.
    • Select Compare Across Two Workspaces if you want to perform the comparison across workspaces.
    • Select Show Paragraph List to view a list of paragraphs in the workspace(s) to be analyzed. You must choose this option if you want to select and mark the paragraphs to compare. Otherwise, all paragraphs are marked for comparison.
    Tip: For extremely large workspaces, deselect Show Paragraph List to avoid the performance cost of loading paragraphs in the BDF main window.
  3. Click OK. The BDF main window opens.
  4. Choose File > Open Workspace. The Open Workspace dialog opens. Select the workspace (.rwp) for the comparison, then click Open.
    If you are performing the comparison across workspaces, the Open Workspace dialog appears again. Select the second workspace and click Open.
  5. The Select Projects window opens. Select the projects for the comparison, then click OK.
    If you are performing the comparison across workspaces, the Select Projects window appears again. Select the projects for comparison from the second workspace and click Open.
  6. If you are performing the comparison in a single workspace, BDF loads the units of comparison in the List pane. If you are performing the comparison across workspaces, BDF loads the units of comparison for the first workspace at the top of the List pane with a value of A in the Workspace column, and for the second workspace at the bottom of the List pane with a value of B in the Workspace column.
    Tip: Click an item to view its source in the Text pane. Select the appropriate choice in the View menu to show or hide a pane.
  7. Set BDF search options.
  8. Select and mark the items you want to compare, then choose File > Find Duplicates.
BDF writes the results to the output file specified in the BDF search options. The output file renders the results in tab-delimited text. Use a spreadsheet editor to view and manipulate the results.
Related information
Marking Items for Comparison
Setting BDF Search Options


Marking Items for Comparison

Describes how to mark items in BDF.

For small projects, you can mark the items you want to compare manually. For larger projects, you can mark the items in batch mode, by defining a mask with the Select Paragraphs or Select Programs feature.

  • Marking Items Manually
    Describes how to mark items manually in BDF.
  • Marking Items in Batch Mode
    Describes how to batch-mark items in BDF.
Parent topic: Using the Batch Duplicate Finder


Marking Items Manually

Describes how to mark items manually in BDF.

Place a check mark next to an item to mark it. To mark all the items in a section, choose List > Check All. To unmark all the items in the section, choose List > Uncheck All.

To mark selected items in a section, select the items and choose List > Check Selected. To unmark selected items in the section, choose List > Uncheck Selected.

To select a range of items, hold down the Shift key, click the first item in the range, then click the last item in the range. To select items that are not in a range, hold down the Control key, then click each item you want to select.
Parent topic: Marking Items for Comparison


Marking Items in Batch Mode

Describes how to batch-mark items in BDF.

To mark items in batch mode, choose List > Select Paragraphs or List > Select Programs. The BDF Define Mask window opens.

Enter the mask for the items you want to select in the Paragraph name Like field, then click OK. You can use wildcard patterns allowed in LIKE statements by Visual Basic for Applications (VBA).

Deselect Paragraph Action or Program Action to select items that do not match the mask. To mark the items selected with the mask, choose Check Selected in the List menu.

Parent topic: Marking Items for Comparison


Setting BDF Search Options

Describes how to set BDF search options.

BDF search options control the types of comparison BDF performs, the columns it displays in the output, the name and location of the output file, and how it handles copybooks.

STEPS:
  1. Choose Options > Search Options. The BDF Options window opens.
  2. In the BDF Options window, choose General Analysis if you want to compare items on the basis of the minimum number of executable statements they contain. Enter the number in the Minimum Paragraph Size or Minimum Program Size field. An entry of 0 means that all items satisfy the test.
  3. Choose the type of comparison you want to perform. If a pair of paragraphs or programs fails to satisfy the specified value for the comparison, the pair is excluded from the report. Select:
    • Paragraph Analysis or Program Analysis if you want to compare the statements in the pair for their minimum similarity on the Levenshtein edit distance metric. Select Perform Exact Text Match if you want to compare the entire text of the pair (including paragraph names, parameter names, comments, and blank lines) for exact matches.
      Tip: Select Compact Report if you want the output to show items with 100% similarity in a numbered group, rather than with a line for each pair.

      Comparing Non-compact and Compact Report Output in Excel
    • Common Part Analysis if you want to compare the statements in the pair for their minimum similarity on the longest common sequence (LCS) metric.
  4. For either type of comparison, select Perform Data Flow Analysis if you want to perform an additional test to determine whether similar items perform data flow operations with the same pattern.
  5. In the Output File Name field, enter the pathname of the BDF output file. In the Directory for temporary files field, enter the pathname of the directory for temporary files.
  6. Specify copybook handling. Select:
    • Exclude paragraphs in all copybook to copybook comparisons if you want to prevent comparison of a paragraph in a copybook against any paragraph from any copybook, including the same copybook.
    • Disable same copybook comparison if you want to prevent comparison of a paragraph in a copybook against any paragraph in the same copybook.
  7. In the Report Columns group box, select:
    • Copybook to include the Copybook column in the output.
    • Coordinates to include source code coordinates in the output.
    • Number of statements to include the number of statements in an item in the output.
    • Number of common statements to include the number of common statements in an item in the output.
  • Understanding Paragraph or Program Analysis
    Explains how BDF performs paragraph and program analysis.
  • Understanding Common Part Analysis
    Explains how BDF performs common part analysis.
  • Understanding Data Flow Analysis
    Explains how BDF performs data flow analysis.
Parent topic: Using the Batch Duplicate Finder


Understanding Paragraph or Program Analysis

Explains how BDF performs paragraph and program analysis.

Select Paragraph Analysis or Program Analysis in the BDF search options if you want to compare items for their minimum similarity on the Levenshtein edit distance metric, namely, the number of operations needed to transform one item into the other, where an operation is an insertion, deletion, or substitution of a single character. The formula for this comparison type is:

output = 100 -(d/Max(a,b)) * 100

where d is the Levenshtein edit distance, a is the length of item A, and b is the length of item B.

Only the statements themselves, not their parameters, are considered in performing the comparison.

Enter the minimum similarity in the Minimum Similarity field. A value of 100 means that only items containing exactly the same statements in exactly the same order satisfy the test. Enter 0 to disable the test.

Tip: You cannot use this comparison type to find paragraphs that CONTAIN or are INCLUDED in other paragraphs.
Parent topic: Setting BDF Search Options


Understanding Common Part Analysis

Explains how BDF performs common part analysis.

Select Common Part Analysis in the BDF search options if you want to compare items for their minimum similarity on the longest common sequence (LCS) metric, namely, the number of characters in the longest sequence of characters the items have in common. The formula for this comparison type is:

output = (L/Min(a,b)) * 100

where L is the LCS, a is the length of item A, and b is the length of item B.

Only the statements themselves, not their parameters, are considered in performing the comparison.

Enter the minimum similarity in the Minimum Similarity field. A value of 100 means that only items containing exactly the same statements in exactly the same order satisfy the test. Enter 0 to disable the test.

Tip: Use this comparison type to narrow the items of interest to those with common character sequences.
Parent topic: Setting BDF Search Options


Understanding Data Flow Analysis

Explains how BDF performs data flow analysis.

For either Paragraph/Program Analysis or Common Part Analysis, select Perform Data Flow Analysis in the BDF search options to perform an additional test to determine whether similar items perform data flow operations with the same pattern. In data pattern analysis, if item A contains:

MOVE A TO B
MOVE B TO C

and item B contains:

MOVE X TO Y
MOVE Y TO Z

their data pattern is regarded as identical. Whereas if item A contains:

MOVE A TO B
MOVE B TO C

and item B contains:

MOVE X TO Y
MOVE X TO Z

their data pattern is regarded as different.

Parent topic: Setting BDF Search Options


Introducing Component Maker

Introduces Component Maker.

The Modernization Workbench Component Maker tool offers a variety of advanced algorithms for slicing logic from program source: all the code you need for a computation, for example, or the code you need to "specialize" a program based on the value of a variable. You can create a self-contained program, called a component, from the sliced code or simply generate a HyperView list of sliced constructs for further analysis. You can mark and colorize the constructs in the HyperView Source pane.

Both the component generation and list functions are supported in the full version of the Component Maker tool available to users of Application Architect. The list function only is supported in the restricted version of Component Maker, called Logic Analyzer, available to users of Application Analyzer.

  • Componentization Methods
    Provides an overview of componentization methods.
  • Componentization Outputs
    Describes componentization outputs.
  • Component Maker Basics
    Provides an overview of the Component Maker window.
Related information
Componentization Methods
Getting Started in the Components Pane


Componentization Methods

Provides an overview of componentization methods.

The supported componentization methods slice logic not only from program executables but associated include files as well. Dead Code Elimination and Entry Point Isolation are optimization tools built into the main methods and offered separately in case you want to use them on a standalone basis.

Component Maker does not follow CALL statements into other programs to determine whether passed data items are actually modified by those programs. It makes the conservative assumption that all passed data items are modified. That guarantees that no dependencies are lost.
  • Structure-Based Componentization
    Introduces structure-based componentization.
  • Computation-Based Componentization
    Introduces computation-based componentization.
  • Domain-Based Componentization
    Introduces domain-based componentization.
  • Event Injection
    Introduces event injection.
  • Dead Code Elimination (DCE)
    Introduces dead code elimination.
  • Entry Point Isolation
    Introduces entry point isolation.
  • Language Support
    Describes Component Maker language support.
Parent topic: Introducing Component Maker


Structure-Based Componentization

Introduces structure-based componentization.

Structure-Based Componentization lets you build a component from a range of inline code, Cobol paragraphs, for example. Use traditional structure-based componentization to generate a new component and its complement. A complement is a second component consisting of the original program minus the code extracted in the slice. Component Maker automatically places a call to the new component in the complement, passing it data items as necessary.

For Cobol programs, you can generate parameterized slices, in which the input and output variables required by the component are organized in group-level structures. These standard object-oriented data interfaces make it easier to deploy the transformed component in modern service-oriented architectures.

Tip: You typically repeat structure-based componentization in incremental fashion until all of the modules you are interested in have been created. For Cobol programs, you can avoid doing this manually by specifying multiple ranges in the same extraction. Component Maker automatically processes each range in the appropriate order.
Parent topic: Componentization Methods


Computation-Based Componentization

Introduces computation-based componentization.

Computation-Based Componentization lets you build a component that contains all the code necessary to calculate the value of a variable at a point in the program where it is used to populate a report attribute or screen. As with structure-based componentization, you can generate parameterized slices that make it easy to deploy the transformed component in distributed architectures.

For Cobol programs, you can use a technique called blocking to produce smaller, better-defined parameterized components. Component Maker will not include in the slice any part of the calculation that appears before the blocked statement. Fields from blocked input statements are treated as input parameters of the component.

Parent topic: Componentization Methods


Domain-Based Componentization

Introduces domain-based componentization.

Domain-Based Componentization lets you "specialize" a program based on the values of one or more variables. The specialized program is typically intended for reuse "in place," in the original application, but under new external circumstances.

After a change in your business practices, for example, a program that invokes processing for a "payment type" variable could be specialized on the value PAYMENT-TYPE = "CHECK". Component Maker isolates every process dependent on the CHECK value to create a functionally complete program that processes check payments only.

Two modes of domain-based componentization are offered:

  • In simplified mode, you set the specialization variable to its value anywhere in the program except a data port. The value of the variable is "frozen in memory." Operations that could change the value are ignored.
  • In advanced mode, you set the specialization variable to its value at a data port. Subsequent operations can change the value, following the data and control flow of the program.

Use the simplified mode when you are interested only in the final value of a variable. Use the advanced mode when you need to account for data coming into a variable.

Parent topic: Componentization Methods


Event Injection

Introduces event injection.

Event Injection lets you adapt a legacy program to asynchronous, event-based programming models like MQ Series. You specify candidate locations for event calls (reads/writes, screen transactions, or subprogram calls, for example), the type of operation the event call performs (put or get), and the text of the message. For a put operation, for example, Component Maker builds a component that sends the message and any associated variable values to a queue, where the message can be retrieved by monitoring applications.

Parent topic: Componentization Methods


Dead Code Elimination (DCE)

Introduces dead code elimination.

Dead Code Elimination is an option in each of the main component extraction methods, but you can also perform it on a standalone basis. For each program analyzed for dead code, standalone DCE generates a component that consists of the original source code minus any unreferenced data items or unreachable procedural statements.

Use the batch DCE feature to find dead code across your project. If you are licensed to use the Batch Refresh Process (BRP), you can use it to perform dead code elimination across a workspace.
Parent topic: Componentization Methods


Entry Point Isolation

Introduces entry point isolation.

Entry Point Isolation lets you build a component based on one of multiple entry points in a legacy program (an inner entry point in a Cobol program, for example). Component Maker extracts only the functionality and data definitions required for invocation from the selected point.

Entry Point Isolation is built into the main methods as an optional optimization tool. It's offered separately in case you want to use it on a standalone basis.

Parent topic: Componentization Methods


Language Support

Describes Component Maker language support.

The following table describes the extraction methods available for Component Maker-supported languages.

Method | COBOL | PL/I | Natural | RPG
Structure-based | Yes | Yes | No | Yes
Computation-based | Yes | No | Yes | No
Domain-based | Yes | Yes | No | No
Event-Injection | Yes | No | No | No
Dead Code Elimination | Yes | Yes | Yes | Yes
Entry Point Isolation | Yes | No | No | No
Parent topic: Componentization Methods


Componentization Outputs

Describes componentization outputs.

The first step in the componentization process, called extraction, generates the following outputs:

  • The source file that comprises the component.
  • An abstract repository object, or logical component, that gives you access to the source file in the workbench.
  • A HyperView list of sliced constructs, which you can mark and colorize in the HyperView Source pane.
For Logic Analyzer, sliced data declarations are not marked and colorized.

The second step, called conversion, registers the source files in your repository, creating repository objects for the generated components and their corresponding copybooks.

Component Maker lets you execute the extraction and conversion steps independently or in combination, depending on your needs:

  • If you want to analyze the components further, transform them, or even generate components from them, you will want to register the component source files in your repository and verify them, just as you would register and verify a source file from the original legacy application.
  • If you are interested only in deploying the components in your production environment, you can skip the conversion step and avoid cluttering your repository.

The figure below shows how the componentization outputs are represented in the Repository Browser after conversion and verification of a structure-based Cobol component called DaysInYearCalc. PRODUPD is the program the component was extracted from.

Parent topic: Introducing Component Maker


Component Maker Basics

Provides an overview of the Component Maker window.

Component Maker is a HyperView-based tool that you can invoke on a standalone basis or from within HyperView itself:

  • Start the tool in HyperView by selecting the program you want to slice in the Modernization Workbench Repository Browser and choosing Analyze > Interactive Analysis. In the HyperView window, choose View > Components.
    Choose View > Logic Analyzer if you are using Logic Analyzer.
  • Start the standalone tool by selecting the project that contains the programs you want to slice in the Repository Browser and choosing Architect > Logical Components. In the HyperView window, select the program you want to slice in the Objects pane.

The Components pane consists of a hierarchy of views that let you specify the logical components you want to manipulate:

  • The Types view lists the types of logical components you can create: structure-based, computation-based, domain-based, and so on.
  • The List view displays logical components of the selected type.
  • The Details view displays the details for the selected logical component in two tabs, Properties and Components. The Properties tab displays extraction properties for the logical component. The Components tab lists the files generated for the logical component.

The figure below shows a typical configuration of the Component Maker window. For HyperView usage, see Analyzing Programs in the workbench documentation set.

Component Maker Window

  • Getting Started in the Components Pane
    Provides an example of Component Maker usage.
  • Creating Components
    Describes how to create a component.
  • Extracting Components
    Describes how to extract a component.
  • Converting Components
    Describes how to convert components.
  • Deleting Components
    Describes how to delete a component.
  • Viewing the Text for Generated Files
    Describes how to view the text for generated files.
  • Restricting the Display to Program-Related Components
    Describes how to restrict the display to program-related components.
  • Working with HyperView Lists
    Describes how to work with HyperView lists of sliced constructs.
  • Viewing Audit Reports
    Describes how to view audit reports.
  • Generating Coverage Reports
    Describes how to generate a coverage report.
  • Exporting Logical Components
    Describes how to export a logical component.
  • Generating CICS Components
    Describes how to generate CICS components.
Parent topic: Introducing Component Maker


Getting Started in the Components Pane

Provides an example of Component Maker usage.

You do most of your work in Component Maker in the Components pane. To illustrate how you extract a logical component in the Components pane, let's look at the simplest task you can perform in Component Maker, Dead Code Elimination (DCE).

The following exercise deliberately avoids describing the properties and options you can set for DCE. See the relevant help topics for details.
STEPS:
  1. In the Components pane, double-click Dead Code Elimination. The view shown in the figure below opens. This view shows the DCE-based logical components created for the programs in the current project.
    Tip: Click the * button on the tool bar to restrict the display to logical components created for the selected program.

    Components Pane (Dead Code Elimination View)

  2. Select the program you want to analyze for dead code in the HyperView Objects pane and click the * button. To analyze the entire project of which the program is a part, click the * button.
  3. A dialog opens where you can enter the name of the new component in the text field. Click OK. Component Maker adds the new components to the list of components. If you selected batch mode, Component Maker creates a logical component for each program in the project, appending _n to the name of the component.
  4. Double-click a component to edit its properties. The view shown in the figure below opens. The Component of program field contains the name of the selected program.

    Components Pane (Properties Tab, Cobol)

  5. In the Entry Point to use field, click the link for the current selection and choose the entry point you want to use in the pop-up menu. To unset an entry point, click it and choose Unset in the pop-up menu.
    This field is shown only for Cobol programs.
  6. In the Description field, click the here link to open a text editor where you can enter a description of the component. The description appears in the box below the Description field in the Properties tab and in the Description property for the logical component repository object.
  7. Click the * button on the tool bar to navigate to the list of components, then repeat the procedure for each component you want to extract.
  8. In the list of components, select each component you want to extract and click the * button on the tool bar. You are prompted to confirm that you want to extract the components. Click OK.
  9. The Extraction Options dialog opens. Set extraction options as described in the relevant help topic. When you are satisfied with your choices, click Finish.
  10. Component Maker performs the extraction. You are notified that the extraction is complete. If the extraction completed without errors or warnings, click OK to continue. If the extraction completed with errors or warnings, click Yes to view the errors or warnings in the Activity Log. Otherwise, click No.
  11. Assuming the extraction executed without errors, the view shown in the figure below opens. Click the Components tab to display a list of the component source files that were generated for the logical component and an audit report if you requested one. Click an item in the list to view the read-only text for the item.

    Components Pane (Components Tab)

Parent topic: Component Maker Basics
Related information
Viewing Audit Reports
Setting Component Maker Options


Creating Components

Describes how to create a component.

To create a component, select the program you want to slice in the HyperView Objects pane. In the Types view, select the type of logical component you want to create and click the * button on the tool bar. (You can also click the * button in the List or Details view.) A dialog opens where you can enter the name of the new component in the text field. Click OK.

Parent topic: Component Maker Basics


Extracting Components

Describes how to extract a component.

To extract a single logical component, select the component you want to extract in the List view and click the * button on the tool bar. To extract multiple logical components, select the type of the components you want to extract in the Types view and click the * button. You are prompted to confirm that you want to continue. Click OK.

Tip: Logical components are converted as well as extracted if the Convert Resulting Components to Legacy Objects is set in the Component Conversion Options pane.
Parent topic: Component Maker Basics
Related information
Setting Component Conversion Options


Converting Components

Describes how to convert components.

To convert a single logical component, select the component you want to convert in the List view and click the * button on the tool bar. To convert multiple logical components, select the type of the components you want to convert in the Types view and click the * button. You are prompted to confirm that you want to continue. Click OK.

Parent topic: Component Maker Basics
Related information
Setting Component Conversion Options


Deleting Components

Describes how to delete a component.

To delete a logical component, select it in the List view and click the * button on the tool bar.

Deleting a logical component does not delete the component and copybook repository objects. You must delete these objects manually in the Repository Browser.
Parent topic: Component Maker Basics


Viewing the Text for Generated Files

Describes how to view the text for generated files.

To view the read-only text for a generated file, click the file in the list of generated files for in the Components tab.

Tip: You can also view the text for a generated file in the Modernization Workbench main window. In the Repository Browser Logical Component folder, click the component whose generated files you want to view.
Parent topic: Component Maker Basics


Restricting the Display to Program-Related Components

Describes how to restrict the display to program-related components.

To restrict the display to logical components of a given program, select the program and click the * button on the tool bar. The button is a toggle. Click it again to revert to the generic display.

Parent topic: Component Maker Basics


Working with HyperView Lists

Describes how to work with HyperView lists of sliced constructs.

When you extract a logical component, Component Maker generates a HyperView list of sliced constructs. The list has the same name as the component. You can view the list in the Logic Analyzer folder in Clipper.

To mark and colorize sliced constructs in the list, select the list in Clipper and click the * button on the tool bar. To mark and colorize sliced constructs in a single file, select the file in the List view and click the * button. To mark and colorize a single construct, select it in the File view and click the * button. Click the * button again to turn off marking and colorizing.

Parent topic: Component Maker Basics


Viewing Audit Reports

Describes how to view audit reports.

An audit report contains a list of changed and deleted lines in the source files (including copybooks) from which a logical component was extracted. The report has a name of the form <component>.audit.txt. Click the report in the Components tab to view its text.

An audit report optionally includes reason codes explaining why a line was changed or deleted. A reason code is a number keyed to the explanation for a change (for example, reason code 12 for computation-based componentization is RemoveUnusedVALUEs).

Audit Report for MQOrdrent1

Parent topic: Component Maker Basics
Related information
Setting Document Options


Generating Coverage Reports

Describes how to generate a coverage report.

A coverage report shows the extent to which a source program has been "componentized":

  • The top-left pane lists each component of a given type (structure-based, computation-based, and so on) extracted from the program.
  • The bottom-left pane lists the paragraphs in the program. Click on a paragraph to navigate to it in the righthand pane.
  • The righthand pane displays the text of the program with extracted code shaded in pink. The numbers to the left of the extracted code identify the component to which it was extracted.

To generate coverage reports, click the * button on the Component Maker tool bar. The reports are listed in the Generated Document folder in the Repository Browser. Report names are of the form <program> -<method>-Coverage. Double-click a report to view it in a Web browser.

Reports are created for each program in the current project.

Coverage Report for PRODUPD Structure-Based Components

Parent topic: Component Maker Basics
Related information
Setting Document Options


Exporting Logical Components

Describes how to export a logical component.

To move or copy the source files associated with a logical component (including any complement or copybooks) from the Modernization Workbench area to a specified location on your file system, select the component In the Repository Browser Logical Component folder and choose Architect > Export. A standard dialog appears where you can specify the destination for the source files. Select Move files if you want to move the files rather than copy them.

Parent topic: Component Maker Basics


Generating CICS Components

Describes how to generate CICS components.

Component Maker let you generate structure- and computation-based Cobol components as CICS programs, with COMMAREAS for parameter exchange. That means the component can be called through a CICS LINK or by some other middleware such as IBM's ECI.

A CICS component can be run directly on mainframes:

  • The component's parameters, whether original (from USING) or created by Component Extraction, are packaged under the CICS variable DFHCOMMAREA. There is no PROCEDURE DIVISION USING phrase in the component.
  • At all program points where the original program could exit, the component exits through a CICS RETURN statement. Any STOP RUN is replaced by CICS RETURN.

To generate CICS components, choose Create CICS Program in the interface component extraction options.

Parent topic: Component Maker Basics
Related information
Setting Interface Options


Setting Component Maker Options

Provides an overview of Component Maker options.

It's a good idea to become familiar with the component extraction options before beginning your work in Component Maker. Each extraction method has a different set of options, and each set differs for the supported object types. Extraction options are project-based, so they apply to every program in the current Modernization Workbench project. Only relevant options are displayed for the restricted version of Component Maker, called Logic Analyzer, available to users of Application Analyzer.

For computation- and domain-based componentization of Cobol programs, and for structure-based componentization with parameterized slices, you must set Perform Program Analysis in the project verification options before verifying the program you want to slice.

You can set Component Maker extraction options in the standard Project Options window or in the extraction options dialog that opens when you create a component. To open the standard Project Options window, choose Tools > Project Options. In the Project Options window, click the Component Maker tab.

  • Setting General Options
    Describes how to set General extraction options.
  • Setting Interface Options
    Describes how to set Interface extraction options.
  • Setting Optimize Options
    Describes how to set Optimize extraction options.
  • Setting Document Options
    Describes how to set Document extraction options.
  • Setting Component Type-Specific Options
    Introduces component type--specific extraction options.
  • Setting Component Conversion Options
    Describes how to set Component Conversion extraction options.
Related information
Setting General Options
Setting Interface Options
Setting Optimize Options
Setting Document Options
Setting Component Type-Specific Options
Setting Component Conversion Options


Setting General Options

Describes how to set General extraction options.

The table below describes the Component Maker General extraction options.

Option | Language | Description
Add Program Name as Prefix | Cobol, Natural, PL/I, RPG | Prepend the name of the sliced program to the component name you specified when you created the component, in the form <program>$<component>.
Generate Slice | Cobol, Natural, PL/I, RPG | Generate both a HyperView list of sliced constructs and a component.
Keep Legacy Copybooks | Cobol, RPG | Do not generate modified copybooks for the component. Modified copybooks have names of the form <copybook>-<component>-n, where n is a number ensuring the uniqueness of the copybook name when multiple instances of a copybook are generated for the same component. Component Maker issues a warning if including the original copybooks in the component would result in an error.
Keep Legacy Includes | PL/I | Do not generate modified program include files for the component. The layout and commentary of the sliced program is preserved.
Keep Legacy Macros | PL/I | Do not expand macros for the component. The layout and commentary of the sliced program is preserved.
Preserve Legacy Includes | Natural | Do not generate modified program include files for the component.
Rename Program Entries | Cobol | Prepend the name of the component to inner entry points, in the form <component>-<entrypoint>. This ensures that entry point names are unique and that the Modernization Workbench parser can verify the component successfully. Unset this option if you need to preserve the original names of the inner entry points.
Parent topic: Setting Component Maker Options


Setting Interface Options

Describes how to set Interface extraction options.

The table below describes the Component Maker Interface extraction options.

Option | Language | Description
Blocking | Cobol | If you are performing a parameterized computation-based extraction and want to use blocking, click the More button. A dialog opens, where you can select the blocking option and the types of statements you want to block. Choose Use Blocking from Component Definitions if you want to block statements in a HyperView list.
Create CICS Program | Cobol | Create COMMAREAS for parameter exchange in generated slices.
Generate Parameterized Components | Cobol | Extract parameterized slices. If you select this option for a structure-based extraction, you must set the Range Only option in the Component Type Specific pane.
Parent topic: Setting Component Maker Options
Related information
Generating CICS Components


Setting Optimize Options

Describes how to set Optimize extraction options.

The table below describes the Component Maker Optimize extraction options.

Option | Language | Description
No changes | Cobol, Natural, RPG | Do not remove unused data items from the component.
Preserve Original Paragraphs Cobol Generate paragraph labels even for paragraphs that are not actually used in the source code (for example, empty paragraphs for which there are no PERFORMs).
This option also affects refactoring. When the option is set, paragraphs in the same "basic block" are defragmented separately. Otherwise, they are defragmented as a unit.
Remove Redundant NEXT SENTENCE Cobol Remove NEXT SENTENCE clauses by changing the bodies of corresponding IF statements, such that:
IF A=1
    NEXT SENTENCE
ELSE
    ...
END-IF.

is generated as:

IF NOT (A=1)
    ...
END-IF.
Remove/Replace Unused Fields with FILLERs Cobol, Natural, RPG Remove unused any-level structures and replace unused fields in a used structure with FILLERs. Set this option if removing a field completely from a structure would adversely affect memory distribution.
If you select Keep Legacy copybooks in the General component extraction options, Component Maker removes or replaces with FILLERs only unused inline data items.
Remove Unreachable Code | Cobol, RPG | Remove unreachable procedural statements.
Remove Unused Any-Level Structures Cobol, Natural, RPG Remove unused structures at any data level, if all their parents and children are unused. For the example below, D, E, F, and G are removed:
DEFINE DATA LOCAL
1 #A
  2 #B
    3 #C
  2 #D
    3 #E
    3 #F
1 #G
Remove Unused Level-1 Structures Cobol, Natural, RPG Remove only unused level-1 structures, and then only if all their children are unused. If, in the following example, only B is used, only G is removed:
DEFINE DATA LOCAL
1 #A
  2 #B
    3 #C
  2 #D
    3 #E
    3 #F
1 #G
Replace Section PERFORMs by Paragraph PERFORMs | Cobol | Replace PERFORM section statements by equivalent PERFORM paragraph statements.
Roll-Up Nested IFs Cobol Roll up embedded IF statements in the top-level IF statement, such that:
IF A=1
    IF B=2

is generated as:

IF (A=1) AND (B=2)
Parent topic: Setting Component Maker Options


Setting Document Options

Describes how to set Document extraction options.

The table below describes the Component Maker Document extraction options.

Option | Language | Description
Comment-out Sliced-off Legacy Code | Cobol, RPG | Retain but comment out unused code in the component source. In the Comment Prefix field, enter descriptive text (up to six characters) for the commented-out lines.
Emphasize Component/Include in Coverage Report | Cobol, Natural, PL/I, RPG | Generate a HyperView list of sliced constructs and colorize the constructs in the Coverage Report.
Generate Audit Report | Cobol | Generate an audit report.
Generate Support Comments | Cobol, RPG | Include comments in the component source that identify the component properties you specified, such as the starting and ending paragraphs for a structure-based Cobol component.
Include Reason Codes | Cobol | Include reason codes in the audit report explaining why a line was changed or deleted. Generating reason codes is very memory-intensive and may cause crashes for extractions from large programs.
List Options in Component Header and in Separate Document | Cobol, RPG | Include a list of extraction option settings in the component header and in a separate text file. The text file has a name of the form <component>.BRE.options.txt.
Mark Modified Legacy Code | Cobol, RPG | Mark modified code in the component source. In the Comment Prefix field, enter descriptive text (up to six characters) for the modified lines.
Print Calculated Values as Comments | Cobol | For domain-based component extraction only, print the calculated values of variables as comments. Alternatively, you can substitute the calculated values of variables for the variables themselves.
Use Left Column for Marks | Cobol, RPG | Place the descriptive text for commented-out or modified lines in the lefthand column of the line. Otherwise, the text appears in the righthand column.
Parent topic: Setting Component Maker Options
Related information
Viewing Audit Reports
Generating Coverage Reports


Setting Component Type-Specific Options

Introduces component type--specific extraction options.

Component type-specific extraction options determine how Component Maker performs tasks specific to each componentization method.

  • Setting Structure-Based Type-Specific Options
    Describes how to set structure-based type-specific extraction options.
  • Setting Computation-Based Type-Specific Options
    Describes how to set computation-based type-specific extraction options.
  • Setting Domain-Based Type-Specific Options
    Describes how to set domain-based component extraction options.
  • Setting Event Injection Type-Specific Options
    Describes how to set event injection component extraction options.
Parent topic: Setting Component Maker Options


Setting Structure-Based Type-Specific Options

Describes how to set structure-based type-specific extraction options.

The table below describes the Component Maker structure-based type-specific extraction options.

Option | Language | Description
Dynamic Call | Cobol | Generate in the complement a dynamic call to the component. The complement will call a string variable that must later be set outside the complement to the name of the component.
Ensure Consistent Access to External Resources | Cobol | Monitor the integrity of data flow in the ranges you are extracting. If you select this option, for example, an extraction will fail if an SQL cursor used in the component is open in the complement.
Range Only | Cobol | Do not generate a complement. You must set this option to generate parameterized slices.
Restrict User Ranges to PERFORMed Ones | Cobol | Do not extract paragraphs that do not have a corresponding PERFORM statement. This option is useful if you want to limit components created with the Paragraph Pair or Section methods to PERFORMed paragraphs.
Suppress Errors | Cobol | Perform a "relaxed extraction," in which errors that would ordinarily cause the extraction to fail are ignored, and comments describing the errors are added to the component source. This option is useful when you want to review extraction errors in component source.
Parent topic: Setting Component Type-Specific Options


Setting Computation-Based Type-Specific Options

Describes how to set computation-based type-specific extraction options.

The table below describes the Component Maker computation-based type-specific extraction options.

Option | Language | Description
Generate HTML Trace | Cobol | Generate an HTML file with an extraction trace. The trace has a name of the form <component>.trace. To view the trace, click the logical component for the extraction in the Repository Browser Logical Component folder. Double-click the trace file to view it in a Web browser.
Statement | Cobol | Perform statement-based component extraction.
Variable | Cobol | Perform variable-based component extraction. Even if you select variable-based extraction, Component Maker performs statement-based extraction if the variable you slice on is not an input variable for its parent statement: that is, if the statement writes to rather than reads from the variable.
Parent topic: Setting Component Type-Specific Options


Setting Domain-Based Type-Specific Options

Describes how to set domain-based component extraction options.

The table below describes the Component Maker domain-based type-specific extraction options.

Option | Language | Description
Maximum Number of Variable's Values | Cobol | The maximum number of values to be calculated for each variable. Limit is 200. The lower the maximum, the better performance and memory usage you can expect.
Maximum Size of Variable to Be Calculated | Cobol | Maximum size in bytes for each variable value to be calculated. The lower the maximum, the better performance and memory usage you can expect.
Multiple Pass Cobol, PL/I Evaluate conditional logic again after detecting dead branches. Because the ELSE branch of the first IF below is dead, for example, the second IF statement can be resolved in a subsequent pass:
MOVE 0 TO X.
IF X EQUAL 0 THEN
   MOVE 1 TO Y
ELSE/p>
   MOVE 2 TO Y.
IF Y EQUAL 2 THEN...
ELSE...
Multi-pass processing is very resource-intensive, and not recommended for extractions from large programs.
Remove Unused Assignments | Cobol, PL/I | Exclude from the component assignments that cannot affect the computation (typically, an assignment after which the variable is not used until the next assignment or port).
Remove Unused Procedures | PL/I | Exclude unused procedures from the component.
Replace Procedure Calls by Return Values | PL/I | Substitute the return values of variables for procedure calls in components.
Replace Variables by Their Calculated Values Cobol Substitute the calculated values of variables for the variables themselves. Alternatively, you can print the values as comments.
Notice how the options in Remove Unused Assignments and Replace Variables by Their Calculated Values can interact. If both options are set, then the first assignment in the following fragment will be removed:
MOVE 1 TO X.
DISPLAY X.
MOVE 2 TO X.
Single Pass | Cobol, PL/I | Evaluate conditional logic in one pass.
VALUEs Initialize Data Items | Cobol | Set variables declared with VALUE clauses to their initial values. Otherwise, VALUE clauses are ignored.
Parent topic: Setting Component Type-Specific Options


Setting Event Injection Type-Specific Options

Describes how to set event injection component extraction options.

The table below describes the Component Maker event injection type-specific extraction options.

Option | Language | Description
Error Handling | Cobol | The type of statement to execute in case of an error connecting to middleware.
MQ | Cobol | Use an IBM MQ Series template for event injection.
MQPUT | Cobol | Use the MQPUT method.
MQPUT1 | Cobol | Use the MQPUT1 method.
Queue Manager | Cobol | The name of the queue manager.
Target Queue Name | Cobol | The name of the target queue.
User Specified Event | Cobol | The name of the event to inject at the specified injection points.
Parent topic: Setting Component Type-Specific Options


Setting Component Conversion Options

Describes how to set Component Conversion extraction options.

The table below describes the Component Maker Component Conversion extraction options.

Option | Language | Description
Convert Resulting Components | Cobol, Natural, PL/I, RPG | Convert as well as extract the logical component.
Keep Old Legacy Objects | Cobol, Natural, PL/I, RPG | Preserve existing repository objects for the converted component (copybooks, for example). If you select this option, delete the repository object for the component itself before performing the extraction, or the new component object will not be created.
Remove Components after Successful Conversion | Cobol, Natural, PL/I, RPG | Remove logical components from the current project after new component objects are created.
Replace Old Legacy Objects | Cobol, Natural, PL/I, RPG | Replace existing repository objects for the converted component. This option controls conversion behavior even when you perform the conversion independently from the extraction. If you are converting a component independently and want to change this setting, select Convert Resulting Components to Legacy Objects, specify the behavior you want, and then deselect Convert Resulting Components to Legacy Objects.
Parent topic: Setting Component Maker Options
Related information
Extracting Components
Converting Components


Extracting Structure-Based Components

Introduces structure-based componentization.

Structure-Based Componentization lets you build a component from a range of inline code, Cobol paragraphs, for example. Use traditional structure-based componentization to generate a new component and its complement. A complement is a second component consisting of the original program minus the code extracted in the slice. Component Maker automatically places a call to the new component in the complement, passing it data items as necessary.

Alternatively, you can generate parameterized slices, in which the input and output variables required by the component are organized in group-level structures. These standard object-oriented data interfaces make it easy to deploy the transformed component in modern service-oriented architectures.

  • Understanding Ranges
    Offers background on ranges.
  • Understanding Parameterized Slices
    Offers background on parameterized slices.
  • Extracting Structure-Based Cobol Components
    Describes how to extract structure-based Cobol components.
  • Extracting Structure-Based PL/I Components
    Describes how to extract structure-based PL/I components.
  • Extracting Structure-Based RPG Components
    Describes how to extract structure-based RPG components.
Related information
Understanding Ranges
Understanding Parameterized Slices


Understanding Ranges

Offers background on ranges.

When you extract a structure-based component from a program, you specify the range of code you want to include in the component. The range varies: for Cobol programs, a range of paragraphs; for PL/I programs, a procedure; for RPG programs, a subroutine or procedure.

Tip: You typically repeat Structure-Based Componentization in incremental fashion until all the modules you are interested in have been created. For Cobol programs, you can avoid doing this manually by specifying multiple ranges in the same extraction. Component Maker automatically processes each range in the appropriate order. No complements are generated.
  • Specifying Ranges for Cobol Programs
    Describes how to specify ranges for Cobol programs.
  • Specifying Ranges for PL/I Programs
    Describes how to specify ranges for PL/I programs.
  • Specifying Ranges for RPG Programs
    Describes how to specify ranges for RPG programs.
Parent topic: Extracting Structure-Based Components
Related information
Understanding Parameterized Slices


Specifying Ranges for Cobol Programs

Describes how to specify ranges for Cobol programs.

For Cobol programs, you specify the paragraphs in the range for structure-based component extraction in one of three ways:

  • Select a paragraph PERFORM statement to set the range to the performed paragraph or paragraphs. Component Maker includes each paragraph in the execution path between the first and last paragraphs in the range, except when control is transferred by a PERFORM statement or by an implicit RETURN-from-PERFORM statement.
  • Select a pair of paragraphs to set the range to the selected paragraphs. You are responsible for ensuring a continuous flow of control from the first to the last paragraph in the range.
  • Select a section to set the range to the paragraphs in the section.
For traditional structure-based COBOL components, Component Maker inserts in the complement the labels of the first and last paragraphs in the range. The first paragraph is replaced in the complement with a CALL statement followed by a GO TO statement. The last paragraph is always empty.

The GO TO statement transfers control to the last paragraph. If the GO TO statement and its target paragraph are not required to ensure correct call flow, they are omitted.

Parent topic: Understanding Ranges
Related information
Extracting Structure-Based Cobol Components
Understanding Parameterized Slices


Specifying Ranges for PL/I Programs

Describes how to specify ranges for PL/I programs.

For PL/I programs, the range you specify for structure-based component extraction is an internal procedure that Component Maker extracts as an external procedure. The slice contains the required parameters for global variables.

Parent topic: Understanding Ranges
Related information
Extracting Structure-Based PL/I Components


Specifying Ranges for RPG Programs

Describes how to specify ranges for RPG programs.

For RPG programs, the range you specify for structure-based component extraction is a subroutine or procedure to extract as a component.

Parent topic: Understanding Ranges
Related information
Extracting Structure-Based RPG Components


Understanding Parameterized Slices

Offers background on parameterized slices.

For Cobol programs, you can generate parameterized slices, in which the input and output variables required by the component are organized in group-level structures. The component contains all the code required for input/output operations.

To extract a parameterized slice, select the Generate Parameterized Components option in the extraction options dialog. Note that you cannot generate a complement for a parameterized Cobol slice.

For parameterized structure- and computation-based componentization of Cobol programs, you must select the Perform Program Analysis and Enable Parameterization of Components options in the project verification options.
  • Cobol Naming Conventions
    Describes Cobol naming conventions for parameterized slices.
  • Parameterization Example
    Provides an example of a parameterized slice.
Parent topic: Extracting Structure-Based Components
Parent topic: Extracting Computation-Based Components
Related information
Understanding Ranges
Extracting Structure-Based Cobol Components
Specifying Ranges for Cobol Programs
Extracting Computation-Based Cobol Components


Cobol Naming Conventions

Describes Cobol naming conventions for parameterized slices.

  • Component input structures have names of the form BRE-INP-<STRUCT-NAME>. Input fields have names of the form BRE-I- <FIELD-NAME>.
  • Component Output structures have names of the form BRE-OUT- STRUCT-NAME. Output fields have names of the form BRE-O- <FIELD-NAME>.
Parent topic: Understanding Parameterized Slices


Parameterization Example

Provides an example of a parameterized slice.

The example below illustrates how Component Maker generates parameterized slices. Consider a Cobol program that contains the following structures:

WORKING-STORAGE SECTION.
  01 A
    03 A1
    03 A2
  01 B
    03 B1
    03 B2
    03 B4

Suppose that only A1 has been determined by Component Maker to be an input parameter, and only B1 and B2 to be output parameters. Suppose further that the component is extracted with input and output data structures that use the default names, BRE-INP-INPUT-STRUCTURE and BRE-OUT-OUTPUT-STRUCTURE, respectively, and with the default Optimization options set. The component contains the following code:

WORKING-STORAGE SECTION.
  01 A
    03 A1
    03 A2
  01 B
    03 B1
    03 B2
    03 B4
LINKAGE SECTION.
  01 BRE-INP-INPUT-STRUCTURE
    03 BRE-I-A
      06 BRE-I-A1
01 BRE-OUT-OUTPUT-STRUCTURE
    03 BRE-O-B
      06 BRE-O-B1
      06 BRE-O-B2
PROCEDURE DIVISION
  USING BRE-INP-INPUT-STRUCTURE BRE-OUT-OUTPUT-STRUCTURE.
BRE-INIT-SECTION SECTION.
  PERFORM BRE-COPY-INPUT-DATA.
  ........................
  ....(Business Logic)....
  ........................
  *Modernization Workbench added statement
  GO TO BRE-EXIT-PROGRAM.
BRE-EXIT-PROGRAM-SECTION SECTION.
  BRE-EXIT-PROGRAM.
    PERFORM BRE-COPY-OUTPUT-DATA.
    GOBACK.
BRE-COPY-INPUT-DATA.
  MOVE BRE-I-A TO A.
BRE-COPY-OUTPUT-DATA.
  MOVE B TO BRE-O-B.
Parent topic: Understanding Parameterized Slices


Extracting Structure-Based Cobol Components

Describes how to extract structure-based Cobol components.

Follow the instructions below to extract structure-based Cobol components.

STEPS:
  1. Select the program you want to slice in the HyperView Objects pane and click the * button. A dialog opens where you can enter the name of the new component in the text field. Click OK. Component Maker adds the new component to the list of components. Double-click the component to edit its properties.
  2. In the Paragraphs field, click the here link. Choose one of the following methods in the pop-up menu:
    • Paragraph Perform to set the range to the paragraph or paragraphs performed by the selected PERFORM statement. Select the PERFORM statement in the Source pane, then click the link for the current selection and choose Set in the pop-up menu.
    • Pair of Paragraphs to set the range to the selected paragraphs. Select the first paragraph in the pair in the Source pane, then click the link for the current selection in the From field and choose Set in the drop-down menu. Select the second paragraph in the pair, then click the link for the current selection in the To field and choose Set in the pop-up menu.
      Tip: You can set the From and To fields to the same paragraph.
    • Section to set the range to the paragraphs in the section. Select the section in the Source pane, then click the link for the current selection and choose Set in the pop-up menu.
    To delete a range, select the link for the numeral that identifies the range and choose Delete in the pop-up menu. To unset a PERFORM, paragraph, or section, click it and choose Unset in the pop-up menu. To navigate quickly to a PERFORM, paragraph, or section in the source, click it and choose Locate in the pop-up menu.
  3. Repeat this procedure for each range you want to extract. You can use any combination of methods. The figure below shows how the properties tab might look for a multi-range extraction.

    Properties Tab (Multi-Range Cobol Extraction)

  4. In the Entry Point to use field, click the link for the current selection and choose the entry point you want to use in the pop-up menu. To unset an entry point, click it and choose Unset in the pop-up menu.
  5. In the Description field, click the here link to open a text editor where you can enter a description of the component. The description appears in the box below the Description field in the Properties tab and in the Description property for the logical component repository object.
  6. Click the * button on the tool bar to start extracting the logical component. You are prompted to confirm that you want to continue. Click OK.
  7. The Extraction Options dialog opens. Set options for the extraction and click Finish.
  8. Component Maker performs the extraction. You are notified that the extraction is complete. If the extraction completed without errors or warnings, click OK to continue. If the extraction completed with errors or warnings, click Yes in the notification dialog to view the errors or warnings in the Activity Log. Otherwise, click No.
Parent topic: Extracting Structure-Based Components
Related information
Specifying Ranges for Cobol Programs
Understanding Parameterized Slices


Extracting Structure-Based PL/I Components

Describes how to extract structure-based PL/I components.

Follow the instructions below to extract structure-based PL/I components.

STEPS:
  1. Select the program you want to slice in the HyperView Objects pane and click the * button. A dialog opens where you can enter the name of the new component in the text field. Click OK. Component Maker adds the new component to the list of components. Double-click the component to edit its properties.
  2. Select the program entry point in the Source pane. In the Point field, click the link for the current selection and choose Set in the pop-up menu.
    To unset an entry point, click it and choose Unset in the pop-up menu. To navigate quickly to an entry point in the source, click it and choose Locate in the pop-up menu.
  3. In the Description field, click the here link to open a text editor where you can enter a description of the component. The description appears in the box below the Description field in the Properties tab and in the Description property for the logical component repository object.
  4. Click the * button on the tool bar to start extracting the logical component. You are prompted to confirm that you want to continue. Click OK.
  5. The Extraction Options dialog opens. Set options for the extraction and click Finish.
  6. Component Maker performs the extraction. You are notified that the extraction is complete. If the extraction completed without errors or warnings, click OK to continue. If the extraction completed with errors or warnings, click Yes in the notification dialog to view the errors or warnings in the Activity Log. Otherwise, click No.
Parent topic: Extracting Structure-Based Components
Related information
Specifying Ranges for PL/I Programs


Extracting Structure-Based RPG Components

Describes how to extract structure-based RPG components.

Follow the instructions below to extract structure-based RPG components.

STEPS:
  1. Select the program you want to slice in the HyperView Objects pane and click the * button. A dialog opens where you can enter the name of the new component in the text field. Click OK. Component Maker adds the new component to the list of components. Double-click the component to edit its properties.
  2. Select the subroutine or procedure you want to slice in the Source pane. In the Point field, click the link for the current selection and choose Set in the pop-up menu.
    To unset an entry point, click it and choose Unset in the pop-up menu. To navigate quickly to an entry point in the source, click it and choose Locate in the pop-up menu.
  3. In the Description field, click the here link to open a text editor where you can enter a description of the component. The description appears in the box below the Description field in the Properties tab and in the Description property for the logical component repository object.
  4. Click the * button on the tool bar to start extracting the logical component. You are prompted to confirm that you want to continue. Click OK.
  5. The Extraction Options dialog opens. Set options for the extraction and click Finish.
  6. Component Maker performs the extraction. You are notified that the extraction is complete. If the extraction completed without errors or warnings, click OK to continue. If the extraction completed with errors or warnings, click Yes in the notification dialog to view the errors or warnings in the Activity Log. Otherwise, click No.
Parent topic: Extracting Structure-Based Components
Related information
Specifying Ranges for RPG Programs


Extracting Computation-Based Components

Introduces computation-based componentization.

Computation-Based Componentization lets you build a component that contains all the code necessary to calculate the value of a variable at a point in the program where it is used to populate a report attribute or screen. You can generate parameterized computation-based slices that make it easy to deploy the transformed component in distributed architectures.

  • Understanding Variable-Based Extraction
    Offers background on variable-based extraction.
  • Understanding Blocking
    Offers background on blocking.
  • Understanding Parameterized Slices
    Offers background on parameterized slices.
  • Extracting Computation-Based Cobol Components
    Describes how to extract computation-based Cobol components.
  • Extracting Computation-Based Natural Components
    Describes how to extract computation-based Natural components.
Related information
Understanding Variable-Based Extraction
Understanding Blocking
Understanding Parameterized Slices


Understanding Variable-Based Extraction

Offers background on variable-based extraction.

When you perform a computation-based extraction, you can slice by statement or by variable. What's the difference? Suppose you are interested in calculations involving the variable X in the example below:

MOVE 1 TO X
MOVE 1 TO Y
DISPLAY X Y.

If you perform statement-based extraction (if you slice on the statement DISPLAY X Y), all three statements will be included in the component. If you perform variable-based extraction (if you slice on the variable X), only the first and third statements will be included. In variable-based extraction, that is, Component Maker tracks the dependency between X and Y, and having determined that the variables are independent, excludes the MOVE 1 to Y statement.

If you slice on a variable for a Cobol component, you must select Variable in the Component Type Specific options for computation-based extraction.
Parent topic: Extracting Computation-Based Components
Related information
Extracting Computation-Based Cobol Components
Extracting Computation-Based Natural Components


Understanding Blocking

Offers background on blocking.

For Cobol programs, you can use a technique called blocking to produce smaller, better-defined parameterized components. Component Maker will not include in the slice any part of the calculation that appears before the blocked statement. Fields from blocked input statements are treated as input parameters of the component.

Consider the following fragment:

INP1.
  DISPLAY "INPUT YEAR (1600-2099)".
  ACCEPT YEAR.
   CALL 'PROG' USING YEAR.
  IF YEAR > 2099 OR YEAR < 1600 THEN
   DISPLAY "WRONG YEAR".

If the CALL statement is selected as a block, then both the CALL and ACCEPT statements from the fragment are not included in the component, and YEAR is passed as a parameter to the component.

Tip: Specify blocking in the blocking dialog accessed from the Interface options pane.
Parent topic: Extracting Computation-Based Components
Related information
Extracting Computation-Based Cobol Components


Extracting Computation-Based Cobol Components

Describes how to extract computation-based Cobol components.

Follow the instructions below to extract computation-based Cobol components.

STEPS:
  1. Select the program you want to slice in the HyperView Objects pane and click the * button. A dialog opens where you can enter the name of the new component in the text field. Click OK. Component Maker adds the new component to the list of components. Double-click the component to edit its properties.
  2. Select the variable or statement you want to slice on in the Source pane. In the Point field, click the link for the current selection and choose Set in the pop-up menu.
    If you slice on a variable, you must select Variable in the Component Type Specific options for computation-based extraction.

    To unset a variable or statement, click it and choose Unset in the pop-up menu. To navigate quickly to a variable or statement in the source, click it and choose Locate in the pop-up menu.

  3. In the Entry Point to use field, click the link for the current selection and choose the entry point you want to use in the pop-up menu. To unset an entry point, click it and choose Unset in the pop-up menu.
  4. If you plan to specify Use Blocking from Component Definitions in the Interface options, select the list of statements to block in Clipper, then click the link for the current selection in the Block statements field and choose Set in the drop-down menu.
    Choose Show to display the current list in Clipper. Choose (none) to unset the list. For Clipper usage, see Analyzing Programs in the workbench documentation set.
  5. In the Description field, click the here link to open a text editor where you can enter a description of the component. The description appears in the box below the Description field in the Properties tab and in the Description property for the logical component repository object.
  6. Click the * button on the tool bar to start extracting the logical component. You are prompted to confirm that you want to continue. Click OK.
  7. The Extraction Options dialog opens. Set options for the extraction and click Finish.
  8. Component Maker performs the extraction. You are notified that the extraction is complete. If the extraction completed without errors or warnings, click OK to continue. If the extraction completed with errors or warnings, click Yes in the notification dialog to view the errors or warnings in the Activity Log. Otherwise, click No.
Parent topic: Extracting Computation-Based Components
Related information
Understanding Variable-Based Extraction
Understanding Blocking
Understanding Parameterized Slices


Extracting Computation-Based Natural Components

Describes how to extract computation-based Natural components.

Follow the instructions below to extract computation-based Natural components.

STEPS:
  1. Select the program you want to slice in the HyperView Objects pane and click the * button. A dialog opens where you can enter the name of the new component in the text field. Click OK. Component Maker adds the new component to the list of components. Double-click the component to edit its properties.
  2. Select the variable or statement you want to slice on in the Source pane. In the Point field, click the link for the current selection and choose Set in the pop-up menu.
    If you slice on a variable, you must select Variable in the Component Type Specific options for computation-based extraction.

    To unset a variable or statement, click it and choose Unset in the pop-up menu. To navigate quickly to a variable or statement in the source, click it and choose Locate in the pop-up menu.

  3. In the Description field, click the here link to open a text editor where you can enter a description of the component. The description appears in the box below the Description field in the Properties tab and in the Description property for the logical component repository object.
  4. Click the * button on the tool bar to start extracting the logical component. You are prompted to confirm that you want to continue. Click OK.
  5. The Extraction Options dialog opens. Set options for the extraction and click Finish.
  6. Component Maker performs the extraction. You are notified that the extraction is complete. If the extraction completed without errors or warnings, click OK to continue. If the extraction completed with errors or warnings, click Yes in the notification dialog to view the errors or warnings in the Activity Log. Otherwise, click No.
Parent topic: Extracting Computation-Based Components
Related information
Understanding Variable-Based Extraction


Extracting Domain-Based Components

Introduces domain-based componentization.

Domain-Based Componentization lets you "specialize" a program based on the values of one or more variables. The specialized program is typically intended for reuse "in place," in the original application but under new external circumstances.

After a change in your business practices, for example, a program that invokes processing for a "payment type" variable could be specialized on the value PAYMENT-TYPE = "CHECK". Component Maker isolates every process dependent on the CHECK value to create a functionally complete program that processes check payments only.

Two modes of domain-based componentization are offered:

  • In simplified mode, you set the specialization variable to its value anywhere in the program except a data port. The value of the variable is "frozen in memory." Operations that could change the value are ignored.
  • In advanced mode, you set the specialization variable to its value at a data port. Subsequent operations can change the value, following the data and control flow of the program.

Use the simplified mode when you are interested only in the final value of a variable, or when a variable never receives a value from outside the program. Use the advanced mode when you need to account for data coming into a variable (when the variable's value is repeatedly reset, for example). The next two sections describe these modes in detail.

Tip: Component Maker lets you set the specialization variable to a range of values (between 1 and 10 inclusive, for example) or to multiple values (not only CHECK but CREDIT-CARD, for example). You can also set the variable to all values not in the range or set of possible values (every value but CHECK and CREDIT-CARD, for example).

  • Understanding Program Specialization in Simplified Mode
    Offers background on program specialization in simplified mode.
  • Understanding Program Specialization in Advanced Mode
    Offers background on program specialization in advanced mode.
  • Understanding Program Specialization Lite
    Offers background on program specialization lite.
  • Extracting Domain-Based Cobol Components
    Describes how to extract domain-based Cobol components.
  • Extracting Domain-Based PL/I Components
    Describes how to extract domain-based PL/I components.
Related information
Understanding Program Specialization in Simplified Mode
Understanding Program Specialization in Advanced Mode
Understanding Program Specialization Lite


Understanding Program Specialization in Simplified Mode

Offers background on program specialization in simplified mode.

In the simplified mode of program specialization, you set the specialization variable to its value anywhere in the program except a data port. The value of the variable is "frozen in memory." The table below shows the result of using the simplified mode to specialize on the values
        CURYEAR = 1999,
        MONTH = 1,
        CURMONTH = 12,
DAY1 = 4, and
        CURDAY = 7.

Source Program Specialized Program Comment
INP3.
DISPLAY "INPUT DAY".
ACCEPT DAY1.
MOVE YEAR TO tmp1.
PERFORM ISV.
IF DAY1 > tt of MONTHS
( MONTH ) OR DAY1 < 1
THEN
DISPLAY "WRONG DAY".

INP3.
DISPLAY "INPUT DAY".
MOVE YEAR TO tmp1.
PERFORM ISV.
IF 0004 > TT OF
MONTHS( MONTH ) THEN
DISPLAY "WRONG DAY"
END-IF.
 ACCEPT removed.

No changes in these statements (YEAR is a "free" variable).

Value for DAY1 substituted. The 2nd condition for DAY1 is removed as always false. END-IF added.

MAINCALC.
IF YEAR > CURYEAR
THEN
MOVE YEAR TO
INT0001
MOVE CURYEAR TO
INT0002
MOVE 1 TO direction
ELSE
MOVE YEAR TO
INT0002
MOVE 2 TO direction
MOVE CURYEAR TO
INT0001.

MAINCALC.
IF YEAR > 1999
THEN
MOVE YEAR TO INT0001
MOVE 1999 TO
INT0002
MOVE 1 TO direction
ELSE
MOVE YEAR TO INT0002
MOVE 2 TO direction
MOVE 1999 TO
INT0001.
Value for CURYEAR substituted.
MOVE int0001 TO
tmp3.
MOVE int0002 TO
tmp4.
IF YEAR NOT EQUAL
CURYEAR THEN
PERFORM YEARS.

MOVE int0002 TO tmp4.
IF YEAR NOT = 1999 THEN
PERFORM YEARS.
 Component Maker removes the first line for tmp3, because this variable is never used again. Value for CURYEAR substituted.
IF MONTH > CURMONTH
THEN
MOVE MONTH TO
INT0001
MOVE CURMONTH TO
INT0002
MOVE 1 TO direction
 Value for MONTH substituted, making the condition (1>12) false, so Component Maker removes the IF branch and then the whole conditional statement as such.
ELSE
MOVE MONTH TO
INT0002
MOVE 2 TO direction
MOVE CURMONTH TO
INT0001.

MOVE 0001 TO
INT0002
MOVE 2 TO direction
MOVE 0012 TO
INT0001.
 The three unconditional statements remain from the former ELSE branch. Value for CURMONTH substituted.
IF MONTH NOT EQUAL
CURMONTH THEN
PERFORM MONTHS.

PERFORM MONTHS.
 The condition is true, so the statement is made unconditional.
IF DAY1 > CURDAY THEN
MOVE DAY1 TO
INT0001
MOVE CURDAY TO
INT0002
MOVE 1 TO direction
 This condition (4>7) is false, so Component Maker removes the IF branch and then the whole conditional statement as such.
ELSE
MOVE DAY1 TO
INT0002
MOVE 2 TO direction
MOVE CURDAY TO
INT0001.

MOVE 4 TO INT0002
MOVE 2 TO direction
MOVE 0007 TO
INT0001.
 The three unconditional statements remain from the former ELSE branch. Values for DAY1 and CURDAY substituted.
IF day1 NOT EQUAL
CURDAY THEN
PERFORM DAYS.

PERFORM DAYS.
 The condition is true, so the statement is made unconditional.
Parent topic: Extracting Domain-Based Components
Related information
Understanding Program Specialization in Advanced Mode
Understanding Program Specialization Lite


Understanding Program Specialization in Advanced Mode

Offers background on program specialization in advanced mode.

In the advanced mode of program specialization, you set the specialization variable to its value at a data port: any statement that allows the program to receive the variable's value from a keyboard, database, screen, or other input source. Subsequent operations can change the value, following the data and control flow of the program. The table below shows the result of using the advanced mode to specialize on the values MONTH = 1 and DAY1 = 4.

Source Program Specialized Program Comment
INP1.
DISPLAY "INPUT YEAR
(1600-2099)".
ACCEPT YEAR.
IF YEAR > 2099 OR YEAR
< 1600 THEN
DISPLAY "WRONG YEAR".

INP1.
DISPLAY "INPUT YEAR
(1600-2099)".
ACCEPT YEAR.
IF YEAR > 2099 OR YEAR
< 1600 THEN
DISPLAY "WRONG YEAR".
 No changes in these statements (YEAR is a "free" variable).
INP2.
DISPLAY "INPUT
MONTH".
ACCEPT MONTH.
IF MONTH > 12 OR MONTH
< 1 THEN
DISPLAY "WRONG MONTH".

INP2.
DISPLAY "INPUT MONTH".
MOVE 0001 TO MONTH.
 ACCEPT is replaced by MOVE with the set value for MONTH.

With the set value, this IF statement can never be reached, so Component Maker removes it.

INP3.
DISPLAY "INPUT DAY".
ACCEPT DAY1.
MOVE YEAR TO tmp1.
PERFORM ISV.
IF DAY1 > tt of MONTHS
( MONTH ) OR DAY1 < 1
THEN
DISPLAY "WRONG DAY".

INP3.
DISPLAY "INPUT DAY".
MOVE 0004 TO DAY1.
MOVE YEAR TO tmp1.
PERFORM ISV.
IF 0004 > TT OF
MONTHS( MONTH ) THEN
DISPLAY "WRONG DAY"
END-IF.
 ACCEPT is replaced by MOVE with the set value for DAY1.

No changes in these statements (YEAR is a "free" variable).

The 2nd condition for DAY1 is removed as always false. END-IF added.

Parent topic: Extracting Domain-Based Components
Related information
Understanding Program Specialization in Simplified Mode
Understanding Program Specialization Lite


Understanding Program Specialization Lite

Offers background on program specialization lite.

Ordinarily, you must turn on the Perform Program Analysis option in the project verification options before verifying the Cobol program you want to specialize. If your application is very large, however, and you know that the specialization variable is never reset, you can save time by skipping program analysis during verification and using the simplified mode to specialize the program, so-called "program specialization lite."

Component Maker gives you the same result for a lite extraction as it would for an ordinary domain extraction in simplified mode, with one important exception. Domain extraction lite cannot calculate the value of a variable that depends on the value of the specialization variable. Consider the following example:

01 X Pic 99.
 01 Y Pic 99.
 ...
 MOVE X To Y.
 IF X = 1
  THEN ...
  ELSE ...
 END-IF.
 ...
 IF Y = 1
  THEN ...
  ELSE ...
 END-IF.

If you set X to 1, both simplified mode and domain extraction lite resolve the IF X = 1 condition correctly. Only simplified mode, however, resolves the IF Y = 1 condition.

Parent topic: Extracting Domain-Based Components
Related information
Understanding Program Specialization in Simplified Mode
Understanding Program Specialization in Advanced Mode


Extracting Domain-Based Cobol Components

Describes how to extract domain-based Cobol components.

Follow the instructions below to extract domain-based Cobol components.

STEPS:
  1. Select the program you want to slice in the HyperView Objects pane and click the * button. A dialog opens where you can enter the name of the new component in the text field. Click OK. Component Maker adds the new component to the list of components. Double-click the component to edit its properties.
  2. In the Data Item Value field, click the here link. Choose one of the following methods in the pop-up menu:
    • HyperCode List to set the specialization variable to the constant values in a list of constants.
    • User Specified Value(s) to set the specialization variable to a value or values you specify.
  3. Select the specialization variable or its declaration in the Source pane. Click the link for the current selection in the Data Item field and choose Set in the drop-down menu. For advanced program specialization, you can enter a structure in Data Item and a field inside the structure in Field.
    To delete an entry, select the link for the numeral that identifies it and choose Delete in the pop-up menu. To unset an entry, click it and choose Unset in the pop-up menu. To navigate quickly to a variable or declaration in the source, click it and choose Locate in the pop-up menu.
  4. In the Comparison field, click the link for the current comparison operator and choose:
    • equals to set the specialization variable to the specified values.
    • not equals to set the specialization variable to every value but the specified values.
  5. If you chose HyperCode List, select the list of constants in Clipper, then click the link for the current selection in the List Name field and choose Set in the drop-down menu.
    Choose Show to display the current list in Clipper. Choose (none) to unset the list. For Clipper usage, see Analyzing Programs in the workbench documentation set.
  6. If you chose User Specified Value(s), click the here link in the Values field. Choose one of the following methods in the pop-up menu:
    • Value to set the specialization variable to one or more values. In the Value field, click the link for the current selection. A dialog opens where you can enter a value in the text field. Click OK.
      Put double quotation marks around a string constant with blank spaces at the beginning or end.
    • Value Range to set the specialization variable to a range of values. In the Lower field, click the link for the current selection. A dialog opens where you can enter a value for the lower range end in the text field. Click OK. Follow the same procedure for the Upper field.
      For value ranges, the specialization variable must have a numeric data type. Only numeric values are supported.
  7. Repeat this procedure for each value or range of values you want to set and for each variable you want to specialize on. For a given specialization variable, you can specify the methods in any combination. For a given extraction, you can specify simplified and advanced modes in any combination.
    To delete a value or range, select the link for the numeral that identifies it and choose Delete in the pop-up menu.
  8. In the Entry Point to use field, click the link for the current selection and choose the entry point you want to use in the pop-up menu. To unset an entry point, click it and choose Unset in the pop-up menu.
  9. In the Description field, click the here link to open a text editor where you can enter a description of the component. The description appears in the box below the Description field in the Properties tab and in the Description property for the logical component repository object.
  10. Click the * button on the tool bar to start extracting the logical component. You are prompted to confirm that you want to continue. Click OK.
  11. The Extraction Options dialog opens. Set options for the extraction and click Finish.
  12. Component Maker performs the extraction. You are notified that the extraction is complete. If the extraction completed without errors or warnings, click OK to continue. If the extraction completed with errors or warnings, click Yes in the notification dialog to view the errors or warnings in the Activity Log. Otherwise, click No.
Parent topic: Extracting Domain-Based Components
Related information
Understanding Program Specialization in Simplified Mode
Understanding Program Specialization in Advanced Mode
Understanding Program Specialization Lite


Extracting Domain-Based PL/I Components

Describes how to extract domain-based PL/I components.

Follow the instructions below to extract domain-based PL/I components.

Not-equals comparisons and value ranges are not supported in PL/I.
STEPS:
  1. Select the program you want to slice in the HyperView Objects pane and click the * button. A dialog opens where you can enter the name of the new component in the text field. Click OK. Component Maker adds the new component to the list of components. Double-click the component to edit its properties.
  2. In the Data Item Value field (to set a single specialization variable) or the Value for Data Item List (to set a list of specialization variables), click the here link. Choose one of the following methods in the pop-up menu:
    • HyperCode List to set the specialization variable(s) to the constant values in a list of constants.
    • User Specified Value(s) to set the specialization variable(s) to a value or values you specify.
  3. If you are setting:
    • A single specialization variable, select the specialization variable or its declaration in the Source pane. Click the link for the current selection in the Data Item field and choose Set in the drop-down menu. For advanced program specialization, you can enter a structure in Data Item and a field inside the structure in Field.
    • A list of specialization variables, click the link for the current selection and choose the list of variables or declarations to use in the pop-up menu.
    To delete an entry, select the link for the numeral that identifies it and choose Delete in the pop-up menu. To unset an entry, click it and choose Unset in the pop-up menu. To navigate quickly to a variable or declaration in the source, click it and choose Locate in the pop-up menu.
  4. If you chose HyperCode List, select the list of constants in Clipper, then click the link for the current selection in the List Name field and choose Set in the drop-down menu.
    Choose Show to display the current list in Clipper. Choose (none) to unset the list. For Clipper usage, see Analyzing Programs in the workbench documentation set.
  5. If you chose User Specified Value(s), click the here link in the Values field. Choose one of the following methods in the pop-up menu:
    • Value to set the specialization variable to one or more values. In the Value field, click the link for the current selection. A dialog opens where you can enter a value in the text field. Click OK.
      Put double quotation marks around a string constant with blank spaces at the beginning or end.
    • Value Range to set the specialization variable to a range of values. In the Lower field, click the link for the current selection. A dialog opens where you can enter a value for the lower range end in the text field. Click OK. Follow the same procedure for the Upper field.
      For value ranges, the specialization variable must have a numeric data type. Only numeric values are supported.
  6. Repeat this procedure for each value or range of values you want to set and for each variable you want to specialize on. For a given specialization variable, you can specify the methods in any combination. For a given extraction, you can specify simplified and advanced modes in any combination.
    To delete a value or range, select the link for the numeral that identifies it and choose Delete in the pop-up menu.
  7. In the Description field, click the here link to open a text editor where you can enter a description of the component. The description appears in the box below the Description field in the Properties tab and in the Description property for the logical component repository object.
  8. Click the * button on the tool bar to start extracting the logical component. You are prompted to confirm that you want to continue. Click OK.
  9. The Extraction Options dialog opens. Set options for the extraction and click Finish.
  10. Component Maker performs the extraction. You are notified that the extraction is complete. If the extraction completed without errors or warnings, click OK to continue. If the extraction completed with errors or warnings, click Yes in the notification dialog to view the errors or warnings in the Activity Log. Otherwise, click No.
Parent topic: Extracting Domain-Based Components
Related information
Understanding Program Specialization in Simplified Mode
Understanding Program Specialization in Advanced Mode
Understanding Program Specialization Lite


Injecting Events

Introduces event injection.

Event Injection lets you adapt a legacy program to asynchronous, event-based programming models like MQ Series. You specify candidate locations for event calls (reads/writes, screen transactions, or subprogram calls, for example); the type of operation the event call performs (put or get); and the text of the message.

For a put operation, for example, Component Maker builds a component that sends the message and any associated variable values to a queue, where the message can be retrieved by monitoring applications.

Tip: The HyperView Clipper pane lets you create lists of candidate locations for event injection. Use the predefined searches for file ports, screen ports, and subprogram calls, or define your own searches. For Clipper pane usage, see Analyzing Programs in the workbench document set.
  • Understanding Event Injection
    Offers background on event injection.
  • Extracting Event-Injected Cobol Components
    Describes how to extract event-injected Cobol components.
Related information
Understanding Event Injection
Extracting Event-Injected Cobol Components


Understanding Event Injection

Offers background on event injection.

Suppose that you have a piece of code that checks whether the variables YEAR and MONTH belong to admissible ranges:

IF YEAR > 2099 OR YEAR < 1600 THEN
  MOVE "WRONG YEAR" TO DOW1
 ELSE
 IF MONTH > 12 OR MONTH < 1 THEN
  MOVE "WRONG MONTH" TO DOW1
 ELSE
  MOVE YEAR TO tmp1
  PERFORM ISV

Suppose further that you want to send a message to your MQ Series middleware each time valid dates are entered in these fields, along with the value that was entered for YEAR. Here, in schematic form, is the series of steps you would perform in Component Maker to accomplish these tasks.

  1. In HyperView, create a list that contains the MOVE YEAR TO tmp1 statement in Clipper.
  2. In Component Maker, create a logical component with the following properties:
    • Component of program: select the program that contains the fragment.
    • List: select the HyperView list.
    • Insert: specify where you want event-handling code to be injected, before or after the injection point. In our case, after the MOVE statement.
    • Operation: select the type of operation you want the event-handling code to perform, put or get. Since we want to send a message to middleware, we choose put.
    • Include Values: specify whether you want the values of variables at the injection point to be included with the generated message. Since we want to send the value of YEAR with the message, we choose true.
    • Message: specify the text of the message you want to send. In our case, the text is "Valid dates entered".
  3. In Component Maker, extract the logical component, making sure to set the Use Middleware drop-down in the Component Type Specific options for the extraction to MQ.

The result of the extraction appears below. Notice that Component Maker has arranged to insert the text of the message and the value of the YEAR variable into the buffer, and added the appropriate PERFORM PUTQ statements to the code.

IF YEAR > 2099 OR YEAR < 1600 THEN
  MOVE "WRONG YEAR" TO DOW1
 ELSE
 IF MONTH > 12 OR MONTH < 1 THEN
  MOVE "WRONG MONTH" TO DOW1
 ELSE
  MOVE '<TEXT Value= "Valid dates
   entered"></TEXT>' TO BUFFER
  PERFORM PUTQ
  STRING '<VAR Name= "YEAR" Value=
   "' YEAR   '"></VAR>'
   '<VAR Name= "TMP1" Value= "' TMP1 '"></VAR>'
  DELIMITED BY SIZE
  INTO BUFFER END-STRING
  PERFORM PUTQ
  MOVE YEAR TO tmp1
  PERFORM ISV
Parent topic: Injecting Events


Extracting Event-Injected Cobol Components

Describes how to extract event-injected Cobol components.

Follow the instructions below to extract event-injected Cobol components.

STEPS:
  1. Select the program you want to slice in the HyperView Objects pane and click the * button. A dialog opens where you can enter the name of the new component in the text field. Click OK. Component Maker adds the new component to the list of components. Double-click the component to edit its properties.
  2. In the Insertion Points field, click the here link. In Clipper, select the list of injection points, then click the link for the current selection in the List field and choose Set in the drop-down menu.
    Choose Show to display the current list in Clipper. Choose (none) to unset the list. For Clipper usage, see Analyzing Programs in the workbench documentation set.
  3. In the Insert field, click the link for the current selection and choose:
    • after to inject event-handling code after the selected injection point.
    • before to inject event-handling code before the selected injection point.
  4. In the Operation field, click the link for the current selection and choose:
    • put to send a message to middleware.
    • get to receive a message from middleware.
  5. In the Include Values field, click the link for the current selection and choose true if you want the values of variables at the injection point to be included with the generated message, false otherwise.
  6. In the Message field, click the link for the current message. A dialog opens where you can enter the text for the event message in the text field. Click OK.
  7. Repeat this procedure for each list of candidate injection points. For a given extraction, you can specify the properties for the selected lists in any combination. The figure below shows how the properties tab might look for an extraction with multiple lists.

    Properties Tab (Multiple-List Cobol Extraction)

  8. In the Entry Point to use field, click the link for the current selection and choose the entry point you want to use in the pop-up menu. To unset an entry point, click it and choose Unset in the pop-up menu.
  9. In the Description field, click the here link to open a text editor where you can enter a description of the component. The description appears in the box below the Description field in the Properties tab and in the Description property for the logical component repository object.
  10. Click the * button on the tool bar to start extracting the logical component. You are prompted to confirm that you want to continue. Click OK.
  11. The Extraction Options dialog opens. Set options for the extraction and click Finish.
  12. Component Maker performs the extraction. You are notified that the extraction is complete. If the extraction completed without errors or warnings, click OK to continue. If the extraction completed with errors or warnings, click Yes in the notification dialog to view the errors or warnings in the Activity Log. Otherwise, click No.
Parent topic: Injecting Events


Eliminating Dead Code

Introduces dead code elimination.

Dead Code Elimination (DCE) is an option in each of the main component extraction methods, but you can also perform it on a standalone basis. For each program analyzed for dead code, DCE generates a component that consists of the original source code minus any unreferenced data items or unreachable procedural statements. Optionally, you can have DCE comment out dead code in Cobol and Natural applications, rather than remove it.

Use the batch DCE feature to find dead code across your project. If you are licensed to use the Batch Refresh Process (BRP), you can use it to perform dead code elimination across a workspace.
  • Generating Dead Code Statistics
    Describes how to generate dead code statistics.
  • Understanding Dead Code Elimination
    Offers background on dead code elimination.
  • Extracting Optimized Components
    Describes how to extract optimized components.
Related information
Generating Dead Code Statistics
Understanding Dead Code Elimination
Extracting Optimized Components


Generating Dead Code Statistics

Describes how to generate dead code statistics.

Set the Perform Dead Code Analysis option in the project verification options if you want the parser to collect statistics on the number of unreachable statements and dead data items in a program, and to mark the constructs as dead in HyperView. You can view the statistics in the Legacy Estimation tool, as described in Analyzing Projects in the workbench documentation set.

You do not need to set this option to perform dead code elimination in Component Maker.

For Cobol programs, you can use a DCE coverage report to identify dead code in a source program. The report displays the text of the source program with its "live," or extracted, code shaded in pink.

Parent topic: Eliminating Dead Code


Understanding Dead Code Elimination

Offers background on dead code elimination.

Let's look at a simple before-and-after example to see what you can expect from Dead Code Elimination.

Before:

WORKING-STORAGE SECTION.

 01 USED-VARS.
  05 USED1 PIC 9.

 01 DEAD-VARS.
  05 DEAD1 PIC 9.
  05 DEAD2 PIC X.

 PROCEDURE DIVISION.

 FIRST-USED-PARA.
  MOVE 1 TO USED1.
  GO TO SECOND-USED-PARA.
  MOVE 2 TO USED1.

 DEAD-PARA1.
  MOVE 0 TO DEAD2.

 SECOND-USED PARA.
  MOVE 3 TO USED1.
  STOP RUN.

After:

WORKING-STORAGE SECTION.

 01 USED-VARS.
  05 USED1 PIC 9.

 PROCEDURE DIVISION.

 FIRST-USED-PARA.
  MOVE 1 TO USED1.
  GO TO SECOND-USED-PARA.

 SECOND-USED PARA.
  MOVE 3 TO USED1.
  STOP RUN.
Parent topic: Eliminating Dead Code


Extracting Optimized Components

Describes how to extract optimized components.

Follow the instructions below to extract optimized components for all supported languages.

STEPS:
  1. Select the program you want to analyze for dead code in the HyperView Objects pane and click the * button. To analyze the entire project of which the program is a part, click the * button.
  2. A dialog opens where you can enter the name of the new component in the text field. Click OK. Component Maker adds the new components to the list of components. If you selected batch mode, Component Maker creates a logical component for each program in the project, appending _n to the name of the component.
  3. In the Entry Point to use field, click the link for the current selection and choose the entry point you want to use in the pop-up menu. To unset an entry point, click it and choose Unset in the pop-up menu.
  4. In the Description field, click the here link to open a text editor where you can enter a description of the component. The description appears in the box below the Description field in the Properties tab and in the Description property for the logical component repository object.
  5. Click the * button on the tool bar to start extracting the logical component. You are prompted to confirm that you want to continue. Click OK.
  6. The Extraction Options dialog opens. Set options for the extraction and click Finish.
  7. Component Maker performs the extraction. You are notified that the extraction is complete. If the extraction completed without errors or warnings, click OK to continue. If the extraction completed with errors or warnings, click Yes in the notification dialog to view the errors or warnings in the Activity Log. Otherwise, click No.
Parent topic: Eliminating Dead Code


Performing Entry Point Isolation

Introduces entry point isolation.

Entry Point Isolation lets you build a component based on one of multiple entry points in a legacy program (an inner entry point in a Cobol program, for example) rather than the start of the Procedure Division. Component Maker extracts only the functionality and data definitions required for invocation from the selected point.

Entry Point Isolation is built into the main methods as an optional optimization tool. It's offered separately in case you want to use it on a stand-alone basis.

  • Extracting a Cobol Component with Entry Point Isolation
    Describes how to extract a Cobol Component with entry point isolation.
Related information
Extracting a Cobol Component with Entry Point Isolation


Extracting a Cobol Component with Entry Point Isolation

Describes how to extract a Cobol Component with entry point isolation.

Follow the instructions below to extract a Cobol Component with entry point isolation.

STEPS:
  1. Select the program you want to slice in the HyperView Objects pane and click the * button. A dialog opens where you can enter the name of the new component in the text field. Click OK. Component Maker adds the new component to the list of components. Double-click the component to edit its properties.
  2. In the Entry Point to use field, click the link for the current selection and choose the entry point you want to use in the pop-up menu. To unset an entry point, click it and choose Unset in the pop-up menu.
  3. In the Description field, click the here link to open a text editor where you can enter a description of the component. The description appears in the box below the Description field in the Properties tab and in the Description property for the logical component repository object.
  4. Click the * button on the tool bar to start extracting the logical component. You are prompted to confirm that you want to continue. Click OK.
  5. The Extraction Options dialog opens. Set options for the extraction and click Finish.
  6. Component Maker performs the extraction. You are notified that the extraction is complete. If the extraction completed without errors or warnings, click OK to continue. If the extraction completed with errors or warnings, click Yes in the notification dialog to view the errors or warnings in the Activity Log. Otherwise, click No.
Parent topic: Performing Entry Point Isolation


Technical Details

Introduces the technical details appendix.

This appendix gives technical details of Component Maker behavior for a handful of narrowly focused verification and extraction options; for Cobol parameterized slice generation; for domain-based extraction when the specialization variable is set to multiple values; and for Cobol arithmetic exception handling.

  • Verification Options
    Provides an overview of the technical details for verification options.
  • Keep Legacy Copybooks Extraction Option
    Describes the Keep Legacy Copybooks extraction option.
  • How Parameterized Slices Are Generated for Cobol Programs
    Describes how parameterized slices are generated for Cobol programs.
  • Setting a Specialization Variable to Multiple Values
    Describes Component Maker behavior when a specialization variable is set to multiple values.
  • Arithmetic Exception Handling
    Describes Component Maker arithmetic exception handling.


Verification Options

Provides an overview of the technical details for verification options.

This section describes how a number of verification options may affect component extraction. For more information on the verification options, see Preparing Projects in the workbench document set.

  • Use Special IMS Calling Conventions
    Describes the Use Special IMS Calling Conventions option.
  • Override CICS Program Terminations
    Describes the Override CICS Program Terminations option.
  • Support CICS HANDLE Statements
    Describes the Support CICS HANDLE statements option.
  • Perform Unisys TIP and DPS Calls Analysis
    Describes the Perform Unisys TIP and DPS Calls Analysis option.
  • Perform Unisys Common-Storage Analysis
    Describes the Perform Unisys Common-Storage Analysis option.
  • Relaxed Parsing
    Describes the Relaxed Parsing option.
  • PERFORM Behavior for Micro Focus Cobol
    Describes the PERFORM behavior option for MF Cobol.
Parent topic: Technical Details


Use Special IMS Calling Conventions

Describes the Use Special IMS Calling Conventions option.

Select Use Special IMS Calling Conventions in the project verification options if you want to show dependencies and analyze CALL 'CBLTDLI' statements for the CHNG value of their first parameter, and if the value of the third parameter is known, then generate Calls relationship in the repository.

For example:

MOVE 'CHNG' TO WS-IMS-FUNC-CODE
MOVE 'MGRW280' TO WS-IMS-TRANSACTION
CALL 'CBLTDLI' USING WS-IMS-FUNC-CODE
 LS03-ALT-MOD-PCB
 WS-IMS-TRANSACTION

When both WS-IMS-FUNC-CODE = 'CHNG' and WS-IMS-TRANSACTION have known values, the repository is populated with the CALL relationship between the current program and the WS-IMS-TRANSACTION <value> program (in the example, 'MGRW280').

Parent topic: Verification Options


Override CICS Program Terminations

Describes the Override CICS Program Terminations option.

Select Override CICS Program Terminations in the project verification options if you want the parser to interpret CICS RETURN, XCTL, and ABEND commands in Cobol files as not terminating program execution.

If the source program contains CICS HANDLE CONDITION handlers, for example, some exceptions can arise only on execution of CICS RETURN. For this reason, if you want to see the code of the corresponding handler in the component, you need to check the override box. Otherwise, the call of the handler and hence the handler's code are unreachable.

Parent topic: Verification Options


Support CICS HANDLE Statements

Describes the Support CICS HANDLE statements option.

Select Support CICS HANDLE statements in the project verification options if you want the parser to recognize CICS HANDLE statements in Cobol files. EXEC CICS HANDLE statements require processing to detect all dependencies with error-handling statements. That may result in adding extra paragraphs to a component.

Parent topic: Verification Options


Perform Unisys TIP and DPS Calls Analysis

Describes the Perform Unisys TIP and DPS Calls Analysis option.

Select Perform Unisys TIP and DPS Calls Analysis in the project verification options if you are working on a project containing Unisys 2200 Cobol files and need to perform TIP and DPS calls analysis.

This analysis tries to determine the name (value of the data item of size 8 and offset 20 from the beginning of form-header) of the screen form used in input/output operation (at CALL 'D$READ', 'D$SEND', 'D$SENDF', 'D$SENDF1') and establish the repository relationships ProgramSendsMap and ProgramReadsMap between the program being analyzed and the detected screen.

For example:

01 SCREEN-946.
 02 SCREEN-946-HEADER.
 05 FILLER PIC X(2)VALUE SPACES.
 05 FILLER PIC 9(5)COMP VALUE ZERO.
 05 FILLER PIC X(4)VALUE SPACES.
 05 S946-FILLER PIC X(8) VALUE '$DPS$SWS'
 05 S946-NUMBER PIC 9(4) VALUE 946.
 05 S946-NAME PIC X(8) VALUE 'SCRN946'.
CALL 'D$READ USING DPS-STATUS, SCREEN-946.

Relationship ProgramSendsMap is established between the program and screen 'SCRN946'.

Select DPS routines may end with error if you want to perform call analysis of DPS routines that end in an error.
Parent topic: Verification Options


Perform Unisys Common-Storage Analysis

Describes the Perform Unisys Common-Storage Analysis option.

Select Perform Unisys Common-Storage Analysis in the project verification options if you want the system to include in the analysis for Unisys Cobol files variables that are not explicitly declared in CALL statements. This analysis adds implicit use of variables declared in the Common Storage Section to every CALL statement of the program being analyzed, as well as for its PROCEDURE DIVISION USING phrase. That could lead to superfluous data dependencies between the caller and called programs in case the called program does not use data from Common Storage.

Parent topic: Verification Options


Relaxed Parsing

Describes the Relaxed Parsing option.

The Relaxed Parsing option in the workspace verification options lets you verify a source file despite errors. Ordinarily, the parser stops at a statement when it encounters an error. Relaxed parsing tells the parser to continue to the next statement.

For code verified with relaxed parsing, Component Maker behaves as follows:

  • Statements included in a component that contain errors are treated as CONTINUE statements and appear in component text as comments.
  • Dummy declarations for undeclared identifiers appear in component text as comments.
  • Declarations that are in error appear in component text as they were in the original program. Corrected declarations appear in component text as comments.
  • Commented-out code is identified by an extra comment line: "Modernization Workbench assumption".
For Domain-Based Componentization, in particular:
  • Data items with errors in declarations are treated as data items with unknown values.
  • Statements with errors are treated as statements that do not change values.
  • Whenever a calculation error occurs, the comment "Calculation has not been completed successfully by Modernization Workbench" is generated in the component before the erroneous operator, along with an error message.
  • Component Maker ignores user values for duplicated identifiers (which may have an association with a wrong DECL); structures with fields marked with errors; and undeclared identifiers are ignored. A list of ignored values appears at the top of the component.
  • Users cannot specify values for VARs with attribute errors (duplicated identifiers); VARs without DECLs (undeclared identifiers); and DECLs with attribute errors.
Parent topic: Verification Options


PERFORM Behavior for Micro Focus Cobol

Describes the PERFORM behavior option for MF Cobol.

For Micro Focus Cobol applications, use the PERFORM behavior option in the workspace verification options window to specify the type of PERFORM behavior the application was compiled for. You can select:

  • Stack if the application was compiled with the PERFORM-type option set to allow recursive PERFORMS.
  • All exits active if the application was compiled with the PERFORM-type option set to not allow recursive PERFORMS.

For non-recursive PERFORM behavior, a COBOL program can contain PERFORM mines. In informal terms, a PERFORM mine is a place in a program that can contain an exit point of some active but not current PERFORM during program execution.

The program below, for example, contains a mine at the end of paragraph C. When the end of paragraph C is reached during PERFORM C THRU D execution, the mine "snaps" into action: control is transferred to the STOP RUN statement of paragraph A.

A.
  PERFORM B THRU C.
  STOP RUN.
 B.
  PERFORM C THRU D.
 C.
  DISPLAY 'C'.
 * mine
 D.
  DISPLAY 'D'.

Setting the compiler option to allow non-recursive PERFORM behavior where appropriate allows the Modernization Workbench parser to detect possible mines and determine their properties. That, in turn, lets Component Maker analyze control flow and eliminate dead code with greater precision. To return to our example, the mine placed at the end of paragraph C snaps each time it is reached: such a mine is called stable. Control never falls through a stable mine. Here it means that the code in paragraph D is unreachable.

Parent topic: Verification Options


Keep Legacy Copybooks Extraction Option

Describes the Keep Legacy Copybooks extraction option.

Select Keep Legacy Copybooks in the General extraction options for Cobol if you want Component Maker not to generate modified copybooks for the component. Component Maker issues a warning if including the original copybooks in the component would result in an error.

Example 1:

[COBOL]
01 A PIC X.
PROCEDURE DIVISION.
COPY CP.
[END-COBOL]
[COPYBOOK CP.CPY]
STOP RUN.
DISPLAY A.
[END-COPYBOOK CP.CPY]

For this example, Component Maker issues a warning for an undeclared identifier after Dead Code Elimination.

Example 2:

[COBOL]
PROCEDURE DIVISION.
COPY CP.
STOP RUN.
P.
[END-COBOL]
[COPYBOOK CP.CPY]
DISPLAY "QA is out there"
STOP RUN.
PERFORM P.
[END-COPYBOOK CP.CPY]

For this example, Component Maker issues a warning for an undeclared paragraph after Dead Code Elimination.

Example 3:

[COBOL]
working-storage section.
copy file.
PROCEDURE DIVISION.
p1.
  move 1 to a.
p2.
  display b.
  display a.
p3.
  stop run.
[END-COBOL]
[COPYBOOK file.cpy]
01 a pic 9.
01 b pic 9.
[END-COPYBOOK file.cpy]

For this example, the range component on paragraph p2 looks like this:

[COBOL]
WORKING-STORAGE SECTION.
  COPY FILE1.
  LINKAGE SECTION.
  PROCEDURE DIVISION USING A.
[END-COBOL]
while, with the option turned off, it looks like this:
[COBOL]
WORKING-STORAGE SECTION.
  COPY FILE1-A$RULE-0.
  LINKAGE SECTION.
  COPY FILE1-A$RULE-1.
[END-COBOL]

That is, turning the option on overrides the splitting of the copybook file into two files. Component Maker issues a warning if that could result in an error.

Parent topic: Technical Details


How Parameterized Slices Are Generated for Cobol Programs

Describes how parameterized slices are generated for Cobol programs.

The specifications for input and output parameters are:

  • Input

    A variable of an arbitrary level from the LINKAGE section or PROCEDURE DIVISION USING is classified as an input parameter if one or more of its bits are used for reading before writing.

    A system variable (field of DFHEIB/DFHEIBLK structures) is classified as an input parameter if the Create CICS Program option is turned off and the variable is used for writing before reading.

  • Output

    A variable of an arbitrary level from the LINKAGE section or PROCEDURE DIVISION USING is classified as an output parameter if it is modified during component execution.

    A system variable (a field of DFHEIB/DFHEIBLK structures) is classified as an output parameter if the Create CICS Program option is turned off and the variable is modified during component execution.

  • For each input parameter, the algorithm finds its first usage (it does not have to be unique, the algorithm processes all of them), and if the variable (parameter from the LINKAGE section) is used for reading, code to copy its value from the corresponding field of BRE-INPUT-STRUCTURE is inserted as close to this usage as possible.
  • The algorithm takes into account all partial or conditional assignments for this variable before its first usage and places PERFORM statements before these assignments.

    If a PERFORM statement can be executed more than once (as in the case of a loop), then a flag variable (named BRE-INIT-COPY-FLAG-[<n>] of the type PIC 9 VALUE 0 is created in the WORKING-STORAGE section, and the parameter is copied into the corresponding variable only the first time this PERFORM statement is executed.

  • For all component exit points, the algorithm inserts code to copy all output parameters from working-storage variables to the corresponding fields of BRE-OUTPUT-STRUCTURE.

    Variables of any level (rather than only 01-level structures together with all their fields) can act as parameters. This allows exclusion of unnecessary parameters, making the resulting programs more compact and clear.

    For each operator for which a parameter list is generated, the following transformations are applied to the entire list:

    • All FD entries are replaced with their data descriptions.
    • All array fields are replaced with the corresponding array declarations.
    • All upper-level RENAMES clauses are replaced with the renamed declarations.
    • All upper-level REDEFINES clauses with an object (including the object itself, if it is present in the parameter list) are replaced with a clause of a greater size.
    • All REDEFINES and RENAMES entries of any level are removed from the list.
    • All variable-length arrays are converted into fixed-length of the corresponding maximal size.
    • All keys and indices are removed from array declarations.
    • All VALUE clauses are removed from all declarations.
    • All conditional names are replaced with the corresponding data items.
Parent topic: Technical Details


Setting a Specialization Variable to Multiple Values

Describes Component Maker behavior when a specialization variable is set to multiple values.

For Domain-Based Componentization, Component Maker lets you set the specialization variable to a range of values (between 1 and 10 inclusive, for example) or to multiple values (not only CHECK but CREDIT-CARD, for example). You can also set the variable to all values not in the range or set of possible values (every value but CHECK and CREDIT-CARD, for example).

Component Maker uses multiple values to predict conditional branches intelligently. In the following code fragment, for example, the second IF statement cannot be resolved with a single value, because of the two conflicting values of Z coming down from the different code paths of the first IF. With multiple values, however, Component Maker correctly resolves the second IF, because all the possible values of the variable at the point of the IF are known:

IF X EQUAL Y
  MOVE 1 TO Z
ELSE
  MOVE 2 TO Z
DISPLAY Z.
IF Z EQUAL 3
  DISPLAY "Z=3"
ELSE
  DISPLAY "Z<>3"

Keep in mind that only the following COBOL statements are interpreted with multiple values:

  • COMPUTE
  • MOVE
  • ADD
  • SUBTRACT
  • MULTIPLY
  • DIVIDE

That is, if the input of such a statement is defined, then, after interpretation, its output can be defined as well.

Single-Value Example:

MOVE 1 TO Y.
MOVE 1 TO X.
ADD X TO Y.
DISPLAY Y.
IF Y EQUAL 2 THEN...

In this fragment of code, the value of Y in the IF statement (as well as in DISPLAY) is known, and so the THEN branch can be predicted.

Multiple-Value Example:

IF X EQUAL 0
  MOVE 1 TO Y
ELSE
  MOVE 2 TO Y.
ADD 1 TO Y.
IF Y = 10 THEN... ELSE...

In this case, Component Maker determines that Y in the second IF statement can equal only 2 or 3, so the statement can be resolved to the ELSE branch.

The statement interpretation capability is available only when you define the specialization variable "positively" (as equalling a range or set of values), not when you define the variable "negatively" (as not equalling a range or set of values).

Parent topic: Technical Details


Arithmetic Exception Handling

Describes Component Maker arithmetic exception handling.

For Cobol, the ADD, COMPUTE, DIVIDE, MULTIPLY, and SUBTRACT statements can have ON SIZE ERROR and NOT ON SIZE ERROR phrases. The phrase ON SIZE ERROR contains an arithmetic exception handler.

Statements in the ON SIZE ERROR phrase are executed when one of the following arithmetic exception conditions take place:

  • The value of an arithmetic operation result is larger than the resultant-identifier picture size.
  • Division by zero.
  • Violation of the rules for the evaluation of exponentiation.

For MULTIPLY arithmetic statements, if any of the individual operations produces a size error condition, the statements in the ON SIZE ERROR phrase is not executed until all of the individual operations are completed.

Control is transferred to the statements defined in the phrase NOT ON SIZE ERROR when a NOT ON SIZE ERROR phrase is specified and no exceptions occurred. In that case, the ON SIZE ERROR is ignored.

Component Maker specialization processes an arithmetic statement with exception handlers in the following way:
  • If a (NOT) ON SIZE ERROR condition occurred in some interpreting pass, then the arithmetic statement is replaced by the statements in the corresponding phrase.
  • Those statements will be interpreted at the next pass.
Parent topic: Technical Details


Using the Batch Refresh Process

Introduces the Batch Refresh Process.

The Modernization Workbench (MW) Batch Refresh Process (BRP) lets you register and verify source files in batch mode. You typically use this process when sources on the mainframe have changed, and you need to synchronize the modified sources with the sources you are working with in MW. You can also use BRP to perform analysis and reporting functions.

  • Understanding the Batch Refresh Process
    Provides an overview of the Batch Refresh Process.
  • Configuring the Batch Refresh Process
    Describes how to configure the Batch Refresh Process.
  • Preparing Files for Batch Refresh Processing
    Describes how to prepare source files for BRP.
  • Enabling Parallel Verification
    Describes how to enable parallel verification.
  • Executing the Batch Refresh Process
    Describes how to execute BRP.
  • Producing Utilities for BRP
    Introduces BRP utilities.
  • Guidelines for BRP Utilities
    Introduces utilities that need to be enabled for BRP.


Understanding the Batch Refresh Process

Provides an overview of the Batch Refresh Process.

The Batch Refresh Process (BRP) is a utility that supports the synchronization of sources from a mainframe or enterprise server with the MW repositories representing those sources. BRP is installed with the MW server.

BRP is responsible for updating the workspace with sources provided to it from the mainframe and verifying all unverified sources. Optionally, BRP can be configured to run any required source code pre-processing, as well as certain analysis and reporting functions.

When sources are updated to a workspace, the workbench determines whether or not to load the file. When the name of the incoming file matches the name of a file currently in the workspace, the two files are compared. If they are different, the incoming file will replace the existing file. If they are the same, no change is made. If the incoming file does not currently have a match in the workspace, the file is added to the default project. The default project is a project with the same name as the workspace. If this project does not exist, it is automatically created.

Updating a source in a workspace causes that source to be invalidated. Any sources that are dependent upon the updated file will also be invalidated. For example, an update to a copybook will cause all the COBOL files that use the copybook to become invalidated. That, in turn, will cause all JCL files that execute the programs in the source files to become invalidated. Once the update phase is completed, all invalidated and unverified sources in the workspace will be verified.

Parent topic: Using the Batch Refresh Process


Configuring the Batch Refresh Process

Describes how to configure the Batch Refresh Process.

The Batch Refresh Process is installed with the MW server. For each workspace it processes, BRP refers to an initialization file containing configuration settings. Use the BRP Configurator in the workbench Administration tool on the workbench server to modify the initialization file settings.

STEPS:
  1. In the MW Administration tool, choose Administer > Configure BRP. The BRP Configurator opens.
  2. In the Current BRP Configurations pane, choose the BRP configuration file you want to edit and click Edit.
    If the BRP configuration you want to edit is not listed in the pane, click Find to locate the file in the file system.
  3. To create a new configuration, click Add. A Select Workspace dialog box opens, where you can specify the workspace (.rwp) file you want to configure for BRP.
    To copy a configuration, select it and click Copy. To delete a configuration, select it and click Delete.
  4. The main BRP Configurator window opens, with a tab for each configuration task:
    • On the General tab, set basic BRP initialization values (required).
    • On the User Exit tab, identify any user exits you have created to extend or modify BRP functionality (optional).
    • On the Advanced tab, enable BRP support for IMS Analysis, Executive Report, and WebGen (optional).
  5. When you are satisfied with you entries on each tab, click OK.
  • Configuring General Settings
    Describes how to configure BRP settings on the General tab.
  • Configuring User Exits
    Introduces BRP Configurator settings on the User Exits tab.
  • Configuring Advanced Settings
    Describes how to configure BRP Configurator settings on the Advanced tab.
  • BRP Logging
    Describes BRP logging.
Parent topic: Using the Batch Refresh Process


Configuring General Settings

Describes how to configure BRP settings on the General tab.

Set required BRP initialization values on the General tab. The settings are described in the table below.
Setting | Description
BRP Run Type | Must be set to "Master".
RMW Install Path | Specifies the path of the MW installation folder.
BRP Install Path | Specifies the path of the BRP installation folder. This folder must contain the Reports, PreparedSources, Staging, Utility, and Working folders. Use override parameters for folders in a different location.
Workspace Path | Specifies the path of the folder for the workspace to be refreshed. This folder is at the same level as the workspace (.rwp) file.
Site | Specifies the site name for this BRP install. This value is written out to the main BRP log and is used for documentation purposes only.
Obsolete Processing | Check this box to turn on obsolete processing. Obsolete processing automatically determines which source files are no longer part of a "live" application and moves them to another project. Sources are determined to be obsolete by virtue of being absent from the set of incoming sources for a BRP run.
Obsolete Project | If Obsolete Processing is selected, specifies the project to which obsolete source files will be moved.
Obsolete Exclusions File | If Obsolete Processing is selected, specifies a text file that lists files that should be ignored during obsolete processing. This mechanism is intended to avoid having MW generated or provided files classified as obsolete. For example, MW-provided system copybooks or DASDL-generated copybooks. The text file should be formatted with a single file name per line. This mechanism is also useful when there are sources that are particularly difficult to provide on an ongoing basis or if a source is generated during runtime in the application.
Parent topic: Configuring the Batch Refresh Process


Configuring User Exits

Introduces BRP Configurator settings on the User Exits tab.

Identify user exits you have created to extend or modify BRP functionality on the User Exit tab. A user exit is a point in the standard BRP processing when a user-supplied set of commands is executed. Typically the commands execute utilities that accomplish tasks ranging from source code pre-processing to specialized report generation.

  • Understanding Exits
    Provides an overview of BRP exits.
  • Configuring Exits
    Describes how to configure BRP Configurator settings on the User Exits tab.
Parent topic: Configuring the Batch Refresh Process
Related information
BRP Environment Parameters
Producing Utilities for BRP
Using Batch Scripts
Executing Batch Scripts


Understanding Exits

Provides an overview of BRP exits.

There are seven user exits in BRP. Each is named and corresponds to a major division of processing, or step, in a BRP run. The names are listed below in the order they are executed:

  • Setup
  • Init (Initialization)
  • Staging
  • Update
  • Verification
  • Generation
  • End

With the exception of the Setup and End user exits, each is executed as the very first task of the corresponding BRP step. For example, in the Generation step the Generation user exit is executed followed by executive report generation and WebGen generation.

There are some essential tasks that occur during the Setup step that make it impractical for user exit execution to be first. The Setup step is where the main BRP log is opened and all parameter values are generated, if necessary, and checked for validity. The Setup user exit occurs after the log file is created, but before parameter values are generated and checked.

The End user exit occurs at the very end of the BRP run. There are no tasks that occur after it other than closing the main BRP log file.

Which user exit should be used to execute a particular piece of functionality depends upon the task that needs to be accomplished. For example, source code pre-processing usually needs to occur prior to the sources being loaded into the workspace. This would make the Staging or Update user exits ideal. However, it is best to do source code pre-processing once all sources are in a single spot and are guaranteed to have proper file extensions. That would eliminate the Staging user exit, since it is during Staging that file extensions are added, if necessary. Therefore, the best place to execute source code pre-processing utilities is the Update user exit.

Other common uses of user exits are to run specific reporting or analysis functions. These typically require that the verification step has been completed. Therefore, the Generation user exit will typically work best for these situations.

Parent topic: Configuring User Exits


Configuring Exits

Describes how to configure BRP Configurator settings on the User Exits tab.

Configuring a user exit involves two separate tasks:

  • Creating a BRP-enabled utility to accomplish the task at hand.
  • Pointing the user exit to that utility.

Creating a BRP-enabled utility is a non-trivial task. Guidelines and information on this subject can be found in the section Producing Utilities for BRP. Use the User Exit tab of the BRP Configurator to point a user exit to the corresponding BRP-enabled utility.

In the default configuration the Generation user exit is configured and provides a useful example.

BRP contains anchor points for all seven user exits. The DOS batch file should be named for the user exit it corresponds to and it should be located in the BRP Utilities folder. Be sure to specify a full and complete path to the DOS file. Relative paths may not work properly in this context.

The DOS batch file must contain the actual commands that the user exit will execute. This also provides the opportunity to do more than one task in any given user exit.

BRP checks any enabled user exit INI file parameter value for validity during the Setup step. If the value does not point to an existing file, BRP will quit with a severe error.

Parent topic: Configuring User Exits
Related information
Producing Utilities for BRP


Configuring Advanced Settings

Describes how to configure BRP Configurator settings on the Advanced tab.

Configure settings on the Advanced tab to improve verification performance and enable support for IMS Analysis, Executive Report, and WebGen. The settings are described in the table below.
Setting | Description
Launch standalone HyperCode Converter | Check this box to launch the HyperCode Converter. Using the HyperCode Converter generally improves verification performance.
Number of extra HyperCode Converters | If Launch standalone HyperCode Converter is selected, click the arrow buttons to specify the number of additional HyperCode Converters you want to launch.
Wait HyperCode Converter queue | Check this box to force BRP to wait until the HyperCode Converter(s) queue is empty.
Timeout in minutes | If Wait HyperCode Converter queue is selected, click the arrow buttons to specify the time in minutes BRP should wait for the count on the HyperCode Converter(s) queue to change. If the count does not change within the specified time, BRP resumes. Sixty minutes is recommended.
Drop and restore indices Dropping repository indexes generally improves verification performance when a large number of files need to be verified.

Select:

  • Auto if you want BRP to drop repository indexes based on the number of files that need to be verified.
  • Yes if you want BRP to drop repository indexes.
  • No if you do not want BRP to drop repository indexes.

Dropped indexes are restored when the verification process completes.

Run IMS Analysis | Check this box to enable IMS Analysis.
Run WebGen | Check this box to enable WebGen.
Run Executive Report | Check this box to enable Executive Report.
Report Folder | Specifies the folder to store the Executive Report in. Use the Browse button to locate the folder.
Debug | Check this box to enable debug mode, in which additional messages are written to the BRP log.
Parent topic: Configuring the Batch Refresh Process


BRP Logging

Describes BRP logging.

At the beginning of every BRP run a timestamp value is generated, consisting of the date and time. That timestamp is used throughout the run in order to uniquely identify and group the logs and information generated. Each run creates log files as well as other pieces of information. The timestamp for the run is added to the beginning of the filename for each log. All logs and information files are typically written to the Reports folder of the BRP install directory.

The main BRP log is, by default, named BRP log.txt, although the name can be altered by changing the command that is found in the runBRP.bat file in the BRP install directory. If more than one BRP installation is present, add the name of the workspace being refreshed to the main BRP log name.

The main BRP log contains basic information on when each major step of the run starts and finishes, as well as any relevant summary or diagnostic information. This is the log to check to determine whether the BRP run completed successfully or not. A run to completion will result in the last message in the log indicating the process finished successfully. Log messages marked "ERROR" should be reviewed. These are problems that were encountered, but they are not bad enough to cause BRP to abend. Messages marked as "SEVERE" are issues encountered that required BRP to abend. These should be investigated and corrected.

In addition to the main BRP log, the Update Log.txt and Verify Log.txt are also generated. These, as their names indicate, document the results of the update and verification steps respectively. The update log contains an entry for each file that is added to the workspace, whether by virtue of being different (updated) or new (added). Files that are processed during update that have unknown file extensions will also be documented in this log. Files that are processed and rejected because they are not different from the version in the workspace are not documented. The verification log lists the verification status of each file that is processed during verification. Summary statistics appear at the end of the log.

The remainder of the logs and files that are generated during a BRP run are there to provide in-depth information for troubleshooting if there is a problem during the run. If there is a problem that requires the attention of support services, please be sure to include all the logs and files from a run. Sorting the file names in the Reports directory by name will naturally group them together.

Parent topic: Configuring the Batch Refresh Process
Parent topic: Executing the Batch Refresh Process


Preparing Files for Batch Refresh Processing

Describes how to prepare source files for BRP.

The incoming sources must be placed in the BRP PreparedSources folder with appropriate file extensions.

If files do not have appropriate file extensions, they must be separated, by type, into individual folders in the PreparedSources folder. Each subfolder must be named for the type of source it contains. Source names must match those used in the Sources folder in the workspace directory. For example, if Cobol sources do not have file extensions they must be placed in PreparedSources\Cobol.

Parent topic: Using the Batch Refresh Process


Executing the Batch Refresh Process

Describes how to execute BRP.

The BRP Configurator creates a runBRP.bat file and saves it to the location specified in the BRP Install Path configuration option. Executing this batch file will start a BRP run.

The batch file executes the runBRP.exe executable file with appropriate parameters. The command format is as follows:

runBRP.exe <INI file> <log file>

where INI file is the path to the BRP initialization file and log file is a path to the main BRP log file.

The workspace is locked while BRP runs. It cannot be accessed by users. In the event of BRP failure, you can unlock the workspace by choosing Administer > Unlock Workspace in the Administration tool.

A full BRP run will produce several detailed log files in addition to the main BRP log. These detail files will always be written to the Reports folder. The main BRP log also is written to the Reports folder by default.

Running multiple BRP processes simultaneously on the same workspace is not supported.
  • Adding Source File Extensions
    Describes how to BRP add source file extensions.
  • BRP Logging
    Describes BRP logging.
Parent topic: Using the Batch Refresh Process


Adding Source File Extensions

Describes how to BRP add source file extensions.

It is recommended that source files coming into BRP have proper file extensions already in place. In some cases, however, this is not possible and BRP can add them if needed. There is no need to configure initialization file parameters to use the functionality.

To have BRP add the file extensions, you must separate the sources, by type, into separate folders in the PreparedSources directory. Each folder must be named for the source type it contains and the source type name must correspond to MW source type names.

MW source type names can be determined by examining the folder names found in the Sources folder of a workspace directory. If the workspace already contains a source of a particular type, there will be a folder in the Sources directory corresponding to that source type. For example, Cobol files are found in the Cobol folder. The precise file extension that is added for any particular source type is determined by the configuration of the Registration Extensions tab in the target workspace's workspace options. The first defined file extension for each source type will be the extension that is added by BRP. For example, Cobol File has three default file extensions listed: .cbl, .cob, and .ccp. Since .cbl is listed first, that is the extension used by BRP. The order that these values appear in the workspace options can be changed by removing extensions and adding them back in.

Note that file extensions are added onto the file without regard for any currently existing file extension if this functionality is used. For example, if the files in a folder named Cobol currently have a .txt extension (which is commonly added by some mainframe FTP applications), each file would end up having an extension like .txt.cbl. Various source file naming conventions include multiple "dots" in the source name. Since this scenario is unpredictable and varies widely, it is risky and impractical to have BRP strip any possible existing file extensions.

If there is a mix of sources with and without file extensions, BRP can handle this. Any files with proper extensions should be placed in the PreparedSources directory directly, as normal. Any files that need extensions should be dealt with as described above.

Parent topic: Executing the Batch Refresh Process


Producing Utilities for BRP

Introduces BRP utilities.

The following are guidelines for producing utilities for BRP. These guidelines apply for any utility. Currently these utilities are normally written by support services and partners.

  • Versioning
    Describes how to assign a version to a BRP utility.
  • Logging
    Describes logging for BRP utilities.
  • Source, Executable, and CFG Files
    Describes how utilities are delivered.
Parent topic: Using the Batch Refresh Process
Related information
Configuring Exits
Configuring User Exits
Using Batch Scripts
Executing Batch Scripts


Versioning

Describes how to assign a version to a BRP utility.

Each utility needs a version number. The version number should be the date of the last modification made to the utility, formatted as follows:

yyyymmdd

The version number must appear in the first line of the log file that the utility produces.

Parent topic: Producing Utilities for BRP


Logging

Describes logging for BRP utilities.

Log files are often the only way to get reliable data. The task of analyzing output can become easier when the log files are used and recording appropriate levels of output.

At a minimum log files need to contain:

  • Utility name
  • Utility version
  • Parameter names and values
  • Record of files modified/written (when appropriate)
  • Record of individual changes made to modified files (when appropriate)

The log message format should be as follows:

hh:mm:ss<tab>message type<tab>message

Message types can include INFO, WARN, ERROR, SEVERE, or DEBUG. These are generally self-explanatory, but SEVERE should not be used unless there is an abend (in Perl the die() command). Add new message types if the situation calls for it. For example, BRP has a SETUP message type.

Parent topic: Producing Utilities for BRP


Source, Executable, and CFG Files

Describes how utilities are delivered.

Utilities are produced by support services and partners and are delivered as a compiled executable with documentation and, if necessary, a CFG file.

Parent topic: Producing Utilities for BRP


Guidelines for BRP Utilities

Introduces utilities that need to be enabled for BRP.

This section focuses on guidelines for utilities that need to be "enabled" for BRP. The only difference is where input is coming from, output is going to, and how parameters are provided.

  • BRP and Non-BRP Modes
    Explains BRP and non-BRP modes.
  • Using User Exits
    Describes exit usage
  • Parameter Data
    Describes parameter data for BRP utilities.
  • Logging
    Describes logging for BRP-mode utilities.
  • Input/Output
    Describes input/output for BRP utilities.
  • Returning Values
    Describes returning values for BRP utilities.
  • Testing
    Provides guidance for testing BRP utilities.
Parent topic: Using the Batch Refresh Process


BRP and Non-BRP Modes

Explains BRP and non-BRP modes.

In general, any utility created for BRP should also be able to be run in a standalone manner; that is, it should run outside of and separate from BRP as well. Typically this means getting parameters from a CFG file. This is already being done for all pre-processing type utilities right now. There are occasional situations where this is not practical. The utility needs to be able to determine whether it is being executed in a BRP context or not. If the stand-alone mode requires a CFG file, the absence of a CFG file parameter can serve as a trigger for BRP-mode execution. Where this will not work, the first parameter of the utility should be "BRP" to trigger BRP-mode execution.

Parent topic: Guidelines for BRP Utilities


Using User Exits

Describes exit usage

There are several user exit points in BRP. At different user exits potential input files are in different places and output requirements are different as well. Knowing which user exit a utility is going to be run from is crucial. It is recommended that support services be consulted regarding which user exit to employ for a particular task. The majority of user exit utilities are source code pre-processors and all use the Update user exit.

Parent topic: Guidelines for BRP Utilities


Parameter Data

Describes parameter data for BRP utilities.

Parameter data typically comes from any of three general sources: command line, CFG file, or DOS environment variables. The first two are straightforward. DOS environment variables are easily acquired by capturing the output of the DOS set command with the following line of Perl code:

$dos_env_vars_str = `set`;
The special characters preceding and following the word "set" are not single quote characters; they are "backtick" characters.

The parameter values that drive a BRP run are made available to a user exit via DOS environment variables. BRP generates a DOS batch file that contains commands to set DOS environment variables. The user exit command is added to the end of the generated batch file and the batch file is executed using the backtick operator in Perl. The backtick operator executes a DOS command (in BRP the path to a batch file) in a shell "nested" inside of the shell of the BRP executable. The environment variables set up for a user exit only exist during the execution of that user exit. The environment variable commands are re-generated and run for each user exit.

In general, the format of parameter names and values should be standardized. BRP job parameters are of the form:
Parameter Name = Parameter Value

DOS environment variables and CFG file parameters are formatted in the same way. Command line parameters should follow the same standard. In general, command line parameters need to override the same named parameter from a CFG file or DOS environment. This allows a way to alter behavior in cases where the user may not have direct control over all the values.

Parent topic: Guidelines for BRP Utilities


Logging

Describes logging for BRP-mode utilities.

In addition to the general logging guidelines, the name of the log file and where it is written need to be addressed in BRP-mode utilities.

The log file name pattern is:
(timestamp)UtilityName Log.txt

where UtilityName is obvious and timestamp is a BRP environment parameter (BRP_TIMESTAMP) that identifies all logs for a BRP run.

Parent topic: Guidelines for BRP Utilities
Related information
BRP Environment Parameters


Input/Output

Describes input/output for BRP utilities.

Input and output locations will change depending on what files are needed and which user exit the utility is run from. Most utilities (source code pre-processing) will be running from the Update user exit.

The sources coming into the BRP process will be in the following path:

BRP_STAGINGDIR\BRP_TIMESTAMP

where BRP_STAGINGDIR is a full path referring to the Staging folder of a BRP install and BRP_TIMESTAMP holds the timestamp value for the current BRP run.

Output sources must be written back to this same location. However, to maintain integrity should the user-exit utility fail or otherwise not finish, it is recommended that output sources be written to the BRP Working folder (BRP_WORKINGDIR) and only when processing is completed should they then be copied back to the proper output location. A subfolder should be created in the Working folder for this purpose using the following format:

timestamp_UtilityName

This naming convention is required.

Parent topic: Guidelines for BRP Utilities


Returning Values

Describes returning values for BRP utilities.

BRP determines the return state of a user exit by examining all the output written to the "console" (STDOUT in Perl terminology) by the commands executed by the user exit. The examination is done after the user exit completes execution and control returns back to the BRP run. If there is no output BRP assumes the user exit commands completed successfully. If there is any output found BRP assumes there was a SEVERE level error and will immediately stop the run.

BRP will include any output it finds in a SEVERE level message in the main BRP log. Any user exit executed utility should be sure to make effective use of this behavior. User exits do not have any knowledge of what commands or utilities they are executing. Therefore a message written to the console should contain the utility or command name along with an appropriately brief message. The details behind a utility failure can be included in the utility's own log.

Parent topic: Guidelines for BRP Utilities


BRP Environment Parameters

Describes BRP environment parameters.

BRP parameter values are split into two groups. Ones prefixed with "BRP_" are for BRP specific values. Those prefixed with "EXT_" are for source file extension definitions. The tables below list all variables that are set by BRP for use by user exits along with a short description. Any path value will be fully qualified unless otherwise noted.

The following parameter uniquely identifies a BRP run.
Name | Description
BRP_TIMESTAMP | Timestamp value that uniquely identifies a BRP run and the logs that are generated during that run.
The following parameters are the paths to log files from BRP runs. Note that all the references to specific jobs are default settings only. There are very few cases where these exact jobs will not be used, but they do exist.
Name | Description
BRP_APPLYOBSOLETEPCFLOGFILE | Log from ApplyPCF.bj job for applying the BRP_OBSOLETEPCF file.
BRP_BWGLOGFILE | Log from BWG.exe (Batch WebGen).
BRP_CREATEBEGINPCFLOGFILE | Log from CreatePCF.bj job. This is run at the beginning of the BRP run and creates the file BRP_BEGINPCF.
BRP_CREATEENDPCFLOGFILE | Log from CreatePCF.bj job. This is run just before verification and creates the file BRP_ENDPCF.
BRP_EXECREPORTLOGFILE | Log for the ExecutiveReport.bj job.
BRP_GETEXTLOGFILE | Log for the GetExtensions2.mbu job. This is run at the beginning of the BRP and creates the file BRP_FILEEXTFILE. See the section below on extension values for more information.
BRP_IMSANALYSISLOGFILE | Log for the IMS Analysis.bj job.
BRP_UPDATELOGFILE | Log for the UpdateOnly.bj job.
BRP_VERIFYLOGFILE | Log for the VerifyOnly2.bj job.
The following parameters are for the various PCF files that are generated and used during a BRP run.
Name | Description
BRP_BEGINPCF | Generated at the beginning of a BRP run. Used for many purposes in BRP including determining obsolete sources.
BRP_ENDPCF | Generated toward the end of a BRP run, after the BRP_OBSOLETEPCF is applied and before verification.
BRP_OBSOLETEPCF | Generated during a Master BRP run if BRP_OBSOLETEPROCESSING is set to 1. This will shift sources missing from the current incoming set of files to the project specified in BRP_OBSOLETEPROJECT.
The following parameters are data files that BRP uses, flags that turn certain processing on or off, BRP install folders, and other various values.
Name | Description
BRP_DROPIND | Flag (1/0) that drops database indexes to improve verification and IMS Analysis performance.
BRP_LAUNCHHCC | Flag (1/0) that launches the HyperCode Converter to improve verification performance.
BRP_WAITHCC | Time in minutes to wait for HyperCode Converter to respond.
BRP_BRPLOGFILE | Main log file for a BRP run.
BRP_BRPINSTALLPATH | Path where BRP is installed. This is specified in the BRP initialization file. BRP will derive the path values for the six BRP folders (PreparedSources, Reports, Staging, Utilities, and Working) based off this path if they are not specified in the initialization file.
BRP_PREPAREDSOURCESDIR | Path where sources coming into BRP start off. In cases where a utility is in place to handle getting the sources off a server or mainframe this is the location where those sources are copied to.
BRP_REPORTDIR | Path to the folder where all log files are written to. Other resource files created during a BRP run are also written here including all PCF files, file extension data file and all generated user exit batch files.
BRP_RMWINSTALLPATH | Path to the install folder for MW.
BRP_STAGINGDIR | Folder where sources reside for updating to the workspace. Sources will actually be in a subfolder that is named with the BRP timestamp and not the Staging folder directly. This is also where the majority of source pre-processing utilities will look for inputs and write outputs.
BRP_UTILITIESDIR | Path to directory that contains all the executables the BRP will need along with extra resource files and the static user exit batch files.
BRP_WORKINGDIR | Folder user exit utilities should use for any work they need to perform.
BRP_WORKSPACEDIR | Path to the target workspace.
BRP_FILEEXTFILE | File containing the file extension definitions for the target workspace.
BRP_LASTRUNFILE | Text file containing the timestamp of the last BRP run that completed execution.
BRP_OBSOLETEEXCLUSIONSFILE | File that lists any files that should be excluded from obsolete processing. Typically this includes files generated by MW (ex. DASDL copybooks), but is often used for client-specific sources as well.
BRP_BRPRUNTYPE | Must be set to "Master".
BRP_DEBUG | Flag (1/0) that will increase the amount of messaging written to the main BRP log. Typically this is always set to 1.
BRP_LASTRUNTIMESTAMP | The timestamp value of the last BRP run that completed execution.
BRP_OBSOLETEPROCESSING | Flag (1/0) that turns obsolete processing on or off. When it is turned on the incoming set of files will be compared against the set of file currently in the target workspace. Any files currently in the workspace, but not in the incoming set of files will be moved to an obsolete project (named in the BRP_OBSOLETEPROJECT parameter).
BRP_OBSOLETEPROJECT | Name of a project where obsolete sources will be moved to.
BRP_SITE | Documentation parameter that is set in the BRP initialization file. The value here will be written to the beginning of the main BRP log file. It is used mainly for support purposes to ensure that initialization and log files produced by a client match up.
The following parameters contain the command that will be executed by BRP. Typically this will specify a static DOS batch file (as opposed to the generated batch file BRP generates for each user exit). The static batch file is used so that multiple commands can be executed in a single user exit. These parameters will only exist if the user exit is being used. Below is a complete list of all user exit parameters, but it will be rare to see them all at once. They are listed in the order they would be executed in a BRP run. There is one user exit for each major step of the BRP. They always are the first task that is done in each step.
Name Description
BRP_USEREXIT_SETUP
BRP_USEREXIT_INIT
BRP_USEREXIT_STAGING
BRP_USEREXIT_UPDATE
BRP_USEREXIT_VERIFICATION
BRP_USEREXIT_GENERATION
BRP_USEREXIT_END
The following parameters contain information on the source file extensions that are valid for each legacy file type for the target workspace. The exact parameters that will be here depend upon what options are activated for the target workspace.
Name | Description
Parameter Names | The general format of the parameter names is EXT_ type, where type is the name of the corresponding directory in the workspace Sources folder. Note that in the past this name is not necessarily the same as the type name found in a PCF file. For example, PL/I included sources are contained in the Sources folder PLIInclude, but that source type is named "PLINC" in PCF files.
Parameter Values | The extension values are separated by a single space and will be in the same order they appear in the workspace options window. Example: EXT_COBOL = cbl cob ccp C74
Parent topic: Guidelines for BRP Utilities


Testing

Provides guidance for testing BRP utilities.

Testing user exit utilities can be challenging. The easiest way to do this is to use one of the DOS batch files generated for each enabled user exit during a BRP run. These files will contain all the parameters and the values can be changed to suit the needs of the testing requirements. Replace the last command in the file with whatever command is necessary. In a Perl context we would use:

perl -d myUtility.pl

Note that a DOS command window will not execute one of these generated batch files when they have same filename the BRP run assigns (for example, (timestamp)UserExit.bat). This is due to some intrinsic interpretation of the leading "(timestamp)" in the file name. Simply delete this portion of the file name and the batch file will work normally.

Parent topic: Guidelines for BRP Utilities


Using Batch Scripts

Overview of batch scripts documentation.

Use the batch job scripts supplied with Modernization Workbench in BRP user exits or on a standalone basis. The scripts are located in \<Workbench Home>\Scripts\BRP.

Only scripts recommended for use by clients are described. Unless otherwise specified, tool options set in the Modernization Workbench govern the behavior of the scripts. The default project referred to in the descriptions is the project with the same name as the workspace.

The notification file available in some scripts summarizes job execution. A sample notification file for the Verify.bj script follows. The notification file indicates that eight source files were verified successfully and two were verified with errors.
Date: 10/28/2009
Workspace C:\Workspaces\Training
Status of the Verification step:
successful  - 8
with errors - 2
failed      - 0
  • AnalyzeProgram.bj
    Generate HyperView information.
  • ApplyPCF.bj
    Assign source files to projects based on a project control file (PCF).
  • BusinessRulesReport.bj
    Generate a Business Rules Report.
  • BusinessRulesValidation.bj
    Validate business rules.
  • ChangeTraffic.bj
    Generate change traffic metrics.
  • CheckQueue.bj
    Check whether the HyperCode Converter(s) queue is empty.
  • ClipperDetails.bj
    Generate a Clipper Details Report.
  • ClipperMetrics.bj
    Generate a Clipper Metrics Report.
  • ClipperMultiSearch.bj
    Execute a Clipper search with multiple criteria.
  • ClipperSearch.bj
    Execute a Clipper search.
  • ComplexityReport.bj
    Generate a Complexity Metrics Report.
  • CreatePCF.bj
    Create a project control file (PCF).
  • CreateWS.bj
    Create a workspace.
  • CRUDReport.bj
    Generate a CRUD Report.
  • DBA.Cobol.bj
    Perform Cobol domain-based analysis.
  • DCE.bj
    Perform dead-code elimination.
  • DiagramBAV.bj
    Generate Batch Application Viewer (BAV) Diagrams.
  • DiagramCallie.bj
    Generate Callie Diagrams.
  • DiagramFlowchart.bj
    Generate Flowchart Diagrams.
  • DiagramProject.bj
    Generate a relationship flow diagram for a project.
  • DiagramTS.bj
    Generate a relationship flow diagram for each object of the specified type.
  • EffortReport.bj
    Generate an Effort Estimation Report.
  • ExecutiveReport.bj
    Generate an Executive Report.
  • ExportDescriptions.bj
    Export object descriptions to an ERD file.
  • ExportRules.bj
    Export business rules to an ERD file.
  • ExportScreens.bj
    Export renderings for screens in the workspace.
  • GenCopybooks.bj
    Generate copybooks from Database Description, Device Description, or DMSII DASDL files.
  • GenScreens.bj
    Generate screens from Device Description files.
  • ImpactReport.bj
    Generate an Impact Subtree Report.
  • ImpactReportFromList.bj
    Generate an Impact Subtree Report from a Clipper list.
  • ImpExBAV.bj
    Import or export batch job dependencies or user names.
  • ImportRules.bj
    Import business rules from an ERD file.
  • IMS Analysis.bj
    Perform IMS Analysis.
  • Invalidate.bj
    Invalidate source files.
  • InventoryReport.bj
    Generate an Inventory Report.
  • Populate.bj
    Populate a workspace from an ERD file.
  • ProcessChangeUnit.bj
    Set a change date for complexity metrics other than the date source files are verified, and/or delete source files from the workspace.
  • ReferenceReport.bj
    Generate Reference Reports.
  • Refresh.bj
    Register and verify new source files, refresh and verify updated source files.
  • Register.bj
    Register new source files, refresh updated source files.
  • Related.bj
    Create a project control file (PCF) based on the relationships between source files.
  • ResolveDecisions.bj
    Resolve decisions automatically.
  • RestoreDecisions.bj
    Restore resolved decisions.
  • RXP.bj
    Execute a Repository Exchange Protocol (RXP) query.
  • SaveDecisions.bj
    Create a decisions control file (DCF).
  • SetChangeDate.bj
    Set a change date for complexity metrics other than the date source files are verified.
  • SetProject.bj
    Assign source files to projects based on a project control file (PCF).
  • TagCmd.bj
    Create, delete, and rename tags. Create and delete references between tags.
  • Unregister.bj
    Unregister source files.
  • UpdateOnly.bj
    Refresh updated source files only.
  • UpdateTrendingSnapshot.bj
    Update data for Enterprise View trending charts.
  • Upgrade.bj
    Upgrade a workspace.
  • Verify.bj
    Verify source files.
Related information
Executing Batch Scripts


AddNew.bj

Register new source files only.

Action

Register new source files only. Use:
  • Register.bj to register new source files and refresh updated source files.
  • UpdateOnly.bj to refresh updated source files only.
  • Refresh.bj to register and verify new and updated source files.
  • Verify.bj to verify registered source files.

Syntax

AddNew Workspace Dir [Entity] [Project] [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
Dir | Staging directory for incoming source files.
Optional Parameters | Description
Entity | * or entity type of source files. Default is *.
Project | Project. Default is the default project.
Detailed | Log file.
Related information
Refresh.bj
Register.bj
UpdateOnly.bj
Verify.bj


AffectedCodeReport.bj

Generate an Affected Code Report.

Action

Generate an Affected Code Report in MS Word format. The report shows code that would be impacted by changing a data item's definition or usage. The data item is called a seed field.

Syntax

AffectedCodeReport Workspace Model SearchPattern CriterionName [Accumulate] [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
Model | HyperView model for the source files to be searched.
SearchPattern | Search criterion for the seed field.
CriterionName | Name of the search criterion for the seed field.
Optional Parameters | Description
Accumulate | Whether to append the results to existing results, True or False. Default is False.
Detailed | Log file.


AnalyzeProgram.bj

Generate HyperView information.

Action

Generate HyperView information for the workspace.

Syntax

AnalyzeProgram Workspace [Project] [Notify] [Detailed] [Drop] [LaunchHHC] [ExtraHHC] [StopHHC] [Wait]

Required Parameters | Description
Workspace | Workspace file (.rwp).
Optional Parameters | Description
Project | Project. Default is the default project.
Notify | Notification file.
Detailed | Log file.
Oracle Only Parameters Description

Drop

Whether to drop repository indexes. Specify:

  • Auto, to let the script determine whether to drop repository indexes based on the number of files to be processed.
  • Yes, to drop repository indexes.
  • No, to not drop repository indexes.

Dropping repository indexes generally improves performance when a large number of files need to be processed. Dropped indexes are restored when processing is complete. Default is No.

LaunchHHC

Whether to launch the HyperCode Converter, Yes or No. Launching the HyperCode Converter generally improves performance. Default is No.

ExtraHHC

If LaunchHHC is specified, the number of additional HyperCode Converters to launch.

StopHHC

Whether to stop the HyperCode Converter(s) when processing is complete, Yes or No.

Wait

Whether to wait until the HyperCode Converter(s) queue is empty. Specify:

  • Yes, to wait indefinitely.
  • No, to not wait.
  • The number of seconds to wait for the count on the queue to change. If the count does not change within the specified time, BRP resumes. Sixty minutes is recommended. 0 means no timeout.
Parent topic: Using Batch Scripts


ApplyPCF.bj

Assign source files to projects based on a project control file (PCF).

Action

Assign source files to projects based on a project control file (PCF). A project control file identifies the projects to which source files belong.

ApplyPCF.bj differs from SetProject.bj in that it does not allow you to assign source files to projects additively. Use CreatePCF.bj or Related.bj to create a project control file.

Syntax

ApplyPCF Workspace ProjectCF [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
ProjectCF | Project control file (.pcf).
Optional Parameters | Description
Detailed | Log file.
Parent topic: Using Batch Scripts
Related information
Related.bj
CreatePCF.bj
UpdateOnly.bj


BusinessRulesReport.bj

Generate a Business Rules Report.

Action

Generate a Business Rules Report. The report lists the business functions, rule sets, segments, attributes, data elements, and control conditions of business rules in the workspace.

Syntax

BusinessRulesReport Workspace File [Project] [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
File | Output file. The format of the report depends on the extension. Supported extensions are .html, .htm, .xls, .rtf, .doc, .txt, and .csv.
Optional Parameters | Description
Project | Project. Default is the default project.
Detailed | Log file.
Parent topic: Using Batch Scripts


BusinessRulesValidation.bj

Validate business rules.

Action

Indicate whether business rule segments no longer are valid. An invalid segment is out of synch with the rule, typically because lines of code have been added or deleted during a refresh or edit. Optionally, specify how to handle invalid segments.

Syntax

BusinessRulesValidation Workspace [Action] [Project] [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
Optional Parameters Description
Action How to handle invalid segments. Specify:
  • leave, to retain the invalid segment but set the rule Segment Validity attribute to Invalid.
  • delete, to delete the invalid segment and set the rule Segment Validity attribute to Invalid.
  • valid, to resynchronize the segment, subject to the limitations described in Analyzing Programs in the workbench documentation set.

The values are case-sensitive.

Project

Project. Default is the default project.

Detailed

Log file.

Parent topic: Using Batch Scripts


ChangeTraffic.bj

Generate change traffic metrics.

Action

Generate change traffic metrics. Change traffic metrics compare the source files currently in a workspace with the source files in a change unit:

  • At the tag level, the number of new, modified, and deleted files in the change unit.
  • At the object level, the number of new, modified, deleted, and moved lines in the modified files, and the number of lines in the new and deleted files.

The change unit comprises the new and modified source files, and optionally a change unit description file, named Configuration.txt. Use the change unit description file to:

  • List the source files to be deleted, in the form DELETED:filename.
  • Assign the change metrics a date other than the date the script is executed. Specify the date in the form DATE: YYYY-MM-DD HH24:MI:SS.

For example:

DATE: 2010-03-15 17:12:13
DELETED:MYPROG.CBL
DELETED:MYCOPY.CPY
Generating or importing change traffic metrics does not physically delete source files from the workspace. Use ProcessChangeUnit.bj with a change unit description file to delete source files from the workspace.

The output of ChangeTraffic.bj is an XML file that can be imported into the repository in online mode using the Enterprise View Configuration interface, or in batch mode using the following command:

java -jar avmcore-Bobcat.jar "workspace" "outputfile"

where workspace is the name of the workspace and outputfile is the XML output file.

Enterprise View must be installed before you run the import command.

Syntax

ChangeTraffic UDCFolder SourceFolder XMLOutputFile ProjectName UDCName [Detailed]

Required Parameters | Description
UDCFolder | Dedicated folder for the change unit.
SourceFolder | \Sources folder for the workspace.
XMLOutputFile | Output file.
ProjectName | Name of tag for the application.
UDCName | Name of tag for the change unit. Use this argument to distinguish between change units. Enter an empty string if you do not want to specify a change unit tag.
Optional Parameters | Description
Detailed | Log file.
Parent topic: Using Batch Scripts


CheckQueue.bj

Check whether the HyperCode Converter(s) queue is empty.

Action

Check whether the HyperCode Converter(s) queue is empty.

Syntax

CheckQueue Workspace [Project] [Detailed] [Wait]

Required Parameters | Description
Workspace | Workspace file (.rwp).
Optional Parameters | Description
Project | Project. Default is the default project.
Detailed | Log file.
Oracle Only Parameters Description

Wait

Whether to wait until the HyperCode Converter(s) queue is empty. Specify:

  • Yes, to wait indefinitely.
  • No, to not wait.
  • The number of seconds to wait for the count on the queue to change. If the count does not change within the specified time, BRP resumes. Sixty minutes is recommended. 0 means no timeout.
Parent topic: Using Batch Scripts


ClipperDetails.bj

Generate a Clipper Details Report.

Action

Generate a Clipper Details Report. For each source file in the specified Clipper list, the report shows the constructs in the list, their type, and their location in the file. You can customize the report to include any HyperView attribute related to the constructs.

Syntax

ClipperDetails Workspace Model ListName Category FileName Attrs [Project] [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
Model | HyperView model for the listed source files.
ListName | Name of the list. The list is assumed to be owned by the current user. If it is owned by another user, append a vertical bar (|) and the user name.
Category | List category.
FileName | Output file. The format of the report depends on the extension. Supported extensions are .html, .htm, .xls, .rtf, .doc, .txt, and .csv.
Attrs | String containing HyperView attributes to include in the report, separated by a vertical line (|).
Optional Parameters | Description
Project | Project. Default is the default project.
Detailed | Log file.
Parent topic: Using Batch Scripts


ClipperMetrics.bj

Generate a Clipper Metrics Report.

Action

Generate a Clipper Metrics Report. For each list in the specified Clipper category, the Metrics Report shows the number of list items in each program in the workspace.

Syntax

ClipperMetrics Workspace Model Category FileName [Project] [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
Model | HyperView model for the listed source files.
Category | List category.
FileName | Output file. The format of the report depends on the extension. Supported extensions are .html, .htm, .xls, .rtf, .doc, .txt, and .csv.
Optional Parameters | Description
Project | Project. Default is the default project.
Detailed | Log file.
Parent topic: Using Batch Scripts


ClipperMultiSearch.bj

Execute a Clipper search with multiple criteria.

Action

Execute a Clipper search with multiple criteria. The results are displayed in the specified Clipper list.

Syntax

ClipperMultiSearch Workspace Criteria Model ListName Category [Project] [Accumulate] [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
Criteria | File containing the search criteria, one per line. Specify the full path name of the criterion in the HyperView Advanced Search tool, including the tab name (General) and any folder names. For example, General:Coding Standards\MOVE Statements\Possible Data Padding. Follow the notation specified exactly.
Model | HyperView model for the listed source files.
ListName | Name of the list. The list is assumed to be owned by the current user. If it is owned by another user, append a vertical bar (|) and the user name.
Category | List category.
Optional Parameters | Description
Project | Project. Default is the default project.
Accumulate | Whether to append the results to existing results, True or False. Default is False.
Detailed | Log file.
Parent topic: Using Batch Scripts
Related information
ClipperSearch.bj
Example: Performing an Advanced Search


ClipperSearch.bj

Execute a Clipper search.

Action

Execute a Clipper search. The results are displayed in the specified Clipper list.

Syntax

ClipperSearch Workspace Criterion Model ListName Category [Project] [Accumulate] [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
Criterion | Full path name of the search criterion in the HyperView Advanced Search tool, including the tab name (General) and any folder names. For example, General:Coding Standards\MOVE Statements\Possible Data Padding. Follow the notation specified exactly.
Model | HyperView model for the source files to be searched.
ListName | Name of the list. The list is assumed to be owned by the current user. If it is owned by another user, append a vertical bar (|) and the user name.
Category | Category of the list.
Optional Parameters | Description
Project | Project to execute search for.
Accumulate | Whether to append the results to existing results, True or False. Default is False.
Detailed | Log file.
Parent topic: Using Batch Scripts
Related information
ClipperMultiSearch.bj
Example: Performing an Advanced Search


ComplexityReport.bj

Generate a Complexity Metrics Report.

Action

Generate a Complexity Metrics Report. The report shows complexity metrics for objects of the specified type.

Syntax

ComplexityReport Workspace File [Entity] [Project] [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
File | Output file. The format of the report depends on the extension. Supported extensions are .html, .htm, .xls, .rtf, .doc, .txt, and .csv.
Optional Parameters | Description
Entity | Entity type of objects to report on. Default is program.
Project | Project. Default is the default project.
Detailed | Log file.
Parent topic: Using Batch Scripts


CreatePCF.bj

Create a project control file (PCF).

Action

Create a project control file (PCF) for a workspace. A project control file identifies the projects to which source files belong. Use ApplyPCF.bj or SetProject.bj to assign source files to projects based on the project control file.

Syntax

CreatePCF Workspace Out [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
Out | Project control file (.pcf).
Optional Parameters | Description
Detailed | Log file.
Parent topic: Using Batch Scripts
Related information
ApplyPCF.bj
Related.bj
UpdateOnly.bj


CreateWS.bj

Create a workspace.

Action

Create a workspace.

Syntax

CreateWS Workspace [DB] [Detailed]]
/* Oracle */DSN Schema Password [User]
/* DB/2 */DSN Schema Password [User] [TableSpace] [IndexSpace]
/* SQL Server */Server Database Password User

Required Parameters | Description
Workspace | Workspace file (.rwp).
Optional Parameters | Description
Oracle Required Parameters | Description
DB | * or database type: Oracle, DB2, or MSSQL. Default is *.
Detailed | Log file.
DSN | ODBC data source name (DSN) for the database that holds the repository.
Schema | Database schema name for the repository.
Password | Database password that gives access to the schema.
Oracle Optional Parameters | Description
User | Database user name that gives access to the schema.
DB/2 Required Parameters | Description
DSN | ODBC data source name (DSN) for the database that holds the repository.
Schema | Database schema name for the repository.
Password | Database password that gives access to the schema.
DB/2 Optional Parameters | Description
User | Database user name that gives access to the schema.
TableSpace | Name of the tablespace for the repository.
IndexSpace | Name of the tablespace for database indexes.
SQL Server Required Parameters | Description
Server | Name of the server.
Database | Name of the database.
Password | Password that gives access to the database.
User | User name that gives access to the database.
Parent topic: Using Batch Scripts


CRUDReport.bj

Generate a CRUD Report.

Action

Generate a CRUD Report. The report shows the data operations programs perform (Insert, Read, Update, or Delete) and the data objects on which the programs operate.

Syntax

CRUDReport Workspace File [Project] [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
File | Output file. The format of the report depends on the extension. Supported extensions are .html, .htm, .xls, .rtf, .doc, .txt, and .csv.
Optional Parameters | Description
Project | Project. Default is the default project.
Detailed | Log file.
Parent topic: Using Batch Scripts


DBA.Cobol.bj

Perform Cobol domain-based analysis.

Action

Perform domain-based analysis of Cobol programs. Domain-based analysis "slices out" a specialized program based on the values of one or more variables.

An input file in CSV format identifies the slice parameters. Each line contains the following information:

ProgName,SliceName,DataItem,FileName,Row,Col,Comparison,Value,LowerValue,UpperValue

where:

  • ProgName is the name of the program from which the slice will be extracted.
  • SliceName is the name of the slice.
  • DataItem is the name of the specialization variable.
  • FileName is the name of the source file containing the specialization variable.
  • Row is the row number of the specialization variable in the source file.
  • Col is the column number of the specialization variable in the source file.
  • Comparison is the comparison type: "equals" sets the specialization variable to the values specified in Value; "not equals" sets the specialization variable to every value but the values specified in Value.
  • Value is the value to set the specialization variable to.
  • If Value is omitted, LowerValue is the lower value of the range of values to set the specialization variable to.
  • If Value is omitted, UpperValue is the upper value of the range of values to set the specialization variable to.

Multiple locations can be specified for a slice. Multiple conditions can be set for a location. All content is case-sensitive.

Input File Sample

DAYOFWEEK,Domain1,YEAR,DayOfWeek.cbl,12,12,equals,2000,,
DAYOFWEEK,Domain1,YEAR,DayOfWeek.cbl,12,12,equals,,2002,2005
DAYOFWEEK,Domain1,MONTH,DayOfWeek.cbl,13,12,equals,4,,
DAYOFWEEK,Domain1,MONTH,DayOfWeek.cbl,13,12,equals,5,,
DAYOFWEEK,Domain1,MONTH,DayOfWeek.cbl,65,19,equals,5,,
DAYOFWEEK,Domain1,MONTH,DayOfWeek.cbl,65,19,equals,6,,
DAYOFWEEK,Domain1,MONTH,DayOfWeek.cbl,95,15,equals,7,,
DAYOFWEEK,Domain1,MONTH,DayOfWeek.cbl,95,15,equals,,1,3
DAYOFWEEK,Domain2,YEAR,DayOfWeek.cbl,81,15,equals,,2001,2010
GSS,Domain3,GSS1003-CMD-CODE-I,GSS.cbl,186,16,equals,"ENTER",,

Syntax

DBA.Cobol Workspace List [Options] [Export] [Notify] [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
List | CSV file with slice parameters.
Optional Parameters | Description
Options | Options script file. Default values for options usually are acceptable. Contact support services for special needs.
Export | Destination folder for slices. Results normally are viewed in MW Component Maker.
Notify | Notification file.
Detailed | Log file.
Parent topic: Using Batch Scripts


DCE.bj

Perform dead-code elimination.

Action

Perform dead-code elimination (DCE) for programs in source files of the specified type. For each program analyzed for dead code, DCE generates a component that consists of the original source code minus any unreferenced data items or unreachable procedural statements.

Syntax

DCE Workspace Entity [Options] [Pattern] [Project] [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
Entity | HyperView model for the source files to be analyzed for dead code. Valid values are COBOL, PL|1, NATURAL, and NATSUBROUTINE.
Optional Parameters | Description
Options | Options script file. Default values for options usually are acceptable. Contact support services for special needs.
Pattern | Pattern for naming generated components. The pattern may contain any valid symbols. An asterisk (*) is replaced with the name of the analyzed program. If the argument is omitted, component names are generated in the form BRE nn, where nn is an incrementing number.
Project | Project. Default is the default project.
Detailed | Log file.
Parent topic: Using Batch Scripts


DiagramBAV.bj

Generate Batch Application Viewer (BAV) Diagrams.

Action

Generate Batch Application Viewer (BAV) Diagrams for the workspace. The diagrams show the relationships between jobs, procedures and programs, and data stores.

Syntax

DiagramBAV Workspace [Pattern] [Project] [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
Optional Parameters | Description
Pattern | Pattern for naming the generated diagrams, consisting of the output folder, file name pattern, and extension. For example, D:*.emf. The file name pattern may contain any valid symbols. An asterisk (*) is replaced with the name of the analyzed object. The format of the diagram depends on the extension: .dgm.xml, .bmp, .jpg, .vsd, .vdx, or .emf. Default is\WorkspaceFolder\Output\ObjectName.bmp.
Project | Project. Default is the default project.
Detailed | Log file.
Parent topic: Using Batch Scripts


DiagramCallie.bj

Generate Callie Diagrams.

Action

Generate Callie Diagrams for the workspace. The diagrams show the call flow for paragraphs in a Cobol program, subroutines in an RPG program, or procedures in a PL/I or Natural program.

The subgraph mode offers a cyclic representation of the information in the diagram. Items are drawn once. Relationship lines cross. Subgraph views are often easier to understand than subtree views.

The subtree mode offers a linear representation of the information in the diagram. Items are drawn as many times as necessary. Relationship lines do not cross. Use this view if too many intersecting lines make a subgraph view hard to read.

Syntax

DiagramCallie Workspace [Pattern] [Mode] [Project] [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
Optional Parameters | Description
Pattern | Pattern for naming the generated diagrams, consisting of the output folder, file name pattern, and extension. For example, D:*.emf. The file name pattern may contain any valid symbols. An asterisk (*) is replaced with the name of the analyzed object. The format of the diagram depends on the extension: .dgm.xml, .bmp, .jpg, .vsd, .vdx, or .emf. Default is\WorkspaceFolder\Output\ObjectName.bmp.
Mode | Mode of the diagram, subgraph or subtree.
Project | Project. Default is the default project.
Detailed | Log file.
Parent topic: Using Batch Scripts


DiagramFlowchart.bj

Generate Flowchart Diagrams.

Action

Generate Flowchart Diagrams for the workspace. The diagrams show the flow of control between statements in a Cobol paragraph or PL/I procedure, or between steps in a job or JCL procedure.

Syntax

DiagramFlowchart Workspace [Pattern] [Project] [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
Optional Parameters | Description
Pattern | Pattern for naming the generated diagrams, consisting of the output folder, file name pattern, and extension. For example, D:*.emf. The file name pattern may contain any valid symbols. An asterisk (*) is replaced with the name of the analyzed object. The format of the diagram depends on the extension: .dgm.xml, .bmp, .jpg, .vsd, .vdx, or .emf. Default is\WorkspaceFolder\Output\ObjectName.bmp.
Project | Project. Default is the default project.
Detailed | Log file.
Parent topic: Using Batch Scripts


DiagramProject.bj

Generate a relationship flow diagram for a project.

Action

Generate a relationship flow diagram for the specified project. If a tag is specified, DiagramProject.bj also generates a Blackbox Interface Report with the name DiagramName-ProjectName-BlackBoxRpt.csv showing the relationship of black boxes in the diagram to each other and to other diagram objects.

There is no explicit argument for the Black Box Report. Specifying a tag is sufficient.

Use DiagramTS.bj to generate a relationship flow diagram for each workspace object of a specified type.

Syntax

DiagramProject Workspace Scope [Pattern] [Tag] [Layout] [Project] [OptionSet] [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
Scope | Diagram scope (including user-defined scopes).
Optional Parameters | Description
Pattern

Pattern for naming the generated diagram, consisting of the output folder, file name pattern, and extension. For example, D:*.emf. The file name pattern may contain any valid symbols. An asterisk (*) is replaced with the name of the project. The format of the diagram depends on the extension: .dgm.xml, .bmp, .jpg, .vsd, .vdx, or .emf. Default is \WorkspaceFolder\Output\ProjectName.bmp.

Tag | Tag used to black-box objects in the diagrams. Specify a tag to generate a Blackbox Interface Report with the name DiagramName-ProjectName-BlackBoxRpt.csv showing the relationship of black boxes in the diagram to each other and to other diagram objects.

Layout

Diagram layout: circular, hierarchical, orthogonal, symmetric, or tree.

Project

Project. Default is the default project.

OptionSet

Whether to use the current settings in the interactive Diagrammer tool for auto expand, project boundary entities, and potential incomplete composite relationships, or the default settings:

  • *interactive, to specify the current settings.
  • *default, to specify the default settings.

Default is *default.

Detailed

Log file.

Parent topic: Using Batch Scripts
Related information
DiagramTS.bj


DiagramTS.bj

Generate a relationship flow diagram for each object of the specified type.

Action

Generate a relationship flow diagram for each object of the specified type in the workspace. Specify a project to limit the diagrams to objects in the project. Use DiagramProject.bj to generate a relationship flow diagram for an entire project.

Syntax

DiagramTS Workspace Scope [Pattern] [Entity] [Tag] [Layout] [Project] [OptionSet] [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
Scope | Diagram scope (including user-defined scopes).
Optional Parameters Description

Pattern

Pattern for naming the generated diagrams, consisting of the output folder, file name pattern, and extension. For example, D:*.emf. The file name pattern may contain any valid symbols. An asterisk (*) is replaced with the name of the analyzed object. The format of the diagram depends on the extension: .dgm.xml, .bmp, .jpg, .vsd, .vdx, or .emf. Default is\WorkspaceFolder\Output\ObjectName.bmp.

Entity

* or entity type of source files. Default is *.

Tag

Tag used to black-box objects in the diagrams.

Layout

Diagram layout: circular, hierarchical, orthogonal, symmetric, or tree.

Project

Project. Default is the default project.

OptionSet

Whether to use the current settings in the interactive Diagrammer tool for auto expand, project boundary entities, and potential incomplete composite relationships, or the default settings:

  • *interactive, to specify the current settings.
  • *default, to specify the default settings.

Default is *default.

Detailed

Log file.

Parent topic: Using Batch Scripts
Related information
Example: Creating Diagrams
DiagramProject.bj


EffortReport.bj

Generate an Effort Estimation Report.

Action

Generate an Effort Estimation Report. The report compares source files based on weighted values for selected complexity metrics.

Syntax

EffortReport Workspace File [Project] [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
File | Output file. The format of the report depends on the extension. Supported extensions are .html, .htm, .xls, .rtf, .doc, .txt, and .csv.
Optional Parameters | Description
Project | Project. Default is the default project.
Detailed | Log file.
Parent topic: Using Batch Scripts


ExecutiveReport.bj

Generate an Executive Report.

Action

Generate an Executive Report. The report provides HTML views of application inventories that a manager can use to assess the risks and costs of supporting the application.

Syntax

ExecutiveReport Workspace Folder [Project] [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
File | Output file. The format of the report depends on the extension. Supported extensions are .html, .htm, .xls, .rtf, .doc, .txt, and .csv.
Optional Parameters | Description
Project | Project. Default is the default project.
Detailed | Log file.
Parent topic: Using Batch Scripts


ExportDescriptions.bj

Export object descriptions to an ERD file.

Action

Export object descriptions to an ERD file.

Syntax

ExportDescriptions Workspace ERD [Entity] [Project] [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
ERD | ERD file.
Optional Parameters Description
Entity * or entity type of the objects to export descriptions for. Default is *.
Use the flag attribute of an entity type to specify all entity types with that flag, for example:
*LEGACY
which specifies all entity types with the LEGACY flag. For more on flags, see Software Development Toolkit, available from support services.

Project

Project. Default is the default project.

Detailed

Log file.

Parent topic: Using Batch Scripts


ExportRules.bj

Export business rules to an ERD file.

Action

Export business rules to an ERD file.

Syntax

ExportRules Workspace FileName [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
FileName | ERD file.
Optional Parameters | Description
Detailed | Log file.
Parent topic: Using Batch Scripts


ExportScreens.bj

Export renderings for screens in the workspace.

Action

Export renderings for screens in the workspace.

Syntax

ExportScreens Workspace [Pattern] [Output] [Project] [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
Optional Parameters | Description
Pattern | Pattern for naming screen renderings, consisting of the output folder, file name pattern, and extension. For example, D:*.rtf. The file name pattern may contain any valid symbols. An asterisk (*) is replaced with the name of the screen. The format of the renderings depends on the extension. Supported extensions are .rtf and .doc.
Output | Output folder if not specified in Pattern.
Project | Project. Default is the default project.
Detailed | Log file.
Parent topic: Using Batch Scripts


GenCopybooks.bj

Generate copybooks from Database Description, Device Description, or DMSII DASDL files.

Action

Generate copybooks from Database Description, Device Description, or DMSII DASDL files. RPG programs and Cobol programs that execute in the AS/400 environment often use copy statements that reference Database Description or Device Description files rather than copybooks. MCP Cobol programs use copy statements that reference DMSII DASDL files. If your application uses copy statements to reference these types of files, you need to verify the files and generate copybooks for the application before you verify program files.

Syntax

GenCopybooks Workspace [Entity] [Condition] [Convert] [Overwrite] [Options] [Project] [Notify] [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
Optional Parameters | Description
Entity | * or entity type of source files. Default is *.
Condition | Scope of source. Use the Repository Exchange Protocol (RXP) to code the condition. For more information, see Analyzing Projects in the workbench documentation set. Default is project.
Convert | Specify this argument with an empty value to generate target copybooks and convert them to physical copybooks in the same step.
Overwrite | Specify this argument with an empty value to overwrite existing physical copybooks with the same name.
Options | Options script file. Default values for options usually are acceptable. Contact support services for special needs.
Project | Project. Default is the default project.
Notify | Notification file.
Detailed | Log file.
Parent topic: Using Batch Scripts


GenScreens.bj

Generate screens from Device Description files.

Action

Generate screens from Device Description files.

Syntax

GenScreens Workspace [Entity] [Condition] [Project] [Notify] [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
Optional Parameters | Description
Entity | * or entity type of source files. Default is *.
Condition | Scope of source. Use the Repository Exchange Protocol (RXP) to code the condition. For more information, see Analyzing Projects in the workbench documentation set. Default is project.
Project | Project. Default is the default project.
Notify | Notification file.
Detailed | Log file.
Parent topic: Using Batch Scripts


ImpactReport.bj

Generate an Impact Subtree Report.

Action

Generate an Impact Subtree Report. The report shows the impact trace subtree for the specified data item occurrence in XML format or in a database.

Syntax

ImpactReport Workspace Entity Name HCID FileName [Direction] [Project] [Detailed]
Required Parameters | Description

Workspace

Workspace file (.rwp).

Entity | Entity type of the data item.
Name | Name of the data item.
HCID HCID of the data item occurrence. Alternatively, use the following arguments:
  • Var, to specify the data item name.
  • Source, to specify the relative path of the source file containing the data item occurrence.
  • Row, to specify the row number of the data item occurrence in the source file.
  • Col, to specify the column number of the data item occurrence in the source file.
FileName | Output file. The format of the report depends on the extension. Supported extensions are .xml and .mdb.
Optional Parameters Description

Direction

Direction of the trace:

  • F or 1, to specify a forward trace.
  • B or 0, to specify a backward trace.

Forward is the default.

Project

Project. Default is the default project.

Detailed

Log file.

Parent topic: Using Batch Scripts
Related information
ImpactReportFromList.bj


ImpactReportFromList.bj

Generate an Impact Subtree Report from a Clipper list.

Action

Generate an Impact Subtree Report from a Clipper list. The report shows the impact trace subtrees for occurrences of data items in the list in XML format or in a database.

Syntax

ImpactReportFromList Workspace Model ListName Category Output [Direction] [Split] [Project] [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
Model | HyperView model for the listed source files.
ListName | Name of the list. The list is assumed to be owned by the current user. If it is owned by another user, append a vertical bar (|) and the user name.
Category | List category.
Output | Output file. The format of the report depends on the extension. Supported extensions are .xml and .mdb. When Split is set to Y, the path of the folder for .mdb output files.
Optional Parameters | Description

Direction

Direction of the trace:

  • F or 1, to specify a forward trace.
  • B or 0, to specify a backward trace.

Forward is the default.

Split | Whether to use the split program method, Y or N. The split program method generates a separate .mdb output file for each program that contains a data item occurrence in the list. N is the default.

Project

Project. Default is the default project.

Detailed

Log file.

Parent topic: Using Batch Scripts
Related information
ImpactReport.bj


ImpExBAV.bj

Import or export batch job dependencies or user names.

Action

Import or export batch job dependencies or user names from Batch Application Viewer (BAV).

Syntax

ImpExBAV Workspace Op FileName [Project] [Notify] [Detailed]
Required Parameters | Description

Workspace

Workspace file (.rwp).

Op Operation. Specify:
  • ImportDeps, to import dependencies.
  • ExportDeps, to export dependencies.
  • ImportUsers, to import user names.
  • ExportUsers, to export user names.
FileName | Output file.
Optional Parameters | Description
Project | Project. Default is the default project.
Notify | Notification file.
Detailed | Log file.
Parent topic: Using Batch Scripts


ImportRules.bj

Import business rules from an ERD file.

Action

Import business rules from an ERD file.

Syntax

ImportRules Workspace FileNames [Mode] [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
FileNames | File name of ERD file, or a pattern to match ERD file names.
Optional Parameters Description
Mode How to handle rules that have the same internal names as existing rules. Specify:
  • Creating, to create rules with unique internal names, whether or not they have the same internal names.
  • Replacing, to replace existing rules whether or not they have been updated.
  • Updating, to replace existing rules only when they have been updated.

The update test is against the Last Validation Time attribute. Replacing is the default.

Detailed

Log file.

Parent topic: Using Batch Scripts


IMS Analysis.bj

Perform IMS Analysis.

Action

Perform IMS Analysis. IMS Analysis determines the types of database operation (insert, read, update, or delete) IMS programs perform, and lists in the browser each of the database segments or screens the operations are performed on.

Syntax

IMS Analysis Workspace [WorkspaceWide] [Project] [Notify] [Detailed] [Drop] [LaunchHHC] [StopHHC] [Wait]

Required Parameters | Description
Workspace | Workspace file (.rwp).
Optional Parameters | Description
WorkspaceWide | Whether to perform IMS Analysis across the workspace, Yes or No. Default is Yes.
Project | If WorkspaceWide is set to No, project to perform IMS Analysis for.
Notify | Notification file.
Detailed | Log file.
Oracle Only Parameters Description

Drop

Whether to drop repository indexes. Specify:

  • Auto, to let the script determine whether to drop repository indexes based on the number of files to be processed.
  • Yes, to drop repository indexes.
  • No, to not drop repository indexes.

Dropping repository indexes generally improves performance when a large number of files need to be processed. Dropped indexes are restored when processing is complete. Default is No.

LaunchHHC

Whether to launch the HyperCode Converter, Yes or No. Launching the HyperCode Converter generally improves performance. Default is No.

StopHHC

Whether to stop the HyperCode Converter(s) when processing is complete, Yes or No.

Wait

Whether to wait until the HyperCode Converter(s) queue is empty. Specify:

  • Yes, to wait indefinitely.
  • No, to not wait.
  • The number of seconds to wait for the count on the queue to change. If the count does not change within the specified time, BRP resumes. Sixty minutes is recommended. 0 means no timeout.
Parent topic: Using Batch Scripts


Invalidate.bj

Invalidate source files.

Action

Invalidate source files. Invalidating some or all of the source files in a workspace before reverifying can save time when you reverify very large workspaces.

Syntax

Invalidate Workspace [Entity] [Cond] [ObjList] [Detailed] [Drop]

Required Parameters | Description
Workspace | Workspace file (.rwp).
Optional Parameters | Description

Entity

* or entity type of source files. Default is *.

Cond | Source files to invalidate. Use the Repository Exchange Protocol (RXP) to code the condition. For more information, see Analyzing Projects in the workbench documentation set.
ObjList When Cond is not set, a control file with a list of source files to invalidate. Each line of the control file contains the following information:
"EntityType" "EntityName"

where:

  • EntityType is the entity type of the source file to invalidate, COBOL, for example.
  • EntityName is the name of the source file to invalidate, DayOfWeek.cbl, for example.

Detailed

Log file.

Oracle Only Parameters Description

Drop

Whether to drop repository indexes. Specify:

  • Auto, to let the script determine whether to drop repository indexes based on the number of files to be processed.
  • Yes, to drop repository indexes.
  • No, to not drop repository indexes.

Dropping repository indexes generally improves performance when a large number of files need to be processed. Dropped indexes are restored when processing is complete. Default is No.

Parent topic: Using Batch Scripts


InventoryReport.bj

Generate an Inventory Report.

Action

Generate an Inventory Report. The report shows high-level statistics for source file types in the current workspace: number of files of each type, whether verified, number of lines of code (verified files only), and the like.

Syntax

InventoryReport Workspace File [Project] [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
File | Output file. The format of the report depends on the extension. Supported extensions are .html, .htm, .xls, .rtf, .doc, .txt, and .csv.
Optional Parameters | Description
Detailed | Log file.
Parent topic: Using Batch Scripts


Populate.bj

Populate a workspace from an ERD file.

Action

Populate a workspace from an ERD file.

Syntax

Populate Workspace ERD [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
ERD | ERD file, or a file that contains a list of ERD files. If the latter, the list file name must be preceded by an @ symbol, for example, @ERDs.txt. Each line of the list file specifies the full path name of an ERD file.
Optional Parameters | Description
Detailed | Log file.
Parent topic: Using Batch Scripts


ProcessChangeUnit.bj

Set a change date for complexity metrics other than the date source files are verified, and/or delete source files from the workspace.

Action

Set a change date for complexity metrics other than the date source files are verified, and/or delete source files from the workspace. Specify the date and the files to be deleted in a change unit description file.

Execute this script before registering the source files.

Use SetChangeDate.bj to clear the change date from the system. Use ChangeTraffic.bj to generate change traffic metrics.

Syntax

ProcessChangeUnit Workspace File [Detailed]
Required Parameters Description

Workspace

Workspace file (.rwp).

File Change unit description file. A flat file containing the change date, in the form DATE: YYYY-MM-DD HH24:MI:SS, and the files to be deleted, in the form DELETED:filename. For example:
DATE: 2010-03-15 17:12:13
DELETED:MYPROG.CBL
DELETED:MYPROG.CPY

Optional Parameters | Description
Detailed | Log file.
Parent topic: Using Batch Scripts


ReferenceReport.bj

Generate Reference Reports.

Action

Generate Reference Reports. The reports identify missing or unneeded files or objects in the workspace:

  • An Unresolved Report identifies missing application elements.
  • An Unreferred Report identifies unreferenced application elements.
  • A Cross-reference Report identifies all application references.
  • An External Reference Report identifies references in object-oriented applications to external files that are not registered in the workspace, such as .java, Java Archive (JAR), or C++ include files (assuming you have identified the locations of these files in the Workspace Verification options window for the source files). These references are not reported as unresolved in the Unresolved Report.

Syntax

ReferenceReport Workspace Type File [Entities] [Restrict] [Project] [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
Type | The type of report, Unresolved, Unreferred, CrossRef, or ExternalRef.
File | Output file. The format of the report depends on the extension. Supported extensions are .html, .htm, .xls, .rtf, .doc, .txt, and .csv.
Optional Parameters | Description
Entities | * or a comma-separated list of entity types to report on. Default is *.
Restrict | Whether to restrict references to the specified project, Yes or No. Default is Yes.
Project | Project. Default is the default project.
Detailed | Log file.
Parent topic: Using Batch Scripts
Related information
Example: Generating Reports


Refresh.bj

Register and verify new source files, refresh and verify updated source files.

Action

Register and verify new source files, refresh and verify updated source files.

The Refresh2.bj variant also autoresolves decisions.

Syntax

Refresh Workspace StageDir [Project] [Notify] [Detailed] [Drop] [LaunchHHC] [ExtraHHC] [StopHHC] [Wait]

Required Parameters | Description
Workspace | Workspace file (.rwp).
StageDir | Staging directory for incoming source files.
Optional Parameters | Description
Project | Project. Default is the default project.
Notify | Notification file.
Detailed | Log file.
Oracle Only Parameters Description

Drop

Whether to drop repository indexes. Specify:

  • Auto, to let the script determine whether to drop repository indexes based on the number of files to be processed.
  • Yes, to drop repository indexes.
  • No, to not drop repository indexes.

Dropping repository indexes generally improves performance when a large number of files need to be processed. Dropped indexes are restored when processing is complete. Default is No.

LaunchHHC

Whether to launch the HyperCode Converter, Yes or No. Launching the HyperCode Converter generally improves performance. Default is No.

ExtraHHC

If LaunchHHC is specified, the number of additional HyperCode Converters to launch.

StopHHC

Whether to stop the HyperCode Converter(s) when processing is complete, Yes or No.

Wait

Whether to wait until the HyperCode Converter(s) queue is empty. Specify:

  • Yes, to wait indefinitely.
  • No, to not wait.
  • The number of seconds to wait for the count on the queue to change. If the count does not change within the specified time, BRP resumes. Sixty minutes is recommended. 0 means no timeout.
Parent topic: Using Batch Scripts
Related information
AddNew.bj
Register.bj
UpdateOnly.bj
Verify.bj


Register.bj

Register new source files, refresh updated source files.

Action

Register new source files, refresh updated source files. Use:

  • AddNew.bj to register new source files only.
  • UpdateOnly.bj to refresh updated source files only.
  • Refresh.bj to register and verify new and updated source files.
  • Verify.bj to verify registered source files.

Syntax

Register Workspace StageDir [Project] [Entity] [Detailed] [Drop]

Required Parameters | Description
Workspace | Workspace file (.rwp).
StageDir | Staging directory for incoming source files.
Optional Parameters | Description
Entity | * or entity type of source files. Default is *.
Project | Project. Default is the default project.
Detailed | Log file.
Oracle Only Parameters Description

Drop

Whether to drop repository indexes. Specify:

  • Auto, to let the script determine whether to drop repository indexes based on the number of files to be processed.
  • Yes, to drop repository indexes.
  • No, to not drop repository indexes.

Dropping repository indexes generally improves performance when a large number of files need to be processed. Dropped indexes are restored when processing is complete. Default is No.

Parent topic: Using Batch Scripts
Related information
AddNew.bj
Refresh.bj
UpdateOnly.bj
Verify.bj
Unregister.bj


Related.bj

Create a project control file (PCF) based on the relationships between source files.

Action

Create a project control file (PCF) based on the relationships between source files. The source file on the left side of the relationship is called the startup object. The source file on the right side of the relationship is called the target object.

A project control file identifies the projects to which source files belong. Use ApplyPCF.bj or SetProject .bjto assign source files to projects based on a project control file.

Syntax

Related Workspace Out [List] [Project] [Startup] [Target] [Include] [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
Out | Project control file (.pcf).
Optional Parameters | Description
List A control file with a list of startup objects. Each line of the control file contains the following information:
"EntityType" "EntityName"

where:

  • EntityType is the entity type of the startup object, COBOL, for example.
  • EntityName is the name of the startup object, DayOfWeek.cbl, for example.
Project | When List is not specified, the project containing the startup objects.
Startup When List is not specified, the entity type of the startup objects. Enclose multiple entity types in parentheses in a vertical-line-separated list, for example:
(COBOL|COPYBOOK|BMS)
Use the flag attribute of an entity type to specify all entity types with that flag, for example:
*LEGACY
which specifies all entity types with the LEGACY flag, the default. For more on entity flags, see Software Development Toolkit, available from support services.
Additional operators are available for special needs. Contact support services for details.
Target | The entity type of the target objects. The notation is as for Startup. Default is (BMS|PSB|DBD|CSD).
Include

Whether to include source files related to other source files in relationships flagged R_USE, such as Cobol Includes Copybook File. Default is Yes. Specify NONE for No.

Restrict the result to source files of given types by specifying the types, for example:

Include=(COBOL|JCL)

The notation is as for Startup. For more on relationship flags, see Software Development Toolkit, available from support services.

Detailed

Log file.

Parent topic: Using Batch Scripts
Related information
ApplyPCF.bj
CreatePCF.bj
UpdateOnly.bj


ResolveDecisions.bj

Resolve decisions automatically.

Action

Resolve decisions automatically.

Syntax

ResolveDecisions Workspace [Project] [Notify] [Detailed] [Drop] [LaunchHHC] [ExtraHHC] [StopHHC] [Wait]

Required Parameters | Description
Workspace | Workspace file (.rwp).
Optional Parameters | Description
Project | Project. Default is the default project.
Notify | Notification file.
Detailed | Log file.
Oracle Only Parameters Description

Drop

Whether to drop repository indexes. Specify:

  • Auto, to let the script determine whether to drop repository indexes based on the number of files to be processed.
  • Yes, to drop repository indexes.
  • No, to not drop repository indexes.

Dropping repository indexes generally improves performance when a large number of files need to be processed. Dropped indexes are restored when processing is complete. Default is No.

LaunchHHC

Whether to launch the HyperCode Converter, Yes or No. Launching the HyperCode Converter generally improves performance. Default is No.

ExtraHHC

If LaunchHHC is specified, the number of additional HyperCode Converters to launch.

StopHHC

Whether to stop the HyperCode Converter(s) when processing is complete, Yes or No.

Wait

Whether to wait until the HyperCode Converter(s) queue is empty. Specify:

  • Yes, to wait indefinitely.
  • No, to not wait.
  • The number of seconds to wait for the count on the queue to change. If the count does not change within the specified time, BRP resumes. Sixty minutes is recommended. 0 means no timeout.
Parent topic: Using Batch Scripts


RestoreDecisions.bj

Restore resolved decisions.

Action

Restore resolved decisions. Reverifying a file invalidates resolved decisions. Use RestoreDecisions.bj with a decisions control file (DCF) to restore resolved decisions. Use SaveDecisions.bj to create a decisions control file before reverifying.

Syntax

RestoreDecisions Workspace DecisionsCF [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
DecisionsCF | Decisions control file (DCF).
Optional Parameters | Description
Detailed | Log file.
Parent topic: Using Batch Scripts


RXP.bj

Execute a Repository Exchange Protocol (RXP) query.

Action

Execute a Repository Exchange Protocol (RXP) query. RXP is an XML-based API that you can use to interact with application-level information in the workspace repository. For more information, see Analyzing Projects in the workbench documentation set.

Syntax

RXP Workspace RXP [Query] [Output] [Project] [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
RXP | File that contains RXP queries.
Optional Parameters | Description
Query | * or name of query to execute. Default is *.
Output | Output file. The format of the file depends on the extension. Supported extensions are .html, .htm, .xml, .xls, .rtf, .doc, .txt, and .csv.
Project | Project. Default is the default project.
Detailed | Log file.
Parent topic: Using Batch Scripts
Related information
Example: Executing Repository Queries


SaveDecisions.bj

Create a decisions control file (DCF).

Action

Create a decisions control file (DCF) for a workspace. A decisions control file identifies the decisions in the workspace and the objects they have been resolved to. After reverification (which invalidates decisions), use RestoreDecisions.bj to restore the resolved decisions to the workspace.

Syntax

SaveDecisions Workspace DecisionsCF [Decisions] [Rels] [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
DecisionsCF | Output file (.txt).
Optional Parameters | Description
Decisions Type of decisions to include. Specify:
  • All, to include all decision types.
  • Uncompleted, to include uncompleted decisions.
  • Unresolved, to include unresolved decisions.

Default is Unresolved.

Rels | Whether to include relationships in the DCF, Yes or No. Default is No.

Detailed

Log file.

Parent topic: Using Batch Scripts


SetChangeDate.bj

Set a change date for complexity metrics other than the date source files are verified.

Action

Set a change date for complexity metrics other than the date source files are verified. Specify the date in the date parameter or in a change unit description file. Run the script without the date or file parameters to clear the change date from the system.

Execute this script before registering the source files.

Use ProcessChangeUnit.bj to set a change date and delete source files from the workspace. Use ChangeTraffic.bj to generate change traffic metrics.

Syntax

SetChangeDate Workspace [Date] [File] [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
Optional Parameters | Description
Date | Change date in the form YYYY-MM-DD HH24:MI:SS. For example, 2010-03-15 17:12:13.
File Change unit description file. A flat file containing the change date, in the form DATE: YYYY-MM-DD HH24:MI:SS. For example:
DATE: 2010-03-15 17:12:13

Detailed

Log file.

Parent topic: Using Batch Scripts


SetProject.bj

Assign source files to projects based on a project control file (PCF).

Action

Assign source files to projects based on a project control file (PCF). A project control file identifies the projects to which source files belong.

SetProject.bj differs from ApplyPCF.bj in that it allows you to assign source files to projects additively, without deleting their links to existing projects. Use CreatePCF.bj or Related.bj to create a project control file.

Syntax

SetProject Workspace ProjectCF [Incremental] [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
ProjectCF | Project control file (.pcf).
Optional Parameters | Description
Incremental | Assign source files to projects additively, without deleting their links to existing projects. Use the argument with no value to specify additive assignment. Omit the argument to specify overwrite assignment.
Detailed | Log file.
Parent topic: Using Batch Scripts


TagCmd.bj

Create, delete, and rename tags. Create and delete references between tags.

Action

Create, delete, and rename tags. Create and delete references between tags.

Syntax

TagCmd Workspace Operation Tags
Required Parameters Description

Workspace

Workspace file (.rwp).

Operation Operation. Specify:
  • create, to create tags.
  • delete, to delete tags.
  • rename, to rename tags.
  • link, to create references between tags.
  • unlink, to delete references between tags.
Tags Names of tags. For the create and delete operations, use a comma (,) to separate multiple tags. For the rename, link, and unlink operations, use a vertical bar (|) to separate paired tags, and a comma to separate multiple pairs.
Tag names are case-sensitive. Names containing commas or vertical bars may produce unexpected behavior.
Parent topic: Using Batch Scripts


Unregister.bj

Unregister source files.

Action

Unregister source files.

Syntax

Unregister Workspace [Entity] [Cond] [ObjList] [Detailed] [Drop]

Required Parameters | Description
Workspace | Workspace file (.rwp).
Optional Parameters | Description

Entity

* or entity type of source files. Default is *.

Cond | Source files to unregister. Use the Repository Exchange Protocol (RXP) to code the condition. For more information, see Analyzing Projects in the workbench documentation set.
ObjList When Cond is not set, a control file with a list of source files to unregister. Each line of the control file contains the following information:
"EntityType" "EntityName"

where:

  • EntityType is the entity type of the source file to unregister, COBOL, for example.
  • EntityName is the name of the source file to unregister, DayOfWeek.cbl, for example.

Detailed

Log file.

Oracle Only Parameters Description

Drop

Whether to drop repository indexes. Specify:

  • Auto, to let the script determine whether to drop repository indexes based on the number of files to be processed.
  • Yes, to drop repository indexes.
  • No, to not drop repository indexes.

Dropping repository indexes generally improves performance when a large number of files need to be processed. Dropped indexes are restored when processing is complete. Default is No.

Parent topic: Using Batch Scripts
Related information
Register.bj


UpdateOnly.bj

Refresh updated source files only.

Action

Refresh updated source files only, optionally based on a project control file (PCF). A project control file identifies the projects to which source files belong. Use:
  • CreatePCF.bj or Related.bj to create a project control file.
  • Register.bjto register new source files and refresh updated source files.
  • Refresh.bj to register and verify new and updated source files.
  • Verify.bj to verify registered source files.

Syntax

UpdateOnly Workspace StageDir [ProjectCF] [Notify] [Detailed] [Drop]

Required Parameters | Description
Workspace | Workspace file (.rwp).
StageDir | Staging directory for incoming source files.
Optional Parameters | Description
ProjectCF | Project control file (.pcf).
Notify | Notification file.
Detailed | Log file.
Oracle Only Parameters Description

Drop

Whether to drop repository indexes. Specify:

  • Auto, to let the script determine whether to drop repository indexes based on the number of files to be processed.
  • Yes, to drop repository indexes.
  • No, to not drop repository indexes.

Dropping repository indexes generally improves performance when a large number of files need to be processed. Dropped indexes are restored when processing is complete. Default is No.

Parent topic: Using Batch Scripts
Related information
ApplyPCF.bj
Related.bj
CreatePCF.bj
AddNew.bj
Refresh.bj
Register.bj
Verify.bj


UpdateTrendingSnapshot.bj

Update data for Enterprise View trending charts.

Action

Update data for Enterprise View trending charts. EV trending charts display complexity metrics data for workspace objects per monthly period. To update the database table for trending data, run UpdateTrendingSnapshot.bj:
  • After verifying a workspace for the first time.
  • After reverifying updated objects in a workspace.

Syntax

UpdateTrendingSnapshot Workspace

Required Parameters | Description
Workspace | Workspace file (.rwp).
Parent topic: Using Batch Scripts


Upgrade.bj

Upgrade a workspace.

Action

Upgrade a workspace. Upgrading a workspace synchronizes the workspace with a new MW configuration.

Syntax

Upgrade Workspace [Detailed]

Required Parameters | Description
Workspace | Workspace file (.rwp).
Optional Parameters | Description
Detailed | Log file.
Parent topic: Using Batch Scripts


Verify.bj

Verify source files.

Action

Verify registered source files. Use Refresh to register and verify new and updated source files.

Syntax

Verify Workspace [Entity] [Status] [Cond] [Project] [Notify] [Detailed] [Drop] [LaunchHHC] [ExtraHHC] [StopHHC] [Wait]

Required Parameters | Description
Workspace | Workspace file (.rwp).
Optional Parameters | Description

Entity

* or entity type of source files. Default is *.

Status Verification status of source files to verify. Specify:
  • *, to verify all source files.
  • !, to verify unverified source files.
  • R, to verify source files verified under the relaxed parsing option.
  • E, to verify source files that verified with an error.
  • S, to verify source files that verified successfully.
Cond | Source files to verify. Use the Repository Exchange Protocol (RXP) to code the condition. For more information, see Analyzing Projects in the workbench documentation set.

Project

Project. Default is the default project.

Notify

Notification file.

Detailed

Log file.

Oracle Only Parameters Description

Drop

Whether to drop repository indexes. Specify:

  • Auto, to let the script determine whether to drop repository indexes based on the number of files to be processed.
  • Yes, to drop repository indexes.
  • No, to not drop repository indexes.

Dropping repository indexes generally improves performance when a large number of files need to be processed. Dropped indexes are restored when processing is complete. Default is No.

LaunchHHC

Whether to launch the HyperCode Converter, Yes or No. Launching the HyperCode Converter generally improves performance. Default is No.

ExtraHHC

If LaunchHHC is specified, the number of additional HyperCode Converters to launch.

StopHHC

Whether to stop the HyperCode Converter(s) when processing is complete, Yes or No.

Wait

Whether to wait until the HyperCode Converter(s) queue is empty. Specify:

  • Yes, to wait indefinitely.
  • No, to not wait.
  • The number of seconds to wait for the count on the queue to change. If the count does not change within the specified time, BRP resumes. Sixty minutes is recommended. 0 means no timeout.
Parent topic: Using Batch Scripts
Related information
AddNew.bj
Refresh.bj
Register.bj
UpdateOnly.bj


Executing Batch Scripts

Overview of the Batch Refresh and Verification (Brave) utility.

Use the Batch Refresh and Verification (Brave) utility to execute batch scripts. Brave.exe is located in \<Workbench Home>\Bin.

The examples in this section illustrate how to run the scripts with Brave.exe. The examples can be adapted for use programmatically or in a batch file.

  • Example: Executing Repository Queries
    Describes how to execute an RXP query in batch mode
  • Example: Creating Diagrams
    Describes how to generate Call Map diagrams in batch mode.
  • Example: Performing an Advanced Search
    Describes how to perform an advanced search in batch mode.
Related information
Using Batch Scripts


Example: Generating Reports

Describes how to generate an Unresolved Report in batch mode.

Follow the steps below to generate an Unresolved Report in Excel format. Refer to ReferenceReport.bj for argument details.

  1. From a command prompt, enter the following command, substituting file names and paths as appropriate:
    C:\Program Files\Modernization Workbench\Bin>Brave.exe "C:\Program Files\Moderni
zation Workbench\Scripts\BRP\ReferenceReport.bj" "C:\UnresolvedLog.txt" "Workspa
ce=C:\Workspaces\sdkworkspace.rwp" "Type=Unresolved" "File=C:\Workspaces\sdkwork
space\Output\UnresolvedReport.xls"
    The command consists of:
    • The path to Brave.exe.
    • The path to the ReferenceReport.bj file.
    • The path to the output log file generated on execution of the command.
    • The path to the workspace.
    • The type of reference report to generate.
    • The path to the output report. The format of the report depends on the extension.
  2. Check the output log file for errors or warnings. Here is the log file for the command:
    Batch Registration and Verification. Version 2.1.02.2860  (build 2.1.02.2860)

Date: 8/8/2008    Computer: D620-JEREMYW
Cmd:  "C:\Program Files\Modernization Workbench\Scripts\BRP\ReferenceReport.bj" "C:\UnresolvedLog.txt" "Workspace=C:\Workspaces\sdkworkspace.rwp" "Type=Unresolved" "File=C:\Workspaces\sdkworkspace\Output\UnresolvedReport.xls"
Job: C:\Program Files\Modernization Workbench\Scripts\BRP\ReferenceReport.bj

13:43:13 >Open C:\Workspaces\sdkworkspace.rwp
13:43:15 >Report Unresolved C:\Workspaces\sdkworkspace\Output\UnresolvedReport.xls
13:43:23 C:\Workspaces\sdkworkspace\Output\UnresolvedReport.xls has been prepared
13:43:23 >Close
13:43:24 ---Finished—
Related information
ReferenceReport.bj


Example: Executing Repository Queries

Describes how to execute an RXP query in batch mode

Follow the steps below to execute a Repository Exchange Protocol (RXP) query. RXP is an XML-based API that you can use to interact with application-level information in the workspace repository. Refer to RXP.bj for argument details.

  1. From a command prompt, enter the following command, substituting file names and paths as appropriate:
    C:\Program Files\Modernization Workbench\Bin>Brave.exe "C:\Program Files\Moderni
zation Workbench\Scripts\BRP\RXP.bj" "C:\QueryLog.txt" "Workspace=C:\Workspaces\
sdkworkspace.rwp" "RXP=C:\Program Files\Modernization Workbench\Scripts\BRP\RXP\
Repository.rxp" "Query=Used Sources" "Output=C:\Workspaces\sdkworkspace\Output\U
sedSources.xml"
    The command consists of:
    • The path to Brave.exe.
    • The path to the RXP.bj file.
    • The path to the output log file generated on execution of the command.
    • The path to the workspace.
    • The path to the .rxp file containing RXP queries.
    • The query to execute in the .rxp file, "Used Sources".
    • The path to the output file. The format of the file depends on the extension.
  2. Check the output log file for errors or warnings. Here is the log file for the command:
    Batch Registration and Verification. Version 2.1.02.2860  (build 2.1.02.2860)

Date: 8/8/2008    Computer: D620-JEREMYW
Cmd:  "C:\Program Files\Modernization Workbench\Scripts\BRP\RXP.bj" "C:\QueryLog.txt" "Workspace=C:\Workspaces\sdkworkspace.rwp" "RXP=C:\Program Files\Modernization Workbench\Scripts\BRP\RXP\Repository.rxp" "Query=Used Sources" "Output=C:\Workspaces\sdkworkspace\Output\UsedSources.xml"
Job: C:\Program Files\Modernization Workbench\Scripts\BRP\RXP.bj

14:03:32 >Open C:\Workspaces\sdkworkspace.rwp
14:03:33 Cuter .ExecuteRXP (Prm.RXP, Prm.Query, Prm.Output, Prm.Project)
14:03:34 File C:\Workspaces\sdkworkspace\Output\UsedSources.xml has been prepared
14:03:34 >Close
14:03:34 ---Finished—
Parent topic: Executing Batch Scripts
Related information
RXP.bj


Example: Creating Diagrams

Describes how to generate Call Map diagrams in batch mode.

Follow the steps below to generate Call Map diagrams in EMF format for every program in a workspace. Refer to DiagramTS.bj for argument details.

  1. From a command prompt, enter the following command, substituting file names and paths as appropriate:
    C:\Program Files\Modernization Workbench\Bin>Brave.exe "C:\Program Files\Moderni
zation Workbench\Scripts\BRP\DiagramTS.bj" "C:\DiagramLog.txt" "Workspace=C:\
Workspaces\sdkworkspace.rwp" "Scope=Call Map" "Pattern=C:\Workspaces\sdkworkspac
e\Output\*.emf"
    The command consists of:
    • The path to Brave.exe.
    • The path to the DiagramTS.bj file.
    • The path to the output log file generated on execution of the command.
    • The path to the workspace.
    • The diagram scope, "Call Map".
    • The pattern for naming the generated diagrams, consisting of the output folder, file name pattern, and extension. The format of the diagrams depends on the extension.
  2. Check the output log file for errors or warnings. Here is the log file for the command:
    Batch Registration and Verification. Version 2.1.02.2860  (build 2.1.02.2860)

Date: 8/8/2008    Computer: D620-JEREMYW
Cmd:  "C:\Program Files\Modernization Workbench\Scripts\BRP\DiagramTS.bj" "C:\DiagramLog.txt" "Workspace=C:\Workspaces\sdkworkspace.rwp" "Scope=Call Map" "Pattern=C:\Workspaces\sdkworkspace\Output\*.emf"
Job: C:\Program Files\Modernization Workbench\Scripts\BRP\DiagramTS.bj

13:22:41 >Open C:\Workspaces\sdkworkspace.rwp
13:22:41 >Diagram Quick * "Call Map" "C:\Workspaces\sdkworkspace\Output\*.emf"
         Destination directory is C:\Workspaces\sdkworkspace\Output
         Diagrams have been generated successfully
13:23:06 >Close
13:23:06 ---Finished—
Parent topic: Executing Batch Scripts
Related information
DiagramTS.bj


Example: Performing an Advanced Search

Describes how to perform an advanced search in batch mode.

Follow the steps below to search for all declarations of computational data items in a workspace. Refer to ClipperSearch.bj for argument details.

  1. From a command prompt, enter the following command, substituting file names and paths as appropriate:
    C:\Program Files\Modernization Workbench\Bin>Brave.exe "C:\Program Files\Moderni
zation Workbench\Scripts\BRP\ClipperSearch.bj" "C:\ClipperSearchLog.txt" "Worksp
ace=C:\Workspaces\sdkworkspace.rwp" "Criteria=General:Data Queries\Computational
 Data" "Model=COBOL" "ListName=Miscellaneous" "Category=General"
    The command consists of:
    • The path to Brave.exe.
    • The path to the ClipperSearch.bj file.
    • The path to the output log file generated on execution of the command.
    • The path to the workspace.
    • The path to the search criterion in the HyperView Advanced Search tool, including the tab name and folder names.
    • The HyperView model for the source files to be searched, "COBOL".
    • The Clipper list where the search results will be displayed.
    • The Clipper category that contains the list.
  2. Check the output log file for errors or warnings. Here is the log file for the command:
    Batch Registration and Verification. Version 2.1.02.2860  (build 2.1.02.2860)

Date: 8/8/2008    Computer: D620-JEREMYW
Cmd:  "C:\Program Files\Modernization Workbench\Scripts\BRP\ClipperSearch.bj" "C:\ClipperSearchLog.txt" "Workspace=C:\Workspaces\sdkworkspace.rwp" "Criteria=General:Data Queries\Computational Data" "Model=COBOL" "ListName=Miscellaneous" "Category=General"
Job: C:\Program Files\Modernization Workbench\Scripts\BRP\ClipperSearch.bj

10:33:25 >Open C:\Workspaces\sdkworkspace.rwp
10:33:26 Cuter .ClipperSearch (Prm.Criterion, Prm.Model, Prm.ListName, Prm.Category, Prm.Accumulate)
10:33:27  (success) 236 construct(s) found.
10:33:27 >Close
10:33:27 ---Finished—
Parent topic: Executing Batch Scripts
Related information
ClipperSearch.bj
ClipperMultiSearch.bj


Introducing Architecture Modeler

Introduces Architecture Modeler.

Use Architecture Modeler to add support for unsupported languages and frameworks to Modernization Workbench (MW). You can also use it to extend support for already supported languages and frameworks. Architecture Modeler's:

  • Graphical user interface, with error checking and metamodel lookup, makes it easy to define new entity and relationship types in MW.
  • Regular expression generator simplifies the task of specifying the search patterns the MW parser uses to extract entities and relationships from source code.

Based on your input, Architecture Modeler creates a plug-in that defines an extension, or add-on, to the MW metamodel. The add-on specifies the entity and relationship types of interest in the newly supported source files.

The plug-in also references a universal parser configuration file that defines the search patterns MW uses to extract entities and relationships from newly supported files. For text files, search patterns are mapped from regular expressions. For XML files, search patterns are mapped from XPath queries.

Here in schematic form are the tasks you perform in Architecture Modeler:

  1. Load an existing metamodel, or create a new one.
  2. Save the metamodel with the name of your extension.
  3. Add a sample source file of the type you want to support in MW.
  4. Define the entity types for the add-on.
  5. Define the relationship types for the add-on.
  6. Map search patterns for the entities and relationships you want the parser to extract from the newly supported files.
  7. Export the model to MW.
  8. Reconfigure MW.

It's as easy as that. Before turning to these tasks, users who are new to MW may want to familiarize themselves with the concepts underlying the MW metamodel. Experienced users can skip straight to the tasks.

Architecture Modeler currently supports the level-1, or application-level, metamodel only. Support for the level-2, or object-level, metamodel (HyperView) will be available in a future release.

Entity extension mode is currently not available for the following entities: EZT, POWERBUILDER, CA7, JSP, JSX, NetronSPC, NetronSpec, TLD, TS, and WebConfig.

Related information
Understanding the Application-Level Metamodel
Opening Architecture Modeler
Defining an Extension with Architecture Modeler


Understanding the Application-Level Metamodel

Introduces the application-level metamodel.

The object model for an application defines the relationships between the objects that comprise the application. These can be physical objects, like program source files or JCLs, or logical objects that identify abstract program elements: entry points, data stores, screens, jobs, and so forth.

The relationships between objects describe the ways in which they interact. In the figure below, the source file GSS.CBL defines the GSS program. The program, in turn, reads the data file GSS.FCSTSEC.

Relationships are conceived as having a left and right end. In the relationship CobolDefinesMap, for example, the left relationship end is DefinesMap, while the right relationship end is IsDefinedInCobol.

Each object or relationship the parser generates is modeled as an entity or relationship in an Entity Relationship Diagram (ERD). Each entity or relationship is an instance of an entity or relationship type. The application-level metamodel defines these types.

  • Entity Type Properties
    Describes the properties of an entity type.
  • Entity Type Attributes
    Describes the attributes of an entity type.
  • Relationship Type Properties
    Describes the properties of a relationship type.


Entity Type Properties

Describes the properties of an entity type.

The properties of an entity type define its characteristics: its internal and external names, icon in the workbench, flags, and so on. The table below shows the properties of an entity type.

Only properties editable in Architecture Modeler are shown in the table.
Property | Description
Name | The internal name of the entity type: COBOL, for example.
Description | The display name of the entity type: Cobol File, for example.
Source Name | The name of the entity attribute that holds “reference-resolving” information for an entity: Source, for example. See the subtopics below for more information.
Display Name | The name of the entity attribute that holds the display name for the entity. A Java File's display name derives from the value of its ClassName attribute, for example.
Flags | Flags that define the nature of the entity type: LEGACY, for example. See the subtopics below for more information.
Registration | The name of the class used to perform registration, unregistration, and invalidation tasks. Specify Default, unless the entity type should not have a folder in the project, in which case, specify NoRegistration.
Source Type | The type of “reference-resolving” information for the entity: File, for example. See the subtopics below for more information.
Icon | The name of the file that contains the entity type’s icon for display: COBOL.gif, for example.
  • Source Name Property
    Explains the Source Name property of an entity type.
  • Source Type Property
    Explains the Source Type property of an entity type.
  • Entity Flags
    Explains the flags for an entity type.
Parent topic: Understanding the Application-Level Metamodel
Related tasks
Defining Entity Types


Source Name Property

Explains the Source Name property of an entity type.

The Source Name property of an entity type defines the name of the entity attribute that holds “reference-resolving” information for an entity. This attribute name is not the same for all entity types.

Consider a copybook. If a Cobol source file references a copybook, the parser creates a copybook object with the name referenced in the source file. And it does so whether or not the copybook actually exists in the MW workspace.

Later, when the system resolves references to the copybook, it looks in the Source attribute of the copybook for its location in the workspace file system. If the attribute is empty, the system flags the copybook as missing. The system knows it should look in the Source attribute because the Source Name property of the copybook entity type is set to “Source.”

For a program entry point, by contrast, the sourcename property is set to “HCID,” meaning that the system looks in the HCID (HyperCode ID) attribute when it attempts to resolve a CALL statement that references the entry point. An empty HCID attribute indicates that the called program does not exist in the workspace or has not been parsed.

Parent topic: Entity Type Properties
Related information
Source Type Property


Source Type Property

Explains the Source Type property of an entity type.

The Source Type property of an entity type defines the type of reference-resolving information for the entity: a file name in the case of a copybook, for example, a record in a table in the case of an entry point. The Source Type also determines whether MW deletes the reference-resolving item when the corresponding object is deleted from the workspace. The table below shows the types.
Type | Description
File | A source file: a copybook, for example. If the object is deleted, the source file is deleted.
Container | A file containing a list of source files: a TARGETMODEL, for example. If the object is deleted, the list file is deleted.
Folder | The folder for the Folder entity, which identifies an MW project. If the project is deleted, the folder is deleted.
Global | An item in a global file: a record in a table, for example. If the object is deleted, the item is not deleted.
Parent topic: Entity Type Properties
Related information
Source Name Property


Entity Flags

Explains the flags for an entity type.

The Flags property of an entity type defines the nature of the entity: whether it is a physical source object or a logical object extracted from a source object, whether it defines a program, and so forth. An entity type can have multiple flags. A Cobol source file, for example, has LEGACY, PROGRAMCODE, and SEED flags. The table below shows the flags for an entity type.

Only flags selectable in Architecture Modeler are shown in the table.
Flag | Description
COMPOSITE | n/a
EXTRACT | An entity extracted from a seed entity. A program, for example, is extracted from a Cobol file. An extract entity must be unique in the repository.
GENERATED | An entity generated in the transformation process, a TargetXML file, for example.
LEGACY | A source file that can be loaded in the repository, a Cobol file, for example.
KNOWLEDGE | A business function or logical component.
PROGRAMCODE | An entity that defines a program, a Cobol file, for example.
SEED | An entity from which another entity can be extracted. A Cobol file is the seed for a program, for example.
SYSTEM | An entity referenced in the application but not loaded in the repository, a data store, for example.
Parent topic: Entity Type Properties


Entity Type Attributes

Describes the attributes of an entity type.

The attributes of an entity type define the characteristics of the entity instance: its name, the name of the source file from which it derives, its complexity metrics, and so forth. The default attributes and attribute values supplied by Architecture Modeler are sufficient for most entity types. You can add or delete attributes and edit their values as necessary.

You can specify additional default attributes in the file \bin\ArchitectureModeler.exe.config.

The properties of an attribute define its characteristics: its name, data type, whether the attribute value persists after invalidation, and so on. The table below shows the properties of an attribute.

Property | Description
Name | The internal name of the attribute: Name, for example.
Description | The display name of the attribute: Name, for example.
Type | For attributes other than Name, the data type of the attribute: CHAR, for example.
Size | For CHAR type attributes, the length of the attribute.
DefaultValue | Whether the attribute should be displayed with a value of "N/A" until it receives a value at verification: 0 for true, -1 for false.
Persistent | For an attribute of a LEGACY object, whether its value persists after the object is invalidated.
Parent topic: Understanding the Application-Level Metamodel
Related tasks
Defining Entity Types


Relationship Type Properties

Describes the properties of a relationship type.

The properties of a relationship type define its characteristics: its name, flags, cardinalities, and so on. The table below shows the properties of a relationship type.

Property | Description
Name | The full relationship name: CobolDefinesMap, for example.
Flags | Flags that define the nature of the relationship type: PRODUCE, for example. See the subtopics below for more information.
Left Entity | The internal name of the entity on the left relationship end, COBOL, for example.
Left End Name | The internal name of the left relationship end: DefinesMap, for example.
Left End Description | The display name of the left relationship end: Defines Screen, for example.
Left End Cardinality | The cardinality of the left relationship, 1 or M. 1 means that the left entity can have one such relationship; M means that the left entity can have multiple such relationships. A Cobol file can define only one map, for example.
Right Entity | The internal name of the entity on the right relationship end, MAP, for example.
Right End Name | The internal name of the right relationship end: IsDefinedInCobol, for example.
Right End Description | The display name of the right relationship end: Is Defined In Cobol File, for example.
Right End Cardinality | The cardinality of the right relationship, 1 or M. 1 means that the right entity can have one such relationship; M means that the right entity can have multiple such relationships. A map can be defined in multiple Cobol files, for example.
  • Relationship Flags
    Explains the flags for a relationship type.
Parent topic: Understanding the Application-Level Metamodel
Related tasks
Defining Relationship Types


Relationship Flags

Explains the flags for a relationship type.

The Flags property of a relationship type defines the nature of the relationship: whether the relationship is one between a seed and an extract entity, for example, or between extract entities or legacy entities. A relationship can have multiple flags. The FolderIncludesDbSchema relationship, for example, has the flags GROUPING and PRODUCES.

The relationship flag also determines how the workbench behaves when one of the entities in the relationship is invalidated, modified, or deleted. In a relationship between a seed and an extract entity, for example, deleting the seed requires deleting the extract. The table below shows the flags for a relationship type.

Flag | Description
GROUPING | A relationship between a folder entity, which identifies an MW project, and a legacy entity, FolderIncludesCobol, for example.
GENERATES | A relationship between a legacy entity and a generated entity, CopybookGeneratesTargetXml, for example. If the legacy entity is modified or deleted, the generated entity is deleted.
LINKS | Future use.
PRODUCES | A relationship between a seed and an extract entity, CobolDefinesProgram, for example. If the seed entity is modified or deleted, the extract entity is deleted.
REFERS | A relationship between extract entities, ProgramCallsProgramEntry, for example. If the left entity is invalidated or deleted, the right entity is deleted.
USES | A relationship between legacy entities, CobolIncludesCopybook, for example. If the right entity is modified or deleted, the left entity is invalidated, and every entity with a relationship of type PRODUCES with the left entity is deleted.
Parent topic: Relationship Type Properties


Opening Architecture Modeler

Describes how to open Architecture Modeler .

To open Architecture Modeler, double-click \bin\Architecture Modeler.exe in the Modernization Workbench installation directory. The Architecture Modeler window opens.

Choose Tools > Confirmations to specify whether you want to be prompted to confirm deletion of attributes, entities, relationships, or source files. Choose Tools > Samples view font to specify the font in which source file samples are displayed.


Defining an Extension with Architecture Modeler

Lists the tasks you perform to define an extension with Architecture Modeler.

Perform the following tasks to define a metamodel extension with Architecture Modeler:

  1. Load an existing metamodel, or create a new one.
  2. Save the metamodel with the name of your extension.
  3. Add a sample source file of the type you want to support in MW.
  4. Define the entity types for the add-on.
  5. Define the relationship types for the add-on.
  6. Map search patterns for the entities and relationships you want the parser to extract from the newly supported files.
  7. Export the model to MW.
  8. Reconfigure MW.

Before turning to these tasks, users who are new to MW may want to familiarize themselves with the concepts underlying the MW metamodel. Experienced users can skip straight to the tasks.

  • Loading or Creating a Metamodel
    Describes how to load an existing metamodel, or create a new one.
  • Saving the Extended Metamodel
    Describes how to save the extended metamodel.
  • Adding a Sample Source File
    Describes how to add a sample source file of the type you want to support in MW.
  • Defining Entity Types
    Describes how to define entity types in the extended metamodel.
  • Defining Relationship Types
    Describes how to define relationship types in the extended metamodel.
  • Specifying Search Patterns for Entities and Relationships
    Introduces the regular expression generator.
  • Exporting the Extended Metamodel
    Describes how to export the extended metamodel to MW.
  • Reconfiguring Modernization Workbench
    Describes how to reconfigure MW after exporting an extended metamodel.
  • Troubleshooting the Extended Metamodel
    Describes how to troubleshoot an extended metamodel in MW.


Loading or Creating a Metamodel

Describes how to load an existing metamodel, or create a new one.

You can load an existing metamodel to use as a shell for your extension, or create a new metamodel. If you are new to Architecture Modeler, loading an existing metamodel is probably a better choice, because it allows you to refer to definitions of existing entity and relationship types.

  • To load an existing metamodel, choose File > Load. An Open dialog is displayed, where you can browse for \Model\Repository\Common.Repstry.xml in the Modernization Workbench installation directory. Click Open to load the metamodel.
  • To create a new metamodel, choose File > New > Model. Nothing is displayed in the Architecture Modeler window until you add files, entities, or relationships.
Parent topic: Defining an Extension with Architecture Modeler


Saving the Extended Metamodel

Describes how to save the extended metamodel.

Whether you load an existing metamodel to use as a shell for your extension, or create a new one, you must save the extended metamodel to preserve your changes. To save an extended metamodel, choose File > Save. A Save As dialog opens, where you can save the extension with a new or an existing file name. Click Save to return to the Architecture Modeler window.

Parent topic: Defining an Extension with Architecture Modeler


Adding a Sample Source File

Describes how to add a sample source file of the type you want to support in MW.

When you add a sample source file to Architecture Modeler, you define the entity type for the source file in the extended metamodel, and make available the code you will use to generate regular expressions. To add support for Objective C, for example, you would define an entity type that represents an Objective C source file, then add one or more Objective C source files to Architecture Modeler.

Choose a sample that contains the kinds of entities and relationships you want the parser to extract. If you want the parser to model calls to Objective C functions, make sure your sample contains a function call!

Architecture Modeler supplies default values for the properties and attributes of the source file type you are adding. Except for the value of the Description property, which holds the entity type name displayed to the end user, the default values usually are sufficient. You can change the Description (and any other property or attribute values) when you edit the source file type.
STEPS:
  1. Click the Files button in Architecture Modeler and choose Add New in the drop-down menu. The Add New File window opens.

  2. In the Name field, enter the name of the entity type for the source file. For an Objective C source file, you might choose the name "OBJC" for the entity type.
    If you are extending support for an already supported source file, the name you specify cannot be the same as the name of the already supported source file. No entity type is created for the specified name. The extension is simply a mechanism for naming the universal parser configuration file that contains the search patterns with which you are extending support.
  3. In the Type drop-down, select the type of the source file you are adding, XML or Text. If you select Text, click the Format button to view formatting options. See the subtopic below for more information.
    Think of Text as any kind of file other than XML.
  4. Select as an extension to if you are extending support for an already supported source file, then choose the source file type in the adjacent combo box.
    The Metrics and Name Pattern areas are disabled in entity extension mode.
  5. In the Metrics group box, select each metric you want MW to calculate for the source file.
  6. In the Source samples group box, click Add new. An Open dialog is displayed, where you can browse for the sample source file. Click Open to add the file. Repeat this procedure for each sample you want to add. To delete a file, select it and click Delete.
  7. In the Name Patterns group box, click Add new. An editable text field is displayed. Click inside the field and enter the extension, including the dot (.), for the source file type. You can use wildcard patterns allowed in LIKE statements by Visual Basic for Applications (VBA). Click outside the field to add the extension. Repeat this procedure for each extension you want to add. To delete an extension, select it and click Delete.
  8. When you are satisfied with your choices, click OK.
Architecture Modeler displays the new source file type in the Name area in the central pane of the window, and the text of the sample source file in the righthand pane. If more than one source file type is listed, click the name of the type to display the corresponding sample.
Select a source file type and click Files > Edit to modify its file characteristics. Select a source file type and click Files > Delete to delete the type.

  • Specifying Formatting Options for Text Files
    Describes how to specify formatting options for text files.
Parent topic: Defining an Extension with Architecture Modeler


Specifying Formatting Options for Text Files

Describes how to specify formatting options for text files.

Comments, strings, and fixed formats may create "noise" in parser extractions. The more specific you are in defining how you want the parser to handle these and similar text file characteristics, the cleaner your results will probably be.

STEPS:
  1. To specify formatting options for a text file, click the Format button in the Add New File or Edit File window. The Input Source Format window opens.

  2. In the Input Source Format window, click the button [image] to sort the list by category, click the [image] button to sort the list alphabetically.
  3. Edit the formatting options as necessary:
    • For Boolean values, choose from the drop-down list inside the value field.
    • For string values, enter the text of the string in the value field.
    • For the StringLiteralSymbol option, click the browse button in the value field. The Char Collection Editor window opens. Click the Add button to add a symbol for the start of a string literal. Architecture Modeler displays the new collection member in the lefthand pane. Select the member, then enter its value in the righthand pane. Repeat this procedure for each symbol you want to define. To delete a collection member, select it and click Remove. Click the button [image] to sort the list by category, click the [image] button to sort the list alphabetically. When you are satisfied with your choices, click OK.

    The table below shows the formatting options in alphabetical order. Option values are modified automatically depending on your choices in other fields.

    Option | Description
    EndingColumn | The last valid column of the source.
    HasEndingColumn | Whether the source has an ending column.
    HasLiteralContinuationSymbol | Whether the source has a literal continuation symbol.
    HasMultiLineComment | Whether the source has multiline comments.
    HasSingleLineComment | Whether the source has single line comments.
    HasSingleLineCommentContinuation | Whether the source has single line comment continuations.
    HasStartingColumn | Whether the source has a starting column.
    HasStringLiteralSymbol | Whether the source has symbols used to start string literals.
    IgnoreColumns | Whether to ignore column information before the starting column and after the ending column.
    IgnoreComments | Whether to ignore comments.
    IgnoreStringLiterals | Whether to ignore string literals.
    MultiLineCommentEnd | Symbol for the end of a multiline comment.
    MultiLineCommentStart | Symbol for the start of a multiline comment.
    SingleLineCommentContinuationSymbol | Symbol for the continuation of a single line comment.
    SingleLineCommentStart | Symbol for the start of a single line comment.
    StartingColumn | The first valid column of the source.
    StringLiteralContinuationSymbol | Symbol for the continuation of a string literal.
    StringLiteralSymbol | Symbols for the start of string literals.
  4. When you are satisfied with your choices in the Input Source Format window, click OK.
Parent topic: Adding a Sample Source File


Defining Entity Types

Describes how to define entity types in the extended metamodel.

Each object the parser generates is an instance of an entity type. You need to define these types in the extended metamodel. If you are adding support for Objective C, for example, you would define an entity type that represents an Objective C function.

For each entity type, you specify two kinds of information:
  • The properties of the entity type define its characteristics: its internal and external names, icon in the workbench, flags, and so on.
  • The attributes of the entity type define the characteristics of the entity instance: its name, the name of the source file from which it derives, its complexity metrics, and so forth. The default attributes and attribute values supplied by Architecture Modeler are sufficient for most entity types. You can add or delete attributes and edit their values as necessary.
STEPS:
  1. Click the Entities button in Architecture Modeler and choose Add New in the drop-down menu. The properties definition page of the Add New Entity window opens.
  2. On the properties definition page, fill in the properties of the entity type. Architecture Modeler flags any errors with a [image] symbol. See the related topics for more information on entity type properties. The figure below shows the values you might specify for an Objective C function.
    Do not enter spaces in the Name property.

  3. When you are satisfied with your entries on the properties definition page, click the [image] button. The attributes definition page opens.
  4. On the attributes definition page, add, edit, or delete attributes as necessary:
    • To add an attribute, click the Add New button. The Add New Attribute dialog opens, where you can specify the values for each property of the attribute. Architecture Modeler flags any errors with a [image] symbol. When you are satisfied with your entries, click OK. See the related topics for more information on attribute properties.
    • To edit an attribute, click the Edit button. The Edit Attribute dialog opens, where you can specify the values for each property of the attribute. Architecture Modeler flags any errors with a [image] symbol. When you are satisfied with your entries, click OK. See the related topics for more information on attribute properties.
    • To delete an attribute, click the Delete button.
    The figure below shows the attribute values you might specify for an Objective C function.

  5. When you are satisfied with your entries on the attributes definition page, click the [image] button. Architecture Modeler flags any errors with a [image] symbol.
    The errors may not be immediately visible. If you are on the attributes definition page, errors may be flagged on the properties definition page, and vice versa.
Assuming there are no errors in your entries, Architecture Modeler saves the entity type definition, and displays the entity type in the list of entity types in the righthand pane of the window.
Select an entity type and click Entities > Edit to modify its definition. Select an entity type and click Entities > Delete to delete the definition.

Parent topic: Defining an Extension with Architecture Modeler
Related information
Entity Type Properties
Source Name Property
Source Type Property
Entity Flags
Entity Type Attributes


Defining Relationship Types

Describes how to define relationship types in the extended metamodel.

Each relationship the parser generates is an instance of a relationship type. You need to define these types in the extended metamodel. If you are adding support for Objective C, for example, you would define a relationship type that represents the relationship between an Objective C source file and an Objective C function.

STEPS:
  1. Click the Relations button in Architecture Modeler and choose Add New in the drop-down menu. The Add New Relation window opens.
  2. In the Add New Relation window, fill in the properties of the relationship type. Architecture Modeler flags any errors with a [image] symbol. See the related topics for more information on relationship type properties. The figure below shows the values you might specify for the relationship type ObjectiveCDefinesObjectiveCFunction.
    Do not enter spaces in the Name property.

  3. When you are satisfied with your entries, click OK.
Assuming there are no errors in your entries, Architecture Modeler saves the relationship type definition, and displays the relationship type in the list of relationship types in the righthand pane of the window.
Select a relationship type and click Relations > Edit to modify its definition. Select a relationship type and click Relations > Delete to delete the definition.

Parent topic: Defining an Extension with Architecture Modeler
Related information
Relationship Type Properties
Relationship Flags


Specifying Search Patterns for Entities and Relationships

Introduces the regular expression generator.

Architecture Modeler's regular expression generator simplifies the task of specifying the search patterns the MW parser uses to extract entities and relationships from source code. For text files, search patterns are mapped from regular expressions, as defined in Microsoft .NET Framework. For XML files, search patterns are mapped from XPath queries, as defined in the XML Path Language (XPath), Version 1.0. For both methods, Architecture Modeler supports subexpression matching.

  • Mapping Regular Expressions to Search Patterns
    Describes how to map regular expressions to search patterns.
  • Mapping XPath Queries to Search Patterns
    Describes how to map XPath queries to search patterns.
Parent topic: Defining an Extension with Architecture Modeler


Mapping Regular Expressions to Search Patterns

Describes how to map regular expressions to search patterns.

Search pattern generation for a text file takes place in two steps:

  • For the relationships the parser extracts, the search pattern is mapped from the regular expression generated when you "pick" the text of the relationship in the sample source file. For the relationship ObjectiveCDefinesObjectiveCFunction, for example, you would pick a function call in an Objective C sample. If you picked the function call:
    - (IBAction) pushLogin
    Architecture Modeler would generate the regular expression:
    (-\s+\(\w+\)\s+\w+)
    Assuming you have picked the correct text for the relationship, the generated regular expression should not require further editing.
  • For the entities the parser extracts, the search pattern is mapped from a subexpression of the regular expression generated for the relationship. To match pushLogin and any other Objective C functions, for example, you would select the second \w+ in the generated regular expression and "group" it to produce the subexpression (\w+). The source file itself is matched from a special system variable named %sourcefilename.

Once you have mapped the entity search pattern, you can use the pattern to match the relationship name.

STEPS:
  1. Click the Files button in Architecture Modeler. Architecture Modeler displays the defined source file types in the Name area in the central pane of the window, and the text of the corresponding sample in the righthand pane. If more than one source file type is listed, click the name of the type to display the sample.
  2. To generate the search pattern for a relationship, select the text of the relationship in the sample file and choose Pick in the right-click menu. For the relationship ObjectiveCDefinesObjectiveCFunction, for example, you would select a function call, as shown in the figure below.

  3. The Create New Regular Expression Mapping window opens. The regular expression for the matched relationship is displayed in the upper part of the left pane in tree form. Expand the regular expression by clicking the plus (+) sign. Collapse the regular expression by clicking the minus (-) sign. The figure below shows the window with the regular expression expanded.

    Click an element in the expression tree to select it. The sample text matched by the selected element is highlighted in the middle part of the pane. The edited regular expression is displayed in the lower part of the pane, where you can edit it manually.

    Do not manually edit the regular expression generated for the relationship unless you have modified it inadvertently.
  4. To generate the subexpression for an entity:
    • Select the element that corresponds to the entity in the expression tree. To match pushLogin and any other Objective C function, for example, you would select the second \w+ in the generated regular expression.
    • Edit the element to produce the appropriate subexpression. To complete the match for an Objective C function, you need to "group" the \w+ element to produce the subexpression (\w+). Follow the instructions in the subtopic below to edit the subexpression.
    The subexpression for the entity you want to match must either be grouped or an exact match. Any other input is not accepted.
  5. To map the subexpression to the search pattern for the entity:
    • In the Entity group box, select the entity type you want to match in the Type drop-down, OBJCFUNCTION in our example.
    • Drag-and-drop the subexpression for the entity from the expression tree to the cell beside the Name attribute. The subexpression is mapped to a variable with a name reflecting the order of grouped expressions in the expression tree, counting from the regular expression for the matched relationship. So if (\w+) is the only other grouped expression besides the expression for the matched relationship, the mapped variable is named %2, as in our example.
    • Assuming you are defining a relationship between a source file and an extracted object, enter the system variable %sourcefilename in the cell beside the Source attribute. If you are defining another type of relationship, reference-resolving information may be contained in a different attribute.

    Click Save in the Entity group box. The entity mapping is added to the list of mappings in the Mapping List group box. Repeat this procedure for each entity mapping you want to define. The figure below shows the entity mapping for our example.

  6. To map the subexpression to the relationship name:
    • In the Relation group box, select the relationship type you want to map in the Type drop-down, ObjectiveCDefinesObjectiveCFunction in our example.
    • Assuming you are defining a relationship between a source file and an extracted object, enter the system variable %sourcefilename in the cell beside the Left Entity Name attribute. If you are defining another type of relationship, drag-and-drop the subexpression for the left entity from the expression tree to the cell beside the Left Entity Name attribute.
    • Drag-and-drop the subexpression for the right entity from the expression tree to the cell beside the Right Entity Name attribute.

    Click Save in the Relation group box. The relationship mapping is added to the list of mappings in the Mapping List group box. Repeat this procedure for each relationship mapping you want to define. The figure below shows the relationship mapping for our example.

    To edit a mapping definition, select it in the Mapping List group box and click Edit. Follow the procedure you used to define the mapping. To delete a mapping definition, select it in the Mapping List group box and click Remove.

  7. When you are satisfied with your entries in the Create New Regular Expression Mapping window, click Save.
Architecture Modeler displays the search pattern for the matched relationship in the Match pattern area in the central pane of the window.
Select the search pattern for the matched relationship and choose Edit in the right-click menu to modify the pattern. Select it and choose Delete in the right-click menu to delete the pattern.

  • Editing Subexpressions
    Describes how to edit subexpressions.
Parent topic: Specifying Search Patterns for Entities and Relationships


Editing Subexpressions

Describes how to edit subexpressions.

Editing subexpressions consists of three tasks:

  • Combining, or joining up, elements.
  • Dividing, or splitting down, subexpressions.
  • Grouping and quantifying subexpressions.
The subexpression for the entity you want to match must either be grouped or an exact match. Any other input is not accepted.
STEPS:
  1. To combine elements, select the element below the one you want to combine it with and click Join Up. Architecture Modeler combines the elements, automatically grouping the expression as needed. In the figure below, selecting \) and clicking Join Up produces (\w+\)). The joined expression is displayed in tree form in the same way as the regular expression for the matched relationship.

  2. To split a regular expression, select the expression to be split and click Split Down. The Split Regular Expression dialog opens, with the selected expression displayed in the Regular Expression field. Place the mouse cursor between the elements you want to split and click OK. Architecture Modeler splits the elements, automatically ungrouping the elements as needed. Place the mouse cursor as shown in the figure below to produce \w+ and \).

  3. To edit a regular expression, select the expression you want to edit and click Edit. The Edit Regular Expression dialog opens.

  4. In the Edit Regular Expression dialog, edit the expression manually, or use the buttons to modify the expression. Click:
    • Convert to exact match if you want to match the matched sample only. In the example shown, clicking Convert to exact match produces the expression pushLogin.
    • Convert to group if you want to group the expression. In the example shown, clicking Convert to group (and leaving the quantifier drop-down set to Plus) produces the expression (\w+).
    • Deduct regular expression if you want to restore the expression to its lowest form. Assuming you had grouped the expression shown, clicking Deduct regular expression produces the regular expression \w+.
    The subexpression for the entity you want to match must either be grouped or an exact match. Any other input is not accepted.
  5. If you need to qualify the expression further, choose the appropriate quantifier from the drop-down on the Edit Regular Expression dialog:
    • Plus equates to the quantifier +, which denotes one or more occurrence.
    • Star equates to the quantifier *, which denotes 0 or more occurrences.
    • Optional equates to the quantifier ?, which denotes 0 or 1 occurrence.
  6. When you are satisfied with your entries in the Edit Regular Expression dialog, click OK.
Architecture Modeler displays the edited subexpression in the expression tree.
Parent topic: Mapping Regular Expressions to Search Patterns


Mapping XPath Queries to Search Patterns

Describes how to map XPath queries to search patterns.

Search pattern generation for an XML file takes place in two steps:

  • For the relationships the parser extracts, the search pattern is mapped from the XPath query generated when you select the node for the right relationship end in the sample file. For the relationship OrgChartDefinesOrgChartEmployee, for example, you would select an Employee node. Before you "pick" the query, you need to edit it manually to ensure the correct match.
  • For the entities the parser extracts, the search pattern is mapped from an attribute of the node corresponding to the entity type you want to match. For the relationship OrgChartDefinesOrgChartEmployee, for example, you would typically select the name attribute of the Employee node. The source file itself is matched from a special system variable named %sourcefilename.

Once you have mapped the entity search pattern, you can use the pattern to match the relationship name.

STEPS:
  1. Click the Files button in Architecture Modeler. Architecture Modeler displays the defined source file types in the Name area in the central pane of the window, and the text of the corresponding sample in the righthand pane. If more than one source file type is listed, click the name of the type to display the sample.
  2. To generate the search pattern for a relationship, select the node for the right relationship end in the sample file. The generated XPath query is displayed in the XPath Query field. Edit the query to ensure the correct match, then click Pick in the right-click menu. The figure below shows the window for the relationship OrgChartDefinesOrgChartEmployee.

  3. The Create New XPath Expression Mapping window opens. The XPath Query for the matched relationship is displayed in the XPath Main Query field. The query selectors tree is shown in the pane below the field. Expand the tree by clicking the plus (+) sign. Collapse the tree by clicking the minus (-) sign. The figure below shows the window with the tree expanded.

  4. To specify the node attribute to be mapped to the entity search pattern, select the node in the query selectors tree. Click:
    • An attribute name in the right-click menu to match the value of the attribute for the node exactly.
    • Select All <<Node>> elements: <queryElement> in the right-click menu to match any value of an attribute for nodes of the specified type.
    • Select All <Node>(s) for:<attribute> in the right-click menu to match any value of the selected attribute for nodes of the specified type.

    The XPath query for the selected attribute(s) is displayed in the XPath Selector Query field. For our example, you would select an Employee node and choose Select All Employee(s) for:name in the right-click menu.

  5. To map a node attribute to the search pattern for the entity:
    • In the Entity group box, select the entity type you want to match in the Type drop-down, ORGCHARTEMPLOYEE in our example.
    • Copy and paste the text in the XPath Selector Query field to the cell beside the Name attribute. Use the arrow keys and Ctrl-C to copy the text. Use Ctrl-V to paste the text.
    • Assuming you are defining a relationship between a source file and an extracted object, enter the system variable %sourcefilename in the cell beside the Source attribute. If you are defining another type of relationship, reference-resolving information may be contained in a different attribute.

    Click Save in the Entity group box. The entity mapping is added to the list of mappings in the Mapping List group box. Repeat this procedure for each entity mapping you want to define. The figure below shows the entity mapping for our example.

  6. To map the subexpression to the relationship name:
    • In the Relation group box, select the relationship type you want to map in the Type drop-down, OrgChartDefinesOrgChartEmployee in our example.
    • Assuming you are defining a relationship between a source file and an extracted object, enter the system variable %sourcefilename in the cell beside the Left Entity Name attribute. If you are defining another type of relationship, drag-and-drop the subexpression for the left entity to the cell beside the Left Entity Name attribute.
    • Copy and paste the text in the XPath Selector Query field to the cell beside the Right Entity Name attribute. Use the arrow keys and Ctrl-C to copy the text. Use Ctrl-V to paste the text.

    Click Save in the Relation group box. The relationship mapping is added to the list of mappings in the Mapping List group box. Repeat this procedure for each relationship mapping you want to define. The figure below shows the relationship mapping for our example.

    To edit a mapping definition, select it in the Mapping List group box and click Edit. Follow the procedure you used to define the mapping. To delete a mapping definition, select it in the Mapping List group box and click Remove.

  7. When you are satisfied with your entries in the Create New Regular Expression Mapping window, click Save.
Architecture Modeler displays the search pattern for the matched relationship in the MatchPattern area in the central pane of the window.
Select the search pattern for the matched relationship and choose Edit in the right-click menu to modify the pattern. Select it and choose Delete in the right-click menu to delete the pattern.

Parent topic: Specifying Search Patterns for Entities and Relationships


Exporting the Extended Metamodel

Describes how to export the extended metamodel to MW.

Based on your input, Architecture Modeler creates a plug-in that defines an extension, or add-on, to the MW metamodel. The add-on specifies the entity and relationship types of interest in the newly supported source files.

To export the plug-in to MW, select the source file type for the extension in the Name area in the central pane of the Architecture Modeler window, then choose Export to MW in the right-click menu. A Browse dialog opens, where you can browse for the Plugins folder in the Modernization Workbench installation directory. Click OK to export the extended metamodel. The plug-in has a name of the form <SourceFileType>Plugin.xml.

Parent topic: Defining an Extension with Architecture Modeler


Reconfiguring Modernization Workbench

Describes how to reconfigure MW after exporting an extended metamodel.

After exporting an extended metamodel to Modernization Workbench, you need to reconfigure MW for the new source file type. To reconfigure MW after plug-in export, double-click \bin\rescan.exe in the Modernization Workbench installation directory. The Configuration Manager window opens, with a check box in the Programming Languages folder for the new extension. Select the check box and click OK. Make sure to upgrade the configuration of any workspaces you want to use the new extension in.

Parent topic: Defining an Extension with Architecture Modeler


Troubleshooting the Extended Metamodel

Describes how to troubleshoot an extended metamodel in MW.

The plug-in for an extended metamodel references a universal parser configuration file that defines the search patterns MW uses to extract entities and relationships from newly supported files. MW issues the following critical errors for problems it encounters processing the universal parser configuration file at verification:

  • Critical error - 404 5 Error while processing XML file '%1'. Logged when the Universal Parser configuration file is corrupt or missing.
  • Critical error - 407 5 Error while processing regular expression '%1'. Logged when a regular expression defined in the Universal Parser configuration file is invalid.
  • Critical error - 409 5 Input source file '%1' not found. Logged when the file to be parsed is not found.
Parent topic: Defining an Extension with Architecture Modeler


Supported Features by Language

Table of supported features by language.

The table below shows Modernization Workbench feature support by language. The remainder of the section provides usage notes and caveats for the major supported languages and related platforms. Make sure to check the Release Notes on the installation CD for late-breaking support information.

In the table Y* means that HyperCode is available on a line-by-line basis only. Y** means that impact analysis context-sensitivity is available on an intraprogram basis only.
Functional Area/Feature | Cobol | PL/I | Natural | APS | RPG | Java | JSP | C/C++ | .NET | VB | PL/SQL | ASM
Inventory Management |  |  |  |  |  |  |  |  |  |  |  |
Registration | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y
Source Editor | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y
— Syntax Highlighting | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N
Verification | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y
— Relaxed Parsing | Y | Y | Y | N | N | N | N | N | N | N | N | N
— Verification of DBCS | Y | Y | N | N | Y | N | N | N | N | N | N | N
Inventory Report | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y
Verification Report | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y
Orphan Analysis | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y
Batch Refresh Process | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y
Architecture Modeling |  |  |  |  |  |  |  |  |  |  |  |
Decision Resolution | Y | Y | Y | Y | Y | Y | N | Y | Y | Y | Y | Y
— Decision Autoresolution | Y | Y | N | Y | Y | N | N | N | N | N | N | N
Generic API Analysis | Y | Y | N | Y | N | N | N | N | N | N | N | Y
Boundary Decision Analysis | N | N | N | N | N | Y | N | Y | Y | Y | N | N
System-Level Analysis |  |  |  |  |  |  |  |  |  |  |  |
Diagrammer | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y
Complexity Metrics | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y
Effort Estimation | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y
Batch Application Viewer | Y | Y | Y | Y | Y | N | N | N | N | N | N | N
CRUD Report | Y | Y | Y | Y | Y | N | N | N | N | N | N | Y
Query Repository | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y
System-Level Reporting |  |  |  |  |  |  |  |  |  |  |  |
Executive Report | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y
— Possible Code Anomalies | Y | Y | Y | Y | Y | Y | N | Y | N | Y | Y | N
— Prepackaged Code Anomalies | Y | N | N | Y | N | N | N | N | N | N | N | N
— Custom with Clipper Queries | Y | Y | Y | Y | Y | Y | Y | Y | N | Y | Y | N
Reference Reports | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y
— Source Dependencies | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y
— Calls | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y
— Data Access | Y | Y | Y | Y | Y | N | N | N | N | N | Y | N
— Screen Access | Y | Y | Y | Y | Y | N | N | N | N | N | N | N
Business Context |  |  |  |  |  |  |  |  |  |  |  |
Tag Manager | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y
Glossary | Y | Y | Y | Y | Y | Y | N | Y | Y | Y | Y | Y
— Business Name Synchronization | Y | Y | Y | Y | Y | N | N | N | N | N | N | N
— Propagate from Screen Fields | BMS | N | N | N | N | N | N | N | N | N | N | N
Source-Level Analysis |  |  |  |  |  |  |  |  |  |  |  |
Interactive Analysis | Y | Y | Y | Y | Y | Y | N | Y | Y* | Y | N | Y*
— Source Pane | Y | Y | Y | Y | Y | Y | N | Y | Y | Y | N | Y
— Context Pane | Y | Y | Y | Y | Y | Y | N | Y | Y | Y | N | Y
— Clipper Pane | Y | Y | Y | Y | Y | Y | N | Y | Y | Y | N | Y
— Model Pane | Y | Y | Y | Y | Y | Y | N | Y | Y | Y | N | Y
— Callie Pane (Call Diagram) | Y | Y | Y | Y | Y | N | N | N | N | N | N | N
— Flowchart Pane | Y | Y | N | Y | N | N | N | N | N | N | N | N
— Execution Path Pane | Y | N | N | N | N | N | N | N | N | N | N | N
— Animator Pane | Y | N | N | N | N | N | N | N | N | N | N | N
— Bird's Eye Pane | Y | Y | Y | Y | Y | Y | N | Y | Y | Y | N | Y
— Watch Pane | Y | Y | Y | Y | Y | Y | N | Y | Y | Y | N | Y
— Screen Pane | Y | Y | Y | Y | Y | N | N | N | N | N | N | N
Data Field Analysis |  |  |  |  |  |  |  |  |  |  |  |
Global Data Element Flow | Y | Y | Y | Y | Y | N | N | N | N | N | N | N
— Data View Pane | Y | Y | Y | Y | Y | N | N | N | N | N | N | N
— Data Flow Pane | Y | Y | Y | Y | Y | N | N | N | N | N | N | N
Impact Analysis | Y | Y | Y | Y | Y | N | N | N | N | N | N | N
— Intraprogram | Y | Y | Y | Y | Y | N | N | N | N | N | N | N
— Interprogram | Y | Y | Y | Y | Y | N | N | N | N | N | N | N
— Thru External Data | IMS, SQL | IMS, SQL | IMS, SQL | SQL | IMS, SQL | N | N | N | N | N | N | N
— Context-sensitivity | Y | N | Y** | N | N | N | N | N | N | N | N | N
Change Analyzer | Y | Y | Y | Y | Y | N | N | N | N | N | N | N
Slicing Analysis |  |  |  |  |  |  |  |  |  |  |  |
Logic Analyzer | Y | Y | Y | N | Y | N | N | N | N | N | N | N
— Dead Code and Data Analysis | Y | Y | Y | Y | Y | N | N | N | N | N | N | N
— Structure-Based Analysis | Y | Y | N | N | Y | N | N | N | N | N | N | N
— Computation-Based Analysis | Y | N | Y | N | N | N | N | N | N | N | N | N
— Domain-Based Analysis | Y | Y | N | N | N | N | N | N | N | N | N | N
Business Rules |  |  |  |  |  |  |  |  |  |  |  |
Business Rule Manager | Y | Y | Y | Y | Y | Y | N | Y | Y | Y | N | Y
— Create Rules | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | Y
— Create Rules from Clipper | Y | Y | Y | Y | Y | Y | Y | Y | N | Y | N | N
— Autodetect Rules | Y | Y | Y | Y | Y | N | N | N | N | N | N | N
— Autodetect Parameters | Y | Y | Y | Y | Y | N | N | N | N | N | N | N


APS Support

Introduces Modernization Workbench support for APS.

Modernization Workbench supports Micro Focus APS for z/OS, Version 5.0.


AS/400 CL Support

Introduces Modernization Workbench support for AS/400 CL.

Modernization Workbench supports AS/400 CL, Version 5, Release 4.


Assembler Support

Introduces Modernization Workbench support for Assembler.

Modernization Workbench supports IBM 360/370/390 High Level Assembly Language. Follow the instructions in this section to specify relationships for Assembler customizations.

  • Specifying Relationships for Assembler Customizations
    Describes how to specify relationships for Assembler code customizations.


Specifying Relationships for Assembler Customizations

Describes how to specify relationships for Assembler code customizations.

Use the <Assembler> <APICalls> section of \<Workbench Home>\Data\Legacy.xml to specify relationships for Assembler code customizations.

Defining Program Entry Points

Use the <Defining> tag to specify macros that define program entry points:

      <Defining>
        <Macro name="macro-name">
          <!-- Parameter is the label -->
          <Parameter number="Label" type="String" meaning="Name"/>
        </Macro>
      </Defining>
where:
  • The name attribute of the <Macro> tag is the name of the macro used to define an entry point.
  • The <Parameter> tag describes the item in the source line that will be captured as the entry point name. The "Label" value of the number attribute indicates that the entry point name will be the label before the macro command.

Loading the External Name

Use the <Loading> tag to specify macros used to get external names prior to calls:

      <Loading>
        <Macro name="macro-name">
          <!-- Parameters are all the parameters of the macro -->
          <Parameter number="*" type="String" meaning="Name"/>
        </Macro>
      </Loading>
where:
  • The name attribute of the <Macro> tag is the name of the macro used as the loading operator.
  • The <Parameter> tag describes the item in the source line that will be used as the memory address or name that can be used to get the external name for a call.

Using an External Name in Calls

Use the <Calling> tag to specify macros that call external programs:

      <Calling>
        <Macro name="macro-name">
          <!-- Parameter is the first parameter of the macro -->
          <Parameter number="1" type="String" meaning="Name"/>
        </Macro>
      </Calling>
where:
  • The name attribute of the <Macro> tag is the name of the macro used to call an external program.
  • The <Parameter> tag describes the item in the source line that will be captured as the program to call. The "1" value of the number attribute indicates that the first parameter following the opcode will be used to determine the external name.

Usage Example

The following example illustrates how to specify relationships for Assembler code customizations:

  <Assembler>
    <APICalls>

      <Defining>
        <Macro name="ENTER">
          <!-- Parameter is the label -->
          <Parameter number="Label" type="String" meaning="Name"/>
        </Macro>
      </Defining>

      <Loading>
        <Macro name="EPLOAD">
          <!-- Parameters are all the parameters of the macro -->
          <Parameter number="*" type="String" meaning="Name"/>
        </Macro>
      </Loading>

      <Calling>
        <Macro name="MODCALL">
          <!-- Parameter is the first parameter of the macro -->
          <Parameter number="1" type="String" meaning="Name"/>
        </Macro>
      </Calling>

    </APICalls>
  </Assembler>
Parent topic: Assembler Support


C/C++ Support

Introduces Modernization Workbench support for C/C++.

Modernization Workbench supports Microsoft C 6.0 and Microsoft Visual C++ 6.0. Follow the instructions in this section to register and verify C and C++ source files.

  • Registering C/C++ Files
    Describes how to register C/C++ files in Modernization Workbench.
  • Verifying C/C++ Files
    Describes how to verify C/C++ files in Modernization Workbench.


Registering C/C++ Files

Describes how to register C/C++ files in Modernization Workbench.

Before registering C/C++ files, set:

  • Preserve Folder Structure on the Registration > Extensions tab of the Workspace Options. The folder structure for the application is preserved in the display names of registered files. You must select this option if your application uses the same program in multiple folders.
  • Expand tabulation symbols on the Registration > Source Files tab of the Workspace Options. Tabulation symbols are replaced with a corresponding number of spaces when you register the files. You must select this option if you want to view HyperView information for C or C++ programs.
Parent topic: C/C++ Support


Verifying C/C++ Files

Describes how to verify C/C++ files in Modernization Workbench.

Before verifying C/C++ files:

  • On the Verification > Settings tab of the Workspace Options, list the folders for include files used by the application (either original folders or folders in MW, if the include files were registered).
    Tip: You can also specify these folders in the verification options for a project, in which case MW looks only at the folders for the project.
  • On the Verification > Settings tab of the Workspace Options, enter the parameters used to compile the application in the C/C++ Parser Parameters field. For example, the parameters would be -D_DEBUG -D_UNICODE -D_WINDLL -D_DLL for an MFC application.
    Tip: You can also specify these parameters in the verification options for a project, in which case only the project parameters are used for verification.
  • On the Verification tab of the Project Options, select Use Precompiled Header File if you want the parser to use a precompiled header file when it verifies the project. In the adjacent field, enter the full path of the header file. Do not specify the file extension. Using a precompiled header file may improve verification performance significantly.
    The content of the header file must appear in both a .c or .cpp file and a .h file. The precompiled header file need not have been used to compile the application.
  • On the Boundary Decisions tab of the Workspace Options, specify the resource types for method calls your application uses to interface with databases, message queues, or other resources.
Parent topic: C/C++ Support


CICS Support

Introduces Modernization Workbench support for CICS.

Modernization Workbench supports the following CICS versions:

  • CICS Transaction Server for OS/390, Version 1, Release 3.
  • CICS Transaction Server for z/OS, Version 3, Release 1.
  • Deprecated CICS Statements
  • Keyword Permutations
  • Statements Taken to Be the Same


Deprecated CICS Statements

Deprecated CICS statements are supported. Programs containing these statements verify successfully.

Parent topic: CICS Support


Keyword Permutations

Keywords without parameters cannot be permuted if they start a statement. SEND TEXT NOEDIT, for example, must start with SEND TEXT NOEDIT. TEXT or NOEDIT should not be placed after other statement’s keywords and parameters. The following statement is invalid, for example:
EXEC CICS SEND TEXT LENGTH (10) NOEDIT

Generally, you can permute statement keywords with parameters in any order, keeping in mind that the first keyword should not be permuted with the others. Below is a list of statements for which you cannot permute the second keyword. That is, the keywords must appear in the order shown:

  • CHANGE PASSWORD
  • CHANGE TASK
  • CHECK ACQPROCESS
  • CHECK ACTIVITY
  • CHECK ACQACTIVITY
  • CHECK TIMER
  • DEFINE ACTIVITY
  • DEFINE COMPOSITE
  • DEFINE INPUT EVENT
  • DEFINE PROCESS
  • DEFINE TIMER
  • DELETE CONTAINER
  • DELETE COUNTER
  • DELETE DCOUNTER
  • EXTRACT CERTIFICATE
  • GET CONTAINER
  • GETNEXT ACTIVITY
  • GETNEXT CONTAINER
  • GETNEXT EVENT
  • GETNEXT PROCESS
  • INQUIRE ACTIVITYID
  • INQUIRE CONTAINER
  • INQUIRE EVENT
  • INQUIRE TIMER
  • LINK PROGRAM
  • RETRIEVE SUBEVENT
  • WAIT CONVID
  • WAIT JOURNALNAME
  • WAIT JOURNALNUM
  • WRITE JOURNALNAME
  • WRITE JOURNALNUM
Parent topic: CICS Support


Statements Taken to Be the Same

The statements in each set of statements below are recognized as the same statement and assumed to handle a united set of conditions:

  • DOCUMENT CREATE, DOCUMENT INSERT, DOCUMENT RETRIEVE, DOCUMENT SET

  • ENDBROWSE ACTIVITY, ENDBROWSE CONTAINER, ENDBROWSE EVENT, ENDBROWSE PROCESS

  • START, START CHANNEL

  • SYNCPOINT, SYNCPOINT ROLLBACK

  • WEB ENDBROWSE HTTPHEADER, WEB ENDBROWSE FORMFIELD

  • WEB READ FORMFIELD, WEB READ HTTPHEADER

  • WEB READNEXT FORMFIELD, WEB READNEXT

  • WEB STARTBROWSE FORMFIELD, WEB STARTBROWSE HTTPHEADER

BTS and CHANNEL versions of statements are not distinguished and assumed to handle a united set of conditions.

Parent topic: CICS Support


Cobol Support

Introduces Modernization Workbench support for Cobol.

Modernization Workbench supports the following Cobol versions:

  • COBOL for OS/390, Version 2, Release 2.
  • Enterprise COBOL for z/OS, Version 3, Release 4.
  • VS COBOL II, Release 4.
  • Micro Focus COBOL, V3.2 (level 10).
  • ACUCOBOL-GT®, Version 6.1.
  • ILE COBOL for AS/400, Version 4, Release 4.
  • HP3000, HP COBOL II/XL.
  • Unisys COBOL
    • UCOB – Unisys 2200 UCS COBOL.
    • ACOB – Unisys 2200 ASCII COBOL.
    • UTS – UTS 4000 COBOL.
  • Unisys MCP COBOL
    • Cobol-74.
    • Cobol-85.
  • Fujitsu COBOL (for OS IV MSP and OS IV XSP systems).
  • Siemens COBOL, Version 2.3 (BS2000/OSD).
  • ICL C2 COBOL for OpenVME, Version 3.
  • Tandem Screen COBOL, Pathway/TS D42+ (alpha offering).
    Tandem Server Cobol is not supported.
  • Object-Oriented Statements (Cobol for OS/390 Only)
  • Separators Must Be Followed by Blanks
  • Copybooks in Different Partitioned Datasets
  • Copybooks in a Library
  • How MW Calculates Cobol Dead Code Statistics
  • Special Handling of Cobol Program Complexity Metrics


Object-Oriented Statements (Cobol for OS/390 Only)

Object-oriented Cobol statements are not supported in Cobol for OS/390.

Parent topic: Cobol Support


Separators Must Be Followed by Blanks

The Cobol parser assumes that every separator must be followed by a blank. If you index a variable with a separator that is not followed by a blank, MY-VARIABLE(1,1), the parser may treat (1,1) as a numeric literal, especially when the program was compiled with the DECIMAL POINT IS COMMA option. To index a variable, use the format MY-VARIABLE(1, 1)or MY-VARIABLE(1 1).

Parent topic: Cobol Support


Copybooks in Different Partitioned Datasets

Before registering copybooks in different Partitioned Data Sets (PDS) on the mainframe, you must select the option Preserve Folder Structure on the Registration > Extensions tab of the Workspace Options.

Parent topic: Cobol Support


Copybooks in a Library

If the copybooks used in a Cobol program are in a library, and the library is referenced in a COPY statement with the format COPY text-name IN library-name or COPY text-name OF library-name, the parser looks first for a copybook named library-name.text-name, and if it does not exist, for a copybook named text-name. If text-name does not exist, the parser reports library-name.text-name as an unresolved reference.

It is your responsibility to prefix library member names with library names or filepaths and dot (.) separators: dir1.dir2.member.cpy represents the copybook dir1/dir2/member, for example. When the parser encounters a reference to a member, it first searches for the longest possible name, dir1.dir2.member.cpy, and if not found, then the shorter versions, dir2.member.cpy and member.cpy.

Unresolved references to library members are always reported with the longest name. This means that if you subsequently register a missing copybook with a short name, the referencing source file will not be invalidated. It’s up to you to remember that the referencing source needs to be reverified.
Parent topic: Cobol Support


How MW Calculates Cobol Dead Code Statistics

This section provides details on how MW calculates Cobol dead code statistics.

  • Dead Statements
  • Dead Data Elements
  • Dead Constructs
  • Dead Statements, Dead Data Elements, and Dead Lines from Copybooks
  • HyperView Usage
Parent topic: Cobol Support


Dead Statements

A dead statement is a statement that can never be reached during program execution. Only control flow analysis techniques (static analysis) are used for the detection of dead statements. Domain-based analysis is not performed.

Statements directly connected with dead statements are also considered to be dead. For instance, EXEC CICS HANDLE statements are dead when all EXEC CICS statements are dead or there are no EXEC CICS statements at all.

Parent topic: How MW Calculates Cobol Dead Code Statistics


Dead Data Elements

Dead data elements are unused structures at any data level, all of whose parents and children are unused. Condition names (88-level items) are dead if unused.

Only user-defined data elements can be counted as dead. Data elements from system copybooks are never counted as dead.

Parent topic: How MW Calculates Cobol Dead Code Statistics


Dead Constructs

A paragraph consisting solely of dead statements is a dead paragraph. A section consisting solely of dead paragraphs or that is empty is a dead section. The exception to this is the Configuration Section. Because there are no candidate dead constructs (statements or data elements) in the Configuration Section, this section is not processed and does not contribute to dead code metrics. A division is never considered dead.

A file description entry (FD) containing only dead data elements and not used in any file operation is a dead file description. A file section containing only dead file descriptions is a dead section. A SELECT statement referring to a dead file description is a dead construct.

A file-control paragraph consisting solely of dead SELECT statements is a dead paragraph. An input-output section consisting solely of dead file-control paragraphs is a dead section.

Parent topic: How MW Calculates Cobol Dead Code Statistics


Dead Statements, Dead Data Elements, and Dead Lines from Copybooks

Dead statements and dead data elements from copybooks (that either start or end in a copybook) are counted in the Dead Statements, Dead Data Elements, and Dead Lines metrics. They are also counted separately in the Dead Statements from Includes, Dead Data Elements from Includes, and Dead Lines from Includes metrics.

If a copybook is included multiple times, then each instance of the copybook is considered to be an independent source file, and all dead constructs and dead lines from the copybook are counted as many times as they are identified as dead. For instance, if a copybook is included twice and both inclusions result in a dead data element, the result is Dead Data Elements from Includes=2 and Dead Lines from Includes=2 (assuming each dead data element occupies only one line of the included copybook). If the same copybook is included twice but only one instance results in a dead data element, then Dead Data Elements from Includes=1 and Dead Lines from Includes=1.

All “Dead from Includes” metrics are for the specified program only. These metrics do not include an analysis of the same copybook over the entire application.

Parent topic: How MW Calculates Cobol Dead Code Statistics


HyperView Usage

In HyperView, all dead statements, dead paragraphs, dead sections, dead data declarations, dead files, and instances of dead files in statements will have the attribute Dead set to True.

Not all language syntax phrases are represented in the HyperView model, so not all dead constructs contributing to dead lines can be identified using Clipper searches. In other words, Clipper can identify all dead data elements and all dead statements, but not necessarily all dead lines.
Parent topic: How MW Calculates Cobol Dead Code Statistics


Special Handling of Cobol Program Complexity Metrics

  • Abbreviated conditions are expanded before calculations.
  • DECLARATIVEs content and other exception-handling statements are counted once, as ordinary statements.
  • Handling of EVALUATE formats:
    EVALUATE … [ALSO …] Conditional Statement
WHEN … [ALSO …] Binary Decision, Conditional Statement
WHEN OTHER Conditional Statement
END-EVALUATE
  • Handling of SEARCH formats:
    SEARCH … AT END … Binary Decision
WHEN … Binary Decision, Conditional Statement
WHEN …AND… Binary Decision, Conditional Statement
END-SEARCH
Parent topic: Cobol Support


ECL Support

Introduces Modernization Workbench support for ECL.

Modernization Workbench supports ECL, ClearPath IX, Release 6.


IDMS Support

Introduces Modernization Workbench support for IDMS.

Modernization Workbench supports CA-IDMS, Release 15.0.

  • COPY IDMS Statements
  • NNCOPY Statements
  • Manipulation of Logical Records


COPY IDMS Statements

COPY IDMS statements are the source manipulation statements for IDMS DML:
– [level-number] COPY IDMS [RECORD] copybook-name [REDEFINES data-item-name]

You must register a a separate copybook <copybook-name> for each COPY IDMS statement in the application. These copybooks should describe corresponding IDMS database records. They can be extracted manually from IDMS-preprocessed sources.

If the COPY IDMS statement depends on a schema or subschema:

– COPY IDMS SUBSCHEMA-< copybook>

the copybook name must be <schema_name>$<subschema_name>$SUBSCHEMA-<copybook>. SUBSCHEMA-CTRL and SUBSCHEMA-LR-CTRL are considered to be independent of schema/subschema and should not be prefixed.

Parent topic: IDMS Support


NNCOPY Statements

The NNCOPY statement is an extension of the common COPY statement:

– [level-number] NNCOPY copybook-name [ ([struct, ] substruct)] [suffix]

Select Handle NNCOPY syntax in the project verification options for Cobol files if you want the parser to recognize NNCOPY statements.

Parent topic: IDMS Support


Manipulation of Logical Records

Manipulation of logical records in Cobol programs is not supported.

Parent topic: IDMS Support


IMS Support

Introduces Modernization Workbench support for IMS.

Cobol and PL/I applications that use IMS/DB and/or IMS/DC interact with IMS via CBLTDLI calls and PLITDLI calls, respectively. CICS and batch applications may use EXEC DLI commands to interface with IMS. The Modernization Workbench IMS Analysis feature examines these call- and command-level interfaces to determine the interactions between programs and the IMS database. It analyzes:

  • The DLI-FUNC-CODE parameter to determine the type of operation requested from IMS.
  • The PCB-MASK parameter to determine the target segment or target MFS screen for the operation.

IMS Analysis then follows the call chain from the programs performing these calls up to the programs triggered by the operating system, known as root programs. Since the root programs have a PSB associated with them, the analysis can establish which PCB is used in the call to IMS. With this information, Modernization Workbench can create repository relationships that reflect the interactions between programs and the IMS database. Before IMS analysis, in other words, you will see only calls to CBLTDLI, PLITDLI, or EXEC DLI. After IMS analysis, you will see CRUD information and MFS screen interactions.

Follow the steps below to perform IMS Analysis:

  1. In addition to the basic source files for the Cobol or PL/I application, register the source files that describe the IMS environment for the application. Modernization Workbench supports the following IMS-related file types:
    • DBD files (.dbd). These files contain definitions for IMS segments and are the input to the macro DBDGEN in IMS.
    • MFS files (.mfs). These files contain the screen definitions for an IMS system and are the input for MFSGEN.
    • MFS Include files (.mfi).
    • PSB files (.psb). These files contain the list of PCBs accessible by the program and are the input for PSBGEN.
    • PSB Copybook File (.psbcpy).
    • System Definition Files (.ims).
  2. Ensure verification options are set correctly:
    • For Cobol files, ensure the default Perform Program Analysis and Enable Data Element Flow options are set in Project Options > Verification > Advanced Program Analysis.
    • For PL/I files, ensure the default Enable Data Element Flow option is set in Project Options > Verification > Advanced Program Analysis.
  3. Verify application source files. You can:
    • Verify the entire project, which ensures that files are parsed in the appropriate order, taking account of the dependencies between file types.
    • Verify files or file types individually, in which case you should follow the order specified in "Verification Order for IMS Applications."
  4. When all source files have been verified successfully, choose Prepare > IMS Analysis. Modernization Workbench analyzes the calls to IMS to determine the type of IMS operation performed (Insert, Read, Change, Delete) and the target segment or target MFS screen for the operation.
Important: See "Restrictions on IMS Support" for limitations in Modernization Workbench support that may affect your project.

The figure below shows typical results of IMS Analysis. The objects marked with the [image] icon are abstract decision objects, indicating that the database operation, in this case, Deletes, has been resolved to multiple segments.

See "Troubleshooting IMS Analysis" for common problems you may encounter when performing IMS Analysis.
  • Troubleshooting IMS Analysis
    Describes common problems you may encounter when performing IMS Analysis.
  • Mapping Root Programs to PSBs in JCL or System Definition Files
    Describes how to identify IMS root programs in a JCL file for a batch application or a System Definition file for an online application.
  • Verification Order for IMS Applications
    Describes the order in which source files in IMS applications should be verified.
  • Reverifying Files in IMS Applications
    Describes when source files in IMS applications are invalidated and need to be reverified.
  • Restrictions on IMS Support
    Introduces restrictions on Modernization Workbench support for IMS.


Troubleshooting IMS Analysis

Describes common problems you may encounter when performing IMS Analysis.

The following are common problems you may encounter when performing IMS Analysis:
  • Missing root programs. Root programs are called from the operating system and are passed a PSB that is passed in turn to any called programs. The relationship with the root program is established in the JCL for batch programs or in a system definition file for online programs. If you are missing the JCL or system definition files, you can create them manually, as described in "Mapping Root Programs to PBS in JCL or System Definition Files."
  • All content is present but no relationships are created from programs to IMS segments. See "Restrictions on IMS Support" for coding patterns that are not supported by IMS Analysis.
Parent topic: IMS Support


Mapping Root Programs to PSBs in JCL or System Definition Files

Describes how to identify IMS root programs in a JCL file for a batch application or a System Definition file for an online application.

Root programs are called from the operating system and passed a PSB that is passed, in turn, to any called programs. The relationship with the root program is established in the JCL for batch programs or in a system definition file for online programs.

If you do not have actual JCL or System Definition files, you must create dummy ones. Analyzing the application without these files does nothing. Sample JCL and System Definition files follow:

Sample JCL file:
//imsbatch JOB
//S1 EXEC PGM=DFSRRC00,REGION=2048K,
//
PARM=(DLI,progname,psbname,7,0000,,0,,N,0,T,0,,N,,,N)
//

Sample System Definition file:
APPLCTN PSB=progname
TRANSACT CODE=trnname
Parent topic: IMS Support


Verification Order for IMS Applications

Describes the order in which source files in IMS applications should be verified.

If you verify an entire project for an IMS application, the workbench parses the source files in appropriate order, taking account of the dependencies between file types. Otherwise, verify source files in the following order:

  • DBD files (for GSAM databases)
  • MFS files
  • PSB files
  • Cobol or PL/I files
    For Cobol files, make sure the default Perform Program Analysis and Enable Data Element Flow project verification options are set. For PL/I files, make sure the default Enable Data Element Flow project verification option is set.
  • JCL or System Definition files
Parent topic: IMS Support


Reverifying Files in IMS Applications

Describes when source files in IMS applications are invalidated and need to be reverified.

If you reverify a root program, the JCL or System Definition file that maps the program to a PSB will be invalidated. If you reverify non-root programs, all call chains leading to them will be analyzed and any JCLs or System Definition files that start corresponding root programs will be invalidated. Make sure to reverify invalidated files.

Conversely, if you change a program-to-PSB mapping inside a JCL or System Definition file, or change the PSB file itself, make sure to reverify the mapped program before reverifying the JCL or System Definition file.

When you rerun IMS Analysis, it will process all complete call chains, starting from all reverified JCLs and System Definition files. You can limit the number of root programs that are re-analyzed in subsequent runs of IMS calls analysis by setting up System Definition files so that they reference one transaction pcf only.

If you rerun IMS Analysis without changing anything in the project, it will end with the warning “No information to perform IMS Analysis.” If you receive this message on the first run of IMS Analysis, make sure that all JCLs, System Definition files, and corresponding root programs have been verified, and that you have a call chain from root to every IMS-relevant program in the project (check for the strings “+IMSC” or “+IMSE” in the Environment attribute on the System tab of the properties for the program).
Parent topic: IMS Support


Restrictions on IMS Support

Introduces restrictions on Modernization Workbench support for IMS.

Modernization Workbench supports IMS/MFS, Version 7. Refer to the topics below for restrictions on Modernization Workbench support for IMS.

  • Generic IMS Restrictions
    Describes generic restrictions on Modernization Workbench support for IMS.
  • IMS Restrictions for Cobol EXEC DLI Support
    Describes IMS restrictions on Modernization Workbench support for Cobol EXEC DLI.
  • IMS Restrictions for PL/I
    Describes IMS restrictions on Modernization Workbench support for PL/I
Parent topic: IMS Support


Generic IMS Restrictions

Describes generic restrictions on Modernization Workbench support for IMS.

Before analyzing IMS applications in Modernization Workbench, you need to be aware of the following generic restrictions on IMS support.

ENTRY 'DLITCBL' USING

ENTRY 'DLITCBL' USING (old IMS style) is not supported.

AIB Interface

The AIB interface is not supported.

Manual Decision Resolutions

Manual resolution of IMS-related decisions (PSB module decisions and the like) do not affect the results of IMS call analysis.

SYSSERVE Parameter of SCHD Call

The SYSSERVE parameter of the SCHD call does not affect analysis. The number of PCB blocks in the PSB is determined statically during PSB verification. IO PCBs are added automatically as needed. That might affect PCB numbering.

CALL Without Parameters

The active PSB name is not traced between programs if CALL without parameters is used.

Active PSB Name Calculated in Called Subroutine

The active PSB name is not detected if it is calculated in a called subroutine. Only “forward” passing of parameters is supported from calling to called module.

Impact Analysis and Interprogram Data Flows

Impact analysis and interprogram data flows are not supported.

Extra Dependencies Between Variables

There may be extra dependencies between variables in IMS calls (in intraprogram analysis, computational components, and so forth) because all CALL arguments except function-code are considered as being used in INOUT mode while in fact some CALLs have input-only and output-only parameters. This also may cause decisions to appear not to have been resolved, when in fact they have been.

When PCB Content Is Considered to Be Altered

PCB content is considered to be altered only by CBLTDLI(PLITDLI) calls or via a group MOVE of the whole PCB structure to another structure. Presence of MOVEs to subfields of a PCB may lead to incorrect analysis results. GU call is not considered as nullifying alternate PCBs.

Port Analysis for IMS Database Calls

For unqualified IMS database calls (without SSAs), port analysis uses only PCB information and does not analyze preceding IMS calls (for example, GNP after GU). Similarly, dependencies between any other IMS calls are not traced except the CHNG – ISRT pair.

For qualified database calls, only the unqualified portion of SSA is analyzed. Command codes are not supported (for example, a path call will be interpreted as a call reading only the last segment in a path).

PARMCOUNT Parameter

The PARMCOUNT parameter is accepted but not analyzed. All CALL parameters are considered as valid.

CHNG Calls

All CHNG calls are treated as setting transaction code destinations because, with no indicators of destination type, it is impossible to distinguish between transaction and terminal names. System tables with transactions and terminal names are needed to check type.

ISRT Calls

ISRT calls to IO-PCB without MOD name are ignored. Most likely they represent the construction of multi-segment messages.

Parsing of Macro Statements

PSB/DBD parsers do not perform full semantic checks of corresponding macro statements. Moreover, the PSB parser does not check that all referenced segments and fields are defined in corresponding DBDs.

Online CICS Applications Using IMS

Online CICS applications using IMS do no need System Definition files. They need only native CICS PCT files.

SET ADDRESS OF and PSB Scheduling

Limited support is available for SET ADDRESS OF <variable> to <PCB> and scheduling of PSBs (calls to PCB functions in CICS programs).

Parent topic: Restrictions on IMS Support


IMS Restrictions for Cobol EXEC DLI Support

Describes IMS restrictions on Modernization Workbench support for Cobol EXEC DLI.

Both batch and online CICS programs with EXEC DLI are supported. In addition to the generic restrictions described earlier in this section, the following restrictions apply to IMS support in Cobol EXEC DLI applications.

Subsequent Runs of IMS Call Analysis for Online CICS Applications

Subsequent runs of IMS call analysis for online CICS applications may produce incorrect results. Make sure that all root programs and PCT files are reverified before you repeat IMS call analysis.

Order of Command Options

The order of command options should correspond to the order of options as they are specified in the EXEC DLI reference manual (there is no free format there). Exceptions are the various options for SEGMENT, which can be coded in any order.

Quoted Literals

Quoted literals, where not defined by command syntax, are treated exactly as non-quoted IMS names. The only exception is the LOCKCLASS option.

Host Variables

Host variables must have the form: simple identifier, qualified identifier (a OF b), LENGTH OF special register or a subscripted table element reference. Arithmetic expressions, reference modifications, and other expressions are not supported.

Operators in WHERE Clauses

In WHERE clauses, only relational operators =, <, <=, >, >= and logical operators AND, OR, and NOT are supported.

Comma-Separated Lists

In comma-separated lists, such as for the FIELDLENGTH option, only uniform elements are supported (all literals or all identifiers). Option is verification only.

PCB Option

The PCB option must be explicitly specified on EXEC DLI calls if applicable.

CBLTDLI Calls in CICS Call-Level Programs

For CICS call-level programs, CBLTDLI calls are not recognized as modifying DLIUIB block content. Statements are not treated as dependent:
CALL ‘CBLTDLI’ USING GU-FUNC, PCB1, IOAREA1
IF UIBRCODE = SPACES THEN …
Parent topic: Restrictions on IMS Support


IMS Restrictions for PL/I

Describes IMS restrictions on Modernization Workbench support for PL/I

In addition to the generic restrictions described earlier in this section, the following restrictions apply to IMS support in PL/I applications.

Call-Level and Command-Level Programming

Only call-level programming (CALL ‘CBLTDLI’) is supported. Command-level programming (EXEC DLI) is not supported.

More than One Value for DBPCB Parameter at IMS CALL

Only one port per operator is allowed in the HyperCode model. If more than one value is found for DBPCB at IMS CALL, then ImsUnknown is generated instead of a list of ports.
Code Sample | Ports Found | Actual Ports
A:PROC; ... ... IF J>0 THEN DBPCB = EHL1_1; ELSE DBPCB = EUDV_1; ... ... CALLPLITDLI (K4,GNP,DBPCB,ALT_UKARUK, SSA_HORUK_U); END A; | ImsUnknown | EHL1.HORUK,EUDV.HORUK

Non-Const Values of DBPCB or OPCODE Parameters

Non-const values of DBPCB or OPCODE parameters are not taken into account when generating IMS ports.
Code Sample Ports Found Actual Ports

A:PROC;
...
DCL P POINTER;
DCL OP CHAR(10);
IF E>0 THEN
BEGIN;
P = EPUF_1;
OP = 'P8CCLA';
END;
... CALLPLITDLI
(K4,ISRT,P,OP,SEG_SSA(10));
END A;

 EPUF.P8CCLA EPUF.P8CCLA,ImsUnknown

Multiple Unsupported Ports

Multiple unsupported ports are represented as a single port in the HyperView model.
Code Sample Ports Found Actual Ports

A:PROC;
...
DCL P POINTER;
DCL OP CHAR(10);
ISRT = 'ISRT';
IF E>0 THEN
ISRT = 'REPL';
... CALLPLITDLI
(K4,ISRT,P,OP,SEG_SSA(10));
...
END A;

 ImsREPL ImsISRT, ImsREPL

Called Procedure Rewrites Parameters

During interprogram analysis processing, some values can be lost if a called procedure rewrites parameters either directly or by locator reference.
Code Sample Ports Found Actual Ports

A:PROC;
DBPCB = EHL1_1;
CALL B(DBPCB);
CALL PLITDLI
(K4,GNP,DBPCB,ALT_UKARUK,
SSA_HORUK_U);
…
END A;
/* FILE2.PLI */
B:PROC(DBPCB);
…DBPCB = EUDV_1;
…
END B;

 EHL1.HORUK EUDV.HORUK

Multiple Ports at an IMS CALL inside a Loop Body

DO <VAR>=E1,…,E2 can produce ImsUnknown if there are multiple ports at an IMS CALL inside a loop body.
Code Sample | Ports Found | Actual Ports
A:PROC(...); … DCL SEG CHAR(10); DBPCB = EPUF_1; DO SEG ='PAMSGS','PPPROF'; CALL PLITDLI (K4,ISRT,DBPCB,P0ROOTX,SEG); END; … END A; | ImsUnknown | EPUF.PAMSGS,EPUF.PPPROF
Parent topic: Restrictions on IMS Support


Java Support

Introduces Modernization Workbench support for Java.

Modernization Workbench supports Java SE 1.3-1.6. You must install the Java add-on to enable Java. For installation instructions, see the installation manual for your product.

Follow the steps below to analyze Java applications in Modernization Workbench:

  1. Specify the path of the folder for the Java Runtime Environment (JRE) on your machine in the Path to JRE Folder field in User Preferences > Environment. If you do not enter a path, the current version specified in the Windows registry is used. You must use JRE version 1.5 or later.
    If your application was compiled with a previous version of the JRE, specify the path of the Java SE runtime library (rt.jar) used to compile the application in the Enter classpath to JAR Files and/or path to external Java file root directories field in Workspace Options > Verification > Settings.
  2. If you want to register Java files with names derived from their locations in the folder structure rather than with names based on the package declaration, set Preserve Folder Structure in Workspace Options > Registration > Extensions, then drag-and-drop the folders (or a parent folder) onto the Repository Browser when you register the files. Choose this option when Java files with the same name and package declaration are used in different applications. So Id.java in the app1 folder is registered as "app1\com\company\Id.java", for example, while Id.java in the app2 folder is registered as "app2\com\company\Id.java".
    The full repository name is not reflected in the display name. Check Properties > General for the full name.
  3. Register Java sources (.java) in Modernization Workbench. You do not need to register "external" Java files. These are files you reference in the application but do not maintain yourself. You can point to their locations, and to the locations of Java class libraries, when you verify the application.
    If Preserve Folder Structure is not set, a Java file in the root folder is considered to be in the default package, and registered with the package name "(default package)". So "com\File1.java" is registered as "(default package).File1.java".
  4. In the Enter classpath to JAR Files and/or path to external Java file root directories field in Workspace Options > Verification > Settings, right-click in the field and choose:
    • Add in the drop-down menu to specify JAR files containing class libraries referenced in the application, or Zip files containing external Java files referenced in the application. Alternatively, choose Add folder in the drop-down menu to specify the path of the folder for the JAR or Zip files, then select Include Jar/Zip Files From Directories.
    • Add folder in the drop-down menu to specify the path of the root folder for external Java files referenced in the application.
    This option is also available in Project Options > Verification > Settings. The project option is checked before the workspace option, so setting it for the project effectively overrides the setting for the workspace.
  5. If your application uses constructs that are incompatible with the latest Java version, specify the Java version it uses in the Java Source Level field in Project Options > Verification. You would set this option to 1.4, for example, if your application used "enum" as an identifier, since "enum" is a reserved word in Java 5.
    This option affects only the syntax accepted by the parser. It does not change the version of the Java SE runtime library (rt.jar) used to parse Java files.
  6. Specify the resource types for method calls your application uses to interface with databases, message queues, or other resources in Workspace Options > Boundary Decisions.
  7. Verify the application source files.


JSP Support

Introduces Modernization Workbench support for JSP.

Modernization Workbench provides application-level support for JSP 2.2. You must install the Java add-on to enable JSP support. For installation instructions, see the installation manual for your product.

Follow the steps below to analyze JSP applications in Modernization Workbench:

  1. Register JSP (.jsp), Tag Library Descriptor (.tld), and Web Config (.webconfig) files in Modernization Workbench.
    The web.xml extension is not recognized. Rename any files with a web.xml extension with a web.xml.webconfig extension.
  2. If your JSP files reference Java types or packages defined in JAR files, external Java files, or Java files registered with the Preserve Folder Structure option, specify a list of patterns used to resolve the location of the files in Project Options > Verification > Settings for the JSP file type. For more information, see "Resolving the Location of Java Types and Packages Referenced in JSP Files."
  3. Verify JSP and Tag Library Descriptor files. Web Config files (.webconfig) do not need to be verified.
  • Resolving the Location of Java Types and Packages Referenced in JSP Files
    Describes how to resolve the location of Java types or packages referenced in JSP files.


Resolving the Location of Java Types and Packages Referenced in JSP Files

Describes how to resolve the location of Java types or packages referenced in JSP files.

Ordinarily, Java files are registered in a workspace with names based on their package declaration, "com\company\id.java", for example. When files with the same name and package declaration are used in different applications, however, the files must be registered with names derived from their locations in the folder structure, under the Preserve Folder Structure setting for the Java file type in Workspace Options > Registration > Extensions. So Id.java in the app1 folder is registered as "app1\com\company\Id.java", for example, while Id.java in the app2 folder is registered as "app2\com\company\Id.java".

This means there are now two possible definitions of the class "com.company.Id" in the workspace. If your JSP files reference this class, you need to specify which Java file defines the class in the Java Classpath field for the JSP file type in Project Options > Verification > Settings. Otherwise, the relationship between JSP and the class is marked as unresolved in the workspace.

Java Classpath contains a list of patterns used to resolve the location of Java types and packages referenced in JSP files. Each pattern describes the path to a Java file that defines the referenced type or package. In our case, the pattern might be app1\*, which matches any Java source file registered in the workspace from the app1 folder.

You can also match JAR files or external files referenced in Java applications but not registered in the workspace, as specified in the Enter classpath to JAR Files and/or path to external Java file root directories field for the Java file type in Workspace Options > Verification > Settings. The pattern *\jre6\lib\rt.jar would find the Java 6 runtime library, for example.

Right-click in the Java Classpath field and choose Add in the pop-up menu to enter a pattern. You can use wildcard patterns allowed in LIKE statements by Visual Basic for Applications (VBA).

Relationships that cannot be resolved by any of the specified patterns are marked as unresolved in the workspace. Only the base name of the referenced class or package appears in the relationship. Use the Unresolved Report in the Reference Reports window to help determine the patterns you need to add.

Parent topic: JSP Support


Job Scheduler Support

Introduces Modernization Workbench support for job scheduling formats.

Enterprise applications use job scheduling software to define dependencies between jobs. Modernization Workbench supports CA-7 and TWS (OPC) job scheduling formats. It also provides an XML job schedule format that you can use to define unsupported job schedules.

  • Preparing CA-7 Job Schedule Information
    Describes how to prepare CA-7 job schedule information for Modernization Workbench processing.
  • Preparing TWS (OPC) Job Schedule Information
    Describes how to prepare TWS (OPC) job schedule information for Modernization Workbench processing.
  • Using an XML Job Schedule Format for Unsupported Job Schedules
    Describes how to use the Modernization Workbench XML job schedule format to define unsupported job schedules.


Preparing CA-7 Job Schedule Information

Describes how to prepare CA-7 job schedule information for Modernization Workbench processing.

You make CA-7 job schedule information available to Modernization Workbench in LJOB reports. Use the LJOB utility with the LIST=NODD parameter to generate the reports on the mainframe.

The reports must have a .ca7 extension. Each report should have ANSI carriage control characters in column 1. You can create a report with carriage control characters in column 1 by specifying DCB=RECFM=FBA (or FA) in the JCL used to run the LJOB utility.

  • Supplying Schedule IDs for a CA-7 Job Triggered by a Dataset
    Describes how to supply schedule IDs for a CA-7 job triggered by the creation of a dataset.
Parent topic: Job Scheduler Support
Related tasks
Setting Project Verification Options
Related information
Supplying Schedule IDs for a CA-7 Job Triggered by a Dataset


Supplying Schedule IDs for a CA-7 Job Triggered by a Dataset

Describes how to supply schedule IDs for a CA-7 job triggered by the creation of a dataset.

When a CA-7 job is triggered by the creation of a dataset, rather than by a job or manual operation, the parser cannot always determine which schedule IDs are used to run the triggered job. You can supply this information in a file.

The file should have the same name as the .CA7 file, and be in the same directory, but have an .SID extension. Specify the location of the file in the Job to Schedule Ids File field for a CA-7 Schedule on the Project Verification options tab.

Each line of the file should contain a comma-separated list with the job name and schedule IDs used for the job. For example, if job JOB0001 has the trigger:
--- TRIGGERED BY JOBS/DATASETS/NETWORKS ---
DSN=DS00061219(POSTED.BY.XXXX.YYY.ZZZZ)
SCHID=000 QTM=0030 LEADTM=0010 SUBMTM=0000

you would enter the following line in the .SID file:

JOB0001,10,30

That line identifies schedule IDs 10 and 30 for JOB0001.

Parent topic: Preparing CA-7 Job Schedule Information
Related tasks
Setting Project Verification Options
Related information
Preparing CA-7 Job Schedule Information


Preparing TWS (OPC) Job Schedule Information

Describes how to prepare TWS (OPC) job schedule information for Modernization Workbench processing.

You make TWS job schedule information available to Modernization Workbench in three reports:

  • The application description report contains most of the information about jobs and how they are scheduled. Use the EQQADPRT utility to generate application description reports on the mainframe. The reports must have a .adr extension. Only these reports are registered in the workspace.
  • The workstation description report identifies components and the tasks they perform. Use the EQQWSPRT utility to generate workstation description reports on the mainframe. The reports must have a .wdr extension. These reports are not registered in the workspace, but must be identified in the Workstation Report field for a TWS Schedule on the Verification > Settings tab of the Workspace Options.
  • The optional cross reference of applications and external dependencies report resolves job names. Use the EQQADDEP utility to generate cross-reference reports on the mainframe. The reports must have a .xrf extension. These reports are not registered in the workspace, but must be identified in the Cross-reference Report field for a TWS Schedule on the Verification > Settings tab of the Workspace Options.

Each report should have ANSI carriage control characters in column 1. You can create a report with carriage control characters in column 1 by specifying DCB=RECFM=FBA (or FA) in the JCL used to run the utility.

Parent topic: Job Scheduler Support
Related tasks
Setting Workspace Verification Options: Settings Tab


Using an XML Job Schedule Format for Unsupported Job Schedules

Describes how to use the Modernization Workbench XML job schedule format to define unsupported job schedules.

Use the Modernization Workbench XML job schedule format to define unsupported job schedules. The XML file must have a .jsx extension. An annotated sample appears below.

 <?xml version="1.0" ?>
<!--
    This is an annotated sample job schedule definition.
    The main purpose of this file is to document the format.
    It is not suitable for testing, as no attempt was made to keep
    it internally consistent.

    The document-level element is the job-schedule. This element is
    required, though the domain reference and name are ignored by MW.

    domain          (required) - name of domain.
                                 Ignored by MW.
    name            (required) - name of the job schedule.
                                 Ignored by MW.
    source-ref-type (optional) - default is internal.
                                 Specify "external" if this document
                                 contains references to source
                                 locations in external source files.
                                 Otherwise the schedule loader
                                 generates source reference to this
                                 document.
-->
<job-schedule domain="SP1" name="mainJobSchedule" source-ref-type="external">
    <!--
        source-lib elements define libraries or directories that
        contain source files.

        Source files are used here for two purposes.

        - if this file refers to external source files, e.g., reports
          from a job scheduling system, the source files must be
          identified by source-lib and source-file elements.

        - if jcl-lib elements are used to specify JCL source
          libraries, the libraries must be identified by
          source-lib elements.

        For use in MW, the form using path is used.

        Either path must be specified or both domain and name must
        be specified.

        id     (required)  - unique identifier for the source-lib.
                             The id attribute must be unique among
                             all id attributes in this document.
        path   (see above) - path to a directory containing source
                             files.

    -->
    <source-lib id="sl1" domain="SP1" name="SYS1.PROCLIB"/>
    <source-lib id="sl2" domain="SP1" name="APPL1.JCLLIB"/>
    <source-lib id="sl3" path="c:\source\jcl\sys1.proclib"/>

    <!--
         Source files are identified by name and refer to the
         containing library.

         Source file elements must appear before any source-ref
         elements that reference them.

         id     (required) - unique identifier for the source file.
                             The id attribute must be unique within
                             all id attributes in this document.
         libref (required) - id of the associated source-lib element.
                             The source-lib element must appear before
                             any source-file elements that
                             reference it.
         name   (required) - name of the source file.
    -->
    <source-file id="sf1" libref="sl2" name="report.ctm"/>

    <!--
        jcl-libs (and the nested jcl-lib elements identify an order
        list of source libraries that are to be searched to resolve
        references to JCL.

        jcl-lib element are not used in this release of MW. We plan
        to add this support in an upcoming release. These elements
        are included here for completeness.
    -->
    <jcl-libs>
        <jcl-lib libref="sl1"/>
        <jcl-lib libref="sl2"/>
    </jcl-libs>

    <!--
        job-stream element starts a job stream definition.

        name - name of the job stream. It must
               be unique within all job stream names within the
               schedule.
        desc - description.
    -->
    <job-stream name="DAILYOP" desc="Daily order processing">
        <!--
            The documentation nested element can be used with
            job-schedule, job-stream, job-exec, predecessor,
            event, and manual-operation elements to provied more
            extensive documentation than is provided by the desc
            attribute.
        -->
        <documentation>
            This element can be nested under other elements and is
            used to provide more extensive information than is
            included in the description field.
        </documentation>

        <!--
            source-ref (source reference) elements can appear as
            nested elements for job-schedule, job-stream, job-exec,
            predecessor, manual-operation, and external-predecessor
            elements.

            refid     - (required) id of a source-file element.
            line      - (required) starting line number in source
                        file (first line is 1).
            col       - (optional) starting column number within the
                        line (first column is 1).
                        If omitted, column 1 is assumed.
            endline   - (optional) end line. if omitted, starting
                        line is assumed.
            endcolumn - (optional) end column. If omitted, last
                        character of endline is assumed.
        -->
        <source-ref refid="sf1" line="100" col="1" endline="102" endcol="70"/>

        <!--
            job-exec (job execution) element. defines the execution of a job
            within a job stream.

            name    - (required) name of the job execution. Must
                      be unique among all job executions,
                      manual operations, and events within the job
                      stream, within the schedule.
            jobname - (required) name of the JCL member to be
                      executed.
            desc    - (optional) description of the job execution.
        -->
        <job-exec name="job1" jobname="job1" desc="Description">

            <!--
                The predecessor nested element specifies a
                dependency on another job stream operation
                (another job-exec, external-predecessor, manual
                operation, or event.
            -->
            <predecessor name="mo1">

                <!--
                    attr elements can be nested within most other
                    elements. Specifically, attr elements can be
                    contained by predecessor, external-predecessor,
                    job-exec, manual-operation, and event. attr
                    elements are never required but can be used to
                    provide values that are, for example, specific
                    to a particular job scheduling system.

                    The exact processing of these values varies with
                    the specific implementation. The XML schedule
                    loader keeps these values as named attributes of
                    the parent object.

                    The dep.type nested element for predecessor can
                    have one of the following values: GENERAL,
                    EXCLUSION, TRIGGER.
                -->
                <attr name="dep.type" value="GENERAL"/>
            </predecessor>

            <!--
                External predecessor elements can be nested under
                job-exec and manual-operation elements to indicate
                a predecessor that is not in the current job stream.

                All attributes are required, though some may be
                ignored by MW.

                name     - name of this external-predecessor. Must
                           be unique among all job-exec manual-
                           operation, event, and external-predecessor
                           elements in the job stream.
                domain   - containing domain. Ignored by MW.
                sched    - containing schedule. Ignored by MW.
                stream   - containing job stream.
                opername - name of the operation (job-exec,
                           manual-operation, or event) in the external
                           job stream.
            -->
            <external-predecessor name="ep1" domain="dom1" sched="sch1"
             stream="strname" opername="ref1"/>
        </job-exec>
        <!--
            The manual-operation element defines a manual operation.

            It can have predecessor and external-predecessor
            nested elements.

            name - (required). The name of the operation must be
                   unique within manual-operation, job-exec, and
                   even elements within the job stream.
        -->
        <manual-operation name="JobPrep" desc="Description">
        </manual-operation>
        <event name="Event1" desc="description" type="evtype">
        </event>
    </job-stream>
</job-schedule>
Parent topic: Job Scheduler Support


JCL Support

Introduces Modernization Workbench support for JCL.

Modernization Workbench supports JCL, OS/390 Version 2, Release 10.

  • External Control Cards Registration Requirements
  • Sort Cards Verification Requirements
  • Sort Cards Parser Output
  • Detecting Programs Started by Driver Utilities


External Control Cards Registration Requirements

Both inline cards (DD *) and external cards (DSN=) are supported. Source files for external cards are registered in the repository as Control Cards files, and must be named as follows, where .srt is the default file extension:

For an ordinary dataset:

//SYSIN DD DSN=MY.SORTCARDS.LIB.FILE1

the source file name must be MY.SORTCARDS.LIB.FILE1.srt.

For a PDS member:

//SYSIN DD DSN=MY.SORTCARDS.LIB(FILE2)

the source file name must be MY.SORTCARDS.LIB(FILE2).srt, or if the member name is unique, FILE2.srt.

For a generation dataset:

//SYSIN DD DSN=MY.SORTCARDS.LIB.FILE3(+1)

the source file name must be MY.SORTCARDS.LIB.FILE3.srt, without the generation number.

Parent topic: JCL Support


Sort Cards Verification Requirements

Before verification, specify the names of the sort utilities you use in the Sort Program Aliases workspace verification option for JCL files. The defaults are SORT, DFSORT, and SYNCSORT.

Parent topic: JCL Support


Sort Cards Parser Output

The parser creates an artificial program entity that defines the inputs and outputs for each sort utility invocation. The program has a name of the form JCLFileName.JobName.StepName.SequenceNumber, where SequenceNumber identifies the order of the step in the job. For every sort invocation in the program, you can view data structures for sort input and output records and the data movements between them in the HyperCode for the JCL file.

Parent topic: JCL Support


Detecting Programs Started by Driver Utilities

Use the Driver Utility Analysis feature to model programs started by a driver utility. For more information, see the Parser Reference Manual in the workbench documentation set.

Parent topic: JCL Support


Natural Support

Introduces Modernization Workbench support for Natural. -

Modernization Workbench supports the following versions of ADABAS/Natural:

  • Natural 2.2.3 for mainframes.
  • Natural 2.3.4 for mainframes, 3.1.1. for Windows NT, Unix, Open VMS.
  • Natural 3.1.2 for mainframes, 4.1.1. for Windows NT.
  • Natural 3.1.3 for mainframes, 4.1.2. for Windows NT, Unix, Open VMS.

Follow the steps below to analyze Natural applications in Modernization Workbench:

  1. Register Natural sources in Modernization Workbench. The following objects must be registered:
    • Natural Data Areas (.nda, .nsl)
    • Natural DDM files (.nsd, .ddm)
    • Natural files (.nat, .nsn, .nsp, ..nsh)
    • Natural Include files (.ncp, .inc)
    • Natural Maps (.nsm, .map)
    • Natural Subroutine files (.nss)
    It's almost always useful to qualify Natural programs with their library names in call diagrams and the like. To enable library name qualification, register Natural files with names of the form library.program.extension. For assistance renaming files, contact support services.
  2. For Natural files registered with library names:
    • Ensure the default Libraries support option is set in Workspace Options > Verification > Settings for the Natural File type.
    • In the Libraries field in Project Options > Verification for the Natural File type, specify the order in which the parser searches for library names when it resolves program calls. Right-click in the field and choose Add in the pop-up menu to enter a library name. Place a check mark next to a library to include it in the search. The parser always searches for the library of the object being verified, the current library, first. You can specify a different library search order for each project in your workspace.
      Tip: For example, if Lib2 appears in the list before Lib1, a call to ProgA is resolved to Lib2.ProgA rather than Lib1.ProgA (assuming the current library is not Lib1).
  3. In the Helproutines field in Project Options > Verification for the Natural Map file type, specify how you want the parser to treat helproutines, as programs (the default) or helpmaps.
  4. Verify application source files. You can:
    • Verify the entire project, which ensures that files are parsed in the appropriate order, taking account of the dependencies between file types.
    • Verify files or file types individually, in which case you should follow the order specified in "Verification Order for Natural Applications."
Important: Before registering Natural sources, see "Restrictions on Natural Support" for limitations in Modernization Workbench support that may affect your project.
  • Verification Order for Natural Applications
    Describes the order in which source files in Natural applications should be verified.
  • Restoring Line Numbers in Natural Source
    Describes how to restore line numbers in Natural source.
  • Restrictions on Natural Support
    Describes restrictions on Modernization Workbench support for Natural.
Related tasks
Setting Workspace Verification Options: Settings Tab
Setting Project Verification Options


Verification Order for Natural Applications

Describes the order in which source files in Natural applications should be verified.

If you verify an entire project for a Natural application, the workbench parses the source files in appropriate order, taking account of the dependencies between file types. Otherwise, verify source files in the following order:

  • Natural DDM files (.nsd, .ddm)
  • Natural Data Areas (.nda, .nsl)
  • Natural Maps
  • Natural Subroutine files (.nss)
  • Natural files
Parent topic: Natural Support


Restoring Line Numbers in Natural Source

Describes how to restore line numbers in Natural source.

To restore stripped line numbers in Natural source, choose Edit > Restore Line Numbers in Natural Source.

Parent topic: Natural Support


Restrictions on Natural Support

Describes restrictions on Modernization Workbench support for Natural.

Before analyzing Natural applications in Modernization Workbench, you need to be aware of the following restrictions on Natural support.

Supported CALLDBPROC Syntax

The following syntax of the CALLDBPROC statement is supported:

CALLDBPROC dbproc ddm-name [USING] [ parameter [ AD = {M | O | A}] ]…
[ RESULT SETS result-set…]
[ GIVING sqlcode ]
[ CALLMODE = { NONE | NATURAL }]

Supported READ RESULT SET Syntax

The following syntax of the READ RESULT SET statement in structure mode is supported:

READ [(limit)] { RESULT-SET | RESULT SET } result-set
INTO { VIEW view-name | parameter,… }
FROM ddm-name
[ GIVING sqlcode]
statement…
END-RESULT

The following syntax of the READ RESULT SET statement in reporting mode is supported:

READ [(limit)] { RESULT-SET | RESULT SET } result-set
INTO { VIEW view-name | parameter,… }
FROM ddm-name
[ GIVING sqlcode]
statement…
[ [ CLOSE ] LOOP [(r)] ]

Program Analysis

The following notes apply to tools related to control flow and/or data flow analysis for programs and to component extraction.

  • It is assumed that IF, DECIDE ON, and DECIDE FOR statements always have a FALL THRU, even if all the control flows of the branches do not reach the statement after these statements.
  • Definition and usage of array slices are treated as whole array variables.
  • Control flow of cyclic constructs, such as FOR loops, have no backward edge. This rough bit of the analysis may lead to insufficiency in data dependencies between definitions inside a loop body and usages at the top of a loop body.
  • Control flow analysis between subroutines is call site-independent. It is assumed that there are paths from any call site to any return point of a subroutine. This may lead to superfluous data dependencies between definitions inside a subroutine and their usages beyond the return points.

Component Extraction

Both Computation-Based Extraction and Dead Code Elimination are supported. For Computation-Based Extraction:

  • A PERFORM statement without parameters cannot be selected as a slice point.
  • An ON ERROR statement and all statements inside an ON ERROR block cannot be selected as a slice point.

For Dead Code Elimination, statements and declarations that are unused INDIRECTLY are not detected. This means that constructions included in unused constructions are retained.

Impact Analysis

Group MOVEs are split into field MOVEs and data flow relationships are calculated for these split MOVEs. This means there are no relationships between whole structures for group MOVEs.

Parent topic: Natural Support


.NET Support

Introduces Modernization Workbench support for .NET.

Modernization Workbench supports Microsoft .NET Framework 3.5, Visual C# 3.0, and Visual Basic .NET 9.0. The table below shows the supported file types and their entity types in the repository. Register the entire folder for the project to avoid problems with duplicate file names.
File Type | Entity Type
.csproj, .vbproj | .Net Project
.cs, .vb | .Net File


PL/I Support

Introduces Modernization Workbench support for PL/I.

Modernization Workbench supports the following PL/I versions:

  • VisualAge PL/I for OS/390, Version 2.
  • Enterprise PL/I for z/OS, Version 3, Release 6.
  • Verification
  • Change Analyzer
  • How Macros Are Modeled in HyperView
  • Execution Path Labelled Variables and Branching
  • Global Data Element Flow
  • Common IMS, Domain Extraction, and Autoresolve Restrictions


Verification

  • Preprocessor %PUSH and %POP statements are ignored.

  • The in-place initialization of an array of labels is not supported.

  • Built-in subroutines and built-in functions are partially supported. The parser does not match the argument list of calls to built-in subroutines with their actual signatures. It may successfully verify source code containing incorrect usage of built-in subroutines or built-in functions.

  • The DATE type is not supported.

  • The GENERIC attribute is partially supported.

Parent topic: PL/I Support


Change Analyzer

  • Built-in function calls are not analyzed for synonyms.

  • Same memory location synonyms (DEFINED, BASED, UNION) are not supported.

Parent topic: PL/I Support


How Macros Are Modeled in HyperView

Although macro statements are not captured as HyperCode in the HyperView Source pane, constructs resulting from macro expansion are correctly modeled in the HyperView Context pane. Clicking on these constructs in the Context pane moves the focus in the Source pane to the location where the macro is used.

Parent topic: PL/I Support


Execution Path Labelled Variables and Branching

Labelled variables and branching connected with exceptions (ON and SIGNAL statements) are not supported.

Parent topic: PL/I Support


Global Data Element Flow

  • Memory release is not taken into account (for example, the FREE statement).

  • Entities which can be allocated to several offsets are doubled to convert dynamic memory allocation into a static allocation. For example:
         DCL 1 DATA1,
                              2 B FIXED;
     DCL 1 DATA2 LIKE DATA1;
     DCL 1 A1 BASED(P),
                              2 B FIXED;
     DCL 1 A2 BASED(P),
                              2 B FLOAT;
     DCL 1 A3 BASED(Q),
                              2 B FIXED;
     P = ADDR(DATA1);
     Q = ADDR(DATA2);
     A1.B = 1;           /* 1 */
     Q->A1.B = 1;        /* 2 */
     P = Q;              /* 3 */

  • Entities for which memory is not allocated are still included in the Data View.

  • Fetch and Pointer Add are not currently supported. DataView will be as follows:

    DATA1 | B | A1 | B | A2 | B
    DATA2 | B | A1 | B | A2 | B | A3 | B
Parent topic: PL/I Support


Common IMS, Domain Extraction, and Autoresolve Restrictions

Restrictions described in this section are common to IMS analysis, domain-based extraction, and decision autoresolution.

  • Analysis
  • Variable Value Processing
  • Loop Analysis
  • Array Processing
  • External Call Processing
  • Unsupported Constructions
  • Unsupported Evaluations
Parent topic: PL/I Support


Analysis

  • Analysis is call-site independent, that is, all calls of a procedure are considered simultaneously. First, all the actual parameter values from the call sites are evaluated and collected at the formal parameters and then the procedure constant propagation is performed.

  • Analysis is performed for a given file without processing other PL/I files that could be called from the file being analyzed. ‘NonConst’ means that the variable obtains no value and so will not be substituted. Moreover, since it has no value, other variables may not be resolved as well.

Parent topic: Common IMS, Domain Extraction, and Autoresolve Restrictions


Variable Value Processing

  • When an assignment to a structure field or an array element is interpreted, the entire structure and array value is calculated and stored to the value set. Calculation of values of structure fields of array elements avoids this redundancy, but a ‘Nonconst’ value may appear, or some values may not be evaluated because of value set overflow.

  • Entire alias values are calculated and stored in variables during processing, with the result that more than one alias value may be stored in a variable even if the variable has only one proper value. Calculation of proper values of the variable avoids this redundancy, but a ‘Nonconst’ value may appear, or some values may not be evaluated because of value set overflow.

  • Maximum size of the value set of a variable is 32. This means that analysis will not be fully complete when the amount of possible values exceeds this number. A ‘NonConst’ value indicates that there are values that are not calculated. Warnings about overflow of value sets of variables are not generated.

  • For performance reasons, the maximum size of a memory block is limited to 32KB. Every access beyond this limit is ignored. (Memory blocks are used for structures, arrays, and variables accessed through a DEFINED attribute or pointers). This means that strings, structures and arrays that do not fit in 32KB are not processed correctly.

  • Read variables of a statement are enumerated independently from each other in the sense that the statement is interpreted for all combinations (no more than 16) of the values of the variables used in the statement. It may lead to superfluous write values when the statement is evaluated for some combinations that cannot occur during real program execution.

  • A ‘NonConst’ value is added to a value set if some values cannot be evaluated or the number of the values exceeds the value set limit.

  • During interpretation of an operator, a ‘NonConst’ value is added to write variables if the number of combinations of values of read variables exceeds the limit.

Parent topic: Common IMS, Domain Extraction, and Autoresolve Restrictions


Loop Analysis

  • Loops are executed until value sets of variables inside the loop body stop expanding. Because lower and upper bounds and WHILE conditions are ignored, the resulting sets of variable values may be superfluous.

  • DO statements with a cyclic header are always treated as a loop control flow construction, though the body of this statement can be executed only once when the program is executed (for example, DO I=1;).

Parent topic: Common IMS, Domain Extraction, and Autoresolve Restrictions


Array Processing

  • If all values of an index in a slice expression cannot be evaluated, then the slice is interpreted for all index values from the appropriate array bound interval. The maximum size of the implicit set of index values is 32.

  • All arithmetic operations (including built-ins) are performed with DOUBLE values (there is no artificial increase/decrease of digit number). Excess precision may be rounded away during arithmetic type casting.

  • Assignment to an array is supported only if no two asterisks in the array reference are separated with an ordinary array index or a structure member selection. The system would try to minimize the amount of memory erased by an unsupported array write, but it can destroy the whole array.

  • Complex DEFINED is not supported (the DEFINED declaration is mapped to the base field by field and dimension by dimension). DEFINED(X) is interpreted strictly as if it was BASED(ADDR(X)).

  • POSITION for variables defined on bit strings is not supported. Also, no alignment other than on a one-byte boundary is supported.

  • DEFINED on sparse areas is not supported. In a real system, one can write DEFINED(A(*,4)) and if structures match it would map the newly defined array on top of sparse array A(*,4). Structure matching, however, is unsupported. This means that although this type of definition is valid in a real system, it is not supported.

    With one possible exception: A(4,*) might work as expected if structures are not only matching but strictly equivalent

  • Array expressions are not supported, so A(*) = B(*) + 5 will not work.

  • Out-of-bounds access is always ignored and a warning is issued.

  • Dynamic-sized arrays are not supported and are interpreted as fixed-sized arrays with extent 10.

Parent topic: Common IMS, Domain Extraction, and Autoresolve Restrictions


External Call Processing

  • When external calls and unresolved dynamic internal calls are interpreted, values of whole aliases are passed, so that such calls are treated as rewriting their parameters, with the result that the values of the whole aliases are assumed to be rewritten and are set to ‘NonConst’.

  • It is assumed that interprocedure dynamic calls do not rewrite any context variables (except parameters).

Parent topic: Common IMS, Domain Extraction, and Autoresolve Restrictions


Unsupported Constructions

  • Dynamic control flow is unsupported. The following cases are classified as dynamic control flow:

    • Jumps to expression of label type, such as label-variable, element of array of labels, field of structure, and so forth (treated as program stop).

    • Jumps by GOTO outside procedure (treated as program stop).

  • Condition handling:

    • Control flow is constructed as if condition-handling operators are replaced by empty operators. Nested operators are also skipped.

  • Alias analysis processing:

    • Aliases induced by RETURN(<addr expression>) are not supported

  • Non-null pointers in structures are lost when the structure is passed as a parameter to a top-level procedure (except PSB pointers).

Parent topic: Common IMS, Domain Extraction, and Autoresolve Restrictions


Unsupported Evaluations

  • Calculation of values of CONTROLLED or AREA variables.

  • Calculation of initial values of variables declared in packages is unlike the declaration of the variables in contained procedures.

  • SUBSTR as a pseudovariable will not assign a value to a string with a previously undetermined value even if the substring covers the entire string.

  • Assignment to the first argument of SUBSTR when this argument is an array.

  • VARYINGZ strings are handled as simple VARYING, that is, as using a length field instead of a zero terminator.

  • ALLOCATE is only supported if it is used on a single BASED variable and each statement produces only one value of the pointer, no matter how many times it may be called.

  • Calculation with multibyte character set values for variables may or may not work correctly.

Parent topic: Common IMS, Domain Extraction, and Autoresolve Restrictions


PL/SQL Support

Introduces Modernization Workbench support for PL/SQL.

Modernization Workbench supports Oracle PL/SQL for Oracle Database 11g, Release 1.


PowerBuilder Support

Introduces Modernization Workbench support for PowerBuilder.

Modernization Workbench supports PowerBuilder 6.5 to 10.0. Follow the instructions in this section to verify PowerBuilder files and to set the PBL search path.

  • Verifying PowerBuilder Files
    Describes how to verify PowerBuilder files in Modernization Workbench.
  • Setting the PBL Search Path
    Describes how to set the PBL search path in Modernization Workbench.
  • PowerBuilder Support for SQL


Verifying PowerBuilder Files

Describes how to verify PowerBuilder files in Modernization Workbench.

Before verifying PowerBuilder files, specify the resource types for method calls your application uses to interface with databases, message queues, or other resources on the Boundary Decisions tab of the Workspace Options.

Parent topic: PowerBuilder Support


Setting the PBL Search Path

Describes how to set the PBL search path in Modernization Workbench.

After verifying PowerBuilder files, you must set the PBL search path. This is the same library search path used to compile the application.

To set the PBL search path, select the project in the Repository pane and choose Prepare > Create PBL Search Path. The Create LibPath option window opens:

  • The PBLs in the Workspace pane lists PBLs registered in the workspace. Select each PBL you want to include in the project.
  • The PBLs in the Project pane lists PBLs included in the selected project. Select each PBL you want to include in the PBL search path.
  • The PBLs in the LibPath pane lists PBLs in the PBL search path. Select each PBL you want to include in the search path. Use the Up and Down buttons to specify the order in which PBLs are searched.
Parent topic: PowerBuilder Support


PowerBuilder Support for SQL

MW support for SQL in PowerBuilder applications differs from support for Cobol applications as follows:

  • Object model relationships are created in the workbench repository to show when PB Objects and DataWindows refer to database tables.
  • Table constructs are created for Retrieve statements. These constructs contain information on the columns and variables used in the Select statement.
  • Unrecognized SQL statements are captured as searchable SQL Statement constructs with the Kind attribute equal to "SQLerror".
  • Full parsing for inline SQL statements is not supported. Embedded SQL statements are analyzed for relationships to the database table, and constructs are created for the host variables used in the statement.
Parent topic: PowerBuilder Support


RPG Support

Introduces Modernization Workbench support for RPG.

Modernization Workbench supports RPG IV ILE, Version 5, Release 3.

RPG programs often use copy statements that reference Database Description or Device Description files rather than copybooks. If your application uses copy statements to reference these types of files, you need to verify the files and generate copybooks for the application before you verify program files. For instructions on generating copybooks, see Preparing Projects in the workbench documentation set.


SQL Support

Introduces Modernization Workbench support for SQL.

Modernization Workbench supports DB2 UDB for z/OS, Version 8 (DCLGENs, SQL, DDL).

  • Renaming DCLGEN Include Files
  • Prefixes for SQL Names


Renaming DCLGEN Include Files

Installations that use DCLGEN include files with the same names as ordinary include files should rename the DCLGEN includes with a DCLGEN prefix and dot (.) separator, so that both types of file can be registered: ATTR.<valid extension>, for example, and DCLGEN.ATTR.<valid extension>. When the parser encounters EXEC SQL INCLUDE <name>, it first searches for DCLGEN.<name>.<valid extension>, and if not found, then <name>.<valid extension>.

Unresolved references to library members are always reported with the longest name. This means that if you subsequently register a missing include file with a short name, the referencing source file will not be invalidated. It’s up to you to remember that the referencing source needs to be reverified.
Parent topic: SQL Support


Prefixes for SQL Names

To maintain uniqueness of ERD entity names, MW specifies SQL names with an SQLID prefix, defined by a corresponding SET CURRENT SQLID statement. Names of Table objects are prefixed with CURRENT SQLID when it is set by a preceding SET CURRENT SQLID statement.

Parent topic: SQL Support


VB Support

Introduces Modernization Workbench support for Visual Basic.

Modernization Workbench supports Microsoft Visual Basic 6.0. Follow the steps below to analyze VB applications in Modernization Workbench.

  1. Use the XDL.exe utility shipped with MW to generate Library Description files for ActiveX components referenced in VB Project files but not contained in the projects themselves. For more information, see "Generating Library Description Files."
    Modernization Workbench provides Library Description files for ActiveX system libraries in the MW \Templates\VB directory.
  2. Register the VB application in Modernization Workbench. The following objects must be registered:
    • VB project files (.vbp)
    • System Library Description files (.xdl) in the MW \Templates\VB directory
    • Generated Library Description files (.xdl)
    • Source files (.bas, .cls, .ctl, .frm)
  3. Specify the resource types for method calls your application uses to interface with databases, message queues, or other resources on the Workspace Options > Boundary Decisions tab.
  4. Verify Library Description files and VB project files.
    Library Description files must be verified before VB project files. As long as you verify the entire project for your Visual Basic application, the workbench parses the source files in appropriate order, taking account of the dependencies between file types.

    Bear in mind that dependencies between MW projects are not taken into account. If VB Project1 references VB Project2, VB Project2 must be verified first. To check for dependency-related verification errors, run verification iteratively, verifying only those files in each project that have not been verified successfully. If the number of unsuccessfully verified files does not decrease after a run, the remaining issues are not dependency-related.

Important: Before registering VB sources, see "Restrictions on Visual Basic Support" for limitations in Modernization Workbench support that may affect your project.
  • Generating Library Description Files
    Describes how to generate library description files in Modernization Workbench.
  • Restrictions on Visual Basic Support
    Lists unsupported Visual Basic constructs.


Generating Library Description Files

Describes how to generate library description files in Modernization Workbench.

ActiveX components referenced in VB Project files but not contained in the projects themselves must be registered in an MW project as Library Description files (.xdl). The following ActiveX component types may be referenced:

  • DLLs (.dll)
  • OCX controls (.ocx)
  • TLBs (type libraries, .tlb)
  • OLBs (object libraries, .olb)

Modernization Workbench provides Library Description files for ActiveX system libraries in the MW \Templates\VB folder. Use the XDL.exe utility shipped with MW to generate Library Description files for the remaining ActiveX components.

STEPS:
  1. Open a VB Project file and locate the first referenced ActiveX component. Referencing statements use a Reference= or Object= format:
    Reference=*\G{6B263850-900B-11D0-9484-00A0C91110ED}#1.0#0#D:\WINNT\System32\msstdfmt.dll#Microsoft
          Data Formatting Object Library
Object={5E9E78A0-531B-11CF-91F6-C2863C385E30}#1.0#0; MSFLXGRD.OCX
  2. Run the XDL.exe utility. You can use a command prompt window or the graphical user interface provided with the utility:
    • In a command prompt window, enter Workbench Home\Bin\XDL.exe component_name.file_extension "C:\XDLS\component_name.XDL"
    • In the MW \bin directory. double-click XDL.exe. The XDL Report window opens. Choose File > Open, then browse to the location of the referenced file (.dll, .ocx, .tlb, or .olb) and click Open. In the XDL Report window, choose File > Save As and save the XDL file to a location outside the workspace.
  3. Repeat these steps for each referenced Active X component and each VB Project file.
Parent topic: VB Support


Restrictions on Visual Basic Support

Lists unsupported Visual Basic constructs.

The following constructs are not supported and are marked with the "Item was ignored by parser" message during verification:

  • AppActivate
  • ChDir
  • ChDrive
  • Close
  • Deftype
  • DeleteSetting
  • Erase
  • Error
  • Event
  • Get
  • GoSub...Return
  • GoTo
  • Implements
  • Input #
  • Kill
  • Line Input #
  • Lock
  • Lset
  • MkDir
  • Name
  • Open
  • Option Base
  • Option Compare
  • Option Private
  • Put
  • RaiseEvent
  • Randomize
  • Resume
  • RmDir
  • Rset
  • SaveSetting
  • Seek
  • Stop
  • Time
  • Exit
  • Width #
Parent topic: VB Support


WFL Support

Introduces Modernization Workbench support for WFL.

Modernization Workbench supports Unisys WFL, ClearPath MCP, Release 7.


Complexity Metrics Overview

The tables in this section describe the supported complexity metrics for objects in the Modernization Workbench (MW) repository. The tables are listed alphabetically by object type.

MW uses a generic "Program" object for programs written in different languages. The tables break out program types by language. Look for Cobol Program, Natural Program, PL/I Program, and so forth.


ADL File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Records | Number of records.
Sets | Number of sets.
Source Lines | Number of lines of source.


APS Application

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Data Structure | Number of included data structures.
Include DDI | Number of included DDIs.
Include DDL/PSB | Number of included data definitions.
Include Macro/Copybook | Number of included macros/copybooks.
Include Program | Number of included programs.
Include Report | Number of included reports.
Include Screen | Number of included screens.
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.


APS Data File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.


APS DDI File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.


APS Report

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.


APS Screen

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.


Assembler Copybook File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.


Assembler File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.
Total Include Statements | Total Include Statements.
Unique System Macro Instructions | Number of unique system macro instructions.


BMS Copybook File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.


BMS File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Screens | Number of screens.
Source Lines | Number of lines of source.
Total Include Statements | Total Include Statements.


C File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.


C++ Class

Metric | Description
Comments Ratio | Number of Comments divided by Lines of Code.
Computational Statements | Number of statements performing arithmetic calculations.
Constructors | Number of constructors.
Data Members | Number of data members.
Depth of Inheritance Hierarchy | Maximum nesting of the inheritance hierarchy.
Destructors | Number of destructors.
Error Estimate | B = E**(2/3) / 3000, where E is Programming Effort.
Executable Statements | All assignments, function calls (alone on a line), calls, returns, IF, DO, FOR, CHOOSE, EXIT, CONTINUE, and GOTO statements.
Function Points | Lines of Code divided by K, where K depends on the language: Cobol=77, Natural=52, PL/I=67, PowerBuilder=24. Estimate of the number of end-user business functions implemented by the program.
Inherited Methods | Number of inherited methods.
Intelligent Content | I = L * V, where L is Program Level and V is Program Volume. Complexity of a given algorithm independent of the language used to express the algorithm.
Lines of Code | Number of lines of code, plus the number of lines of code in included files and any files they include. Comments and blank lines are not counted.
Logical Operators in Conditions | Number of binary logical operators used in conditions.
Maintainability Index | MI = 171 - 5.2 * ln (PgmVolume) - 0.23 * ExtCycComp - 16.2 * ln (LOC) + 50 * sin (sqrt (2.46 * CommentLines/SourceLines)), where PgmVolume is Program Volume, ExtCycComp is Extended Cyclomatic Complexity, LOC is Lines of Code, CommentLines is Comment Lines, and SourceLines is Source Lines.
Member Functions | Number of member functions.
Number of Comments | Number of items containing text preceded by // or enclosed between /* and */.
Operands | Number of operand occurrences (N2). Operands are variables and literals used in operators. Compare Unique Operands.
Operators | Number of operator occurrences (N1). Operators are executable statements and unary and binary operations. Compare Unique Operators.
Pointers | Number of data elements declared as pointers.
Program Length | N = N1 + N2, where N1 is Operators and N2 is Operands.
Program Level | L = 1 / D, where D is Difficulty.
Program Volume | V = N * log2(n), where N is Program Length and n is Vocabulary. Minimum number of bits required to code the program.
Programming Effort | E = V / L, where V is Program Volume and L is Program Level. Estimated mental effort required to develop the program.
Programming Time | T = E / 18, where E is the Programming Effort and 18 is Stroud’s Number. Estimated amount of time required to implement the algorithm, in seconds.
Public Data Members | Number of public data members.
Public Member Functions | Number of public member functions.
Response for Class | Response for class.
Static Data Members | Number of static data members.
Static Functions | Number of static functions.
Static Member Functions | Number of static member functions.
Unique Operands | Number of distinct operands (n2). Operands are variables and literals used in operators. Uniqueness of literals is determined by their notation. Compare Operands.
Unique Operands in Conditions | Number of distinct operands used in conditions.
Unique Operators | Number of distinct operators (n1). Operators are executable statements and unary and binary operations. Compare Operators.
Vocabulary | n = n1 + n2, where n1 is the number of Unique Operators and n2 is the number of Unique Operands.


C++ File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.


C++ Function

Metric | Description
Absolute Complexity | Binary Decisions divided by the number of statements.
Binary Decisions | Number of branching conditions in the flow graph with two possible outcomes. Includes statements with implicit condition evaluation (loops, AT END, and so on).
Comments Ratio | Number of Comments divided by Lines of Code.
Computational Statements | Number of statements performing arithmetic calculations.
Conditional Complexity | Binary Decisions, plus Unique Operands in Conditions.
Cyclomatic Complexity | v(G) = e - n + 2, where v(G) is the cyclomatic complexity of the flow graph (G) for the program in question, e is the number of edges in G, and n is the number of nodes. Quantity of decision logic. The number of linearly independent paths (minimum number of paths to be tested). v(G) = DE + 1, where DE is the number of binary decisions made in the program.
Difficulty | D = (n1 / 2) * (N2 / n2), where n1 is Unique Operators, N2 is Operands, and n2 is Unique Operands.
Error Estimate | B = E**(2/3) / 3000, where E is Programming Effort.
Essential Complexity | Quantity of unstructured logic (a loop with an exiting GOTO statement, for example). v(G) for reduced graph without D-structured primes.
Exception Handling Statements | Number of exception handling statements.
Executable Statements | All assignments, function calls (alone on a line), calls, returns, IF, DO, FOR, CHOOSE, EXIT, CONTINUE, and GOTO statements.
Extended Cyclomatic Complexity | Cyclomatic Complexity, plus Logical Operators in Conditions. Number of all paths in the program.
Function Calls | Number of function calls.
Function Points | Lines of Code divided by K, where K depends on the language: Cobol=77, Natural=52, PL/I=67, PowerBuilder=24. Estimate of the number of end-user business functions implemented by the program.
GoTo Statements | Number of GOTO statements, including conditional GOTOs.
IF Statements | Number of IF statements.
Intelligent Content | I = L * V, where L is Program Level and V is Program Volume. Complexity of a given algorithm independent of the language used to express the algorithm.
Labels | Number of labels.
Lines of Code | Number of lines of code, plus the number of lines of code in included files and any files they include. Comments and blank lines are not counted.
Local Data Items | Number of local data items.
Logical Operators in Conditions | Number of binary logical operators used in conditions.
Loop Statements | Number of repetitively executing statements.
Maintainability Index | MI = 171 - 5.2 * ln (PgmVolume) - 0.23 * ExtCycComp - 16.2 * ln (LOC) + 50 * sin (sqrt (2.46 * CommentLines/SourceLines)), where PgmVolume is Program Volume, ExtCycComp is Extended Cyclomatic Complexity, LOC is Lines of Code, CommentLines is Comment Lines, and SourceLines is Source Lines.
Maximum Depth of Logic Nesting | Maximum nesting of logic.
Maximum Switch Cases | Maximum Switch Cases.
Member Function Calls | Number of member function calls.
Number of Comments | Number of items containing text preceded by // or enclosed between /* and */.
Operands | Number of operand occurrences (N2). Operands are variables and literals used in operators. Compare Unique Operands.
Operators | Number of operator occurrences (N1). Operators are executable statements and unary and binary operations. Compare Unique Operators.
Parameters | Number of parameters in method calls.
Pointers | Number of data elements declared as pointers.
Program Length | N = N1 + N2, where N1 is Operators and N2 is Operands.
Program Level | L = 1 / D, where D is Difficulty.
Program Volume | V = N * log2(n), where N is Program Length and n is Vocabulary. Minimum number of bits required to code the program.
Programming Effort | E = V / L, where V is Program Volume and L is Program Level. Estimated mental effort required to develop the program.
Programming Time | T = E / 18, where E is the Programming Effort and 18 is Stroud’s Number. Estimated amount of time required to implement the algorithm, in seconds.
Static Data Items | Number of static data items.
Switch Cases | Number of SWITCH cases.
SWITCH/SELECT Statements | Number of SWITCH statements.
Unique Function Calls | Number of unique function calls.
Unique Member Function Calls | Number of unique member function calls.
Unique Operands | Number of distinct operands (n2). Operands are variables and literals used in operators. Uniqueness of literals is determined by their notation. Compare Operands.
Unique Operands in Conditions | Number of distinct operands used in conditions.
Unique Operators | Number of distinct operators (n1). Operators are executable statements and unary and binary operations. Compare Operators.
Vocabulary | n = n1 + n2, where n1 is the number of Unique Operators and n2 is the number of Unique Operands.


C++ Header File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.


C++ Member Function

Metric | Description
Absolute Complexity | Binary Decisions divided by the number of statements.
Binary Decisions | Number of branching conditions in the flow graph with two possible outcomes. Includes statements with implicit condition evaluation (loops, AT END, and so on).
Comments Ratio | Number of Comments divided by Lines of Code.
Computational Statements | Number of statements performing arithmetic calculations.
Conditional Complexity | Binary Decisions, plus Unique Operands in Conditions.
Cyclomatic Complexity | v(G) = e - n + 2, where v(G) is the cyclomatic complexity of the flow graph (G) for the program in question, e is the number of edges in G, and n is the number of nodes. Quantity of decision logic. The number of linearly independent paths (minimum number of paths to be tested). v(G) = DE + 1, where DE is the number of binary decisions made in the program.
Difficulty | D = (n1 / 2) * (N2 / n2), where n1 is Unique Operators, N2 is Operands, and n2 is Unique Operands.
Error Estimate | B = E**(2/3) / 3000, where E is Programming Effort.
Essential Complexity | Quantity of unstructured logic (a loop with an exiting GOTO statement, for example). v(G) for reduced graph without D-structured primes.
Exception Handling Statements | Number of exception handling statements.
Executable Statements | All assignments, function calls (alone on a line), calls, returns, IF, DO, FOR, CHOOSE, EXIT, CONTINUE, and GOTO statements.
Extended Cyclomatic Complexity | Cyclomatic Complexity, plus Logical Operators in Conditions. Number of all paths in the program.
Function Calls | Number of function calls.
Function Points | Lines of Code divided by K, where K depends on the language: Cobol=77, Natural=52, PL/I=67, PowerBuilder=24. Estimate of the number of end-user business functions implemented by the program.
GoTo Statements | Number of GOTO statements, including conditional GOTOs.
IF Statements | Number of IF statements.
Intelligent Content | I = L * V, where L is Program Level and V is Program Volume. Complexity of a given algorithm independent of the language used to express the algorithm.
Labels | Number of labels.
Lines of Code | Number of lines of code, plus the number of lines of code in included files and any files they include. Comments and blank lines are not counted.
Local Data Items | Number of local data items.
Logical Operators in Conditions | Number of binary logical operators used in conditions.
Loop Statements | Number of repetitively executing statements.
Maintainability Index | MI = 171 - 5.2 * ln (PgmVolume) - 0.23 * ExtCycComp - 16.2 * ln (LOC) + 50 * sin (sqrt (2.46 * CommentLines/SourceLines)), where PgmVolume is Program Volume, ExtCycComp is Extended Cyclomatic Complexity, LOC is Lines of Code, CommentLines is Comment Lines, and SourceLines is Source Lines.
Maximum Depth of Logic Nesting | Maximum nesting of logic.
Maximum Depth of Logic Nesting | Maximum nesting of logic.
Maximum Switch Cases | Maximum Switch Cases.
Member Function Calls | Number of member function calls.
Number of Comments | Number of items containing text preceded by // or enclosed between /* and */.
Operands | Number of operand occurrences (N2). Operands are variables and literals used in operators. Compare Unique Operands.
Operators | Number of operator occurrences (N1). Operators are executable statements and unary and binary operations. Compare Unique Operators.
Parameters | Number of parameters in method calls.
Pointers | Number of data elements declared as pointers.
Program Length | N = N1 + N2, where N1 is Operators and N2 is Operands.
Program Level | L = 1 / D, where D is Difficulty.
Program Volume | V = N * log2(n), where N is Program Length and n is Vocabulary. Minimum number of bits required to code the program.
Programming Effort | E = V / L, where V is Program Volume and L is Program Level. Estimated mental effort required to develop the program.
Programming Time | T = E / 18, where E is the Programming Effort and 18 is Stroud’s Number. Estimated amount of time required to implement the algorithm, in seconds.
Static Data Items | Number of static data items.
Switch Cases | Number of SWITCH cases.
SWITCH/SELECT Statements | Number of SWITCH statements.
Unique Function Calls | Number of unique function calls.
Unique Member Function Calls | Number of unique member function calls.
Unique Operands | Number of distinct operands (n2). Operands are variables and literals used in operators. Uniqueness of literals is determined by their notation. Compare Operands.
Unique Operands in Conditions | Number of distinct operands used in conditions.
Unique Operators | Number of distinct operators (n1). Operators are executable statements and unary and binary operations. Compare Operators.
Vocabulary | n = n1 + n2, where n1 is the number of Unique Operators and n2 is the number of Unique Operands.


Cobol Copybook File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Data Elements | Number of declared data items (elementary structures and their fields).
Include Statements | Number of include statements: COPY, ++INCLUDE, –INC, EXEC SQL INCLUDE.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source, including blank lines and comments.


Cobol File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Resource Statement | Number of included resource statements.
Include Statements | Number of include statements: COPY, ++INCLUDE, –INC, EXEC SQL INCLUDE.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.
Total Include Statements | Total Include Statements.


Cobol Program

Metric | Description
3-Maintainability | 3-MI = 171 - 5.2 * ln (PgmVolume) - 0.23 * ExtCycComp - 16.2 * ln (LOC), where PgmVolume is Program Volume, ExtCycComp is Extended Cyclomatic Complexity, and LOC is Lines of Code.
Absolute Complexity | Binary Decisions divided by the number of statements.
Asynchronous Calls | Number of asynchronous calls, such as Cobol INITIATE statements.
Binary Decisions | Number of branching conditions in the flow graph with two possible outcomes. Includes statements with implicit condition evaluation (loops, AT END, and so on): IF, EVALUATE (number of WHEN except WHEN OTHER), PERFORM…TIMES, PERFORM…UNTIL, PERFORM…VARYING, PERFORM…VARYING…AFTER (number of AFTER phrases + 1), statements with ON/NOT ON, AT END/NOT AT END, INVALID/NOT INVALID (one decision per statement), GOTO…DEPENDING ON (number of alternatives), SEARCH (number of WHEN, AT END). IDMS: IF.
Computational Statements | Number of statements performing arithmetic calculations: ADD, SUBTRACT, DIVIDE, MULTIPLY, COMPUTE.
Conditional Complexity | Binary Decisions, plus Unique Operands in Conditions.
Conditional Statements | Number of branching statements with nested statements executed under certain conditions, not including conditional GOTOs. IF, EVALUATE, SEARCH, PERFORM…UNTIL, PERFORM…VARYING…UNTIL, statements with ON/NOT ON, AT END/NOT AT END, INVALID/NOT INVALID. IDMS: IF.
Cyclomatic Complexity | v(G) = e - n + 2, where v(G) is the cyclomatic complexity of the flow graph (G) for the program in question, e is the number of edges in G, and n is the number of nodes. Quantity of decision logic. The number of linearly independent paths (minimum number of paths to be tested). v(G) = DE + 1, where DE is the number of binary decisions made in the program.
Data Elements | Number of declared data items (elementary structures and their fields).
Dead Data Elements | Number of dead data elements in programs and used include files. Dead data elements are unused structures at any data level, all of whose parents and children are unused.
Dead Data Elements from Includes | Number of dead data elements in include files. Dead data elements are unused structures at any data level, all of whose parents and children are unused.
Dead Lines | Number of dead lines in programs and used include files. Dead lines are source lines containing Dead Data Elements or Dead Statements. Also, source lines containing dead constructs.
Dead Lines from Includes | Number of dead lines in include files. Dead lines are source lines containing Dead Data Elements from Includes or Dead Statements from Includes. Also, source lines containing dead constructs.
Dead Statements | Number of dead statements in programs and used include files. A dead statement is a procedural statement that can never be reached during program execution.
Dead Statements from Includes | Number of dead statements in include files. A dead statement is a procedural statement that can never be reached during program execution.
Difficulty | D = (n1 / 2) * (N2 / n2), where n1 is Unique Operators, N2 is Operands, and n2 is Unique Operands.
Entry Points | Number of program entry points: PROCEDURE DIVISION, ENTRY.
Error Estimate | B = E**(2/3) / 3000, where E is Programming Effort.
Essential Complexity | Quantity of unstructured logic (a loop with an exiting GOTO statement, for example). v(G) for reduced graph without D-structured primes.
Executable Statements | All Procedure Division statements, plus CONTINUE and NEXT STATEMENT.
Extended Cyclomatic Complexity | Cyclomatic Complexity, plus Logical Operators in Conditions. Number of all paths in the program.
Function Points | Lines of Code divided by K, where K depends on the language: Cobol=77, Natural=52, PL/I=67, PowerBuilder=24. Estimate of the number of end-user business functions implemented by the program.
GoTo Statements | Number of GOTO statements, including conditional GOTOs.
Inner Call Statements | Number of statements that invoke Inner Procedures: PERFORM procedure-name.
Inner Procedures | Number of structured pieces of code that cannot be invoked from external programs: Cobol paragraphs (including nameless).
Intelligent Content | I = L * V, where L is Program Level and V is Program Volume. Complexity of a given algorithm independent of the language used to express the algorithm.
IO Statements | Number of statements performing input/output operations: OPEN, CLOSE, READ, WRITE, REWRITE, DELETE, START, SORT, MERGE, RETURN, RELEASE, ACCEPT, DISPLAY, STOP literal. SQL: INSERT, FETCH, SELECT, UPDATE, DELETE, EXECUTE. CICS: CONVERSE, SEND, SEND MAP, SEND TEXT, RECEIVE, RECEIVE MAP, RECEIVE TEXT, READQ, WRITEQ, DELETEQ, READ, READNEXT, READPREV, WRITE, REWRITE, DELETE. IDMS: ERASE, OBTAIN, GET, MODIFY, STORE.
Lines of Code | Number of lines of code, plus the number of lines of code in included files and any files they include. Comments and blank lines are not counted.
LINK Statements | Number of CICS LINK statements.
Logical Operators in Conditions | Number of binary logical operators used in conditions: AND, OR.
Loop Statements | Number of repetitively executing statements: PERFORM…TIMES, PERFORM…UNTIL, PERFORM…VARYING PERFORM…VARYING…AFTER (# of AFTER + 1).
Maintainability Index | MI = 171 - 5.2 * ln (PgmVolume) - 0.23 * ExtCycComp - 16.2 * ln (LOC) + 50 * sin (sqrt (2.46 * CommentLines/SourceLines)), where PgmVolume is Program Volume, ExtCycComp is Extended Cyclomatic Complexity, LOC is Lines of Code, CommentLines is Comment Lines, and SourceLines is Source Lines.
Nesting Level | Maximum nesting of conditional statements within conditional statements (0 if no conditional statements, 1 if no nesting).
Non-returning Calls | Number of non-returning calls, such as Cobol XCTL statements.
Number of Code Lines Without Copy | Number of lines of source code. Included files are not counted. Comments and blank lines are not counted.
Operands | Number of operand occurrences (N2). Operands are variables and literals used in operators. Compare Unique Operands.
Operators | Number of operator occurrences (N1). Operators are executable statements and unary and binary operations: +, -, *, /, **, NOT, AND, OR, <, <=, >, >=, =, IS, (subscript), (reference:modification), FUNCTION. Compare Unique Operators.
Parameters | Number of Cobol Procedure Division USING...RETURNING parameters.
Pointers | Number of data elements declared as pointers. Data items with USAGE IS POINTER, PROCEDURE-POINTER.
Program Length | N = N1 + N2, where N1 is Operators and N2 is Operands.
Program Level | L = 1 / D, where D is Difficulty.
Program Volume | V = N * log2(n), where N is Program Length and n is Vocabulary. Minimum number of bits required to code the program.
Programming Effort | E = V / L, where V is Program Volume and L is Program Level. Estimated mental effort required to develop the program.
Programming Time | T = E / 18, where E is the Programming Effort and 18 is Stroud’s Number. Estimated amount of time required to implement the algorithm, in seconds.
Recursive Number Of Comments With Copy | Number of lines of source containing comments, plus the number of lines of source containing comments in included files and any files they include. Inline comments placed on lines with statements are not counted.
Recursive Number Of Source Lines With Copy | Number of lines of source, plus the number of lines of source in included files and any files they include. Comments and blank lines are counted.
Response for Class | Response for class.
Unique Operands | Number of distinct operands (n2). Operands are variables and literals used in operators. Uniqueness of literals is determined by their notation. Compare Operands.
Unique Operands in Conditions | Number of distinct operands used in conditions.
Unique Operators | Number of distinct operators (n1). Operators are executable statements and unary and binary operations: +, -, *, /, **, NOT, AND, OR, <, <=, >, >=, =, IS, (subscript), (reference:modification), FUNCTION. Compare Operators.
Vocabulary | n = n1 + n2, where n1 is the number of Unique Operators and n2 is the number of Unique Operands.


COMS Configuration File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.


Control Cards File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.


Control Language File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.


CSD File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Entries | Number of entries.
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source, including blank lines and comments.


DASDL Include File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.


Database Description File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.


Database File

Metric | Description
Fields | Number of fields.
Key Fields | Number of key fields.
Omit Fields | Number of omit fields.
Records | Number of records.
Select Fields | Number of select fields.


DBD File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Segments | Number of segments.
Source Lines | Number of lines of source, including blank lines and comments.


DDL File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Columns | Number of columns.
Foreign Keys | Number of foreign keys.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Primary Keys | Number of primary keys.
Source Lines | Number of lines of source, including blank lines and comments.
Tables | Number of tables.


Device Description File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Screens | Number of screens.
Source Lines | Number of lines of source.


DMSII DASDL File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.
Total Include Statements | Total Include Statements.


DMSII Database

Metric | Description
Data Sets | Number of data sets.
Disjoint Data Sets | Number of disjoint data sets.
Global Data Items | Number of global data items.
Remapped Data Sets | Number of remapped data sets.
Sets | Number of sets.
Subsets | Number of subsets.


DMSII Dataset

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.


DMS DDL File

Metric | Description
Areas | Number of areas.
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Records | Number of records.
Sets | Number of sets.
Source Lines | Number of lines of source.


DPS File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Screens | Number of screens.
Source Lines | Number of lines of source.


ECL Addstream

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.


ECL File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Number of Executes | Number of executes.
Number of Processor Calls | Number of processor calls.
Source Lines | Number of lines of source.
Total Include Statements | Total Include Statements.


FCT File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Entries | Number of entries.
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source, including blank lines and comments.


Fujitsu Cobol Program

Metric | Description
3-Maintainability | 3-MI = 171 - 5.2 * ln (PgmVolume) - 0.23 * ExtCycComp - 16.2 * ln (LOC), where PgmVolume is Program Volume, ExtCycComp is Extended Cyclomatic Complexity, and LOC is Lines of Code.
Absolute Complexity | Binary Decisions divided by the number of statements.
Asynchronous Calls | Number of asynchronous calls, such as Cobol INITIATE statements.
Binary Decisions | Number of branching conditions in the flow graph with two possible outcomes. Includes statements with implicit condition evaluation (loops, AT END, and so on): IF, IF DB-EXCEPTION, EVALUATE (number of WHEN except WHEN OTHER), PERFORM…TIMES, PERFORM…UNTIL, PERFORM…VARYING, PERFORM…VARYING…AFTER (number of AFTER phrases + 1), statements with ON/NOT ON, AT END/NOT AT END, INVALID/NOT INVALID (one decision per statement), GOTO…DEPENDING ON (number of alternatives), SEARCH (number of WHEN, AT END). IDMS: IF.
Computational Statements | Number of statements performing arithmetic calculations: ADD, SUBTRACT, DIVIDE, MULTIPLY, COMPUTE.
Conditional Complexity | Binary Decisions, plus Unique Operands in Conditions.
Conditional Statements | Number of branching statements with nested statements executed under certain conditions, not including conditional GOTOs. IF, IF DB-EXCEPTION, EVALUATE, SEARCH, PERFORM…UNTIL, PERFORM…VARYING…UNTIL, statements with ON/NOT ON, AT END/NOT AT END, INVALID/NOT INVALID. IDMS: IF.
Cyclomatic Complexity | v(G) = e - n + 2, where v(G) is the cyclomatic complexity of the flow graph (G) for the program in question, e is the number of edges in G, and n is the number of nodes. Quantity of decision logic. The number of linearly independent paths (minimum number of paths to be tested). v(G) = DE + 1, where DE is the number of binary decisions made in the program.
Data Elements | Number of declared data items (elementary structures and their fields).
Dead Data Elements | Number of dead data elements in programs and used include files. Dead data elements are unused structures at any data level, all of whose parents and children are unused.
Dead Data Elements from Includes | Number of dead data elements in include files. Dead data elements are unused structures at any data level, all of whose parents and children are unused.
Dead Lines | Number of dead lines in programs and used include files. Dead lines are source lines containing Dead Data Elements or Dead Statements. Also, source lines containing dead constructs.
Dead Lines from Includes | Number of dead lines in include files. Dead lines are source lines containing Dead Data Elements from Includes or Dead Statements from Includes. Also, source lines containing dead constructs.
Dead Statements | Number of dead statements in programs and used include files. A dead statement is a procedural statement that can never be reached during program execution.
Dead Statements from Includes | Number of dead statements in include files. A dead statement is a procedural statement that can never be reached during program execution.
Difficulty | D = (n1 / 2) * (N2 / n2), where n1 is Unique Operators, N2 is Operands, and n2 is Unique Operands.
Entry Points | Number of program entry points: PROCEDURE DIVISION, ENTRY.
Error Estimate | B = E**(2/3) / 3000, where E is Programming Effort.
Essential Complexity | Quantity of unstructured logic (a loop with an exiting GOTO statement, for example). v(G) for reduced graph without D-structured primes.
Executable Statements | All Procedure Division statements, plus CONTINUE and NEXT STATEMENT.
Extended Cyclomatic Complexity | Cyclomatic Complexity, plus Logical Operators in Conditions. Number of all paths in the program.
Function Points | Lines of Code divided by K, where K depends on the language: Cobol=77, Natural=52, PL/I=67, PowerBuilder=24. Estimate of the number of end-user business functions implemented by the program.
GoTo Statements | Number of GOTO statements, including conditional GOTOs.
Inner Call Statements | Number of statements that invoke Inner Procedures: PERFORM procedure-name.
Inner Procedures | Number of structured pieces of code that cannot be invoked from external programs: Cobol paragraphs (including nameless).
Intelligent Content | I = L * V, where L is Program Level and V is Program Volume. Complexity of a given algorithm independent of the language used to express the algorithm.
IO Statements | Number of statements performing input/output operations: OPEN, CLOSE, READ, WRITE, REWRITE, DELETE, START, SORT, MERGE, RETURN, RELEASE, ACCEPT, DISPLAY, STOP literal. SQL: INSERT, FETCH, SELECT, UPDATE, DELETE, EXECUTE. CICS: CONVERSE, SEND, SEND MAP, SEND TEXT, RECEIVE, RECEIVE MAP, RECEIVE TEXT, READQ, WRITEQ, DELETEQ, READ, READNEXT, READPREV, WRITE, REWRITE, DELETE. IDMS: ERASE, OBTAIN, GET, MODIFY, STORE. Fujitsu AIM/DB: ERASE, GET, MODIFY, STORE.
Lines of Code | Number of lines of code, plus the number of lines of code in included files and any files they include. Comments and blank lines are not counted.
LINK Statements | Number of CICS LINK statements.
Logical Operators in Conditions | Number of binary logical operators used in conditions: AND, OR.
Loop Statements | Number of repetitively executing statements: PERFORM…TIMES, PERFORM…UNTIL, PERFORM…VARYING PERFORM…VARYING…AFTER (# of AFTER + 1).
Maintainability Index | MI = 171 - 5.2 * ln (PgmVolume) - 0.23 * ExtCycComp - 16.2 * ln (LOC) + 50 * sin (sqrt (2.46 * CommentLines/SourceLines)), where PgmVolume is Program Volume, ExtCycComp is Extended Cyclomatic Complexity, LOC is Lines of Code, CommentLines is Comment Lines, and SourceLines is Source Lines.
Nesting Level | Maximum nesting of conditional statements within conditional statements (0 if no conditional statements, 1 if no nesting).
Non-returning Calls | Number of non-returning calls, such as Cobol XCTL statements.
Operands | Number of operand occurrences (N2). Operands are variables and literals used in operators. Compare Unique Operands.
Operators | Number of operator occurrences (N1). Operators are executable statements and unary and binary operations: +, -, *, /, **, NOT, AND, OR, <, <=, >, >=, =, IS, (subscript), (reference:modification), FUNCTION. Compare Unique Operators.
Parameters | Number of Cobol Procedure Division USING...RETURNING parameters.
Pointers | Number of data elements declared as pointers. Data items with USAGE IS POINTER, PROCEDURE-POINTER.
Program Length | N = N1 + N2, where N1 is Operators and N2 is Operands.
Program Level | L = 1 / D, where D is Difficulty.
Program Volume | V = N * log2(n), where N is Program Length and n is Vocabulary. Minimum number of bits required to code the program.
Programming Effort | E = V / L, where V is Program Volume and L is Program Level. Estimated mental effort required to develop the program.
Programming Time | T = E / 18, where E is the Programming Effort and 18 is Stroud’s Number. Estimated amount of time required to implement the algorithm, in seconds.
Response for Class | Response for class.
Unique Operands | Number of distinct operands (n2). Operands are variables and literals used in operators. Uniqueness of literals is determined by their notation. Compare Operands.
Unique Operands in Conditions | Number of distinct operands used in conditions.
Unique Operators | Number of distinct operators (n1). Operators are executable statements and unary and binary operations: +, -, *, /, **, NOT, AND, OR, <, <=, >, >=, =, IS, (subscript), (reference:modification), FUNCTION. Compare Operators.
Vocabulary | n = n1 + n2, where n1 is the number of Unique Operators and n2 is the number of Unique Operands.


ICL Form

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Screens | Number of screens.
Source Lines | Number of lines of source.


IDMS Schema File

Metric | Description
Areas | Number of areas.
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Records | Number of records.
Sets | Number of sets.
Source Lines | Number of lines of source, including blank lines and comments.


IDMS Subschema File

Metric | Description
Areas | Number of areas.
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Logical Records | Number of logical records.
Path Groups | Number of path groups.
Records | Number of records.
Sets | Number of sets.
Source Lines | Number of lines of source, including blank lines and comments.


Java Class

Metric | Description
Average Absolute Complexity | Average Absolute Complexity of methods.
Average Binary Decisions | Average Binary Decisions of methods.
Average Catch Clauses | Average Catch Clauses in methods.
Average Computational Statements | Average Computational Statements of methods.
Average Conditional Complexity | Average Conditional Complexity of methods.
Average Cyclomatic Complexity | Average Cyclomatic Complexity of methods.
Average Essential Complexity | Average Essential Complexity of methods.
Average Extended Cyclomatic Complexity | Average Extended Cyclomatic Complexity of methods.
Average IF Statements | Average IF Statements in methods.
Average Loop Statements | Average Loop Statements in methods.
Average Maximum Switch Cases | Average Maximum Switch Cases in methods.
Average Nested Block Depth | Average Nested Block Depth of methods.
Average Parameters | Average Parameters in methods.
Average Switch Cases | Average Switch Cases in methods.
Average Switch Statements | Average Switch Statements in methods.
Average Unique Method Calls | Average Unique Method Calls in methods.
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Comments Ratio | Number of Comments divided by Lines of Code.
Constructors | Number of constructors.
Depth of Inheritance Hierarchy | Maximum nesting of the inheritance hierarchy.
Error Estimate | B = E**(2/3) / 3000, where E is Programming Effort.
Executable Statements | All assignments, function calls (alone on a line), calls, returns, IF, DO, FOR, CHOOSE, EXIT, CONTINUE, and GOTO statements.
Fields | Number of fields.
Function Points | Lines of Code divided by K, where K depends on the language: Cobol=77, Natural=52, PL/I=67, PowerBuilder=24. Estimate of the number of end-user business functions implemented by the program.
Include Statements | Number of include statements.
Intelligent Content | I = L * V, where L is Program Level and V is Program Volume. Complexity of a given algorithm independent of the language used to express the algorithm.
Interfaces | Number of interfaces.
Lack of Cohesion | LOCM = (m - sum(mA)/a1+a2) / (m-1), where mA is the number of methods that access class attributes.
Lines of Code | Number of lines of code, plus the number of lines of code in included files and any files they include. Comments and blank lines are not counted.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Logical Operators in Conditions | Number of binary logical operators used in conditions.
Maintainability Index | MI = 171 - 5.2 * ln (PgmVolume) - 0.23 * ExtCycComp - 16.2 * ln (LOC) + 50 * sin (sqrt (2.46 * CommentLines/SourceLines)), where PgmVolume is Program Volume, ExtCycComp is Extended Cyclomatic Complexity, LOC is Lines of Code, CommentLines is Comment Lines, and SourceLines is Source Lines.
Methods | Number of methods.
Number of Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Operands | Number of operand occurrences (N2). Operands are variables and literals used in operators. Compare Unique Operands.
Operators | Number of operator occurrences (N1). Operators are executable statements and unary and binary operations. Compare Unique Operators.
Overridden Methods | Number of overridden methods.
Program Length | N = N1 + N2, where N1 is Operators and N2 is Operands.
Program Level | L = 1 / D, where D is Difficulty.
Program Volume | V = N * log2(n), where N is Program Length and n is Vocabulary. Minimum number of bits required to code the program.
Programming Effort | E = V / L, where V is Program Volume and L is Program Level. Estimated mental effort required to develop the program.
Programming Time | T = E / 18, where E is the Programming Effort and 18 is Stroud’s Number. Estimated amount of time required to implement the algorithm, in seconds.
Response for Class | Response for class.
Source Lines | Number of lines of source.
Specialization Index | Number of subclasses divided by number of superclasses.
Static Fields | Number of static fields.
Static Methods | Number of static methods.
Subtypes | Number of subtypes.
Unique Operands | Number of distinct operands (n2). Operands are variables and literals used in operators. Uniqueness of literals is determined by their notation. Compare Operands.
Unique Operands in Conditions | Number of distinct operands used in conditions.
Unique Operators | Number of distinct operators (n1). Operators are executable statements and unary and binary operations. Compare Operators.
Vocabulary | n = n1 + n2, where n1 is the number of Unique Operators and n2 is the number of Unique Operands.
Weighted Methods | Number of weighted methods.


Java File

Metric | Description
Abstract Classes | Number of abstract classes and interfaces.
Abstract Methods | Number of abstract methods.
Average Absolute Complexity | Average Absolute Complexity of methods.
Average Binary Decisions | Average Binary Decisions of methods.
Average Catch Clauses | Average Catch Clauses in methods.
Average Computational Statements | Average Computational Statements of methods.
Average Conditional Complexity | Average Conditional Complexity of methods.
Average Cyclomatic Complexity | Average Cyclomatic Complexity of methods.
Average Depth of Inheritance Hierarchy | Average Depth of Inheritance Hierarchy of classes and interfaces.
Average Essential Complexity | Average Essential Complexity of methods.
Average Extended Cyclomatic Complexity | Average Extended Cyclomatic Complexity of methods.
Average IF Statements | Average IF Statements in methods.
Average Lack of Cohesion Per Type | Average Lack of Cohesion of classes and interfaces.
Average Loop Statements | Average Loop Statements in methods.
Average Maximum Switch Cases | Average Maximum Switch Cases in methods.
Average Nested Block Depth | Average Nested Block Depth of methods.
Average Parameters | Average Parameters in methods.
Average Specialization Index Per Type | Average Specialization Index of classes and interfaces.
Average Switch Cases | Average Switch Cases in methods.
Average Switch Statements | Average Switch Statements in methods.
Average Unique Method Calls | Average Unique Method Calls in methods.
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Comments Ratio | Number of Comments divided by Lines of Code.
Constructors | Number of constructors.
Error Estimate | B = E**(2/3) / 3000, where E is Programming Effort.
Executable Statements | All assignments, function calls (alone on a line), calls, returns, IF, DO, FOR, CHOOSE, EXIT, CONTINUE, and GOTO statements.
Fields | Number of fields.
Function Points | Lines of Code divided by K, where K depends on the language: Cobol=77, Natural=52, PL/I=67, PowerBuilder=24. Estimate of the number of end-user business functions implemented by the program.
Import Statements | Number of import statements.
Intelligent Content | I = L * V, where L is Program Level and V is Program Volume. Complexity of a given algorithm independent of the language used to express the algorithm.
Interfaces | Number of interfaces.
Lines of Code | Number of lines of code, plus the number of lines of code in included files and any files they include. Comments and blank lines are not counted.
Logical Operators in Conditions | Number of binary logical operators used in conditions.
Maintainability Index | MI = 171 - 5.2 * ln (PgmVolume) - 0.23 * ExtCycComp - 16.2 * ln (LOC) + 50 * sin (sqrt (2.46 * CommentLines/SourceLines)), where PgmVolume is Program Volume, ExtCycComp is Extended Cyclomatic Complexity, LOC is Lines of Code, CommentLines is Comment Lines, and SourceLines is Source Lines.
Methods | Number of methods.
Number of Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Operands | Number of operand occurrences (N2). Operands are variables and literals used in operators. Compare Unique Operands.
Operators | Number of operator occurrences (N1). Operators are executable statements and unary and binary operations. Compare Unique Operators.
Overridden Methods | Number of overridden methods.
Program Length | N = N1 + N2, where N1 is Operators and N2 is Operands.
Program Level | L = 1 / D, where D is Difficulty.
Program Volume | V = N * log2(n), where N is Program Length and n is Vocabulary. Minimum number of bits required to code the program.
Programming Effort | E = V / L, where V is Program Volume and L is Program Level. Estimated mental effort required to develop the program.
Programming Time | T = E / 18, where E is the Programming Effort and 18 is Stroud’s Number. Estimated amount of time required to implement the algorithm, in seconds.
Response for Class | Response for class.
Source Lines | Number of lines of source.
Static Fields | Number of static fields.
Static Methods | Number of static methods.
Subtypes | Number of subtypes.
Unique Operands | Number of distinct operands (n2). Operands are variables and literals used in operators. Uniqueness of literals is determined by their notation. Compare Operands.
Unique Operands in Conditions | Number of distinct operands used in conditions.
Unique Operators | Number of distinct operators (n1). Operators are executable statements and unary and binary operations. Compare Operators.
Vocabulary | n = n1 + n2, where n1 is the number of Unique Operators and n2 is the number of Unique Operands.
Weighted Methods | Number of weighted methods.


Java Interface

Metric | Description
Average Absolute Complexity | Average Absolute Complexity of methods.
Average Binary Decisions | Average Binary Decisions of methods.
Average Catch Clauses | Average Catch Clauses in methods.
Average Computational Statements | Average Computational Statements of methods.
Average Conditional Complexity | Average Conditional Complexity of methods.
Average Cyclomatic Complexity | Average Cyclomatic Complexity of methods.
Average Essential Complexity | Average Essential Complexity of methods.
Average Extended Cyclomatic Complexity | Average Extended Cyclomatic Complexity of methods.
Average IF Statements | Average IF Statements in methods.
Average Loop Statements | Average Loop Statements in methods.
Average Maximum Switch Cases | Average Maximum Switch Cases in methods.
Average Nested Block Depth | Average Nested Block Depth of methods.
Average Parameters | Average Parameters in methods.
Average Switch Cases | Average Switch Cases in methods.
Average Switch Statements | Average Switch Statements in methods.
Average Unique Method Calls | Average Unique Method Calls in methods.
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Comments Ratio | Number of Comments divided by Lines of Code.
Constructors | Number of constructors.
Depth of Inheritance Hierarchy | Maximum nesting of the inheritance hierarchy.
Error Estimate | B = E**(2/3) / 3000, where E is Programming Effort.
Executable Statements | All assignments, function calls (alone on a line), calls, returns, IF, DO, FOR, CHOOSE, EXIT, CONTINUE, and GOTO statements.
Fields | Number of fields.
Function Points | Lines of Code divided by K, where K depends on the language: Cobol=77, Natural=52, PL/I=67, PowerBuilder=24. Estimate of the number of end-user business functions implemented by the program.
Intelligent Content | I = L * V, where L is Program Level and V is Program Volume. Complexity of a given algorithm independent of the language used to express the algorithm.
Interfaces | Number of interfaces.
Lack of Cohesion | LOCM = (m - sum(mA)/a1+a2) / (m-1), where mA is the number of methods that access class attributes.
Lines of Code | Number of lines of code, plus the number of lines of code in included files and any files they include. Comments and blank lines are not counted.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Logical Operators in Conditions | Number of binary logical operators used in conditions.
Maintainability Index | MI = 171 - 5.2 * ln (PgmVolume) - 0.23 * ExtCycComp - 16.2 * ln (LOC) + 50 * sin (sqrt (2.46 * CommentLines/SourceLines)), where PgmVolume is Program Volume, ExtCycComp is Extended Cyclomatic Complexity, LOC is Lines of Code, CommentLines is Comment Lines, and SourceLines is Source Lines.
Methods | Number of methods.
Number of Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Operands | Number of operand occurrences (N2). Operands are variables and literals used in operators. Compare Unique Operands.
Operators | Number of operator occurrences (N1). Operators are executable statements and unary and binary operations. Compare Unique Operators.
Overridden Methods | Number of overridden methods.
Program Length | N = N1 + N2, where N1 is Operators and N2 is Operands.
Program Level | L = 1 / D, where D is Difficulty.
Program Volume | V = N * log2(n), where N is Program Length and n is Vocabulary. Minimum number of bits required to code the program.
Programming Effort | E = V / L, where V is Program Volume and L is Program Level. Estimated mental effort required to develop the program.
Programming Time | T = E / 18, where E is the Programming Effort and 18 is Stroud’s Number. Estimated amount of time required to implement the algorithm, in seconds.
Response for Class | Response for class.
Source Lines | Number of lines of source.
Specialization Index | Number of subclasses divided by number of superclasses.
Static Fields | Number of static fields.
Static Methods | Number of static methods.
Subtypes | Number of subtypes.
Unique Operands | Number of distinct operands (n2). Operands are variables and literals used in operators. Uniqueness of literals is determined by their notation. Compare Operands.
Unique Operands in Conditions | Number of distinct operands used in conditions.
Unique Operators | Number of distinct operators (n1). Operators are executable statements and unary and binary operations. Compare Operators.
Vocabulary | n = n1 + n2, where n1 is the number of Unique Operators and n2 is the number of Unique Operands.
Weighted Methods | Number of weighted methods.


Java Method

Metric | Description
Absolute Complexity | Binary Decisions divided by the number of statements.
Binary Decisions | Number of branching conditions in the flow graph with two possible outcomes. Includes statements with implicit condition evaluation (loops, AT END, and so on).
Catch Clauses | Number of catch clauses.
Comments Ratio | Number of Comments divided by Lines of Code.
Computational Statements | Number of statements performing arithmetic calculations.
Conditional Complexity | Binary Decisions, plus Unique Operands in Conditions.
Constructors | Number of constructors.
Cyclomatic Complexity | v(G) = e - n + 2, where v(G) is the cyclomatic complexity of the flow graph (G) for the program in question, e is the number of edges in G, and n is the number of nodes. Quantity of decision logic. The number of linearly independent paths (minimum number of paths to be tested). v(G) = DE + 1, where DE is the number of binary decisions made in the program.
Difficulty | D = (n1 / 2) * (N2 / n2), where n1 is Unique Operators, N2 is Operands, and n2 is Unique Operands.
Error Estimate | B = E**(2/3) / 3000, where E is Programming Effort.
Essential Complexity | Quantity of unstructured logic (a loop with an exiting GOTO statement, for example). v(G) for reduced graph without D-structured primes.
Executable Statements | All assignments, function calls (alone on a line), calls, returns, IF, DO, FOR, CHOOSE, EXIT, CONTINUE, and GOTO statements.
Extended Cyclomatic Complexity | Cyclomatic Complexity, plus Logical Operators in Conditions. Number of all paths in the program.
Function Points | Lines of Code divided by K, where K depends on the language: Cobol=77, Natural=52, PL/I=67, PowerBuilder=24. Estimate of the number of end-user business functions implemented by the program.
IF Statements | Number of IF statements.
Intelligent Content | I = L * V, where L is Program Level and V is Program Volume. Complexity of a given algorithm independent of the language used to express the algorithm.
Lines of Code | Number of lines of code, plus the number of lines of code in included files and any files they include. Comments and blank lines are not counted.
Logical Operators in Conditions | Number of binary logical operators used in conditions.
Loop Statements | Number of repetitively executing statements.
Maintainability Index | MI = 171 - 5.2 * ln (PgmVolume) - 0.23 * ExtCycComp - 16.2 * ln (LOC) + 50 * sin (sqrt (2.46 * CommentLines/SourceLines)), where PgmVolume is Program Volume, ExtCycComp is Extended Cyclomatic Complexity, LOC is Lines of Code, CommentLines is Comment Lines, and SourceLines is Source Lines.
Maximum Switch Cases | Maximum Switch Cases.
Nested Block Depth | Maximum nesting of IF, CHOOSE, TRY, DO, SWITCH, or FOR constructs. 1 is added to the depth in the IF and ELSE parts of IF statements, the bodies of loops, and the code in each case of a Choose statement.
Number of Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Operands | Number of operand occurrences (N2). Operands are variables and literals used in operators. Compare Unique Operands.
Operators | Number of operator occurrences (N1). Operators are executable statements and unary and binary operations. Compare Unique Operators.
Parameters | Number of parameters in method calls.
Program Length | N = N1 + N2, where N1 is Operators and N2 is Operands.
Program Level | L = 1 / D, where D is Difficulty.
Program Volume | V = N * log2(n), where N is Program Length and n is Vocabulary. Minimum number of bits required to code the program.
Programming Effort | E = V / L, where V is Program Volume and L is Program Level. Estimated mental effort required to develop the program.
Programming Time | T = E / 18, where E is the Programming Effort and 18 is Stroud’s Number. Estimated amount of time required to implement the algorithm, in seconds.
Switch Cases | Number of SWITCH cases.
Switch/Choose Statements | Number of SWITCH in Java, CHOOSE statements. in PowerBuilders.
Unique Method Calls | Number of distinct method calls.
Unique Operands | Number of distinct operands (n2). Operands are variables and literals used in operators. Uniqueness of literals is determined by their notation. Compare Operands.
Unique Operands in Conditions | Number of distinct operands used in conditions.
Unique Operators | Number of distinct operators (n1). Operators are executable statements and unary and binary operations. Compare Operators.
Vocabulary | n = n1 + n2, where n1 is the number of Unique Operators and n2 is the number of Unique Operands.


Java Package

Metric | Description
Abstract Classes | Number of abstract classes and interfaces.
Abstract Methods | Number of abstract methods.
Abstractness | Ratio of Number of Abstract Classes (and interfaces) in the analyzed package to the total number of classes in the analyzed package.
Afferent Coupling | Number of classes outside the package that depend on classes in the package. An indicator of the package’s responsibility.
Average Absolute Complexity | Average Absolute Complexity of methods.
Average Binary Decisions | Average Binary Decisions of methods.
Average Catch Clauses | Average Catch Clauses in methods.
Average Computational Statements | Average Computational Statements of methods.
Average Conditional Complexity | Average Conditional Complexity of methods.
Average Cyclomatic Complexity | Average Cyclomatic Complexity of methods.
Average Depth of Inheritance Hierarchy | Average Depth of Inheritance Hierarchy of classes and interfaces.
Average Essential Complexity | Average Essential Complexity of methods.
Average Extended Cyclomatic Complexity | Average Extended Cyclomatic Complexity of methods.
Average IF Statements | Average IF Statements in methods.
Average Lack of Cohesion Per Type | Average Lack of Cohesion of classes and interfaces.
Average Loop Statements | Average Loop Statements in methods.
Average Maximum Switch Cases | Average Maximum Switch Cases in methods.
Average Nested Block Depth | Average Nested Block Depth of methods.
Average Parameters | Average Parameters in methods.
Average Specialization Index Per Type | Average Specialization Index of classes and interfaces.
Average Subtypes | Average Subtypes in methods.
Average Switch Cases | Average Switch Cases in methods.
Average Switch Statements | Average Switch Statements in methods.
Average Unique Method Calls | Average Unique Method Calls in methods.
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Comments Ratio | Number of Comments divided by Lines of Code.
Constructors | Number of constructors.
Efferent Coupling | Number of classes in the package that depend on classes outside the package. An indicator of the package’s independence.
Error Estimate | B = E**(2/3) / 3000, where E is Programming Effort.
Executable Statements | All assignments, function calls (alone on a line), calls, returns, IF, DO, FOR, CHOOSE, EXIT, CONTINUE, and GOTO statements.
Fields | Number of fields.
Function Points | Lines of Code divided by K, where K depends on the language: Cobol=77, Natural=52, PL/I=67, PowerBuilder=24. Estimate of the number of end-user business functions implemented by the program.
Import Statements | Number of import statements.
Include Statements | Number of include statements.
Instability | Ratio of Efferent Coupling (Ce) to total coupling (Ce + Ca), such that I = Ce / (Ce + Ca). An indicator of the package’s resilience to change.
Intelligent Content | I = L * V, where L is Program Level and V is Program Volume. Complexity of a given algorithm independent of the language used to express the algorithm.
Interfaces | Number of interfaces.
Lines of Code | Number of lines of code, plus the number of lines of code in included files and any files they include. Comments and blank lines are not counted.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Logical Operators in Conditions | Number of binary logical operators used in conditions.
Maintainability Index | MI = 171 - 5.2 * ln (PgmVolume) - 0.23 * ExtCycComp - 16.2 * ln (LOC) + 50 * sin (sqrt (2.46 * CommentLines/SourceLines)), where PgmVolume is Program Volume, ExtCycComp is Extended Cyclomatic Complexity, LOC is Lines of Code, CommentLines is Comment Lines, and SourceLines is Source Lines.
Methods | Number of methods.
Normalized Distance | |A + I - 1|, where A is the ratio of abstract types to all types defined in the package and I is Instability. An indicator of the package’s balance between abstractness and stability.
Number of Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Operands | Number of operand occurrences (N2). Operands are variables and literals used in operators. Compare Unique Operands.
Operators | Number of operator occurrences (N1). Operators are executable statements and unary and binary operations. Compare Unique Operators.
Overridden Methods | Number of overridden methods.
Program Length | N = N1 + N2, where N1 is Operators and N2 is Operands.
Program Level | L = 1 / D, where D is Difficulty.
Program Volume | V = N * log2(n), where N is Program Length and n is Vocabulary. Minimum number of bits required to code the program.
Programming Effort | E = V / L, where V is Program Volume and L is Program Level. Estimated mental effort required to develop the program.
Programming Time | T = E / 18, where E is the Programming Effort and 18 is Stroud’s Number. Estimated amount of time required to implement the algorithm, in seconds.
Response for Class | Response for class.
Source Lines | Number of lines of source.
Static Fields | Number of static fields.
Static Methods | Number of static methods.
Unique Operands | Number of distinct operands (n2). Operands are variables and literals used in operators. Uniqueness of literals is determined by their notation. Compare Operands.
Unique Operands in Conditions | Number of distinct operands used in conditions.
Unique Operators | Number of distinct operators (n1). Operators are executable statements and unary and binary operations. Compare Operators.
Vocabulary | n = n1 + n2, where n1 is the number of Unique Operators and n2 is the number of Unique Operands.
Weighted Methods | Number of weighted methods.


JCL File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Control Cards Usages | Number of DD statements referencing control cards identified in Legacy.xml to generate program to control card relationships.
EXEC Cataloged Procedure Steps | Number of EXEC statements invoking cataloged procedures.
EXEC In-stream Procedure Steps | Number of EXEC statements invoking instream procedures.
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source, including blank lines and comments.
Steps | Number of top-level steps in the job (not including steps in invoked procedures).
Total EXEC Cataloged Procedure Steps | Number of EXEC statements invoking cataloged procedures in the job and invoked procedures. If a procedure is invoked multiple times, it is counted each time.
Total Include Statements | Number of include statements in the job, invoked procedures, and any include files.


JCL Procedure

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Control Cards Usages | Number of DD statements referencing control cards identified in Legacy.xml to generate program to control card relationships.
EXEC Cataloged Procedure Steps | Number of EXEC statements invoking cataloged procedures.
EXEC In-stream Procedure Steps | Number of EXEC statements invoking instream procedures.
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source, including blank lines and comments.
Steps | Number of steps in the procedure.


Job

Metric | Description
Steps | Number of steps in the job and invoked procedures. If a procedure is invoked multiple times, it is counted each time.


Library Description File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.


Macro File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.


Map

Metric | Description
Hidden Fields | Number of hidden fields.
Input Fields | Number of input fields.
Input/Output Fields | Number of input/output fields.
Output Fields | Number of output fields.


MFS File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Screens | Number of screens.
Source Lines | Number of lines of source, including blank lines and comments.
Total Include Statements | Number of include statements in the file and any used include files.


MFS Include File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source, including blank lines and comments.


Natural Data Area

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.


Natural DDM File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Fields of Adabas File Number | Number of fields of Adabas file number.
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.


Natural File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Global Data Area Statements | Number of included global data area statements.
Include Local Data Area Statements | Number of included local data area statements.
Include Parameter Data Area Statements | Number of included parameter data area statements.
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.
Total Include Statements | Total Include Statements.


Natural Include File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.


Natural Map

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Maps | Number of maps.
Source Lines | Number of lines of source.


Natural Program

Metric | Description
3-Maintainability | 3-MI = 171 - 5.2 * ln (PgmVolume) - 0.23 * ExtCycComp - 16.2 * ln (LOC), where PgmVolume is Program Volume, ExtCycComp is Extended Cyclomatic Complexity, and LOC is Lines of Code.
Absolute Complexity | Binary Decisions divided by the number of statements.
Asynchronous Calls | Number of asynchronous calls, such as Cobol INITIATE statements.
Binary Decisions | Number of branching conditions in the flow graph with two possible outcomes. Includes statements with implicit condition evaluation (loops, AT END, and so on).
Computational Statements | Number of statements performing arithmetic calculations.
Conditional Complexity | Binary Decisions, plus Unique Operands in Conditions.
Conditional Statements | Number of branching statements with nested statements executed under certain conditions.
Conditional Statements | Number of branching statements with nested statements executed under certain conditions.
Cyclomatic Complexity | v(G) = e - n + 2, where v(G) is the cyclomatic complexity of the flow graph (G) for the program in question, e is the number of edges in G, and n is the number of nodes. Quantity of decision logic. The number of linearly independent paths (minimum number of paths to be tested). v(G) = DE + 1, where DE is the number of binary decisions made in the program.
Data Elements | Number of declared data items (elementary structures and their fields).
Dead Data Elements | Number of dead data elements in programs and used include files. Dead data elements are unused structures at any data level, all of whose parents and children are unused.
Dead Data Elements from Includes | Number of dead data elements in include files. Dead data elements are unused structures at any data level, all of whose parents and children are unused.
Dead Lines | Number of dead lines in programs and used include files. Dead lines are source lines containing Dead Data Elements or Dead Statements.
Dead Lines from Includes | Number of dead lines in include files. Dead lines are source lines containing Dead Data Elements from Includes or Dead Statements from Includes.
Dead Statements | Number of dead statements in programs and used include files. A dead statement is a procedural statement that can never be reached during program execution.
Dead Statements from Includes | Number of dead statements in include files. A dead statement is a procedural statement that can never be reached during program execution.
Difficulty | D = (n1 / 2) * (N2 / n2), where n1 is Unique Operators, N2 is Operands, and n2 is Unique Operands.
Entry Points | Number of program entry points.
Error Estimate | B = E**(2/3) / 3000, where E is Programming Effort.
Essential Complexity | Quantity of unstructured logic (a loop with an exiting GOTO statement, for example). v(G) for reduced graph without D-structured primes.
Executable Statements | All statements, except DEFINE DATA and IGNORE.
Extended Cyclomatic Complexity | Cyclomatic Complexity, plus Logical Operators in Conditions. Number of all paths in the program.
Function Points | Lines of Code divided by K, where K depends on the language: Cobol=77, Natural=52, PL/I=67, PowerBuilder=24. Estimate of the number of end-user business functions implemented by the program.
GoTo Statements | Number of GOTO statements, including conditional GOTOs.
Inner Call Statements | Number of statements that invoke Inner Procedures.
Inner Procedures | Number of structured pieces of code that cannot be invoked from external programs: Natural inline subroutines.
Intelligent Content | I = L * V, where L is Program Level and V is Program Volume. Complexity of a given algorithm independent of the language used to express the algorithm.
IO Statements | Number of statements performing input/output operations.
Lines of Code | Number of lines of code, plus the number of lines of code in included files and any files they include. Comments and blank lines are not counted.
LINK Statements | Number of CICS LINK statements.
Logical Operators in Conditions | Number of binary logical operators used in conditions.
Loop Statements | Number of repetitively executing statements.
Maintainability Index | MI = 171 - 5.2 * ln (PgmVolume) - 0.23 * ExtCycComp - 16.2 * ln (LOC) + 50 * sin (sqrt (2.46 * CommentLines/SourceLines)), where PgmVolume is Program Volume, ExtCycComp is Extended Cyclomatic Complexity, LOC is Lines of Code, CommentLines is Comment Lines, and SourceLines is Source Lines.
Nesting Level | Maximum nesting of conditional statements within conditional statements (0 if no conditional statements, 1 if no nesting).
Non-returning Calls | Number of non-returning calls, such as Cobol XCTL statements.
Operands | Number of operand occurrences (N2). Operands are variables and literals used in operators. Compare Unique Operands.
Operators | Number of operator occurrences (N1). Operators are executable statements and unary and binary operations. Compare Unique Operators.
Parameters | Number of Natural PARAMETER and PARAMETER USING parameters.
Pointers | Number of data elements declared as pointers.
Program Length | N = N1 + N2, where N1 is Operators and N2 is Operands.
Program Level | L = 1 / D, where D is Difficulty.
Program Volume | V = N * log2(n), where N is Program Length and n is Vocabulary. Minimum number of bits required to code the program.
Programming Effort | E = V / L, where V is Program Volume and L is Program Level. Estimated mental effort required to develop the program.
Programming Time | T = E / 18, where E is the Programming Effort and 18 is Stroud’s Number. Estimated amount of time required to implement the algorithm, in seconds.
Response for Class | Response for class.
Returning Calls | Number of returning calls.
Unique Operands | Number of distinct operands (n2). Operands are variables and literals used in operators. Uniqueness of literals is determined by their notation. Compare Operands.
Unique Operands in Conditions | Number of distinct operands used in conditions.
Unique Operators | Number of distinct operators (n1). Operators are executable statements and unary and binary operations. Compare Operators.
Vocabulary | n = n1 + n2, where n1 is the number of Unique Operators and n2 is the number of Unique Operands.


.NET File

Metric | Description
Average Catch Clauses | Average Catch Clauses in methods.
Average Computational Statements | Average Computational Statements of methods.
Average Conditional Complexity | Average Conditional Complexity of methods.
Average Conditional Statements | Average Conditional Statements of mehods.
Average Cyclomatic Complexity | Average Cyclomatic Complexity of methods.
Average Essential Complexity | Average Essential Complexity of methods.
Average Extended Cyclomatic Complexity | Average Extended Cyclomatic Complexity of methods.
Average IF Statements | Average IF Statements in methods.
Average Loop Statements | Average Loop Statements in methods.
Average Parameters | Average Parameters in methods.
Average Unique Method Calls | Average Unique Method Calls in methods.
Difficulty | D = (n1 / 2) * (N2 / n2), where n1 is Unique Operators, N2 is Operands, and n2 is Unique Operands.
Executable Statements | All assignments, function calls (alone on a line), calls, returns, IF, DO, FOR, CHOOSE, EXIT, CONTINUE, and GOTO statements.
Function Calls | Number of function calls.
Function Points | Lines of Code divided by K, where K depends on the language: Cobol=77, Natural=52, PL/I=67, PowerBuilder=24. Estimate of the number of end-user business functions implemented by the program.
GoTo Statements | Number of GOTO statements, including conditional GOTOs.
Intelligent Content | I = L * V, where L is Program Level and V is Program Volume. Complexity of a given algorithm independent of the language used to express the algorithm.
Lines of Code | Number of lines of code, plus the number of lines of code in included files and any files they include. Comments and blank lines are not counted.
Lines with Both Comments and Code | Number of lines of source containing both comments and code.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Logical Operators in Conditions | Number of binary logical operators used in conditions.
Maintainability Index | MI = 171 - 5.2 * ln (PgmVolume) - 0.23 * ExtCycComp - 16.2 * ln (LOC) + 50 * sin (sqrt (2.46 * CommentLines/SourceLines)), where PgmVolume is Program Volume, ExtCycComp is Extended Cyclomatic Complexity, LOC is Lines of Code, CommentLines is Comment Lines, and SourceLines is Source Lines.
Maximum Depth of Logic Nesting | Maximum nesting of logic.
Maximum Switch Cases | Maximum Switch Cases.
Member Function Calls | Number of member function calls.
Methods | Number of methods.
Operands | Number of operand occurrences (N2). Operands are variables and literals used in operators. Compare Unique Operands.
Operators | Number of operator occurrences (N1). Operators are executable statements and unary and binary operations. Compare Unique Operators.
Program Length | N = N1 + N2, where N1 is Operators and N2 is Operands.
Program Level | L = 1 / D, where D is Difficulty.
Programming Effort | E = V / L, where V is Program Volume and L is Program Level. Estimated mental effort required to develop the program.
Switch Cases | Number of SWITCH cases.
SWITCH/SELECT Statements | Number of SWITCH statements.
Unique Operands | Number of distinct operands (n2). Operands are variables and literals used in operators. Uniqueness of literals is determined by their notation. Compare Operands.
Unique Operands in Conditions | Number of distinct operands used in conditions.
Unique Operators | Number of distinct operators (n1). Operators are executable statements and unary and binary operations. Compare Operators.
Vocabulary | n = n1 + n2, where n1 is the number of Unique Operators and n2 is the number of Unique Operands.


.NET Method

Metric | Description
Catch Clauses | Number of catch clauses.
Computational Statements | Number of statements performing arithmetic calculations.
Conditional Complexity | Binary Decisions, plus Unique Operands in Conditions.
Conditional Statements | Number of branching statements with nested statements executed under certain conditions.
Cyclomatic Complexity | v(G) = e - n + 2, where v(G) is the cyclomatic complexity of the flow graph (G) for the program in question, e is the number of edges in G, and n is the number of nodes. Quantity of decision logic. The number of linearly independent paths (minimum number of paths to be tested). v(G) = DE + 1, where DE is the number of binary decisions made in the program.
Difficulty | D = (n1 / 2) * (N2 / n2), where n1 is Unique Operators, N2 is Operands, and n2 is Unique Operands.
Essential Complexity | Quantity of unstructured logic (a loop with an exiting GOTO statement, for example). v(G) for reduced graph without D-structured primes.
Executable Statements | All assignments, function calls (alone on a line), calls, returns, IF, DO, FOR, CHOOSE, EXIT, CONTINUE, and GOTO statements.
Extended Cyclomatic Complexity | Cyclomatic Complexity, plus Logical Operators in Conditions. Number of all paths in the program.
Function Calls | Number of function calls.
Function Points | Lines of Code divided by K, where K depends on the language: Cobol=77, Natural=52, PL/I=67, PowerBuilder=24. Estimate of the number of end-user business functions implemented by the program.
GoTo Statements | Number of GOTO statements, including conditional GOTOs.
IF Statements | Number of IF statements.
Intelligent Content | I = L * V, where L is Program Level and V is Program Volume. Complexity of a given algorithm independent of the language used to express the algorithm.
Lines of Code | Number of lines of code, plus the number of lines of code in included files and any files they include. Comments and blank lines are not counted.
Lines with Both Comments and Code | Number of lines of source containing both comments and code.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Logical Operators in Conditions | Number of binary logical operators used in conditions.
Loop Statements | Number of repetitively executing statements.
Maintainability Index | MI = 171 - 5.2 * ln (PgmVolume) - 0.23 * ExtCycComp - 16.2 * ln (LOC) + 50 * sin (sqrt (2.46 * CommentLines/SourceLines)), where PgmVolume is Program Volume, ExtCycComp is Extended Cyclomatic Complexity, LOC is Lines of Code, CommentLines is Comment Lines, and SourceLines is Source Lines.
Maximum Depth of Logic Nesting | Maximum nesting of logic.
Maximum Switch Cases | Maximum Switch Cases.
Member Function Calls | Number of member function calls.
Operands | Number of operand occurrences (N2). Operands are variables and literals used in operators. Compare Unique Operands.
Operators | Number of operator occurrences (N1). Operators are executable statements and unary and binary operations. Compare Unique Operators.
Parameters | Number of parameters in method calls.
Program Length | N = N1 + N2, where N1 is Operators and N2 is Operands.
Program Level | L = 1 / D, where D is Difficulty.
Programming Effort | E = V / L, where V is Program Volume and L is Program Level. Estimated mental effort required to develop the program.
Switch Cases | Number of SWITCH cases.
SWITCH/SELECT Statements | Number of SWITCH statements.
Unique Method Calls | Number of distinct method calls.
Unique Operands | Number of distinct operands (n2). Operands are variables and literals used in operators. Uniqueness of literals is determined by their notation. Compare Operands.
Unique Operands in Conditions | Number of distinct operands used in conditions.
Unique Operators | Number of distinct operators (n1). Operators are executable statements and unary and binary operations. Compare Operators.
Vocabulary | n = n1 + n2, where n1 is the number of Unique Operators and n2 is the number of Unique Operands.


.NET Project

Metric | Description
Average Computational Statements | Average Computational Statements of methods.
Average Conditional Complexity | Average Conditional Complexity of methods.
Average Conditional Statements | Average Conditional Statements of mehods.
Average Cyclomatic Complexity | Average Cyclomatic Complexity of methods.
Average Depth of Inheritance Hierarchy | Average Depth of Inheritance Hierarchy of classes and interfaces.
Average Essential Complexity | Average Essential Complexity of methods.
Average Extended Cyclomatic Complexity | Average Extended Cyclomatic Complexity of methods.
Average IF Statements | Average IF Statements in methods.
Average Loop Statements | Average Loop Statements in methods.
Average Parameters | Average Parameters in methods.
Average Unique Method Calls | Average Unique Method Calls in methods.
Catch Clauses | Number of catch clauses.
Difficulty | D = (n1 / 2) * (N2 / n2), where n1 is Unique Operators, N2 is Operands, and n2 is Unique Operands.
Executable Statements | All assignments, function calls (alone on a line), calls, returns, IF, DO, FOR, CHOOSE, EXIT, CONTINUE, and GOTO statements.
Fields | Number of fields.
Function Calls | Number of function calls.
Function Points | Lines of Code divided by K, where K depends on the language: Cobol=77, Natural=52, PL/I=67, PowerBuilder=24. Estimate of the number of end-user business functions implemented by the program.
GoTo Statements | Number of GOTO statements, including conditional GOTOs.
Intelligent Content | I = L * V, where L is Program Level and V is Program Volume. Complexity of a given algorithm independent of the language used to express the algorithm.
Lines of Code | Number of lines of code, plus the number of lines of code in included files and any files they include. Comments and blank lines are not counted.
Lines with Both Comments and Code | Number of lines of source containing both comments and code.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Logical Operators in Conditions | Number of binary logical operators used in conditions.
Maintainability Index | MI = 171 - 5.2 * ln (PgmVolume) - 0.23 * ExtCycComp - 16.2 * ln (LOC) + 50 * sin (sqrt (2.46 * CommentLines/SourceLines)), where PgmVolume is Program Volume, ExtCycComp is Extended Cyclomatic Complexity, LOC is Lines of Code, CommentLines is Comment Lines, and SourceLines is Source Lines.
Maximum Depth of Logic Nesting | Maximum nesting of logic.
Maximum Switch Cases | Maximum Switch Cases.
Member Function Calls | Number of member function calls.
Methods | Number of methods.
Operands | Number of operand occurrences (N2). Operands are variables and literals used in operators. Compare Unique Operands.
Operators | Number of operator occurrences (N1). Operators are executable statements and unary and binary operations. Compare Unique Operators.
Program Length | N = N1 + N2, where N1 is Operators and N2 is Operands.
Program Level | L = 1 / D, where D is Difficulty.
Programming Effort | E = V / L, where V is Program Volume and L is Program Level. Estimated mental effort required to develop the program.
Static Fields | Number of static fields.
Subtypes | Number of subtypes.
Switch Cases | Number of SWITCH cases.
SWITCH/SELECT Statements | Number of SWITCH statements.
Unique Operands | Number of distinct operands (n2). Operands are variables and literals used in operators. Uniqueness of literals is determined by their notation. Compare Operands.
Unique Operands in Conditions | Number of distinct operands used in conditions.
Unique Operators | Number of distinct operators (n1). Operators are executable statements and unary and binary operations. Compare Operators.
Vocabulary | n = n1 + n2, where n1 is the number of Unique Operators and n2 is the number of Unique Operands.


.NET Type

Metric | Description
Average Computational Statements | Average Computational Statements of methods.
Average Conditional Complexity | Average Conditional Complexity of methods.
Average Conditional Statements | Average Conditional Statements of mehods.
Average Cyclomatic Complexity | Average Cyclomatic Complexity of methods.
Average Essential Complexity | Average Essential Complexity of methods.
Average Extended Cyclomatic Complexity | Average Extended Cyclomatic Complexity of methods.
Average IF Statements | Average IF Statements in methods.
Average Loop Statements | Average Loop Statements in methods.
Average Parameters | Average Parameters in methods.
Average Unique Method Calls | Average Unique Method Calls in methods.
Catch Clauses | Number of catch clauses.
Depth of Inheritance Hierarchy | Maximum nesting of the inheritance hierarchy.
Difficulty | D = (n1 / 2) * (N2 / n2), where n1 is Unique Operators, N2 is Operands, and n2 is Unique Operands.
Executable Statements | All assignments, function calls (alone on a line), calls, returns, IF, DO, FOR, CHOOSE, EXIT, CONTINUE, and GOTO statements.
Fields | Number of fields.
Function Calls | Number of function calls.
Function Points | Lines of Code divided by K, where K depends on the language: Cobol=77, Natural=52, PL/I=67, PowerBuilder=24. Estimate of the number of end-user business functions implemented by the program.
GoTo Statements | Number of GOTO statements, including conditional GOTOs.
Intelligent Content | I = L * V, where L is Program Level and V is Program Volume. Complexity of a given algorithm independent of the language used to express the algorithm.
Lines of Code | Number of lines of code, plus the number of lines of code in included files and any files they include. Comments and blank lines are not counted.
Lines with Both Comments and Code | Number of lines of source containing both comments and code.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Logical Operators in Conditions | Number of binary logical operators used in conditions.
Maintainability Index | MI = 171 - 5.2 * ln (PgmVolume) - 0.23 * ExtCycComp - 16.2 * ln (LOC) + 50 * sin (sqrt (2.46 * CommentLines/SourceLines)), where PgmVolume is Program Volume, ExtCycComp is Extended Cyclomatic Complexity, LOC is Lines of Code, CommentLines is Comment Lines, and SourceLines is Source Lines.
Maximum Depth of Logic Nesting | Maximum nesting of logic.
Maximum Switch Cases | Maximum Switch Cases.
Member Function Calls | Number of member function calls.
Methods | Number of methods.
Operands | Number of operand occurrences (N2). Operands are variables and literals used in operators. Compare Unique Operands.
Operators | Number of operator occurrences (N1). Operators are executable statements and unary and binary operations. Compare Unique Operators.
Program Length | N = N1 + N2, where N1 is Operators and N2 is Operands.
Program Level | L = 1 / D, where D is Difficulty.
Programming Effort | E = V / L, where V is Program Volume and L is Program Level. Estimated mental effort required to develop the program.
Static Fields | Number of static fields.
Subtypes | Number of subtypes.
Switch Cases | Number of SWITCH cases.
SWITCH/SELECT Statements | Number of SWITCH statements.
Unique Operands | Number of distinct operands (n2). Operands are variables and literals used in operators. Uniqueness of literals is determined by their notation. Compare Operands.
Unique Operands in Conditions | Number of distinct operands used in conditions.
Unique Operators | Number of distinct operators (n1). Operators are executable statements and unary and binary operations. Compare Operators.
Vocabulary | n = n1 + n2, where n1 is the number of Unique Operators and n2 is the number of Unique Operands.


OpenROAD Class File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.


OpenROAD Class Method

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.


OpenROAD Event

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.


OpenROAD Frame File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.


OpenROAD Include File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.


OpenROAD Procedure File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.


PCT File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Entries | Number of entries.
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source, including blank lines and comments.


PL/I File

Metric | Description
Blank Lines | Number of blank lines of source. Blank lines in a comment block are not included.
Comment Lines | Number of lines of source containing comments only and no code. Includes blank lines in a comment block.
Include Statements | Number of include statements: %INCLUDE, EXEC SQL INCLUDE.
Lines with Both Comments and Code | Number of lines of source containing both comments and code.
Macro Assignments | Number of assignments to global macro variables outside any macro procedure.
Macro Declarations | Number of global macro variables. Macro variables within macro procedures are not counted.
Macro Lines | Number of lines for include statements, declarations, macro procedures, and other %-statements, excluding macro invocations. Blank lines and comments lines are ignored.
Macro Procedures | Number of macro procedures declared in the file.
Macro Statements | Number of %-statements and statements inside a macro procedure, excluding macro invocations.
Source Lines | Number of lines of source, including blank lines and comments.
Total Include Statements | Number of include statements in the file and any used include files.


PL/I Include File

Metric | Description
Blank Lines | Number of blank lines of source. Blank lines in a comment block are not included.
Comment Lines | Number of lines of source containing comments only and no code. Includes blank lines in a comment block.
Include Statements | Number of include statements: %INCLUDE, EXEC SQL INCLUDE.
Lines with Both Comments and Code | Number of lines of source containing both comments and code.
Macro Assignments | Number of assignments to global macro variables outside any macro procedure.
Macro Declarations | Number of global macro variables. Macro variables within macro procedures are not counted.
Macro Lines | Number of lines for include statements, declarations, macro procedures, and other %-statements, excluding macro invocations. Blank lines and comments lines are ignored.
Macro Procedures | Number of macro procedures declared in the file.
Macro Statements | Number of %-statements and statements inside a macro procedure, excluding macro invocations.
Source Lines | Number of lines of source, including blank lines and comments.


PL/I Program

Metric | Description
3-Maintainability | 3-MI = 171 - 5.2 * ln (PgmVolume) - 0.23 * ExtCycComp - 16.2 * ln (LOC), where PgmVolume is Program Volume, ExtCycComp is Extended Cyclomatic Complexity, and LOC is Lines of Code.
Absolute Complexity | Binary Decisions divided by the number of statements.
Asynchronous Calls | Number of asynchronous calls, such as Cobol INITIATE statements.
Binary Decisions | Number of branching conditions in the flow graph with two possible outcomes. Includes statements with implicit condition evaluation (loops, AT END, and so on).
Computational Statements | Number of statements performing arithmetic calculations.
Conditional Complexity | Binary Decisions, plus Unique Operands in Conditions.
Conditional Statements | Number of branching statements with nested statements executed under certain conditions.
Cyclomatic Complexity | v(G) = e - n + 2, where v(G) is the cyclomatic complexity of the flow graph (G) for the program in question, e is the number of edges in G, and n is the number of nodes. Quantity of decision logic. The number of linearly independent paths (minimum number of paths to be tested). v(G) = DE + 1, where DE is the number of binary decisions made in the program.
Data Elements | Number of declared data items (elementary structures and their fields). The implicit variable DFHEIBLK for CICS statements is counted as a data element.
Dead Data Elements | Number of declared data items in dead internal procedures.
Dead Lines | Number of dead lines in programs and used include files. Dead lines are source lines containing Dead Data Elements or Dead Statements.
Dead Lines from Includes | Number of dead lines in include files. Dead lines are source lines containing Dead Data Elements from Includes or Dead Statements from Includes.
Dead Statements | Number of dead statements in programs and used include files. A dead statement is a procedural statement that can never be reached during program execution. DECLARE statements are not calculated as dead statements.
Dead Statements from Includes | Number of dead statements in include files. A dead statement is a procedural statement that can never be reached during program execution.
Difficulty | D = (n1 / 2) * (N2 / n2), where n1 is Unique Operators, N2 is Operands, and n2 is Unique Operands.
Entry Points | Number of program entry points.
Error Estimate | B = E**(2/3) / 3000, where E is Programming Effort.
Essential Complexity | Quantity of unstructured logic (a loop with an exiting GOTO statement, for example). v(G) for reduced graph without D-structured primes.
Executable Statements | All statements, except BEGIN, DECLARE, DO (block), END, ENTRY, PACKAGE, and PROCEDURE.
Extended Cyclomatic Complexity | Cyclomatic Complexity, plus Logical Operators in Conditions. Number of all paths in the program.
Function Points | Lines of Code divided by K, where K depends on the language: Cobol=77, Natural=52, PL/I=67, PowerBuilder=24. Estimate of the number of end-user business functions implemented by the program.
GoTo Statements | Number of GOTO statements, including conditional GOTOs.
Inner Call Statements | Number of statements that invoke Inner Procedures.
Inner Procedures | Number of structured pieces of code that cannot be invoked from external programs: inner PL/I procedures.
Intelligent Content | I = L * V, where L is Program Level and V is Program Volume. Complexity of a given algorithm independent of the language used to express the algorithm.
IO Statements | Number of statements performing input/output operations.
Lines of Code | Number of lines of code, plus the number of lines of code in included files and any files they include. Comments and blank lines are not counted.
LINK Statements | Number of CICS LINK statements.
Logical Operators in Conditions | Number of binary logical operators used in conditions.
Loop Statements | Number of repetitively executing statements.
Maintainability Index | MI = 171 - 5.2 * ln (PgmVolume) - 0.23 * ExtCycComp - 16.2 * ln (LOC) + 50 * sin (sqrt (2.46 * CommentLines/SourceLines)), where PgmVolume is Program Volume, ExtCycComp is Extended Cyclomatic Complexity, LOC is Lines of Code, CommentLines is Comment Lines, and SourceLines is Source Lines.
Nesting Level | Maximum nesting of conditional statements within conditional statements (0 if no conditional statements, 1 if no nesting).
Non-returning Calls | Number of non-returning calls, such as Cobol XCTL statements.
Operands | Number of operand occurrences (N2). Operands are variables and literals used in operators. Compare Unique Operands.
Operators | Number of operator occurrences (N1). Operators are executable statements and unary and binary operations. Compare Unique Operators.
Parameters | Number of PL/I PROCEDURE parameters.
Pointers | Number of data elements declared as pointers.
Program Length | N = N1 + N2, where N1 is Operators and N2 is Operands.
Program Level | L = 1 / D, where D is Difficulty.
Program Volume | V = N * log2(n), where N is Program Length and n is Vocabulary. Minimum number of bits required to code the program.
Programming Effort | E = V / L, where V is Program Volume and L is Program Level. Estimated mental effort required to develop the program.
Programming Time | T = E / 18, where E is the Programming Effort and 18 is Stroud’s Number. Estimated amount of time required to implement the algorithm, in seconds.
Response for Class | Response for class.
Returning Calls | Number of returning calls.
Sliceable Dead Lines | Number of Dead Lines that can be sliced using the Application Architect Dead Code Elimination method. Dead procedures containing either preprocessor statements or statements subject to macro preprocessor replacement are not counted as sliceable dead lines, since it is not always possible to determine whether they can be safely removed. Lines from include files are not counted.
Unique Operands | Number of distinct operands (n2). Operands are variables and literals used in operators. Uniqueness of literals is determined by their notation. Compare Operands.
Unique Operands in Conditions | Number of distinct operands used in conditions.
Unique Operators | Number of distinct operators (n1). Operators are executable statements and unary and binary operations. Compare Operators.
Vocabulary | n = n1 + n2, where n1 is the number of Unique Operators and n2 is the number of Unique Operands.


PowerBuilder Application File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.


PowerBuilder Method

Metric | Description
Absolute Complexity | Binary Decisions divided by the number of statements.
Binary Decisions | Number of branching conditions in the flow graph with two possible outcomes. Includes statements with implicit condition evaluation (loops, AT END, and so on).
Catch Clauses | Number of catch clauses.
Comments Ratio | Number of Comments divided by Lines of Code.
Computational Statements | Number of statements performing arithmetic calculations.
Conditional Complexity | Binary Decisions, plus Unique Operands in Conditions.
Constructors | Number of constructors.
Cyclomatic Complexity | v(G) = e - n + 2, where v(G) is the cyclomatic complexity of the flow graph (G) for the program in question, e is the number of edges in G, and n is the number of nodes. Quantity of decision logic. The number of linearly independent paths (minimum number of paths to be tested). v(G) = DE + 1, where DE is the number of binary decisions made in the program.
Difficulty | D = (n1 / 2) * (N2 / n2), where n1 is Unique Operators, N2 is Operands, and n2 is Unique Operands.
Error Estimate | B = E**(2/3) / 3000, where E is Programming Effort.
Essential Complexity | Quantity of unstructured logic (a loop with an exiting GOTO statement, for example). v(G) for reduced graph without D-structured primes.
Executable Statements | All assignments, function calls (alone on a line), calls, returns, IF, DO, FOR, CHOOSE, EXIT, CONTINUE, and GOTO statements.
Extended Cyclomatic Complexity | Cyclomatic Complexity, plus Logical Operators in Conditions. Number of all paths in the program.
Function Points | Lines of Code divided by K, where K depends on the language: Cobol=77, Natural=52, PL/I=67, PowerBuilder=24. Estimate of the number of end-user business functions implemented by the program.
IF Statements | Number of IF statements.
Intelligent Content | I = L * V, where L is Program Level and V is Program Volume. Complexity of a given algorithm independent of the language used to express the algorithm.
Lines of Code | Number of lines of code, plus the number of lines of code in included files and any files they include. Comments and blank lines are not counted.
Logical Operators in Conditions | Number of binary logical operators used in conditions.
Loop Statements | Number of repetitively executing statements.
Maintainability Index | MI = 171 - 5.2 * ln (PgmVolume) - 0.23 * ExtCycComp - 16.2 * ln (LOC) + 50 * sin (sqrt (2.46 * CommentLines/SourceLines)), where PgmVolume is Program Volume, ExtCycComp is Extended Cyclomatic Complexity, LOC is Lines of Code, CommentLines is Comment Lines, and SourceLines is Source Lines.
Maximum Switch Cases | Maximum Switch Cases.
Nested Block Depth | Maximum nesting of IF, CHOOSE, TRY, DO, SWITCH, or FOR constructs. 1 is added to the depth in the IF and ELSE parts of IF statements, the bodies of loops, and the code in each case of a Choose statement.
Number of Comments | Number of lines of source containing comments only and no code.
Operands | Number of operand occurrences (N2). Operands are variables and literals used in operators. Compare Unique Operands.
Operators | Number of operator occurrences (N1). Operators are executable statements and unary and binary operations. Compare Unique Operators.
Parameters | Number of parameters in method calls.
Program Length | N = N1 + N2, where N1 is Operators and N2 is Operands.
Program Level | L = 1 / D, where D is Difficulty.
Program Volume | V = N * log2(n), where N is Program Length and n is Vocabulary. Minimum number of bits required to code the program.
Programming Effort | E = V / L, where V is Program Volume and L is Program Level. Estimated mental effort required to develop the program.
Programming Time | T = E / 18, where E is the Programming Effort and 18 is Stroud’s Number. Estimated amount of time required to implement the algorithm, in seconds.
Response for Class | Response for class.
Switch Cases | Number of SWITCH cases.
Switch/Choose Statements | Number of SWITCH in Java, CHOOSE statements. in PowerBuilders.
Unique Method Calls | Number of distinct method calls.
Unique Operands | Number of distinct operands (n2). Operands are variables and literals used in operators. Uniqueness of literals is determined by their notation. Compare Operands.
Unique Operands in Conditions | Number of distinct operands used in conditions.
Unique Operators | Number of distinct operators (n1). Operators are executable statements and unary and binary operations. Compare Operators.
Vocabulary | n = n1 + n2, where n1 is the number of Unique Operators and n2 is the number of Unique Operands.


PowerBuilder Object

Metric | Description
Average Cyclomatic Complexity | Average Cyclomatic Complexity of methods.
Average Nested Block Depth | Average Nested Block Depth of methods.
Average Parameters | Average Parameters in methods.
Comments Ratio | Number of Comments divided by Lines of Code.
Constructors | Number of constructors.
Depth of Inheritance Hierarchy | Maximum nesting of the inheritance hierarchy.
Error Estimate | B = E**(2/3) / 3000, where E is Programming Effort.
Executable Statements | All assignments, function calls (alone on a line), calls, returns, IF, DO, FOR, CHOOSE, EXIT, CONTINUE, and GOTO statements.
Fields | Number of fields.
Intelligent Content | I = L * V, where L is Program Level and V is Program Volume. Complexity of a given algorithm independent of the language used to express the algorithm.
Lines of Code | Number of lines of code, plus the number of lines of code in included files and any files they include. Comments and blank lines are not counted.
Maintainability Index | MI = 171 - 5.2 * ln (PgmVolume) - 0.23 * ExtCycComp - 16.2 * ln (LOC) + 50 * sin (sqrt (2.46 * CommentLines/SourceLines)), where PgmVolume is Program Volume, ExtCycComp is Extended Cyclomatic Complexity, LOC is Lines of Code, CommentLines is Comment Lines, and SourceLines is Source Lines.
Methods | Number of methods.
Number of Comments | Number of lines of source containing comments only and no code.
Operands | Number of operand occurrences (N2). Operands are variables and literals used in operators. Compare Unique Operands.
Operators | Number of operator occurrences (N1). Operators are executable statements and unary and binary operations. Compare Unique Operators.
Program Length | N = N1 + N2, where N1 is Operators and N2 is Operands.
Program Level | L = 1 / D, where D is Difficulty.
Program Volume | V = N * log2(n), where N is Program Length and n is Vocabulary. Minimum number of bits required to code the program.
Programming Effort | E = V / L, where V is Program Volume and L is Program Level. Estimated mental effort required to develop the program.
Programming Time | T = E / 18, where E is the Programming Effort and 18 is Stroud’s Number. Estimated amount of time required to implement the algorithm, in seconds.
Response for Class | Response for class.
Static Fields | Number of static fields.
Subtypes | Number of subtypes.
Subtypes | Number of subtypes.
Unique Method Calls | Number of distinct method calls.
Unique Operands | Number of distinct operands (n2). Operands are variables and literals used in operators. Uniqueness of literals is determined by their notation. Compare Operands.
Unique Operands in Conditions | Number of distinct operands used in conditions.
Unique Operators | Number of distinct operators (n1). Operators are executable statements and unary and binary operations. Compare Operators.
Vocabulary | n = n1 + n2, where n1 is the number of Unique Operators and n2 is the number of Unique Operands.
Weighted Methods | Number of weighted methods.


PowerBuilder Script File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.


PSB Copybook File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source, including blank lines and comments.


PSB File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Number of PCBs | Number of PCBs.
Source Lines | Number of lines of source, including blank lines and comments.
Total Include Statements | Number of include statements in the file and any used include files.


RPG Copybook File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.


RPG File

Enter a short description of your topic here (optional).

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.
Total Include Statements | Total Include Statements.


System Definition File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Entries | Number of entries.
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source, including blank lines and comments.


Unisys 2200 Program

Metric | Description
3-Maintainability | 3-MI = 171 - 5.2 * ln (PgmVolume) - 0.23 * ExtCycComp - 16.2 * ln (LOC), where PgmVolume is Program Volume, ExtCycComp is Extended Cyclomatic Complexity, and LOC is Lines of Code.
Absolute Complexity | Binary Decisions divided by the number of statements.
Asynchronous Calls | Number of asynchronous calls, such as Cobol INITIATE statements.
Binary Decisions | Number of branching conditions in the flow graph with two possible outcomes. Includes statements with implicit condition evaluation (loops, AT END, and so on): IF, EVALUATE (number of WHEN except WHEN OTHER), PERFORM…TIMES, PERFORM…UNTIL, PERFORM…VARYING, PERFORM…VARYING…AFTER (number of AFTER phrases + 1), statements with ON/NOT ON, AT END/NOT AT END, INVALID/NOT INVALID (one decision per statement), GOTO…DEPENDING ON (number of alternatives), SEARCH (number of WHEN, AT END). CDML: IF. IDMS: IF.
Computational Statements | Number of statements performing arithmetic calculations: ADD, SUBTRACT, DIVIDE, MULTIPLY, COMPUTE.
Conditional Complexity | Binary Decisions, plus Unique Operands in Conditions.
Conditional Statements | Number of branching statements with nested statements executed under certain conditions, not including conditional GOTOs. IF, EVALUATE, SEARCH, PERFORM…UNTIL, PERFORM…VARYING…UNTIL, statements with ON/NOT ON, AT END/NOT AT END, INVALID/NOT INVALID. CDML: IF. IDMS: IF.
Cyclomatic Complexity | v(G) = e - n + 2, where v(G) is the cyclomatic complexity of the flow graph (G) for the program in question, e is the number of edges in G, and n is the number of nodes. Quantity of decision logic. The number of linearly independent paths (minimum number of paths to be tested). v(G) = DE + 1, where DE is the number of binary decisions made in the program.
Data Elements | Number of declared data items (elementary structures and their fields).
Dead Data Elements | Number of dead data elements in programs and used include files. Dead data elements are unused structures at any data level, all of whose parents and children are unused.
Dead Data Elements from Includes | Number of dead data elements in include files. Dead data elements are unused structures at any data level, all of whose parents and children are unused.
Dead Lines | Number of dead lines in programs and used include files. Dead lines are source lines containing Dead Data Elements or Dead Statements. Also, source lines containing dead constructs.
Dead Lines from Includes | Number of dead lines in include files. Dead lines are source lines containing Dead Data Elements from Includes or Dead Statements from Includes. Also, source lines containing dead constructs.
Dead Statements | Number of dead statements in programs and used include files. A dead statement is a procedural statement that can never be reached during program execution.
Dead Statements from Includes | Number of dead statements in include files. A dead statement is a procedural statement that can never be reached during program execution.
Difficulty | D = (n1 / 2) * (N2 / n2), where n1 is Unique Operators, N2 is Operands, and n2 is Unique Operands.
Entry Points | Number of program entry points: PROCEDURE DIVISION, ENTRY.
Error Estimate | B = E**(2/3) / 3000, where E is Programming Effort.
Essential Complexity | Quantity of unstructured logic (a loop with an exiting GOTO statement, for example). v(G) for reduced graph without D-structured primes.
Executable Statements | All Procedure Division statements, plus CONTINUE and NEXT STATEMENT.
Extended Cyclomatic Complexity | Cyclomatic Complexity, plus Logical Operators in Conditions. Number of all paths in the program.
Function Points | Lines of Code divided by K, where K depends on the language: Cobol=77, Natural=52, PL/I=67, PowerBuilder=24. Estimate of the number of end-user business functions implemented by the program.
GoTo Statements | Number of GOTO statements, including conditional GOTOs.
Inner Call Statements | Number of statements that invoke Inner Procedures: PERFORM procedure-name.
Inner Procedures | Number of structured pieces of code that cannot be invoked from external programs: Cobol paragraphs (including nameless).
Intelligent Content | I = L * V, where L is Program Level and V is Program Volume. Complexity of a given algorithm independent of the language used to express the algorithm.
IO Statements | Number of statements performing input/output operations: OPEN, CLOSE, READ, WRITE, REWRITE, DELETE, START, SORT, MERGE, RETURN, RELEASE, ACCEPT, DISPLAY, STOP literal. SQL: INSERT, FETCH, SELECT, UPDATE, DELETE, EXECUTE. CICS: CONVERSE, SEND, SEND MAP, SEND TEXT, RECEIVE, RECEIVE MAP, RECEIVE TEXT, READQ, WRITEQ, DELETEQ, READ, READNEXT, READPREV, WRITE, REWRITE, DELETE. CDML: OPEN, CLOSE, FETCH, GET, DELETE, MODIFY, STORE, INSERT, REMOVE. IDMS: ERASE, OBTAIN, GET, MODIFY, STORE.
Lines of Code | Number of lines of code, plus the number of lines of code in included files and any files they include. Comments and blank lines are not counted.
LINK Statements | Number of CICS LINK statements.
Logical Operators in Conditions | Number of binary logical operators used in conditions: AND, OR.
Loop Statements | Number of repetitively executing statements: PERFORM…TIMES, PERFORM…UNTIL, PERFORM…VARYING PERFORM…VARYING…AFTER (# of AFTER + 1).
Maintainability Index | MI = 171 - 5.2 * ln (PgmVolume) - 0.23 * ExtCycComp - 16.2 * ln (LOC) + 50 * sin (sqrt (2.46 * CommentLines/SourceLines)), where PgmVolume is Program Volume, ExtCycComp is Extended Cyclomatic Complexity, LOC is Lines of Code, CommentLines is Comment Lines, and SourceLines is Source Lines.
Nesting Level | Maximum nesting of conditional statements within conditional statements (0 if no conditional statements, 1 if no nesting).
Non-returning Calls | Number of non-returning calls, such as Cobol XCTL statements.
Operands | Number of operand occurrences (N2). Operands are variables and literals used in operators. Compare Unique Operands.
Operators | Number of operator occurrences (N1). Operators are executable statements and unary and binary operations: +, -, *, /, **, NOT, AND, OR, <, <=, >, >=, =, IS, (subscript), (reference:modification), FUNCTION. Compare Unique Operators.
Parameters | Number of Cobol Procedure Division USING...RETURNING parameters.
Pointers | Number of data elements declared as pointers. Data items with USAGE IS POINTER, PROCEDURE-POINTER.
Program Length | N = N1 + N2, where N1 is Operators and N2 is Operands.
Program Level | L = 1 / D, where D is Difficulty.
Program Volume | V = N * log2(n), where N is Program Length and n is Vocabulary. Minimum number of bits required to code the program.
Programming Effort | E = V / L, where V is Program Volume and L is Program Level. Estimated mental effort required to develop the program.
Programming Time | T = E / 18, where E is the Programming Effort and 18 is Stroud’s Number. Estimated amount of time required to implement the algorithm, in seconds.
Response for Class | Response for class.
Unique Operands | Number of distinct operands (n2). Operands are variables and literals used in operators. Uniqueness of literals is determined by their notation. Compare Operands.
Unique Operands in Conditions | Number of distinct operands used in conditions.
Unique Operators | Number of distinct operators (n1). Operators are executable statements and unary and binary operations: +, -, *, /, **, NOT, AND, OR, <, <=, >, >=, =, IS, (subscript), (reference:modification), FUNCTION. Compare Operators.
Vocabulary | n = n1 + n2, where n1 is the number of Unique Operators and n2 is the number of Unique Operands.


VALTAB File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Number of Entries | Number of entries.
Source Lines | Number of lines of source.


VB Class

Metric | Description
Destructors | Number of destructors.
Error Estimate | B = E**(2/3) / 3000, where E is Programming Effort.
Executable Statements | All assignments, function calls (alone on a line), calls, returns, IF, DO, FOR, CHOOSE, EXIT, CONTINUE, and GOTO statements.
Fields | Number of fields.
Function Points | Lines of Code divided by K, where K depends on the language: Cobol=77, Natural=52, PL/I=67, PowerBuilder=24. Estimate of the number of end-user business functions implemented by the program.
Inherited Methods | Number of inherited methods.
Intelligent Content | I = L * V, where L is Program Level and V is Program Volume. Complexity of a given algorithm independent of the language used to express the algorithm.
Lines of Code | Number of lines of code, plus the number of lines of code in included files and any files they include. Comments and blank lines are not counted.
Logical Operators in Conditions | Number of binary logical operators used in conditions.
Methods | Number of methods.
Operands | Number of operand occurrences (N2). Operands are variables and literals used in operators. Compare Unique Operands.
Operators | Number of operator occurrences (N1). Operators are executable statements and unary and binary operations. Compare Unique Operators.
Program Length | N = N1 + N2, where N1 is Operators and N2 is Operands.
Program Level | L = 1 / D, where D is Difficulty.
Program Volume | V = N * log2(n), where N is Program Length and n is Vocabulary. Minimum number of bits required to code the program.
Programming Effort | E = V / L, where V is Program Volume and L is Program Level. Estimated mental effort required to develop the program.
Programming Time | T = E / 18, where E is the Programming Effort and 18 is Stroud’s Number. Estimated amount of time required to implement the algorithm, in seconds.
Public Fields | Number of public fields.
Public Methods | Number of public methods.
Static Fields | Number of static fields.
Static Methods | Number of static methods.
Unique Operands | Number of distinct operands (n2). Operands are variables and literals used in operators. Uniqueness of literals is determined by their notation. Compare Operands.
Unique Operands in Conditions | Number of distinct operands used in conditions.
Unique Operators | Number of distinct operators (n1). Operators are executable statements and unary and binary operations. Compare Operators.
Vocabulary | n = n1 + n2, where n1 is the number of Unique Operators and n2 is the number of Unique Operands.


VB File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.


VB Function

Metric | Description
Absolute Complexity | Binary Decisions divided by the number of statements.
Binary Decisions | Number of branching conditions in the flow graph with two possible outcomes. Includes statements with implicit condition evaluation (loops, AT END, and so on).
Computational Statements | Number of statements performing arithmetic calculations.
Conditional Complexity | Binary Decisions, plus Unique Operands in Conditions.
Cyclomatic Complexity | v(G) = e - n + 2, where v(G) is the cyclomatic complexity of the flow graph (G) for the program in question, e is the number of edges in G, and n is the number of nodes. Quantity of decision logic. The number of linearly independent paths (minimum number of paths to be tested). v(G) = DE + 1, where DE is the number of binary decisions made in the program.
Difficulty | D = (n1 / 2) * (N2 / n2), where n1 is Unique Operators, N2 is Operands, and n2 is Unique Operands.
Error Estimate | B = E**(2/3) / 3000, where E is Programming Effort.
Exception Handling Statements | Number of exception handling statements.
Executable Statements | All assignments, function calls (alone on a line), calls, returns, IF, DO, FOR, CHOOSE, EXIT, CONTINUE, and GOTO statements.
Extended Cyclomatic Complexity | Cyclomatic Complexity, plus Logical Operators in Conditions. Number of all paths in the program.
Function Calls | Number of function calls.
Function Points | Lines of Code divided by K, where K depends on the language: Cobol=77, Natural=52, PL/I=67, PowerBuilder=24. Estimate of the number of end-user business functions implemented by the program.
GoTo Statements | Number of GOTO statements, including conditional GOTOs.
IF Statements | Number of IF statements.
Intelligent Content | I = L * V, where L is Program Level and V is Program Volume. Complexity of a given algorithm independent of the language used to express the algorithm.
Labels | Number of labels.
Lines of Code | Number of lines of code, plus the number of lines of code in included files and any files they include. Comments and blank lines are not counted.
Local Data Items | Number of local data items.
Logical Operators in Conditions | Number of binary logical operators used in conditions.
Loop Statements | Number of repetitively executing statements.
Maintainability Index | MI = 171 - 5.2 * ln (PgmVolume) - 0.23 * ExtCycComp - 16.2 * ln (LOC) + 50 * sin (sqrt (2.46 * CommentLines/SourceLines)), where PgmVolume is Program Volume, ExtCycComp is Extended Cyclomatic Complexity, LOC is Lines of Code, CommentLines is Comment Lines, and SourceLines is Source Lines.
Method Calls | Number of method calls.
Nesting Level | Maximum nesting of conditional statements within conditional statements (0 if no conditional statements, 1 if no nesting).
Operands | Number of operand occurrences (N2). Operands are variables and literals used in operators. Compare Unique Operands.
Operators | Number of operator occurrences (N1). Operators are executable statements and unary and binary operations. Compare Unique Operators.
Parameters | Number of parameters in method calls.
Pointers | Number of data elements declared as pointers.
Program Length | N = N1 + N2, where N1 is Operators and N2 is Operands.
Program Level | L = 1 / D, where D is Difficulty.
Program Volume | V = N * log2(n), where N is Program Length and n is Vocabulary. Minimum number of bits required to code the program.
Programming Effort | E = V / L, where V is Program Volume and L is Program Level. Estimated mental effort required to develop the program.
Programming Time | T = E / 18, where E is the Programming Effort and 18 is Stroud’s Number. Estimated amount of time required to implement the algorithm, in seconds.
Static Data Items | Number of static data items.
SWITCH/SELECT Statements | Number of SWITCH statements.
Unique Operands | Number of distinct operands (n2). Operands are variables and literals used in operators. Uniqueness of literals is determined by their notation. Compare Operands.
Unique Operands in Conditions | Number of distinct operands used in conditions.
Unique Operators | Number of distinct operators (n1). Operators are executable statements and unary and binary operations. Compare Operators.
Vocabulary | n = n1 + n2, where n1 is the number of Unique Operators and n2 is the number of Unique Operands.


VB Library

Metric | Description
Classes | Number of classes.
Functions | Number of functions.


VB Method

Metric | Description
Absolute Complexity | Binary Decisions divided by the number of statements.
Binary Decisions | Number of branching conditions in the flow graph with two possible outcomes. Includes statements with implicit condition evaluation (loops, AT END, and so on).
Computational Statements | Number of statements performing arithmetic calculations.
Conditional Complexity | Binary Decisions, plus Unique Operands in Conditions.
Cyclomatic Complexity | v(G) = e - n + 2, where v(G) is the cyclomatic complexity of the flow graph (G) for the program in question, e is the number of edges in G, and n is the number of nodes. Quantity of decision logic. The number of linearly independent paths (minimum number of paths to be tested). v(G) = DE + 1, where DE is the number of binary decisions made in the program.
Difficulty | D = (n1 / 2) * (N2 / n2), where n1 is Unique Operators, N2 is Operands, and n2 is Unique Operands.
Error Estimate | B = E**(2/3) / 3000, where E is Programming Effort.
Exception Handling Statements | Number of exception handling statements.
Executable Statements | All assignments, function calls (alone on a line), calls, returns, IF, DO, FOR, CHOOSE, EXIT, CONTINUE, and GOTO statements.
Extended Cyclomatic Complexity | Cyclomatic Complexity, plus Logical Operators in Conditions. Number of all paths in the program.
Function Calls | Number of function calls.
Function Points | Lines of Code divided by K, where K depends on the language: Cobol=77, Natural=52, PL/I=67, PowerBuilder=24. Estimate of the number of end-user business functions implemented by the program.
GoTo Statements | Number of GOTO statements, including conditional GOTOs.
IF Statements | Number of IF statements.
Intelligent Content | I = L * V, where L is Program Level and V is Program Volume. Complexity of a given algorithm independent of the language used to express the algorithm.
Labels | Number of labels.
Lines of Code | Number of lines of code, plus the number of lines of code in included files and any files they include. Comments and blank lines are not counted.
Local Data Items | Number of local data items.
Logical Operators in Conditions | Number of binary logical operators used in conditions.
Loop Statements | Number of repetitively executing statements.
Maintainability Index | MI = 171 - 5.2 * ln (PgmVolume) - 0.23 * ExtCycComp - 16.2 * ln (LOC) + 50 * sin (sqrt (2.46 * CommentLines/SourceLines)), where PgmVolume is Program Volume, ExtCycComp is Extended Cyclomatic Complexity, LOC is Lines of Code, CommentLines is Comment Lines, and SourceLines is Source Lines.
Method Calls | Number of method calls.
Nesting Level | Maximum nesting of conditional statements within conditional statements (0 if no conditional statements, 1 if no nesting).
Operands | Number of operand occurrences (N2). Operands are variables and literals used in operators. Compare Unique Operands.
Operators | Number of operator occurrences (N1). Operators are executable statements and unary and binary operations. Compare Unique Operators.
Parameters | Number of parameters in method calls.
Pointers | Number of data elements declared as pointers.
Pointers | Number of data elements declared as pointers.
Program Length | N = N1 + N2, where N1 is Operators and N2 is Operands.
Program Level | L = 1 / D, where D is Difficulty.
Program Volume | V = N * log2(n), where N is Program Length and n is Vocabulary. Minimum number of bits required to code the program.
Programming Effort | E = V / L, where V is Program Volume and L is Program Level. Estimated mental effort required to develop the program.
Programming Time | T = E / 18, where E is the Programming Effort and 18 is Stroud’s Number. Estimated amount of time required to implement the algorithm, in seconds.
SELECT (SWITCH) Statements | Number of SWITCH statements.
Static Data Items | Number of static data items.
Unique Operands | Number of distinct operands (n2). Operands are variables and literals used in operators. Uniqueness of literals is determined by their notation. Compare Operands.
Unique Operands in Conditions | Number of distinct operands used in conditions.
Unique Operators | Number of distinct operators (n1). Operators are executable statements and unary and binary operations. Compare Operators.
Vocabulary | n = n1 + n2, where n1 is the number of Unique Operators and n2 is the number of Unique Operands.


VB Project File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.
Total Include Statements | Total Include Statements.


WFL File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.
Total Include Statements | Total Include Statements.


WFL Include File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.


WSDL File

Metric | Description
Blank Lines | Number of blank lines of source (sequence number area content is ignored).
Include Statements | Number of include statements.
Lines with Comments | Number of lines of source containing comments, including inline comments placed on lines with statements.
Source Lines | Number of lines of source.


Relationship Projections Overview

The tables in this section describe the relationships Modernization Workbench generates for statements in each of the major supported languages. The tables are listed alphabetically by language.

MW uses a generic "Program" object for programs written in different languages.


Program Relationship Projections

Explicitly defined calls (using the CALL macro or the commands described in “Using the External Name in a Call” below) are autoresolved at verification. Otherwise, decisions for external calls need to be resolved manually.

Getting the External Name

The following Assembler statements prepare the value of the register with an external name or memory address to which a subsequent call may be resolved.

Example Type External in
L reg, =A(external)
 command Reg
L reg, =V(external)
 command reg
LOAD EP=external
system macro register 0
LOAD EP=name, LOADPT=external
 system macro register 0
name DC =V(external)
L reg, name
 command reg

Using the External Name in a Call

The following Assembler statements create calling relationships from the program object to a program entry point or program entry decision.

Example Type Relationship Entry Point
CALL reg
 system macro Program Calls Program Entry Point

Program Calls Program Entry Decision

reg
CALL name
 system macro Program Calls Program Entry Point

Program Calls Program Entry Decision

name
BAR reg., reg.
 command Program Calls Program Entry Point

Program Calls Program Entry Decision

reg.
BAR reg., reg.
 command Program Calls Program Entry Point

Program Calls Program Entry Decision

reg.
BASS reg., reg.
command Program Calls Program Entry Point

Program Calls Program Entry Decision

reg.

Defining Program Entry Point

The following Assembler statements create Has Program Entry Point relationships for the program.

Example Type Relationship Entry Point
name SECT.
 system macro Program Has Program Entry Point name
ENTRY name
 system macro Program Has Program Entry Point name


BMS File Relationship Projections

Statement Format Relationship Entities
COPY
COPY member
 BMS File Includes BMS Copybook File

For resolved files: BmsCopy.Name = <resolved-name>

For unresolved files: BmsCopy.Name = <member>

DFHMDI
mapset DFHMSD...
map DFHMDI ...
BMS File Defines Screen

Map.Name= <mapset>.<map>

DFHMDI (no mapset)
map DFHMDI ...
 BMS File Defines Screen Map.Name = <source-filename- without-extension>.<map>


BMS Copybook File Relationship Projections

Statement Format Relationship Entities
COPY
COPY member
 BMS Copybook File Includes BMS Copybook File

For resolved files: BmsCopy.Name = <resolved-name>

For unresolved files: BmsCopy.Name= <member>


C File Relationship Projections

Statement Format Relationship Entities
INCLUDE
#include "<header_name>"
C File Includes Header Header.Name=<header_name>
DEFINE FUNCTION
<function_name>([list of parameters]);
 C File Defines Function Function.Name=<function_name>


C++ File Relationship Projections

Statement Format Relationship Entities
INCLUDE
#include "<header_name>"
CPP File Includes Header Header. Name=<header_file>
DEFINE FUNCTION
<function_name>([list of parameters]);
 CPP File Defines Function Function.Name=<function_ name>
DEFINE MEMBER FUNCTION
<member_function_name>([list of parameters]);
 CPP File Defines Function MemberFunction.Name= <member_function_name>
DEFINE CLASS
class <class_name> { };
 CPP File Defines Class Class.Name=<class_ name>
MEMBER FUNCTION
[<result_type>] <member_function_name>
  ([list of parameters]);
CPP File Defines Member Function MemberFunction.Name= <member_function_name>


Header File Relationship Projections

Statement Format Relationship Entities
INCLUDE
#include "<header_name>"
 Header Includes Header Header.Name=<header_ name>
DEFINE FUNCTION
<function_name>([list of parameters]);
Header Defines Function Function.Name=<function_name>
DEFINE CLASS
class <class_name> { };
 Header Defines Class Class.Name=<class_ name>
MEMBER FUNCTION
[<result_type>] <member_function_name>
  ([list of parameters]);
 Header Defines Member Function MemberFunction.Name=<member_function_name>


Class Relationship Projections

Statements Format Relationship Entities
INHERITS
class <class_name1>: [public] <class_name2> { };
 Class Inherits Class Class1.Name=<class_name1>

Class2.Name=<class_name2>

*Any mention of a CLASS that is not a call of its member function*
class <class_name1>
{
<class_name2> variable;
}
 Class Depends On Class Class1.Name=<class_name1>

Class2.Name=<class_name2>

*Any mention of a function that is not a call*
class <class_name>
{
Variable = <function_name>;
}
 Class Depends On Function Class.Name=<class_name>

Function.Name=<function_name>

*Any expression in a position of a class or a function that is not a call*
class <class_name>
{
<expression>
}
 Class Depends On Decision Class.Name=<class_name>

Decision.Name=<internal_name>

CALL
class <class_name>
{
<function_name>([list of parameters]);
}
 Class Calls Function Class.Name=<class_name>

Function.Name=<function_name>

CALL
class <class_name>
{
<member_function_name>([list of parameters]);
}
 Class Calls Member Function Class.Name=<class_name>

Function.Name=<function_name>

CALL
class <class_name>
{
<expression>
}
 Class Calls Decision Class.Name=<class_name>

Decision.Name=<internal_name>

DEFINITION
class <class_name>
{
[result_type] <member_function_name>([list of parameters]){ }
}
 Class Has Member Function Class.Name=<class_name>

MemberFunction.Name=<member_function_name>


Function Relationship Projections

Statement Format Relationship Entities
CALL
<function_name>([list of parameters]);
 Function Calls Function Function.Name=<function_name>
CALL
<member_function_name>([list of parameters]);
 Function Calls Member Function MemberFunction.Name=<member_function_name>
CALL
<expression>;
Function Calls Decision Decision.Name=<internal name>
*any other statement*
<class_name> <variable>;
 Function Depends On Class Class.Name=<class_name>


Program Relationship Projections

Statement Format Relationship Entities
any EXEC CICS

Program.EnvFlags = +CICS

EnvFlags may contain other environment codes, so search as follows: Like '*+CICS*'

DELETE

DELETE FILE ('file-name') …
 Program Deletes From File

File attributes:

  • Name = <program-name>.file-name
  • DD Name = file-name
  • File Type = FILE
  • Online Flag = true

DELETE

(dynamic)

DELETE FILE (file-name) …
 Program Deletes From File Decision

Decision attributes:

  • Name = <program-name>@<internal-name>
  • # Also Known As = <program-name>.DeletesDataPort.<file-name>
  • Decision Type = DATAPORT…
DOCUMENT
DOCUMENT CREATE TEMPLATE ('name') …
DOCUMENT INSERT TEMPLATE ('name') …
Program Uses Document Template DocTemplate.Name = <name>

DOCUMENT

(dynamic)

DOCUMENT CREATE TEMPLATE (name) …
DOCUMENT INSERT TEMPLATE (name) …
Program Uses Document Template Decision

Decision attributes:

  • Name = <program-name>@<internal-name>
  • # Also Known As = <program- name>.UsesDocTemplate<name>
  • Decision Type = DOCTEMPLATE…

INVOKE

INVOKE WEBSERVICE ('name')
OPERATION ('opname') …
Program Invokes Service Service.Name = <name>.<opname>

INVOKE

(dynamic)

INVOKE WEBSERVICE (name)
OPERATION ('opname') …
INVOKE WEBSERVICE ('name')
OPERATION (opname) …
INVOKE WEBSERVICE (name)
OPERATION (opname) …
Program Invokes Service Decision

Decision attributes:

  • Name = <program-name>@<internal-name>
  • # Also Known As = <program- name>. InvokesService.<name>
  • Decision Type = SERVICE…

LINK

LINK PROGRAM ('pgm-name') …
 Program Links Program Entry Point ProgramEntry.Name = <program-name>
If literal is long, only 8 leading characters are used as program name.

LINK

(dynamic)

LINK PROGRAM (pgm-name) …
 Program Links Program Entry Point Decision

Decision attributes:

  • Name = <program-name>@<internal-name>
  • # Also Known As = <program- name>.Links.<program-name>
  • Decision Type = PROGRAMENTRY…

READ READNEXT READPREV

READ FILE ('file-name') …
READNEXT FILE ('file-name') …
READPREV FILE ('file-name') …
Program Reads File

File attributes:

  • Name = <program-name>.file-name
  • DD Name = file-name
  • File Type = FILE
  • Online Flag = true

READ READNEXT READPREV

(dynamic)

READ FILE (file-name) …
READNEXT FILE (file-name) …
READPREV FILE (file-name) …
Program Reads File Decision

Decision attributes:

  • Name = <program-name>@<internal-name>
  • # Also Known As =<program-name>.ReadsDataPort.<file-name>
  • Decision Type = DATAPORT…

RECEIVE

RECEIVE …
 Program.OnlineFlag = true

RECEIVE MAP

RECEIVE MAP ('map-name')
MAPSET ('mapset') …
RECEIVE MAP ('map-name')
Program Receives Screen

Screen.Name = <mapset>. <map-name>

Program.OnlineFlag = true

Screen.Name = <map- name>.<map-name>

Program.OnlineFlag = true

RECEIVE MAP

(dynamic)

RECEIVE MAP (map-name)
MAPSET (‘mapset’) …
RECEIVE MAP (map-name)
RECEIVE MAP (‘map-name’)
MAPSET (mapset) …
RECEIVE MAP (map-name)
MAPSET (mapset) …
Program Receives Screen Decision

Decision attributes:

  • Name =<program-name>@ <internal-name>
  • # Also Known As = <program-name>. Receives. <map-name>
  • Decision Type = MAP …
  • Program.OnlineFlag = true

RETURN

RETURN TRANSID ('name') …
 Program Starts Transaction Transaction.Name = <name>
If literal is long, only 4 leading characters are used as program name.

RETURN

(dynamic)

RETURN TRANSID (name) …
 Program Starts Transaction Decision

Decision attributes:

  • Name = <program-name>@ <internal-name>
  • # Also Known As = <program-name>.Starts.<name>
  • Decision Type = TRANSACTION

REWRITE

REWRITE FILE ('file-name') …
 Program Updates File

File attributes:

  • Name = <program-name>. file-name
  • DD Name = file-name
  • File Type = FILE
  • Online Flag = true

REWRITE

(dynamic)

REWRITE FILE (file-name) …
 Program Updates File Decision

Decision attributes:

  • Name = <program-name>@ <internal-name>
  • # Also Known As = <program-name>. UpdatesDataPort. <file-name>
  • Decision Type = DATAPORT…

SEND MAP

SEND MAP ('map-name')
MAPSET ('mapset') …
SEND MAP ('map-name')
Program Sends Screen

Screen.Name = <mapset>. <map-name>

Program.OnlineFlag = true

Screen.Name = <map- name>.<map-name>

Program.OnlineFlag = true

SEND MAP

(dynamic)

SEND MAP (map-name)
MAPSET ('mapset') …
SEND MAP (map-name)
SEND MAP (‘map-name’)
MAPSET (mapset) …
SEND MAP (map-name)
MAPSET (mapset) …
 Program Sends Screen Decision

Decision attributes:

  • Name = <program-name>@ <internal-name>
  • # Also Known As = <program-name>. Sends.<mapset>
  • Decision Type = MAP …
  • Program.OnlineFlag = true

SEND

SEND
 Program.OnlineFlag = true

START

START TRANSID ('name') …
 Program Starts Transaction Transaction.Name = <name>
If literal is long, only 4 leading characters are used as program name.

START

(dynamic)

START TRANSID (name) …
 Program Starts Transaction Decision

Decision attributes:

  • Name = <program-name>@ <internal-name>
  • # Also Known As = <program-name>. Starts.<name>
  • Decision Type = TRANSACTION

WRITE

WRITE FILE ('file-name') …
 Program Inserts Into File

File attributes:

  • Name = <program-name>. file-name
  • DD Name = file-name
  • File Type = FILE
  • Online Flag = true

WRITE

(dynamic)

WRITE FILE (file-name) …
 Program Inserts Into File Decision

Decision attributes:

  • Name = <program-name>@ <internal-name>
  • # Also Known As = <program-name>. InsertsDataPort. <file-name>
  • Decision Type = DATAPORT…

XCTL

XCTL PROGRAM ('pgm-name') …
 Program Xctls To Program Entry Point ProgramEntry.Name = <pgm-name>
If literal is long, only 8 leading characters are used as program name.

XCTL

(dynamic)

XCTL PROGRAM (pgm-name) …
 Program Xctls To Program Entry Point Decision

Decision attributes:

  • Name = <program-name>@ <internal-name>
  • # Also Known As = <program-name>. Xctls.<pgm-name>
  • Decision Type = PROGRAMENTRY…


Cobol File Relationship Projections

Statement Format Relationship Entities
COPY COPY member [OF library] Cobol File Includes Copybook File

For resolved files: Copybook.Name = <resolved-name>

For unresolved files: Copybook.Name = [<library>.]<member>

++INCLUDE (Panvalet)
++INCLUDE member
 Cobol File Includes Copybook File

For resolved files: Copybook.Name = <resolved-name>

For unresolved files: Copybook.Name = [<library>.]<member>

-INC (Librarian)
-INC member
 Cobol File Includes Copybook File

For resolved files: Copybook.Name = <resolved-name>

For unresolved files: Copybook.Name = [<library>.]<member>

PROGRAM- ID
PROGRAM-ID. name
 Cobol File Defines Program

Program.Name = <name> …


Cobol Copybook File Relationship Projections

Statement Format Relationship Entities
COPY
COPY member [OF library]
 Copybook File Includes Copybook File

For resolved files: Copybook.Name = <resolved-name>

For unresolved files: Copybook.Name = [<library>.]<member>

++INCLUDE (Panvalet)
++INCLUDE member
 Copybook File Includes Copybook File For resolved files: Copybook.Name = <resolved-name>

For unresolved files: Copybook.Name = [<library>.]<member>

-INC (Librarian)
-INC member
Copybook File Includes Copybook File

For resolved files: Copybook.Name = <resolved-name>

For unresolved files: Copybook.Name = [<library>.]<member>


Program Relationship Projections

Statement Format Relationship Entities
ACCEPT
ACCEPT varname
[FROM mnemonic-name]
 Program.OnlineFlag. = True

CALL

CALL ‘name’
 Program Calls Program Entry Point

ProgramEntry.Name = <name>

CALL

(dynamic)

CALL varname
 Program Calls Program Entry Decision

Decision attributes:

  • Name = <program-name>@ <internal-name>
  • #Also Known As = <program-name>. Calls.<varname>
  • Decision Type = PROGRAMENTRY…
ENTRY
ENTRY ‘name’
 Program Has Program Entry Point

ProgramEntry.Name = <name>

ProgramEntry. MainEntry = True

PROGRAM-ID
PROGRAM-ID.name
 Program Has Program Entry Point

ProgramEntry.Name = <name>

ProgramEntry. MainEntry = True

File Description

SELECT file-name
ASSIGN TO [label-][org-] <name1> [assignment- name2…]
FD file-name.01 file-record-name…
 See CRUD statements below.

external-name = <name1>

File attributes:

  • Name = <program-name>. external-file-name
  • DD Name = external-file-name
  • File Type = FILE
A File object is generated only when the first CRUD statement for the file is encountered. File attributes do not depend on the CRUD statement itself.
DELETE
DELETE file-name…
 Program Deletes From File

See File Description for File attributes.

READ
READ file-name…
 Program Reads File

See File Description for File attributes.

REWRITE
REWRITE file-record-name…
 Program Updates File

See File Description for File attributes.

WRITE
WRITE file-record-name…
 Program Inserts Into File

See File Description for File attributes.


CSD File Relationship Projections

Statement Format Relationship Entities

DEFINE DOCTEMPLATE

DEFINE DOCTEMPLATE
(doc-name) GROUP (group-name)...
 CSD File Defines Document Template

DocTemplate.Name = <doc-name>

DEFINE FILE

DEFINE FILE file-name)
GROUP (group-name) DSNAME (dsn-name) LOAD(YES)…
Nothing is generated if LOAD (NO) is specified.

CSD File Has Data Connector

Data Connector Refers To Data Store

Data Connector attributes:

  • Name = CICS.<file-name>
  • DD Name = <file-name>
  • Program Entry Point = *
  • Datastore.Name = <dsn-name>

DEFINE FILE (base file)

NSRGROUP (base-group)
Base file: DEFINE FILE (base-group) DSNAME (base-dsn-name)
 Data Store Based On Data Store

BaseDatastore.Name = <base-dsn-name>

DEFINE TRANSACTION
DEFINE TRANSACTION (tran-name)
GROUP (group-name)
PROGRAM (prg-name)...

CSD File Defines Transaction

Transaction Initiates Program Entry Point

Transaction.Name = <tran-name>

ProgramEntry.Name = <prg-name>

Program.Root = True

Root is empty if Program does not exist in the repository before CSD file verification.


DBD File Relationship Projections

Statement Format Relationship Entities
DBD
DBD NAME=db-name
ACCESS= (db-type, ...) ...
 DBD File Defines Hierarchical Database

HiDatabase.Name = <db-name>

HiDatabase.Type = <db-type>

DATASET (GSAM only)

DATASET DD1=dd-name1,
DD2=dd-name2, ...

Hierarchical Database Has Hierarchical Database Segment

HiSegment.Name = <db-name>. <db-name>

HiSegment.Segment Name = <db-name>

HiSegment.DDName = <dd-name1>

HiSegment. DDName2 = <dd-name2>

SEGM
SEGM NAME=seg-name, ...
NAME= seg-name2,
... dbname2))

Hierarchical Database Has Hierarchical Database Segment

Hierarchical Database Segment Has Logical Child Hierarchical Database Segment

HiSegment.Name = <db-name>. <seg-name>

HiSegment.Segment Name = <seg-name>

HiSegment.Name = <db-name>. <seg-name>

HiSegmentChild. Name = <db-name2> .<seg-name2>

HiSegmentChild. SegmentName = <seg-name2>

LCHILD
SEGM NAME= seg-name,
... LCHILD=
NAME= (seg-name, dbname)

Hierarchical Database Segment Has Logical Child Hierarchical Database Segment

HiSegment.Name = <db-name>. <seg-name>

HiSegmentChild. Name = <db-name> .<seg-name>

HiSegmentChild. SegmentName = <seg-name>


Program Relationship Projections

Statement Format Relationship Entities
ALTER TABLE
ALTER TABLE <table-name> …
 Program Manipulates Table Table.Name = <table-name>
CREATE INDEX
CREATE INDEX <index-name>
ON <table-name> …
Program Manipulates Table Table.Name = <table-name>
CREATE TABLE
CREATE TABLE <table-name>...
 Program Manipulates Table

Table attributes:

  • Name = <table-name>
  • Origin = <source-file-path>
DELETE
DELETE FROM <table-name>…
 Program Deletes From Table Table.Name = <table-name>
DROP TABLE
DROP TABLE <table-name>
 Program Manipulates Table Table.Name = <table-name>
INSERT
INSERT INTO <table-name> …
Program Inserts Into Table Table.Name = <table-name>
SELECT
SELECT … FROM table-name
 Program Reads Table Table.Name = <table-name>
UPDATE
UPDATE <table-name> …
 Program Updates Table Table.Name = <table-name>


FCT File Relationship Projections

Statement Format Relationship Entities

DFHFCT DATASET

DFHFCT TYPE = DATASET,
DATASET = data-set,
DSNAME = dsn-name...

FCT File Has Data Connector

Data Connector Refers To Data Store

Data Connector attributes:
  • Name = CICS.<file-name>
  • DD Name = <file-name>
  • Program Entry Point = *
  • Datastore.Name = <dsn-name>

DFHFCT DATASET (base file)

BASE = base-name
Base file: DFHFCT TYPE = DATASET,
DATASET = base-name,
SNAME = base-dsn-name…
Base file may be defined with any TYPE = FILE or TYPE = DATASET statement.
Data Store Based On Data Store

BaseDatastore.Name = <base-dsn-name>

DFHFCT FILE
DFHFCT TYPE = FILE,
FILE = file-name,
DSNAME = dsn-name...

FCT File Has Data Connector

Data Connector Refers To Data Store

Data Connector attributes:
  • Name = CICS.<file-name>
  • DD Name = <file-name>
  • Program Entry Point = *
  • Datastore.Name = <dsn-name>

DFHFCT FILE (base file)

BASE = base-name
Base file: DFHFCT TYPE = FILE,
FILE = base-name,
DSNAME = base-dsn-name...
Base file may be defined with any TYPE=FILE or TYPE=DATASET statement.
Data Store Based On Datastore

BaseDatastore.Name = <base-dsn-name>


Cobol File Relationship Projections

Statement Format Relationship Entities
COPY IDMS
[level-number] COPY IDMS name
 Cobol File Includes Copybook File

Where member-name = <name>:

  • For resolved files: Copybook.Name = <member-name> [.ext]...
  • For unresolved files: Copybook.Name = <member-name>

COPY IDMS (file|module)

COPY IDMS
[FILE | MODULE] name
 Cobol File Includes Copybook File

Where member-name = <name>:

  • For resolved files: Copybook.Name = <member-name> [.ext]...
  • For unresolved files: Copybook.Name = <member-name>

COPY IDMS (record)

[level-number] COPY IDMS RECORD rec-name
Cobol File Includes Copybook File

Where member-name = <rec-name>:

  • For resolved files: Copybook.Name = <member-name> [.ext]...
  • For unresolved files: Copybook.Name = <member-name>

COPY IDMS (subschema)

[level-number] COPY IDMS SUBSCHEMA- name
 Cobol File Includes Copybook File

Where member-name = <schema-name> $<subschema-name> $<name>:

  • For resolved files: Copybook.Name = <member-name> [.ext]...
  • For unresolved files: Copybook.Name = <member-name>

COPY IDMS (subschema- ctrl)

[level-number] COPY IDMS SUBSCHEMA- CTRL
[level-number] COPY IDMS SUBSCHEMA- LR-CTRL
 Cobol File Includes Copybook File

Where member-name = SUBSCHEMA-CTRL or member-name = SUBSCHEMA-LR- CTRL:

  • For resolved files: Copybook.Name = <member-name> [.ext]...
  • For unresolved files: Copybook.Name = <member-name>
IDMS- CONTROL SECTION
IDMS- CONTROL SECTION… [IDMS -RECORDS
WITHIN [WORKING- STORAGE | LINKAGE]]
 Cobol File Includes Copybook File

Where member-name = SUBSCHEMA- CTRL or member-name = <schema-name> $<subschema-name> $SUBSCHEMA- RECORDS:

  • For resolved files: Copybook.Name = <member-name> [.ext]...
  • For unresolved files: Copybook.Name = <member-name>


Cobol Copybook File Relationship Projections

Statement Format Relationship Entities
COPY IDMS
[level-number] COPY IDMS name
Copybook File Includes Copybook File

Where member-name = <name>:

  • For resolved files: Copybook.Name = <member-name> [.ext]...
  • For unresolved files: Copybook.Name = <member-name>

COPY IDMS (file|module)

COPY IDMS [FILE | MODULE] name
 Copybook File Includes Copybook File

Where member-name = <name>:

  • For resolved files: Copybook.Name = <member-name> [.ext]...
  • For unresolved files: Copybook.Name = <member-name>

COPY IDMS (record)

[level-number] COPY IDMS RECORD rec-name
 Copybook File Includes Copybook File

Where member-name = <rec-name>:

  • For resolved files: Copybook.Name = <member-name> [.ext]...
  • For unresolved files: Copybook.Name = <member-name>

COPY IDMS (subschema)

[level-number] COPY IDMS SUBSCHEMA- name
 Copybook File Includes Copybook File

Where member-name = <schema-name> $<subschema-name> $<name>:

  • For resolved files: Copybook.Name = <member-name> [.ext]...
  • For unresolved files: Copybook.Name = <member-name>

COPY IDMS (subschema- ctrl)

[level-number] COPY IDMS SUBSCHEMA-
CTRL [level-number]
COPY IDMS SUBSCHEMA-LR-CTRL
 Copybook File Includes Copybook File Where member-name = SUBSCHEMA-CTRL or member-name = SUBSCHEMA-LR- CTRL:
  • For resolved files: Copybook.Name = <member-name> [.ext]...
  • For unresolved files: Copybook.Name = <member-name>


Program Relationship Projections

Statement Format Relationship Entities
ERASE
ERASE record-name.
 Program Deletes Network Database Record

NetRecord.Name = <schema-name>. <record-name>

NetRecord.Record Name = <record-name>

GET
GET record-name.
 Program Reads Network Database Record

NetRecord.Name = <schema-name>. <record-name>

NetRecord.Record Name = <record-name>

MODIFY
MODIFY record-name.
 Program Updates Network Database Record

NetRecord.Name = <schema-name>. <record-name>

NetRecord.Record Name = <record-name>

OBTAIN
OBTAIN … [CALC |
DUPLICATE] record-name.
OBTAIN … CURRENT record-name.
OBTAIN … record-name
DB-KEY IS db-key.
OBTAIN … record-name
WITHIN [set-name | area-name].
 Program Reads Network Database Record

NetRecord.Name = <schema-name>. <record-name>

NetRecord.Record Name = <record-name>

SCHEMA SECTION
SCHEMA SECTION.
DB subschema- name
WITHIN schema-name.
Program Uses Network Database Schema NetSchema.Name = <schema-name>
STORE
STORE record-name.
 Program Inserts Network Database Record

NetRecord.Name = <schema-name>. <record-name>

NetRecord.Record Name = <record-name>


IDMS Schema File Relationship Projections

Statement Format Relationship Entities
RECORD
ADD RECORD NAME
IS recordName …
 Network Database Schema Has Network Database Record

NetRecord.Name = <schemaName>. <recordName>

NetRecord. RecordName = <recordName>

SCHEMA
ADD SCHEMA NAME
IS schemaName …
 IDMS Schema File Defines Network Database Schema NetSchema.Name = <schemaName>


Java Annotation Relationship Projections

Statement Format Relationship Entities
DEPENDS ON JAVAANNOTATION
@Annotation2
@interface Annotation1 { }
 Java Annotation Depends On Java Annotation Annotation1 depends on Annotation2
DEPENDS ON JAVACLASS
@interface Annotation1 {
  Class1 c();
}
 Java Annotation Depends On Java Class Annotation1 depends on Class1
DEPENDS ON JAVAENUMERATION
@interface Annotation1 {
  Enum1 e();
}
 Java Annotation Depends On Java Enumeration Annotation1 depends on Enum1
HAS JAVAANNOTATION
@interface Annotation1 {
  @interface Annotation2 { }
}
 Java Annotation Has Java Annotatation Annotation1 has Annotation2
HAS JAVACLASS
@interface Annotation1 {
  class Class1 { }
}
 Java Annotation Has Java Class Annotation1 has Class1
HAS JAVAENUMERATION
@interface Annotation1 {
  enum Enum1 { }
}
 Java Annotation Has Java Enumeration Annotation1 has Enum1
HAS JAVAINTERFACE
@interface Annotation1 {
  interface Interface1 { }
}
 Java Annotation Has Java Interface Annotation1 has Interface1


Java Class Relationship Projections

Statement Format Relationship Entities
CONTAINS JAVACLASS
class Class1 {
  class Class2 { }
}
 Java Class Has Java Class Class1 has Class2
CONTAINS JAVAINTERFACE
class Class1 {
  interface Interface1 { }
}
 Java Class Has Java Interface Class1 has Interface1
DEPENDS ON JAVAANNOTATION
@Annotation1
class Class1 { }
 Java Class Depends On Java Annotation Class1 depends on Annotation1
DEPENDS ON JAVACLASS
class Class1 extends Class2 {
  Class3 c3;
  Class4 method1(Class5 c5) {
    Class6 c6;
  }
}
 Java Class Depends On Java Class Class1 depends on Class2, Class3, Class4, Class5, Class6
DEPENDS ON JAVAENUMERATION
class Class1 extends Enum1 {
  Enum2 e2;
  Enum3 method1(Enum4 e4) {
    Enum5 e5;
  }
}
 Java Class Depends On Java Enumeration Class1 depends on Enum1, Enum2, Enum3, Enum4, Enum5
DEPENDS ON JAVAINTERFACE
class Class1 implements Interface1 {
  Interface2 i2;
  Interface3 method1(Interface4 i4) {
    Interface5 i5;
  }
}
 Java Class Depends On Java Interface Class1 depends on Interface1, Interface2, Interface3 Interface4, Interface5
EXTENDS JAVACLASS
class Class1 extends Class2 { }
 Java Class Extends Java Class Class1 extends Class2
EXTENDS JAVAENUMERATION
class Class1 extends Enum1 { }
 Java Class Extends Java Enumeration Class1 extends Enum1
HAS JAVAANNOTATION
class Class1 {
  @interface Annotation1 { }
}
 Java Class Has Java Annotatation Class1 has Annotation1
HAS JAVAENUMERATION
class Class1 {
  enum Enum1 { }
}
 Java Class Has Java Enumeration Class1 has Enum1
HAS METHOD
class Class1 {
  void method1() { }
}
 Java Class Has Method Class1 has method1
IMPLEMENTS JAVAINTERFACE
class Class1 implements Interface1 { }
 Java Class Implements Java Interface Class1 implements Interface1


Java Enumeration Relationship Projections

Statement Format Relationship Entities
DEPENDS ON JAVAANNOTATION
@Annotation1
enum Enum1 { }
 Java Enumeration Depends On Java Annotation Enum1 depends on Annotation1
DEPENDS ON JAVACLASS
enum Enum1 {
  Class1 c1;
}
 Java Enumeration Depends On Java Class Enum1 depends on Class1
DEPENDS ON JAVAENUMERATION
enum Enum1 {
  Enum2 e2;
}
 Java Enumeration Depends On Java Enumeration Enum1 depends on Enum2
DEPENDS ON JAVAINTERFACE
enum Enum1 {
  Interface1 i1;
}
 Java Enumeration Depends On Java Interface Enum1 depends on Interface1
HAS JAVAANNOTATION
enum Enum1 {
  @interface Annotation1 { }
}
 Java Enumeration Has Java Annotatation Enum1 has Annotation1
HAS JAVACLASS
enum Enum1 {
  class Class1 { }
}
 Java Enumeration Has Java Class Enum1 has Class1
HAS JAVAENUMERATION
enum Enum1 {
  enum Enum2 { }
}
 Java Enumeration Has Java Enumeration Enum1 has Enum2
HAS METHOD
enum Enum1 {
  void method1();
}
 Java Enumeration Has Method Enum1 has method1
HAS JAVAINTERFACE
enum Enum1 {
  interface Interface1 { }
}
 Java Enumeration Has Java Interface Enum1 has Interface1
IMPLEMENTS JAVAINTERFACE
enum Enum1 implements Interface1 { }
 Java Enumeration Implements Java Interface Enum1 implements Interface1


Java File Relationship Projections

Statement Format Relationship Entities
DEFINES JAVAANNOTATION
@interface Annotation1 { }
 Java File Defines Java Annotation

File1 defines Annotation1

DEFINES JAVACLASS
class Class1 { }
 Java File Defines Java Class

File1 defines Class1

DEFINES JAVAENUMERATION
enum Enum1 { }
 Java File Defines Java Enumeration

File1 defines Enum1

DEFINES JAVAINTERFACE
interface Interface1 { }
 Java File Defines Java Interface

File1 defines Interface1


Java Interface Relationship Projections

Statement Format Relationship Entities
DEPENDS ON JAVAANNOTATION
@Annotation1
interface Interface1 { }
 Java Interface Depends On Java Annotation Interface1 depends on Annotation1
DEPENDS ON JAVACLASS
interface Interface1 {
  Class1 method1(Class2 c2);
}
 Java Interface Depends On Java Class Interface1 depends on Class1, Class2
DEPENDS ON JAVAENUMERATION
interface Interface1 {
  Enum1 method1(Enum2 e2);
}
 Java Interface Depends On Java Enumeration Interface1 depends on Enum1, Enum2
DEPENDS ON JAVAINTERFACE
interface Interface1 {
  Interface2 method1(Interface3 i3);
}
 Java Interface Depends On Java Interface Interface1 depends on Interface2, Interface3
EXTENDS JAVAINTERFACE
interface Interface1 extends Interface2 { }
 Java Interface Extends Java Interface Interface 1 extends Interface2
HAS JAVAANNOTATION
interface Interface1 {
  @interface Annotation1 { }
}
 Java Interface Has Java Annotatation Interface1 has Annotation1
HAS JAVACLASS
interface Interface1 {
  class Class1 { }
}
 Java Interface Has Java Class Interface1 has Class1
HAS JAVAENUMERATION
interface Interface1 {
  enum Enum1 { }
}
 Java Interface Has Java Enumeration Interface1 has Enum1
HAS JAVAINTERFACE
interface Interface1 {
  interface Interface2 { }
}
 Java Interface Has Java Interface Interface1 has Interface2
HAS METHOD
interface Interface1 {
  void method1();
}
 Java Interface Has Method Interface1 has method1


Java Package Relationship Projections

Statement Format Relationship Entities
CONTAINS JAVAFILE
package package1;
 Java Package Contains Java File package1 contains File1


Method Relationship Projections

You use the Boundary Decisions tab of the Workspace Options to specify resource types your application uses to interface with databases, message queues, and other resources. When you specify the boundary decisions for an application, you tell the parser to create a decision object of a given resource type for each method call in the application.

The format pattern in the table below causes a DECISION relationship to be generated if the name of method2 matches a pattern specified in the Boundary Decisions tab. If, for example, the name of method2 is specified under the "Reads Table methods" type in Boundary Decisions, the parser generates a "Method Reads Table Decision" relationship, with entities "method1" and "Decision1".

Statement Format Relationship Entities
INVOKES METHOD
void method1() {
  method2();
}
 Method Invokes Method method1 invokes method2


Notes

  • Job steps are enumerated from the beginning of the job, after all procedures are expanded. The EXEC PROC= command is counted first, as a separate step. Thereafter, all steps inside the invoked procedure are enumerated. The number of job steps, then, is the number of all EXEC commands processed during job execution.

  • No relationships are generated for EXECs to internal procedures.

  • For steps placed directly in a job, the Step Full Name attribute of the Data Connector object generated from DD statements is <execName> if specified, or “Ln <line-number>” if <execName> is empty. For steps within procedures, the following is the path to the step from the EXEC PROC= command placed inside the job through all intermediate procedures:
         <jobExecName>[/<ProcName>.<procExecName>]…
  • An invoked program is known as a system program if it is defined with a sort utility alias in the workspace verification options for a JCL file, or specified in the <SystemPrograms> section of the Legacy.xml file.


JCL File Relationship Projections

Statement Format Relationship Entities
DD (program)
//[execName] EXEC PGM =
ProgName …//ddName DD
DSN = DSName,…

Job Has Data Connector

Data Connector Refers To Data Store

Data Connector Refers To File

Data Connector attributes:

  • Name = <Job.Name>. <UniqueID>
  • Program Entry Point = <ProgName>
  • DD Name = <ddName>
  • Step Name = <execName>
  • Step Full Name = <StepPath>
  • Step Number = <StepNumber>

Datastore.Name = <dsn-name>

Datastore.DSN = <dsn-name>

File.Name = <ProgName>. <ddName> File.PortName = <ddName>

DD (system program)
//[execName] EXEC PGM =
SysProgName …//ddName DD
DSN = DSName,…

Job Has Data Connector

Data Connector Refers To Data Store

Connector Is Read In System Program

Connector Is Written In System Program

Data Connector attributes:

  • Name = <Job.Name>. <UniqueID>
  • Program Entry Point = <ProgName>
  • DD Name = <ddName>
  • Step Name = <execName>
  • Step Full Name = <StepPath>
  • Step Number = <StepNumber>

Datastore.Name = <dsn-name>

Datastore.DSN = <dsn-name>

Sysprogram.Name = <SysProgName>

EXEC (program)
//EXEC PGM = ProgName
 Job Runs Program Entry Point

ProgramEntry.Name = <ProgName>

EXEC (system program)
//EXEC PGM = SysProgName
 Job Runs System Program

Sysprogram.Name = <SysProgName>

EXEC (procedure)
//[execName] EXEC [PROC =]
ExternalProc Name
 JCL File Executes JCL Procedure

For resolved files: JclProc.Name = <resolved-name>

For unresolved files: JclProc.Name = <ExternalProcName>

INCLUDE
//INCLUDE MEMBER = member
 JCL File Includes JCL Procedure

For resolved files: JclProc.Name = <resolved-name>

For unresolved files: Jclproc.Name = <member>

-INC (Librarian)
-INC member
 JCL File Includes JCL Procedure

For resolved files: JclProc.Name = <resolved-name>

For unresolved files: Jclproc.Name = <member>

JOB
//jobName JOB [parameters]
 JCL File Defines Job

Job.Name = <Jcl.Name>. <jobName>

Job.JobName = <jobName>

Job.StepsNum = <JobStepsNumber>


JCL Procedure Relationship Projections

Statement Format Relationship Entities
EXEC
//[execName] EXEC
[PROC=]ExternalProcName
 JCL File Executes JCL Procedure

For resolved files: JclProc.Name = <resolved-name>

For unresolved files: JclProc.Name = <ExternalProcName>

INCLUDE
// INCLUDE MEMBER = member
 JCL Procedure Includes JCL Procedure

For resolved files: JclProc.Name = <resolved-name>

For unresolved files: JclProc.Name = <member>

-INC (Librarian)
-INC member
 JCL Procedure Includes JCL Procedure

For resolved files: JclProc.Name = <resolved-name>

For unresolved files: JclProc.Name = <member>


Natural File Relationship Projections

Statement | Format | Relationship | Entities
INCLUDE | INCLUDE member | Natural File Includes Natural Include | For resolved files: NatInclude.Name = <resolved-name> For unresolved files: NatInclude.Name = <member>


Natural Include File Relationship Projections

Statement | Format | Relationship | Entities
INCLUDE | INCLUDE member | Natural Include Includes Natural Include | For resolved files: NatInclude.Name = <resolved-name> For unresolved files: NatInclude.Name = <member>


Program Relationship Projections

Statement Format Relationship Entities

CALL

CALL ‘name’
 Program Calls Program Entry Point

ProgramEntry.Name = <name>

CALL

(dynamic)

CALL varname
 Program Calls Program Entry Decision

Decision attributes:

  • Name = <program-name>@ <internal-name>
  • #Also Known As = <program-name>. Calls.<varname>
  • Decision Type = PROGRAMENTRY…

CALL FILE

CALL FILE ‘name’
 Program Calls Program Entry Point

ProgramEntry.Name = <name>

CALL LOOP

CALL LOOP ‘name’
 Program Calls Program Entry Point

ProgramEntry.Name = <name>

CALL LOOP

(dynamic)

CALL LOOP varname
 Program Calls Program Entry Decision

Decision attributes:

  • Name = <program-name>@ <internal-name>
  • #Also Known As = <program-name>. Calls.<varname>
  • Decision Type = PROGRAMENTRY…

CALLNAT

CALLNAT ‘name’
 Program Calls Program Entry Point

ProgramEntry.Name = <name>

CALLNAT

(dynamic)

CALLNAT varname
 Program Calls Program Entry Decision

Decision attributes:

  • Name = <program-name>@ <internal-name>
  • #Also Known As = <program-name>. Calls.<varname>
  • Decision Type = PROGRAMENTRY…

FETCH

FETCH ‘name’
 Program Calls Program Entry Point

ProgramEntry.Name = <name>

FETCH

(dynamic)

FETCH varname
 Program Calls Program Entry Decision

Decision attributes:

  • Name = <program-name>@ <internal-name>
  • #Also Known As = <program-name>. Calls.<varname>
  • Decision Type = PROGRAMENTRY…

PERFORM

PERFORM ‘name’
 Program Calls Program Entry Point

ProgramEntry.Name = <name>

RUN

RUN ‘name’
 Program Calls Program Entry Point

ProgramEntry.Name = <name>

RUN

(dynamic)

RUN varname
 Program Calls Program Entry Decision

Decision attributes:

  • Name = <program-name>@ <internal-name>
  • #Also Known As = <program-name>. Calls.<varname>
  • Decision Type = PROGRAMENTRY…

File Description

name FILE;
See CRUD statements below.

external-file-name = <name>

external-file-name = <title>

File attributes:

  • Name = <program-name>. external-file-name
  • DD Name = external-file-name
  • File Type = ADABAS File
An ADABAS File object is generated only when the first CRUD statement for the file is encountered. File attributes do not depend on the CRUD statement itself.
DELETE
DELETE RECORD IN STATEMENT
Program Deletes From ADABAS File

See File Description for ADABAS File attributes.

FIND
FIND RECORDS IN FILE (name)
 Program Reads ADABAS File

See File Description for ADABAS File attributes.

GET
GET IN FILE (name) RECORD
Program Reads ADABAS File

See File Description for ADABAS File attributes.

HISTOGRAM
HISTOGRAM IN FILE (name)
 Program Reads ADABAS File

See File Description for ADABAS File attributes.

READ
READ RECORDS IN FILE (name)
 Program Reads ADABAS File

See File Description for ADABAS File attributes.

READ WORK FILE
READ WORK FILE (name)
 Program Reads File

external-file-name = <name>

external-file-name = <title>

File attributes:

  • Name = <program-name>. external-file-name
  • DD Name = external-file-name
  • File Type = FILE
STORE
STORE RECORD IN FILE (name)
Program Inserts Into ADABAS File

See File Description for ADABAS File attributes.

UPDATE
UPDATE RECORD IN STATEMENT
Program Updates ADABAS File

See File Description for ADABAS File attributes.

WRITE WORK FILE
WRITE ...
Program Inserts Into File

external-file-name = <name>

external-file-name = <title>

File attributes:

  • Name = <program-name>. external-file-name
  • DD Name = external-file-name
  • File Type = FILE


.NET Assembly Relationship Projections

Statement | Format | Relationship | Entities
class-declaration | attributesopt class-modifiersopt class identifier class-baseopt class-body ; opt | .NET Assembly Contains .NET Type | DotNetType.Name=<namespace>.<identifier>
struct-declaration | attributes opt struct-modifiers opt struct identifier struct-interfaces opt struct-body ; opt | .NET Assembly Contains .NET Type | DotNetType.Name=<namespace>.<identifier>
interface-declaration | attributes opt interface-modifiers opt interface identifier interface-base opt interface-body ; opt | .NET Assembly Contains .NET Type | DotNetType.Name=<namespace>.<identifier>
enum-declaration | attributes opt enum-modifiers opt enum identifier enum-base opt enum-body ; opt | .NET Assembly Contains .NET Type | DotNetType.Name=<namespace>.<identifier>
delegate-declaration | attributes opt delegate-modifiers opt delegate return-type identifier ( formal-parameter-list opt ) | .NET Assembly Contains .NET Type | DotNetType.Name=<namespace>.<identifier>


.NET Method Relationship Projections

Statement | Format | Relationship | Entities
Method call | /Project/PropertyGroup/AssemblyName | .NET Method Calls .NET Method | DotNetMethod.Name=<type>.<Name>.<member-name>


.NET File Relationship Projections

Statement | Format | Relationship | Entities
class-declaration | attributesopt class-modifiersopt class identifier class-baseopt class-body ; opt | .NET File Contains .NET Type | DotNetType.Name=<namespace>.<identifier>
struct-declaration | attributes opt struct-modifiers opt struct identifier struct-interfaces opt struct-body ; opt | .NET File Contains .NET Type | DotNetType.Name=<namespace>.<identifier>
interface-declaration | attributes opt interface-modifiers opt interface identifier interface-base opt interface-body ; opt | .NET File Contains .NET Type | DotNetType.Name=<namespace>.<identifier>
enum-declaration | attributes opt enum-modifiers opt enum identifier enum-base opt enum-body ; opt | .NET File Contains .NET Type | DotNetType.Name=<namespace>.<identifier>
delegate-declaration | attributes opt delegate-modifiers opt delegate return-type identifier ( formal-parameter-list opt ) | .NET File Contains .NET Type | DotNetType.Name=<namespace>.<identifier>


.NET Project Relationship Projections

Statement | Format | Relationship | Entities
/Project/PropertyGroup/AssemblyName | /Project/PropertyGroup/AssemblyName | .NET Project Defines .NET Assembly | DotNetAssembly.Name=<AssemblyName .Text>
/Project/ItemGroup/Compile/@Include | /Project/ItemGroup/Compile/@Include | .NET Project Includes .NET File | DotNetFile.Name=@Include


.NET Type Relationship Projections

Statement | Format | Relationship | Entities
method-declaration | attributes opt method-modifiers opt return-type member-name ( formal-parameter-list opt ) | .NET Type Has .NET Method | DotNetMethod.Name=<type>.<Name>.<member-name>
constructor-declaration | attributes opt constructor-modifiers opt constructor-declarator constructor-body | .NET Type Inherits .NET Type | DotNetType
Inheritance | : class-type : interface-type-list : class-type , interface-type-list | .NET Type Inherits .NET Type | DotNetType
field-declaration: | attributes opt field-modifiers opt type variable-declarators | .NET Type Uses .NET Type | DotNetType.Name=< type > .<Name>
method-declaration | attributes opt method-modifiers opt return-type member-name ( formal-parameter-list opt ) | .NET Type Uses .NET Type | DotNetType.Name=< return- t ype >.<Name>
property-declaration | attributes opt property-modifiers opt type member-name { accessor-declarations } | .NET Type Uses .NET Type | DotNetType.Name=< type > .<Name>
indexer-declarator | type this [ formal-parameter-list ] type interface-type . this [ formal-parameter-list ] | .NET Type Uses .NET Type | DotNetType.Name=< type > .<Name> Type.Name=< interface-type>.< Name>


PCT File Relationship Projections

Statement Format Relationship Entities
DFHPCT
DFHPCT TYPE = ENTRY,
TRANSID = tran-name,
PROGRAM = prg-name

PCT File Defines Transaction

Transaction Initiates Program Entry Point

Transaction.Name = <tran-name>

ProgramEntry.Name = <prg-name>

Program.Root = True

Root is empty if Program does not exist in the repository before PCT file verification.


PL/I File Relationship Projections

Statement Format Relationship Entities
%INCLUDE
%INCLUDE member
 PL/I File Includes PL/I Include File

For resolved files: PliInclude.Name = <resolved-name>

For unresolved files: PliInclude.Name = <member>

PROCEDURE
name: PROC [(parms)]
[options(...)] ...
options(Main)
PL/I File Defines Program

Program.Name = <name>

Program. MainProgram= True


Pl/I Include File Relationship Projections

Statement Format Relationship Entities
%INCLUDE
%INCLUDE member
 PL/I Include File Includes PL/I Include File

For resolved files: PliInclude.Name = <resolved-name>

For unresolved files: PliInclude.Name = <member>


Program Relationship Projections

Statement Format Relationship Entities
CALL
DCL name ENTRY; ...
CALL name ...
 Program Calls Program Entry Point

ProgramEntry.Name = <name>

CALL (dynamic)
DCL varname ENTRY
VARIABLE; ... CALL varname ...
 Program Calls Program Entry Decision

Decision attributes:

  • Name = <program-name@ <internal-name>
  • #Also Known As = <program-name>. Calls.<varname>
  • Decision Type = PROGRAMENTRY…
ENTRY
name: ENTRY ...
 Program Has Program Entry Point

ProgramEntry.Name = <name>

ProgramEntry. MainEntry = False

PROCEDURE
name: PROC [(parms)]
[options(...)] ...
 Program Has Program Entry Point

Program.Name = <name>

ProgramEntry. MainEntry = True

File Description

DCL name FILE;
OPEN FILE (name);
DCL name FILE;
OPEN FILE (name) TITLE (‘title’);
 See CRUD statements below.

external-file-name = <name>

external-file-name = <title>

File attributes:

  • Name = <program-name>. external-file-name
  • DD Name = external-file-name
  • File Type = FILE
A File object is generated only when the first CRUD statement for the file is encountered. File attributes do not depend on the CRUD statement itself.
File Description (dynamic)
DCL varname FILE VARIABLE;
OPEN FILE (varname);
DCL name FILE;
OPEN FILE (name) TITLE (vartitle);
 See CRUD statements below.

decision-var = <varname>

decision-var = <name>

Decision attributes:

  • Name = <program-name>@ <internal-name>
  • #Also Known As =<program-name>. <decision-rel>. <decision-var>
  • Decision Type = DATAPORT
A Decision object is generated only when the first CRUD statement for the file is encountered. Only the Also Known As attribute depends on the CRUD statement itself.
DELETE
DELETE FILE (name) …
Program Deletes From File

See File Description for File attributes.

DELETE (dynamic)
DELETE FILE (varname) …
 Program Deletes From File Decision

See File Description (dynamic) for Decision attributes.

GET
GET FILE (name) …
 Program Reads File

See File Description for File attributes.

GET (dynamic)
GET FILE (varname) …
 Program Reads File Decision

See File Description (dynamic) for Decision attributes.

PUT
PUT FILE (name) …
 Program Inserts Into File

See File Description for File attributes.

PUT (dynamic)
PUT FILE (varname) …
 Program Inserts Into File Decision

See File Description (dynamic) for Decision attributes.

READ
READ FILE (name) …
 Program Reads File

See File Description for File attributes.

READ (dynamic)
READ FILE (varname) …
 Program Reads File Decision

See File Description (dynamic) for Decision attributes.

REWRITE
REWRITE FILE (name) …
 Program Updates File

See File Description for File attributes.

REWRITE (dynamic)
REWRITE FILE (varname) …
 Program Updates File Decision

See File Description (dynamic) for Decision attributes.

WRITE
WRITE FILE (name) …
 Program Inserts Into File

See File Description for File attributes.

WRITE (dynamic)
WRITE FILE (varname) …
 Program Inserts Into File Decision

See File Description (dynamic) for Decision attributes.


PowerBuilder File Relationship Projections

Format | Relationship | Entities | Examples/Notes
N/A | Includes Application File | Application File |
N/A | Includes Script File | Script File |


PowerBuilder Application File Relationship Projections

Format | Relationship | Entities | Examples/Notes
global type <app_name> from application | Defines Application Object | PB Application Name=<app_name> | global type function_test from application


PowerBuilder DataWindow Relationship Projections

Format | Relationship | Entities | Example/Notes
PBSELECT(...TABLE(NAME="<table_name>")...) | Uses Table | Table Name=<table_name> | PBSELECT( VERSION(400) TABLE(NAME="dealer"
any unparseable select statement. | Uses Table Decision | Decision |


PowerBuilder Object Relationship Projections

Format | Relationship | Entities | Example/Notes
public subroutine <name> or public function <name> | Has Non-Private Method | METHOD Name=<name> | public subroutine test_numbers ( );
<function_name>([list of parameters]) | Invokes Method | METHOD Name=[pbl]\[object].<function_name> | of_reference_test1(ai_arg1, ai_arg5, as_arg4)
<external_function_name>([list of parameters]) | Calls System Program | System Program Name=<external_function_name> |
open <window_name> | Opens Window | PB Object Name=<window_name> | open(w_choose_test)
string MenuName="<menu_name>" | Menu Is | PB Object Name=<menu_name> | string MenuName="m_genapp_frame"
dataobject = "<datawindow_name>" | Uses DataWindow | PB DataWindow Name=<datawindow_name> | string dataobject = "dw_cust"
Any object reference | Uses Object | PB Object Name=<object_name> | global type w_subtest from w_test
dataobject = "<pipeline_name>" | Uses Pipeline | Pipeline Name=<pipeline_name> | lpipe_master.DataObject = "p_archive_master"
<inline sql statement> | Refers To Table | Table Name = <table_name> | select name from customer;
FileOpen(<file_name>, [params]) | Refers To Data Store | Data Store Name=<file_name> | file = FileOpen ("c:\temp\dataj.txt",LineMode!, Write!,LockReadWrite!, Replace!)
[object].<method_name>([params]) | Invokes Method Decision | Decision Decision Type=METHOD Variable name = <method name> | function_test.dynamic f_test()
N/A | Calls System Program Decision | Decision | raise_window(h_window1)
open(<window_variable>) | Opens Window Decision | Decision Decision Type = PB Object Variable Name = <window_variable> | open(w)
menu = <menu_variable> | Menu Is Decision | Decision Decision Type = PB Object Variable Name = <menu_variable> | menu = x
dataobject = <variable> | Uses DataWindow Decision | Decision Decision Type = PB DataWindow Variable Name = <variable> | string dataobject = x
<type_name> [variable] | Uses Object Decision | Decision Decision Type = PB DataWindow Variable Name = <variable> | Occurs for any object reference when there is a missing object (type) declaration
dataobject = <variable> | Uses Pipeline Decision | Decision | lpipe_master.DataObject = l_p
FileOpen(<variable>, [params]) | Refers To Data Store Decision | Decision Decision Type = Data Store Variable Name = <variable> | file = FileOpen (s_file_name,LineMode!,Write!,LockReadWrite!, Replace!)


PowerBuilder Pipeline Relationship Projections

Format | Relationship | Entities | Example/Notes
SOURCE(name="<table_name>",...) | Reads Table | Table Name=<table_name> | SOURCE(name="account",...)
DESTINATION(name="<table_name>",...) | Updates Table | Table Name=<table_name> | DESTINATION(name="account",...)


PowerBuilder Query Relationship Projections

Format | Relationship | Entities | Example/Notes
PBSELECT(...TABLE(NAME="<table_name>")...) | Uses Table | Table Name=<table_name> | PBSELECT( VERSION(400) TABLE(NAME="account" ) TABLE(NAME="item_order" ) ...
any unparseable select statement. | Uses Table Decision | Decision |


PowerBuilder Script Relationship Projections

Format | Relationship | Entities | Example/Notes
global type <object_name> from <parent_object_name> | Defines Application Object | PB Object Name=<object_name> | global type w_tabs_middle from w_tabs_base
N/A | Defines DataWindow | PB DataWindow | There is no code inside the *.srd file that identifies the data window. The PB script name in the workspace is assigned by source file name.
N/A | Defines Query | PB Query | There is no code inside the *.srq file that identifies the query. No source code refers to the query.
N/A | Defines Pipeline | Pipeline | There is no code inside the *.srp file that identifies the pipeline. The Pipeline name in the workspace is assigned by source file name.


PSB File Relationship Projections

Statement Format Relationship Entities
PSBGEN
PSBGEN LANG=language,
PSBNAME= psb-name, ...
PSB File Defines PSB Module

PsbModule.Name = <psb-name>

PsbModule.Language = <language>

PCB
PCB TYPE=DB,
DBDNAME= dbd-name, ...
PCB TYPE=GSAM,
DBDNAME= dbd-name,
... PCB TYPE=DB, DBDNAME= ...,
PROCSEQ= dbd-name, ...
PCB TYPE=GSAM,
DBDNAME= ...,
PROCSEQ= dbd-name, ...

PSB Module Refers To Hierarchical Database

HiDatabase.Name = <dbd-name>

SENSEG
SENSEG NAME= ...,
INDICES= (dbd-name1, ... dbd-nameN)
You can specify up to 32 DBD names of secondary indices.

PSB Module Refers To Hierarchical Database

HiDatabase.Name = <dbd-name1> ...

HiDatabase.Name = <dbd-nameN> ...

COPY
member [OF library]
 PSB File Includes PSB Copybook File

For resolved files: PSBCopy.Name = <resolved-name>

For unresolved files: PSBCopy.Name = [<library>.] <member>

++INCLUDE (Panvalet)
++INCLUDE member
 PSB File Includes PSB Copybook File

For resolved files: PSBCopy.Name = <resolved-name>

For unresolved files: PSBCopy.Name = [<library>.] <member>

-INC (Librarian)
-INC member
 PSB File Includes PSB Copybook File

For resolved files: PSBCopy.Name = <resolved-name>

For unresolved files: PSBCopy.Name = [<library>.] <member>


PSB Copybook File Relationship Projections

Statement Format Relationship Entities
COPY
member [OF library]
 PSB Copybook File Includes PSB Copybook File

For resolved files: PSBCopy.Name = <resolved-name>

For unresolved files: PSBCopy.Name = [<library>.] <member>

++INCLUDE (Panvalet)
++INCLUDE member
 PSB Copybook File Includes PSB Copybook File

For resolved files: PSBCopy.Name = <resolved-name>

For unresolved files: PSBCopy.Name = [<library>.] <member>

-INC (Librarian)
-INC member
 PSB Copybook File Includes PSB Copybook File

For resolved files: PSBCopy.Name = <resolved-name>

For unresolved files: PSBCopy.Name = [<library>.] <member>


RPG File Relationship Projections

Statement | Format | Relationships | Entities
COPY INCLUDE
/COPY member
/COPY library/filename,member
/INCLUDE [library/filename,]member
 RPG File Includes RPG Copybook File

For resolved files: RPGCopy.Name = <resolved-name>

For unresolved files: RPGCopy.Name = [<library>.<filename>.]<member>

Main procedure | RPG File Defines Program | Program.Name=<source-name>


Program Relationship Projections

Statement Format Relationships Entities
Main procedure Program Has Program Entry Point

ProgramEntry.Name=<source-name>

ProgramEntry.Main Entry Flag=true

Procedure specification
P name B EXPORT
 Program Has Program Entry Point ProgramEntry.Name=<name>
CALL
CALL ‘name’
 Program Calls Program Entry Point ProgramEntry.Name=<name>
CALL
CALL varname
 Program Calls Program Entry Decision

Decision attributes:

  • Name=<program-name>.<internal-name>
  • AKA=<program-name>.Calls.<varname>
  • Type=PROGRAMENTRY …
CALLB
CALLB ‘name’ …
 Program Calls Bound Procedure Program Entry Point ProgramEntry.Name=<name>
CALLB
CALLB procptr
 Program Calls Bound Procedure Decision

Decision attributes:

  • Name=<program-name>.<internal-name>
  • AKA=<program-name>.CallsPrc.<procptr>
  • Type=PROGRAMENTRY …
CALLP
D name PR EXTPGM(‘ename’)
C CALLP name
 Program Calls Program Entry Point ProgramEntry.Name=<ename>
CALLP
D name PR EXTPGM (varname)
C CALLP name
 Program Calls Program Entry Decision

Decision attributes:

  • Name=<program-name>.<internal-name>
  • AKA=<program-name>.Calls.<varname>
  • Type=PROGRAMENTRY …
CALLP
D name PR EXTPROC(‘ename’)
C CALLP name 1)
 Program Calls Bound Procedure Program Entry Point ProgramEntry.Name=<ename>
CALLP
D name PR EXTPROC(procptr)
C CALLP name
 Program Calls Bound Procedure Decision

Decision attributes:

  • Name=<program-name>.<internal-name>
  • AKA=<program-name>.CallsPrc.<procptr>
  • Type=PROGRAMENTRY …
CALLP
D name PR C CALLP name 2)
 Program Calls Bound Procedure Program Entry Point ProgramEntry.Name=<name>
File description (static)
F file-name
 external-file-name=<file-name>
File description (static)
F file-name EXTFILE(‘ExtFileName’)
 external-file-name=<ExtFileName>
File description (static)
F file-name EXTMBR(‘ExtMbrName’)
 external-file-name= <ExtMbrName>
File description (static)
F file-name EXTFILE(‘ExtFileName’)
EXTMBR(‘ExtMbrName’)
 external-file-name= <ExtFileName>.<ExtMbrName>
File description (dynamic)
F file-name EXTFILE(varname)
 decision-var=<varname>
File description (dynamic)
F file-name EXTMBR(varname)
 decision-var=<varname>
File description (dynamic)
F file-name EXTFILE(varname)
EXTMBR(varname2)
 decision-var=<varname>
File description (dynamic)
F file-name EXTFILE(varname)
EXTMBR('ExtMbrName')
 decision-var=<varname>
CHAIN
F file-name (static-file-description) 3)
C CHAIN record-name
 Program Reads File

File.Name=<program-name>.<file-name>

File.File Type=FILE

File.DD Name=<file-name>

CHAIN
F file-name (static-file-description) 3)
C CHAIN record-name
 File Assigned To Data Store

DataStore.Name=<external-file-name>

DataStore.DSNAME=<external-file-name>

CHAIN
F file-name (dynamic-file-description) 3)
C CHAIN record-name
 Program Reads File Decision

Decision attributes:

  • Name=<program-name>.<internal-name>
  • AKA=<program-name>.ReadsDataPort.<decision-var>
  • Type=DATAPORT …
DELETE
F file-name (static-file-description) 3)
C DELETE record-name
 Program Deletes From File

File.Name=<program-name>.<file-name>

File.File Type=FILE File.DD Name=<file-name>

DELETE
F file-name (static-file-description) 3
C DELETE record-name
 File Assigned To Data Store DataStore.Name=<external-file-name>Data Store.DSNAME=<external-file-name>
DELETE
F file-name (dynamic-file-description) 3)
C DELETE record-name
 Program Deletes From File Decision

Decision attributes:

  • Name=<program-name>.<internal-name>
  • AKA=<program-name>.DeletesDataPort.<decision-var>
  • Type=DATAPORT …
EXFMT
F file-name WORKSTN (static-file-description) 3)
C EXFMT record-name
 Program Sends/Receives Screen Screen.Name= <external-file-name>.<record-name>
EXFMT
F file-name WORKSTN (dynamic-file-description) 3
C EXFMT record-name
 Program Sends/Receives Screen Decision

Decision attributes:

  • Name=<program-name>.<internal-name>
  • AKA=<program-name>.SendsReceives.<decision-var>
  • Type=MAP …
READ, READE, READP, READPE,
F file-name (static-file-description) 3)
C READ record-name
 Program Reads File File.Name=<program-name>.<file-name>

File.File Type=FILE File.DD Name=<file-name>

READ, READE, READP, READPE,
F file-name (static-file-description) 3)
C READ record-name
 File Assigned To Data Store

DataStore.Name=<external-file-name>

DataStore.DSNAME=<external-file-name>

READ, READE, READP, READPE,
F file-name (dynamic-file-description) 3)
C READ record-name
 Program Reads File Decision

Decision attributes:

  • Name=<program-name>.<internal-name>
  • AKA=<program-name>.ReadsDataPort.<decision-var>
  • Type=DATAPORT …
READ, READE, READP, READPE,
F file-name WORKSTN (static-file-description) 3)
C READ record-name
 Program Receives Screen Screen.Name= <external-file-name>.<record-name>
READ, READE, READP, READPE,
F file-name WORKSTN (dynamic-file-description) 3)
C READ record-name
 Program Receives Screen Decision

Decision attributes:

  • Name=<program-name>.<internal-name>
  • AKA=<program-name>.Receives.<decision-var>
  • Type=MAP …
WRITE
F file-name (static-file-description) 3)
C WRITE record-name
 Program Inserts Into File

File.Name=<program-name>.<file-name>

File.File Type=FILE

File.DD Name=<file-name>

WRITE
F file-name (static-file-description) 3)
C WRITE record-name
 File Assigned To Data Store DataStore.Name=<external-file-name>Data Store.DSNAME=<external-file-name>
WRITE
F file-name (dynamic-file-description) 3)
C WRITE record-name
Program Inserts Into File Decision

Decision attributes:

  • Name=<program-name>.<internal-name>
  • AKA=<program-name>.InsertsDataPort.<decision-var>
  • Type=DATAPORT …
WRITE
F file-name WORKSTN (static-file-description) 3)
C WRITE record-name
 Program Sends Screen Screen.Name= <external-file-name>.<record-nam
WRITE
F file-name WRKSTN (dynamic-file-description) 3)
C WRITE record-name
 Program Sends Screen Decision

Decision attributes:

  • Name=<program-name>.<internal-name>
  • AKA=<program-name>.Sends.<decision-var>
  • Type=MAP …
UPDATE
F file-name (static-file-description) 3)
C UPDATE record-name
 Program Updates File

File.Name=<program-name>.<file-name>

File.File Type=FILE

File.DD Name=<file-name>

UPDATE
F file-name (static-file-description) 3)
C UPDATE record-name
 File Assigned To Data Store DataStore.Name=<external-file-name>Data Store.DSNAME=<external-file-name>
UPDATE
F file-name (dynamic-file-description) 3)
C UPDATE record-name
Program Updates File Decision

Decision attributes:

  • Name=<program-name>.<internal-name>
  • AKA=<program-name>.UpdatesDataPort.<decision-var>
  • Type=DATAPORT …
UPDATE
F file-name WORKSTN (static-file-description) 3)
C UPDATE record-name
 Program Sends Screen Screen.Name= <external-file-name>.<record-name>
UPDATE
F file-name WORKSTN (dynamic-file-description) 3
C UPDATE record-name
 Program Sends Screen Decision

Decision attributes:

  • Name=<program-name>.<internal-name>
  • AKA=<program-name>.Sends.<decision-var>
  • Type=MAP …


DDL File Relationship Projections

Statement Format Relationship Entities
ALTER TABLE
ALTER TABLE
table-name …
 DDL File Refers To Table

Table attributes:

  • Name = <table-name>
  • Is View = False
COMMENT
COMMENT ON [TABLE]
table-name …
 DDL File Refers To Table

Table.Name = <table-name>

CREATE ALIAS
CREATE ALIAS
alias-name ON table-name …

DDL File Defines Table

Table Represents Table

Table attributes:

  • Name = <alias-name>
  • Is View = True
  • Source = "DBSchema.mdb’
  • Origin = <source-file-path>
  • Table.Name = <table-name>
CREATE INDEX
CREATE INDEX
index-name ON table-name …
DDL File Refers To Table

Table.Name = <table-name>

CREATE SYNONYM
CREATE SYNONYM
synonym FOR
authorization-name.table-name…

DDL File Defines Table

Table Represents Table

Table attributes:

  • Name = <synonym>
  • Is View = True
  • Source = "DBSchema.mdb"
  • Origin = <source-file-path>
  • Table.Name = <table-name>
CREATE TABLE
CREATE TABLE table-name …
 DDL File Defines Table

Table attributes:

  • Name = <table-name>
  • Is View = False
  • Source = "DBSchema.mdb"
  • Origin = <source-file-path>
CREATE VIEW
CREATE VIEW view-name …AS
SELECT … FROM table-name

DDL File Defines Table

Table Represents Table

Table attributes:

  • Name = <view-name>
  • Is View = True
  • Source = "DBSchema.mdb"
  • Origin = <source-file-path>
  • Table.Name = <table-name>
Referential constraint
FOREIGN KEY key
REFERENCES base-table…
 DDL File Refers To Table

Table.Name = <base-table>

SET CURRENT SQLID
SET CURRENT SQLID = 'user-name'

sqlid = <user-name>


System Definition File Relationship Projections

Statement Format Relationship Entities
APPLCTN
APPLCTN PSB= psb-name ...
TRANSACT CODE= (trancode
[rtran-code], ...)...
Relationships are created for every TRANSACT macro that follows an APPLCTN macro, and for every transaction code in the TRANSACT macro.

System Definition File Defines Transaction

Transaction Initiates Program Entry Point

Program Uses PSB Module

Transaction.Name = <tran-code>

ProgramEntry.Name = <psb-name>

Program.Root = True

Program.Ims Completed = False

PsbModule.Name = <psb-name>


VB Project File Relationship Projections

Statement | Format | Relationship | Entities
ExeName32 Name Title | Name="name" ExeName32="dllname" | VB Project File Defines Library | Library.LibName=<name> Library.Name=<dllname>
Reference | Reference=guid#ver#path\dllname#descr | VB Project File Uses Library | Library.Name=<dllname>
Object | Object=guid#ver#;dllname | VB Project File Uses Library | Library.Name=<dllname>
Module | Module=name; filename | VB Project File Includes VB File | VbFile.Name=<filename> VbFile.Type=Module
Class | Class=name; filename | VB Project File Includes VB File | VbFile.Name=<filename> VbFile.Type=Class
Form | Form=name; filename | VB Project File Includes VB File | VbFile.Name=<filename> VbFile.Type=Form
UserControl | UserControl=name; filename | VB Project File Includes VB File | VbFile.N ame=<filename> VbFile.Type=UserControl
HelpFile | N/A | N/A | N/A
ResFile32 | N/A | N/A | N/A


Library Description File Relationship Projections

Statement | Format | Relationship | Entities
Name ExeName | Name="name" File = "dllname" | Library Description File Defines Library | Library.LibName=<name> Library.Name=<dllname>
Interface | <interface name="InterfaceName" > | <dispinterface name=" InterfaceName"> | Library HasClass VB Class | VbClass.Name=<Library.Name>.<InterfaceName> VbClass.ClassName=<InterfaceName>
Coclass | <class name="ClassName"> | Library HasClass VB Class | VbClass.Name=<Library.Name>.< ClassName > VbClass.ClassName=<ClassName>
Method | <interface> <function name="Name" invoke="MethodType" > | VB Class Has VB Method | VbMethod.Name=<VbClass.Name>.<Name> VbMethod.MethodName=<Name> VbMethod.MethodType=MethodType VbMethod. AccessModifier=Public
Function | <module name="ModuleName"> <function name="Name"> | Library HasFunction VB Function | VbFunction.Name= <Library.Name>.<ModuleName>.<Name> VbFunction.FunctionName=<Name> VbFunction. AccessModifier=Public


VB Class, Form, and User Control Relationship Projections

Statement | Format | Relationship | Entities
Name | Attribute VB_Name = "name" | Library HasClass VB Class VB File Defines VB Class For Forms: VB Class Defines Map | VbClass.Name=<Library.Name>.<name> VbClass.ClassName=<name> Map.Name=<name>
Inheritance | Begin <ParentName> <ClassName> | VB Class Inherits VB Class |
Property Get | <AccessModifier> Property Get <name> () As <ReturnType> | VB Class Has VB Method | VbMethod.Name=Get.<VbClass.Name>.<name> VbMethod.MethodName=<name> VbMethod.MethodType=PropertyGet VbMethod. AccessModifier= <AccessModifier>
Property Set | <AccessModifier> Property Set <name> (args) | VB Class Has VB Method | VbMethod.Name=Set.<VbClass.Name>.<name> VbMethod.MethodName=<name> VbMethod.MethodType=PropertySet VbMethod. AccessModifier= <AccessModifier>
Function | <AccessModifier> Function <name> (args) As <ReturnType> | VB Class Has VB Method | VbMethod.Name=<VbClass.Name>.<name> VbMethod.MethodName=<name> VbMethod.MethodType=Method VbMethod. AccessModifier= <AccessModifier>
Sub | <AccessModifier> Sub <name> (args) | VB Class Has VB Method | VbMethod.Name=<VbClass.Name>.<name> VbMethod.MethodName=<name> VbMethod.MethodType=Method VbMethod. AccessModifier= <AccessModifier>
Method call | <Object>.<MethodName> (args) | VB Class Calls VB Method | VbMethod.MethodName= <MethodName >
Object var declaration | Dim <VarName> As <ClassName> | VB Class DependsOn VB Class | VbClass.ClassName=<ClassName>


VB Module Relationship Projections

Statement | Format | Relationship | Entities
Function | <AccessModifier> Function <name> (args) As <ReturnType> | Library HasFunction VB Function | VbFunction.Name=<Library.Name>.<name> If public, VbFunction.Name=<Library.Name>.<ModuleName>.<name> Otherwise, VbFunction.FunctionName=<name> VbMethod. AccessModifier= <AccessModifier>
Sub | <AccessModifier> Sub <name> (args) | Library HasFunction VB Function | VbFunction.Name=<Library.Name>.<name> If public, VbFunction.Name=<Library.Name>.<ModuleName>.<name> Otherwise, VbFunction.FunctionName=<name> VbMethod. AccessModifier= <AccessModifier>
Method call | <Object>.<MethodName> (args) | VB Function Calls VB Method | VbMethod.MethodName=<MethodName>
Object var declaration | Dim <VarName> As <ClassName> | VB Function DependsOn VB Class | VbClass.ClassName=<ClassName>