Está en la página 1de 80

Curso de programación en ABAP/4

Barcelona noviembre de 2006

 Celsa 13 de Noviembre 2.006


índice

1. ¿Qué es SAP?
2. El modelo de datos
3. La lógica de negocio
4. Interfaz de usuario

2
¿Qué es SAP?
mySAP Solutions

mySAP Business Suite


• mySAP Customer Relationship Management
• mySAP ERP
• mySAP Product Lifecycle Management
• mySAP Supply Chain Management
• mySAP Supplier Relationship Management

3
¿Qué es SAP?
SAP Netweaver

Desde el punto de vista técnico,


SAP Netweaver es una
infraestructura tecnológica
para el soporte de los
procesos de negocio.

4
¿Qué es SAP?
SAP Netweaver

SAP Mobile Infrastructure


- Permite comunicación para
dispositivos móviles (Pocket PC,
EPOC, Linux,…).

5
¿Qué es SAP?
SAP Netweaver

SAP Enterprise Portal (EP)


-Independiente de plataforma.
-Basado en roles, para cualquier
audiencia.
-Colaboración de equipo.
-Búsqueda, indexación,
versionamiento para información
no estructurada.

6
¿Qué es SAP?
SAP Netweaver

SAP Business Intelligence


(BI)
- Solución de Inteligencia de
Negocios para toda la compañía.
-Contenido de Negocio para
rápida implantación.
-Completamente integrado a
Portal.
-Arquitectura abierta (Crystal,
Ascential,…).

7
¿Qué es SAP?
SAP Netweaver

SAP Master Data Management


(MDM)
-Integridad de información a lo
largo del negocio.
-Servicio y soporte para
consolidar contenidos.
-Armonización y manejo
centralizado de datos maestros,
Ejp: Datos de clientes, proveed.
- Disponible en mySAP SRM.

8
¿Qué es SAP?
SAP Netweaver

SAP Exchange Infrastructure


(XI)
-Integración para procesos tanto
internos como externos (SAP y
no-SAP).
-Conocimiento de colaboración
preempaquetado.
-Ecosistema de contenido de
colaboración no-SAP.

9
¿Qué es SAP?
SAP Netweaver

SAP Web Application Server


(WAS)
-Java consistente con J2EE y
ABAP.
-Altamente escalable y confiable,
catching avanzado.
-BD y SO independiente.
-Nativo para Web Services.

10
¿Qué es SAP?
MySAP Business Suite

mySAP ERP (Enterprise Resource Planner).


Sistema base para control de compañía.

mySAP SRM (Supplier Relationship


Management). Manejo avanzado de
proveedores.

mySAP CRM (Customer Relationship


Management). Manejo avanzado de Clientes.

mySAP SCM (Supply Chain Management).


Manejo avanzado de cadena de suministros.

mySAP PLM (Product Lifecycle


Management). Manejo avanzado de ciclo de
vida de productos.

11
¿Qué es SAP?
MySAP Business Suite

Strategic E-Learning and Manager and Financial Supply Chain


Enterprise Employee Self Management
Analytics E-Recruiting
Management Services

Self Services

Strategic Enterprise
Analytics Financial Analytics Operations Analytics Workforce Analytics
Management
Financial Supply Chain
Financials Corporate Governance Financial Accounting Management Accounting
Management
Human Capital Employee Relationship Employee Lifecycle Employee Transaction
Workforce Deployment
Management Management Management Management
Operations: Inventory Sales Order Service Order
Purchasing Manufacturing Distribution
Value Generation Management Management Management
Operations: Product Structure
Project Management Quality Management Asset Management
Support Management
Incentive and Commission Real Estate
Corporate Services Travel Management Environment, Health & Safety
Management Management
Solution and
People Integration Information Integration Process Integration Application Platform
Integration Platform

Internet Sales
Exchange
SAP NetWeaver Enterprise Business Infrastructure
Portal Warehouse

Mobile Business People-Centric ERP


Self-Service Procurement

12
¿Qué es SAP?
SAP Graphic User Interface (GUI)

Unidad lógica de agrupación


de datos maestros y
transaccionales

13
¿Qué es SAP?
SAP Graphic User Interface (GUI)
OK Code
Enter
Menú de SAP Atrás

se38 Salida
PF Status
Cancelar

Nueva sesión

Configuración
local de pantalla

14
¿Qué es SAP?
Editor ABAP

Tips:
Configuración: Información que
determina el funcionamiento del sistema.

Datos Maestros: Datos que no


varían mucho en el tiempo y sirven para
Matchcode funcionamiento del Sistema.
Ejp: Nombre del empleado, clasificación
de material, etc.

Datos Transaccionales: Datos


generados por la lógica del negocio.
Ejp: Número de factura, documento de
material, etc.

Programa: Unidad lógica de ejecución. Puede ser un reporte, Module pool, etc. Todos los desarrollos
ABAP deben empezar por Z.

Transacción: Nombre técnico o etiqueta de aplicación, Ejp: SE38. También, las transacciones
hechas
en casa deben empezar por Z.

15
índice

1. ¿Qué es SAP?
2. El modelo de datos
3. La lógica de negocio
4. La interfaz de usuario

16
El modelo de datos

1. Modelo de datos relacional


2. El Data Dictionary (DDIC) de SAP
3. La Tabla y sus elementos principales
4. Índices
5. Vistas de tablas
6. Estructuras
7. Tipo Tabla
8. Ayudas para búsqueda

17
El modelo de datos
El modelo de datos relacional
Conjunto de tablas y relaciones entre tablas que permiten representar y gestionar datos, en una base de datos.

• Tabla
• Campo
• Campo clave
• Clave foránea

Usuarios Préstamos Libros

• Id. Usuario (CP) • Id. Préstamo (CP) • Id. Libro (CP)


• Nombre • Id. Usuario (CF) • Título
• Apellidos • Id. Libro (CF) • Autor
• Fecha préstamo • Editorial
• Fecha retorno • Estado

18
El modelo de datos
El Data Dictionary (DDIC) de SAP

Tipos objetos del DDIC:


• Tabla.
• Vista de tablas
• Tipos de datos
• Estructura
• Tipo tabla
• Elemento de datos
• Grupo de tipos
• Dominio
• Ayuda para búsqueda
• Objeto de bloqueo

19
El modelo de datos
La Tabla y sus elementos principales

Elementos definición Tabla BBDD:


