PDA

Ver la Versión Completa : Field Exit


alfredovh
28/03/06, 17:29:10
Buenos dias a todos.

Soy nuevo en ABAP y necesito resolver un problema urgente. Se trata de modificar dos transacciones estandar de SAP. La condicion es que dependiendo del usuario, se deshabilite un campo de una pantalla y coloque un valor por default desde que entre a la pantalla.

Segun lo que he investigado necesito utilizar un field-exit ya que las transacciones estandar de SAP no se pueden modificar, ya logre hacer un field-exit pero el valor por default solo lo puedo poner hasta que el usuario realiza una accion (presiona enter, etc). Como le puedo hacer para que dicho valor lo ponga desde que se inicie la pantalla y se deshabilite dicho campo??

Espero me puedan ayudar. Saludos.

axapta
28/03/06, 17:43:43
Hola Alfredovh,

Bienvenido a nuestro foro de sap :D .

La verdad es que desconozco las necesidades de tu requerimiento pero has echado un vistazo a este tip.

Autocompletado de campos por defecto de sap.

En el se explica como hacer para que un determinado usuario tenga un campo informado por defecto usando los parámetros de usuario.

La verdad es que no se si este es factible en tu caso o no. A lo mejor tienes 1000 usuarios y lo que necesitas es restringir por perfil, aunque me parece que existe algo similar en lugar de para usuario particular para un perfil.

El problema que tienes con las exit, es eso que son exits, es decir que se ejecutan cuando el usuario interactúa con las transacciones.

Un saludo, ya nos contarás.

alfredovh
28/03/06, 19:00:13
Hola debug.

Muchas gracias por responer, pero temo que eso no me ayudara, explico mas detallamente para ver si me puedes ayudar un poco mas.

Existen las transacciones VD01 (creacion de cliente) y VD02 (modificacion del cliente). Dentro de los datos del cliente existe el campo ZTERM en el cual se determina por claves el tipo de credito que tiene el cliente o si paga de contado (en este caso la clave para contado es NT00).

La empresa requiere que solo determinados usuarios puedan otorgar credito (esto se realizaria creando un objeto de autorizacion) y aquellos usuarios que no tengan dicha autorizacion o perfil no podran otorgar credito, es decir, les debe aparecer por default NT00 y no se debe permitir cambiar dicho campo.

No se si todo esto se pueda realizar con los Field Exit o exista una forma alternativa de realizarlo. Por lo que he leido, dentro del field exit se incluye un authority check para validar si el usuario tiene permisos, pero ya lo demas no se como realizarlo.

Espero y alguien me pueda orientar. GRACIAS.

psolano
29/03/06, 14:47:51
Hola alfredovh.

Hay una manera de modificar el aspecto de campos en transacciones estandar. Son las variantes de pantalla. Con ellas puedes ocultar campos, darles valores por defecto, deshabilitar campos,... Además puedes asignar estas variantes a grupos de usuarios, con lo cual los usuarios que pertenezcan a ese grupo, automáticamente al llamar a la transacción se ejecutará con dicha variante.

El punto donde crear la variante está en el customizing. Ahora mismo no tengo acceso a SAP y no se la transacción. Si no lo encuentras no dudes en pedir ayuda.

Un saludo.

joses
29/03/06, 15:17:17
Hola alfredovh, te recomiendo que te leas el post de nuestro Administrador Tracer acerca del "Autocompletado mediante el uso de los Parámetros de usuario de SAP", con estos parametros puedes rellenar para cada usuario datos.
El Tip lo tienes colgado en la página principal.

Saludos.

alfredovh
29/03/06, 17:27:57
Hola buenos dias.

joses y plosano gracias por sus respuestas.

Creo que lo del tip del autocompletado no me funciona ya que para el campo que necesito no me muestra el ID Parameter, creo que no todos los campos tienen este parametro.

Me interesa mas lo que comentan acerca de las variantes de pantalla solo que no supe en que transaccion o menu se puede encontrar, espero y alguien sepa decirme cual es.

Algo que me pudiera ayudar como alternativa seria lo siguiente:

Supongamos que el usuario entra a la transaccion VD03 (Modificacion) el campo en cuestion ya trae informacion (supongamos que tiene el valor ZO02) entonces el usuario cambia ese valor por ZO03. Existe alguna manera dentro del field exit de obtener el valor que tenia antes de ser cambiado?? Es decir, puedo obtener el valor inicial ZO03 de algun lado?? Como se realizaria??.

Gracias a todos por su interes. Saludos.

psolano
29/03/06, 17:38:54
Buenas de nuevo.

Aquí te mando el link de la ayuda de sap para la creación de screen variants:

http://help.sap.com/saphelp_46c/helpdata/es/7d/f63a16015111d396480000e82de14a/frameset.htm

Un saludo.

alfredovh
29/03/06, 17:55:49
Muchas Gracias psolano.

Voy a checar esa docuementacion que espero me ayude.

Saludos.

hugogo_90
28/02/07, 18:06:42
Hola debug.

Muchas gracias por responer, pero temo que eso no me ayudara, explico mas detallamente para ver si me puedes ayudar un poco mas.

Existen las transacciones VD01 (creacion de cliente) y VD02 (modificacion del cliente). Dentro de los datos del cliente existe el campo ZTERM en el cual se determina por claves el tipo de credito que tiene el cliente o si paga de contado (en este caso la clave para contado es NT00).

La empresa requiere que solo determinados usuarios puedan otorgar credito (esto se realizaria creando un objeto de autorizacion) y aquellos usuarios que no tengan dicha autorizacion o perfil no podran otorgar credito, es decir, les debe aparecer por default NT00 y no se debe permitir cambiar dicho campo.

No se si todo esto se pueda realizar con los Field Exit o exista una forma alternativa de realizarlo. Por lo que he leido, dentro del field exit se incluye un authority check para validar si el usuario tiene permisos, pero ya lo demas no se como realizarlo.

Espero y alguien me pueda orientar. GRACIAS.

Utiliza la transaccion SHD0 para crear la variante de transaccion y ahi mismo en modo de proceso para asignar el valor a los campos que necesites. Ahi mismo puedes asignanarlas para un usuario o grupo de usuarios...
Tambien puedes localizar un user exit y asiagnarla por programacion con ciertas funciones... Validando los usuarios que necesites o el objeto de Autorización.

manuelachetigue
02/03/07, 14:57:23
Buenos dias a todos.

Soy nuevo en ABAP y necesito resolver un problema urgente. Se trata de modificar dos transacciones estandar de SAP. La condicion es que dependiendo del usuario, se deshabilite un campo de una pantalla y coloque un valor por default desde que entre a la pantalla.

Segun lo que he investigado necesito utilizar un field-exit ya que las transacciones estandar de SAP no se pueden modificar, ya logre hacer un field-exit pero el valor por default solo lo puedo poner hasta que el usuario realiza una accion (presiona enter, etc). Como le puedo hacer para que dicho valor lo ponga desde que se inicie la pantalla y se deshabilite dicho campo??

Espero me puedan ayudar. Saludos.
Aunque este tipo de practica ya no es recomendada por SAP, mi recomendación es... ejecuta el programa rsmodprf, te presentará los field exits existentes en el sistema.
En caso de que exista (verificar por el elemento de datos de tu tabla) seleccionarlo y poner las validaciones que requieras, es bien importante que debas de considerar el numero de dynpro en donde quieres que este tú validación en el caso de que no sea asignado ha un dynpro; tendrás problemas para que tu validación se ejecute y en algunos casos este elemento de datos al ser compartido por diferentes transacciones podria arrojar un error no deseado en otro dynpro.

En el caso de no existir hacer lo siguiente:
Presionar en el menu.. Alt+x para crear uno nuevo... (te recuerdo que es siempre sobre el elemento de datos).
Colocar únicamente el valor del elemento de datos a validar pe.. matnr(en el caso de que ya exista alguno y tu quieras crear uno nuevo, colocar un numero consecutivo pe. matnr_1).

Este punto te llevará a la transacción SE37 en automático.
Presionar crear y listo.. ahí puedes colocar tus validaciones que requieras (salvas, activas) y te regresas al programa RsMODPRF para hacerle la asignación del dynpro..

Es necesario recordar que los field-exits solo tienen import (input) Export (output).

Por lo tanto el valor que recibe la función es un input = valor_digitado y si deseas devolver un valor diferente output = resultado...
Por último solamente podrás colocar mensajes de tipo error no acepta warnings ni de sistema.

En espera de que estas pequeñas lineas te sean de utilidad..

manuelachetigue
02/03/07, 15:01:30
Aunque este tipo de practica ya no es recomendada por SAP, mi recomendación es... ejecuta el programa rsmodprf, te presentará los field exits existentes en el sistema.
En caso de que exista (verificar por el elemento de datos de tu tabla) seleccionarlo y poner las validaciones que requieras, es bien importante que debas de considerar el numero de dynpro en donde quieres que este tú validación en el caso de que no sea asignado ha un dynpro; tendrás problemas para que tu validación se ejecute y en algunos casos este elemento de datos al ser compartido por diferentes transacciones podria arrojar un error no deseado en otro dynpro.

En el caso de no existir hacer lo siguiente:
Presionar en el menu.. Alt+x para crear uno nuevo... (te recuerdo que es siempre sobre el elemento de datos).
Colocar únicamente el valor del elemento de datos a validar pe.. matnr(en el caso de que ya exista alguno y tu quieras crear uno nuevo, colocar un numero consecutivo pe. matnr_1).

Este punto te llevará a la transacción SE37 en automático.
Presionar crear y listo.. ahí puedes colocar tus validaciones que requieras (salvas, activas) y te regresas al programa RsMODPRF para hacerle la asignación del dynpro..

Es necesario recordar que los field-exits solo tienen import (input) Export (output).

Por lo tanto el valor que recibe la función es un input = valor_digitado y si deseas devolver un valor diferente output = resultado...
Por último solamente podrás colocar mensajes de tipo error no acepta warnings ni de sistema.

En espera de que estas pequeñas lineas te sean de utilidad..
alfredovh, creo q la cag.... con mi respuesta anterior... me equivoque en la lectura de tu problemática..
una disculpa.. pero bueno si algún dia requieres de eso ya sabes algo más..
salu2