The Client/Server Binding assigns a buffer large enough to hold the data blocks defined in the configuration file. This buffer is transferred back and forth whenever control is shifted between the client and server programs. This can impose a load on the network which some users may find unacceptable. Imagine you have a buffer of 24K which contains a 22K record area. If the file which holds these records has a 10-byte key, sending the key from client to server uses 24K when only 10 bytes are actually required. In reality, you do need one or two bytes more than the size of the data, but much less than the size of the entire buffer. This is what Reduced Data Transfer (RDT) provides, a way for you to control the amount of data being passed across the network and for you to limit this data to the absolute minimum required. When Client/Server Binding is used with AAI, the RDT functions are ignored.
Reduced Data Transfer requires a contol flag (use-rdt) and three parameters:
lnk-usr-fcode | The user function indicator. This indicates to the receiver what to do with the data that has just arrived. |
lnk-usr-retcode | The buffer start point. This indicates which of the four data areas will be used as the start point for the transfer. Valid values are: 1=cblock, 2=dblock, 3=eblk, and 4=ublk. The numbers 11 through 14 can also be used to indicate the same address areas but using data compression. Data compression must have been enabled via a configuration file entry or the base (un-compressed) option will be used. A value of zero results in nothing being transferred. This allows you to have a NULL operation without changing the flow of your code by adding various IF statements. This is useful if you choose to process certain functions locally in order to further reduce network traffic. |
lnk-data-length | The length of data to be transferred. |
Consider an application which allows you to add, delete, and load customer details to/from an index file. The record key for the customer details file is a customer code. The application also has an option to clear all customer information from the interface. The code extract below is based on this example application and uses the user-data-block area to hold the record key which is six bytes long. The data block area (dblksize) used by the application to pass the customer record details between the client and the server is called customer-data-block. The data item customer-c-code is a 6-byte data item within customer-data-block and is used to store the record key.
On the client, the code would be similar to:
EVALUATE TRUE WHEN customer-load-flg-true *--- User has entered customer code and selected the "LOAD" *--- option on the interface to read and display the customer *--- details relating to that code. MOVE customer-c-code TO user-data-block SET use-rdt TO TRUE MOVE 1 TO lnk-usr-fcode MOVE 4 TO lnk-usr-retcode MOVE 6 TO lnk-data-length WHEN customer-del-flg-true *--- User has entered a customer code selected the DELETE *--- option to delete the customer record from the file. MOVE customer-c-code TO user-data-block SET use-rdt TO TRUE MOVE 2 TO lnk-usr-fcode MOVE 4 TO lnk-usr-retcode MOVE 6 TO lnk-data-length initialize customer-data-block WHEN customer-clr-flg-true *--- User has selected the CLEAR option to clear the current *--- customer details from the screen. SET use-rdt TO TRUE MOVE 0 TO lnk-usr-retcode initialize customer-data-block PERFORM Set-Up-For-Refresh-Screen END-EVALUATE
The clear option uses a NULL operation because clearing the record is done locally so there is no need to contact the server. Below is an extract from the server program showing the code required to process Reduced Data Transfer. The Client/Server Binding sets the flag send-via-rdt so that you can check the values of lnk-usr-fcode. On the server, the code would be similar to:
WHEN send-via-rdt EVALUATE lnk-usr-fcode WHEN 1 *--- For the LOAD function the server program reads the *--- customer details from the data file and sends the data *--- back to the client using the data area customer-data- *--- block rather using the RDT faclity. Unless the RDT *--- flag is set the client/server bindings will always pass *--- the complete data area (defined by dblksize in the *--- configuration file) between the client and the server. MOVE user-data-block TO customer-c-code SET customer-load-flg-true TO TRUE PERFORM ....... rest of program....... WHEN 2 MOVE user-data-block TO customer-c-code SET customer-del-flg-true TO TRUE PERFORM ....... rest of program....... END-EVALUATE
The Csbind demonstration application uses the Reduced Data Transfer facility.