• Estructura.
Campos
 Ayudas para búsqueda
 Campos moneda/cantidad
• Definición técnica.
 Gestión espacio en BBDD
 Gestión de memoria
• Índices
• Estructuras append

20
El modelo de datos
Índices

• ¿Por qué crear/utilizar un índice?


 Para realizar consultas sobre
campos no clave en tablas de
gran volumen de datos 
Consultas más rápidas
• ¿Por qué no crear un índice?
 La existencia de un índice
ralentiza las inserciones de
nuevos registros ya que
implican una reindexación 
Inserciones más lentas

21
El modelo de datos
Vistas de tablas

• Permite realizar una unión de tablas


mediante sus campos claves.
• Se pueden prefijar condiciones de
selección  Filtros en tipo de diseño.
• Es posible seleccionar qué campos
se quiere tener disponibles.

22
El modelo de datos
Estructuras

• Estructura de datos sin capacidad de


almacenamiento.
• Utilización:
 Como estructura append en
tablas.
 Como tipo línea en tipos tabla.
 Para la definición de
elementos propios de GUI.
 Para elementos de
programación en la lógica de
negocio.

23
El modelo de datos
Tipo Tabla

• Estructura de datos sin capacidad de


almacenamiento.
• Dispone de funcionalidades añadidas
sobre el tipo Estructura tradicional:
 Posibilidad de definir y
gestionar el tipo de acceso para
los elementos (p.e. tabla
interna) que se basen en él.
 Permite gestionar como
funcionarán los campos clave
de la tabla interna.

24
índice

1. ¿Qué es SAP?
2. El modelo de datos
3. La lógica de negocio
4. La interfaz de usuario

25
La lógica de negocio

1. ¿Qué entendemos por lógica de negocio?


2. Programación estructurada vs. Abap Objects
3. Elementos básicos programación
4. Objetos de desarrollo SAP

26
La lógica de negocio
¿Qué entendemos por lógica de negocio?

Lógica de negocio es toda aquella programación necesaria para representar uno o varios procesos
de negocio.

Qué no es lógica de Qué es lógica de


negocio negocio
• Gestionar los atributos de los • Operaciones sobre datos
campos de una pantalla. informados por el usuario.

• Gestionar las funcionalidades • Creación, modificación o


(botones) de una aplicación. borrado de objetos de negocio
(p.e. pedidos, facturas,
• Gestión del flujo de pantallas materiales).
dentro de una aplicación.
• Acceso al modelo de datos para
• Tratamiento de errores de recuperación o actualización de
formato en valores informados datos
por el usuario.
• Tratamiento de errores propios
•… del negocio.

•…
27
La lógica de negocio
Programación estructurada vs. ABAP Objects
La programación estructurada es aquella que se basa en el diseño descendente y en la procedimientación de
funcionalidades.

En contraposición a esta técnica de programación, hace años que existe la programación orientada a objetos. Esta
técnica hace énfasis en la representación de las entidades del proceso de negocio en el propio modelo programado.
Transformado las entidades en objetos, sus funcionalidades en métodos y sus características en atributos.

SAP ha desarrollado sus aplicaciones con programación estructurada tradicional. Hasta hace unos años (a partir de la
versión 4.6) no empezó a incorporar la programación orientada a objetos a la implementación de sus aplicaciones.
Para ello desarrolló la tecnología de los ABAP Objects. Desde la aparición del nuevo servidor de aplicaciones WAS, la
apuesta de SAP por ABAP Objects es total y todas las nuevas aplicaciones de SAP se desarrollan mediante esta
técnica de programación.

¿Qué recomienda SAP? Pues utilizar ABAP Objects. Estos son algunos de los principales motivos:

• Encapsulación de datos
• Instanciación explicita de objetos  Gestión más eficiente de la memoria
• Mejor reutilización de código gracias a la herencia
• Gestión de eventos propia
• Más simple de aprender y utilizar que la programación estructurada tradicional
• Chequeo de sintaxis más estricto que previene de la utilización de elementos obsoletos de programación
• Proporciona acceso más simple a las nuevas tecnologías de SAP

28
La lógica de negocio
Elementos básicos programación
Como cualquier lenguaje de programación, ABAP/4 dispone de toda una serie de elementos básicos
para implementar la lógica de negocio que se requiera.
Estos serían los siguientes:

• Tipos de datos básicos


• Declaración de variables y constantes
• Declaración de tablas internas
• Instrucciones de control de proceso
• Lectura y tratamiento de los datos del modelo de datos

29
La lógica de negocio
Elementos básicos programación - Tipos de datos

Tipo Long. Inicial Long. Máx. Valor inicial Descripción


Numéricos
I 4 4 0 Entero
F 8 8 0 Coma flotante
P 8 1 - 16 0 Empaquetado
Hexadecimal
X 1 1 - 65535 X'0 … 0' Hexadecimal
Carácter
C 1 1 - 65535 '…' Alfanumérico
D 8 8 '00000000' Fecha (AAAMMDD)
N 1 1 - 65535 '0 … 0' Carácter numérico
T 6 6 '000000' Tiempo (HHMMSS)
Carácter con longitud variable
STRING 1 Secuéncia de carácters
XSTRING 1 Secuència de bytes

30
La lógica de negocio
Elementos básicos programación - Declaración de variables

• Ejemplos de declaración de tablas de la BD


TABLES: LFA1, MARA, KNA1, EKKO.

• Ejemplos de declaración de constantes


CONSTANTS: pi TYPE P DECIMALS 10 VALUE '3.1415926536'.

CONSTANTS: BEGIN OF myaddress,


name(20) TYPE c VALUE 'Fred Flintstone',
street(20) TYPE c VALUE 'Cave Avenue',
number TYPE p VALUE 11,
postcode(5) TYPE n VALUE 98765,
city(20) TYPE c VALUE 'Bedrock',
END OF myaddress.

• Ejemplos de declaración de variables


DATA <f> ... [TYPE <type>|LIKE <obj>]... [VALUE <val>].
DATA <f>[(<length>)] TYPE <type> [DECIMALS <d>]...

• Ejemplos de declaración de estructuras


DATA: BEGIN OF <structure>,
..............
<campo>...,
..............
END OF <structure>.
31
La lógica de negocio
Elementos básicos programación - Declaración tablas internas
La tabla interna es el elemento de programación utilizado para la gestión de registros de datos. Se
asemejaría a un array de datos o a un cursor de datos. Se pueden definir con área de cabecera de
datos o sin ella:

