Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations IamaSherpa on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Using MDT to determine if field was modified 1

Status
Not open for further replies.

cornercubeguy

Programmer
Jun 2, 2004
4
US
I need to be able to tell if a field has been modified on a BMS map being sent/received by a CICS transaction. However whenever I test the MDT bit in the attribute byte of the field I am checking, it is always off regardless of the field being modified or not. I am not using FRSET as a parameter on the SEND MAP command.

Any ideas ?
 
While sending the map, FRSET, ERASEAUP or ERASE options cause the MDT to turn off. FRSET can be specified in the map definition while coding the BMS macro.
While receiving, the MDT is automatically turned on when user enters a value in the field. This can also be achieved by specifying a FSET in the map or by explicitly moving the override value to the attribute byte of the particular field.
 
The situation SowKan describes is correct, and the MDT gets set by the hardware (or PC emulator) whenever a field us updated. This is part of the 3270 specification, and nothing to do with CICS. It's been that way for almost 40 years, so I'd be surprised if there was a problem in this area. It is more probable that you are testing the bit incorrectly. What language are you using, and can you post the code fragment that does the checking please?
 
The transaction is written in PL/I. I was testing it using XPEDITER and displaying the attribute byte in hex. I had also tested it by checking the substr(unspec(attribute byte),8,1) and in both cases it comes up as '0'B;
 
cornercubeguy

I have to ask this question - the attribute byte is in the output map, and the MDT is in the input map. Are you checking the right map? The input map has fields with the following suffixes:

F A flag byte. This is normally set to X'00'. If the field has been modified but no data is sent (that is, the field is cleared) the flag byte is set to X'80'.

I Input data read from the display. It is set to X'00' if no data is entered for that field.

L A 16-bit binary length value. This defines the number of characters that are typed into the data field before it is read by BMS.

In combination these tell you all you need to know about fields thta have been entered, typed over, or cleared, and how much data was entered.

Hope this helps
 
Both the input map and the output map are based on the same pointer (the one that the assembled map is based on), but I did look at the fields attribute byte in each and they were both '00'B even while the length was correct and the fields value showed correct.
 
The length data value fieldL shows that data has been entered in the field (i.e. modified) if it is > 0. So you can use it as your 'MDT'. This works fine unless the user hits EraseEOF (clears the field), as there is no input data and it is set to zero. But in this instance the fieldF byte should have HOBO set, so you can still work out that the data was modified.

So by using the length and the flag byte for the field in tandem you can work out what went down at the terminal.
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top