Each kind of dialog defines its own application program interface. The Communications/Transactions feature implementations for APPC, MQI, and TCP/IP dialogs each include four different kinds of dialogs as follows:
Because RPC and CICS OS/2 ECI interface does not permit complex dialogs, only simple and proc dialogs are implemented.
The dialog examples in the following sections use records as input or output. To learn more about how IBM Smalltalk uses records and types from external functions, refer to the IBM Smalltalk Programmer's Reference
Simple dialogs take one data record from the initiator of the dialog, send it to the remote program, and return the result from the remote program to the initiator of the dialog. The following code segment illustrates the methods used to send a record:
resultRecord := aDialog initiate: aSendRecord
Multi-receive dialogs take one data record from the initiator of the dialog, send it to the remote program, and return multiple records from the remote program to the object that initiated the dialog. This is accomplished by using one of the following two protocols.
The first protocol declares an owner for the dialog as in the following example:
aDialog owner: self. result := aDialog initiate: aSendRecord.
Then the dialog passes each received record from the remote program to the owner object by sending the message receiveRecord: with the received record as a parameter. Note that this requires the receiveRecord: method to be present in the class of the owner object or in one of its superclasses. The receiveRecord: method manipulates the information in the received record.
The second, more complex protocol allows the received records to be passed to a block instead of being sent in a message to the owner, as illustrated in the following example:
aDialog when: #receiveRecord: evaluate: [:rcvRecord | Transcript show: rcvRecord printString]. result := aDialog initiate: aRecord.
Multi-send dialogs take multiple data records from the initiator of the dialog, sends the records to the remote program, and returns one or more records from the remote program to the object that initiated the dialog. As with the multi-receive dialogs, this is achieved by using one of the following two protocols. You can use both protocols at the same time, for example using a block to send records and an owner to receive records.
The first protocol declares an owner for the dialog, illustrated in the following example:
aDialog owner: self. result := aDialog initiate.
Then the dialog requests each record to be sent to the remote program by sending the sendRecord: message to the owner and passing a blank record as a parameter to be filled in by the sendRecord: method. The dialog passes each received record from the remote program to the owner object by sending the message receiveRecord: with the received record as a parameter. Note that these methods must be present in the class of the owner object or in one of its superclasses.
The second protocol uses blocks to send and receive records, as illustrated in the following examples:
To send records
aDialog when: #sendRecord: evaluate: [:blankRec | CODE].
Where:
You must follow the code fragment with the following line of code.
aDialog initiate.
To receive records
aDialog when: #receiveRecord: evaluate: [:recRecord | CODE].
Where:
You must follow the code fragment with the following line of code.
aDialog initiate.
If your application needs to invoke program logic residing on a remote machine, you can use a proc dialog to do this.
A proc dialog communicates with the server program logic through a record, a formatted chunk of data that is both passed to and received from the server. When your IBM Smalltalk application runs the proc dialog, it passes to it a single record, which can contain both input and output fields. When the function completes, the output fields are filled in with the function's result values.