AA 0064 8900 Cabecera (header line)

AA 0064 12300
AA 0064 10100
Lista
DL 0400 5000

• Ejemplos de declaración de tablas internas con cabecera


DATA: begin of itab occurs 0,
carrid like sflight-carrid,
connid like sflight-connid,
price like sflight-price,
end of itab.

SAP recomienda la utilización de tablas internas sin cabecera y la utilización de estructuras tipo
working area para acceder a la lista de registros de la tabla interna.
• Ejemplos de declaración de tablas internas sin cabecera
DATA: t_sflight type table of sflight.
32
La lógica de negocio
Elementos básicos programación – Instr. control de proceso
• Sentencia IF
IF <condición>. IF <condición>. IF <condición>
… … ...
ENDIF. ELSE. ELSEIF <condición>
… ...
ENDIF. ELSEIF <condición>

ENDIF.

• Sentencia CASE
CASE <campo>.
WHEN <valor>.

WHEN <valor>.

WHEN OTHERS.

ENDCASE.

33
La lógica de negocio
Elementos básicos programación – Instr. control de proceso

• Sentencia DO: Permite ejecutar un bloque de instrucciones tantas veces como se especifique.

DO [ <n> TIMES] [VARYING <f> FROM <f1> NEXT <f 2>].


...
ENDDO.

• Sentencia WHILE: Permite ejecutar un bloque de instrucciones mientras se cumpla una condición.

WHILE <condición> [VARY <f> FROM <f1> NEXT <f 2>].


...
ENDWHILE.

• Sentencias de ruptura en bucle.

CHECK <condición>: Realiza un chequeo de <condición> de forma que si dentro de un bucle


la condición es falsa, saltará todas las instrucciones que siguen al CHECK e iniciará la
siguiente pasada al bucle. Fuera de un bucle si la condición es falsa, saltará todas las
instrucciones que siguen al CHECK hasta el final del evento o programa en proceso.

EXIT: Dentro de un bucle saldrá del mismo y si se encuentra fuera de un bucle saldrá del
programa. Si la instrucción EXIT está dentro de varios bucles anidados, únicamente saldrá del
bucle en proceso.

34
La lógica de negocio
Elementos básicos programación – Acceso al modelo de datos
Para acceder al modelo de datos, ABAP/4 dispone de su propio SQL. Se trata de un SQL que permite
independizar el desarrollo, del SQL nativo que pueda tener el gestor de BBDD que utilice la
instalación de SAP.
Las instrucciones principales del SQL de ABAP/4 son las siguientes:

• SELECT : leer datos de las tablas de la Base de Datos.


• INSERT: añadir registros.
• UPDATE: modificar registros.
• MODIFY: añadir o modificar registros.
• DELETE: borrar registros.
• COMMIT WORK : confirmar cambios en los datos de la tabla.
• ROLLBACK WORK : anular cambio en los datos de la tabla.

Para estudiar la sintaxis propia de cada instrucción ver help.sap.com

35
La lógica de negocio
Elementos básicos programación – Tratamiento tablas internas
Los datos recuperados del modelo de datos mediante SQL, se pueden almacenar en una tabla interna.
El tratamiento de estos datos, se realizará a través del tratamiento de la tabla interna.
Las sentencias principales para el tratamiento de tablas internas son:

• Recorrer una tabla con cabecera.


LOOP AT it_tab.

ENDLOOP.

• Recorrer una tabla sin cabecera.


LOOP AT it_tab INTO wa_tab.

ENDLOOP.

• Lectura directa de registro con cabecera..


READ TABLE it_tab [INDEX n] [WITH KEY <field> = <valor>].

• Lectura directa de registro sin cabecera..


READ TABLE it_tab [INDEX n] [WITH KEY <field> = <valor>] INTO wa_tab.

• Ordenar registros de una tabla.


SORT it_tab BY <field1> <field2>.
36
La lógica de negocio
Elementos básicos programación – Tratamiento tablas internas
• Añadir/agregar/modificar/eliminar registros a una tabla.
APPEND it_tab [FROM wa_tab].
COLLECT it_tab [FROM wa_tab].
MODIFY it_tab [FROM wa_tab] [INDEX n].
DELETE it_tab [FROM wa_tab] [INDEX n].

• Recuperar cantidad registros de una tabla.


DESCRIBE TABLE it_tab LINES line_count.

• Eventos en sentencia LOOP.

 AT FIRST: Realiza las instrucciones que hay a continuación del AT FIRST para la primera
entrada de la tabla.

 AT LAST: Realiza las instrucciones que hay a continuación del AT LAST para la última
entrada de la tabla.

 AT NEW <campo>: Realiza las instrucciones que hay a continuación del AT NEW para cada
inicio de nivel de ruptura.

 AT END OF <campo>: Realiza las instrucciones que hay a continuación del AT END para
cada final de nivel de ruptura.

• Sentencias de ruptura en LOOP: Las mismas que en el caso de bucles.


37
La lógica de negocio
Objetos de desarrollo SAP
Dentro de SAP, se identifican los siguientes objetos de programación:

• Programa ejecutable (reports online o programas batch)


• Modul pool (aplicación ejecutable mediante transacción)
• Módulo de función
• SMARTFORMS (antiguamente, SAPSCRIPT)
• ABAP Objects

Dentro de este apartado, trataremos como objeto de desarrollo propio de la lógica de negocio los
módulos de función (Function Modules) y los ABAP Objects, dado que su utilidad es, básicamente, la
encapsulación de funcionalidades.
El resto de objetos de negocio se tratarán en el apartado que hace referencias a las interfaces con el
usuario.

38
La lógica de negocio
Módulos de Función
Los módulos de función son rutinas que se definen en grupos de funciones y que pueden ser
llamadas desde cualquier programa ABAP. Los grupos de función actúan como contenedores de
módulos de función que están relacionados de alguna forma. Tanto los módulos de función como los
grupos de función se crean desde el ABAP Workbench, mediante el Function Builder (SE37).

Dentro del concepto de módulo de función valdría la pena mencionar dos casos particulares:

• Módulo de Función RFC (Remote Function Call): Los módulos de función definidos como RFC,
tienen la capacidad de poder ser invocados desde un sistema externo a SAP. Este sistema puede ser
otro sistema SAP o un sistema no SAP.

• BAPI (Business Application Programming Interface): Se trata de módulos de función vinculados a


