PDA

Ver la Versión Completa : Rutinas de Conversión por RFC


LauraVV
13/07/09, 15:16:40
Buenas!

Me encuentro con un problemilla... :confused: tengo un report en un sistema con una pequeña pantalla de selección que llama por RFC a una función de otro sistema SAP para validar el dato introducido por pantalla. Uno de los campos contiene una rutina de conversión (es de tipo NUMC).
Para que me funcionara, he tenido que crear mi propia rutina de conversión la cual lo único que hace es llamar vía RFC a la auténtica rutina de conversión que está en el otro sistema.

De forma standard, las variables input y output se declaran sin tipo, pero al ser una función RFC me obliga a darles uno y las he declarado como CHAR.
Cuando introduzco un dato válido, me funciona correctamente, me sale el aviso de que se ha introducido un dato válido y me mantiene ese dato en el campo de la pantalla.

El problema viene cuando introduzco uno no válido... me da un Dump. He trampeado el SY-SUBRC poniéndolo a cero para que por lo menos no me salga del Dump y consigo que me salga el aviso de que se ha introducido un dato erróneo, pero ese dato erroneo introducido en la pantalla de selección se borra, no se mantiene. Al debugar, veo que en la función OUTPUT el campo se vuelve ###### y ahí es cuando peta.

¿¿Alguien puede ayudarme??

PD: evidentemente, lo primero que probé es a declararlo como NUMC, pero de esta forma ni siquiera funciona cuando introduzco un dato válido... por eso he tenido que cambiar al CHAR.

ibecerra
14/07/09, 12:52:16
Puedes mostrar el DUMP, para ver de q se trata

Buenas!

Me encuentro con un problemilla... :confused: tengo un report en un sistema con una pequeña pantalla de selección que llama por RFC a una función de otro sistema SAP para validar el dato introducido por pantalla. Uno de los campos contiene una rutina de conversión (es de tipo NUMC).
Para que me funcionara, he tenido que crear mi propia rutina de conversión la cual lo único que hace es llamar vía RFC a la auténtica rutina de conversión que está en el otro sistema.

De forma standard, las variables input y output se declaran sin tipo, pero al ser una función RFC me obliga a darles uno y las he declarado como CHAR.
Cuando introduzco un dato válido, me funciona correctamente, me sale el aviso de que se ha introducido un dato válido y me mantiene ese dato en el campo de la pantalla.

El problema viene cuando introduzco uno no válido... me da un Dump. He trampeado el SY-SUBRC poniéndolo a cero para que por lo menos no me salga del Dump y consigo que me salga el aviso de que se ha introducido un dato erróneo, pero ese dato erroneo introducido en la pantalla de selección se borra, no se mantiene. Al debugar, veo que en la función OUTPUT el campo se vuelve ###### y ahí es cuando peta.

¿¿Alguien puede ayudarme??

PD: evidentemente, lo primero que probé es a declararlo como NUMC, pero de esta forma ni siquiera funciona cuando introduzco un dato válido... por eso he tenido que cambiar al CHAR.

LauraVV
14/07/09, 13:48:59
El dump que daba era porque de forma standard no recogia la excepción y yo se la he puesto (RAISE NOT_FOUND)

Cuando debugo, lo que veo es que cuando estoy introduciendo un dato no válido, primero pasa por la función 'input' de conversión y cuando salta a la función 'output' de conversión, los parámetros input y output se quedan vacíos o con ceros (supongo que porque en el input hace sus selects y comprobaciones y al no encontrar nada, no le pasa nada a la función 'output') y al estar vacio, lo muestra vacio...

Pensé en poner una variable donde guardar el input de entrada, y en caso de no ser válido el dato hacer que el parámetro output fuera igual a la variable que guardé al principio... pero nada... no sé que más probar...

Cuando lo declaro como numc, es cuando en vez de vacio o ceros me salen ######.
No sé si he conseguido explicarme o si te habré liado más xDD

Gracias igualmente por el interés!
Saludos!

ibecerra
14/07/09, 14:05:23
creo saber q es lo q pasa con la funcion.
cuando pasas o recibe parametros deben ser del mismo tipo q tiene la funcion. si no es asi te dumpea!!
ejemplo si la funcion recibe char 20 la variable q vas a pasar debe ser de la misma caracteristicas.
saludos

LauraVV
16/07/09, 15:12:14
Como dije en el primer email, si pongo el mismo tipo de elemento es cuando no funciona, porque en el sistema RM no existe la tabla donde se realiza la rutina de conversión y no lo hace y lo que le llega a la otra máquina son ceros o ###### (las rutinas de conversión se aplican en el mismo momento en que se declara ya la variable, asique me fallaba ya al principio de todo en la propia declaración del campo, la rutina de conversión en sí ya hace su propia validación de si existe o no lo que se ha introducido)

Al final lo he resuelto de otra forma. He declarado el campo que deseaba validar de tipo char (sin rutina de conversión asociada) y se lo paso a una función RFC de la otra máquina (donde sí estan todas las tablas y datos) y en esa función hago directamente la conversión (sin realizar la rutina de conversión completa, sólo realizo el INPUT para ver si convierte el dato) y si me lo convierte correctamente, devuelvo un cero, y si no lo realiza bien, es porque no existe y devuelvo un uno.

De esta forma, en la máquina de RM no pierdo la entrada que se hizo en el campo de la pantalla de selección y siempre se muestra, además de añadirle un mensaje de error en caso de que la función RFC me devolviera un uno.

El campo de la pantalla se perdia porque cuando la función de la rutina de conversión INPUT fallaba, a la función OUTPUT ya no le llegaba nada y por eso se borraba el campo.

:D Un problema menos!! Gracias igualmente por la ayuda!

Un saludo!