Tengo una dw tipo free form donde uno de los campos es del tipo dropdown, ahora, lo que pasa es que el dw child que lo alimenta espera un retrieval argument, pero cuando le hago el dw_child.settransobject(SQLCA) dw_child.retrieve(arg) Me da un error de que no reconoce la variable "dw_child" o algo así, y si le dejo activada la opción al dropdown de retrieve automático cada que inicio mi ventana me presenta su cajota horrible pidiendo un argumento...
1 respuesta
Respuesta de Antonio Garcia
1
1
Antonio Garcia, clipper todas sus versiones (manejo total) power builder todas...
Este problema esta resuelto en la version 8.0 de pb, si tuvieras esta version el tan simple como en el campo que tienes de tipo dropdowndw, quites el check de la casilla AUTORETRIEVE, Y luego en el evento constructor del datawindow, utilices un script parecido a este: DATAWINDOWCHILD ldw_child IF (THIS.GetChild('campo', ldw_child) = 1) THEN ldw_child.SetTransObject(SQLCA) ldw_child.Retrieve(arg) END IF Explicando: La función GetChild() del datawindow extrae el datawindow object, del campo al cual esta relacionado (1er. Argumento)(no importa si es un external datawindow o no), y este es depositado en el segundo argumento, devuelve un valor tipo numérico si es 1 todo ok, si es -1 hay error. Asumamos que todo esta ok, entonces la variable ldw_child, contiene una especie de datastore, este, funciona como un datawindow pero no es visual, a si es que le asignamos antes de cualquier cosa el objeto transacción, y luego forzamos un retrieve, con los argumentos que sean necesarios. Esto deberá cargar los valores del datawindow relacionado con el campo dropdowndw, y deberá desaparecer la cajota solicitando los argumentos. En caso de no tener la version 8.0 Todo exactamente igual a excepción de que no existe el check de AUTORETRIEVE. Notas: El objeto de transacción se asigna a un data window solo cuando dentro de el existe una petición de datos a una tabla, de lo contrario este no es necesario. En un datawindow tipo external, no es necesario asignar el objeto de transacción, siempre y cuando este se encuentre libre de peticiones de datos a tablas por medio de campos tipo dropdowndw, en este caso es imprescindible, siempre y cuando los datawindow relacionados a los campos no soliciten argumentos para completar su búsqueda. Cuando utilices campos tipo drowdowndw y necesites asignar un objeto de transacción, hazlo por medio de la función SetTransObject() y no por SetTrans() (la ayuda de pb te puede explicar cual es la diferencia). Para finalizar, en caso de tener un campo como el descrito anteriormente, y necesites relacionar los datos del datawindow acoplado al campo dropdowndw, tendrás que utilizar el evento ITEMCHANGED, el cual se dispara cada vez que el valor de un campo va ha ser cambiado, ejecutando el mismo script que al principio te propongo (personalmente este lo incluiría en un evento del datawindow y lo activaría con el POSTEVENT() te invito a ver la ayuda de pb con respecto a esta función la cual te puede dar más ventajas) Como consejo sano, te invito a utilizar los pronombres THIS, PARENT, SUPER los cuales personalmente me parecen que tienen más significado programático, echale un vistazo a la ayuda al respecto. Bien.