09 julio 2007

Como clonar dw/ds

Desde luego, si hubiera caído antes en la posibilidad de usar esta opción para clonar dw o crear ds usando dw o viceversa, me hubiera ahorrado muchos quebraderos de cabeza, fijaros sino en la entrada de "Encabezados dinámicos. Con un par..." o en la de "Copiar "Retrieval Arguments" entre dw/ds", podrían haber cambiado mucho en el primer caso e incluso no ser necesario montar todo el tinglado de la copia de retrieval arguments, ya que esta solución, realiza un clonado completo, incluidos los argumentos...

El único matiz que hay que tener en cuenta, es que hay que usar sobre el objeto clonado la función setTransObject(Transaction) si queremos que tenga capacidad de trabajar contra la BD directamente.

En primer lugar tendremos que crear (si no usamos ya uno) un objeto de tipo (dw/ds) al que en nuestro ejemplo nada más crearlo lo guardaremos con el nombre "u_dw", es importante guardarlo para poder usar el nombre del objeto a continuación como parámetro de la función de clonado.

Creamos una función que en nuestro caso llamamos of_clonedw y que tendrá un parámetro, este le llamaremos adw_aux y el tipo corresponderá con el del objeto creado: "u_dw" y utilizaremos el siguiente código:



Lo que estamos haciendo en este código es almacenar en una variable de tipo blob la información del dw/ds, esto en realidad, si se inspecciona la variable, guarda la información del dw como si de un "psr" se tratase. Luego se comprueba si el argumento recibido es válido y en tal caso se realiza un acceptText para fijar el contenido del último campo editado (por si no perdió el foco) y por último se transfiere la información al dw deseado.

Como ejemplo de llamada, supongamos que estamos en una ventana con un dw_1 con datos y queremos copiar este sobre el dw_2:



Recordar que no se transfiere la información de la transacción asignada.

Espero que os permita quitaros muchos dolores de cabeza, y sino, al menos, que os facilite el trabajo. Un saludo para todos.