In VSE, ISQL is made up of two transactions: ISQL and CISQ. The former controls the CICS terminal, and the latter controls access to the application server. By creating the second transaction dynamically (instead of hard-coding it as CISQ) you can put different departments or different groups of users into different CICS classes. Each group would have different transaction identifiers for both transactions of ISQL. Because the different groups have different CICS classes, you can limit the number of active ISQL users in each group.
To implement this, create any transaction ID for the first transaction. Then, instead of making CISQ the second transaction ID, make it identical to the first one except for the last character, which should be a 2. For example, if there are five departments, you could have chosen these transaction IDs:
First Second Transaction ID Transaction ID Department -------------- --------------------- ---------- ISQL ISQ2 202 ACCT ACC2 ACCOUNTING SAL SA2 SALES IN I2 INVENTORY P P2 PLANNING
These examples show how the format works for different identifier lengths. Note that when the first transaction ID is one character (P), the 2 is added (P2). Also note that the first transaction ID cannot end with a 2.
Next, decide what the maximum number of ISQL users for each department should be:
First Second Maximum Transaction ID Transaction ID Department ISQL Users -------------- -------------- ---------- ---------- ISQL ISQ2 202 2 ACCT ACC2 ACCOUNTING 3 SAL SA2 SALES 4 IN I2 INVENTORY 3 P P2 PLANNING 2
Next, specify the CICS parameters TRANSID, TCLASS, and CMXT as follows:
You must code an entry for each transaction ID defined. In the above example these are: ISQL, ISQ2, ACCT, ACC2, SAL, SA2, IN, I2, P, and P2. The TRANSACTION must specify the particular transaction ID (for example, TRANSID=ISQ2 for the ISQ2 transaction), and the program name parameter should reference the same program as CISQ or ISQL.
To fully understand these two parameters, it is best to consider them together. To implement the above example, you would code them as follows:
DEFINE TRANSACTION(ISQL) GROUP(DB2710) PROGRAM(ARIITRM) * TWASIZE(300) INDOUBT(BACKOUT) SPURGE(NO) TPURGE(YES) DEFINE TRANSACTION(ISQ2) GROUP(DB2710) PROGRAM(ARIISQL) * TWASIZE(0) INDOUBT(BACKOUT) SPURGE(NO) TPURGE(YES) TCLASS(1) DEFINE TRANSACTION(ACCT) GROUP(DB2710) PROGRAM(ARIITRM) * TWASIZE(300) INDOUBT(BACKOUT) SPURGE(NO) TPURGE(YES) DEFINE TRANSACTION(ACC2) GROUP(DB2710) PROGRAM(ARIISQL) * TWASIZE(0) INDOUBT(BACKOUT) SPURGE(NO) TPURGE(YES) TCLASSS(2) DEFINE TRANSACTION(SAL) GROUP(DB2710) PROGRAM(ARIITRM) * TWASIZE(300) INDOUBT(BACKOUT) SPURGE(NO) TPURGE(YES) DEFINE TRANSACTION(SA2) GROUP(DB2710) PROGRAM(ARIISQL) * TWASIZE(0) INDOUBT(BACKOUT) SPURGE(NO) TPURGE(YES) TCLASS(3) DEFINE TRANSACTION(IN) GROUP(DB2710) PROGRAM(ARIITRM) * TWASIZE(300) INDOUBT(BACKOUT) SPURGE(NO) TPURGE(YES) DEFINE TRANSACTION(I2) GROUP(DB2710) PROGRAM(ARIISQL) * TWASIZE(0) INDOUBT(BACKOUT) SPURGE(NO) TPURGE(YES) TCLASS(4) DEFINE TRANSACTION(P) GROUP(DB2710) PROGRAM(ARIITRM) * TWASIZE(300) INDOUBT(BACKOUT) SPURGE(NO) TPURGE(YES) DEFINE TRANSACTION(P2) GROUP(DB2710) PROGRAM(ARIISQL) * TWASIZE(0) INDOUBT(BACKOUT) SPURGE(NO) TPURGE(YES) TCLASS(5)
These TCLASS values correspond to the positional values in the CMXT parameter. These values are arbitrary, but you should set them up so that a transaction's TCLASS value corresponds to its CMXT positional parameter. In the above example, ISQ2 has a TCLASS value of 1. This means that it is in class 1, which corresponds to the first positional value on the CMXT parameter. The first positional parameter value for CMXT is 2. This means that the maximum number of transactions that can be active in class 1 (TCLASS=1) is 2. Therefore, the number of active Department 202 users of the ISQL-ISQ2 transactions is limited to 2. The same is true for the other TCLASS and CMXT positional values. (For unspecified CMXT values, the default is 1.)