× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



Use REXX.
For stuff that runs commands or SQL statements or calls RPG where embedded parameters may change from time to time I just write a REXX procedure that is essentially just a copy of the CLP commands.
All the parameters that may change are coded as variables whose values are assigned at the top of the procedure so by simply editing the procedure when a parameter changes avoids the need to recompile any objects.

Peter

-----Original Message-----
From: midrange-l-bounces@xxxxxxxxxxxx [mailto:midrange-l-bounces@xxxxxxxxxxxx] On Behalf Of CRPence
Sent: Monday, 25 March 2013 6:14 a.m.
To: midrange-l@xxxxxxxxxxxx
Subject: Re: soft coding parameters

On 22 Mar 2013 16:51, A Paul wrote:

This is my CLLE program:

PGM
DCL VAR(&LIB) TYPE(*CHAR) LEN(10)
RTVOBJD OBJ(AXAFILE) OBJTYPE(*FILE) RTNLIB(&LIB)
? MQAXAMC FUNCTION('*START') ??FLIB(&LIB) +
??INBOUND( 'QUANTUM.MSGQ.MGR' 'ADMEM.AXAUS.LF000' 'QIUKVC1.QUANTUM') +
??OUTBOUND('QUANTUM.MSGQ.MGR' 'AXAUS.ADMEM.RF000' 'QUANTUM.QIUKVC1') +
SINEX('A1' 'A2' 'A4' 'B1' 'C1' +
'D1' 'F1' 'I1' 'K1' 'K2' +
'K3' 'L1' 'M1' 'M3' 'P1' +
'P2' 'S1' ' ' ' ' ' ') +
PENCE('LA' 'L1' 'LB' ' ' ' ' +
' ' ' ' ' ' ' ' ' ') +
??JOB(ADMMQLDUS2) ??JOBQ(QBATCHFUT2) +
PRTERRRPT('*YES') ??BATCH(30) +
??TESTTRN(ADMSTNF1) ??TESTLNK(ADMLNKF2) +
??RTGDTA('QCMDB')
ENDPGM

I'm using a vendor supplied command MQAXAMC which has following parameters.
Function
FLIB
INBOUND :
MQ Manager name
MQ Queue name
MQ channel name
OUTBOUND:
MQ Manager name
MQ Queue name
MQ channel name
SINEX
PENCE
¿JOB? which is shown above, but is not listed here
JOBQ
PRTERRPT
BATCH
TESTTRN
TESTLNK
RTGDATA

Due to strict limitation on not to hard code, I'm looking for an
alternate solution, maybe to store these parameters in a file and
use.? I normally plan to use the same program with different inbound
and outbound queue parameters from time to time by keeping at least
rest of the parameters hard coded.
So at least I like to keep two parameters(inbound & outbound queues)
not hard-coded, if it is not possible to limit all the parameters
(that are in in single quotes) from hard-coded. Any solution or advice
is appreciated.


An example of how a file might be used:

/* Str-create table DDL ;;; partially completed example */
create table MQAXAMCrqs
( Function for AXfunc char( 7) not null
, TestMode for AXtest char( 1) not null
, constraint MQAXACM_pk
primary key (Function, TestMode)
, constraint MQAXACM___AXfunc____Value_Is__Disallowed
check( AXfunc IN ('*START', '*other', '*etc.') )
, constraint MQAXACM___AXtest____Must_Be___Zero_or_One
check( AXtest IN ('0', '1') )
, FileName for AXfile char(10) not null with default
'AXAFILE'
, InBoundManager for AXinbMgr char(30) not null
, InBoundQueue for AXinbQue char(30) not null
, InBoundChannel for AXinbCnl char(30) not null
, OutBoundManager for AXoutMgr char(30) not null
, OutBoundQueue for AXoutQue char(30) not null
, OutBoundChannel for AXoutCnl char(30) not null
, SinexArgs for AXsnxArg char(40) not null with default ' '
, PenceArgs for AXpncArg char(20) not null with default ' '
, JobQueueQual for AXjobQnm char(20) not null with default
'QBATCHFUT2*LIBL '
, PrintErrorRpt for AXErrRpt char(10) not null with default
'*YES '
... BATCH
... TESTTRN
... TESTLNK
... RTGDATA
)
/* End-create table DDL */


/* Str-insert sample data;; partially completed */
insert into MQAXAMCrqs values(
'*START', '0', default
, 'QUANTUM.MSGQ.MGR', 'ADMEM.AXAUS.LF000', 'QIUKVC1.QUANTUM'
, 'QUANTUM.MSGQ.MGR', 'AXAUS.ADMEM.RF000', 'QUANTUM.QIUKVC1'
, 'A1A2A4B1C1D1F1I1K1K2K3L1M1M3P1P2S1', 'LAL1LB'
, default, default
...
/* End-insert sample data */


PGM Parm(&FncRqs) /* MQAXAMC per FncRqs and test\prod environment */
Dcl &FncRqs *char 07 /* parm: *START, etc.; LIKE(&AXfunc) */
DCL &AXAfilLib *char 10 /* Library of AXAFILE in *LIBL */
Dcl &TestMode *lgl value('0')
Dcl &TestModeC *char 01 stg(*defined) defvar(&TestMode 01)
Dcl &JobQName *char 10 stg(*defined) defvar(&AXjobQnm 01)
Dcl &JobQLibr *char 10 stg(*defined) defvar(&AXjobQnm 11)
Dcl &Snx01 *char 02 stg(*defined) defvar(&AXsnxArg 01)
Dcl &Snx02 *char 02 stg(*defined) defvar(&AXsnxArg 03)
Dcl &Snx03 *char 02 stg(*defined) defvar(&AXsnxArg 05)
Dcl &Snx04 *char 02 stg(*defined) defvar(&AXsnxArg 07)
...
Dcl &Snx20 *char 02 stg(*defined) defvar(&AXsnxArg 39)
/* Each field could come from the file definition instead */
/* This declarative overlay may be preferable? */
Dcl &Pnc01 *char 02 stg(*defined) defvar(&AXPncArg 01)
Dcl &Pnc02 *char 02 stg(*defined) defvar(&AXPncArg 03)
Dcl &Pnc03 *char 02 stg(*defined) defvar(&AXPncArg 05)
Dcl &Pnc04 *char 02 stg(*defined) defvar(&AXPncArg 07)
...
Dcl &Pnc10 *char 02 stg(*defined) defvar(&AXPncArg 19)


DclF MQAXAMCrqs OPNID(*NONE)
/* file of MQAXAMC invocations for each request per testmode */
/* file could be extended to, for example, include per user etc.*/


CALLPRC PRC(GetMQAXAMC_Test) RTNVAL(&TestMode)
ovrdbf MQAXAMCrqs TOFILE(*FILE) ovrscope(*ActGrpDfn) +
POSITION(*KEY 2 *N (&FncRqs *cat &TestModeC))
/* per override, must find the specific matching row else error */
/* Take care to set number-of-fields for PRIMARY KEY; e.g. use 0 */
/* Optionally specify the format name for RECORD FORMAT spec */
rcvf /* any error is pretty much fatal; no monitors enabled */
close /* no longer require request parameter file to be opened */

RTVOBJD OBJ(*LIBL/&AXfile) OBJTYPE(*FILE) RTNLIB(&AXAfilLib)
/* Note: if OVRDBF must be honored, perhaps use QDBRTVFD instead */

Select
When (&FncRqs = '*START') Then(Do)
? MQAXAMC
FUNCTION(&FncRqs)
??FLIB(&AXAfilLib) +
??INBOUND( &AXinbMgr &AXinbQue &AXinbCnl ) +
??OUTBOUND( &AXoutMgr &AXoutQue &AXoutCnl ) +
SINEX(&Snx01 &Snx02 &Snx03 &Snx04 &Snx05 +
&Snx06 &Snx07 &Snx08 &Snx09 &Snx10 +
&Snx11 &Snx12 &Snx13 &Snx14 &Snx15 +
&Snx16 &Snx17 &Snx18 &Snx19 &Snx20 )
PENCE(&Pnc01 &Pnc02 &Pnc03 &Pnc04 &Pnc05 +
&Pnc06 &Pnc07 &Pnc08 &Pnc09 &Pnc10 )
??JOB(ADMMQLDUS2) +
??JOBQ(&JobQLibr/&JobQName) +
PRTERRRPT(&AXErrRpt) +
??BATCH(30) /* this and other parms incomplete in file */ +
??TESTTRN(ADMSTNF1) +
??TESTLNK(ADMLNKF2) +
??RTGDTA('QCMDB')
EndDo
EndSelect
ENDPGM


<><><><><><><><><>

Another example would be to encapsulate the retrieved values in procedures, where the data could come from the same file, or anywhere else; i.e. the program is not tightly-coupled to the database file.

PGM Parm(&FncRqs) /* MQAXAMC per FncRqs and test\prod environment */
DCL VAR(&LIB) TYPE(*CHAR) LEN(10)
Dcl &TestMode *lgl value('0')
Dcl &JobQQual *char 20 value('QBATCHFUT2*LIBL ')
Dcl &JobQName *char 10 stg(*defined) defvar(&JobQQual 01)
Dcl &JobQLibr *char 10 stg(*defined) defvar(&JobQQual 11)
Dcl &RtgDta *char 80 value('*JOBD')
Dcl &SnxArg *char 40
Dcl &Snx01 *char 02 stg(*defined) defvar(&SnxArg 01)
Dcl &Snx02 *char 02 stg(*defined) defvar(&SnxArg 03)
Dcl &Snx03 *char 02 stg(*defined) defvar(&SnxArg 05)
Dcl &Snx04 *char 02 stg(*defined) defvar(&SnxArg 07)
...
Dcl &Snx15 *char 02 stg(*defined) defvar(&SnxArg 39)
Dcl &PncArg *char 20
Dcl &Pnc01 *char 02 stg(*defined) defvar(&PncArg 01)
Dcl &Pnc02 *char 02 stg(*defined) defvar(&PncArg 03)
Dcl &Pnc03 *char 02 stg(*defined) defvar(&PncArg 05)
Dcl &Pnc04 *char 02 stg(*defined) defvar(&PncArg 07)
...
Dcl &Pnc10 *char 02 stg(*defined) defvar(&AXPncArg 19)

RTVOBJD OBJ(AXAFILE) OBJTYPE(*FILE) RTNLIB(&LIB)
/* Note: if OVRDBF must be honored, perhaps use QDBRTVFD instead */

CALLPRC PRC(GetMQAXAMC_Test ) RTNVAL(&TestMode)
CALLPRC PRC(GetMQAXAMC_Libr ) PARM(&TestMode) RTNVAL(&LibrName)
CALLPRC PRC(GetMQAXAMC_JobQ ) PARM(&TestMode) RTNVAL(&JobQQual)
CALLPRC PRC(GetMQAXAMC_RtgDta) PARM(&TestMode) RTNVAL(&RtgDta )
CALLPRC PRC(GetMQAXAMC_Sinex ) PARM(&TestMode) RTNVAL(&SnxArg )
CALLPRC PRC(GetMQAXAMC_Pence ) PARM(&TestMode) RTNVAL(&PncArg )
...
? MQAXAMC ...
ENDPGM


--
Regards, Chuck
--
This is the Midrange Systems Technical Discussion (MIDRANGE-L) mailing list To post a message email: MIDRANGE-L@xxxxxxxxxxxx To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/midrange-l
or email: MIDRANGE-L-request@xxxxxxxxxxxx Before posting, please take a moment to review the archives at http://archive.midrange.com/midrange-l.

#####################################################################################

This correspondence is for the named person's use only. It may contain confidential
or legally privileged information, or both. No confidentiality or privilege is waived
or lost by any mistransmission. If you receive this correspondence in error, please
immediately delete it from your system and notify the sender. You must not disclose,
copy or rely on any part of this correspondence if you are not the intended recipient.
Any views expressed in this message are those of the individual sender, except where
the sender expressly, and with authority, states them to be the views of Veda.
If you need assistance, please contact Veda on either :-
Australia 1300-762-207 or New Zealand +64 9 367 6200

As an Amazon Associate we earn from qualifying purchases.

This thread ...

Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.