I am not sure I understand how the use of "exposed" variables in objects should work.

There is a problem in ooDialog where something the original developers expected to work, doesn't work.

I'm not sure if this is a logic error on their part, of if ooRexx is not working correctly.  Maybe Rick can clear this up.

Below is: print out showing the problem running an example program and then a class diagram.  I added some say statements to the ooDialog classes to trace what is happening.  
 
The basic problem is that in executeAsync, the exposed DlgData. stem is not set, whereas in execute it is set.  Obviously, the original developer(s) expected it to be set in both places.
 
In PlainBaseDialog there is the construct:
 
::method init
  expose DlgData.
  use DlgData.
 
In both execute and executeAsync there is the construct:
 
::method
  expose DlgData.
  do something with DlgData.
 
The executeAsync is a method of DialogExtensions, which is a mixin class.  So, the quesion is:  should DlgData. be set in correctly when executeAsync runs?  It seems to me it should, but since it is a mixin class, I'm not sure.

C:\work.ooRexx\DlgData.wrong>dlgData.rex
initData.1000 set to: Bamboo
Using execute() to run dialog

In Init UserDialog arg(1)[1000] Bamboo
In init PlainBaseDialog, DlgData.1000: Bamboo
In Execute DlgData.1000: Bamboo
In SetDataStem dataStem.1000 Bamboo

C:\work.ooRexx\DlgData.wrong>dlgData.rex 1
initData.1000 set to: Bamboo
Using executeAsync() to run dialog

In Init UserDialog arg(1)[1000] Bamboo
In init PlainBaseDialog, DlgData.1000: Bamboo
In ExecuteAsync DlgData.1000: DLGDATA.1000
In SetDataStem dataStem.1000 DLGDATA.1000

C:\work.ooRexx\DlgData.wrong>

Here is the class hierarchy:


   *-------------------*        *--------------------*
   |                   *--------* Init()             |
   |  PlainBaseDialog  |        |   expose DlgData.  |
   |                   *---*    |   use DlgData.     |
   *---------*---------*   |    *--------------------*
             |             |
             |             |    *--------------------------*
             |             *----* Execute()                |
             |                  |   expose DlgData.        |
             |                  |   DlgData.1000 -> Bamboo |
             |                  *--------------------------*
   *---------*---------*
   |                   |
   |    BaseDialog     |
   |                   |
   *---------*---------*
             |
             |
             |
   *---------*---------*  *--------------------*
   |                   |  | DialogExtensions   |
   |   UserDialog      *--*   Mixin Class      |
   |                   |  |                    |
   *---------*---------*  *-*------------------*
             |              |
             |              |  *--------------------------------*
             |              *--* ExecuteAsync()                 |
             |                 |   expose DlgData.              |
             |                 |   DlgData.1000 -> DLGDATA.1000 |
             |                 *--------------------------------*
   *---------*---------*
   |                   |
   |  EntryLineDlg     |
   |                   |
   *-------------------*
--
Mark Miesfeld