Try OpenEdge Now
skip to main content
ABL Reference
ABL Syntax Reference : DDE ADVISE statement
 

DDE ADVISE statement

(Windows only)
Instructs the dynamic data exchange (DDE) server associated with a conversation to either create or remove an advise link to the specified data item.
This statement is supported only for backward compatibility. Use the Component Object Model (COM) instead.
Note: Does not apply to SpeedScript programming.

Syntax

DDE ADVISE ddeid{ START | STOP } ITEM name
[ TIME seconds]
[ NO-ERROR ]
ddeid
An integer expression equal to the channel number of the conversation opened for the specified data item. It is the value returned by the DDE INITIATE statement that opened the conversation.
START
Instructs the server to create a link to a data item, and notify the ABL client when the specified data item changes value.
STOP
Instructs the server to remove the link to the specified data item, and stop monitoring its value.
ITEM name
Specifies the name of the server data item to which the link is created or removed. The data item name is a character expression that identifies the data item according to the conventions of the server application (for example, the row and column coordinates of a worksheet cell, such as R2C1 in Microsoft Excel). After creating a link, when the value of the data item specified by name changes, the AVM triggers a DDE-NOTIFY event for the frame that owns the conversation, allowing the client to retrieve the new value.
TIME seconds
Specifies the maximum number of seconds that the ABL client waits for the DDE ADVISE statement to complete, where seconds is an integer expression. If you do not specify the TIME option or specify a value of 0, the AVM waits indefinitely for the statement to complete.
NO-ERROR
By default, if the statement fails to create or remove the link, the AVM raises the ERROR condition, and posts the error to the DDE frame DDE-ERROR attribute. If you specify NO-ERROR, the AVM does not raise the ERROR condition, but does post the error to the DDE frame.

Example

The following fragment shows how to use the DDE ADVISE to set up a procedure to capture a rate-of-change value as it changes in a dynamic model run in a Microsoft Excel worksheet. The example assumes that the Microsoft Excel application is running, and has opened the default Excel worksheet, Sheet1, which runs the model.
After the conversation is opened, the DDE ADVISE statement links to the worksheet cell that maintains the latest rate-of-change value (second column of the fourth row, or R4C2). Every time this cell changes value, the AVM posts a DDE-NOTIFY event to the frame DDEframe, where the value is retrieved using the DDE GET statement, and stored as a decimal in the ChangeRate variable. Meanwhile, if the REPEAT block detects a ChangeRate value greater than 7.5%, the link to cell R4C2 is closed and the procedure continues.
DEFINE VARIABLE Sheet1     AS INTEGER.  NO-UNDO. /* DDE-ID to worksheet */
DEFINE VARIABLE ChangeRate AS DECIMAL   NO-UNDO  /* Rate of change... */
INITIAL 0.0.                                   /* ...starting at zero */
DEFINE VARIABLE CellData   AS CHARACTER NO-UNDO. /* Worksheet cell output */
DEFINE VARIABLE DDEframe   AS HANDLE    NO-UNDO. /* DDE frame handle */

CREATE FRAME DDEframe
TRIGGERS:           /* DDE frame and code to receive */
ON DDE-NOTIFY DO: /* Rate of change data from Excel */
DDE GET Sheet1 TARGET CellData ITEM "R4C2".
ChangeRate = DECIMAL(CellData).
END.
END TRIGGERS.
. . .
/* Open conversation with "Sheet1" and link to rate-of-change value. */
DDE INITIATE Sheet1 FRAME DDEframe APPLICATION "Excel" TOPIC "Sheet1".
DDE ADVISE Sheet1 START ITEM "R4C2".

/* Do some processing while the rate-of-change is within 7.5% */
REPEAT WHILE ChangeRate <= 7.5:
. . .
END. /* 7.5% processing */

/* Go on to other things once the rate of change goes above 7.5%. */
DDE ADVISE Sheet1 STOP ITEM "R4C2".
. . .

Notes

*After a DDE-NOTIFY event is triggered for the conversation, the client application must use the DDE GET statement in a trigger block for the event to retrieve the latest value for name.
*For more information on using the DDE protocol to exchange data with non-ABL applications, see OpenEdge Development: Programming Interfaces.

See also

DDE GET statement, DDE INITIATE statement