When you execute transactions using HostBridge, you may occasionally receive an error message that says that your BMS map does not contain a valid ADSD. 

BMS maps are created when the COBOL programs are compiled that display data on a screen.  Starting with CICS TS 2.1 around the year 2000, IBM began adding a section to the compiled BMS map called an ADSD (Application Data Structure Descriptor).  The ADSD contains the field names the programmer used when they wrote the COBOL programs.  This data allows us to dynamically name all of the fields on the screen with these names.  We use these field names in the services we create.  Using real field names means that we are not reliant on screen geometry and our binding relationship with the application are the field names.  So HostBridge requires these field names for the best integration.

For your maps not to have the ADSD data in them means that the maps have not been recompiled since before CICS TS 2.1, or the BMS map compile routine has been customized to not create the ADSD (by default the ADSD is created).   To get the ADSD data, all you should have to do is recompile the existing map source (not the COBOL programs).  This will not change or affect your applications in any way.

You can use your standard map compile procedure to recompile the map;  if you do not have one, the IBM BMS map compile procedure is DFHMAPS; the default DFHMAPS procedure will create the map with the ADSD.  

In rare instances, you may not be able to locate the map source.  This is especially true if you are executing a transaction provided by an outside vendor, where you are only provided the load module for the map.  In that case, you can execute a program called DFHBMSUP that will recreate the map source from the load module.  The JCL to execute this program is shown below: here: dfhbmsup.txt

//YOURJOB  JOB 
//ITSAPROC PROC MEMBER=XXXXXXX                                 
//BMSUP    EXEC PGM=DFHBMSUP,PARM='your-map-name',REGION=0M          
//STEPLIB  DD DSN=YOUR.CICS.SDFHLOAD,DISP=SHR                
//SYSPRINT DD SYSOUT=*                                         
//DFHRPL   DD DSN=YOUR.LOAD.LIBRARY,DISP=SHR                    
//BMSOUT   DD DSN=YOUR.OUTPUT.FILE,DISP=(NEW,CATLG),
//            UNIT=SYSDA,SPACE=(TRK,(10,10),RLSE),
//            DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)          
//                                               

The source for the JCL is also available here: dfhbmsup.txt

You can then use your standard map compile procedure to compile the source that will be stored in the data set referenced in the BMSOUT DD statement above.

The BMS map generated by DFHBMSUP will have generated field names similar to the following sample snippet:


         TITLE 'YOURMAP Mapset MACRO Definition Listing' 
BZ8AU0U  DFHMSD TYPE=DSECT,LANG=ASM,TIOAPFX=YES,MODE=INOUT 
* 
BZ8AUAU  DFHMDI SIZE=(24,80),COLUMN=1,LINE=1,                          * 
               MAPATTS=(COLOR,PS,HILIGHT,VALIDN,SOSI),                 * 
               DSATTS=(COLOR,PS,HILIGHT,VALIDN),JUSTIFY=(LEFT,FIRST) 
FLD00001 DFHMDF POS=0,LENGTH=9,ATTRB=(UNPROT,FSET),COLOR=BLUE 
FLD00002 DFHMDF POS=10,LENGTH=9,ATTRB=(UNPROT,FSET),COLOR=BLUE 
FLD00003 DFHMDF POS=20,LENGTH=9,ATTRB=(UNPROT,FSET),COLOR=BLUE 
FLD00004 DFHMDF POS=30,LENGTH=9,ATTRB=(UNPROT,FSET),COLOR=BLUE

etc. 

The field names (FLD00001, for example) are not very descriptive compared to a normal BMS map, when the field name will actually give some idea what the data in the field actually represents.  Therefore, DFHBMSUP should only be used when you have no other choice; even then, you should consider editing the newly created map source to provide meaningful field names which can then be referenced in a HostBridge script. 


© 2022 HostBridge Technology, LLC
Unless otherwise noted, all rights reserved.