métodos de Business Objects (BO) de SAP. Los BO se identifican con objetos de negocio de SAP
como puedan ser, por ejemplo, materiales, pedidos, facturas, etc … . Las BAPI’s encapsulan
normalmente funcionalidades para leerlos, modificarlos y crearlos.

39
La lógica de negocio
Módulos de Función – Crear MF’s
Un módulo de función se compone de los siguientes elementos.

• Atributos: Se definen los siguientes aspectos:


– Grupo de función al que pertenece el módulo de función
– Descripción del módulo de función
– Forma de ejecución
 Ejecución normal
 Acceso Remoto (RFC)

• Parámetros Import: Se definen los parámetros de entrada del módulo de función. Para ello se
especifica lo siguiente:
– Nombre del parámetro
– Tipo: Se especifica si el parámetro es un tipo del DDIC o bien un es una referencia a una clase
– Tipo referenciado: Se especifica el tipo referenciado que puede ser una estructura, un campo de una tabla,
un elemento de datos, … .
– Opcional: Indica si el parámetro es opcional u obligatorio al llamar al módulo de función

• Parámetros Export: Se definen los parámetros de salida del módulo de función. Se especifican
básicamente los mismos elementos que para los parámetros Import.

• Parámetros Modif.: Se definen los parámetros de entrada/salida del módulo de función. Se


especifican básicamente los mismos elementos que para los parámetros Import.

40
La lógica de negocio
Módulos de Función – Crear MF’s
• Tablas: Se definen parámetros de entrada/salida de tipo tabla interna.

• Excepciones: Se definen las excepciones (errores) que puede retornar el módulo de función. Para
ello se define la excepción y un texto descriptivo. Al lanzar la excepción desde el módulo de función,
el programa que la invoca recibirá en el parámetro de sistema SY-SUBRC un valor númerico
determinado.

• Código fuente: Dentro del código fuente se escribirá toda la lógica de negocio que implementa la
funcionalidad que deba llevar a cabo el módulo de función.

41
La lógica de negocio
Módulos de Función – Llamar a MF’s

Para llamar a un módulo de función, se utiliza la sentencia CALL FUNCTION:

CALL FUNCTION <mod_func>


[EXPORTING p1 = v1 … pn = vn]
[IMPORTING p1 = v1 … pn = vn]
[CHANGING p1 = v1 … pn = vn]
[TABLES p1 = v1 … pn = vn]
[EXCEPTIONS e1 = c1 … en = cn]

Se ha te contemplar que:

• Bajo la cláusula EXPORTING se deben poner todos los parámetros que se desean proporcionar al
MF.

• Bajo la cláusula IMPORTING se deben poner los parámetros que se deseen recibir como respuesta
del MF.

• Bajo las cláusulas CHANGING y TABLES se suministran los valores para todos los parámetros de
ese tipo del MF. Cuando el MF finaliza su ejecución, los valores modificados se retornan a través de
estos tipos de parámetros.

42
La lógica de negocio
ABAP Objects – Glosario de términos
Algo de terminología de ABAP Objects:

• Objeto: Es un fragmento de código fuente que contiene datos y proporciona servicios. Los datos se
identifican con los atributos del objeto. Los servicios se conocen como los métodos. Normalmente, los
métodos operan sobre datos privados, que sólo son visibles para los métodos del objeto. De esta
manera los atributos de un objeto no pueden ser cambiados directamente por un usuario, solo por los
métodos de un objeto. Esto garantiza la consistencia interna del objeto.

• Clase: Una clase describe un objeto. Desde un punto de vista técnico, un objeto es una clase
instanciada en tiempo de ejecución. En teoría, es posible crear multitud de objetos basados en una
única clase. Cada instancia (objeto) de una clase tiene un único identificador y tiene su propio conjunto
de valores para sus atributos.

• Referencia de objeto: En un programa, es posible identificar y direccionar objetos utilizando


referencias univocas a objeto. Las referencias a objeto permiten el acceso a los atributos y métodos
del objeto.

• Encapsulación: Los objetos restringen la visibilidad de sus recursos (atributos y métodos) de los
otros usuarios. Cada objeto tiene su propia interfaz, que determina como otros objetos pueden
interactuar con él. La implementación de un objeto esta encapsulada, de manera que, sea invisible
fuera del objeto mismo.

43
La lógica de negocio
ABAP Objects – Glosario de términos
• Polimorfismo: Métodos idénticos (con igual nombre) actúan de forma diferente en clases diferentes
(es decir la implementación es específica de cada clase). Esto permite direccionar métodos con el
mismo nombre en diferentes objetos. De esta manera, la rutina que haga la llamada puede ser
siempre la misma para todos los objetos.

• Herencia: Es posible utilizar una clase existente para derivar una nueva clase. La clase derivada
hereda los atributos y métodos de la superclase. En todo caso, es posible reescribir los métodos
existentes y, además, añadir de nuevos.

44
La lógica de negocio
ABAP Objects – Clases – Definición
Existe la posibilidad de implementar clases a nivel local (con visibilidad limitada al desarrollo en que se
definen) o a nivel global (la clase es instanciable desde cualquier desarrollo de SAP).

• Definición de Clases Globales

La definición e implementación de una Clase Global se lleva a cabo en el Class Builder (Transacción
SE24) del ABAP Workbench.

• Definición de Clases Locales

Las Clases Locales consisten en código ABAP encerrado entre las sentencias CLASS y ENDCLASS.
Una completa definición de una Clase consiste en un bloque de declaraciones y, si es necesario, de
un bloque de implementaciones.
El bloque de declaración de una Clase sería:

CLASS <clase> DEFINITION.



ENDCLASS.

Contendrá la declaración de todos los componentes (atributos, métodos, eventos) de la clase (Class
Components).

45
La lógica de negocio
ABAP Objects – Clases – Definición
Si se definen métodos en el bloque de declaraciones, entonces es obligatorio definir el bloque de
implementaciones (de esos métodos).

CLASS <clase> IMPLEMENTATION.



ENDCLASS.

El siguiente ejemplo muestra la definición de ambos bloques:


CLASS C_COUNTER DEFINITION.

PUBLIC SECTION.
METHODS: SET_COUNTER IMPORTING VALUE(SET_VALUE) TYPE I,
INCREMENT_COUNTER,
GET_COUNTER EXPORTING VALUE(GET_VALUE) TYPE I.

PRIVATE SECTION.
DATA COUNT TYPE I.

