Tengo una Datawindow con 2 campos:Documento y Observación, ambos son DDDatawindows, y quiero que cuando se escoja en el primer campo (Documento)la opción 1:documento de salida, el segundo campo me muestre un listado de las áreas u oficinas; si se escoge la opción 2:documento de entrada, el segundo campo debe mostrarme un listado de Proveedores. He intentado varias opciones, pero hasta ahora no he tenido los resultados esperados.
Estaré muy agradecido por la respuesta que me brinde.
1 Respuesta
Respuesta de Antonio Garcia
1
1
Antonio Garcia, clipper todas sus versiones (manejo total) power builder todas...
El manejo de un datawindow incluido en un dropdowndatawindow, es un poco peculiar. Aunque al final te das cuenta que es prácticamente lo mismo. Por ejemplo: En la ficha de un producto, tengo un family tree, que incluye familia y subfamilia Cuando estoy atachando un producto a un family tree, simplemente tengo que indicar su familia y subfamilia, pero claro cuando seleccione la familia necesito ver las sub-familias que se encuentran relacionadas, no vaya a colocar una subfamilia que no tenga nada que ver con una familia. Bien entremos en detalle. Para conocer el datawindow que se encuentra intregado en un dropdowndatawindow, deberás utilizar la función GETCHILD() Esta función recibe 2 argumentos, el primero es el nombre de la columna que posee del dddw, y el segundo es una instancia de un objeto llamado DATAWINDOWCHILD, que en definitiva es un DATASTORE. La función en cuestión devuelve un valor del tipo numérico, 1 significa que pudo recuperar el datawindow en caso contrario devuelve un valor -1 Vamos un ejemplo. DATAWINDOWCHILD ldwc_local STRING ls_familia ls_familia = dw_1.GetItemString(1, 'familia') IF (dw_1.GETCHILD('subfamilia', ldwc_local) = 1) THEN ldwc_local.SETTRANSOBJECT(SQLCA) ldwc_local.RETRIEVE(ls_familia) END IF Como veras es simple la proyección la idea es que la función integre el datawindow en la variable ldwc_local, como pudiste observar hay que indicar el objeto de transacción activo, recuerda que cada datawindow contiene su propio objeto de transacción. Luevo simplemente hago un retrieve con un argumento el cual dentro del datawindow object se encuentra condicionado para hacer una discriminación de registros que no cumplan con la condición puesta en la instrucción WHERE. Cada vez que cambia el valor de la columna FAMILIA el proceso de actualización del datawindow en el dddw deberá ser efectuado. De esta forma habrá una relación entre una cosa y la otra. Para finalizar, Cuando integres un dddw, con un datawindow que requiere un argumento, deberás desmarcar la propiedad de AUTORETRIEVE, en la ficha de la columna. De esa forma evitaras que salga en pantalla el molesto cuadro de dialogo, solicitando dicho argumento condicional. Esperoe esto pueda serte de utilidad
Para cambiar el datawindow object del dropdowndatawindow puedes utilizar 2 formas La primera dw_1.Modify("emp_status.dddw.Name='d_status'") la segunda dw_1.object.emp_status.dddw.Name = 'd_status'