RE:Datawindows padre e hijo??
Tienes que tener claro dos cosas...
1) un dddw es simplemente un dw que se anida en una columna de otro dw, es decir cualquier datawindow puede llegar a ser un dddw.
2) para definir en una columna de una tabla un dddw, debes seleccionar en el tipo de edicion (Edita tab) de la columna el dddw, se te abren tres filas de edición básicas que son: nombre del dw que va a funcionar como dddw, el campo de despliegue (visualización) y el campo de datos (de donde se va a tomar el dato que se va a almacenar) en la columna de la tabla.
Adcional, se abren otros datos tales como: numero de renglones a desplegar cuando se enfoca la columna, si es editable, flecha vertical, etc...
Si trabajas con 2 dw (padre-hijo podríamos llamarlo) tendrías un dw con las áreas y otro dw con las subareas, al seleccionar un area, el primer dw en el evento "RowFocusChanged!" haría un Retrieve al segundo dw (las Subareas) con el valor (Retrieval Argument) (Número o nombre) del area para extraer de la tabla las subareas que pertenecen a esa area...
Si trabajas en el mismo dw, es decir tienes una columna de area y otra de subarea, puedes trabajar con dwchild, que sería un dw definido para las subareas con el argumento de area... entonces cuando en la columna de area te cambie el valor en el script de itemchanged harías el retrieve del dwchild de la columna de subarea....
Para definir un dwchild:
Tendrías el dw que toma el nombre y el código de subarea con el argumento: area...por ejemplo de nombre (físico) dddw_subarea, el nombre del subarea sería por ej: nombre_subarea, y el codigo de subarea: codigo_subarea
colocas en la columna de la subarea del dw donde guardas la información (que tiene los datos (area y subarea) tipo (Edit) dddw, datawindow Name: dddw_subarea, dato a visualizar: nombre_subarea, dato a almacenar: codigo_subarea.
//definir variable... recomendable de instancia...
datawindowchild idwc_subarea
//script:
dw_1.SetTransObject(SQLCA)
//despues del settransobject del dw donde se van a guardar los datos:
dw_1.GetChild('sub_area',idwc_subarea)
idwc_subarea.SetTransObject(SQLCA)
//Buscas el valor mínimo del area y haces el retrieve para que no te aparezca la ventana de argumentos cuando se inserte el primer renglón...
integer il_codarea
Select min(codigo_area) from areas into il_codarea;
idwc_subarea.retrieve(il_codarea)
// en el evento itemchanged del dw (en este caso como ejemplo dw_1)
integer integer il_codarea
CHOOSE CASE dwo.name
CASE 'codigo_area'
il_codarea=long(data)
idwc_subarea.retrieve(il_codarea)
END CHOOSE
..
Espero que te dé un poco de luz este ejemplo...
Saludos desde Maracay, Venezuela.