ENDCLASS.

CLASS C_COUNTER IMPLEMENTATION.

METHOD SET_COUNTER.
COUNT = SET_VALUE.
ENDMETHOD.

METHOD INCREMENT_COUNTER.
ADD 1 TO COUNT.
ENDMETHOD.

METHOD GET_COUNTER.
GET_VALUE = COUNT.
ENDMETHOD.

ENDCLASS. 46
La lógica de negocio
ABAP Objects – Clases – Class Components
Los componentes de una Clase determinan su contenido. Al definir la clase, cada componente es
asignado a uno de las tres secciones de visibilidad, que determinan la interfaz de la clase.
Los Class Components que pueden definir una Clase son los siguientes:

• Atributos: Se identifican con los campos de datos de una Clase. El estado de una clase se
determina por los valores de estos atributos. Los tipos de atributos se enumeran a continuación:

– Instance Attributes: El contenido de estos atributos define el estado de una instancia específica. Se
declaran mediante la sentencia DATA.
– Static Attributes: El contenido de estos atributos define el estado de todas las instancias de la Clase. Esto
quiere decir que el valor del atributo es compartido por todas las instancias de Clase, si se cambia el valor
en una instancia repercute en todas ellas. Se declaran mediante la sentencia CLASS-DATA.

• Métodos: Son procedimientos internos de la Clase que definen el comportamiento de un objeto.


Permiten cambiar el contenido de los datos del objeto.
Se declaran mediante la sentencia METHOD <método>.

• Eventos: Se utilizan para lanzar métodos específicos para el tratamiento de eventos (event handler
methods). Los eventos pueden ser lanzados desde métodos de la propia Clase, mediante la sentencia
RAISE EVENT <evento>. Se deberá haber definido un método como event handler para el evento en
cuestión mediante la adición a su definición de la sentencia FOR EVENT <evento> OF <clase>.
• Tipos
• Constantes
47
La lógica de negocio
ABAP Objects – Clases – Visibilidad
La parte de declaración define la visibilidad de los diferentes Class Components, mediante tres áreas
diferenciadas:

• Public section: Los componentes definidos bajo esta sección son accesibles tanto desde dentro
(métodos) como desde fuera de la Clase. Los componentes de esta sección definen la interfaz entre la
Clase y sus usuarios.

• Protected section: Los componentes definidos bajo esta sección son accesibles sólo por los
métodos de la Clase y por las Clases que hereden de ella.

• Private section: Los componentes definidos bajo esta sección son accesibles sólo por los métodos
de la propia Clase.

CLASS <clase> DEFINITION.


PUBLIC SECTION.
...
PROTECTED SECTION.
...
PRIVATE SECTION.
...
ENDCLASS.

48
La lógica de negocio
ABAP Objects – Clases – Objetos
Como ya se indicado antes, un objeto es la instancia de una clase. Cada objeto tiene su propio
identificador y sus propios atributos. Todos los objetos funcionan en el contexto de la ejecución de un
programa ABAP (en su área de memoria).

Para utilizar un Objeto se debe crear una referencia sobre él. Una referencia, es un puntero sobre el
objeto. La referencia sobre un objeto se almacena en una variable.
La definición de una variable que referencie a un objeto se realizará mediante la siguiente sentencia:

DATA: <var_ref> TYPE REF TO <clase>.

A partir de la variable, será posible crear un objeto mediante la sentencia CREATE OBJECT <var_ref>.

Para hacer referencia a los Class Components del Objeto se deberá hacer lo siguiente:

• Referenciar atributo: <var_ref>-><atributo>.


• Llamar a método: CALL METHOD <var_ref>-><método>.

También es posible llamar a Class Components estáticos sin crear el objeto:

• Referencia atributo: <clase>=><atributo>.


• Llamar a método: CALL METHOD <clase>=><método>.
49
índice

1. ¿Qué es SAP?
2. El modelo de datos
3. La lógica de negocio
4. La interfaz de usuario

50
La interfaz de usuario

1. ¿Qué entendemos por interfaz de usuario?


2. Reports
3. Modul pools
4. ALV Grid

51
La interfaz de usuario
Reports
En SAP se entiende por programa ejecutable aquel que puede ejecutarse el mismo sin necesidad de
tener vinculada una transacción. Este tipo programas se pueden, además, ejecutar en fondo.
Dentro de esta categoría se clasificaría los siguiente tipos de programa:

• Reports de listado de datos


• Programas batch
• Batch Inputs

En el siguiente apartado desarrollaremos las técnicas de implementación de reports mediante la


programación tradicional estructurada. Más adelante se ha detallado un apartado para el listado de
datos mediante un componente de SAP que se implementa mediante ABAP Objects, el ALV Grid.

También se describirá, mediante un pequeño ejemplo, como se implementaría un report con


tecnología de ABAP Objects.

52
La interfaz de usuario
Reports
Básicamente, un report es la generación de una lista de salida (por pantalla, impresora u otro medio)
con datos seleccionados del modelo de datos.
La generación de esta lista está sujeta a toda una serie de eventos, que permiten su tratamiento. Los
eventos serían los siguientes:

• INITIALIZATION : Este evento se inicia en el momento que se lanza la ejecución del report. En el
podemos inicializar variables o realizar cualquier tarea previa a la selección de datos
• START-OF-SELECTION : Este evento marca el momento en que se puede iniciar la selección de
datos para el report.
• END-OF-SELECTION : Este evento marca el momento en que se finaliza la selección de datos y se
puede iniciar su tratamiento, y en caso que aplique, su listado mediante las técnicas existentes.
se compone de las siguientes partes:

Existen otros eventos que permiten tratar situaciones más concretas del tratamiento de un report:

• TOP-OF-PAGE : Este evento marca el momento en que se inicia una página nueva en el listado.
• END-OF-PAGE : Este evento marca el momento en que se finaliza una página en el listado.
• AT LINE-SELECTION : Este evento indica que se ha seleccionado un línea del report. Sólo tiene
sentido cuando la salida del report es por pantalla.
• AT USER-COMMAND : Este evento permite gestionar botones (de un menu status) en un informe.

53
La interfaz de usuario
Reports
Pantalla de selección.

Como ya se ha indicado antes, existe la opción de definir una pantalla previa para solicitar al usuario
parámetros a fin de filtrar el resultado del informe.
Para ello se utilizan dos sentencias diferentes:

• PARAMETERS: Permite solicitar al usuario un valor posible para un determinado campo. La


