HostBridge CA-IDMS Enhanced Integration Feature

HostBridge supports executing IDMS transactions via the standard IDMS UCF interface (HostBridge and CA collaborated to allow UCF to be executed under the CICS Link Bridge interface).  To HostBridge, IDMS transactions executed in this manner appear as well-behaved, non-BMS transactions (3270 data streams are exchanged between HostBridge and IDMS).  As a result, HostBridge generates field names (e.g., field_r1_c5) for each field on a screen.  For some customers this may be adequate. 

However, HostBridge is committed to achieving the “highest fidelity” application integration possible.  To us, this implies achieving integration with CICS-based applications on the basis of field names  (not field locations) within a screen space.  To this end, HostBridge collaborated with CA to incorporate support within HostBridge for CA-IDMS panels/maps. This capability is an optional feature of HostBridge and permits an enhanced level of integration between HostBridge (running under CICS TS) and a CA-IDMS ADSO application.  This document describes this feature.

IDMS supports a robust screen mapping facility which is common used by ADSO applications (from this point on we will use “panel” and “map” interchangeably, unless there is a need to differentiate).  When maps are designed, variable fields on a screen (referred to as “data fields” or “DFLDs”) are assigned names.  These are the names used by an ADSO application to reference the contents of a data field.  Thus, the ideal situation would be for HostBridge to allow fields on an IDMS panel to be referenced using the exact same name.  The HB-IDMS Feature does just that.




Solution Overview

The following diagram provides an overview of the HB-IDMS Enhanced Integration Feature.  The primary components are denoted by the highlighted boxes. 

 Each component will be described in this article. 

HostBridge Panel Import Utility

In order for HostBridge to assign the correct name to an IDMS panel field, it must have knowledge of the IDMS panel(s).  HostBridge keeps such information in its “Screen File”.  Thus, an important part of HB-IDMS integration is importing IDMS panel definitions into the HostBridge Screen File.  This process is performed via a batch job and must be performed for each IDMS panel that HostBridge should recognize.  If a particular IDMS panel has not been imported to HostBridge, no field renaming will occur (the HostBridge generated field names will be used). 

Step 1:  Allocate/Initialize the HostBridge Screen File

If you do not currently have a HostBridge Screen File allocated, then the following job  should be run to define it.  Modify the JCL and IDCAMS commands per your installation requirements.

//JOBCARD  JOB   

//*
//*  DEFINE/INIT HB SCREEN FILE
//*
//STEP1    EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//INPUT    DD *
0000000000000000000000000000000000000000
/*
//SYSIN    DD *
 DEFINE CLUSTER(NAME(HB.LOCSITE.SCRNFILE) NOERASE -
    SHAREOPTION(3) INDEXED FREESPACE(10 10) -
    CYL(60 5) -
    VOLUME(***VOLUME***) -
    RECOVERY NOREUSE) -
   DATA(NAME(HB.LOCSITE.SCRNFILE.DATA) -
     BUFFERSPACE(37376) -
     RECORDSIZE(4086 32600) -
     CONTROLINTERVALSIZE(18432) KEYS(40 0) -
     SPANNED) -
   INDEX(NAME(HB.LOCSITE.SCRNFILE.INDEX) -
     CONTROLINTERVALSIZE(512))                                                        
 
 REPRO -
   INFILE(INPUT) -
   OUTDATASET(HB.LOCSITE.SCRNFILE)                                                        
 
 DEFINE ALTERNATEINDEX (NAME(HB.LOCSITE.SCRNFILE.AIX) -
       RELATE(HB.LOCSITE.SCRNFILE) -
       UPGRADE -
       VOLUME(***VOLUME***) -
       CONTROLINTERVALSIZE(18432) -
       CYL(30 10) -
       KEYS(8 52))                                                         
 
 DEFINE PATH(NAME(HB.LOCSITE.SCRNFILE.PATH) -
        PATHENTRY(HB.LOCSITE.SCRNFILE.AIX))
 
 BLDINDEX INDATASET(HB.LOCSITE.SCRNFILE) -
          OUTDATASET(HB.LOCSITE.SCRNFILE.AIX)
/*
//

The sample JCL can also be found here: idms_hbscreen_define.txt

Step 2:  Define the HostBridge Screen File to CICS


If the HostBridge Screen File is not currently defined to CICS, then the following CICS resources should be defined.  Modify the DSNAME information accordingly.

DEFINE FILE(HBSCREEN)

       GROUP(HBRGROUP)
       DSNAME(HB.LOCSITE.SCRNFILE)
       STRINGS(3)
       RECORDFORMAT(V)
       LSRPOOLID(NONE)
       BROWSE(YES)
       DELETE(NO)
       READ(YES)
       UPDATE(NO)
       DESCRIPTION(Ideal panel definitions)                                                 
*
DEFINE FILE(HBSCRNAM)
       GROUP(HBRGROUP)
       DSNAME(HB.LOCSITE.SCRNFILE.PATH)
       STRINGS(3)
       RECORDFORMAT(V)
       LSRPOOLID(NONE)
       BROWSE(YES)
       DELETE(NO)
       READ(YES)
       UPDATE(NO)
       DESCRIPTION(Ideal panel definitions alt index)

The sample RDO denifitions can also be found here: hbscreen_rdo_definitions.txt

Step 3:  Export the IDMS panels

The following JCL defines an instream procedure, and executes it three times.  The first step in the procedure executes the IDMS Panel Utility to export (“decompile”) a particular Panel.  The second step executes the HostBridge IDMS Panel Import Utility (HBR$IDMS) to process the exported IDMS map.

All DD statements may be modified according to local file naming choices.

//HBIDMSM  PROC

//DECOMP   EXEC PGM=RHDCMPUT,REGION=0M
//STEPLIB  DD  DSN=PROD.IS.CV.LOAD,DISP=SHR
//         DD  DSN=PROD.IS.IDMS.LOAD,DISP=SHR
//SYSCTL   DD  DSN=APPL.IS.DBTRNG.SYSCTL,DISP=SHR
//SYSLST   DD  SYSOUT=*
//SYSPCH   DD DSN=&&DECOMP,DISP=(NEW,PASS),UNIT=SYSDA,
//         SPACE=(CYL,(1,1)),DCB=(LRECL=80,RECFM=FB,BLKSIZE=6160)
//SYSIDMS  DD  DSN=PROD.TEC.IDMS.PARMLIB(DEVDICT),DISP=SHR
//SYSIPT   DD  DUMMY          <<<  OVERRIDE OUTSIDE OF PROC
//*
//PANEL    EXEC PGM=HBR$IDMS,PARM=' -D'
//STEPLIB  DD DISP=SHR,DSN=PROD.TEC.IDMS.HBR.LOAD
//* INPUT FILE CONTAINS EXPORTED IDMS MAP/PANEL (LRECL=80)
//PANELSRC DD DISP=(OLD,DELETE),DSN=&&DECOMP
//* VSAM FILE USED BY HOSTBRIDGE (STORES PARSED INFO)
//VSAMOUT  DD DISP=SHR,DSN=PROD.TEC.HBR.SCRNFILE
//STDOUT   DD SYSOUT=*
//STDERR   DD SYSOUT=*
//SYSOUT   DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSTERM  DD SYSOUT=*
//       PEND
//*
//       EXEC  HBIDMSM
//DECOMP.SYSIPT   DD  *
 PROCESS=DECOMPILE
 MAP=MEMU0000
/*
//       EXEC  HBIDMSM
//DECOMP.SYSIPT   DD  *
 PROCESS=DECOMPILE
 MAP=MEMU2000
/*
//       EXEC  HBIDMSM
//DECOMP.SYSIPT   DD  *
 PROCESS=DECOMPILE
 MAP=MEHI5000
/*
//

The sample procedure can also be found here: idms_export_proc.txt

HostBridge IDMS Exit 18 and RHDCUXIT

In order for HostBridge to assign the correct names to fields on an IDMS panel, HostBridge must know the name of the IDMS panel being referenced by an ADSO application.  Obtaining this information at runtime, and passing it to HostBridge (running within CICS), is the job of the HostBridge IDMS Exit 18.

IDMS User exits 0 through 255 are reserved for “system-invoked numbered” exit routines. Exit 18 is the “output data stream” exit.  At runtime, a system-invoked numbered exit routine is called by IDMS if the exit has been installed in the system by means of the #DEFXIT macro.  #DEFXIT macros are specified in the RHDCUXIT module.

The following JCL has 3 steps and illustrates how to: (1) assemble the HostBridge Exit 18 module, (2) assemble the RHDCUXIT module which invokes the HostBridge Exit 18, and (3) links the resulting RHDCUXIT module.

//JOBCARD  JOB

//*-----------------------------------*                                 
//* ASSEMBLE 'EXIT18' SOURCE          *                                 
//*-----------------------------------*                                 
//ASSMBX18 EXEC PGM=ASMA90,PARM='USING(WARN(11))'                       
//SYSIN    DD DSN=PROD.TEC.HBR.IDMS.JCL(EXIT18HB),DISP=SHR              
//SYSLIB   DD DISP=SHR,DSN=SYS1.MACLIB                                  
//         DD DSN=PROD.TEC.CAI.PBC02.DISTMAC,DISP=SHR                    
//         DD DSN=PROD.TEC.CAI.PBC02.DISTSRC,DISP=SHR                    
//         DD DSN=PROD.TEC.CICSTS31.CICS.SDFHMAC,DISP=SHR                
//         DD DSN=PROD.TEC.HBR.MACLIB,DISP=SHR                           
//         DD DSN=SYS1.MACLIB,DISP=SHR                                   
//         DD DSN=SYS1.MODGEN,DISP=SHR                                   
//         DD DISP=SHR,DSN=SYS1.AMODGEN                                 
//SYSPRINT DD SYSOUT=*                                                  
//SYSPUNCH DD SYSOUT=B                                                  
//SYSUT1   DD DSN=&&SYSUT1,SPACE=(4096,(120,120),,,ROUND),UNIT=SYSDA,   
//            DCB=BUFNO=1                                               
//SYSLIN   DD DSN=&&OBJX18,UNIT=SYSDA,SPACE=(100,(500,150)),            
//            DISP=(MOD,PASS),DCB=(RECFM=FB,LRECL=80,BLKSIZE=3200)      
//*-----------------------------------*                                 
//* ASSEMBLE RHDCUXIT SOURCE          *                                 
//*-----------------------------------*                                 
//ASSMBRHD EXEC PGM=ASMA90,PARM='USING(WARN(11))'                       
//SYSIN    DD DSN=PROD.TEC.HBR.IDMS.JCL(RHDCUXIT),DISP=SHR              
//SYSLIB   DD DISP=SHR,DSN=SYS1.MACLIB                                  
//         DD DSN=PROD.TEC.CAI.PBC02.DISTMAC,DISP=SHR                    
//         DD DSN=PROD.TEC.CAI.PBC02.DISTSRC,DISP=SHR                    
//         DD DSN=PROD.TEC.CICSTS31.CICS.SDFHMAC,DISP=SHR                
//         DD DSN=SYS1.MACLIB,DISP=SHR                                   
//         DD DSN=SYS1.MODGEN,DISP=SHR                                   
//         DD DISP=SHR,DSN=SYS1.AMODGEN                                 
//SYSPRINT DD SYSOUT=*                                                  
//SYSPUNCH DD SYSOUT=B                                                  
//SYSUT1   DD DSN=&&SYSUT1,SPACE=(4096,(120,120),,,ROUND),UNIT=SYSDA,   
//            DCB=BUFNO=1                                               
//SYSLIN   DD DSN=&&OBJRHD,UNIT=SYSDA,SPACE=(100,(500,150)),            
//            DISP=(MOD,PASS),DCB=(RECFM=FB,LRECL=80,BLKSIZE=3200)      
//*-----------------------------------*                                 
//*   LINK RHDCUXIT                   *                                 
//*-----------------------------------*                                 
//LINK     EXEC PGM=IEWL,COND=(4,LT),                                   
// PARM='RENT,AMODE=31,RMODE=ANY,LET,MAP,LIST,SIZE=(524288,65536),NCAL' 
//SYSPRINT DD SYSOUT=*                                                  
//SYSUT1   DD UNIT=SYSDA,SPACE=(CYL,(20,20))                            
//OBJLIBHB DD DSN=&&OBJX18,DISP=(OLD,DELETE)                            
//OBJLIB   DD DSN=&&OBJRHD,DISP=(OLD,DELETE)                            
//SYSLMOD  DD DISP=SHR,                                                 
//            DSN=PROD.TEC.IDMS.HBR.LOAD                                
//SYSLIN   DD *                                                         
 INCLUDE OBJLIB                                                         
 INCLUDE OBJLIBHB                                                       
 ENTRY   UXITEP1                                                        
 NAME    RHDCUXIT(R)                                                    
/*                                                                      
// 

The sample JCL can also be found here: idms_exit18.txt

Appendix A contains the RHDCUXIT source code (#DEFXIT definitions, etc.) used by one customer. 

Appendix B contains a sample HBEXIT18 program.

IDMS Front End System Table

Given the technique used by the HostBridge Exit 18 to send the IDMS panel name to HostBridge across UCF, it would be inappropriate for the HostBridge Exit 18 to take action for all IDMS output requests.  Rather, it should only take action for requests coming from HostBridge.  Thus, an important step in the HostBridge Exit 18 is to determine whether the UCF connection is, in fact, being used by HostBridge. 

UCF connections always involve two components: (1) the UCF “back end” component running within IDMS, and (2) the UCF “front end” component running within a subsystem like CICS.  UCF connections between the front end and back end components have various attributes; one such attribute is the system identifier.  The system ID denotes the characteristics of the UCF front end environment.

The HostBridge Exit 18 assumes that a UCF connection used by HostBridge will have a system id of ‘HB’.  This has two implications.  First, the UCF front end used by HostBridge must specify system id ‘HB’. Second, the system id ‘HB’ must be defined to the UCF back end.

The following job illustrates how to assemble and link the IDMS Front End System Table.  An entry has been added to define ‘HB’ as a valid front end system id.

//JOBNAME  JOB

//ASSEMBLE EXEC PGM=ASMA90,PARM='USING(WARN(11))'                       
//SYSLIB   DD DISP=SHR,DSN=SYS1.MACLIB                                  
//         DD DSN=PROD.TEC.CAI.PBC02.DISTMAC,DISP=SHR                    
//         DD DSN=PROD.TEC.CAI.PBC02.DISTSRC,DISP=SHR                    
//         DD DSN=PROD.TEC.CICSTS31.CICS.SDFHMAC,DISP=SHR                
//         DD DSN=SYS1.MACLIB,DISP=SHR                                   
//         DD DSN=SYS1.MODGEN,DISP=SHR                                   
//         DD DISP=SHR,DSN=SYS1.AMODGEN                                 
//SYSPRINT DD SYSOUT=*                                                  
//SYSPUNCH DD SYSOUT=B                                                  
//SYSUT1   DD DSN=&&SYSUT1,SPACE=(4096,(120,120),,,ROUND),UNIT=SYSDA,   
//            DCB=BUFNO=1                                               
//SYSLIN   DD DSN=&&OBJ(RHDCFSTB),SPACE=(3040,(40,40,5),,,ROUND),       
//            UNIT=SYSDA,DISP=(NEW,PASS),                               
//            DCB=(BLKSIZE=3040,LRECL=80,RECFM=FB,BUFNO=1)              
//SYSIN    DD *                                                         
FSTB     TITLE 'FRONT END SYSTEM TABLE FOR UCF'                         
         #MOPT CSECT=RHDCFSTB,ENV=USER,REGS=NO                          
         EJECT                                                          
         COPY  #UCFDS                                                   
         EJECT                                                          
RHDCFSTB CSECT                                                          
* BLKSIZ= DEFINES THE PACKET SIZE USED FOR THE BULK DATA TRANSFER        
FESTABLE #FESTDEF CNT=17                                                
         #FESTENT FESID=HB                      HOSTBRIDGE              
         #FESTENT FESID=CICS                                            
         #FESTENT FESID=CICSBULK,BLKSIZ=4096    CICS DTS ACCESS         
         #FESTENT FESID=BATCH                                           
         #FESTENT FESID=BATCBULK,BLKSIZ=16384   BATCH DTS ACCESS        
         #FESTENT FESID=IDMS-DC                                         
         #FESTENT FESID=DCXXBULK,BLKSIZ=4096    DC TO DC DTS AC         
         #FESTENT FESID=TSO                                             
         #FESTENT FESID=TIAM                                            
         #FESTENT FESID=UTM                                             
         #FESTENT FESID=UTMBULK,BLKSIZ=4096     UTM DTS ACCESS          
         #FESTENT FESID=CMS,BLKSIZ=8016                                 
         #FESTENT FESID=CMSBULK,BLKSIZ=3920     CMS DTS ACCESS          
         #FESTENT FESID=IMS                                             
         END   FESTABLE                                                 
/*                                                                      
//*                                                                     
//LINK     EXEC PGM=IEWL,                                               
//             PARM='LET,MAP,LIST,SIZE=(524288,65536),NCAL'             
//SYSPRINT DD SYSOUT=*                                                  
//SYSUT1   DD UNIT=SYSDA,SPACE=(CYL,(20,20))                            
//SYSLIN   DD DISP=(OLD,DELETE),DSN=&&OBJ(RHDCFSTB)                     
//SYSLMOD  DD DISP=SHR,                                                 
//            DSN=PROD.TEC.IDMS.HBR.LOAD(RHDCFSTB)
//

The sample JCL can also be found here: idms_front_end_assembly.txt

HostBridge UCF Program and Transaction

The standard UCF front end program distributed with IDMS for use within CICS specifies a system id of ‘CICS’.  As a result, if we used this UCF front end program with HostBridge, the HostBridge Exit 18 will not kick into action (since it’s expecting a system id of ‘HB’).  Thus, we need to generate a HostBridge-specific UCF front end program.

Step 1:  Generate the HostBridge UCF Front End Program

The following JCL illustrates how to generate the HostBridge-specific UCF front end program. This JCL is based on the standard CA-provided JCL to generate a CICS UCF front end program.  The only differences are:

  • ·         Specify SYSTEM=HB
  • ·         Specify NTID=HBI1 (this will be the CICS transaction ID used to invoke this UCF program)
  • ·         Name the module UCFHBI1 (i.e., “UCF HostBridge IDMS interface 1”)

Below, the highlighted lines/items are related to these differences.

//JOBNAME  JOB

//CICSTRNS EXEC PGM=DFHEAP1$,REGION=2048K
//STEPLIB  DD DSN=PROD.TEC.CICS130.CICS.SDFHLOAD,DISP=SHR
//SYSPUNCH DD DSN=&&TRANS(#UCFCICS),DISP=(NEW,PASS),UNIT=SYSDA,
//          SPACE=(CYL,(3,,04)),DCB=(LRECL=80,RECFM=FB,BLKSIZE=3120)
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
*ASM XOPTS(NOPROLOG NOEPILOG EDF SP)
/*
//         DD DSN=PROD.TEC.CAI.PBC02.DISTMAC(#UCFCICS),DISP=SHR
//         DD *
           END
/*
//IDMSINTC EXEC PGM=ASMA90,REGION=2048K
//* PARM='DECK,NOLOAD,NORLD,XREF'
//SYSTERM  DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSLIB   DD DSN=&&TRANS,DISP=(OLD,DELETE)
//         DD DSN=PROD.TEC.CAI.PBC02.DISTMAC,DISP=SHR
//         DD DSN=PROD.TEC.CAI.PBC02.DISTSRC,DISP=SHR
//         DD DSN=PROD.TEC.CICS130.CICS.SDFHMAC,DISP=SHR
//         DD DSN=SYS1.MACLIB,DISP=SHR
//         DD DSN=SYS1.MODGEN,DISP=SHR
//SYSUT1   DD DSN=&&WRKAWORK,UNIT=SYSDA,
//         VOL=SER=BSL203,SPACE=(CYL,(5,1))
//SYSUT2   DD DSN=&&WRKBWORK,UNIT=SYSDA,
//         VOL=SER=BSL203,SPACE=(CYL,(5,1))
//SYSUT3   DD DSN=&&WRKCWORK,UNIT=SYSDA,
//         VOL=SER=BSL203,SPACE=(CYL,(5,1))
//SYSLIN   DD DSN=JMAN.TEC.OBJECT(UCFHBI1),DISP=SHR
//SYSIN    DD *
UCFHBI1  #UCFCICS OS=OS,UCTRAN=TCT,COLOR=YES,DISC=YES
CICSFET  #UCFUFT SYSTEM=HB,NTID=HBI1,MODE=PCONV,PTID=UCFP             
         #UCFUTD TYPE=T3277,MODEL=2
         #UCFUTD TYPE=T3279,BUFSIZ=3840
         #UCFUTD TYPE=T3280,TERM=A560
         #UCFUTD TYPE=T3280,TERM=A561
         #UCFUTD TYPE=T3280,TERM=A562
         #UCFUTD TYPE=T3280,TERM=A563
         #UCFUTD TYPE=T3280,TERM=A564
         #UCFUTD TYPE=T3280,TERM=A565
         #UCFUTD TYPE=T3280,TERM=A566
         #UCFUTD TYPE=T3280,TERM=A56B
         #UCFUTD TYPE=T3280,TERM=A56C
         #UCFUTD TYPE=T3280,TERM=A56D
         #UCFUTD TYPE=T3280,TERM=A56E
         #UCFUTD TYPE=T3280,TERM=A56F
         #UCFDEND
         END UCFHBI1
/*
//LNKUCFC EXEC PGM=IEWL,REGION=2048K,
//     PARM='LET,LIST,MAP,XREF,SIZE=(524288,65536),NCAL,NORENT'
//IN4      DD DSN=PROD.TEC.CICS130.IDMS16RX.LOAD,DISP=SHR
//IN1      DD DSN=PROD.TEC.CAI.PBC02.LOADLIB,DISP=SHR
//IN2      DD DSN=PROD.TEC.CICS130.CICS.SDFHLOAD,DISP=SHR
//IN3      DD DSN=JMAN.TEC.OBJECT,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSUT1   DD  DSN=&&WRKAWORK,UNIT=SYSDA,
//             VOL=SER=BSL203,SPACE=(CYL,(5,1))
//SYSLMOD  DD DSN=PROD.TEC.CICS130.IDMS16RX.LOAD,DISP=SHR
//SYSLIN   DD DDNAME=SYSIN
//SYSIN    DD  *
 INCLUDE IN2(DFHEAI)
 INCLUDE IN3(UCFHBI1)
 INCLUDE IN1(RHDCUCFC)
 INCLUDE IN4(UCFPRINT)
 INCLUDE IN4(IDMSCINT)
 INCLUDE IN2(DFHEAI0)
 MODE AMODE(31),RMODE(24)
 ENTRY UCFHBI1
 NAME UCFHBI1(R)
/*
//

The sample JCL can also be found here: hostbridge_ucf_front_end.txt

Step 2:  Define the HostBridge UCF Front End Program and Transaction to CICS

The HostBridge Front End program and its corresponding transaction must be defined to CICS.  The following CICS resource definitions will accomplish this (they are clones of the CA-provided definitions for program UCFCICS and transaction DBDC).

DEFINE PROGRAM(UCFHBI1)

       GROUP(HBRGROUP)
       LANGUAGE(ASSEMBLER)
       DATALOCATION(BELOW)
       EXECKEY(CICS)
*
DEFINE TRANSACTION(HBI1)
       GROUP(HBRGROUP)
       PROGRAM(UCFHBI1)
       PROFILE(IDMSPRF)
       TASKDATALOC(BELOW)
       TASKDATAKEY(CICS)

The sample RDO definitions can also be found here: ucf_rdo_definitions.txt

HostBridge IDMS Field Rename Feature

Once all the above steps have been accomplished, the HostBridge IDMS Enhanced Integration Feature is ready to use.  And, using this feature is simple:

  • ·         Use the HostBridge UCF Transaction (e.g., HBI1) to establish the connection to IDMS.
  • ·         Specify hb_field_rename=1 on the request.

The following HostBridge script illustrates the invocation of an ADSO transaction, and the exploitation of the HostBridge IDMS Enhanced Integration Feature.  The output of the script is contained in Appendix B.  Note that certain options were specified (e.g, hb_show_screen=1) to make the HostBridge XML output easier to read and reflect the state of the application.  Normally, HostBridge scripts do not process, or display, such XML output.

HostLib( hb, "MSCRHBR" );

var globalCommands =
      '&hb_show_screen=1&hb_field_rename=1&hb_show_rowcol=1';
function hbrun(commands)
{
       output=hb.run(globalCommands + commands );
       input=hb.getCommand();
       writeln(input,'\n\n',output,'\n\n');      
}
function main()
{
//  Get started
       hb.create();
//  Use the HB UCF transaction to enter IDMS
       hbrun("&hb_tranid=hbi1");
//  Execute the ADSO program
       hbrun("&hb_type=ads tehb4000");
//  Navigate to the function we want
       hbrun("&hb_aid=pf3");
       hbrun("&hb_aid=pf1");
//  Specify group and policy number
       hbrun("&MR-ACT-MBR-NUM=065490256&MR-ACT-GRP-NUM=e024216");
//  This idms map uses an indexed field to display the first/last name.
//  Thus, we must specify an index value on the getField method.
//  MR-ADDR-NME is the same name used by the ADS app to refer to these fields.
       lastName=hb.getField("MR-ADDR-NME",0);
       firstName=hb.getField("MR-ADDR-NME",1);
//  Exit the ADSO app such that we get thrown into a BMS app. Cool!
       hbrun("&hb_aid=pf10");
       hbrun("&hb_aid=pf10");
       hbrun("&hb_aid=pf10");
       hbrun("&hb_aid=pf10");
//  Display data we gathered above
       writeln(">>> [",firstName,"] [",lastName,"]");
//  We’re done
       hb.endSession();
    return;
}
main();

The sample script can also be found here: sampleADSOTransaction.hbx
Appendix C contains a sample HostBridge script that executes an ADSO application.

Summary

The HostBridge IDMS Enhanced Integration Feature permits an enhanced level of integration between HostBridge (running under CICS TS) and a CA-IDMS ADSO application.  This Feature allows HostBridge scripts (and XML documents) to reference fields on ADSO panels using the exact same name as the ADSO programs themselves.  As a result, integration solutions based on HostBridge and this Feature can be resilient to changes in the ADSO applications.

This document describes the initial set of capabilities included in this Feature.  We hope that current and prospective customers will provide additional input as to how they would like to see this Feature evolve in future versions.


Appendix A – Sample RHDCUXIT Module

The statements added to define and implement the HostBridge Exit 18 are highlighted.  Note that this RHDCUXIT defines multiple Exit 18’s. 


The source code can also be found here: rhdcuxit.asm

Appendix B – Sample HostBridge

Following is a sample IDMS exit 18 to be used with HostBridge.


This source code can also be found here: EXIT18HB.asm

Appendix C– Sample HostBridge Script Output


The following output was generated by the sample HostBridge script.  This particular ADSO application is unique in that as you exit it, you enter a CICS BMS application.  It illustrates how HostBridge can support both BMS and IDMS field renaming simultaneously, and how the HostBridge script author can be oblivious to this fact. 

HostBridge command:

&hb_show_xml=1&&hb_show_screen=1&hb_field_rename=1&hb_show_rowcol=1&hb_show_attr=0&hb_show_name=0&hb_tranid=hbi1

XML output generated: See sampleADSOTransactionOutput1.xml

HostBridge command:  

&hb_token=f04df849&hb_show_xml=1&&hb_show_screen=1&hb_field_rename=1&hb_debug=0&hb_show_rowcol=1&hb_show_attr=0 &hb_show_name=0&hb_type=ads tehb4000 

XML output generated: See sampleADSOTransactionOutput2.xml

HostBridge command:  

&hb_token=f04df849&hb_show_xml=1&&hb_show_screen=1&hb_field_rename=1&hb_debug=0&hb_show_rowcol=1&hb_show_attr=0&hb_show_name=0&hb_aid=pf3 

XML output generated: See sampleADSOTransactionOutput3.xml

HostBridge command:  

&hb_token=f04df849&hb_show_xml=1&&hb_show_screen=1&hb_field_rename=1&hb_debug=0&hb_show_rowcol=1&hb_show_attr=0&hb_show_name=0&hb_aid=pf1 

XML output generated: See sampleADSOTransactionOutput4.xml

HostBridge command:  

&hb_token=f04df849&hb_show_xml=1&&hb_show_screen=1&hb_field_rename=1&hb_debug=0&hb_show_rowcol=1&hb_show_attr=0&hb_show_name=0&MR-ACT-MBR-NUM=065490256&MR-ACT-GRP-NUM=e024216 

XML output generated: See sampleADSOTransactionOutput5.xml

HostBridge command:  

&hb_token=f04df849&hb_show_xml=1&&hb_show_screen=1&hb_field_rename=1&hb_debug=0&hb_show_rowcol=1&hb_show_attr=0&hb_show_name=0&hb_aid=pf10

 XML output generated: See sampleADSOTransactionOutput6.xml

HostBridge command: 

&hb_token=f04df849&hb_show_xml=1&&hb_show_screen=1&hb_field_rename=1&hb_debug=0&hb_show_rowcol=1&hb_show_attr=0&hb_show_name=0&hb_aid=pf10

XML output generated: See sampleADSOTransactionOutput7.xml

HostBridge command:  

&hb_token=f04df849&hb_show_xml=1&&hb_show_screen=1&hb_field_rename=1&hb_debug=0&hb_show_rowcol=1&hb_show_attr=0&hb_show_name=0&hb_aid=pf10

XML output generated: See sampleADSOTransactionOutput8.xml

HostBridge command: 

&hb_token=f04df849&hb_show_xml=1&&hb_show_screen=1&hb_field_rename=1&hb_debug=0&hb_show_rowcol=1&hb_show_attr=0 &hb_show_name=0&hb_aid=pf10

XML output generated: See sampleADSOTransactionOutput9.xml