Skip to content

Package Create

This section describes the package-create functional area of the high-level language exits. The 4-character exit name identifier is PCRT.

The Package create function allows you to skip certain create panels based on the create method (for example, short or long). You can set HLLX variables early in the create process and allow the later panels to have access to those HLLX variables.

Select option 3 Package Create from the HLL Exit Definition - Function Selection (CMNHLLMM) panel to define customized ISPF variables for the package-create function:

will be added as Serena expands this facility.): In response, the HLL Exit Definition (CMNHLLMN) panel is displayed.

CMNHLLMM                HLL Exit Definition - Function Selection
Option ===>_______________________________________________________

1 All                   Full list

2 Build                 Component checkin, build, recompile, relink, delete
3 Package Create        Initial create of a package
4 Package Update        Subsequent update of package attributes
5 File Tailoring        Define customized ISPF variables for file tailoring
6 Checkout              Component Checkout from baseline/promotion
7 Promote/Demote        Promotion and demotion of components
8 Audit                 Audit job submission and audit process
9 Freeze                Package freeze and selective unfreeze/refreeze
A Approve/Reject        Package approve and reject
R Revert/Backout        Package revert and backout
S Specific              Package syslib, Standard Language, Query etc.
U Scratch/Rename        Utility functions

E ERO                   ERO functions

M Miscellaneous         HLLX procedure name
Z Modify                Issue Reload, Detach, or Attach modify commands

Panels around which exit points will be placed are listed below. The internal exit name (also known as function code) is PCRE0pnn, where:

  • p=0 is the pre-exit.
  • p=1 is the post-exit.
  • nn is an alphanumeric identifier relating to the panel for which the exit is taken.

The pre-exit is taken before the panel is displayed (usually to provide model parameters displayed on the panel); the post-exit is taken after the panel has been displayed (for example, for input validation or enforcement).

For the package-create function, we are building the complete set of information as we progress through the dialog. The exit data format is constant throughout the process but fields may not be filled in depending on where the exit is in the process.

Package Create

Panel ID Panel Description Exit Name
CMNCRT01 Initial package-create panel (non-ERO) PCRE0p01
CMNCRT0R Initial package-create panel (ERO) PCRE0p01
CMNCRT02 Package description (long form create only) PCRE0p02
CMNCRT03 Installation instructions (long form create only) PCRE0p03
CMNCRT04 Scheduling dependencies PCRE0p04
CMNCRT05 Affected applications PCRE0p05
CMNDPUP1/CMNDPUP2 Package user options PCRE0pPU
CMNCRT06 Install time/date, etc. (ALL site) PCRE0p06
CMNCRT07 Site list with install date/time, etc. (DP site) PCRE0p07
CMNCRT08 Complex/Super information PCRE0p08

XML Package-Create Service

  • Service: package.create.service
  • Exit name: PCRE0pXM

Note

No data values are taken from exit PCRE01XM (that is, after the XML request has completed) as no further processing takes place in the function to which changes in data values can be passed. The PCRE01XM exit is purely to allow you to initiate whatever post-package-create external processes you desire.

The basic framework for the data structure passed to all exits is the set of fields accepted by the package create service. In addition, we will pass fields that allow you to make further decisions and pass back information such as error messages and so on.

The XML package-create service pre-exit will have the exit call data formatted from the input service tags and will be taken before any of the service processing. The post-exit is taken after the package has been created and is the only exit to which the created package name is passed (all other exits being taken before the package has been created). You cannot change anything or affect processing from the XML service post-exit: It is intended to be used as a mechanism of notifying external processes that the package has been created.

In order to allow the cursor to be positioned at specific panel fields, a number relating to the panel field in question will be passed back in the XPCROCURS field. These numbers are documented in the supplied copybook for the function (and, eventually, in the lists of REXX field names). It is your responsibility to make sure that your exit returns a field number that is valid for the panel about to be (re)displayed. If the field number is not valid, a dialog error results.

The package-create format shown below (in COBOL v5.1 format for compactness) is for illustration purposes. Copybooks will be created for COBOL (compatible with earlier versions of COBOL) and PL/I. The equivalent REXX variable list will also be published.

The request block of each HLL exit service request starts off with a few general fields followed by package-create function-specific fields.

COBOL Example

...

01 PCRT.                            *>REQUEST ELEMENT LAYOUT
***
* PACKAGE CREATE PROCESS HLL EXITS - PASSED VARIABLES
***
    03 PCRTFUNC             PIC X(8). *>FUNCTION CODE
    03 PCRTDBUG             PIC X(1). *>DEBUG EXIT CALL? Y/N
    03 PCRTORGN             PIC X(3). *>CALL ORIGIN
    03 PCRTZMFS             PIC X(1). *>ZMF SUBSYSTEM ID
    03 PCRTPDB2             PIC X(4). *>PRIMARY Db2 SUBSYSTEM
    03 PCRTUSER             PIC X(8). *>USER ID
    03 PCRTEXTN             PIC X(156). *>EXTERNAL EXIT NAME
    03 PCRTAPPL             PIC X(4). *>APPLICATION
    03 PCRTMETH             PIC X(1). *>PKG CREATE METHOD
    03 PCRTLOKD             PIC X(3). *>FLDS LOCKED? YES/NO
    03 PCRTGO               PIC X(3). *>PROCEED? YES/NO
    03 PCRTSHRT             PIC X(24). *>SHORT MESSAGE
    03 PCRTLONG             PIC X(128). *>LONG MESSAGE
    03 PCTRCURS             PIC X(24). *>CURSOR TAG
    03 PCRTCHNG             PIC X(3). *>DATA CHANGED? YES/NO
    03 PCRTCFPK             PIC X(10). *>NAME OF PKG TO CARRY FWD
    (More fields here. (See "Package Create" for a for full listing.)
    03 PCRTRARE             PIC X(8). *>RELEASE AREA
***
* VARIABLE BLOCK POINTERS
***
    03 PCRTVB1L-PTR         USAGE IS POINTER.
    03 PCRTVB2L-PTR         USAGE IS POINTER.
    03 PCRTVB3L-PTR         USAGE IS POINTER.
    03 PCRTVB6L-PTR         USAGE IS POINTER.
    03 PCRTVB7L-PTR         USAGE IS POINTER.
    03 PCRTVBSL-PTR         USAGE IS POINTER.
***
* PACKAGE DESCRIPTION - UP TO 46 LINES OF 72 BYTES
***
01 PCRTVB1.
    03 PCRTPDSC             PIC X(72). *>LINE OF DESCRIPTION
    03 PTR-NEXT-PCRTVB1     POINTER. *>POINTER TO NEXT LINE
***
* IMPLEMENTATION INSTRUCTIONS - UP TO 46 LINES OF 72 BYTES
***
01 PCRTVB2.
    03 PCRTPIMI             PIC X(72). *>LINE OF INSTRUCTION
    03 PTR-NEXT-PCRTVB2     POINTER. *>POINTER TO NEXT LINE
***
* SCHEDULING INFORMATION - LIMITED ONLY BY STORAGE CONSTRAINTS
***
01 PCRTVB3.
    03 PCRTSCHI.
        05 PCRTSSSJ         PIC X(8). *>SUCCESSOR JOBNAME
        05 PCRTSSPJ         PIC X(8). *>PREDECESSOR JOBNAME
    03 PTR-NEXT-PCRTVB3 POINTER. *>POINTER TO NEXT SET

The user exit should follow the pointer chains for each repeating group until the pointer is null. For example:

...

IF PCRTVB1L-PTR NOT = NULLS
    SET ADDRESS OF PCRTVB1 TO PCRTVB1L-PTR
    MOVE 'N' TO WS-VB1DONE
END-IF.

PERFORM S510-PROCESSVB1 UNTIL VB1DONE.

S510-PROCESSVB1.
    DISPLAY 'PACKAGE DESCRIPTION : ' PCRTPDSC.
    IF PTR-NEXT-PCRTVB1 NOT = NULLS
        SET ADDRESS OF PCRTVB1 TO PTR-NEXT-PCRTVB1
    ELSE
    MOVE "Y" TO WS-VB1DONE
END-IF.

If the user exit wants to add groups to the list, it is responsible for allocating new storage (using LE facilities, for example, CEECRHP and CEEGTST) and adding to the chain. See member HXCSCHD in the CMNZMF SAMPLES distribution library for an example of how to do this.

If PCRTLOKD is set to YES, data fields on the related panel will be set to output only. The list of panels for which this applies is:

Panel ID Panel Description Exit Name
CMNCRT01 Initial package-create panel (non-ERO) PCRE0001
CMNCRT0R Initial package-create panel (ERO) PCRE0001
CMNCRT02 Package description (long form create only) PCRE0002
CMNCRT03 Installation instructions (long form create only) PCRE0003
CMNCRT04 Scheduling dependencies PCRE0004
CMNCRT05 Affected applications PCRE0005
CMNDPUP1/CMNDPUP2 Package user options PCRE00PU
CMNCRT06 Install time/date, etc. (ALL site) PCRE0006
CMNCRT07 Site list with install date/time, etc. (DP site) PCRE0007
CMNCRT08 Complex/Super information PCRE0008

PCRTSHRT and PCRTLONG are used to set a message on the next panel/window to be displayed.

If PCRTGO is set to NO, the fields PCRTSHRT, PCRTLONG, and PCRTCURS will be used to set an error message, and the client will (re)display the associated panel.

If you wish to change any of the data fields, do that in place and set PCRTCHNG to YES. If PCRTCHNG is not set to YES, the client ignores any data changes. Note that while the full exit data structure is passed to the exits driven around the package user variable panels (CMNDPUP1/2), only package user variables may be updated by these exits.

From the REXX point of view, the variables making up the data structure have the same names as the equivalent tags in the package-create service. The following extra variables will also be created:

...

dataLocked
proceed
shortMsg
longMsg
cursorField
dataChanged
The discussion above identifies the purpose of these variables.

The variable numbers of blocks will be handled by means of indexed stem variables. For example:

...

siteInfo.siteName.
siteInfo.installDate.
siteInfo.fromInstallTime.
siteInfo.toInstallTime.
siteInfo.contactName.
siteInfo.contactPhone.
siteInfo.alternateContactName.
siteInfo.alternateContactPhone.
The 0 version of the variable (each variable) will contain the number of instances defined (these will all be the same value). Each level n field relates to the same site group for equal n.

An example of how to reference them successfully is:

...

Do i = 1 to siteInfo.siteName.0
    say "siteInfo.siteName."||i||" : "siteInfo.siteName.i
end
For REXX variable updates the exit can simply set the contents of the variable and then set the dataChanged variable to a value of YES. This indicates to the mainstream client code that it needs to copy the contents of the variables passed back from the exit into whatever local storage it is using for those variables.

A single data structure is passed to all of these exits. The data interface for the package-create exits looks like this:

Data Interface for the Package-Create Exits

LE-Language Variable Name REXX Variable Name Length Purpose Modifiable Cursor Field No.
PCRTFUNC function 8 Function code No
PCRTDBUG debugCall 1 Debug exit call (Y/N) No
PCRTORGN callOrigin 3 ISPF=SPF XML Service=XML ZDD=ZDD ZMF4ECL=ECL No
PCRTZMFS zmfSubs 1 ZMF subsystem Id No
PCRTPDB2 db2Subs 4 Primary Db2 subsystem No
PCRTUSER userid 8 User Id No
PCRTEXTN externalName 256 External name for exit No
PCRTAPPL applName 4 Application No
PCRTMETH createMethod 1 Create method Yes
PCRTLOKD dataLocked 3 Fields locked? (YES/NO) Yes
PCRTGO proceed 3 Proceed? (YES/NO) Yes
PCRTSHRT shortMsg 24 Short message Yes
PCRTLONG longMsg 128 Long message Yes
PCRTCURS cursorField 3 Cursor tag Yes
PCRTCHNG dataChanged 3 Data changed? (YES/NO) Yes
PCRTCRPK packageName 10 Created package (post service) No
PCRTCFPK packageModel 10 Name of model package Yes 001
PCRTPLVL packageLevel 1 Package level Yes 002
PCRTPTYP packageType 1 Package type Yes 003
PCRTRSCD reasonCode 3 Reason code Yes 004
PCRTCSPK complexSuperPackage 10 Complex package Yes 005
PCRTDEPT packageDepartment 4 Package department Yes 006
PCRTNAME requestorName 25 Requester name Yes 007
PCRTPHON requestorPhone 15 Requester phone Yes 008
PCRTPCAC problemActionCode 1 Contingency action code Yes 009
PCRTOPCA otherProblemAction 44 Other contingency action Yes 010
PCRTSCHD schedulerType 1 Scheduler Yes 011
PCRTTCDU tempChangeDuration 3 Temporary change duration Yes 012
PCRTWRQN packageWorkRequest 12 Work request number Yes 013
PCRTTITL packageTitle 255 Package title Yes 014
PCRTNTUS notifyUser 8 Notify user Yes 122
PCRTUPAN userPanel 8 Package user variable panel Yes
PCRTOPRF optsProfile 8 Used to select the ZDDOPTS profile for the display of user options for the ZMF Client Pack Yes

Package User Variables

LE-Language Variable Name REXX Variable Name Length Purpose Modifiable Cursor Field No.
PCRT01 userVarLen101-userVarLen115 1 * 15 Set of fifteen 1-byte package user variables Yes 015-029
PCRT0199 userVarLen199 1 (Reserved) Yes
PCRT02 userVarLen201 - userVarLen211 2 * 11 Set of eleven 2-byte package user variables Yes 030-040
PCRT03 userVarLen301-310 3 * 10 Set of ten 3-byte package user variables Yes 041-050
PCRT04 userVarLen401-410 4 * 10 Set of ten 4-byte package user variables Yes 051-060
PCRT08 userVarLen801-810 8 * 10 Set of ten 8-byte package user variables Yes 061-070
PCRT16 userVarLen1601-1605 16 * 5 Set of five 16-byte package user variables Yes 071-075
PCRT44 userVarLen4401-4405 44 * 5 Set of five 44-byte package user variables Yes 076-080
PCRT72 userVarLen7201-7205 72 * 5 Set of five 72-byte package user variables Yes 081-085

Release and Release Area

LE-Language Variable Name REXX Variable Name Length Purpose Modifiable Cursor Field No.
PCRTRLSM release 8 Release Yes 086
PCRTRARE releaseArea 8 Release area Yes 087

Package Description

LE-Language Variable Name REXX Variable Name Length Purpose Modifiable Cursor Field No.
PCRTPDSC packageDesc.n 72 * 46 Up to forty-six 72-byte lines of description Yes 088

Implementation Instructions

LE-Language Variable Name REXX Variable Name Length Purpose Modifiable Cursor Field No.
PCRTPIMI packageImplInst.n 72 * 46 Up to forty-six 72-byte lines of implementation instructions Yes 089

Scheduling Information

LE-Language Variable Name REXX Variable Name Length Purpose Modifiable Cursor Field No.
PCRTSSSJ schedulingInfo.successorJobName.n 8 Successor job name Yes 090
PCRTSSPJ schedulingInfo.predecessorJobName.n 8 Predecessor job name Yes 091

Participating Packages

LE-Language Variable Name REXX Variable Name Length Purpose Modifiable Cursor Field No.
PCRTPPAP partPackageName.n(10) 4 n 4 byte participating package appl/numbers, n 10 byte participating (REXX) Yes 092
PCRTPPNM partPackageName.n(10) 6 n 6-byte participating package appl/numbers, n 10 byte participating (REXX) Yes 092

Affected Applications

LE-Language Variable Name REXX Variable Name Length Purpose Modifiable Cursor Field No.
PCRTAAPP affectedApplName.n 4 Set of n 4-byte application names (n is limited only by storage constraints) Yes 093

Install Site Information (Set of n sets of installation site information (n is limited only by storage constraints)

LE-Language Variable Name REXX Variable Name Length Purpose Modifiable Cursor Field No.
PCRTSITE siteInfo.siteName.n 8 Site name Yes 094
PCRTINDT siteInfo.installDate.n 8 Install date Yes 095
PCRTFINT siteInfo.fromInstallTime.n 6 Install from time Yes 096
PCRTTINT siteInfo.toInstallTime.n 6 Install to time Yes 097
PCRTOANM siteInfo.contactName.n 25 Originating analyst Yes 098
PCRTOAPH siteInfo.contactPhone.n 15 Analyst phone number Yes 099
PCRTAANM siteInfo.alternateContactName.n 25 Alternative analyst Yes 100
PCRTAAPH siteInfo.alternateContactPhone.n 15 Alternative analyst phone number Yes 101