sentencia se detalla de la siguiente manera.

PARAMETERS:<var>
TYPE <tipo>
LIKE <tipo>
DEFAULT <valor> Igual que el VALUE.
OBLIGATORY. Obliga a introducir algún valor.
LOWER CASE. Permite introducir minúsculas.

• SELECT-OPTIONS: Permite solicitar al usuario un rango de valores para un determinado campo.


También es posible indicar una lista concreta de posibles valores.

SELECT-OPTIONS <var> FOR <campo_tabla>.

Es posible complicar estas pantallas de selección mediante la utilización de la selections screens.


54
La interfaz de usuario
Reports

55
La interfaz de usuario
Reports

 Podemos imprimir una línea de Subrayados con la sentencia ULINE.


ULINE /(<offset>)(<Iong>).

 Para saltar una o varias líneas utilizaremos SKIP.


SKIP <n>.
Por defecto el salto será de una única línea.

 Para saltar una página utilizaremos NEW-PAGE.

56
La interfaz de usuario
Reports

 Para escribir un campo, variable o literal justamente debajo de otros sin tener que calcular
la columna, utilizamos la cláusula UNDER del WRITE.

WRITE <campo2> UNDER <campo 1>.

 Si queremos especificar la columna de un texto en forma de variable utilizamos.

POSITION <columna>.

 Si queremos ir a una determinada línea dentro de la misma página.

SKIP TO LINE <n>.

Cuando utilizamos la instrucción WRITE con números empaquetados, el sistema trunca


por la izquierda en caso de ser necesario (deja un * como indicador de que ha truncado) y
rellena con blancos si sobra espacio. Tenemos que tener cuenta que si es negativo el signo
ocupará una posición.

57
La interfaz de usuario
Reports

Ejemplo:
DATA NUMERO TYPE P DECIMALS 2 VALUE -123456.
WRITE NUMERO.
1.234,56-

y si no cabe el número:
WRITE (6) NUMERO.
*4,56-
 Podemos formatear la salida de un número empaquetado.
Evitamos que aparezca el signo con NO-SIGN.

WRITE <campo> NO-SIGN.

Para visualizar importes correctamente dependiendo de la moneda del


importe, usaremos el CURRENCY:

WRITE <campo_importe> CURRENCY<moneda>.

58
La interfaz de usuario
Reports

Si se desea formatear la salida de un campo según una cierta máscara utilizaremos el
parámetro USING EDIT MASK “<mascara>” de la instrucción WRITE.

WRITE <campo> USING EDIT MASK”<mascara>”.

Los caracteres de la máscara pueden ser:

“_ “ : un carácter del campo a formatear.


“:” : un separador. Puede ser cualquier carácter especial menos el “-“.
“LL” : justifica por la izquierda (valor por defecto). (Al principio de la
mascara).
“RR” : justifica por la derecha. (Al principio de la mascara).

Ejemplo:
WRITE /(8) SY-UZEIT IJSING EDIT MASK “_:_:_”.

59
La interfaz de usuario
Reports

Si queremos suprimir los ceros iniciales de una cadena de caracteres haremos:

WRITE <campo_Caracter> NO-ZERO.

 Para formatear fechas es posible realizar:

WRITE <campo_Fecha> DD/MM/YY.


WRITE <campo_Fecha> MM/DD/YY.
WRITE <campo_Fecha> DD/MM/YYYY.
WRITE <campo_Fecha> MM/DD/YYYY.

 Podemos modificar los atributos de pantalla para un campo.

FORMAT INTENSIFIED ON/OFF.


FORMAT INVERSE OFF/ON.
FORMAT INPUT OFF/ON.
FORMAT COLOR n.
FORMAT RESET.

60
La interfaz de usuario
Reports

Formato de página.

También hay un grupo de instrucciones destinadas a dar formato a la salida del


report, ya sea por pantalla o por impresora.

 Podemos hacer tratamientos por inicio y fin de página con los eventos:

TOP-OF-PAGE y END-OF-PAGE.

END-OF-PAGE no se ejecutará si el salto de página se produce con un NEW-


PAGE.

 Si no queremos que la cabecera del report sea la estándar de SAP, ya que la


queremos controlar nosotros directamente en el evento TOP-OF-PAGE,
utilizaremos:

REPORT <Zxxxxxxx> NO STANDARD PAGE HEADING.

61
La interfaz de usuario
Reports

 El formato de la página de report se define también desde la instrucción


REPORT.

REPORT <Zxxxxxxx> LINE-SIZE <n> Ancho de línea.


LINE-COUNT <n(m)> Líneas por página (n).
Si se desea se pueden
reservar líneas para un
pie de página (m).
PAGE-COUNT <n>. No. máximo de páginas.

 Podemos impedir que con un salto de página se corten líneas que pertenezcan a
una agrupación de líneas con significado lógico propio. Con la instrucción RESERVE
reservamos un número de líneas.

RESERVE <n> LINES.


Esta instrucción se colocará justo antes del write que se quiere “reservar”, si no cabe
se imprimirá en la siguiente página.

62
La interfaz de usuario
Reports

Hay varias formas de imprimir un report:

- Una vez ha salido el report por pantalla con la opción de 'Imprimir'.


- Imprimir sin visualizar por pantalla con la opción 'Imprimir' desde la
pantalla de selección o de parámetros.

Desde el programa ABAP/4 podemos controlar la impresión con la instrucción:

NEW-PAGE PRINT ON/OFF Pantalla o impresora.


NO.DIALOG No visualiza la pantalla de
opciones de impresión.
LINE-COUNT <n> Líneas por página.
LINE-SIZE <n> Tamaño de línea.
DESTINATION <des> Impresora destino.
IMMEDIATELY <x>. Impresión inmediata S/N.

63
La interfaz de usuario
Reports
Con lo visto hasta ahora, es posible implementar un programa que liste una serie de datos por
pantalla, o que genere un fichero o que en fondo realice cualquier tarea. Pero mediante la aplicación
de otra serie de técnicas de programación, es posible dar más funcionalidad a los reports, de manera
que puedan interactuar con el usuario.

En el Reporting Interactivo se aprovecha la tecnología SAP para ofrecer informes que van
detallando la información bajo la interacción del usuario, es decir se realizan listados generales que se
visualizan por pantalla y mediante teclas de función o seleccionando posiciones de pantalla, se irá
desarrollando aquella información que solicite el usuario.

En contraste con el reporting clásico, que está asociado con procesos de entornos Batch, el reporting
interactivo es un desarrollo que toma todas las ventajas del entorno online.

Un ejemplo de listado interactivo podría ser una lista de clientes, que permita visualizar sus datos de
dirección, datos bancarios, partidas... etc. en pantallas diferentes , que van apareciendo conforme
vamos seleccionando un cliente y/o solicitamos una función.

64
La interfaz de usuario
Reports

Generando listados interactivos.

Podemos encontrarnos con dos tipos de salida distintos :


- Una lista básica.
- Diversas listas secundarias (o de ramificación) , por ejemplo información
detallada sobre datos de la lista básica.

La lista inicial (básica) la visualizaremos con la sentencia WRITE.

Desde esta lista inicial, el usuario será capaz, de dirigirse a una lista secundaria mediante una
tecla de función o posicionándose con el cursor. Al igual que en las listas básicas, se
implementan el listado con la instrucción WRITE.

Los datos de las listas secundarias aparecerán en una ventana, por encima de la lista principal,
solapando una parte u ocultándola totalmente.

65
La interfaz de usuario
Reports

Para controlar el flujo del report interactivo, tendremos una serie de eventos como :

AT LINE-SELECTION (si lo que se selecciona es una línea),

AT USER-COMMAND(si se pulsa una tecla).

Un report interactivo puede tener como máximo 9 listados secundarios. Si el usuario selecciona
la función BACK el sistema vuelve al listado anterior. ABAP/4 numera los listados a medida que
se van generando, empezando desde 0 (listado básico).

El número del listado en proceso estará en la variable del sistema SY-LSIND.

En el listado básico podemos visualizar cabeceras con TOP-OF-PAGE o con la cabecera estándar,
pero en los listados de ramificación no podemos utilizar cabeceras estándares, utilizaremos el
evento TOP-OF -PAGE DURING LINE-SELECTION.

66
La interfaz de usuario
Reports

La interacción con el usuario.

El usuario tiene dos formas de interactuar con el sistema:

 Seleccionando una línea del listado (con doble-click) o utilizando la


función Seleccionar. Para controlar la entrada del usuario utilizamos
el evento de ABAP, AT LINE-SELECTION.

 Seleccionando una función, pulsando su botón correspondiente o una


tecla de función. Para controlar la entrada del usuario utilizamos el
evento de ABAP, AT USER-COMMAND. El código de la función
solicitada lo podremos obtener con la variable SY-UCOMM.

67
La interfaz de usuario
Reports

Podemos conseguir que un campo de pantalla esté preparado para la


entrada de datos con la cláusula INPUT de la instrucción WRITE.

WRITE <campo> INPUT.

El sistema sobreescribirá en pantalla el contenido del campo y


guardará el nuevo valor en la variable SY-LISEL, después de un
evento AT LINE-SELECTION o AT USER-COMMAND.

68
La interfaz de usuario
Reports
Selección de línea.

La selección de una línea del listado interactivo , ya sea mediante un doble-click o mediante la
función Seleccionar (con Código de función 'PICK'), activa el evento AT LINE -SELECTION.

El proceso de este evento creará una nueva lista, que aparecerá por encima de la anterior. Para
facilitar la orientación del usuario, podemos crear una ventana, (instrucción WINDOW), donde
aparecerá los datos de esta nueva lista, solapándose parcialmente con la lista anterior.

En el evento AT LINE-SELECTION, utilizaremos los datos de la línea seleccionada, para leer


directamente de base de datos y obtener los datos que necesitemos para la nueva lista. En la lista
anterior, tendremos que guardar los datos clave que necesitamos para procesar la siguiente lista con
la sentencia HIDE.

Ejemplo:

TABLES LFAI.
GET LFA 1.
WRITE LFA1-LIFNR.
WRITE LFA1 -NAME1.
HIDE LFAL-LIFNR.
AT LINE-SELECTION.
IF SY-LSIND = 1.
SELECT * FROM LFBK
WHERE LIFNR = LFA1 -LIFNR.
WRITE LIFBK-BANKL,...
ENDSELECT. 69
ENDIF.
La interfaz de usuario
Reports
Selección de Función.

La selección de una función (botón) o tecla de función activa el evento, AT USER-COMMAND. El código
de la función solicitada se guarda automáticamente en la variable
SY-UCOMM. Si además el usuario selecciona una línea, el contenido de esta, podrá ser utilizado en el
proceso.

Existe una serie de funciones que excepcionalmente no pueden activar el evento AT USER-COMMAND .Ni
podrán ser utilizadas para realizar funciones propias:

PICK : Seleccionar ( se utiliza AT LINE SELECTION)


PFn : Tecla de función( se utiliza AT PFn).
PRI : Imprimir
BACK : Volver pantalla anterior
RW : Cancelar
P… : Funciones de Scroll.

70
La interfaz de usuario
Reports

Ejemplo:

TABLES LFAI.
GET LFAI.
WRITE LFA1-LIFNR.
WRITE LFA1-NAME1.
HIDE LFA1-LIFNR.

AT USER-COMMAND.
CASE SY-UCOMM.
WHEN 'BANK'.
IF SY-LSIND = 1.
SELECT * FROM LFBK
WHERE LIFNR = LFA1-LIFNR.
WRITE LIFBK-BANKL,...
ENDSELECT.
ENDIF.
ENDCASE.

71
La interfaz de usuario
Reports

Para recuperar información seleccionada en un listado hay dos posibilidades

- Utilizar el comando HIDE. (La más elegante).

HIDE <campo>.

HIDE guarda el contenido de <campo> de la línea de salida.

- Utilizar la variable del sistema SY-LISEL. (La más sencilla).

En el momento que el usuario selecciona una línea, el contenido de esta se


guardará en la variable del sistema SY-LISEL

72
La interfaz de usuario
Reports

Cambio de ‘Status’.

Un Status (GUI Status) describe que funciones están disponibles en un programa y como se
pueden seleccionar, vía menús, teclas de función o ‘pushbuttons’. Como ya veremos en el
siguiente capítulo, podemos definir un Status mediante el ‘Menu Painter’.

Si un report genera diversas listas, cada una puede utilizar sus propias combinaciones de teclas.
Con la instrucción SET PF-STATUS podemos cambiar la interface de cada lista.

SET PF-STATUS <status>.

En la variable SY-PFKEY tendremos el status del listado en curso.

