Recuperar filas de un DW

Hola agdsys!
Soy yo de nuevo con el problema de los argumentos. ¿Es mi primera aplicación y bueno? Hay muchas cosas que no entiendo. ¿Por ejemplo no pude encontrar la opción Autoretrieval que me dijiste.Me indicarías donde lo encuentro? Trabajo con la versión 7.0 (por las dudas)
Te doy más detalles de mi problema:
Es para un inventario forestal. Que realiza mediciones anuales del crecimiento de árboles.
Existen varios CAMPOS, en cada uno hay varias PARCELAS, y en cada una de ellas se miden cada año 25 árboles(porque se toma una muestra).
O sea:
Campos
Parcela
Árbol
Mediciones por año(una fila por cada año)
Para ver estas mediciones quisiera que el usuario establezca el campo, mediante un DDDW, una vez establecido este quisiera que en otro DDDW (que llamo dw_parcela) estén aquellas parcelas existentes de este campo. Y también todas las mediciones para este campo de todas las parcelas en un tercer Dw.
Que hice:
- Un dddw con los campos, dw_campo
- Un dw con las parcelas(dw_parcela), y definí retrieval argument campo
- Un dw con las mediciones (dw_arbolmed), y definí retrieval argument campo y parcela.
Evento itemchanged de dw_campo
string id_campo
int li_null
setNull (li_null)
id_campo=this.GetText()
dw_parcela.settransobject(sqlca)
dw_parcela.Retrieve(integer(id_campo))
dw_arbolmed.SettransObject(sqlca)
dw_arbolmed.Retrieve(integer(id_campo))
Evento itemchanged de dw_parcela
string parcela, id_campo
parcela=this.GetText()
dw_arbolmed.SettransObject(sqlca)
dw_arbolmed.Retrieve(integer(id_campo), string(parcela))
Resultado : cuando elijo el campo me sale el mensaje:
?Expecting 2 argument argument but got 1?
Si especifico solo el campo como retrieval argument para recuperar el dw_arbolmed para ese campo anda bien, ¿pero quisiera lograr con el dw_parcela (y luego por árbol y/o por año) búsquedas? ¿Más finas?. Y bueno no se si hay alguna otra técnica para hacer estas búsquedas.
Desde ya gracias, más que nada por la paciencia!
Marcela

1 respuesta

Respuesta
1
Espero haber entendido el panorama, tu lo que necesitas es que en una pantalla existan 3 cambios (por supuesto que no solo 3), en los que el usuario va a seleccionar gradualmente y dependiendo uno del otro, los datos correspondientes, por ejemplo, si se trata de un control de almacen, esto daría como resultado, la selección del departamento, dependiendo de este la familia, y dependiendo de esta la subfamilia.
Bien.
Como lo veo yo:
Primero:
Generas 3 datawindows object, cada uno basado en las 3 tablas, CAMPOS, PARCELA, ARBOLEDA, (por supuesto que estas tienen todos los campos en común).
Por ejemplo cada datawindow object, tendrá en su vista, (aunque puedes seleccionar todos los campos de la tabla dentro del select), un código o referencia y luego una descripción.
De tal manera que cuando selecciones el item, sepas en realidad, que estas seleccionando. Ok,
Una vez creados los objetos datawindow, y por supuesto, según su grado las referencias, por ej.
CAMPOS --> sin referencias
PARCELAS --> con referencia del campo
ARBOLEDAS --> con referencias del campo y la parcela.
Entonces los relacionas en cada una de las columnas que representan a estas ramas, por medio de un dropdowndatawindow, por supuesto que CAMPOS no necesita de un retrieve previo, puesto que no exige ningún argumento, sin embargo los otros 2 si, por lo que como te decía anteriormente, deberás bloquear la propiedad autoretrieve, esta la puedes encontrar en la parte de propiedades, en la pestaña de EDIT, (realmente no recuerdo si esta propiedad se encuentra incluida en la version 7), en caso de no existir esta propiedad en la pestaña, te recomiendo que consultes las propiedades de las columnas de un datawindow object, por medio de la ayuda online, para orientarte solicita ayuda sobre DESCRIBE, luego selecciona el titulo en verde, y la siguiente pantallee te muestra las múltiples propiedades del datawindow object, organizadas por control.
Una vez hecho esto, te propongo que construyas 2 eventos del usuario, uno podría llamarle ue_parcela, y el otro ue_arboleda, dentro de cada uno integraras un script en el cual selecciones los datos del datawindow asociado según las necesidades ej.
En ue_arboleda, integra un argumento llamado a_campo, el cual te servirá de referencia, luego:
DATAWINDOWCHILD ldwc_parcela
IF (THIS.GetChild('<col_parcela>', ldwc_parcela) = 1) THEN
ldwc_parcela.SetTransObject(SQLCA)
ldwc_parcela.Retrieve(a_campo)
END IF
Igualmente para el evento ue_arboleda, con la diferencia que en este utilizaras 2 argumentos.
Una vez hecho esto, vas al evento ITEMCHANGED(), este evento detecta los cambios efectuados por el operador, dentro de cualquier columna,
en este algo mas o menos asi.
STRING ls_campo
CHOOSE CASE LOWER(dwo.name)
CASE 'campo'
THIS.EVENT ue_parcela(data)
CASE 'parcela'
ls_campo = THIS.GetItem(row, 'campo')
THIS.EVENT ue_arboleda(ls_campo, data)
END CHOOSE
Esto anterior puede mejorarse. Sin embargo es lo esencial, lo que hará es que cuando suceda un cambio en la columna campo entonces extrae los datos relacionados de la parcela, y cuando exista un cambio en la parcela, extrae los datos de la arboleda, conforme al campo y la parcela.
Es posible que encuentres cosas como cuando hagas una selección del campo luego con el ratón vas a arboleda y los datos no están en relación, entonces tendrás que adicionar en el evento que localiza las parcelas según el campo, la arboleda. De tal manera que siempre estén en acuerdo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas