Cómo agregar nueva funcionalidad a un menú GOS ya habilitado
Aprenda como agregar nuevas funcionalidades al menú GOS estándar de SAP y restringir su visibilidad por transacción
El menú GOS
El menú GOS (Generic Object Services)es una poderosa herramienta estándar de SAP muy útil para usuarios y desarrolladores, que permite el acceso directo a determinadas funciones del sistema. Este menu requiere su habilitación para un rol determinado. En Teknodatips se publicó previamente Cómo habilitar el menú GOS (GenericObjectServices) para un usuario SAP determinado, lectura recomendable para un mejor entendimiento de cómo habilitarlo para un usuario determinado y cómo empezar a usar la funcionalidad preestablecida.
El menú GOS puede contener numerosas funcionalidades de gran utilidad para el usuario, todas ellas accesibles desde las transacciones estándar del sistema. Por ejemplo: monitorear el estado de los Workflows asociados a un objeto de negocio (como por ejemplo una factura, un empleado, una orden de compra, etc.), iniciar un Workflow, adjuntar notas o archivos al objeto, o entre otras, enviar el objeto junto con notas al Business Workplace (SBWP) de otro usuario SAP.
Sin embargo, dependiendo del proyecto a veces es necesario agregar nuevas funcionalidades que ya pudieran existir en el menú GOS disponibles para ese rol de usuario, haciendo posible extender el abanico de utilidades de este menú.
El presente tip mostrará el procedimiento necesario para lograr agregar una nueva entrada al menu GOS, restringir la visibilidad de dichas entradas de menú según el código de transacción, y mostrar como resultado al seleccionar dicha entrada, un listado de datos. Para lograrlo, se redefinirán algunos métodos en una clase Z, heredada de la clase standard CL_GOS_SERVICE.
Agregando nueva funcionalidad al menú GOS
1. El primer paso para agregar una nueva entrada al menú GOS, si se desean redefinir los métodos de la clase estandar, es crear una Clase Z ABAP encargada de ejecutar la nueva funcionalidad. La misma deberá ser subclase de CL_GOS_SERVICE (es una clase abstracta de la cual se derivan todos los servicios que forman parte del GOS).
Para ello ir a la transacción SE24 (ClassBuilder), ingresar el nombre de la nueva clase ABAP (ZCL_NEW_GOS_SERVICE), la cual heredará todos sus métodos y atributos. Hacer click en “Create”:
2. Una vez dentro de la clase generada, ir a la solapa de “Properties”, hacer click en el botón Superclass , e ingresar la clase CL_GOS_SERVICE para que se hereden todos los métodos y atributos estándar necesarios.
3. Una vez indicada la superclase, para este ejemplo CL_GOS_SERVICE, es necesario redefinir al menos dos métodos de la clase ABAP creada para soportar la interfaz exigida por el menú GOS. Estos son EXECUTE (este método se ejecuta cuando el usuario hace click en la entrada del menú correspondiente a la nueva funcionalidad), y CHECK_STATUS (el mismo se ejecuta para validar, según los criterios definidos por el cliente, en qué casos debe aparecer en el menú GOS la nueva entrada). Ir a la solapa “Methods” de la clase ABAP ZCL_NEW_GOS_SERVICE, se selecciona el método y se presiona el botón Redefinir
Si un método no está redefinido, se muestra en color azul. Una vez redefinidos (al presionar el botón Redefinir ), los métodos aparecerán en color negro.
a) Redefiniendo el método CHECK_STATUS - Validación de estado para una transacción (Ej. transacción MM03):
El método CHECK_STATUS, es un método de instancia y se pueden utilizar todos los atributos propios de la clase CL_GOS_SERVICE.
El resultado de este método indica al sistema si la nueva entrada del menú GOS debe mostrarse o no, o si debe mostrarse inactiva ( “grisada”).
Para ello se utiliza el valor de retorno ep_status el cual se puede asignar con las siguientes constantes incluidas en la propia clase CL_GOS_SERVICE:
- MP_STATUS_ACTIVE: El ítem se muestra como activo.
- MP_STATUS_INACTIVE: El ítem se muestra como inactivo (grisado).
- MP_STATUS_INVISIBLE: El ítem NO se muestra.
El método redefinido en la clase ZCL_ NEW_GOS_SERVICE, cuyo código se detalla a continuación, validará por tipo de transacción (para el ejemplo, la Tx MM03) que la funcionalidad del menú GOS esté habilitada para esta transacción:
METHOD check_status.
IF sy-tcode EQ 'MM03'.
ep_status = mp_status_active.
ELSE.
ep_status = mp_status_inactive.
ENDIF.
ENDMETHOD.
b) Redefiniendo el método EXECUTE – Acción a tomar cuando la entrada del menú GOS esté habilitada.
El método EXECUTE de la clase estandar utilizada CL_GOS_SERVICE no contiene ningún código, por lo tanto debe ser definido con la lógica de negocio necesaria.
A fin de ejemplificar, el siguiente código que redefine el método EXECUTE de la clase ZCL_NEW_GOS_SERVICE, mostrará un listado con los datos del material para el cual se ejecuta esta funcionalidad del menú GOS, para aquellas transacciones que no se encuentren restringidas en el método CHECK_STATUS.
METHOD execute.
TYPES: BEGIN OF t_mara,
matnr TYPE mara-matnr,
ernam TYPE mara-ernam,
laeda TYPE mara-laeda,
END OF t_mara.
DATA: ti_mara TYPE STANDARD TABLE OF t_mara.
DATA: lv_repid TYPE sy-repid.
SELECT matnr ernam laeda
FROM mara
INTO TABLE ti_mara
WHERE matnr = gs_lporb-instid.
IF sy-subrc EQ 0.
CALL FUNCTION 'ZALV_SERVICE'
EXPORTING
report_id = lv_repid
s_x_pos = 5
s_y_pos = 5
e_x_pos = 70
e_y_pos = 18
TABLES
itab_data = ti_mara.
ENDIF.
ENDMETHOD.
Observaciones al código anterior:
Desde el método EXECUTE, se puede invocar a funciones, programas estandard de SAP así como también objetos Z propios. En en este caso se utilizó la función 'ZALV_SERVICE' que contendrá el código para la creación del Listado (ALV) (no está provisto en este ejemplo). De este modo, cada vez que el usuario haga click en esta entrada del menú GOS se verá un Listado con información de un material específico.
4. Una vez redefinidos los métodos CHECK_STATUS y EXECUTE de la clase ZCL_NEW_GOS_SERVICE, es necesario para que aparezca en pantalla la opción dentro del menú GOS, agregar el nuevo servicio a la tabla de atributos GOS (SGOSATTR), que contendrá todos los servicios utilizados en el Menu GOS.
Para ello ir a la transacción SM30, ingresar SGOSATTR como nombre de Tabla, y hacer click en “Maintain”. Se mostrará la vista de mantenimiento de dicha tabla.
En el ejemplo se va utilizar un servicio ya definido (“INFO_SERVICE”), donde al hacer Doble Click sobre el mismo es necesario indicar en el campo ‘NEXT SERVICE’ el nombre del nuevo servicio a agregar, en nuestro ejemplo: ‘LISTADO’. Esto hará que el nuevo servicio agregado (LISTADO), aparezca como opción del menú GOS debajo del servicio INFO_SERVICES con descripción “Help for Object Services”.
Luego presionar el botón “New Entries”:
Para el nuevo servicio ‘LISTADO’ se deberá completar con los datos como se muestra en la pantalla siguiente. Luego presionar botón “Save”:
Donde:
- Name of Service: Nombre del servicio a crear.
- Description: Nombre de la opción del menu del GOS.
- Quick Info: Información del Servicio
- Class f. Gen. Service: La clase que contiene los métodos redefinidos a ejecutar.
- Service Type: Indica la entrada en la barra de herramientas de GOS. En este caso seleccionaremos “1 Single Service”, porque es un sólo servicio, indicando un sólo item en el menú GOS. (Hay otras opciones que permiten crear una entrada en el menú principal con submenúes bajo ese menú principal).
- Next Service: Próximo servicio a ejecutar (en este caso queda sin especificar porque no hay un servicio siguiente a ejecutar).
- Control: Se selecciona si se quiere el resultado en el contenedor personalizado.
- Commit required: Si se selecciona, activa un “commit” a la base de datos.
Con el paso anterior (4), se completa el procedimiento para agregar y habilitar la nueva funcionalidad al menú GOS.
Accediendo y ejecutando la nueva funcionalidad del menú GOS definida previamente
Para probar la funcionalidad recientemente agregada al menú GOS, se ejecutarán como ejemplo dos transacciones standards (MM03 y XD03) en donde dependiendo de la implementación de los métodos redefinidos, operarán de distintas maneras.
1) Este primer ejemplo, al ejecutar la Tx MM03, se visualiza en el menú GOS la nueva entrada, que además se encuentra habilitada. Esto es así porque según lo indicado en el método CHECK_STATUS, se valida que la transacción MM03 va a tener disponible la funcionalidad agregada, como se muestra en la figura siguiente:
Cada vez que el usuario seleccione la opción del menú GOS “Mostrar Listado”, se mostrará el listado con los datos del material:
2) En el segundo ejemplo, al ajecutar la Transacción standard XD03, (esto pasará con el resto de las transacciones, salvo MM03), se muestra inhabilitada la nueva entrada en el menú GOS para esa transacción:
Para tener en cuenta ...
- Para extender funcionalidad, se puede tomar como base otras clases de servicio, como por ejemplo: CL_GOS_SRV_NOTE_CREATE, CL_GOS_SRV_ATTACHMENT_CREATE, CL_GOS_SRV_PERSONAL_NOTE, CL_GOS_SRV_OUTBOX, CL_GOS_SRV_URL_CREATE, CL_GOS_SRV_ATTACHMENT_LIST
- No todas las clases pueden ser utilizadas como clase base (las que tengan tildada la opción FINAL en la solapa de propiedades de dicha clase, no se podrán utilizar). Por ejemplo: CL_ARL_SRV_LINK , CL_SPH_SRV_SOFTPHONE, CL_GOS_SRV_SEND_OBJECT, CL_WF_SRV_ARCHIVE
Copyright 2015 - Teknoda S.A.
IMPORTANTE: “Notas técnicas de SAP ABAP" se envía con frecuencia variable y sin cargo como servicio a nuestros clientes SAP. Contiene notas/tutoriales/artículos técnicos desarrollados en forma totalmente objetiva e independiente. Teknoda es una organización de servicios de tecnología informática y NO comercializa hardware, software ni otros productos. |