Error array boundary exceeded

Hola,
Al intentar cerrar una equivalencia da el error 3 (array boundary exceeded) sobre la funcion uof_retrieve del uo_dw.
Al depurar, el error es Retrieve argument 1 does not match expected type.
Gracias
Eduardo

Hola Eduardo

Esa operación está personalizada?

Emilio

Hola Emilio,
Acá no la tenemos personalizada
Saludos

Aparentemente el error se estaría dando cuando llama a la funcion f_fijar_parametros(s_arg, parametros) ya que s_arg tiene el valor “operacion_equiv” y en la funcion pregunta por s_arg[1] = ‘ua’, lo cual hace que parametros no sea inicializado y regrese a uof_retrieve sin valor. Al continuar la ejecución, la instrucción CHOOSE CASE UpperBound(s_arg) arroja la ejecución al CASE 1, ya que es evaluado por s_arg, que si posee valor y la instrucción Retorno = This.Retrieve(parametros[1]) tira error porque intenta asignar un valor de parametros[1] inexistente.
Mi problema es que no se como solucionar el inconveniente ya que no se que valor debería tener parametros en este caso.
Saludos

Los mensajes son dos cosas distintas.
el de Retrieve argument 1 does not match expected type está indicando que una dw tiene un retrieval argument que no es string y el otro está diciendo que faltan valores.

podés fijarte los retrieval arguments de la dw que está trabajando en ese momento?

Emilio

que tipo de dato debería devolver dk_equiv_operac_pendientes y d_equiv_operac_pendiente_a_cerrar?

Hola Eduardo

Devolver? al hacer el retrieve? editala en el powerbuilder y clickea en el boton de recuperacion de datos. Te mostrará los campos que tiene.

El error estaría pasando por el tipo de retrieval arguments. Me parece.

Emilio

Emilio,
Te paso la funcion uof_retrieve(string parametros) donde se da el error.
El parametro del dw llega bien a la funcion en las variables s_arg y s_tipo.
El problema que detecto en el debug es que la funcion f_fijar_parametros(s_arg, parametros)
que entiendo pasa los valores de s_arg a parametros devuelve parametros vacio.
En la instruccion CHOOSE CASE salta a la instruccion del CASE 1 ya que el CASE es evaluado
usando s_arg que si posee el argumento correctamente, pero cuando intenta ejecutar la instruccion
Retorno = This.Retrieve(parametros[1]) da el error array boundary exceeded.
El dw retrieval arguments es del tipo numero y el nombre es operacion_equiv.
Saludos.
Eduardo

/******************************************************************************
Llama a la función Retrieve con la cantidad de parámetros
que contenga el arreglo de strings que recibe como argumento.
Devuelve el valor de retorno de la función Retrieve.
******************************************************************************/
Integer iAux, rtn
Long Retorno
string s_arg, s_tipo

iAux = f_Get_dw_argumentos(This, s_arg, s_tipo)
If iAux < 0 Then
MessageBox(‘Error’, ‘Falló la Get_dw_Argumentos’)
Return(-1)
ElseIf iAux > 0 and UpperBound(parametros) = 0 Then
rtn = f_fijar_parametros(s_arg, parametros)
If rtn = -1 Then Return 0
End If

/* Reemplaza los nulos por strings vacías */
FOR iAux = 1 TO UpperBound(parametros)
If IsNull(parametros[iAux]) Then parametros[iAux] = ‘’
NEXT

/* Valores de retrieve */
is_valoresretrieve = parametros

CHOOSE CASE UpperBound(s_arg)
CASE 0
Retorno = This.Retrieve()
CASE 1
Retorno = This.Retrieve(parametros[1])
CASE 2
Retorno = This.Retrieve(parametros[1],parametros[2])
CASE 3
Retorno = This.Retrieve(parametros[1],parametros[2],parametros[3])
CASE …
END CHOOSE

Return(Retorno)

cuando se llama a la funcion dw_1.Retrieve(parametros)
el argumento es un array de valores concordante con la cantidad de retrieval arguments de la dw_1.
si el array parametros está vacio y la dw tiene argumentos, entonces va a fijarse si el argumento es ua y pone el valor.

El problema aparentemente estaría en el llamado a dw_1.Retrieve(parametros) que no se está armando correctamente ese array.

Emiliio

Emilio,
En que momento se inicializa el arreglo parametros con los valores del datawindow. En la depuración, cuando ingreso a la función uof_retrieve, parametros ya esta vacío.
Creo que debería revisar el porque no se estan cargando los datos de los parametros en el array parametros.
Te paso la definición para la operación equiv003 para ver si la tengo bien seteada “CEN,uo_dw, d_equiv_operac_pendiente_a_cerrar, uo_dw,d_equiv_otorgada_pendiente_a_cerrar, uo_dw, d_equiv_mensajes_ctrls, dl_acta_equiv”.
Gracias
Eduardo

Hola

En la ventana que comanda la operación debe haber un
dw_1(u otro nombre).uof_retrieve(array)
En ese momento es donde tiene que haber algo en array.
Algun valor compatible con “operacion_equiv”

Emilio

Hola gente, tengo un problema similar.

Agrego un campo a una dw (la personalizo) y me tira este error.

Tomo dk_docentes, la copio como dk_847_docentes, le agrego un campo que necesito mostrar (haciendo un join con una tabla personalizada u847_docentes). A partir de ahí me tira este error de “array boundary exceeded”.

Luego, por más que la deje como la original (volviendo atrás todos los cambios) me sigue dando error y la unica forma de volver atras este problema es pisando la dw que estaba modificando con la vieja.

Es de locos, lo que no se es que es lo que hay que modificar para que esto funcione ya que es agregar solamente un campo más en la dw. Muy frustrante.

Saludos

Juan, al modificar la datawindow en la parte de sql (agregaste un campo), esto hace que cuando vas al layout de la datawindow se te haya desmarcado los campos en el Update Properties. Recorda que esto es usado en las datawindows.
Adjunto una imagen de esa dw.


dk_docentes.JPG

dk_docentes.JPG_thumb.png

Crack!. Era eso.

Muchas gracias! el que sabe sabe. El que no, pregunta al que sabe.

Abrazo

Juan