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 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.
An example of how to reference them successfully is:
...
Do i = 1 to siteInfo.siteName.0
    say "siteInfo.siteName."||i||" : "siteInfo.siteName.i
end
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 |