Page tree
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 11 Next »

Summary: This document provides information about the extension providing RPG support.

Extension ID

com.castsoftware.rpg

What's new?

RPG 3.1 is a full rewrite of RPG analyzer. Major changes are:

  • Removal of DB400 Universal Importer and DMT extractor; support for the analysis of IBM Db2 for i is replaced by the SQL Analyzer (≥ 3.5.4 is required).
  • Removal of source code preprocessor, real source code is now visible.
  • Removal of MENU type objects.
  • Removal of *.bnd analysis and Bound Service Program type objects.

Please see RPG 3.1 - Release Notes for more information.

Description

This extension provides support for applications written using RPG languages and/or CL languages.

In what situation should you install this extension?

If your application contains source code written using RPG and or CL and you want to view these object types and their links with other objects, then you should install this extension.

Supported languages

  • RPG III (also known as GAP 3)
  • RPG IV (fixed-form and free format)
  • CL

Function Point, Quality and Sizing support

This extension provides the following support:

  • Function Points (transactions): a green tick indicates that OMG Function Point counting and Transaction Risk Index are supported
  • Quality and Sizing: a green tick indicates that CAST can measure size and that a minimum set of Quality Rules exist
Function Points
(transactions)
(tick)
Quality and Sizing(tick)

CAST AIP compatibility

This extension is compatible with:

CAST AIP release

Supported

8.3.x

(tick)

Supported DBMS servers

This extension is compatible with the following DBMS servers:

DBMSSupported
CAST Storage Service/PostgreSQL(tick)

Prerequisites

(tick)An installation of any compatible release of CAST AIP (see table above)

Download and installation instructions

Please see:

Prepare and deliver the source code

When the extension is downloaded and installed, you can now package your source code and run an analysis. The process of preparing and delivering your source code is described below:

Source code preparation

Before the RPG source code can be delivered and then analyzed, it needs to be collected from the proper iSeries libraries and transferred to the designated location. During this operation, each artifact (program, CL, DSPF) must be put into a single file only. This will result in a single artifact per file. Furthermore, the type of source code must be expressed using the extension to the file. The appropriate file extensions are listed in the following table. 

Source code is kept in a member of a file. The file is kept in a library. Each file can have many members. Each member is the source code for a program. The source code files can have any name but conventionally the names start with Q and end with SRC, for source.

Source code type

iSeries library

Required extension

Used in MetaModel

RPG-III programs

QRPGSRC

*.rpg, *.rpg38

RPG300

ILE RPG Programs

QRPGLESRC

*.rpgle

RPG400

ILE RPG Programs with SQL

QSQLRPGLESRC

*.sqlrpgle

RPG400

Copy source members

QCPYLESRC

*.cpyle

RPG400

CL programs

QCLSRC

*.cl, *.clp, *.cl38, *.clp38

CL400

ILE CL Programs

QCLLESRC

*.clle

CL400

Display Files

QDDSSRC

*.dspf, *.dspf38

DDS400

Printer Files

QDDSSRC

*.prtf, *.prtf38

DDS400

Logical Files

QDBSRC

*.lf, *.lf38

DB400/DDS400

Physical Files

QDBSRC

*.pf, *.pf38

DB400/DDS400

The RPG Analyzer is able to autodetect RPG III versus RPG IV, so there is no difference in using *.rpg or *.rpgle. What is very important is to distinguish between Display, Printer, Logical and Physical files using the specific file extensions listed in above table.

What about IBM Db2 for i source code?

In previous releases of the RPG Analyzer extension, when IBM Db2 for i source code was delivered, a dedicated extraction process was launched within the RPG Analyzer to transform this source code into a format that could be analyzed. Starting in release ≥ 3.1.x, the RPG Analyzer is no longer responsible for analyzing source code from IBM DB2 for i. Instead, this task is undertaken by the SQL Analyzer (release ≥ 3.5.4 is required).

There is no change to source code delivery process when using AIP Console - the IBM DB2 for i source code should be delivered together with the RPG source code and AIP Console will be able to detect this type of source code and create the necessary Analysis Units. For those using legacy CAST Management Studio/Delivery Manager Tool, the source code delivery process has changed and is explained below.

IBM Db2 for i is also known as DB400.

Deliver the source code

Using AIP Console

RPG is supported in AIP Console ≥ 1.22.

Note about using RPG ≥ 3.1.0 with AIP Console 1.22, 1.23, 1.24 and 1.25

RPG ≥ 3.1.0 does not function correctly with AIP Console 1.22, 1.23, 1.24 and 1.25, however, a workaround exists. Before delivering your source code, locate the following file on the AIP Node that will be performing the analysis:

%PROGRAMDATA%\CAST\AipConsole\AipNode\code-scanner-config.xml

Edit the file and remove or comment out the following section:

<package packageType="dmtdb400techno.DB400Package"
	extractorType="dmtdb400extractor.DB400Extractor"
	deliveryFile=".lf;.pf;.sqli;.sqlt;.sqlv;.sqlu;.sqlp"
	deliveryData="COE"/>

Save the file and restart the AIP Node.

AIP Console expects either a ZIP/archive file or source code located in a folder configured in AIP Console. You should include in the ZIP/source code folder all RPG and IBM DB2 for i (if present) source code. CAST highly recommends placing the files in a folder dedicated to RPG. If you are using a ZIP/archive file, zip the folders in the "temp" folder - but do not zip the "temp" folder itself, nor create any intermediary folders:

D:\temp
    |-----RPG
    |-----OtherTechno1
    |-----OtherTechno2

When the source code has been delivered, AIP Console will create an Analysis Unit for:

  • IBM Db2 for i (if present)
  • RPG

Using the CAST Delivery Manager Tool

 Click here to expand...

Create a new Version, create a new Package for your RPG source code using the Files on your file system option and then choose the location of your source code:

Click to enlarge

Run the Package action. Before delivering the source code, check the packaging results.

Analysis configuration

Using AIP Console

Add a dependency between the RPG Analysis Unit as Source and SQL Universal Analysis Unit as the target:

Starting from AIP Console 1.26, this dependency will be automatically added and no manual intervention is required. You should still check that the dependency is present, however.

Using CAST Management Studio

 Click here to expand...

Accept the version and set it as current:

Click to enlarge

Now add a Universal Analysis Unit pointing to the root deploy folder. This will be used to analyze the IBM Db2 for i source code:

 

Finally, in the Application editor > Dependencies tab, add a dependency between the RPG Analysis Unit as Source and SQL Universal Analysis Unit as the target:

Configuring Technical Size measures for RPG in the CAST Health Dashboard

Technical Size measures can be displayed for RPG analysis results in the CAST Health Dashboard by manually editing the following file:

1.x WAR file: %CATALINA_HOME%\webapps\<dashboard>\portal\resources\app.json
2.x WAR file: %CATALINA_HOME%\webapps\<dashboard>\WEB-INF\classes\config\hd\app.json
2.x ZIP file: com.castsoftware.aip.dashboard.2.0.0\config\hd\app.json

Add the following entries into the existing section "TechnicalSizeMeasures":

"TechnicalSizeMeasures": {
...
      {
        "id": 1008000,
        "label": "Number of RPG400 Program(RPG400)"
      },
      {
        "id": 1008001,
        "label": "Number of RPG400 Subroutine(RPG400)"
      },
      {
        "id": 1008002,
        "label": "Number of RPG400 Procedure(RPG400)"
      },
      {
        "id": 1008003,
        "label": "Number of RPG400 Copy Member(RPG400)"
      },
      {
        "id": 1009000,
        "label": "Number of RPG300 Program(RPG300)"
      },
      {
        "id": 1009001,
        "label": "Number of RPG300 Subroutine(RPG300)"
      },
      {
        "id": 1009003,
        "label": "Number of RPG300 Copy Member(RPG300)"
      }
} 

Following any changes you make, save the app.json file and then restart your application server so that the changes are taken into account.

What results can you expect?

C     SCRLVL        CHAIN     PACCLVS
C                   IF        %FOUND
C                   DELETE    RACCLV
C                   ENDIF



CALL       PGM(&EXTLIB/&EXTPGM)


exec sql update vrtfilep set vrupdf = ' ' where vrupdf <> ' ';

Objects

CL400 

IconObject Name
CL400 Program
CL400 Project
CL400 Subroutine

CL Call to Generic Program

CL400 EXEC SQL

DDS400

IconObject Name
 DDS400 Project
DDS400 Section
DDS400 Printer File
DDS400 Display File
DDS400 Physical File
DDS400 Logical File
DDS400 RecordstructureLF
DDS400 RecordstructurePF
DDS400 Joinstructure

RPG 300

IconObject Name
RPG300 Project
RPG300 Program
RPG300 MainSubroutine
RPG300 Subroutine
RPG300 File Printer
RPG300 File Disk
RPG300 File Workstn
RPG300 File Special
RPG300 File Seq
RPG300 Copy Member
RPG300 SQL Statement/Structure
RPG300 Procedure

RPG III Call to Generic Program

RPG3 EXEC SQL

RPG III Missing Copy Member

RPG III Missing Physical/Logical File

RPG III Missing Display File

RPG III Missing Printer File

RPG 400

IconObject Name
RPG400 Project
RPG400 Program
RPG400 MainSubroutine
RPG400 Subroutine
RPG400 File Printer
RPG400 File Disk
RPG400 File Workstn
RPG400 File Special
RPG400 File Seq
RPG400 Procedure
RPG400 Procedure Prototype
RPG400 Bound Service Program
RPG400 Copy Member

RPG IV Call to Generic Program

RPG400 EXEC SQL

RPG400 Module

RPG IV Missing Copy Member

RPG IV Missing Physical/Logical File

RPG IV Missing Display File

RPG IV Missing Printer File

Analysis messages

RPG-001

IdentifierRPG-001
MessageCannot resolve copy ...
SeverityWarning
ExplanationAnalyser could not find the source file included by a /copy statement. This can lead to various missing results.
User ActionEnsure that all required source code is packaged and delivered.

RPG-002

IdentifierRPG-002
MessageCannot resolve DDS file ...
SeverityWarning
ExplanationAnalyser could not find a DDS file (pf, lf, dspf, prtf, ...)
User ActionEnsure that all required source code is packaged and delivered.

Structural Rules

The following structural rules are provided:

You can also find a global list here:

https://technologies.castsoftware.com/rules?sec=t_1008000&ref=||

Limitations

  • in RPG
    • multiline names are not supported
    • dynamic calls and dynamic SQL is not supported


  • No labels