Visualizar listas secundarias en ventanas.

Podemos visualizar las listas secundarias en ventanas mediante la instrucción WINDOW.

WINDOW STARTING AT <columna> <línea>


(ENDING AT <columna> <línea>).

73
La interfaz de usuario
Reports
Manipular listas

Para leer una línea determinada de la lista en visualización, utilizaremos la instrucción READ LINE
después de un evento AT LINE-SELECTION o AT USER COMMAND.

READ LINE <línea>.

También podemos leer una línea de cualquier listado ramificado.

READ LINE <línea> INDEX <índice>.

donde <índice> es el número de listado.

74
La interfaz de usuario
Reports
Es posible conectar reports interactivos con otros reports o con transacciones.
Podemos llamar a otro report con la instrucción SUBMIT.

SUBMIT <report> (WITH <datos>).

En este caso no se ejecutará la pantalla de selección del report que llamamos y asignaremos el
criterio de selección con la cláusula WITH.

Para visualizar la pantalla de selección utilizamos la cláusula VIA SELECTION SCREEN del
SUBMIT.

La cláusula AND RETURN, para volver al programa original.

Podemos llamar a un transacción con :

LEAVE TO TRANSACTION <cod_Tran>.

En este caso la transacción toma el control del proceso y el report es liberado.

Si queremos que una vez ejecutada la transacción el report recupere el control tendremos que hacer:

CALL TRANSACTION <cod_Tran>.

75
La interfaz de usuario
Modul pools
Se trata de un programa que permite el diálogo con el usuario y tiene asociado una serie de dynpros
(pantallas) con una lógica de proceso. Todos los módulos de SAP funcionan con transacciones.
Un programa de diálogo debe ofrecer:
• Un interfaz ágil para el usuario.
• Verificaciones de formato y consistencia de los datos introducidos por el usuario.
• Fácil corrección de errores en la entrada de datos.
• Acceso a los datos almacenados en la Base de datos de SAP.

La Dynpro (DYNamic PROgram) es el elemento principal de un modul pool. Se mantiene mediante el


Screen Painter, herramienta que está totalmente integrada en el ABAP Development Workbench
(SE80). Dada dynpro controla un paso de diálogo y la componen los siguientes elementos:

• Layout de pantalla.
• Atributos de pantalla.
• Atributos de los campos.
• Lógica de proceso.

76
La interfaz de usuario
Modul pools – La lógica de proceso
La lógica de proceso de un dynpro se basa en la gestión de dos eventos. Estos eventos permiten
gestionar el aspecto de la dynpro y la interacción de la misma con el usuario.

DYNPRO

PROCESS BEFORE OUTPUT (PBO)


Permite gestionar el aspecto de la pantalla de forma dinámica:
• Se inicia su procesamiento antes de mostrar la dynpro, es decir, después de cada interacturación
del usuario con la dynpro.
• Gestión del menú (status de superficie) y de la barra de título.
• Gestión de los atributos de los campos de la dynpro: visibilidad, lectura/modificable, … .
• Asignación de valores por defecto o iniciales.

PROCESS AFTER INPUT (PAI)


Permite gestionar la interacción de la dynpro con el usuario:
• Se inicia su procesamiento cada vez que el usuario ejecuta alguna funcionalidad o refresca la
pantalla mediante el ENTER.
• Gestión de la funcionalidades de la dynpro.
• Control de errores a nivel de campo y de grupo de campos.
• Control del flujo de pantallas.

77
La interfaz de usuario
Modul pools – La lógica de proceso
La lógica de proceso se realiza mediante la programación de MODULES. Los modules se entienden
como subrutinas propias de las dynpros a las que se pueden vincular condiciones de ejecución.
La sentencia para la definición de los modules es la siguiente:

MODULE <nombre_module>.

En el PAI es posible definir agrupaciones de campos para su tratamiento común. Para ello se utiliza
las sentencias:
• CHAIN : Indica el inicio del bloque.
• ENDCHAIN: Indica el final del bloque.
Dentro del bloque definido mediante estas sentencias se deben definir los campos de la estructura que
forman parte. Para ello se utiliza la sentencia FIELD. Ha esta sentencia se le puede vincular la
ejecución de un module con un evento asociado.
CHAIN.
FIELD <campo1> MODULE <nombre_module1> [ON INPUT/ON REQUEST/ON CHANGE/ON *-INPUT].

FIELD <campon> MODULE <nombre_modulen> [ON INPUT/ON REQUEST/ON CHANGE/ON *-INPUT].
MODULE <nombre_module> [ON CHAIN-INPUT/ON CHAIN-REQUEST].
ENDCHAIN.
78
La interfaz de usuario
ALV Grid
El ALV Grid es uno de los componentes más utilizados en SAP para la presentación de datos al
usuario. Permite tanto la visualización, como la creación y modificación de datos.
Se trata básicamente de la utilización de una Clase Global que encapsula los atributos y métodos
necesarios para su utilización.

79
La interfaz de usuario
ALV Grid
La implementación de un listado mediante un ALV Grid supone la preparación de toda una serie de
componentes:

• Lista de datos: Se deberá disponer de una tabla interna que contenga los datos a listar. Ésta puede
estar implementada mediante cualquier tipo de estructura plana. Los campos estructurados sólo están
permitidos para determinadas funcionalidades del ALV Grid (p.e. atributos de color de las celdas).

• Field Catalog: Se deberá disponer de otra tabla interna que contendrá las especificaciones de cómo
deben visualizarse los campos de la lista de datos. Esta tabla interna se deberá referenciar sobre el
tipo “LVC_T_FCAT”.

• Layout: Se deberá rellenar una estructura para especificar las opciones del layout del ALV Grid.
Mediante esta estructura es posible definir opciones de visualización generales para el componente
(p.e. mostrar o no líneas de total). Esta estructura se deberá referenciar sobre el tipo “LVC_S_LAYO”.

• Event Handler: Se deberá definir e implementar (en el programa) una Clase para gestión de eventos
si de desean gestionar los eventos que pueda lanzar el ALV Grid. Después de crear la instancia de
ALV Grid, se deberá registrar también una instancia sobre la clase gestora de eventos que se haya
definido en el programa.

• Datos adicionales: Para poner en marcha algunas funcionalidades que proporciona el control ALV
Grid, se deberán pasar algunos parámetros más al componente. Por ejemplo para predefinir criterios
de ordenación o la desactivación de botones del control.
80

También podría gustarte