Resumen ABAP - Certificate

150
Resumen Manuales SAP TAW 10 & 12 Idioma: Español 1

description

Resumen Abap Certificate

Transcript of Resumen ABAP - Certificate

Page 1: Resumen ABAP - Certificate

Resumen Manuales SAP

TAW 10 & 12

Idioma: Español

1

Page 2: Resumen ABAP - Certificate

TAW 10 1/2.

Capitulo 7 Abap Program Proces . pag.11 Capitulo 8 pag.11 Capitulo 9 Introduccion Abap Dictonary . pag.12 Capitulo 10 Sentencias Basicas Abap pag.13 Capitulo 11 Data Retriaval . pag.16 Capitulo 12 Internal Program Modularization with subrutines. pag.18 Capitulo 13 Abap Runtime System. pag.19 Capitulo 14 User Dialog List. pag.19 Capitulo 15 User Dialog Selection Screen pag.20 Capitulo 16 User Dialog Screen. pag.21 Capitulo 17 Global Modularization . pag.22 Capitulo 18 Calling Program and Passing data . pag.23

TAW 10 2/2.

Capitulo 2 Data Types and data object in detail . pag.26 Capitulo 3 Using Internal Tables . pag.29 Capitulo 5,6,7,8 Abap Objects . pag.32 Capitulo 7 Inherating . pag.35 Capitulo 8 Casting . pag.35 Capitulo 9 Interfaces . pag.35 Capitulo 10 Events . pag.37 Capitulo 12 Special Techniques. pag.38 Capitulo 13 Excepciones. pag.39 Capitulo 14 Dinamic Programming. pag.41

TAW 12 1/3 ABAP workbench.

Capitulo 2 Abap Dictionary pag.49 Capitulo 3 Tables in Abap Dictionary . pag.50 Capitulo 4 Performance during acces. pag.51 Capitulo 5 Consistency through input checks . pag.52 Capitulo 6 Dependencies if abap dictionary objects . pag.53 Capitulo 7 Changes to databases tables. pag.53 Capitulo 8 Views . pag.54 Capitulo 9 Search Help. pag.55 Capitulo 13 Reporting. pag.57 Capitulo 14 Selection Screen . pag.58 Capitulo 15 Logical databases . pag.60 Capitulo 16 Data Retrieval . pag.61 Capitulo 17 Data Formating and control level processing. pag.62 Capitulo 18 Saving list and background processing. pag.65 Capitulo 19 Interactive list. pag.65 Capitulo 20 Sap Grid Control. pag.66

2

Page 3: Resumen ABAP - Certificate

TAW 12 2/3 ABAP workbench.

Capitulo 2 SAP Programming Model. pag.68 Capitulo 3 Introduction to screen programming. pag.68 Capitulo 4 The Program Interface. pag.71 Capitulo 5 Screen elements for output . pag.72 Capitulo 7 Screen elements and tabstrips. pag.76 Capitulo 8 Table controls. pag.78 Capitulo 9 Context Menu. pag.80 Capitulo 10 List in screen processing. pag.81 Capitulo 13 Programming database updates . pag.82 Capitulo 15 LUW s and Clients/Server architecture . pag.85 Capitulo 16 SAP Locking Concepts. pag.85 Capitulo 17 Organizing database updates . pag.86 Capitulo 18 Complex LUW Processing . pag.88 Capitulo 19 Number Assigment. pag.89 Capitulo 20 Change Documents . pag.91

TAW 12 3/3.

Capitulo 3 Changing SAP Standar . pag.94 Capitulo 4 Personalization . pag.96 Capitulo 5 Table enhacement . pag.97 Capitulo 6 Enhacement . pag.98 Capitulo 7 Business Transaction Events . pag.99 Capitulo 8 Business ADD-Ins . pag.101 Capitulo 9 Modifications. pag.102

TAW10 1/2 ABAP workbench fundamentals

3

Page 4: Resumen ABAP - Certificate

Manual de referencia

Transacción DescripciónSE80 Object navigatorSE38 Abap editorSE11 Abap dictionarySD11 Data modelerSE91 Creación de mensajesST22 Abap dump análisisSM21 Visor de logs del sistema (basis)SU21 Autorización de objetosSE51 Screen painterSE41 Menú painterSE37 Constructor de funcionesBAPI Repositorio de BAPI´SSE16 Ver contenido de una tablaSE54 Table viewsSM30 Transacción para mantenimiento de tablasSM12 Visor de locksSE18 Visor de BADI’sSE24 Class builderSE91 Clases de mensajesSE36 Bases de datos lógicasST05 SQL traceSE30 Análisis de consumo de un programa abapSM36 Crear JOB´sSM37 Ver corridas de JOBsSP01 Y SP02 Visor de spoolSE51 Screen painterSM50 Visor de application serverSM13 Visor de requerimientos de UPDATESE93 Creación de transacciónSE14 Database UtilitiesSCU3 Visor de log de tablas del sistemaSCDO Creación de change document

4

Page 5: Resumen ABAP - Certificate

Variable de sistemasSY-UNAME Nombre de usuarioSY-SUBRC Retorno de sentenciasSY-LSIND Contador de nivel de listado, arranca en 0SY-TABIX Índice de una tabla internaSY-TFILL Cantidad de registros traídos en un loop SY-LENGHT Longitud de una línea de una tabla internaSY-ULINE Ingresa una línea horizontalSY-VLINE Imprime una línea verticalSY-DNNR Información de la pantalla donde estaSY-LILLI Numero de la línea donde el usuario realizo el clic en la fila del listadoSY-TITLE Contiene el titulo del programaSY-DYNNR Numero de screen en la que me encuentroSY-FDPOS Posición en de una cadena en otra usando la sentencia SEARCHSY-LINCT Cantidad de líneasSY-LINSZ Largo de la líneaSY-SROWS Cantidad de filas en pantallaSY-SCOLS Cantidad de columnas en pantallaSY-PAGNO Numero de paginaSY-LINNO Numero de línea seleccionadaSY-COLNO Numero de columna seleccionada

5

Page 6: Resumen ABAP - Certificate

Creación de un programa ABAP

1. Ir a la transacción SE80 -> object navigator2. Botón derecho sobre la clase de desarrollo3. Create -> Program

4. ingresar el nombre del programa respetando el estándar de SAP

6

Page 7: Resumen ABAP - Certificate

5. Completar los datos que pide para el programa

6. Asignarle una clase de desarrollo

7

Page 8: Resumen ABAP - Certificate

.

7. Asignarle una orden de transporte en el caso de que la clase de desarrollo sea distinto de $TMP

Crear una transacción asociada a un programa

1. Transacción SE80 -> object navigator2. Botón derecho sobre la clase de desarrollo3. create -> transaction

8

Page 9: Resumen ABAP - Certificate

4. escribir el nombre de la transacción, la descripción de la misma y a que tipo de programa será asociada

5. ingresar el nombre del programa a asociar

9

Page 10: Resumen ABAP - Certificate

6. Nos pedirá guardarla en una clase de desarrollo

7. y asignarle una orden de transporte

10

Page 11: Resumen ABAP - Certificate

Capitulo 7ABAP Program Process.

El sistema R/3 es un sistema cliente-servidor. Esta compuesto por 3 capas. Capa 1 -> Nivel de base de datos -> en este nivel se encuentra la base de datos. Es una base de datos relacional donde aparte de los datos (tablas) también se guardan los programas y meta datos del sistema.Capa 2 ->Nivel se servidor de aplicación -> todos los programas corren en este nivel. Los programas leen datos de la capa de base de datos, procesan esta información a través de work process y son capaces de almacenar información temporaria.Capa 3 -> Nivel de servidor de presentación -> En este nivel se encuentra la interfaz del usuario. Este nivel permite al usuario ingresar datos y mostrar datos como resultado del procesamiento de un WORK PROCESS.

Las 3 capas pueden ser instaladas juntas en una única maquina, por separado en 3 maquinas distintas. Las 2 primeras capas pueden cada una ser instalada en mas de una maquina (tener la DB en mas de una maquina o presentation server)

Vistas de usuario -> Todas las pantallas de usuario se ejecutan en la capa del presentation server

DYMPRO (MODULE POOL)SELECTION SCREEN (REPORT y MODULE POOL)LIST (REPORT y MODULE POOL)

Cuando el usuario realiza una acción en la pantalla el control del programa se traspasa al application server donde esta la lógica de este.

Los programas ABAP no pueden tener nombres de más de 30 caracteres.

Capitulo 8

La capa de base de datos esta dividido en dos grandes gruposCROSS-CLIENT -> este grupo esta compuesto por el repositorio de datos (programas y metadatos) y algunas tablas especialesCLIENT-SPECIFIC -> este grupo esta compuesto solo por tablas

El repositorio esta subdividido de acuerdo a los componentes de aplicación del sistema y cada componente esta a su vez subdividido en clases de desarrollo.

11

Page 12: Resumen ABAP - Certificate

Todo desarrollo de una aplicación siempre es realizado en un entorno de desarrollo y transportado al entorno de producción. El transporte de objetos de un sistema a otro se realiza a través de ordenes de transporte (change request) de clase de desarrollo a clase de desarrollo, cuando se crea una clase de desarrollo se debe asignar una orden de transporte.Las órdenes de transporte están organizadas en grupos de transporte (generalmente para proyectos grandes)

Una orden de transporte contiene los siguientes atributosTransportación layer -> Nos permite definir la distribución del desarrolloPerson responsible -> Usuario responsable del proyectoSoftware component -> Describe a que componente pertenece el desarrolloApplication component -> Describe a que componente de aplicación pertenece el desarrollo

Sintaxis ABAPCaracterísticas -> Esta formado por sentencias

-> Cada sentencia termina en un punto-> Cada palabra debe estar separado por un espacio-> Una línea puede contener mas de una sentencia-> ABAP no es case sensitive-> Comentarios -> * - > comenta toda una línea

-> “ -> comenta a partir del símbolo-> Toda sentencia ABAP retorna un código de respuesta en la variable de sistema (SY-SUBRC), cuando la sentencia se realiza correctamente retorna 0, en caso de error 4.

Capitulo 9Introduction to ABAP dictionary

Elementos del diccionario -> Tablas -> Transparentes -> estas tablas tienen la estructuras en el diccionario que en la db.Tiene campos clave en combinación con campos no claves.

-> Pool o Cluster -> son tablas de sistema.

-> Data Elements -> brindan información semántica sobre un campo

-> Domains -> brinda la descripción técnica de un campo

Estructuras -> Las estructuras con definiciones de conjuntos de datos parecidos a las tablas transparentes pero solo están definidos en el diccionario, no tiene campos claves.

Si se usan elementos del diccionario para definir elementos en una pantalla de selección estos elementos heredan todos los atributos de estos, no solo el tipos de datos que se admite, la definición semántica del mismo así también como la ayuda (F1) y el machcode (F4)

12

Page 13: Resumen ABAP - Certificate

La sentencia TABLES en un programa define un data object con la estructura con la particularidad de nombrarla con el mismo nombre del diccionario.

El campo MANDT (tipo S_MANDT) nos indica que la tabla que estamos utilizando no es cross-client (tabla dependiente de mandante)

Transacción para el diccionario SE11, desde aquí se crean todos los elementos del diccionario.

La transacción SE14 contiene utilitarios para las tablas, vistas, etc de la DB. Nos permite borrar el contenido de una tabla.

Capitulo 10Sentencias básicas de ABAP

Data types globales -> son utilizados por todos los programas, se encuentran en el diccionario de datos, son manejados centralizadamente.

Data types Locales -> son creados por el usuario dentro de un programa con la sentencia TYPES, con la particularidad de que los campos de ese type deben contener solo tipos de datos predefinidos por abap y no los del diccionario.

TYPES: type_name TYPE [VALUE n]……

Tipos de datos predefinidos por abap, valores por default

C Text (Character) 1 space N Numeric text 1 '00...0' D Date (YYYYMMDD) 8 '00000000' T Time (HHMMSS) 6 '000000' X Hexadecimal (HeX code) 1 X'00' I Integer 4 0 P Packed number 8 0 F Floating point number 8 0 STRING Character sequence (string) variable-length empty string XSTRING Byte sequence (X string) variable-length empty hexadecimal string

Diferencia entre LIKE y TYPELIKE - > copia la estuctura de un data objectTYPE - > copia la estructura de un data type

Constantes - > data object constantes en mi programa. Su valor no puede ser modificado en RUNTIME.

13

Page 14: Resumen ABAP - Certificate

CONSTANTS cons_name TYPE type_name VALUE [LITERAL | IS INITIAL]

Literal -> valor inicial de la canstanteIs initial -> valor inicial por default de la constante

La conversión de datos entre data object es posible, dependiendo del contenidos de estas, tener en cuenta los puntos decimales.

Loop at ... into … endloop -> se utiliza para tablas internas, nos permite recorrer una tabla interna poniendo cada línea en una work area.

Select... endselect -> se utiliza para iterar dentro de tablas de la base de datos. Lo que realiza esta sentencia es una iteración y por cada vuelta realiza una consulta a la db para traernos el siguiente registro

Check <condición> -> corta un bloque de procesamiento si una condicion no se cumple

Message -> mensajes por pantalla, aparece al pie de la pantalla

MESSAGE w007(e8) WITH 'sorry does not exist'.

Primero se coloca el mensaje (007) conel tipo de comportamiento que queremos (E) y entre parentesis va la clase de mensaje a la cual el mensaje que queremos desplegar pertenece, los parametros que siguen son posicionales, los mensajes pueden llevar parametros, no mas de 4. Para ver el mensaje ver la transaccion SE91 ingresando la clase de mensajes.Se puede en un programa declarar una librería por default y no tener que declararlo en cada sentencia message

Acceso al debugger de cualquier programa en el command field ‘/h + [enter]’ y luego ejecutar el programa, se abrirá el debug de ese programa.

Al pie de la pantalla aparecerá la siguiente leyenda “debugger switch on” que nos indicara que esta activado el debugger

Se puede poner un break-point destinado solo a un usuario con la sentencia, este breakpoint solo afectara al usuario que se le especifica

Break <usuario>Break bc400-46

Un watchpoint es útil para parar un programa por el contenido de un data object, se crea declarando el campo y que contenido deseas que tenga para que pare. También es posible definir la igualdad entre 2 campos o que se detenga cuando un campo cambie de valor en su contenido cualquiera sea este cambio.

Estructuras en abap :

Las estructuras son una estructura de data object, las estructuras se pueden anidar y un componente puede ser hasta una tabla.Se define igual a un tipo y se declara una work area del tipo de la estructuraLa estructura es local y solo puede ser accedida por el progrograma.

14

Page 15: Resumen ABAP - Certificate

TYPES : BEGIN OF struct_name,……END OF struct_name

ST22 -> visor de dumps

La transaccion nos permite visualizar un dump de una aplicacion en el sistema. Permite ver el dump que le dio al usuario y al resto de los usuarios en una fecha determinada.

TABLAS INTERNAS

Son tablas dinamicas, a nivel de insercion y borrado de registros, se crea como data objects con una estructura definida. Cada registro se lo conoce como lineas en la tabla interna. Las lineas pueden ser de cualquier tipo de datos ABAP.

Atributos - > Los componentes claves - > Tipo de accesos

Tipos de tablas - > index tables - > standard tables: busqueda secuencial proceso secuencial

acceso por campos key- > sorted tables: busqueda binaria

proceso secuencial acceso por campos key

- > hashed tables: acceso solo por clave hash no se puede acceser secuencialmente

Las tablas internas pueden ser creadas en forma local dentro del programa o en el dictionario de datos y ser compartidas por todos los programas.Las tablas internas no tienen representacion en la base de datos.La definición de una tabla en un programa se reliza creando un data object del tipo TABLE OF una estructura y definiendo el tipo de tabla y acceso. Esta creacion es dinamica y puede ser distinto en distintos programas.

Tablas trasparentes -> tienen representación física en la base de datos

Estructuras -> No tienen representación en la base de datos

Tablas pool -> Tienen representación en la base de datos pero no como se muestra en la estructura, los datos estan diseminados en distintas tablas y logicamente tiene una estructura única.

Para definir una tabla interna en un programa a partir de una estructura se utiliza la siguiente sentencia

DATA itab TYPE <table_kind> TABLE OF <struct> WITH <keydef> ( pag 264 L.1)

Operaciones con tablas (un solo registro) ( pag 267 L.1)

15

Page 16: Resumen ABAP - Certificate

Append -> Agrega un registro al final de la tabla, solo para tables standards.Insert -> Inserta un registro acorde con el tipo de tabla que estamos utilizando.Read -> Copia una línea de la tabla interna a una work areaModify -> Permite modificar un registro en la tabla internaDelete -> Permite borrar un registro de la tablaCollect

Operaciones con tablas (muchos registro)Append -> Agrega un set de registros al final de la tabla, solo para tables standards.Insert -> Inserta un set de registro acorde con el tipo de tabla que estamos utilizando.Read -> Copia un ser de registros de la tabla interna a una work areaModify -> Permite modificar un set de registro en la tabla internaDelete -> Permite borrar un set de registros de la tabla

Operaciones con tablas (toda la tabla)Refresh -> Tabla con header line -> Borra el contenido de la tabla

y la wa-> Tabla sin header line -> Borra el contenido de la tabla

Free -> Tabla con header line -> Borra el contenido de la tabla no la wa

-> Tabla sin header line -> Borra el contenido de la tablaClear -> Tabla con header line -> Borra la wa

-> Tabla sin header line -> Borra el contenido de la tablaSort -> Ordena una tabla interna por los campo que queramos

Capitulo 11Data retrieval

Toda selección de datos a la DB de produce a travez de la intefaz de la base de datos, fisicamente la tabla puede ser transparente o de tipo cluster.

Para traer datos de la DB se usa la sentencia SELECTSELECT…FROM…INTO…WHERE…

El addition SINGLE permite traer solo un registro de la DB correspondiente con la condición.El addition INTO TABLE permite realizar una selección de registros e insertarlos en una tabla interna, los datos de la tabla interna son reemplazados. Para agregar registros a una tabla que ya contiene registros se usa el addition APPENDING TABLE.

La variable sy-dbcnt -> contiene la cantidad de registros leidos. sy-subrc -> contiene el código de retorno de la sentencia

ejecutada anteriormente.

Cuando se realiza una selección en una tabla dependiente de mandante el entorno tranforma la sentencia agregandole el campo mandante en el cual estamos logoneados, se puede evitar esto y leer datos de otros mandante utilizando la sentencia CLIENT SPECIFIED y en la clausula WHERE es necesario especificar el mandante que queremos.

16

Page 17: Resumen ABAP - Certificate

La variable de sistema sy-mand nos iundica en que mandante estamos logoneados.

Se puede establecer en la clausula WHERE que un campo este en un intervalo especificado entre parentesis.

....WHERE carrid IN (…, …, …)….

La sentencia SELECT SINGLE * … nos permite traer de la DB la primera ocurrencia según una condición.

El addition INTO CORRESPONDING FIELDS/INTO CORRESPONDING OF TABLE nos permiten desligarnos de los nombres de los campos en donde queremos depositar. El/los registro/s que seleccionemos se depositaran en los campos que correspondan en nombre de una work area/tabla interna.

La sentencia INTO TABLE nos permite seleccionar mas de un registro y almacenarlos internamente en una tabla interna. La tabla interna se pisa con los datos nuevos. La sentencia APPENDING TABLE agrega a una tabla interna los registros seleccionados.

IMPORTANTE -> para que la DB mejore una búsqueda seleccionando un índice apropiado es necesario en la cláusula WHERE escribir los parámetros de selección en el mismo orden que están descriptos en el diccionario. Es necesario ver la estructura de la tabla en el diccionario y verificar si tiene otros índices además del primario que se ajuste mejor a nuestra búsqueda.No es necesario pasar por parámetros toda la clave, se puede pasar parte de la clave y también beneficia a la búsqueda.

Seguridad en accesos a la DB -> en la DB estan los perfiles de cada usuario para acceder a los datos. El chequeo de autorizaciones se realza a traves de codigo con la sentencia AUTHORITY CHECK con diferentes parametros para saber si cumple con los requisitos de autorizacion para la accion que desea realizar, la respuesta del chequeo se devuelve en la variable de sistema sy-subrc (= 0 autorizado, <> 0 no autorizado).Los parámetros son objetos de autorizacion, estos objetos sueltos en el sistema, este objeto esta compuesto por un objeto (parametro) al cual queremos tener acceso y un codigo de actividad que nos indica que permisos tenemos. Estos objetos de autorizacion se guardan en clases de autorizaciones (transaccion SU21 o SU20).

AUTHORITY-CHECK OBJECT 'S_CARRID' ID 'CARRID' FIELD pa_carr ID 'ACTVT' FIELD activ_auth.

IF sy-subrc NE 0. MESSAGE e046(bc400) WITH pa_carr.* No display authorization for airline carrier &1 ENDIF.

Vistas -> es una tabla logica definida en el diccionario de datos, los datos estan almacenados en la DB pero en tablas distintas, estas tablas estan logicamente relacionados por campos clave pero para nuestro programa se maneja como una tabla unica.

17

Page 18: Resumen ABAP - Certificate

Selección en tablas múltiples -> Para relacionar 2 o mas tablas o no es obligatorio crear una vista se puede realizar a travez de un solo qry la consulta, para esto es necesario crear la relacion con el addition a la sentencia select JOIN.

Capitulo 12Internal program modularization with subroutines

subrutina -> es un modulo interno dentro de mi programa, permite separar funcionalidad, hace mas lejible al programa, permite la reutilizacion de codigo. Se le puede pasar parametros y recibir parametros de respuesta, se ejecuta con la sentencia PERFORM y la rutina se declara con

PERFORM <nombre_rutina> USING a1 CHANGING a2

a3

FORM <nombre_rutina> USING VALUE (a1) -> por valor CHANGING a2 -> por referencia VALUE (a3) -> por valor y resultado

ENDFORM.

Los parámetros pueden ser parados a la subrutina-> Por valor -> realiza una copia local del parámetro-> Por referencia -> Se pasa la dirección de memoria del

parámetros, todo cambio en el parámetros se realizara en la variable original.

-> Por valor y resultado -> Se pasa el parámetro por valor y este es devuelto como resultado de la subrutina.

Los parámetros fuera de la rutina se llaman “parametros actuales” y dentro de la rutina se llaman “parametros formales”.

Los parametros deben ser tipificados, esto quiere decir que se deben declarar el tipo de parametro formal y actual ya que sino existiria la posibilidad de errores en runtime. Se deben declarar las estructuras y tablas internas ( las tablas internas de deben pasar por referencia ya que sino por valor duplicarian la tabla en memoria)

Se pueden crear data object en forma local dentro de una subrutina, estos solo pueden ser accedidos dentro de la misma. Los data object declarados fuera de las rutinas son data objects globales y pueden ser utilizados y modificados dentro de las rutinas. La declaracion de data objects se realiza igual que afuera. Los data object declarados dentro de la rutina se liberan cuando esta termina.

Capitulo 13Abap runtime System

18

Page 19: Resumen ABAP - Certificate

Los bloques de procesamiento son la unidad mas pequeña de un programa, existen distintos tipos de bloques

Events block -> Son eventos manejados por el runtime, y son disparados por este.Subroutines -> son bloques que se ejecutan mediante una sentenciaModules -> Son bloques manejados por procesos de pantalla

Los bloques de procesamiento pueden ser escritos en cualquier orden, tienen cada bloque una prioridad de ejecucion que siempre es la misma.

Los bloques de procesamiento terminan cuando el runtime encuantra otro bloque acontinuacion de la ultima linea ejecutable de este.

Bloque de procesamiento LOAD-OF-PROGRAM es el primer bloque que se ejecuta, se utiliza para inicializar los data object (existe para todos los tipos de programa). Para los programas ejecutables esta la sentencia INITIALIZATION.

Listados básicos -> Los listados basicos son listados que se muestran por pantalla con formato basico, un listado basico puede tener hasta 20 niveles de listados ya que se puede hacer que la selección de un dato en un listado nos lleve a otro.

Los listados básicos son construidos en el bloque de procesamiento START-OF-SELECTION, se usan las sentencias WRITE, SKIP, ULINE.

Para ingresar titulos a un listado basico Activas el programa y ejecutarlo, tirar el listado e ir a la barra de herramintas SYSTEM -> LIST -> LIST HEADING, guardar los cambios y para modificarlos ir a GOTO -> TEXT ELEMENTS -> LIST HEADING.

Capitulo 14User Dialog List

Multilenguaje -> Al escribir literales en un programa no se traducira logoneado en otro idioma, para esto esta los text symbols, ahí se podra definir las etiquetas, traducierlas y el sistema elefira el texto que debe mostrar según el idioma

GOTO -> TEXT ELEMENTS -> TEXT SYMBOLSLos nombre de los text elements (etiquetas) pueden tener hasta 3 caracteres y se enbocan en el programa con TEXT-xxx donde xxx es el nombre del text element

Write ‘HELLO’ (001)

Si el text element (‘(001)’) no esta traducido en el idioma de logon se escribira en blanco, para evitar esto se coloca por default un valor entre comillas simples como literal (‘HELLO’).

Al seleccionar en una línea se ejecuta el bloque de procesamiento AT SELECTION-SCREEN.

Usar la variable sy-lsind para saber en que listado estamos parados y saber cual fue la selección. No puede sobrepasar en nivel de 20 listados (dumpea).

19

Page 20: Resumen ABAP - Certificate

HIDE área -> la hide area es un area de memoria donde se guardan datos de donde queremos recuperar cuando se ejecuta un at line-selection. Cuando hacemos un write para listados basicos se utiliza para recuperar datos del listado para utilizarlos en el armado de otro listado en base a esos datos (selección del usuario).NOTA: cuando terminados de utilizar la wa debemos limpiarla para evitar basura. (CLEAR wa).Se puede guardar más de una estructura en el area de HIDE.

Para saber en que columna se presiono en el listado esta la sentencia GET CURSOR.

Variante -> es posible guardar lo datos ingresados en una pantalla para en otra oportunidad recuperar la selección

Capitulo 15User dialog selection screen

Parameters -> Esta sentencia genera un data object en memoria y un campo de entrada en una pantalla de selección con el mismo tipo.

PARAMETERS <pa_name> TYPE <pa_type>

Select-options -> data object que contiene datos de una selección,La declaración genera una tabla interna donde cada línea tiene los parámetros de rangos ingresados por el usuario

Sign -> include (I) o Exclude (E)Option -> opciones de inclusiónLow -> valor inferior de la selecciónHigh -> valor superior de la selección

En la definición de un select-option solo puede tener de tipo (luego de for) un data object, para declarar un dato primero hay que declarar un data object del dato que queremos y luego asignarlo al select-option.

SELECT-OPTIONS <so_name> FOR <so_type>

Para utilizar el data object select-option donde tiene todos los parámetros de selección, se utiliza dentro de un select común y se compara con el campo de la tabla con el cambio de que en vez de igual va IN.

Select * from....Into...Where campo IN so_campo

Endselect.

El valor guardado en el select option es la selección compleja que realizo el usuario por pantalla no realiza qrys a la base de datos, la selección se usa acompañado de sentencias OPEN SQL.

20

Page 21: Resumen ABAP - Certificate

At selection-screen - > evento entre carga de usuario y start-of-selectionSe utiliza generalmente para realizar validaciones de lo ingresado por pantalla.

Capitulo 16User dialog: screen

Una screen es un programa que se crea y agrega a nuestro programa abap, las screen tiene atributos, layout (formato), elementos y lógica de programación.

Para llamar una pantalla desde un programa se usa la sentencia

CALL SCREEN <scr_num>

Cada pantalla contiene las siguientes propiedades

Atributos -> Nombre de la pantalla -> Descripción de la pantalla -> Tipo de pantalla

Layout -> Son los objetos de la pantalla, disposición y propiedades de estos

Element List -> Es la lista de elementos que contiene la pantalla

Tiene 2 bloques de procesamiento PBO (process before output) y PAI (process after input)

Para diseñar el layout (formato de la pantalla) se utiliza la herramienta Graphical Screen painter que nos permite agregar botones, campos de entrada y salida, otros elementos de pantalla.

Tiene la opcion de utilizar data object de mi programa abap y asi interfacear datos entre estos (generalmente los campos en una screen son traidos de mi programa abap en una estructura y cuando se completan los campos en la screen estos esta accesible en el programa cuando se sale de la screen), la sentencia TABLES crea un data object que se suele usar ya que se declara una estructura y es mas facil para transporta, pero se puede interfaciar tambien otros tipos de data objects. IMPORTANTE -> las estructuras en el programa abap y en la screen painter deben tener el mismo nombre para que se relacionen.

Antes de llamar a la screen para que muestre los datos se debe completar la wa que tiene la screen relacionada.

Para crear botones en una screen primero hay que declarar en el elemento list de la screen y debajo de todo hay un campo en blanco con un atributo ok, ahí se coloca por standard el nombre ok_code (este es el function code del boton).Cuando se crea un botón en el campo ftcCode hay que poner el nombre del boton a seleccionar, este nombre se transportara al data object ok_codeHay que crear un data object data: ok_code type sy-ucomm.

Ahora hay que meterle logica de programacion a la screen, hay que crear un module en el PAI.

21

Page 22: Resumen ABAP - Certificate

La sentencia SET SCREEN nos permite cambiar dinámicamente el atributo NEXT SCREEN de la pantalla, de esta manera podemos controlar el flujo de pantallas según una acción.

Capitulo 17Global modularization

Los módulos de funciones son funciones externas a los programas que son globales a todo el sistema y no a un programa

Estas funciones están organizadas en grupos de funciones, estos grupos contienen los mismos componentes que un programa ejecutable (Data objects, subroutines, screens). Estos componentes pueden ser accedidos por todas las funciones que están en el grupo. Desde fuera del grupo d funciones estos componentes son inaccesibles

Existen 3 tipos de módulos de funciones1. Normal module2. Remote-enables module -> tiene la particularidad de que el modulo puede ser

ejecutado desde nuestro sistema o desde un tercero conectado a este, se debe ser una conexión a un sistema valido

3. Update function module -> incluye funciones especiales para manejar actualizaciones en la DB

Todas las funciones tienen una interfaz estricta para su utilización, la interfaz esta compuesta por paramentos y estos pueden ser de 2 tipos.

1. Importing -> parámetros que recibe la función2. exporting -> parámetros que devuelve la función3. changing -> parámetros que recibe la función y retorna modificados

Por default todos los parámetros son pasados por referencia, pero se pueden pasar por valor.Los parámetros de importing y changing pueden ser opcionales u obligatorios, los parámetros de exporting siempre son opcionales.

Las funciones se definen entre las sentenciasFUNCTION <func_name>.ENDFUNCTION.

Las funciones están preparadas para levantar excepciones, estas se declaran el la solapa de excepciones, dentro del código de la función las excepciones se levantan con la sentencia

RAISE <exception>oMESSAGE <kind><num>(<id>) RAISING <exception>

Las excepciones son tiradas hacia el programa que llamo la función, en este se deben atrapar y ser salvadas, cuando se declaran las excepciones se le asignan un numero, cuando ocurren este numero se devuelve en la variable se sistema SY-SUBRC.

22

Page 23: Resumen ABAP - Certificate

Los módulos de funciones tienen una nomenclatura especial

[Y|Z]<func_group>[LY|LZ]<func_group><abrev><num>

Para usar una funcion en un programa conviene utilizar el boton PATTERN que nos armara la sintaxis de la funcion con sus parametros acorde como esta definida.

Es conveniente generar una excepcion desconocida llamada OTHERS para excepciones no contempladas y que la funcion no cancele por errores desconocidos.

BAPI´s -> Son funciones Standard de SAP que manejan objetos de negocio, nos permite crear objetos, cambiar y mostrar sus atributos.

Las BAPI’s están implementados en módulos de funciones, se crean desde la transacción BAPI. Estas funciones deben cumplir los siguientes requerimientos.

1. Nombre -> BAPI_<bussiness_obj_name>_<method_name>2. Capacidad de ejecución remota3. No debe tener pantallas, mensajes de dialogo4. Los parámetros deben estas tipados en el diccionario5. No se permiten parámetros de changing.6. No se permiten excepciones.

Capitulo 18Calling program and passing data

Hay 2 maneras de arrancar un programa1. Un programa que esta ejecución llama a otro, el programa llamador se detiene, se ejecuta

enteramente el segundo programa y cuando este termina se retorna el control al programa llamador que continua normalmente

2. El programa llamador termina y el programa llamado empieza su ejecución.

Para llamar a un programa ejecutable (report) se utiliza la sentencia

SUBMIT <pgm_name> -> llama al programa y termina el anterior

SUBMIT <pgm_name> AND RETURN -> llama al programa y cuando este termina se retorna el control al programa original

SUBMIT <pgm_name> VIA SELECTION SCREEN AND RETURN-> llama al programa y muestra la selection screen que este tenga en el caso de que la tuviera, cuando termina se retorna el control al programa anterior

Para llamar a una transacción desde un programa se utiliza la sentencia

LEAVE TO TRANSACTION <transac_name> -> Termina el pgm actual

23

Page 24: Resumen ABAP - Certificate

CALL TRANSACTION < transac_name> -> ejecuta la transacción y retorna el control al pgm original

Al conectarse a R/3 se abre una sesión externa, se puede crear desde system -> new sesion o a través de o/<t_code>. En una maquina puede haber desde 2 sesiones externas y hasta 6 según el sistema este configurado.

Las sesiones externas están subdivididas en sesiones internas, cada programa que corre en una sección ocupa una sesión interna. Una sesión externa puede tener hasta 9 sesiones internas (guardadas en stack). Y los datos de un programa solo pueden ser visibles dentro de una sesión interna.

Diferencias entre PGM y Transaction.PGM -> cuando se llama un programa se crea una sesión interna para este sin importar de la manera en que se llama (si termina el programa anterior o no). El resto de la memoria queda intacta.Transaction -> Cuando se llama a una transacción, se reinicia la memoria de ABAP, se borran todas las secciones internas

Existen varias maneras de pasar datos entre programas entre sesiones internas1. Interfaces entre programas2. Memoria de Abap3. Memoria de SAP4. Tablas de la DB5. Archivos locales en el presentation Server

Interfaz entre programas -> Cuando se llama un programa que tiene pantallas se selección standard se le pueden pasar datos. El pasaje de datos se puede realizar a través de una variante o especificando los componentes de la pantalla de selección.

SUBMIT z_selection_screen and RETURN with pa_dni [EQ|NE...] val with pa_lname ... with so_suldo between val1 and val2 sign [‘I’|’E’]

SUBMIT z_selection_screen AND RETURN VIA SELECTION-SCREEN USING SELECTION-SET 'VARIANTE1'.

Con el addition VIA SELECTION-SCREEN nos muestra la pantalla de selección con los datos que le pasamos

Memoria de ABAP -> La sentencia EXPORT… TO MEMORY ID… nos permite copiar cualquier tipo de data object a la memoria de Abap. Con el addition ID nos permite crear distintos grupos de de memorias. Para traer los datos desde la memoria se utiliza la sentencia IMPORT … FROM MEMORY ID …Para liberar un grupo de la memoria se usa la sentencia FREE MEMORY ID…

Para transferir datos entre en presentation server y el application server se usan las funciones GUI_LOAD y GUI_DOWNLOAD.

24

Page 25: Resumen ABAP - Certificate

Memoria de SAP -> Para pasar datos usando la memoria de SAP se usan los parameters id, las sentencias son

SET PARAMETER ID ‘<paran_id>’ FIELD <valor>GET PARAMETER ID ‘<paran_id>’ FIELD <valor>

25

Page 26: Resumen ABAP - Certificate

TAW10 2/2 ABAP workbenchManual de referencia

Capitulo 2Data types and data objects in detail

Tipos de datos -> especificados -> Son tipos de datos que no se les necesitan especificar el largo o la cantidad de decimales. d (Date), t (Time), i (Integer), f (Float), string, xstring.

-> no especificados -> Son tipos de datos que se les debe especificar el largo o la cantidad de decimales.c, n , x -> Se les debe especificar largo ( 0..65535 )p -> especificar largo y cantidad de decimales (máximo 16 bytes , default 8 bytes 0 decimales )

Grupo de tipo -> definición a nivel de diccionario que agrupa definiciones de tipos que pueden ser accedidos por todo el sistema.El nombre de un type group no puede superar los 5 caracteres, por convención los tipos de datos o constantes deben empezar con el nombre del type group.

TYPE-POOL zpool .

constants zpool_const1(2) type c value 'ok'.

TYPES: BEGIN OF zpool_struct1, nombre(30) type c,

apellido(25) type c, END OF zpool_struct1.ç

REPORT z_data_objects .TYPE-POOLS: zpool.

DATA persona TYPE zpool_struct1.

Definición de constantes

CONSTANTS <const_name> TYPE <type>

Aritmética de enteros (integer) -> En la aritmética de enteros las operaciones con puntos decimales son redondeadas al entero más cercano. Los cálculos utilizando aritmética de enteros es mas rápido que los cálculos con punto fijo o flotante.

data int type i.

int = 4 / 10. => 0int = 6 / 10. => 1int = 20 / 15. => 1

Aritmética en numero packed -> el largo de estos tipos de datos están representados en bytes. Cada digito decimal esta representado por medio byte, el último byte se reserva para el signo. El máximo número de lugares decimales es el largo menos 1.

Aritmética de punto flotante -> Los tipos de datos de punto flotante es representado internamente usando suma de fracciones binarias.

26

Page 27: Resumen ABAP - Certificate

data: float type f, pack type p decimals 2.

float = 73050 * '0.0727'. => 5,3107349999999997E+03pack = float. => 5.310,73

Operaciones con tipos de datos distintos -> abap permite operaciones entre distintos tipos de datos, en tiempo de ejecución se convierte el resultado de la operación a uno de los siguientes tipos de dato ( i , p , f). Las operaciones aritméticas con string primero convierte el carácter en numérico.

Tipos iniciales de datos -> string -> Permite solo secuencia de caracteres , valor inicial “ “.

-> d -> permite solo secuencia de dígitos, Valor inicial “00000000”

-> t -> permite solo secuencia de dígitos, Valor inicial “00000000”

Operaciones con strings -> Abap permite operaciones con strings

Todas las operaciones menos SEARCH son case-sensitive

FIND -> busca un string dentro de otroREPLACE -> reemplaza la primera ocurrencia de uno en otroTRANSLATE -> reemplaza todas las ocurrencia de uno en otroSHIFT -> mueve los caracteres dentro del string en forma ciclicaCONDENSE -> borra los caracteres blancos delante y detrasOVERLAY -> pisa caracteres de un string en otroCONCATENATE -> concatena 2 stringsSPLIT -> divide un string por ocurrencias de un carácter

Con el addition INTO TABLE … <itab> permite parcear un string en una tabla interna

STRLEN -> devuelve la cantidad de caracteresSEARCH -> busca un string dentro de otro (binario o texto), la variable de sistema SY-FDPOS guarda el offset donde encontro la cadena

Estructuras -> Una estructura es un conjunto de elementos de datos. Se define de 2 maneras, con la sentencia TYPES o DATA

TYPES: BEGIN OF s_name_type,

prename(25) TYPE c, surname(25) TYPE c, title(5) TYPE c, END OF s_name_type.

DATA: name TYPE s_name_type.

o

DATA: BEGIN OF s_name, prename(25) TYPE c, surname(25) TYPE c, title(5) TYPE c,END OF s_name,.

27

Page 28: Resumen ABAP - Certificate

Es posible anidar estructuras para sectorizar la información, desde la estructura principal se irán poniendo guiones “-“ para ir metiéndose en las subestructuras hasta llegar al elemento de datos en particular.Para incluir estructuras hay 2 maneras

TYPES: BEGIN OF s_name_type, prename(25) TYPE c, surname(25) TYPE c, title(5) TYPE c,END OF s_name_type.

DATA: name TYPE s_name_type.

DATA: BEGIN OF s_adress, name TYPE s_name_type, street(15) TYPE c, city(25) TYPE c, END OF s_adress.

o

DATA: BEGIN OF s_name_type2, prename(25) TYPE c, surname(25) TYPE c, title(5) TYPE c,END OF s_name_type2.

Es posible agregar 2 estructuras del mismo tipo en otra., es necesario renombrar esta

DATA: BEGIN OF s_adress2. INCLUDE STRUCTURE s_name_type AS name.

INCLUDE STRUCTURE s_name_type AS name2. DATA: street(15) TYPE c, city(25) TYPE c, END OF s_adress2.

Compatibilidad entre tipos de datos -> tipos elementales -> son compatible cuando tiene

en mismo tipo y largo, y con mismo numero de decimales

-> estructuras -> mismos componentes-> tablas -> mismo tipo de fila, misma key y tipo de

tabla

Datos UNICODE -> los datos del tipo unicode son formas de representar las información en distintos tipos de idiomas y formatos.Debido a unicode se cambio el tipo de representación interna de los datos, un carácter que ocupaba internamente 1 byte ahora ocupa 2 byte. A raíz de este cambio es necesario activar el flag de chequeo de unicode en los atributos de programa.

28

Page 29: Resumen ABAP - Certificate

FIELD-SYMBOLS -> toma el formato de un data element que se le asigna con la sentencia ASSIGN. Se pueden hacer distintas asignaciones al mismo field-symbol y este tomara el formato del dato que se le asigne.

El move-corresponding es mas performante que el move ya que el primero realiza el chequeo de unicode para todos los campos y luego mueve los campos acorde con el nombre entre las 2 estructuras, el otros realiza el chequeo y la copia de datos por cada campo.

Capitulo 3Using Internal Tables

Tablas Internas -> son data object que nos permiten almacenar conjuntos de datos en estructuras fijas en memoria. Los datos son guardados linea por linea, y cada linea tiene la misma estructura. Una tabla interna limita su tamaño a la memoria del application server.

Atributos -> Line Type -> estructura de la tabla interna -> Tipo de tabla -> Standard -> acceso por indice

-> Sorted -> acceso por clave -> Hashed -> acceso por algoritmo

-> Clave -> Conjunto de columnas de una tabla interna Composición de la clave -> Única

-> No única

Definición -> Definición Local -> Se declara la estructura dentro del programa y solo puede ser utilizada dentro de esta.

-> Definicion Global -> se define dentro del diccionarioy puede ser compartida por todo el sistema.

Se define igual que una estructura y con la sentencia DATA definimos la tabla.

Sintaxis

TYPES or DATAName [TYPE|LIKE] [standard|sorted|hashed] tableOF <structure>WITH key_def[INITIAL SIZE <tamaño inicial>]

DATA name TYPE TABLE OF <structure>

Para definir una estructura tipo tabla el el diccionario se entra a crear un data element para crear una table type y nos pide un line type que debe ser una estructura definida previamente.

29

Page 30: Resumen ABAP - Certificate

Tipos de tablas -> STANDARD -> Es opcional definir la clave al crearla, esta

puede ser única o no.key_def -> [NON-UNIQUE] {KEY COL1… COLn}

-> Los campos de la clave debe ser char-type

-> SORTED -> La clave puede ser única o no, las entradas en la tabla están ordenadas, las inserciones en la tabla también deben ser ordenadas

-> HASHED -> La clave debe ser única

Tipo de claves

Standard -> [NON-UNIQUE] {KEY COL1… COLn/ DEFAULT KEY}

Sorted -> {NON-UNIQUE| UNIQUE} KEY COL1… COLn

Hashed -> UNIQUE KEY COL1… COLn

Operaciones -> Por tabla -> Clear-> Move-> Free-> Sort-> comparar tablas-> meterle datos

-> Por lineas -> sentencias OPEN SQL-> Por linea -> Loop

Operaciones con tablas

READ TABLE -> Para leer datos de una tabla interna se utiliza la sentencia READ TABLE… INTO… WITH KEY. Esta sentencia actúa igual que la sentencia SELECT, retorna un solo registro a una work area del mismo tipo

Addition:COMPARING <comparing_options>

└ f1 f2 … fn└ ALL FIELDS

TRANSPORTING <transport options> └ f1 f2 ... fn └ NO FIELDS

Le addition COMPARING nos permite seleccionar que campos de la work area queremos comparar al hacer la lectura en la tabla interna.El addition TRANSPORTING nos permite seleccionar que campos queremos que se copie a la work area al realizar la lectura.La variable de sistema SY-TFILL nos indica la cantidad de de líneas leídas.

30

Page 31: Resumen ABAP - Certificate

La variable de sistema SY-SUBRC nos indica si encontró al menos un registro con la condición indicada

MODIFY TABLE… FROM… -> modifica una linea de una tabla interna, tiene additions para acotar la modificacion por indice o por una condicion. Para que funcione la modificación la tabla a modificar debe tener declarados campos claves, ya que en tiempo de ejecución se selecciona el registro con los valores de la work area. No se pueden modificar los campos claves cuando modificamos tablas internas SORT o HASHEDEl addition TRANSPORTING nos permite solo modificar los campos de la tabla interna que especifiquemos. El addition INDEX nos permite a nosotros indicar el numero de registro que queremos modificar, No es posible acceder por indice a tablas del tipo HASHED.

MODIFY TABLE itab_stdr FROM wa.

MODIFY itab_stdr FROM wa INDEX 1 TRANSPORTING apellido.

MODIFY itab_stdr FROM wa TRANSPORTING apellido WHERE nombre = 'juan'.

En vez de modificar un registro con las sentencia MODIFY es posible asignar el registro a un field symbol y modificar el registro directamente.

READ TABLE itab_sort WITH KEY nombre = 'juan' ASSIGNING <fs>.

READ TABLE itab_sort index 2 ASSIGNING <fs>.

DELETE TABLES -> borra un registro de una tabla por indice o por condición.En tablas standard o sort se pueden borrar registros accediendo por la clave o por una condición distinta a la clave.

DELETE TABLE itab_stdr WITH TABLE KEY nombre = 'pedro'.DELETE itab_stdr WHERE domicilio = 'artigas'.

En tablas hashed solo se puede borrar por condición de la clave

DELETE itab_hash WHERE nombre = 'juan'.DELETE TABLE itab_hash WITH TABLE KEY nombre = 'zeta'.

LOOP… ENDLOOP -> Permite recorrer una tabla interna registro por registro o por una condición.

LOOP AT itab_stdr INTO wa {WHERE domicilio = 'artigas'}. ...ENDLOOP.

INSERT… INTO TABLE…-> La sentencia insert nos permite insertar una o mas líneas en una tabla interna, la inserción de las líneas son dependientes de la tabla con la que estamos trabajando.

Standard -> inserta atrásSorted -> inserta ordenadoHashed -> inserta según algoritmo hashed

INSERT wa INTO TABLE itab_stdr.INSERT LINES OF itab_stdr INTO TABLE itab.

Tablas con HEADER LINE -> el header line en una tabla interna es una WA que se declara implicitamente con el mismo nombre y formato que la tabla interna y se maneja como una

31

Page 32: Resumen ABAP - Certificate

WA normal y nos indica en que registro de la tabla nos encontramos. Para realizar operaciones con la tabla esta se referenciara con el nomre mas doble corchete ( itab[] ) y la WA solo con el nombre ( itab ).

Field symbol -> un data element de este tipo es un puntero,Declaración:

FIELD-SYMBLOS: <fs> TYPE <type>Asignación

ASSIGN <type> TO <fs>Desasignacion

UNASSIGN <fs>

Tablas de rango -> se puede armar una tabla interna igual a la de un select opcion, se crea una tabla del tipo rango y ahí se llenan los parametros de busqueda.

DATA: so_campo LIKE RANGE OF campo.

Performance de lectura en tablas internasLectura con field symbols es más rápida que usar waLectura de un solo registro (orden por eficiencia)

-> READ TABLE… WITH TABLE KEY… -> Se debe especificar toda la clave

-> READ TABLE… WITH KEY -> Se especifica parte de la clave, en el orden de la definición de la tabla

-> LOOP -> iteración en la tabla, recorre toda la tabla

Capitulo 5, 6, 7, 8Abap Objects

TYPE REF TO -> Tipo de dato que referencia a un objeto.

Atributos -> Clase -> atrubutos estáticos. Es compartido por todas las instancias de esa clase, el valor no puede ser modificado por ninguna de estas.

Declaración: CLASS-DATA: ....

-> Instancia -> atributos dinámicos. El atributo es individual para cada instancia, cada una de estas puede tener un valor particular, este atributo es administrado por cada instancia.

Los atributos dentro de una clase solo pueden ser declarados con la sentencia TYPE para datos del diccionario, la sentencia LIKE es para copiar la declaración de elementos locales de la clase.El addition READ ONLY a la declaración de un atributo público nos permite que otras clases vean el atributo pero no puedan modificarlos. Solo puede ser modificado por métodos dentro de la clase.

Un método es un procedimiento interno en una clase, este método tiene parámetros (signature) que le permite recibir y devolver valores. Tiene parámetros de entrada, salida y

32

Page 33: Resumen ABAP - Certificate

de excepciones. Estoy últimos se devuelven con la sentencia RAISING. A la interfaz de un método se pueden definir parámetros opcionales o con valores por default.

Métodos -> Clase -> Solo puede utilizar atributos estáticos, estosmétodos pueden ser accedidos sin haber instanciado un objeto.

Declaración: CLASS-METHOD: ....

-> Instancia -> Puede utilizar atributos estáticos odinámicos, estos métodos deben ser accedidos desde una instancia de una clase.

Declaración: METHOD: ....

CREATE OBJECT -> Método de creación de objetos, crea un objeto de una clase especificada por la declaracion de la variable de referencia al objeto

DATA: r_vehiculo TYPE REF TO lcl_vehiculo.CREATE OBJECT r_vehiculo.

Para almacenar objetos en colecciones se utilizan tablas internas con referencias a las clases..

DATA it_empleados TYPE TABLE OF REF TO empleado..

En esta tabla interna se pueden guardar los objetos de la clase empleado y toda subclase de esta, el casting se realiza automáticamente.Para agregar un objeto a la tabla se utiliza la sentencia APPEND, la inserción de los objetos es al final de la tabla y esta no se puede ordenar.

APPEND im_emp TO it_empleados.

Para recorrer esta tabla se utiliza la iteracion LOOP… ENDLOOP

LOOP AT it_empleados INTO empleado. ...

ENDLOOP.

La declaración de un data object referenciando a un objeto casi siempre van de la mano con una tabla de referencias para mantener los objetos en el sistema.

Para llamar a metodos estaticos se usa solamente el nombre de la clase y el operador es ‘=>’.

Constructor -> Es el metodo que se ejecuta caundo se realiza el create object. Se ejecuta una sola vez cuando se crea el objecto y el evento es público. En ABAP object hay herencia de constructores, cuando se llama al constructor de una subclase se ejecutan todos los constructores hasta la clase padre.

PUBLIC SECTION. METHODS constructor IMPORTING im_nombre TYPE string.

Puede tener parámetros de IMPORTING y EXCEPTIONS solamente. Cuando se levanta una excepción el objeto no se crea.

33

Page 34: Resumen ABAP - Certificate

Importante -> la diferencia de la firma de un metodo en un programa y en la implemtacion del metodo es que los parametros que son de IMPORTING son de EXPORTING y al reves.

Si hay más de un tipo de parametros (IMPORTING, EXPORTING, CHANGING, RETURNING o EXCEPTIONS) se debe poner explicitamente en la firma del metodo cuando se lo llama. Los métodos que tienen parámetros de IMPORTING y uno solo de RETURNING se llaman métodos funcionales, estos métodos pueden ser utilizados dentro de operaciones.

Para referenciar variables de un objeto dentro de un metodo teniendo en ambos el mismo nombre, se antepone la palabra clave ‘ME-> ‘ que hara referencia al del objeto. Para referenciar a un método de una superclase se usa la palabra clave ‘SUPER->’.

Para declarar una clase con sus super clases se deben declarar en forma secuencial de la superclase a la subclase, cuando se declaran en forma local. Al declararlo en el diccionario no es necesario.

Para redefinir un metodo en la subclase se define el metodo que queremos redefinir con el addition REDEFINITION, asi el sistema sabe que no es un metodo nuevo sino un redefinicion del metodo de la superclase. No es posible cambiar la firma de un método redefinido. Se puede crear otro método con el mismo nombre pero con distinta firma y sin el addition REDEFINITION.

METHODS: get_sueldo REDEFINITION.

Constructor (instancia) -> El constructor de una clase es un método de instancia público con el nombre CONSTRUCTOR. Cada clase tiene uno y este es llamado automáticamente cuando se crea un objeto de esa clase. Este método se implementa en la sección pública, la implementación de este método no es necesaria para una clase ya que existe un constructor por default.

Constructor (clase) -> El constructor de una clase es un método de clase público con el nombre CLASS_CONSTRUCTOR. Cada clase tiene uno y este es llamado automáticamente cuando se crea un objeto de esa clase, se accede a un atributo o método de clase, o cuando se registra un evento para una clase.

Herencia y redefinición del constructor -> Los constructores se heredan y se les pueden pasar parámetros para setear atributos dentro de ellos. Los constructores de instancia de una súper clase solo pueden ser llamados dentro del constructor de la sub clase. A diferencia del constructor de instancia el constructor de clase se ejecuta automáticamente. Es este caso se ejecuta siempre un constructor de clase antes del de instancia.

Capitulo 7Inheritage

La herencia es una relación entre clases, para implementar la relación clase se pone en la definición el addition INHERITING FROM <super_class>, con esto la subclase hereda todos los atributos y métodos creados PROTECTED o PUBLIC.

CLASS pasante DEFINITION INHERITING FROM empleado. ...

ENDCLASS.

34

Page 35: Resumen ABAP - Certificate

Cada clase puede heredar de una sola clase, no existe herencia múltiple. La herencia múltiple se puede simular implementando interfaces.

Capitulo 8Casting

Casting de objetos -> Narrow cast (= o MOVE … TO …) -> Baja la

especificación de un objeto.Este tipo de casting es chequeado en forma estática por el compilador.

-> Wide cast (?= o MOVE … ?TO … ) -> Sube la especificación un objeto. Este tipo de casting no se chequea en forma estática, se produce en tiempo de ejecución, para esto siempre se encierra esta sentencia dentro de las sentencias TRY CHATH ENDTRY, para atrapar la excepción CX_SY_MOVE_CAST_ERROR.Deben estar en la misma rama de objetos y previamente se debe haber hecho un narrow cast.

TRY. p ?= empleado.

periodo_prueba = p->periodo_prueba. CATCH cx_sy_move_cast_error. e ?= empleado.

ENDTRY.

Hay 2 tipos de referencias a variables-> Estática -> cuando se declara una variable como TYPE REF TO <clase> y esta referencia no cambia en momento de ejecución-> Dinámica -> cuando la referencia a una variable cambia por razón de realizar casting y en tiempo de ejecución se definirá que código se ejecutara dependiendo del objeto apuntado.

Capitulo 9Interfaces

Una interfaz es declarada por el usuario, esta describe los servicios que un usuario puede acceder desde afuera. El usuario no conoce la implementación ni quien la implementa, puede ser una o más clases que implementen el mismo método. Existe polimorfismo en una interfaz. La implementación de interfaces simula la herencia múltiple.Una interfaz se declara entre las sentencias. Dentro se declara la interfaz para los métodos de la interfaz.

INTERFACE if_persona. METHODS if_mostrar_sueldo. ...ENDINTERFACE. "if_persona

La implementación de la interfaz se realiza en las clases que la utilizan, así para cada clase se puede comportar de manera diferente.

En la sección DEFINITION de la clase que implementa esta interfaz se declara con la palabra clave INTERFACES la interfaz a utilizar. Esta definición siempre debe ser en la sección pública.

35

Page 36: Resumen ABAP - Certificate

INTERFACES if_persona.

En la sección de IMPLEMENTATION se codificara el funcionamiento de cada uno de los métodos de esta.Para indicar que el método que estamos implementando deriva de la interna es necesario anteponer el nombre de esta acompañado por el carácter “~” (llamado interface resolution operador)

METHOD if_persona~if_mostrar_sueldo....ENDMETHOD. “if_persona~if_mostrar_sueldo

.

Para utilizar los métodos de la interfaz la clase que los utiliza lo maneja como una clase común, una “clase interfaz”. Tiene que declarar el objeto interfaz y utilizar el método. La clase que utiliza esta interfaz solo tiene accedo al método de la interfaz. No puede acceder al resto de los métodos y atributos.

DATA if_per TYPE REF TO if_persona.

if_per->if_mostrar_sueldo( ).

Las interfaces son utilizadas utilizando referencias a interfaces. La asignación de un objeto a una referencia a la interfaz se llama narrowing cast tal que solo los componentes de de la interfaz son visibles. Desde la referencia a interfaz no se pueden ver los componentes del objeto original.

La clase que utiliza la interfaz por fuera de nuestro sistema tendrá solo referencias a objetos interfaz. Estos objetos tendrán los métodos de la interfaz para utilizar, y los objetos de nuestro sistema que implementan la interfaz tendrá que responder a las llamadas de estos métodos.

Un alias es una forma de llamar al método de la interfaz con otro nombre para no tener que escribir interfaz~metodo. Solo esta permitido utilizarlo dentro de la sección definición de la clase que la implementa.Cada clase puede tener un alias diferente pára el mismo método, este es local para la clase.

ALIASES if_mostrar_sueldo FOR if_persona~if_mostrar_sueldo.

Desde fuera de la se accede al método por el alias como si fuera el nombre verdadero.

Composición de interfaces -> una interfaz compuesta esta compuesta por la definición de otras interfaces mas métodos propios. Puede usar más de una interfaz. La clase que implemente la última de las interfaces en el árbol debe implementar todos los métodos de todas las interfaces.

INTERFACE IF_inter....ENDINTERFACE.

INTERFACE IF_inter2. INTERFACES IF_inter1. ... METHODS ...ENDINTERFACE.

36

Page 37: Resumen ABAP - Certificate

Como cualquier método que se define sea de una superclase o de una interfaz este se puede redefinirEn la sección DEFINITION del método que lo implementa se define el método con el addition redefintion.

METHODS if_persona~if_mostrar_sueldo REDEFINITION.

La implementación de una interfaz se hereda de una superclase a sus subclases.

Capitulo 10Events .000

Un evento se dispara cuando se realizan cambios en otros objetos, se usa para notificar o realizar tareas automaticas tras una operación sobre un objeto.

Tenemos 2 actores el actor que dispara el evento (Trigger) y el que recive el evento (Handler). En el handler esta la definicion y la implemtentacion del metodo y del Trigger solo estara la llamada al evento.

Eventos -> Instancia -> EVENTS -> Estático -> CLASS-EVENT

La visibilidad del evento la define el lanzador del evento, la visibilidad del metodo que atiende en metodo la define el manejador.

Pasos para crear un evento : -> Declarar el evento en la clase lanzador. Los parámetros de este método son solo de EXPORTING

EVENTS empleado_creado .EVENTS empleado_creado

EXPORTING value(ex_emp) TYPE REF TO empleado.

-> Disparar el evento en un método. Los parámetros de exporting son pasados por valor

RAISE EVENT empleado_creadoRAISE EVENT empleado_creado EXPORTING ex_emp = me.

-> En el manejador declarar un metodo que responda al evento que queremos registrar. Los parámetros de este método son solo de IMPORTING. El objeto sender refiere al objeto que envía el evento, no es necesario pasarlo por parámetro.

METHODS: agregar_persona_e FOR EVENT empleado_creado OF empleado

IMPORTING sender.METHODS: agregar_persona_e

FOR EVENT empleado_creado OF empleado IMPORTING sender ex_emp.

-> Para activar el evento creado para que este se acciona se setea el handler para el objeto que atiende ese evento.

SET HANDLER contador->agregar_persona_e

37

Page 38: Resumen ABAP - Certificate

FOR ALL INSTANCES.

Capitulo 12Special Techniques

Clases Abstractas -> No es posible instanciar objetos de un clase abstracta. Se usa para delinear comportamiento de las subclases. En estas clases se definen métodos, los cuales no son necesarios que sean implementados por esta y deben ser implementados por las subclases. Una clase con al menos un método abstracto es una clase abstracta.

Clases Finales -> Las clases finales no tienen subclases asociadas por lo tanto los métodos no pueden ser redefinidos (los métodos son finales o abstractos, pero no al mismo tiempo).Las clases que son abstractas y finales solo pueden tener componentes estáticos.

Visibilidad del constructor -> indica quien puede crear un objeto de la clase.El addition CREATE PUBLIC indica que desde un programa llamando a la sentencia create object se instancia el objeto. El addition CREATE PROTECTED indica que solo objetos de la clase o de la superclase pueden instanciar objetosEl addition CREATE PRIVATE indica que solo objetos de la clase puede instanciar objetos

CLASS c1 DEFINITION CREATE PUBLIC|PROTECTED|PRIVATE....ENDCLASS

Para crear una única instancia una clase (singleton) se usa el addition CREATE PRIVATE con el atributo FINAL.

Friends -> el concepto de clases amigas (friends) no permite acceder a los atributos privados o protegidos de una clase que nos provee de “amistad”. Esta “amistad” es unilateral, una clase a la cual le brindo amigad puede acceder a mis atributos, pero yo no puedo acceder a los de ella. Existe herencia de amistad solo para la clase que la recibe, la que brinda amistad no pasa esta a sus subclases.

Class c1 definition create private friends <class>. ... endclass.

Clases persistentes -> Las clases de persistencia facilitan el manejo de objetos con bases de dato relacionales. Para crear una clase persistente es necesario crearla desde el diccionario del tipo PERSISTENT CLASS. Por cada clase de persistencia que se crea también se crean 2 clases que son las encargadas del servicio. La primera clase tiene el nombre de ACTOR o AGENTE que es la encargada de manejar el objeto. La segunda es “amiga” de la primera y tiene todos los métodos creados por el sistema para el servicio de persistencia (esta clase no puede ser modificada). La clase actor tiene el atributo CREATE PRIVATE, por lo tanto existe un solo actor por clase.

Capitulo 13Excepciones

Una excepción es una situación que se suscita dentro de un programa en ejecución. Las excepciones pueden ser errores o situaciones que deben ser controladas antes de seguir con

38

Page 39: Resumen ABAP - Certificate

el curso normal del programa. Estas excepciones pueden ser lanzadas por el runtime del sistema o por el usuario con la sentencia RAISEN EXCEPTION.

Las excepciones están organizadas en clases de excepciones y cada excepción es un objeto con atributos los cuales nos permiten saber que error ocurrió. Todas las excepciones derivan de las clases de excepciones CX_NO_CHECK, CX_STATIC_CHECK o CX_DYNAMIC_CHECK. Todas estas dependen de la super-clase CX_ROOT.

Aunque las excepciones respeten una jerarquía de excepciones no existe herencia, la excepción que queremos atrapa debe ser declarada explícitamente.

La sentencia para atrapar excepciones son, dentro del bloque TRY-ENDTRY se coloca el codigo al cual queremos monitoriar, las sentencias CATCH contienen el codigo para salvar la excepcion que ocurrio, se pueden poner tantas sentencias CATCH como excepciones puedan ocurrir.Aunque las excepciones responden a un árbol de excepciones no existe herencia entre ellas. para trapear el error debe estar declarado explícitamente de lo contrario no se trapeara el error y el programa hara un DUMP. En el caso de que el error se halla producido en una función y el error no estuviera contemplado dentro de esta, el manejo de la excepción se transporta un nivel para arriba, al llegar a nivel de programa si no se maneja producirá un error de runtime.El bloque CLEANUP se ejecutara siempre que se produzca una excepcion, cualquiera que fuera esta (siempre y cuando este contemplada).

Sintaxis:

TRY....

CATCH <exception>....

CATCH <exception>....

CATCH <exception>....

ENDTRY.

Todas las clases de excepciones heredan de la clase cx_root los mensajes

GET_TEXT -> nos trae el texto del errorGET_SOURCE_POSICION -> nos trae la posición en el programa donde ocurrió el error

Para utilizar estos métodos es necesario instanciar un objeto de la clase cx_root.

DATA: r_exc type ref to cx_root, resultado type string, text type string.

Parameters: pa_int1 type i, pa_int2 type i.

START-OF-SELECTION.

39

Page 40: Resumen ABAP - Certificate

TRY. resultado = pa_int1 / pa_int2. CATCH cx_sy_zerodivide INTO r_exc. text = r_exc->get_text( ). MESSAGE text TYPE 'I'.ENDTRY.

La sentencia MESSAGE <string> TYPE <type> nos permite mostrar cualquier cadena de caracteres por pantalla como mensaje.

Las excepciones del usuario se crean en el diccionario como una clase tipo EXCEPTION CLASS, debe depender de alguna de las clases antes nombradas (no de cx_root).

Para utilizar una excepcion en un metodo es necesario declararlo en la firma del metodo con la palabra clave RAISING <excepcion_name> para que este metodo puede tirar excepciones para arriba. Es posible pasar parámetros a una excepción, se deben declarar el o los atributos en la clase. Para que se puedan insertar en el texto explicativo del error el atributo debe esta encerrado entre “&”. Es posible indicar mas de un texto explicativo y poder seleccionarlo en tiempo de ejecución a través del atributo TEXTID, se le pasa el valor del respectivo texto en el OTR (verlo en atributos del parámetro en la columna initial value).

RAISE EXCEPTION TYPE cx_sy_zerodivide. RAISE EXCEPTION TYPE zcx_excepciones1 EXPORTING result = result textid = 'C7F41423BAB4894592431FB66931E0C2'.

En la capa superior debera esta el codigo monitoriado por todos los exception que el metodo puede tirar.

TRY. PERFORM division. CATCH zcx_excepciones1 INTO r_exc. text = r_exc->get_text( ). MESSAGE text TYPE 'I'. CATCH cx_sy_zerodivide INTO r_exc. text = r_exc->get_text( ). MESSAGE text TYPE 'I'.ENDTRY.

Las clases de excepciones nos proporcionan un texto explicativo del error y en que línea ocurrió, La clase cx_root nos proveer de métodos para esto. Al cachear la excepción la casteamos a un objeto de la clase cx_root y con le método get_text nos trae el texto de la excepción.

DATA: r_exc TYPE REF TO cx_root.

TRY. PERFORM division. CATCH cx_sy_zerodivide INTO r_exc. text = r_exc->get_text( ). MESSAGE text TYPE 'I'.ENDTRY.

40

Page 41: Resumen ABAP - Certificate

Capitulo 14Dynamic Programming

Field-symbols -> Son una especie de punteros desreferenciados. Tienen la particularidad de poder tomas cualquier tipo de dato (type ANY) o tomas un formato fijo.

DeclaraciónFIELD-SYMBOLS <fs> TYPE [<type>|ANY].

AsignaciónASSIGN <data> TO <fs>

DesasignaciónUNASSIGN <fs>

Asignado?<fs> IS ASSIGNED

Utilizando el addition CASTING es posible quitar las restricciones del objeto de datos original.

… CASTING TYPE <type>

ABAP nos permite ejecutar sentencias con parámetros ingresados dinámicamente, estos parámetros deben ser cadenas de texto. En el caso de la sentencia SUBMIT este debe estar entre paréntesis.

PARAMETERS: pa_txt(30) TYPE c OBLIGATORY.CALL TRANSACTION pa_txt.SUBMIT (pa_txt).

Es obligatorio que el parámetro debe estar en mayúscula.Si el parámetro es una lista se puede pasar una tabla interna.

También es posible quitar dinámicamente funciones del PF-STATUS con el addition EXCLUDING ‘FC1’… ‘FC2’. Sin tener que enumerar todas las function codes es posible pasarle una tabla interna con estos códigos.

Type-Pool -> grupo de types declarados a nivel diccionario

Las llamadas a métodos también es posible realizarlas dinámicamente no solo el nombre del método sino la tabla de parámetros y excepciones que este tiene.Las estructuras abap_parmbind_tab y abap_excpbind_tab del type pool abap son utilizadas para pasar estos datos

Type pool Abap.

41

Page 42: Resumen ABAP - Certificate

DATA: ptab type abap_parmbind_ tab, Etab type abap_excpbind_tab.

DATA: ref TYPE REF TO <class>,Meth_name TYPE STRING.

Call method ref->(meth_name)PARAMETER-TABLE ptabEXCEPTION-TABLE etab.

Estructura abap_parmbind_tabNAME -> nombre del parámetro formalKIND -> tipo de parámetro (importing, exporting, changing, receiving)VALUE -> valor de la referencia al data object que contiene el valor. Para esto se utiliza la sentencia GET REFERENCE

Ejemplo como llenar la tabla de parámetros

ptab_line LIKE LINE OF ptab

ptab_line-name = 'P1'.ptab_line-kind = CL_ABAP_OBJECTDESCR=>EXPORTING.GET REFERENCE OF number INTO ptab_line-value.

Estructura abap_excpbind_tabNAME -> nombre de la excepciónVALUE -> valor del sy-subrc ( type i)

CL_ABAP_OBJECTDESCR -> clase que contiene todos los tipos de datos de abap.

Creación de objetos dinámicamente -> es posible crear dinámicamente un objeto pasándole dinámicamente el tipo de clase al que pertenece. Debe estar en mayúscula.

clase = 'C1'.CREATE OBJECT r TYPE (clase).

Excepcion CX_SY_CREATE_OBJECT_ERROR -> excepción cuando la clase no existe.

Data reference -> Son variables que contienen referencias a variables, son punteros a datos. Estos punteros pueden ser a datos elementales o estructuras específicos (TYPE REF TO <type>) o a tipos de datos genérico (TYPE REF TO DATA).El contenido de la variable de referencia contiene una dirección de memoria no como el field-symbol que automáticamente se referencia al valor apuntado. Si se modifica el contenido de la variable de referencia se modificara donde apunta esta (la dirección de memoria).Cuando se define una variable de referencia esta es inicializada con un puntero nulo.Para asignarle una referencia a una variable de referencia primero es necesario crear el data object y usar la sentencia GET REFERENCE OF <data_obj> INTO <data_ref>.

CREATE DATA -> Crea una estructura o dato en forma dinámica, para esto es necesario declarar un data object referencia al tipo de dato que queremos crear, en el caso de que no queremos tipar la referencia se pone TYPE DATA.

DATA: dato1 TYPE REF TO data,

42

Page 43: Resumen ABAP - Certificate

dato2 TYPE REF TO c.

Para crear el data object en tiempo de ejecución.

CREATE DATA dato1 TYPE i. (en el caso de que se halla declarado la referencia como type data)

CREATE DATA dato2.

Para poder acceder al dato dentro de la variable de referencia se usa el operador “->*” que significa “contenido” en el caso de que el contenido fuera una estructura se maneja igual que una work area.

DATA: clase TYPE REF TO data, clase2 TYPE REF TO data, clase3 TYPE REF TO t_struc,

FIELD-SYMBOLS <fs> TYPE ANY.FIELD-SYMBOLS <fs2> TYPE t_struc.

***** Caso de referencia tipada (estructura) *****CREATE DATA clase3.

clase3->*-a = 5. write clase3->*-a.

**** Caso de referencia y fs no tipada (no estrucutras)*****

CREATE DATA clase TYPE i.

GET REFERENCE OF wi INTO clase. ASSIGN clase->* TO <fs>. WRITE <fs>.

**** Caso de referencia no tipada y fs tipado (no estruc)*****

CREATE DATA clase2 TYPE t_struc.

ASSIGN clase2->* TO <FS2>. O get reference of clase2->* into <fs2>.

<FS2>-A = 45. WRITE <FS2>-A.

Generalmente se utiliza un field-symbol tipados para poder acceder a las variables de referencia no tipadas (estáticamente)

Un fields-symbol puede declararse sin referencia a un tipo de dato especifico.

Fields-symbol -> tipados -> Tablas-> datos-> Estructuras

-> No tipados -> ANY -> dato y estruc-> ANY TABLE -> tabla

La sentencia ASSIGN COMPONENT nos permite asignas componente por componente a través de un índice a un field-symbol

ASSIGN COMPONENT idx OF STRUCTURE struc TO <fs>.

43

Page 44: Resumen ABAP - Certificate

DESCRIBE FIELDS DESCRIBE TABLE -> Se utiliza para saber la descripción de una tabla interna o un campo.

DESCRIBE TABLE it_spfli LINES no_lines -> cantidad de líneas

OCCURS initial_lines -> cantidad de líneas cuando se creo la tabla

KIND table_kind. -> tipo de tabla(TYPE-POOLS: SYDES.)SYDES_KIND-STANDARD.

      SYDES_KIND-SORTED.      SYDES_KIND-HASHED.

La sentencia IS INITIAL nos permite saber si la tabla esta vacía.

El método describe_by_data de la clase cl_abap_structdescr nos permite ver la estructura de una tabla.

DATA: dsc_ref TYPE REF TO cl_abap_structdescr,

dsr_ref ?= cl_abap_structdescr=>describe_by_data( wa ).

TAW12 1/3 ABAP workbenchManual de referencia

Como crear una tabla

1. Entrar en la transacción Se11, poner el nombre de la tabla y presionar crear

2. completar el campo delivery class y el campo data browser.. y la descripcion de la tabla

44

Page 45: Resumen ABAP - Certificate

3. En la solapa fields se ingresan los datos, los nombres de los campos y a que data element pertenecen, es posible crear campos que no esten declarados en el diccionario, es mejor declararlos, para esto en la columna data element del campo que queremos declarar escribimos el nombre del data element y hacemos doble clik

4. nos llevara a la siguiente pantalla donde deberemos poner la descripcion y el dominio del data element, para crear un dominio escribimos el nombre y hacemos doble clik sobre este

45

Page 46: Resumen ABAP - Certificate

5. Nos llevara a la siguiente pantalla para crear un dominio completamos los campos técnicos y guardamos los campos y activamos el dominio

6. guardamos el data element y lo activamos7. guardamos la tabla8. para activar la tabla es necesario setear el aspecto tecnico

46

Page 47: Resumen ABAP - Certificate

Inclusión de estructuras en una tabla

1. abrir la tabla con la transacción se11

2. en la barra de herramientas EDIT -> INCLUDE -> INSERTnos pedirá el nombre de la estructura

3. Se incluirá la estructura en la tabla, todo cambio en la estructura se actualizara automáticamente la o las tablas.

47

Page 48: Resumen ABAP - Certificate

Creación de índices1. En la transacción se112. Ingresar a la tabla que queremos3. Presionar el botón index4. Lo llevara a la siguiente pantalla completar al pie los campos por los que quiero que la tabla

este indexada y completo la técnica de indexación.

5. Guardamos la tabla y la activamos para crear el índice.

48

Page 49: Resumen ABAP - Certificate

Capitulo 2 Abap Dictionary

El diccionario maneja todos los datos de SAP

Type elements -> Domains -> Descripción técnica del elemento, consta del tipo de dato, largo

- > Data elements - > Descripción semántica del dominio de datos en un cierto entorno de negocios

- > Structures - > conjunto de data elements o estructuras- > Tipos tablas - > conjunto de líneas de una estructura o

data element.

Db objects -> Tablas -> Vistas -> Índices

Servicios -> F1 y F4 - > documentación y búsqueda para un campo -> Lockeos de registros -> Log de una tabla -> se pueden guardar registro de modificaciones en la DB para esa tabla o campo

Db objects -> Para crear una tabla en la DB es necesario crearla primero en el diccionario y activar la nueva tabla y ese cambio se crea automáticamente en la DB (físicamente).Los índices también se crean en el diccionario como las tablas.

Types elements -> describe la definición de los posibles tipos que puede tener un data element.

Tablas -> componentes (campos) - > campos clave - > campos no clave

-> filas (registros)

Dominio -> Describe el atributo técnico del datos (tipo de dato, decimales, longitud, etc.).Data element -> Describe la información semántica del dato (titulo, etc.).

49

Page 50: Resumen ABAP - Certificate

Capitulo 3Tables in ABAP dictionary

Todas las tablas creadas por el usuario son tablas transparentes. Las tablas transparentes tienen el mismo nombre en el diccionario que en la DB, igual que el nombre de los campos, el orden de los campos pueden variar.

Para crear una elemento en el diccionario de datos esta la transacción SE11, seleccionamos el tipo de elemento queremos crear y presionamos CREATE

Los campos que son de tipo de datos cantidad (QUAN) se debe crear otro campo con la descripción de la unidad que representa esa unidad, y estos 2 campos deben relacionarse. La relación se realiza sobre la tabla en la solapa de quantity sobre el campo que queremos relacionar escribimos la tabla y el nombre del campo del otro. Se puede relacionar con este tipo de relación campos de distintas tablas.

Se puede crear estructuras independientes y estas incluirlas en una tabla, se realiza esto para reutilizar conjunto de componentes que se repiten en varias tablas. Físicamente en la DB se crean los campos en la tabla. Para agregar una estructura en una tabla, editamos la misma y en la barra de herramientas EDIT -> INCLUDES - > INSERT

Las tablas en el diccionario pertenecen a una clase, Data Class -> master Data -> son tablas en las cuales los datos

cambian rara vez-> Organizational data -> Tablas de customizing- > Transaction data -> Tablas que cambian constantemente- > System Data -> Tablas del sistema R/3

Buffering -> Cuando se crea una tabla se debe ingresar el tamaño esperado de la tabla para que la DB cuando llegue a su máximo de registros esperados, esta pueda asignarle mas espacio dinámicamente.

Looging -> Se puede logear los cambios en una tabla o campos de una tabla.La variable de sistema REC/CLIENT activa en el sistema el logeo, si una tabla tiene log pero en el sistema no esta activo no logea nada y al revés pasa lo mismo, si en el sistema esta activo y la tabla no tiene log no logea.

Posibles valoresREC/CLIENT -> ALL -> logeo para todos los clientesREC/CLIENT -> 000 -> logeo para el cliente especificadoREC/CLIENT -> OFF -> No hay logeo

Para ver el log de una tabla se utiliza la transacción SCU3. Cuando se crea una tabla es necesario setear los atributos técnicos, botón

TECHINICAL SETTINGS y setear el data class, size category, buffering technique.

50

Page 51: Resumen ABAP - Certificate

Tabla de objetos del repositorio (codigo fuente de pgm ) -> REPOSRC

El programa RSRSCAN1 nos permite buscar dentro de la tabla TRDIR coddigo fuente.

Capitulo 4Performance during table access

Un índice es una copia física de la tabla con menos o los mismos campos y ordenada por una clave

Index -> Primario -> Es la tabla principal y esta ordenado por los campos clave

-> Secundario -> Se crean desde el diccionario y se pueden elegir cualquier cantidad de campo

Las modificaciones en la tabla principal dispara actualizaciones en todos los índices que contiene el

campo modificado.

La selección de índices la realiza la DB pero se puede ayudar a la DB en el campo WHERE indicar los campos claves en el orden declarados en la tabla.

Buffering -> Las técnicas de buffering consisten mantener las tablas que mas s usan cargadas en el app server en el buffer local para evitar el acceso a la DB y son leídos de ahí para nuevas consultas. Cuando el PGM intenta leer una tabla el app server verifica si esta en el buffer, si se encuentra le devuelve los datos al programa, si no esta el en buffer accede a la DB. Los datos almacenados en el buffer son removidos para dar lugar a otros, los datos a remover se seleccionan por la asiduidad con la que se acceden. La sentencia $TAB ejecutada en la línea de comando actualiza todo el buffer del app server.

Técnicas -> Full - > se lleva toda la tabla aunque leamos 1 registro -> Genérica -> se lleva todos los registros por una clave

definida -> Single -> se lleva solo los registros leídos, usar select

con el addition SINGLE sino se invalida la técnica de buffering. Cuando se intenta acceder a un registro que no existe se marca como no existente y cuando se intente acceder otra vez con la misma clave se evita el acceso a la DB.

La sincronización de buffer obliga a los distintos app server a sincronizar sus buffer si encuentra que tiene tablas en su memoria que fueron modificados y están en una tabla de sincronización, la sincronización se ejecuta cada cierto tiempo seteado por el sistema (rdisp/bufreftime entre 60s y 3600s).

Cuando creas un índice a una tabla dependiente de mandante hay que agregar el mandante en el índice OBLIGATORIAMENTE.

Capitulo 5Consistency through input check

51

Page 52: Resumen ABAP - Certificate

Valores fijos -> Un dominio de datos puede tener valores fijos predefinidos en su declaración, estos valores fijos actuaran como chequeos de datos en el momento del ingreso, también aporta la función F4. Estos valores fijos son guardados en el dominio.

Valores de tabla -> los valores de tabla nos permiten generar un rango de valores para un dominio, estos valores deben estar en una tabla. Una tabla de valores se convierte en una check table en el momento en que se declara una clave foránea.

Para crear una clave foránea es necesario que los dominios de estos 2 campos sean iguales y no el elemento de datos.

Los campos de una tabla pueden estar relacionadas con otras tablas o un conjunto de valores fijos determinados en el dominio del campos

F4 -> tabla de posibles valores de ese campo, se declara en el dominio del campos como un rango de valores fijos o una tabla maestra de datos

Forign key -> relaciona los campos de una tabla con otra en el momento de realizar las inserción en el campo. Nos asegura la consistencia de datos.

Tablas de text -> las tablas de texto no realizan validaciones sino se usan para relacionar una tabla maestra con una de texto, el ejemplo mas común es las tablas de texto de lenguaje.

Para crear una tabla de valores para un dominio ir a la solapa VALUE RANGE dentro del dominio e ingresar los valores, estos pueden ser valores simple, rangos de valores o tablas de valores

Para ver en la tabla las claves foránea esta la solapa entry help/check y en la columna check estará la tabla con la que el campo esta relacionado.

Existen distintos tipos de claves foráneas -> Not specified-> No key fields/candidate -> La clave no identifica a un registro único en la tabla-> Key fields / candidate -> Identifica un registro único en la tabla-> Key fields of a text table -> Es una clave foránea con la diferencia que tiene el campo lenguaje (caso especial de Key fields)

La particularidad de las tablas de texto son que tienen la misma clave que la tabla original pero con el agregado del campo del lenguaje (LANG). Estas tablas guardan generalmente descripciones que se muestran en múltiples idiomas. Solo una tabla de texto se puede crear para una tabla.

Capitulo 6Dependencies of ABAP dictionary objects

El diccionario trabaja con 2 versiones del objeto diccionario una inactiva y otra activa que es la que usa el sistema.

Objetos dependientes -> objetos que dependen de otros por ejemplo un campo depende de un elementos de dato y este a su vez de un dominio. Toda modificación en el diccionario afecta a todos

52

Page 53: Resumen ABAP - Certificate

los objetos relacionados. Si una tabla contiene un campo al cual modificamos su largo o tipo al activar el diccionario se modificara esta.

Para buscar objetos en el diccionario de datos entrar a través del se80 y en la solapa REPOSITORY INFORMATION SYSTEM y buscas la carpeta ABAP DICTIONARY.

Capitulo 7Changes to Database tables

Cuando realizamos cambios en el diccionario de datos estos se reflejan en la DB al momento de activar la tabla. Existen 3 tipos de cambios en la base de datos por parte del diccionario

Tipos de cambios –> Delete -> borra la tabla y la vuelve a crear si la tabla no tiene datos

-> Change -> Se altera la tabla, los datos se mantienen y los índices se vuelven a crear

-> Convert -> cambia la estructura de los camposLa modalidad para realizar los cambios depende si la tabla tiene datos o no:

No tiene datos -> La tabla es borrada y vuelta a crear con la nueva estructura

Tiene datos -> Se recorre la tabla tratando de ajustar los datos al nuevo formato de la nueva tabla (ALTER TABLE).

Al realizar cambios en la DB la interfase:1. lockea la tabla2. borra los índices 3. la renombra con el nombre QCM<tableName>4. crea una nueva tabla con la nueva estructura sin datos (vacía) y crea en índice

primario5. hace un move-corresponding de la tabla QCM a la nueva tabla, al realizar la

copia tener en cuenta que las tablas se duplican 6. deslockea la tabla QCM7. borra la tabla QCM8. renombra la tabla al nombre original9. crea los índices secundarios

En caso de error en la conversión se debe arreglar el problema y se puede re-arrancar la conversión, en el caso de que no se pueda continuar se puede cancelar la operación y volver la tabla al estado original.

Append -> Se usa para agregar estructuras a una tabla sin modificar el standart de SAP, las estructuras append o se pueden agregar en mas de una tabla. Parados en la tabla barra de herramientas GOTO -> APPEND STRUCTURE y ahí creo la estructura normalmente, se puede asignarle claves foráneas en la estructura y también uno de los campos de la estructura pueden formar parte de la clave de la tabla.

Restricciones para estructuras APPEND

53

Page 54: Resumen ABAP - Certificate

No se puede agregar estructuras append a tablas del tipo cluster o pool No es posible agregar estructuras append en tablas o estructuras que tengan como

ultimo campo elementos de datos del tipo LRAW o LCHR

Capitulo 8Views

Es una estructura que combina campo de distintas tablas, las tablas se relacionan a través de un INNER JOIN por sus claves foráneas.

Se crea en el diccionario y se activan pero se genera solamente la estructura ya que se llena en tiempo de ejecución.

En la declaración de la vista se definen los campos que deseo que aparezcan en la tabla así también como los registros que cumplen una condición especifica (selección de opción), esta condición no puede ser establecida para campos enteros.

Las vistas se utilizan igual como si fuera una única tabla transparente.

En reemplazo de una vista se puede utilizar la sentencia select JOIN y simular una vista local al programa.

Para crear una vista transacción SE11 en el campo views, create.Vamos agregando las tablas que quiero relacionar y el sistema por la estructura de las claves primarias va armando el join en el caso de que no nos sirva la relación que nos propone el sistema se puede cambiar

Se pueden incluir todos los campos de una tabla y también agregar estructuras. Las vistas permiten las mismas propiedades técnicas (Buffer) que una tabla normal.

Existen también vistas de mantenimiento en donde se puede crear una ABM de la vista y la DB se encarga de la lógica de inserción en la tabla. Solo se pueden crear vistas de mantenimientos a vistas que contienen una tabla únicamente. La transacción SE13 nos permite modificar los seteos técnicos de las vistas

Las vistas de mantenimiento son un tipo de vista que se crea para mantener las vistas, nos permite realizar altas bajas y modificaciones en la tabla original. Estas modificaciones se puede hacer solo en vistas de una sola tabla.

Cuando se genera una vista de mantenimiento es necesario generar la pantalla de dialogo para poder hacer el mantenimiento. Para generar el dialogo en necesario ir a GOTO -> GENERATE MANTENANCE TABLE y completar los campos que nos piden.

Append Includes -> Son estructuras formadas por campos de las tablas que componen la vista y que nos permiten agregar estos a la vista sin modificarla. Cuando se especifican los campos de una tabla en una vista se puede poner en el nombre del campo “*” que indica que todos los campos de esa

54

Page 55: Resumen ABAP - Certificate

tabla serán incluidos. En el caso de enumerar los campos de una tabla el agregado de campos en la tabla original no se tomaran en cuenta, las append includes nos permite realizar esta ampliación a la vista sin tener que modificarla.

Capitulo 9Search help

En search help es una ayuda de búsqueda para el usuario, existen varios tipo de search help standart de SAP como las tablas de valores o los rangos de valores especificados en el data element.

Estos search help se pueden configurar acotando búsquedas en el search help desde en diccionario esto se llama método de selección

Método de selección -> realiza la búsqueda en una tabla según los parámetros de selección que asignemos. Al método es necesario pasarle una tabla o una vista para la búsqueda, el sistema tiene la restricción de una sola tabla.

Todo search help tiene una interfaz que le permite al usuario ingresar parámetros de búsqueda y devolución.

Search help -> parámetros - > Import -> parámetros con los que se hará la selección

-> Export -> parámetros que se traerán de la ayuda y se completaran en la pantalla de selección

Definición de search help -> Tabla/estructura -> se mostrara en todas las pantallas donde este campo este declarado

-> Check Table -> todos los campos que de la pantalla que tengan este check table contendrán esta búsqueda.

- > Data element -> los campos que estén declarados como ese data element

-> Campo de una pantalla -> se define con el screen painter y solo es para esa pantalla

Si un campo de una pantalla tiene 2 o mas search help cuando presionamos F4 no se sabe cual usar, entonces se creo una jerarquía de search help (Pag 9-11 – ver jerarquía).

Las funciones F4IF_FIELD_VALUE_REQUEST nos permite buscar o modificar el search help de un campo de una tabla. Estas funciones nos permiten retornar los campos del search help. En una tabla.

* ----- Data definition -----DATA: pe_tabname1 LIKE dd03v-tabname, pe_fieldname1 LIKE dd03v-fieldname.DATA: return_tab LIKE ddshretval OCCURS 0 WITH HEADER LINE.

55

Page 56: Resumen ABAP - Certificate

CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST' EXPORTING tabname = pe_tabname1 fieldname = pe_fieldname1 TABLES return_tab = return_tab EXCEPTIONS field_not_found = 1 no_help_for_field = 2 inconsistent_help = 3 no_values_found = 4 OTHERS = 5.

Un search help colectivo es un conjunto de search help elementales, se van agregando y se pueden tener muchas búsquedas para el mismo campo. Deben tener la misma interfaz para poder reutilizar la misma búsqueda.

Un search help elemental puede estar en más de un search help colectivo, un search help colectivo puede estar incluido en otro search help colectivo.

Para atachar un search help a una tabla ir a EXTRAS -> SEARCH HELP FOR TABLES, ingresar el nombre del search help que creamos y relacionar los campos de input del search help con los de la tabla o pantalla.

Si tenemos una check table en un campo de una tabla y queremos que en este crear un search help hay que hacerlo en la tabla check.

Para borrar un search help elemental en uno colectivo y el search help colectivo es standard de SAP y no podemos modificarlo hay que crear una estructura APPEND de search help y agregar el search help que queremos eliminar y lo marcamos como HIDE de esta manera en el search help colectivo no aparece. (forma de modificar el standard sin modificarlo)

Capitulo 13Reporting

Las pantallas de reportes simples constan de 2 headers, que son la descripción del programa mas una línea que lo separa del listado, estos 2 líneas se mantiene en la cabecera del listado cuando scroleamos el mismo.

REPORT -> Programa ejecutable que nos permite realizar listados básicos por pantalla, tiene muchas addtion que nos permite configurar el formato del reporte.

-> NO STANDARD PAGE HEADING -> quita la cabecera del reporte, viene asociado con el evento TOP-OF-PAGE

para poner un encabezado propio.->NEW PAGE LINE-SIZE y LINE-COUNT -> son para

especificar la cantidad de filas y columnas que tiene mi reporte. Default LINE-SIZE = 83

LINE-COUNT = 60000. WRITE -> Sentencia que nos permite armar listados simples, nos permite formatear el

campo que queremos por pantalla. Los listados básicos se desarrollan en el evento START-

56

Page 57: Resumen ABAP - Certificate

OF-SELECTION, todo write dentro de este evento se mostrara como listado, en otro evento NO.

Formato de la sentencia WRITE -> la sentencia write nos permite formatear la salida de los datos en el listado. También es posible dibujar iconos en la pantalla, líneas, etc,

Un listado básico se compone de un encabezado que contiene el nombre del programa, Este encabezado se puede cambiar desde el editor, tiene como máximo 4 renglones.

La sentencia SET LEFT SCROLL-BOUNDARY nos permite mantener fijas columnas en un listado básico al momento de desplazarse lateralmente en un listado.

Elementos de texto -> los elementos de texto nos permite imprimir un texto en distintos idiomas.Se imprimen de la siguiente manera

WRITE TEXT-xxx -> busca el elemento de texto y lo imprime en la pantalla, si no lo encuentra imprime

blanco‘LITERAL’(xxx) -> busca el elemento de text xxx

y lo imprime en la pantalla, si no lo encuentra imprime el literal que lo acompaña.

Variables de sistema para la impresión de reporte simples.

SY-LINCT -> cantidad de líneasSY-LINSZ -> largo de la líneaSY-SROWS -> cantidad de filas en pantallaSY-SCOLS -> cantidad de columnas en pantallaSY-PAGNO -> numero de paginaSY-LINNO -> numero de línea seleccionadaSY-COLNO -> numero de columna seleccionada

La sentencia ON CHANGE OF <field> … ENDON dentro de un loop nos permite realizar un corte de control por todos losel campo especificado, la sentencia dentro solo se ejecutara cuando el campo especificado cambie de valor.

Capitulo 14 Selection Screen

Una pantalla de selección es una interfaz entre el usuario y el programa, existen 3 tipos de pantallas

Pantallas de selección de una DB lógicaPantalla de selección standard de SAP (screen 1000)Creadas por el usuario

SELECTION-SCREEN BEGIN OF SCREEN 1100....SELECTION-SCREEN END OF SCREEN 1100.

Se ejecuta asíCALL SELECTION-SCREEN 1100

57

Page 58: Resumen ABAP - Certificate

Cuando se ejecuta esta sentencia la pantalla de selección se muestra en toda la pantalla. Para mostrar una pantalla en forma de ventanita se agrega los addition que indican en donde arranca la pantalla y donde termina (coordenadas). Antes de mostrar la pantalla se ejecuta el evento INITIALIZATION donde se puede discriminar el número de pantalla que se mostrara con la variable de sistema SY-DYNNR.

CALL SELECTION-SCREEN 1100 STARTING AT 10 5 ENDING AT 80 10.

Parámetros en un pantalla de selección

ParametersNormal -> MEMORY ID -> al asignarle un valor

SAP nos trae de la memoria el valor del parameter id-> VALUE CHECK -> nos permite que el

diccionario valide los datos ingresados-> OBLIGATORY -> nos obliga a ingresar

valores-> As checkbox -> tilde (‘ ’ o ‘X’)-> RadioButton Group <grp> -> son excluyentes

Select-option

-> Tabla interna que define el sistema con los campos.

SIGN OPTION LOW HIGH [I/E] [EQ|BT|…] <valor> <valor>

en esta .tabla interna se guardaran los parámetros de selección

Se puede poner mas de un parámetro en una línea, debe estar el en bloque. La particularidad de esta sentencia es que los labels de los objetos de pantalla se pueden, es necesario ingresarlos a mano con la sentencia SELECTION-SCREEN COMMENT.

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN COMMENT 1(5) text-002 FOR FIELD pa_tipo.

PARAMETERS: pa_tipo TYPE zpersonal-tipo VALUE CHECK.SELECTION-SCREEN COMMENT 10(5) text-003 FOR FIELD pa_sueld.PARAMETERS: pa_sueld TYPE zsueldos-sueldo VALUE CHECK.

SELECTION-SCREEN END OF LINE.

Las sentencias AT SELECTION-SCREEN ON HELP-REQUEST FOR <f> y AT SELECTION-SCREEN ON

VALUE-REQUEST FOR <f> son para capturar el F1 y F4 respectivamente en un campo especifico.

La sentencia SELECTION-SCREEN BEGIN OF SCREEN nos permite crear una selection screen aparte de la que nos da SAP para ingresar datos extras. Se pueden crear select options y parameters, se invoca con la sentencia CALL SELECTION-SCREEN xxx

SELECTION-SCREEN BEGIN OF SCREEN 1100.

58

Page 59: Resumen ABAP - Certificate

PARAMETERS: pa_acc1 RADIOBUTTON GROUP acc,pa_acc2 RADIOBUTTON GROUP acc,pa_acc3 RADIOBUTTON GROUP acc.

SELECTION-SCREEN END OF SCREEN 1100.

La variable de sistemas sy-dynnr nos muestra en que numero de dympro nos encontramos

El evento AT SELECTION-SCREEN OUTPUT se ejecuta cada ves que se carga una pantalla o el usuario presiona enter. Se ejecuta justo antes de mostrar la pantalla de selección.La sentencia LOOP AT SCREEN nos permite modificar los atributos de los elementos en la pantalla en forma dinámica. La sentencia MODIFY SCREEN aplica los cambios realizados en los objetos de la pantalla.

AT SELECTION-SCREEN OUTPUT. LOOP AT SCREEN. SCREEN-INTENSIFIED = '1'. MODIFY SCREEN. ENDLOOP.

Las sentencias AT SELECTION-SCREEN ON HELP-REQUEST y AT SELECTION-SCREEN ON

VALUE-REQUEST nos permite programar su propio F1 y F4 respectivamente.

Variantes -> Una variante nos permite guardar el contenido de los campos de una pantalla, tiene sentido esto cuando en una pantalla generalmente se completan los campos con la misma información. Las variantes son únicas y se almacenan en cada programa y no pueden ser compartidas con otros. Se pueden crear más de una variante para cada pantalla, y variantes globales a todas las pantallas del programa. Las variantes no solo se usan para completar pantallas de programas interactivos se utiliza para procesamiento batch.

La tabla TVARV contiene la estructura de un select option, nos permite armar esta tabla con el criterio de selección. Así facilitar la búsqueda en la DB.

Capitulo 15Logical Database.

Las DB lógicas son programas ya armados que acceden la DB y tener disponible la información. Tienen la ventaja de que los chequeos de autorización ya fueron realizados dentro de la DB lógica. El programa que tiene la logica de las db se llaman SAPDB<ldbname>.

La sentencia GET tiene disponible los campos que tiene la DB lógica de acuerdo a la secuencia de las claves primarias de las tablas de la DB. Incorpora chequeos de seguridad cuando se realiza el acceso.

Se declara la Db lógica que va a usar el programa de reporte en los atributos del programa, en la parte de declaración se declaran los nodos de la DB lógica que se van a usar, cuando queremos leer datos un nodo usamos la sentencia GET <node_name>. Es posible declarar una db lógica dinámicamente en un programa con la función LDB_PROCESS.

59

Page 60: Resumen ABAP - Certificate

La sentencia GET <node_name> es igual a la sentencia SELECT * en un acceso normal, para seleccionar campos en particular se usa el addition FIELDS <f1> … <fn>

La sentencia GET es parecida a un SELECT…ENDSELECT pero en una DB lógica, es cíclico y cuando anidas GETs se debe hacerlo en el orden de anidamiento de la DB lógica. La sentencia GET no tiene sentencia de cierre, tener enguanta en el caso de poner sentencias abajo que no pertenezcan a la iteración.

Nodos (Nombre de hasta 14 caract) -> Table (Type T) -> Nombre de la tabla transparente-> DDIC (Type S) -> El nodo es una estructura del DIC-> Groups (Type C) -> El nodo esta definido en un type group-> Dinamic -> El nodo no tiene estructura fija

Cortes de flujo de programaCHECK <log_exp> -> finaliza el bloque de procesamiento actual y sigue con el siguiente valorSTOP -> finaliza el bloque de procesamiento actual y ejecuta la sentencia END-OF-SELECTION si este existe. Si se ejecuta dentro del END-OF-SELECTION se termina el programa y se muestra cualquier listado básico que se haya generado.EXIT -> finaliza el programa y se muestra cualquier listado básico que se haya generado.REJECT

Capitulo 16Data Retrieval

Se puede ejecutar sentencias de SQL nativo, debe estar encerrado dentro de las sentencias EXEC SQL... ENDEXEC.

DATA: f1(25), f2(25), f3(25).f3 = '28.077.789'.TRY. EXEC SQL PERFORMING WRITE.

SELECT NOMBRE, APELLIDO INTO :F1, :F2 FROM ZPERSONAL

WHERE DNI = :f3 ENDEXEC.CATCH cx_sy_native_sql_error.ENDTRY.

FORM WRITE. IF f1 > 0. WRITE: / f1, f2. Else. EXIT FROM SQL. Endif.ENDFORM. "WRITE:

Las sentencias SQL nativo responden a la DB en la que se este ejecutando, no todas tienen la misma sintaxis, El nombre de los campos y tabla van en mayúscula. Los datos de la a la función y de la función se pasan por variables de tipo host y van precedidas dentro de la sentencia con dos puntos (:).

60

Page 61: Resumen ABAP - Certificate

Cuando la sentencia de error levanta la excepción cx_sy_native_sql_error. Se pueden ejecutar todas las sentencias SQL estándar mas las especificas que nos provea la DB.En el caso de que la selección de un conjunto de líneas como respuesta se utiliza el addition PERFORMING <form_name>. El sistema ejecuta una iteración por cada línea traída ejecutando la función. Para cortar la iteración se usa la sentencia EXIT FROM SQL función.

Funciones de agregado a sentencias OPEN SQL

select count(*) from zpersonal into count.select min( sueldo ) from zper_suel into count.select max( sueldo ) from zper_suel into count.select avg( sueldo ) from zper_suel into count.

Distintas maneras de recuperar datos de una DB

-> DataBase View-> Inner y Outer JOIN -> vinculas tablas transparentes-> For all entries -> vinculación entre tablas transparentes y tablas internas-> sentencias SQL anidadas

DataBase View -> una vista es un join de 2 o mas tablas con una estructura particular que se crea en el diccionario y se puede usar como una tabla transparente, el JOIN se resuelve en tiempo de ejecución y no ocupa espacio en la DB. Una vista realiza in INNER JOIN para armar la estructura. La sentencia select para una vista es igual a la de una tabla, es transparente para abap que tipo de tabla maneja.

JOIN -> Nos permite relacionar 2 o mas tablas por el contenido de un campo.

SELECT nombre apellido INTO CORRESPONDING FIELDS OF TABLE it_per

FROM zpersonal AS a INNER JOIN zsueldos AS b ON a~dni = b~dni.

FOR ALL ENTRIES IN… WHERE… -> Busca en una tabla por cada entrada de la otra tabla sin importar que sean tablas internas o transparentes.IMPORTANTE: chequear que la tabla por la que queremos buscar tenga registros y Eliminar los registros duplicados.

SELECT * FROM sflight INTO wa_sflight     FOR ALL ENTRIES IN ftab     WHERE CARRID = ftab-carrid AND           CONNID = ftab-connid AND           fldate = '20010228'. ENDSELECT.

Para saber cuantas entradas tiene una tabla, nos devuelve la cantidad de entradas.DESCRIBE TABLE <itab> LINES <contador>

Para borrar registros duplicadosDELETE ADJACENT DUPLICATES FROM <itab>

Sentencias SELECT anidadas

DATA: wa_per TYPE zpersonal, wa_suel TYPE zsueldos.

TRY. SELECT * FROM zpersonal INTO CORRESPONDING FIELDS OF wa_per. SELECT * FROM zsueldos

61

Page 62: Resumen ABAP - Certificate

INTO CORRESPONDING FIELDS OF wa_suel WHERE dni = wa_per-dni.

WRITE : / wa_per-nombre, wa_per-apellido, wa_suel-sueldo.

ENDSELECT. ENDSELECT. CATCH cx_sy_open_sql_db.ENDTRY.

Capitulo 17 Data formatting and control level processing

La sentencia APPEND inserta registros al final de una tabla, la variable de sistema SY-TABIX guarda la posición en la tabla donde se realizo la inserción. No se puede realizar esta operación en tablas del tipo HASHED.

La sentencia COLLECT ( pag 268 L.1) se utilice para crear una única tabla de registros, estos registros tienen la particularidad que están compuestos por la clave y el resto de los campos deben ser numéricos. Cuando se inserta un registro se busca en la tabla, si esta los campos no clave (numéricos) se suma y si el registro no esta este se agrega a la tabla interna.

SORT -> Ordena una tabla por los campos que necesitamos ascendentes o descendentes, con el addition BY <f1>…<f2> se especifican los campos que queremos (para tablas Standard o hashed). No es posible cambiar el ordenamiento de una tabla SORTED.

AT... ENDAT -> FIRST -> Primer registro de la tabla-> NEW <field> -> -> END OF <field> -> -> LAST ->

Estas sentencias no permiten realizar cortes de control para realizar listados básicos.

FIRST y LAST -> Se ejecuta una sola vez en el corte de control nos permite mostrar un titulo o pie de pagina.

NEW y END OF -> con esta sentencia realizamos el corte de control pos los campo. La iteración se realiza por una “estructura” que empieza el campo de mas izquierda hasta el campo que ponemos en la sentencia. Si los campos de la tabla que queremos iterar no tiene el orden que necesitamos es conveniente crear una estructura con los mismos campos y el orden que necesitamos.Por lo general se ordena la estructura por los campos que queremos iterar.Los campos que están fuera de las sentencias de corte de control se mostraran como una iteración normal.La sentencia SUM totaliza todos los campos numericos dentro del bloque.

TYPES: BEGIN OF s, cityfrom TYPE s_from_cit, cityto TYPE s_to_city,

mandt TYPE s_mandt, carrid TYPE s_carr_id,

...END OF s.

62

Page 63: Resumen ABAP - Certificate

DATA: it_spfli TYPE TABLE OF s, wa_spfli TYPE s.

SELECT * FROM spfliINTO CORRESPONDING FIELDS OF TABLE it_spfli.

SORT it_spfli BY cityfrom cityto.

LOOP AT it_spfli INTO wa_spfli. AT FIRST. WRITE: / 'TITULO DEL LISTADO'. ULINE. ENDAT.

AT NEW cityfrom. WRITE: / 'Aeropuerto de salida', wa_spfli-cityfrom. ENDAT.

AT NEW cityto. WRITE: / 'Aeropuerto de llegada', wa_spfli-cityto. ENDAT.

WRITE : / wa_spfli-carrid, wa_spfli-connid.

AT END OF cityfrom. ULINE. ENDAT.

AT END OF cityto. ULINE. ENDAT.

ENDLOOP.

Extract dataset -> Consiste en una secuencia de registros de una estructura predefinida, sin embargo esta estructura no es igual para todos los registros. En un extract dataset se pueden guardar registros de distinto largo. Es necesario definir la estructura de cada dataset en el programa, esta puede ser definida dinámicamente. A diferencia de una tabla interna esta se almacena temporalmente en el sistema operativo en ves de la memoria.La única manera de acceder a los datos es recorrer el dataset con la sentencia LOOP… ENDLOOP.Es posible ordenar el dataset por un campo o por el header.

DefiniciónFIELD-GROUPS: header, order, product, date_first.

-> define cada grupo en el dataset.

FIELD-GROUPS: header.

-> define un grupo especial el cual compartirá cada uno de los dataset

INSERT onr date position INTO header.INSERT customer INTO order.INSERT pnr name units INTO product.INSERT date onr position INTO date_first.

-> Define los campos que pertenecen al grupo.

ONR = 'MM00034'. DATE = '19920401'.POSITION = '000'. CUSTOMER = 'Moneymaker'.EXTRACT ORDER.ADD 1 TO POSITION.

63

Page 64: Resumen ABAP - Certificate

PNR = '23456'. NAME = 'Nail'. UNITS = 300.EXTRACT PRODUCT.

-> crea el dataset con los datos

Nos permite recorrer el dataset según el grupo y acceder a los campos

LOOP. AT order. WRITE: /, / date, onr,

position, customer, 'ordered:'. ENDAT. AT product. WRITE: / date, onr, position, pnr, name, units. ENDAT.

ENDLOOP.

Capitulo 18Saving list and background processing

Se puede en vez de salir por la pantalla un listado a salir por la impresora.

Activar -> NEW-PAGE PRINT ON...Desactivar -> NEW-PAGE PRINT OFF

NEW-PAGE PRINT ON PARAMETERS print-parameters NO DIALOG.

La variable de sistema sy-spono contiene el ID del archive de spool.

Función para obtener los parámetros de la impresora del sistema

DATA: print-parameters LIKE pri_params.

CALL FUNCTION 'GET_PRINT_PARAMETERS' EXPORTING no_dialog = 'X' immediately = ' ' IMPORTING out_parameters = print-parameters EXCEPTIONS archive_info_not_found = 1 invalid_print_params = 2 invalid_archive_params = 3 OTHERS = 4.

SUBMIT -> llamada de un programa hacia otro, se puede llamar un programa que tiene una salida y con la cláusula TO SAP-SPOOL y envía esta salida al spool.

JOB -> conjunto de pasos, cada paso es un programa. Se puede crear un job dinámicamente en un programa las funciones son ‘JOB_OPEN’, ‘JOB_SUBMIT’ y ‘JOB_CLOSE’

Capitulo 19

64

Page 65: Resumen ABAP - Certificate

Interactive list

Eventos de Basic list ->

START-OF-SELECTIONGETEND-OF-SELECTIONTOP-OF-PAGEEND-OF-PAGE

Eventos de Detail list ->

AT LINE-SELECTIONAT USER-COMMANDTOP-OF-PAGE DURING AT LINE-SELECTION

Las listas de detalle pueden tener un nivel de hasta 20 listas de detalle. El nivel de detalle se guarda en una variable sy-lsind.Las listas de detalle solo se crean cuando se realice un write en el programa.

Toda actividad en la pantalla (doble-click, F2 sobre una linea, un boton en la pantalla, etc) ejecuta el evento AT LINE-SELECTION con el codigo de accion PICK contenido en la variable de sistema SY-UCOMM.

SET TITLEBAR -> nos permite poner un titulo a nuestro listado. Se le puede pasar parámetros con el addition WITH…Este titulo no puede tener más de 70 caracteres con los parámetros.

TOP-OF-PAGE DURING LINE-SELECTION -> no permite poner encabezados en los niveles de listados.

GET CURSOR FIELDS -> nos trae el valor y el campo en donde se realizo la selección de una línea.

WINDOWS -> Esta sentencia funciona solamente en el evento AT LINE-SELECTION, nos permite crear una ventana con el listado básico.

WINDOW STARTING AT 10 30 ENDING AT 60 30.

WRITE...

Capitulo 20SAP Grid Control

Un control es un objeto que se muestra en el frontend desde el frontend. Estos objetos deben estar instalados en la maquina del usuario y el encargado de administrarlos es el SAP_GUI.

Todo control se debe mostrar dentro de un contenedor y como un contenedor es un control denota que estos pueden anidarse. El control que contiene a un control se transforma en el padre el mismo.

65

Page 66: Resumen ABAP - Certificate

Para mostrar datos en un gris control se deben pasar los datos en forma de una tabla, además de la tabla con los datos, se debe pasar una estructura igual a la tabla de datos que proporcionara el orden de los campos en la grilla. Generalmente esta tabla esta activa en el diccionario lo que proporcionara datos técnicos de los campo. En el caso de que se usara una estructura interna del programa se debe especificar estos datos a través una estructura de catalogo. Se pueden mezclar tablas del diccionario con campos internos del programa.

Luego de crear el objeto contenedor y asignarle un objeto grilla se deben mostrar los datos. El objeto grilla dispone del método SET_TABLE_FOR_FIRST_DISPLAY que crear las grilla en la pantalla y la llena de datos.

Para agregar campos a una grilla que no estén en la estructura se utiliza el catalogo, Aquí se especifican los campos que serán agregados con sus respectivas especificaciones técnicas. Cada línea del catalogo responde a una columna en la grilla.El catalogo es una tabla del tipo LVC_T_FCAT a la cual se le agregaran registros que serán mostrados en la grilla. Esta tabla será pasada por parámetro al método SET_TABLE_FOR_FIRST_DISPLAY (parámetro it_fieldcatalog)

clear wa_fieldcat. wa_fieldcat-fieldname = 'SUELDO'. wa_fieldcat-col_pos = 10. wa_fieldcat-coltext = 'SUELDO'.APPEND wa_fieldcat TO gt_fieldcat.

CALL METHOD sap_grid->set_table_for_first_display EXPORTING i_structure_name = 'ZPERSONAL' CHANGING it_outtab = it_personal it_fieldcatalog = gt_fieldcat

1. Instanciar ALV, declaracionesDATA : GRID type ref to cl_gui_alv_grid,CONTAINER TYPE REF TO cl_gui_custom_container,IT_FLIGHT TYPE TABLE OF SFLIFGHT.

2. Crear pantalla y marcar area para el contenedor (en el programa CALL SCREEN 100 )En el screen painter crear pantalla TYPE: NORMAL, poner el cursor en una línea de la pantalla y luego

EDIT ->CREATE ELEMENT->CUSTOM CONTROL.

Cerrar el area con doble clic, colocar el nombre el contenedor 'MY_CONTAINER'.En la lista de elementos, colocar OK_CODE.

3. En PBO, instanciar la grilla y el contenedor: If CONTAINER is INITIAL

create object container exporting CONTAINER_NAME =3D 'MY_CONTAINER' create object grid exporting I_PARENT =3D container

endif

66

Page 67: Resumen ABAP - Certificate

4. Cuando se llena la tabla interna con datos, se pas a la grilla :

CALL METHOD grid->set_table_for_first_display exporting

I_STRUCTURE_NAME = 'SFLIGHT' changing

IT_OUTTAB =3D it_sflight

TAW12 2/3 ABAP workbenchManual de referencia

Capitulo 2SAP Programing Model

Tipos de programas -> Ejecutables (Type 1) -> Se ejecutan Directamente desde el editor de ABAP, tienen una pantalla de selección, normalmente crea y muestra un listado básico

-> Module Pool (Type M) -> Solo se puede ejecutar a través de una transacción. Se debe especificar una pantalla de inicio y luego se puede controlar la secuencia en el pgm.

-> Programas de modularizacion -> son programas que nos permiten modularizar programas

Organización de código -> Para organizar el código de un programa se utilizan los programas de tipo INCLUDE. La separación de código en bloques no afecta el funcionamiento del programa. En momento de compilar los programas internamente agrupa todo.

Al crear el programa se crean varios INCLUDEs para separar en bloques el código que va en la pantalla, la declaración de variables y eventos.

Capitulo 3Introduction to screen programming

67

Page 68: Resumen ABAP - Certificate

La lógica de una screen esta separada en 2 bloques de procesamiento PBO (Process Before Output) y PAI (Process After Input).

Una screen es un contenedor de elementos de pantalla y un flujo de lógica de programa. Una screen tiene 4 componentes

-> Screen mask-> Screen attributes-> Element list-> Flujo de lógica de programa

Es aconsejable crear la screen desde el object navigator ya que esta debe estar asociada a un programa.

Primero -> Completar los atributos del programaDescripción de la pantallaTipo de pantallaPantalla Siguiente

Segundo -> Crear el Layout de la pantalla en el screen painter Incorporar los elementos de pantalla a la screen.

Tercero -> En la lista de elementos estarán los elementos de ingresados en la pantalla, es necesario crear el elemento OK_CODE el cual nos permitirá comunicar el programa con la pantalla. -> Debemos crear en el programa la variable OK_CODE del tipo SY-UCOMM.

Cuarto -> Crear los módulos en el PBO y PAI

Las pantallas se nombran con números, los números mayores a 9000 están reservadas para SAP, las pantallas 1000 a 1010 están reservadas para las pantallas de mantenimiento del diccionario ABAP.

La secuencia de pantallas se puede establecer extáticamente en los atributos de la pantalla (atributo NEXT SCREEN ) o dinámicamente por código, la sentencia SET SCREEN <num_scr> nos permite establecer la siguiente pantalla en el ciclo lógico del programa. Si el numero de pantalla ingresado es 0 el sistema continua procesando desde el punto de donde se llamo la pantalla cuando esta se haya terminado de procesar.

Los campos de una pantalla pueden venir del diccionario (recomendado) o de datos creados internamente en el programa, los campos adoptaran la forma y tipo de los datos de origen. Al cambiar el tipo de dato de un data object se modificara automáticamente el campo, se recomienda crear los campos a partir de elementos del diccionario para mantener coherencia de los datos, los cambio de tipos de datos el diccionario modificaran a todos los programas y pantallas que los utilizan.

La variable de sistemas SY-DYNNR contiene el numero de screen en la que el programa se encuentra, se usa por si en proceso que estamos haciendo depende de la screen el la que se encuentra.

Para conectar un programa con una pantalla se utilizan estructuras y data object, estos deben estar definidos como tipos de datos del diccionario y tener el mismo nombre en los 2 lados

68

Page 69: Resumen ABAP - Certificate

La sentencia TABLES en el programa abap se usa (no únicamente) para declarar una estructura para interfacear los datos entre el programa y la screen

Todos los atributos de elementos de una screen pueden ser modificados en momento de ejecución, el la lógica de la screen se tiene acceso a la tabla interna SCREEN (line type screen) donde se encuentran todos los elementos y sus atributos. Estas modificaciones son temporales y corresponden a la corrida del programa, los atributos de los objetos de la pantalla vuelven a la normalidad cuando la ejecución del programa termina.

Los elementos de una pantalla se pueden agregar a un grupo para poder realizar modificaciones masivas. Solo se pueden armar 4 grupos de elementos de pantalla

A los elementos se los pueden acceder por su nombre o por el grupo a cual pertenecen (ver página 3-21 estructura de la tabla). Se realiza un loop a la tabla de la siguiente manera

LOOP AT SCREEN.IF SCREEN-NAME = ‘CAMPO1’.

SCREEN-ACTIVE = 0.MODIFY SCREEN.

ENDIFIF SCREEN-GROUP1 = ‘AAA’.

SCREEN-ACTIVE = 0.MODIFY SCREEN.

ENDIFENDLOOP.

Estas modificaciones dinámicas generalmente se hacen en el modulo PBO de la pantalla antes de mostrar los elementos. Esta sentencia es particular del lenguaje del screen painter, no es una sentencia de ABAP.Al termino de cada modificación que se realice en una línea de la tabla SCREEN se debe ejecutar la sentencia MODIFY SCREEN ya que sino se perderán los cambios en el objeto.

Sentencias de cambio de pantalla

SET SCREEN <scr_num> -> nos permite modificar el flujo de pantallas modificando el atributo next screen de la misma, se ejecutara cuando se termine de procesar el PBO, la pantalla debe pertenecer al mismo grupo de programas

LEAVE SCREEN -> Termina el procesamiento de la pantalla actual y pasa a la pantalla especificada por el atributo next screen de la pantalla.

LEAVE TO SCREEN <scr_num> -> Termina el procesamiento de la pantalla actual y pasa la pantalla especificada. Invalida el atributo next screen.

CALL SCREEN <scr_num> -> nos permite ingresar en

69

Page 70: Resumen ABAP - Certificate

nuestra secuencia de pantallas otra y hasta que no se ejecuta la misma no nos devuelve el control a la pantalla llamadora.

Para interrumpir el procesamiento de una pantalla y llamar a otra se usa la sentencia CALL SCREEN <xxx>. Para retornar a la sentencia inmediatamente debajo de la llamada se puede usar las sentencias SET SCREEN 0, LEAVE SCREEN o LEAVE TO SCREEN 0.

Para terminar un programa de dialogo se usa la sentencia LEAVE PROGRAM. La sentencia LEAVE TO SCREEN 0 vuelve el programa al menú principal (menú SAP)

Para llamar una pantalla en forma modal se usa los addition a ala sentencia CALL SCREEN

CALL SCREEN 100 STARTING AT x1 y1 ENDING AT x2 y2

La sentencia SET CURSOR FIELD nos permite pararnos en el campo que queremos con solo indicar el nombre del mismo.

SET CURSOR FIELD 'ZPER_SUEL-NOMBRE' OFFSET 3.

Capitulo 4The program interface

SET TITLEBAR <tit_name> WITH &1... &9 -> Setea el titulo para la screen en forma dinámica, el titulo es un objeto de la screen y debe ser creado (no es un string), hacer doble click sobre el nombre del titulo y crearlo. Se puede pasarle variables para incluir en el titulo del programa, hasta 9 parámetros, el titulo puede tener hasta 20 caracteres. Es posible pasar variables a un titulo, cuando se genera el titulo el espacio para las variables se reserva con la sentencia &x.

SET PF-STATUS -> nos permite utilizar los botones de la pantalla, como la barra de titulo poner un nombre y hacer doble clik sobre esta, nos llevara a la pantalla donde estarán todas los botones a utilizar, al ponerle un código al botón que queremos utilizar solo hace falta ponerle un nombre y listo, este nombre estará asociado al botón. El nombre del botón pulsado viajara en la variable OK_CODE hacia el PBO.

Técnicamente el status es una referencia a una barra de menú, teclas asignación y barra de aplicaciones. Cada uno de los componentes pueden estar en más de un GUI STATUS. Cada pantalla puede tener más de un status, pero no al mismo tiempo, este cambia dinámicamente.Una barra de menú esta compuesta por menús individuales, un menú puede tener hasta 15 entradas. Una entrada puede ser una función, un separador u otro menú en cascada. La cascada de menús puede ser hasta nivel 3.Para crear una entrada en un menú se coloca en la parte izquierda el function key y su descripción en la parte derecha que aparecerá en el menú. Para agregar un submenú se coloca en la parte derecha el nombre del menú. Toda función en un menú debe ser activada para que aparezca en el menú como seleccionable (no grisada).Las teclas de asignación y la barra de aplicación son un subconjunto de las teclas de función.Para poder usar una función en la barra de aplicaciones primero debe tener asignado un fuction key.Toda function key al ser presionado un botón, menú o tecla de funcion viaja al PAI en la variable OK_CODE.

70

Page 71: Resumen ABAP - Certificate

Para crear un componente (barra de menú, teclas asignación y barra de aplicaciones.) se debe ir dentro del menú painter GOTO-> INTERFACES OBJECTS ahí tendremos todos los componentes.

Cada tecla de función esta diferenciada por un tipo.E Exit command (MODULE xxx AT EXIT-COMMAND)S System functionT Call a transaction‘’ Normal application functionP Local GUI functionsH Internal Use

Limpiar el data object OK_CODE en el PBO para evitar que tenga valores erróneos.Conviene crear un modulo aparte para guardar todas las sentencias de inicialización.

CLEAR OK_CODE.

Capitulo 5Screen elements for output

71

Page 72: Resumen ABAP - Certificate

Elemento de texto -> Es un label que se puede colocar en la pantalla, -> Para escribir un texto de varias palabra es necesario en vez de separarlos

por espacios se debe separar por un guión bajo (Separador de palabras ‘_’). -> Se tiene muchas propiedades de diseño, asignarle iconos o ponerlo en un

grupo de elementos. -> Para traducir los textos en distintos idiomas hay que hacerlo desde los

element list de la screen, no se hace desde el screen painter. -> No se puede modificar el texto en tiempo de ejecución.

STATUS ICONs -> Son elementos gráficos de una pantalla, son campos de salida y se pueden

modificar en tiempo de ejecución, son iconos predefinidos, tienen un nombre y atributos.

-> Al crear un status icon es necesario crear en el programa un data object con el mismo nombre para linkearlos con la estructura icons-text, este data object contendrá el nombre del icono a mostrar.

-> Para crear un icono se usa la función ICON CREATE a la cual se le pasa el nombre y nos devuelve el icono que

-> Indicar el largo del icono mas el texto como atributo VIS LENGHT del status icon (DEF LENGHT = 132).

DATA: status_icon TYPE icons-text.

CALL FUNCTION 'ICON_CREATE' EXPORTING name = 'ICON_CHECKED' text = 'Cobro el sueldo' IMPORTING RESULT = status_icon EXCEPTIONS icon_not_found = 1 outputfield_too_short = 2 OTHERS = 3.

Group boxes -> Son frame que se ponen el la pantalla para agrupar visualmente los

elementos. -> Al marcar el atributo de OUTPUT FIELD se puede linkear el group box

con un data object, esto se puede usar para cambiar el titulo de este.-> Cuando todos los elementos dentro de un group box están invisibles este se

pone invisible también.

Input/Output Fields -> Un campo de input le permite al usuario ingresar datos-> Un campo de output muestra datos al usuario->Los campos de entrada tienen consistencia de datos dependiendo del tipo

de dato que sea.-> Si un campo esta relacionado con un dato del diccionario nos permite tener

consistencia de datos a través de foreign key o value set.

72

Page 73: Resumen ABAP - Certificate

-> Los campos de output al volverlos invisibles se ocultan, los campos de input vuelven invisible el contenido, muestran todo el contenido con asteriscos.

-> Para utilizar data object de un programa en una screen hay que definirlo con las sentencias DATA y TABLES.

La opción de GET_PARAMETERS nos permite traer de la memoria de sap los parametes id de los campos, estos parámetros son específicos de la sesión o del usuario. Se ejecuta en el PBO.

La opción de SET_PARAMETERS nos permite setear el parameter id de un campo en la memoria de SAP, estos parámetros son específicos de la sesión o del usuario. Se ejecuta en el PAI.

FIELD -> Nos permite para un campo realizar una operación única, se usa para chequear que los datos ingresados sean correctos en el PAI, en el caso de que halla un error se procesa nuevamente la pantalla sin procesar el PBO, se bloquean los campos que no tienen error y el cursor se para el campo con error. El mensaje de error o warning se muestra al pie de la pantalla.

PROCESS AFTER INPUT. ... FIELD <f1> MODULE check_input.

. module check_input input. message 'error' type 'E'.endmodule.

CHAIN... ENDCHAIN -> Nos permite encadenar sentencias FIELD para más de un campo a la vez, notar que el contenido de los campos no estará disponible hasta que se ejecute la sentencia FIELD y se validen los campos.

PROCESS AFTER INPUT. ... CHAIN. FIELD: <f1>,

..., <fn>,

MODULE check_input. ENDCHAIN.

. module check_input input. ... message 'error' type 'E'.endmodule.

Al momento de provocarse el error de validación en el o los campos se devuelve la pantalla al usuario sin haber ejecutado el PBO. El usuario corregirá los datos mal ingresados y cuando se quiera ejecutar el PAI se reanudara la ejecución desde la sentencia donde se produjo el error. Dependiendo del tipo de mensaje será obligatorio corregir el error o confirmando el mismo el programa seguirá.

Las validaciones se realizan por una sentencias MODULE donde se encontrara la lógica ABAP para la validación. El agregado de la sentencia ON INPUT hace que se ejecute el modulo cuando el contenido del campo cambia.

73

Page 74: Resumen ABAP - Certificate

El addition a la sentencia MODULE de ON REQUEST permite ejecutar el modulo si el usuario ingresa un valor nuevo al campo.

Se puede agregar al module el addition ON CHAIN-REQUEST que lo que permite es que se ejecute el modulo si y solo si se modifico alguno de los campos descriptos en la sentencia FIELD. También se le puede agregar ON CHAIN-INPUT que nos permite ejecutar el modulo cuando alguno de los campos encerrados en la sentencia CHAIN cambie.

Un module con el addition AT EXIT-COMMAND nos permite saltear todos los chequeos automáticos de los campo. Las function code que activan este tipo de modulo son los de tipo de function key ‘E’. Solo se puede usar este addition una sola vez por programa. Si no se termina el programa dentro de este module se ejecutaran inmediatamente después todos los chequeo automáticos y el resto del PAI.

Estructura de programa de dialogo

PBOModulo de status (primeras 3 líneas de la screen)Modulo de campos (modificación de atributos de

los campos en la pantalla)Modulo Clear_ok_code (limpiar el OK_CODE)

PAIModulo de exit (dependiente de la tecla que pulso si

es del tipo de function code ‘E’)Chequeos de campos (chain .. endchain )->

Disparan módulos de chequeosModulo de acción (grabar, modificar, pasar a otra

Pantalla, etc.)

Existen 2 funciones que nos permiten pedir confirmación de una accion a un usuario por una accion.

DATA answer type c. CALL FUNCTION 'POPUP_TO_CONFIRM_STEP' EXPORTING* DEFAULTOPTION = 'Y' textline1 = 'Salir de la pantalla?'* TEXTLINE2 = ' ' titel = ''* START_COLUMN = 25* START_ROW = 6* CANCEL_DISPLAY = 'X' IMPORTING answer = answer.

CALL FUNCTION 'POPUP_TO_CONFIRM_LOSS_OF_DATA' EXPORTING textline1 = 'Desea perder los datos?'* TEXTLINE2 = ' ' titel = ''* START_COLUMN = 25* START_ROW = 6* DEFAULTOPTION = 'N' IMPORTING answer = answer.

74

Page 75: Resumen ABAP - Certificate

Input Help -> Son métodos de ayuda para campos de pantallas, generalmente están definidos en el diccionario asociados a elementos de datos. Se pueden mostrar en 2 formatos, una lista desplegable o una pantalla se selección.

Radio Button ->Los selección de radio buttons es excluyente entre ellos. Para crear un grupo de radio buttons marcar todos estos e ir a la barra de herramientas EDIT->GROUP->RADIO BUTTON GROUP->DEFINE. De esta manera quedaran definidos. al asignar un function code, de esta manera se dispara el evento PAI.

Checkboxes -> Nos permiten seleccionar más de una opción. Declarando data elementos en la programa con el mismo nombre se pueden linkear estos con los de la pantalla. El tipo de datos de estos objetos es CHAR(1).

Pushbuttons -> Es un campo de entrada, que nos permite realizar una acción de la misma manera que una opción de menú o un botón de aplicación. Tienen asignado un fuction code que viajara al PAI por el OK_CODE al programa. Un botón puede contener text, iconos. Para cambiar el texto del botón es necesario cambiar el atributo OUTPUT FIELD en activo y declarar un data element con el mismo nombre. Igual que cualquier function key definida en el status un pushbutton puede ser de distinto tipo.

Capitulo 7Screen elements: subscreen and tabtrips

Una subscreen area es un area en una screen donde se coloca otra pantalla del tipo subscreen, la cual puede ser cambiada en tiempo de ejecución.Una subscreen puede contener más de una subscreen. Si la screen a colocar en el espacio de la subscreen es mas grande no se mostrara completa, el tamaño es fijo.Se puede definir que subscreen aparecerá dinámicamente en tiempo de ejecución.Si una screen se muestra en una area mas pequeña que esta se mostrara solo lo que entre empezando por arriba desde a izquierda, se puede setear el atributo SCROLLABLE que nos mostrara una barra para navegar por la subscreen.

Las subscreen tienen propiedades distintas a una screen normal, no tienen TITLEBAR, PF-STATUS, no se pueden usar las sentencias LEAVE SCREEN, SET SCREEN, no pueden tener campos OK_CODE.No se puede llamar una subscreen dentro de un ciclo LOOP o dentro de CHAIN… ENDCHAIN.No debe tener módulos AT EXIT-COMMAND.Los nombres de los objetos deben ser únicos en todas las screen.

Para ejecutar una subscreen se debe llamar en el PBO y el PAI de la screen contenedora, estas llamadas ejecutan el PBO y el PAI de la subscreen

PROCESS BEFORE OUTPUT. ... CALL SUBSCREEN subscreen_area1 INCLUDING sy-cprog '200'.

PROCESS AFTER INPUT. ... CALL SUBSCREEN subscreen_area1.

75

Page 76: Resumen ABAP - Certificate

Para especificar dinámicamente el numero de pantalla a mostrar se crea un data object global del tipo SY-DYNNR el cual contendrá el numero de screen a la que quiero ir.

Data dynnr typeData dynnr type sy-dynnr.dynnr = ‘200’.

PBOCALL SUBSCREEN subscreen_area1 INCLUDING sy-cprog dynnr.

A menos que la pantalla que queremos llamar este en el mismo module pool las variables globales no son accesibles. Para resolver esto se crea un function group que contenga esta pantalla, las variables a compartir y un 2 funciones para exportar e importar los datos.Importante: En la llamada al grupo de funciones se debe anteponer al nombre del function group SAPL…

PROCESS BEFORE OUTPUT. ... MODULE llenar_pantalla200. CALL SUBSCREEN subscreen_area1 INCLUDING 'SAPLZ_FG_PANTALLA' '0200'.

PROCESS AFTER INPUT. ... CALL SUBSCREEN subscreen_area1.

module llenar_pantalla200 output.

PERFORM inicializar_campos(saplz_fg_pantalla). o CALL FUNCTION 'LLENAR_CAMPOS' EXPORTING ex_nombre = 'roberto' ex_apellido = 'carlos'

endmodule.

Procedimiento dentro del function group.FORM inicializar_campos. nombre = 'patricio'. apellido = 'nicola'.ENDFORM.

Un TABSTRIP es un control que nos permite mostrarle al usuario en una sola pantalla diferentes solapas con distintos datos. Un tabstrip es un conjunto de page element. Un page element se compone de un titulo, una subscreen area y una subscreen. Técnicamente el titulo se maneja como un pushbutton es necesario ingresarles un nombre y un function code.

Declaration de TABSTRIPS

1. Crear el objeto en el screen painter2. Crear control en el programa principal

CONTROLS: tabstrip1 TYPE TABSTRIP.

TABSTRIP corresponde a aun estructura de tipo CXTAB_TABSTRIP, esta estructura esta definida en el TYPE POOL CXTAB. Esta estructura tiene.

76

Page 77: Resumen ABAP - Certificate

Al navegar entre las tab pages se ejecuta el function key de cada una de ellas. El tipo de function key marcara el comportamiento de la subscreen.

function type ‘ ’ -> Se ejecuta el PAI de la pantalla y la navegación por el control se realiza manualmente. Se ejecuta el PBO de los subscreen.

CASE ok_code. when 'TAB1' OR 'TAB2'. TABSTRIP1-ACTIVETAB = OK_CODE.

function type ‘P’ -> No se dispara el PAI de la pantalla principal, los datos en las subscreen son estaticos. La navegación es automatica.

En cada tab page se debe asignar una subscreen que debe ser ingresado en el atributo REFERENCE OBJECT del tabstrip.

Capitulo 8Table Controls

Table control -> Es un area en una pantalla para mostrar datos en forma tabular. Puede tener hasta 255 columnas, los datos de las columanas pueden ser campos imputables o checkbox. La particularidad es que nos permite modificar datos en la tabla y actualizar la DB

Creacion de un Table Control ->1. Crear en el screen painter el table control2. Ponerle nombre al control3. Declarar en el programa un data object del tipo TABLE VIEW

CONTROLS: tbc TYPE TABLEVIEW USING SCREEN '0100'.

4. Para asignar el table control con columnas es igual a colocar campos en una screen, los seleccionamos del diccionario y los arrastramos dentro del control, automáticamente se convertirán en las columnas

5. Para tener la opción se seleccionar una línea esta la opción W/selection Colum, hay que darle un campo para que guarda el valor de que la línea esta marcada, este campo debe estar en la estructura que usamos para la pantalla y debe ser char(1)

6. Código para manejar el table control.

TABLES: zpersonal.

77

Page 78: Resumen ABAP - Certificate

DATA: wa_per TYPE zpersonal, it_personal2 TYPE TABLE OF zpersonal.

CONTROLS: tbc TYPE TABLEVIEW USING SCREEN '0100'.

PBO MODULE llenar_it_table.

LOOP AT it_personal INTO wa_per WITH CONTROL tbc.

MODULE copiar_al_tc. ENDLOOP.

PAI LOOP AT it_personal. CHAIN. FIELD: spfli-connid, spfli-countryfr,

... spfli-distid,

spfli-fltype, spfli-period.

MODULE modificar_it_personal ON CHAIN-REQUEST .

ENDCHAIN. ENDLOOP.

MODULE llenar_it_table OUTPUT. SELECT * FROM zpersonal INTO

CORRESPONDING FIELDS OF TABLE it_personal.

DESCRIBE TABLE it_personal LINES tbc-lines.

ENDMODULE.

MODULE copiar_al_tc OUTPUT. MOVE-CORRESPONDING wa_per TO zpersonal.ENDMODULE.

MODULE modificar_it_personal INPUT. MOVE-CORRESPONDING spfli TO wa_per. MODIFY it_personal FROM wa_per

INDEX tbc-current_line.ENDMODULE.

El manejo del scrool del table control los maneja el sistema.

La estructura table control atributos que pueden ser modificados en tiempo de ejecución. Esta estructura tiene atributos para el table control, uno de estos es una tabla con todas las columnas. Los atributos de las columnas son iguales a la tabla SCREEN mas atributos adicionales.

MODULE modificar_tbc OUTPUT. DATA wa LIKE LINE OF tbc-cols.

78

Page 79: Resumen ABAP - Certificate

tbc-fixed_cols = 3. ... LOOP AT tbc-cols INTO wa. wa-screen-intensified = 1. ... MODIFY tbc-cols FROM wa. ENDLOOP.ENDMODULE. " modificar_tbc OUTPUT

Además de poder cambiar los atributos de la tabla a través del table control, los campos se encuentran en la tabla SCREEN como elementos de pantalla individuales.

El posible programar un ordenamiento en un table control.

data wa2 like line of tbc-cols.

READ TABLE tbc-cols WITH KEY selected = 'X' INTO wa2. IF sy-subrc = 0. SORT it_personal BY (wa2-screen-name+6). ENDIF.

Cuando se ejecute el PBO después de de presionar el botón ordenar habiendo seleccionado una columna se recargara el table control.El offset puedo en el ordenamiento es ya que el atributo name de la tabla screen contiene a que tabla pertenece y esta no concuerda con el nombre de la tabla interna.

Capitulo 9Context Menú

Un menú de contexto es un status gui especial, para crearlo hay que presionar sobre crear STATUS, ponerle nombre y el tipo es de CONTEXT MENU. Se puede asignar a campos de entrada, group box, table control o screen. Todo campo que este dentro de alguno de estos objetos (menos el campo de entrada) que no tengan menús de contexto asignados heredan de estos.

Nos llevara a una pantalla donde deberemos armar el árbol del menú de contexto, se puede poner submenús. A cada una de las opciones de le deben poner un function code a cada función final para después capturar en el programa.

Para asignar un menú de contexto a una screen en los atributos se le pone el nombre del menú de contexto en el campo ON_CTMENU_

Para capturar el click derecho del mouse es necesario crear un FORM.Para que aparezca en menú de contexto se usa el método

FORM on_ctmenu_cm_pantalla

79

Page 80: Resumen ABAP - Certificate

USING p_m TYPE REF TO cl_ctmenu.

CALL METHOD cl_ctmenu=>load_gui_status EXPORTING program = sy-cprog status = 'MC2'* DISABLE = menu = p_m EXCEPTIONS read_error = 1 OTHERS = 2.ENDFORM. "on_ctmenu_cm_pantalla

Herencia de context menú 1. El context menú de la pantalla hereda a todos los objetos de esta su context menú.

Se setea desde los atributos de la pantalla.2. Todo los objetos dentro de un group box heredan de este el context menú, si no

tiene hereda los de la pantalla.3. Se le puede asignar explícitamente context menú a los objetos

Table control Group box Input/output field, etc.

Se puede modificar en tiempo de ejecución el context menú, para esto el objeto que devuelve el método load_gui_status tiene los métodos. (pagina 9-9).

El valor de la opción seleccionada en el menú de contexto viaja al programa por el OK_CODE como si fuera cualquier botón en la pantalla.

Capitulo 10List in screen processing

Desde una pantalla se puede crear un listado básico que puede ser enviado directamente a la impresora con la sentencia NEW-PAGE PRINT ON PARAMETERS <print_param>. Los parámetros corresponden a los parámetros de impresión del usuario.

Para mostrar un listado básico por pantalla se usa la sentencia LEAVE TO LIST-PROCESSING, esta sentencia se ejecuta cuando termina de procesarse la pantalla que lo usa, es indistinto si es el PBO o PAI.La sentencia SET PF-STATUS SPACE. Invalida el pf-status de la pantalla y muestra el status Standard de SAP.

El listado se crea en una pantalla creada por el sistema, el número de pantalla es 120.

80

Page 81: Resumen ABAP - Certificate

Cuando de termina de procesar el listado básico se ejecuta el PBO de la pantalla que llama al listado básico, para evitar que se ejecute se utilizan el addition AND RETURN TO SCREEN <scr_nro>

LEAVE TO LIST-PROCESSINGAND RETURN TO SCREEN <scr_nro>

Para que el listado vaya a una salida de spool se usa la sentencia La sentencia SUPPRESS DIALOG. nos permite al generar un listado a través de una screen que no queremos mostrar.

Para mostrar un listado en una pantalla en forma modal se crea una screen la cual es llamada en forma

call screen 200 starting at 20 10 ending at 50 15

y en el PBO de la pantalla 200 se crea el listado anteponiendo las sentencias LEAVE TO LIST-PROCESSING para que muestre el listado y la sentencia

SUPPRESS DIALOG para no mostrar la pantalla.

Capitulo 13Programming database updates

Las actualizaciones a la base de datos se realizan a través de sentencias OPEN SQL, estas sentencias no dependen del tipo de base de datos que estamos utilizando, existe una interfaz en SAP que traduce las sentencias dependiendo de la Db que utilicemos.El conjunto de comandos de OPEN SQL contiene solamente operaciones de

manipulación de datos. Las operaciones de definición de datos no están contempladas.

Toda ejecución de sentencias OPEN SQL retornan su resultado en 2 variable de sistema SY-SUBRC (resultado de la Query ) y SY-DBCNT (cantidad de registros seleccionados, modificados o insertados)

Las sentencias OPEN SQL no realizan chequeos de autorización sobre las tablas.

Para acceder a datos de otro mandante de una tabla dependiente de mandante se utiliza el addition CLIENT SPECIFIED, esto nos permite especificar en que mandante queremos trabajar. Si no se especifica el addition se utiliza el mandante en el que el usuario esta logoneado.

SELECT nombre apellido INTO CORRESPONDING FIELDS OF TABLE it_per

FROM zpersonal AS a CLIENT SPECIFIED WHERE a~dni = '28.077.789' AND

a~mandt = '200'.

81

Page 82: Resumen ABAP - Certificate

Para insertar un registro en una tabla se utiliza la sentencia, los valores se deben ingresar en una work area y pararlo a la sentencia

INSERT INTO <dbtable> VALUES <wa>

Para insertar varios registros en una tabla se utiliza la sentencia, los registros se agrupan en una tabla interna y la actualización se realiza por nombres de campo.

INSERT INTO <dbtable> FROM TABLE <it>

Se pueden realizar actualizaciones en vistas de la DB, la operación se llevara a cabo satisfactoriamente solo si en atributo “read and change” de la vista esta activado en el diccionario.

En el caso de que un registro no pueda ser en la tabla se realiza un rollback de la operación y da error de runtime. Para evitar el error y que los registros que puedan ser insertados sean insertados en la tabla se utiliza el adition ACCEPTING DUPLICATES KEY igual el sy-subrc se setea en 4.

Para actualizar una tabla en la db se utiliza la sentencia, la actualización se realiza usando los nombres de los campos claves, la igualdad de las claves se realizan automáticamente y se modifican los campos que en la wa tienen datos. Para una modificación masiva pasa lo mismo

UPDATE <dbtable> FROM <wa>

UPDATE <dbtable> FROM TABLE <it>

Se pueden realizar actualizaciones en campos puntuales a campos con sentencias WHERE.

UPDATE <dbtable> SET <field> = <valor> ….WHERE <condition>

Se pueden realizar actualizaciones en vistas de la DB, la operacion se llevara a cabo satisfactoriamente solo si en atributo “read and change” de la vista esta activado en el diccionario.

En la sentencia WHERE se pueden realizar cálculos de campos

Las modificaciones a una tabla de la DB se realizan a través de la sentencia MODIFY. Consta de 2 partes: 1. Si el registro existe realiza un UPDATE

según los campos que se especifiquen 2. Si el registro no existe realiza un INSERT en

la tabla con la clave proporcionada

MODIFY <db> FROM <wa>MODIFY <db> FROM TABLE <it>

82

Page 83: Resumen ABAP - Certificate

Se pueden realizar modificaciones en vistas de la DB, la operacion se llevara a cabo satisfactoriamente solo si en atributo “read and change” de la vista esta activado en el diccionario.

Para borrar registros de una DB se utiliza la sentencia DELETE, es obligatorio poner una condición.

DELETE FROM <db> WHERE <campos_clave>DELETE FROM <db> WHERE <condicion>

DELETE FROM <db> FROM TABLE <it>

Para borrar una tabla entera se usan condiciones especificas.

DELETE FROM <db> CLIENT ESPECIFIC WHERE <campo> like ‘%’

Toda sentencia OPEN SQL puede terminar en forma anómala, la variable de sistema SY-SUBRC contiene el resultado de la ejecución, para realizar un ROLLBACK cuando sy-subrc EQ 4 se usa la sentencia

MESSAGE A…

Esta sentencia nos permite realizar el rollback y mostrar un mensaje al mismo tiempo y cancelar el programa

La sentencia ROLLBACK WORK nos permite volver atrás cambios en la DB sin cancelar el programa

Es posible ejecutar sentencias SQL nativo en ABAP, debe ser encerrado dentro de las sentencias EXEC ... ENDEXEC, dentro de estas sentencias se podrá ejecutar comandos SQL particulares de la DB, tener en cuenta que distintas DB tienen distinta sintaxis en sus sentencias SQL.

83

Page 84: Resumen ABAP - Certificate

Capitulo 15LUWs and Client/Server architecture

La LUW de sap es una unidad lógica de procesamiento con la DB, consta en una serie de cambios en la DB

La LUW mantiene el concepto de transacción en bases de datos, dentro de esta transacción se realizaran modificaciones en la DB y si todas las modificaciones se realizaron exitosamente se procederán a grabar en la DB, de lo contrario volverán para atrás las modificaciones realizadas.

La sentencia ROLLBACK WORK cancela el ciclo de modificaciones en la DB sin que alguna de estas cancelara.

La sentencia COMMIT WORK guarda los cambios en la DB que se realizaron hasta el momento. Todo rollback se realizara hasta el último punto de commit, sea implícito o explicito.

COMMIT implícitos -> Cuando de mientras una pantalla-> Cuando el sistema muestra un mensaje-> Cuando se llama a una función RFC-> Cuando se llama a una transacción o submite un programa

Capitulo 16SAP Locking concepts

Los lockeos de registros se utilizan para trabajar con datos sin que se sufran cambios en los mismos por otros procesos. Cada commit de la DB libera todos los bloqueos realizados en el entorno de la LUW

El addition FOR UPDATE en la sentencia SELECT SINGLE nos permite bloquear el registro para que podamos trabajar con los datos sin que estos sean modificados por otros procesos.

Las operaciones de lockeo entre entradas de distintas tablas se realzan desde el diccionario creando OBJETOS DE LOCKEO, estos objetos al ser llamados desde un programa lockean las estradas de las tablas para poder realizar las actualizaciones. Cuando se crea el objeto se debe ingresar la tabla a la que pertenecen los campos a lockear, si son varias tablas se debe ingresar los campos que relacionan estas tablas.

Al crear los objetos de lockeo se crean las funciones correspondientes para lockearlo y deslockearlo

CALL FUNCTION 'ENQUEUE_EZ_PERSONAL'CALL FUNCTION 'DEQUEUE_EZ_PERSONAL'

La interfaz de estas funciones contendrá los valores de los campos de las tablas que lockearemos o liberaremos

CALL FUNCTION 'ENQUEUE_EZ_PERSONAL' EXPORTING* MODE_ZPERSONAL = 'E'

84

Page 85: Resumen ABAP - Certificate

mandt = sy-mandt dni = pa_dni* X_DNI = ' '* _SCOPE = '2'* _WAIT = ' '* _COLLECT = ' ' EXCEPTIONS foreign_lock = 1 system_failure = 2 OTHERS = 3

Al ocurrir un error cuando queremos lockear un objeto nos mostrara un mensaje de error en la pantalla.Cuando se termina un programa se liberan todos los lockeos implícitamente.

Para liberar todos los objetos lockeados de una vez esta la función CALL FUNCTION 'DEQUEUE_ALL'.

El parámetro de cliente es opcional1. Si no esta -> el lockeo toma de la variable de sistema SY-MANDT y

ejecuta el lockeo para este mandante2. Si esta -> el lockeo se produce para ese mandante3. Si el parámetro es SPACE se aplica a todos los mandantes.

Ver parámetros adicionales en el manual (pagina 16-15) _SCOPE -> Este parámetro indica hasta que nivel se mantiene el lockeo.

Existen 3 tipos de lockeos

1. E -> Lockeo en forma exclusiva No pueden realizar cambios

Son acumulativos los lockeos, acepta lockeos simultáneos del tipo E y S2. X -> Lockeo en forma exclusiva

No pueden realizar cambiosNo son acumulativos los lockeos, rechaza otros tipos de lockeos simultáneos

3. S -> Lockeo compartido. Acepta lockeos simultáneos del tipo E y S.

Pasos de lockeo en un programa1. Lockear el objeto2. Si el lockeo es exitoso, leer la información3. Realizar el cambio de la data4. Liberar el objeto de lockeo

Capitulo 17Organizing database updates

Actualización DIRECTA -> Las actualizaciones se retrazaran al final del programa las instrucciones se ejecutaran al final del programa

85

Page 86: Resumen ABAP - Certificate

PERFORM <routine_name> ON COMMIT -> sentencia que me permite encolar rutinas de actualización en una DB en una tabla del sistema, todas las rutinas se irán encolando y se ejecutaran todas cuando se encuentre la sentencia COMMIT WORK. No tienen parametros

Los WP de update interactúan entre los WP de dialogo y la DB, el WPD le envía al requerimiento al WPU, cuando este lo recibe se libera el WPD para realizar otras operaciones

Al pasar el control de las actualizaciones al WPU el WPD termina. Para revisar como va la actualización se puede ver a través de la transacción SM13

En caso de un error el WPU marca en la tabla la sentencia de actualización que dio error y envía un mail al usuario que ejecuto la tarea utilizando el parámetro RDISP/VBMAIL o RDISP/VB_MAIL_USER_LIST. En caso de que la actualización se halla realizado con éxito el WPU borra la tabla log y se libera.

Las funciones que queremos que tengan esta funcionalidad de actualización deben ser creadas como modulo de actualización (MODULE UPDATE), estas funciones solo tienen parámetros de importing. Al llamar a la función se debe agregar el addition IN UPDATE TASK, esto hace que guarde en la tabla de log el requerimiento para luego ser ejecutados. La sentencia COMMIT WORK cierra la tabla de log y la pasa al WPU que es el que realizara la actualización.

Si estamos utilizando objetos de lockeo en una función de tipo UPDATE (parámetro _SCOPE = 2 ) no es necesario liberar los objetos al terminar la actualización el sistema los libera solos. En caso de error también el sistema los libera.

Actualizaciones Asincrónicas -> Las sentencias de actualización se irán almacenando en la tabla de log y cuando se encuentra con la sentencia COMMIT WORK se dispara la actualización en la DB, el programa de dialogo que disparo el commit sigue su curso.

Actualizaciones Sincrónicas -> Las sentencias de actualización se irán almacenando en la tabla de log y cuando se encuentra con la sentencia COMMIT WORK AND WAIT se dispara la actualización en la DB, el programa de dialogo espera a ala finalización de esta. El valor de finalización se guarda en la variable de sistema sy-subrc

Local Updates -> Las actualizaciones en forma local son ejecutadas por el mismo WP de dialogo que esta manejando la pantalla, no se delega la ejecución a un WP de UPDATE. Los requerimientos de actualización siguen siendo escritos en la tabla log y ejecutados con la sentencia COMMIT WORK. El programa espera a que se resuelvan todas las actualizaciones y sigue con el programa. La sentencia que activa las actualizaciones locales es

SET UPDATE TASK LOCALEsta sentencia sirve solo hasta el siguiente COMMIT WORK

La sentencia ROLLBACK WORK destruye la tabla de log de actualizaciones y vuelve para atrás todos los cambios realizados en la DB.

Dentro de las funciones no se puede usar el ROLLBACK WORK en caso de que de error una actualización de debe usar el mensaje de error del tipo A

86

Page 87: Resumen ABAP - Certificate

MESSAGE A....

Tipos de function module -> V1 -> Son ejecutadas en LUW independientes

-> Los módulos pueden ser re-arrancables o no re-arrancables en caso de un error en la

ejecución.-> Solo cuando un modulo V1 se ejecuta

satisfactoriamente se ejecuta un modulo V2.-> Se guardan los requerimientos

sincrónicos o asincrónicos en la tabla VBLOG. En local updates se guardan en memoria principal

-> V2 -> Siempre son re-arrancables.-> Collective run -> Se ejecuta solo tras la

ejecución de un programa colector RSM13005

-> Se guardan los requerimientos VBLOG siempre.

Capitulo 18Complex LUW Processing

Llamadas a programas -> existen 2 maneras de llamar a un programa dentro de un programa ABAP.

1. La llamada al programa interrumpe al programa llamador, se ejecuta el programa llamado y retorna al flujo de programa del programa llamador.

CALL FUNCTION CALL TRANSACTION SUBMIT PROGRAM <pgm> AND RETURN

2. La llamada al programa termina al programa llamador y ejecuta al programa llamado.

SUBMIT PROGRAM <pgm> LEAVE TO TRANSACTION

Ejecución de funciones en paralelo -> Se puede ejecutar funciones en forma paralela con el agregado de la sentencia STARTING NEW TASK <task_name>. Para obtener los datos que dejo la función se utiliza la sentencia RECEIVE RESULTS FROM FUNCTION <funct_name>.

La sentencia SUBMIT... WITH ejecuta un programa pasándole valores en la sentencia WITH para cada parámetro, si este tiene screens que mostrar se agrega la sentencia VIA SELECTION-SCREEN, si no esta sentencia la pantalla no se ejecuta.

SUBMIT z_selection_screen AND RETURN VIA SELECTION-SCREEN WITH pa_dni EQ '00.000.000'

87

Page 88: Resumen ABAP - Certificate

WITH pa_lname EQ 'alberto' WITH pa_name EQ 'david' WITH pa_sname EQ 'lopez' WITH pa_sueld EQ '1000' WITH pa_tipo EQ 'E'.

SUBMIT z_selection_screen AND RETURN VIA SELECTION-SCREEN USING SELECTION-SET 'VARIANTE1'.

Tipo de llamada a programas (ver grafico 18-20 )-> call function -> se ejecuta dentro deLUW que el programa que

los llama. Todas las actializaciones se realizaran al encontrar un commit.

-> submit and return Call transaction Submit Leave to transaction -> se ejecutan en LUW distintas al del programa que las llama.

Si se usa submit and return o call transaction la LUW del programa llamador se reanuda cuando la LUW del la transacción este completa. De manera que se pueden crear procesos de actualización anidadas independientes.

Al correr independientemente pueden pasar 2 cosas:1. Cada una debe tener su propio COMMIT2. Las 2 estarán modificando la base de datos al mismo tiempo.

-> submit Leave to transaction -> Terminan la LUW del programa

llamador, si este no realizo el commit la tabla log no esta completa y no se ejecutaran las actualizaciones.

Capitulo 19Number Assignment

La asignación de números puede ser interna o externa. La asignación de números interna es cuando usuario ingresa el número y se chequea para saber si cabe dentro del intervalo asignado para ese tipo de dato. La asignación interna de número pasa cuando el sistema asigna automáticamente el siguiente numero disponible.

La transacción SNRO nos permite mantener los rangos de numero.

Los rangos de números pueden ser numéricos o alfanuméricos. Múltiples rangos de números pueden ser asignados a un objeto.

Para pedir números al sistema se usa la sentencia88

Page 89: Resumen ABAP - Certificate

CALL FUNCTION 'NUMBER_GET_NEXT' EXPORTING nr_range_nr = object =* QUANTITY = '1'* SUBOBJECT = ' '* TOYEAR = '0000'* IGNORE_BUFFER = ' '* IMPORTING* NUMBER =* QUANTITY =* RETURNCODE = EXCEPTIONS INTERVAL_NOT_FOUND = 1 NUMBER_RANGE_NOT_INTERN = 2 OBJECT_NOT_FOUND = 3 QUANTITY_IS_0 = 4 QUANTITY_IS_NOT_1 = 5 INTERVAL_OVERFLOW = 6 BUFFER_OVERFLOW = 7 OTHERS = 8

En el caso de de llenar el parámetro QUANTITY pidiendo mas de un numero el parámetro NUMBER nos devolverá el ultimo numero asignado y en el

parámetro QUANTITY la cantidad de números asignados. Para calcular el resto de los números va de (NUMBER – QUANTITY + 1) a NUMBER.

La tabla NRIV guarda todos los rangos de números para los objetos. La cuando la funcion NUMBER_GET_NEXT pide un numero a la tabla

loquea el registro esperando a que termine la LUW del programa que pide el numero, recién ahí responde a otras peticiones de números (utiliza para la bloquear el registro SELECT SINGLE... FOR UPDATE)

La función NUMBER_CHECK chequea si el numero ingresado esta dentro del rango de números especificado para ese objeto. NO reserva el número.La variable returncode devuelve ‘X’ si el numero esta fuera del rango, ‘ ‘ si esta dentro del

rango.

CALL FUNCTION 'NUMBER_CHECK' EXPORTING nr_range_nr = number = object = subobject = ' ' toyear = '0000' numeric_check = ' ' IMPORTING returncode = exceptions interval_not_found = 1 number_range_not_extern = 2 object_not_found = 3 OTHERS = 4.

Para obtener información sobre el numero que se esta ingresando se utiliza la función NUMBER_GET_INFO. La estructura que devuelve tiene la estructura de NRIV que contiene todos atributos del número para ese objeto.

CALL FUNCTION 'NUMBER_GET_INFO' EXPORTING nr_range_nr =

89

Page 90: Resumen ABAP - Certificate

object = subobject = ' ' toyear = '0000' IMPORTING interval = exceptions interval_not_found = 1 object_not_found = 2 OTHERS = 3

La tabla NRIV que contiene en cada línea un rango de números, esta tabla generalmente esta en el buffer del application server para optimizar el acceso.

Capitulo 20Change Document

Para logear cambios en una tabla de aplicación usando change document es necesario actualizar la tabla de aplicación y actualizar la tabla de change document.Para logear los datos se debe pasar al modulo de actualización los datos del registro antes del

cambio, el registro cambiado y datos administrativos (usuario, fecha, hora, nombre de la transacción, etc.)

Para logear cambios usando change document es necesario crear el objeto change document en el sistema, también se debe incluir las correspondientes tablas.El sistema crea los correspondientes módulos de funciones como también 2 includes con

definición de datos.Estos 2 includes contienen programas que permiten grabar los datos en la tabla de change

document. Los change document se guardan en la tabla CDCLS.

Para crear un change document se utiliza la transacción SCDO. Por cada definición el sistema genera los correspondientes módulos de funciones. Se crean estructuras en el diccionario para la operación de logeo.

Uso de chage document

******* modulos de funciones y definición de datos *******INCLUDE fz_zdnicdt.INCLUDE fz_zdnicdc.

DATA wa TYPE zpersonal.

START-OF-SELECTION.******* seleccion de datos de la DB ********************** SELECT SINGLE * FROM zpersonal

INTO CORRESPONDING FIELDS OF xzpersonal WHERE dni = '00.000.000'.

90

Page 91: Resumen ABAP - Certificate

******* copia de registro nuevo a registro viejo ********* MOVE-CORRESPONDING xzpersonal TO yzpersonal.

******* modificamos la wa ******************************** xzpersonal-snombre = 'carlos'.

******* comletamos los parametros de la funcion ********** MOVE : 'ZDNI' TO objectid, sy-tcode TO tcode, sy-uzeit TO utime, sy-datum TO udate, sy-uname TO username. upd_icdtxt_z_zdni = 'U'. upd_zpersonal = 'U'.

******* modificamos la tabla de la db ******************** MODIFY zpersonal FROM xzpersonal.

******* agregamos el cambio a la change document table *** PERFORM cd_call_z_zdni.

COMMIT WORK.

Para ver el chage document se utiliza el programa RSSCD100 el cual nos muestra para el objeto específico todas las modificaciones que sufrió.

91

Page 92: Resumen ABAP - Certificate

TAW12 3/3ABAP Workbench Concept

Transacción DescripciónSPRO Transacción de customizingSE43 Mantenimiento de MenúsSHD0 Creación de variantes de transacciónLSMW Herramienta de carga inicialCMOD Modificación de elementos del usuarioSMOD Modificación de elementos de SAPSNRO Manejo de rangos de númerosFIBF Administración de BTESE18 Visor de definiciones de BADIsSE19 Implementación de BADIsSPDD Modificaciones al DiccionarioPFCG Creación y mantenimiento de rolesSE95 Modification browserSPAU Modificaciones al repositorioSNOTES Notes assistant

Toda modificación hecha al standard de SAP a través de estas herramientas no modifican el standard, las modificaciones se guardan en lo que se llama es CUSTOMER NAME SPACE, este es un espacio reservado para el usuario para crear sus modificaciones. Las actualizaciones del sistema hechas por SAP no afectan a las modificaciones que nosotros hallamos hecho siempre y cuando se realicen con las herramientas apropiadas.

92

Page 93: Resumen ABAP - Certificate

Capitulo 3Changing SAP Standard.

Herramientas -> Business Engineer -> Customizing y personalization utilizan esta

herramienta.-> ABAP Workbench -> customer development, enhancement and

modification utilizan esta herramienta.

Tipos de modificaciones Personalization -> Transaction VariantModification -> Modification Assistant

User exitsEnhancement -> Abap Dictionary -> Tables

Data element-> Customer exit -> Function module

-> Menu Exit -> Screen Exit

-> Business transaction events (BTE solo para FI)

-> Business Add-ins (BADIs)

Customizing -> Modificaciones de procesos y funciones en el sistema acorde a guías de implementación (IMG).

Personalization -> Atributos globales -> SET/GET parameters-> Variantes de transacción.-> Parámetros de table

controls.-> Menús personalizados -> Menús basados en roles

-> Favoritos -> Accesos directos en el

menú.

Modification -> Cambios en el repositorio de SAP hechos por en cliente. En el caso de que SAP modifique un objeto en el repositorio estas modificaciones deben ser realizadas por el cliente para poder reflejar los cambios. Este procedimiento se realiza con la herramienta MODIFICATION ASSISTANT.

Enhancement -> El concepto de enhancement implica llamadas en programas standard SAP a funciones que no fueron implementadas y que se dejan al usuario para que implemente. Existen distintos tipos de enhancement:

In ABAP concept -> function module exitOn GUI -> Menu exitOn screen (subscreen) -> screen exits

93

Page 94: Resumen ABAP - Certificate

On screen (fields) -> fields exitsIn ABAP dictionary -> Table enhancement

Table enhancement -> SAP provee 2 tipos de ampliación en tablas, ninguna de estas ampliaciones modifican el standard.

APPEND -> Solo puede estar en una sola tabla(Estructuras) -> Una tabla puede tener mas de una estructura append

INCLUDE -> Se pueden usar en mas de una (customizing includes) tabla

-> Los campos de la tabla son referencias a una estructura externa

Program Enhancement -> Consta de 3 técnicas para realizar ampliaciones a programas standard

Customer Exits -> Es un modulo de funciones especial que son llamados desde programas SAP.

Business Transaction eventsBusinnes add-ins

Menu enhancement ->Nos permite agregar funciones al menú de un programa. Existen 2 técnicas customer exits y business add-ins.

Screen enhancement -> Son subscreen en las pantallas de SAP que nos permiten agregar campos, controles, etc. Desde la versión SAP WAS 6.2 solo se pueden usar business add-ins.

Modification -> Toda modificación a objetos de SAP se llaman modificaciones, estas modificaciones pueden llevar a inconvenientes al momento de una actualización del sistema ya que deberá decidir que objeto actualizar para no perder los cambios realizados. Para realizar esta tarea de modificación esta la herramienta MODIFICATION ASSISTANT.

Customer Development -> Creación en el repositorio de objetos independientes. Caen en el customer name space.

Objetos en el sistema -> Originales -> Un objeto es original solo en el sistema en el que se creo. Para los objetos SAP el

sistema original es SAP, para los objetos del cliente es el sistema de desarrollo.

-> Copia -> Los objetos son transportados de sistema en sistema, el objeto es copiado de

un sistema en otro.

Ordenes de transporte

Correction Repair

94

Page 95: Resumen ABAP - Certificate

Sistema Sistema 2 Sistema 3Original

Cambios de un objeto original SAP se llama CORRECTIONCambios a un objeto copia se llama REPAIR (custom object)Reparación de un objeto SAP se llama MODIFICATION

Después de un upgrade del SAP se deben comparar los objetos nuevos con los que fueron modificados para no perder los cambios y modificar los nuevos.Desde la versión 4.5 se utiliza la herramienta MODIFICATION ASSISTANT.

Capitulo 4Personalization

Creación de Roles -> Los roles nos permiten estandarizar la configuración de usuario basándonos en el tipo de usuario y su actividad. La creación y mantenimiento de roles se realiza desde la transacción PFCG.

En la transacción SE43 se puede crear un menú de transacciones para un usuario, este menú es una transacción la cual se ejecuta y nos muestra en la parte derecha un árbol de transacciones con todas las transacciones creadas.

Una variante de transacción en un conjunto de variantes de pantalla, para crearlos se utiliza la transacción SHD0, se debe poner el nombre de la transacción a la cual queremos asociar esta variante, para crear la variante se ejecuta la transacción y en cada pantalla se modifican los atributos de los objetos correspondientes a esta. Cuando se termina de ejecutar la transacción ya la variante esta creada, a cada variante de pantalla se le debe poner un nombre, una descripción y el cliente si es una variante de transacción client-specific. Para poder ejecutar la variante es necesario crear una transacción ya que la variante no es

una transacción. El tipo de transacción a crear en la VARIANT TRANSACTION. Cuando se crea la transacción es necesaria crearla CROSS-CLIENT para que pueda ser ejecutable por todo el entorno.

La opción GUIXT nos permite diseñar pantallas de manera más flexible, esta herramienta usa un lenguaje script.

95

Page 96: Resumen ABAP - Certificate

Capitulo 5Table enhancement

Append Structure -> Estructura que se puede agregar a una tabla para agregar campos a esta, esta estructura se puede agregar solo a una tabla. Cuando una tabla con estructuras append es copiada la tabla destino tiene estos campos como propios y no como una estructura agregada

Notas Importantes -> Las tablas POOL y CLUSTER no pueden tener

append structure, solo tablas transparentes.-> Las tablas transparente que tienen como ultimo campo son

del tipo LCHAR o LRAW no se puede agregar un append structure-> Los campos de una estructura append deben empezar con

las letras ZZ o YY.

Include structure -> Las estructuras include son estructuras que pueden estar compartidas en mas de una tabla. Algunas tablas de standard se le pueden agregar estructuras, solo a las que ya la tienen definidas. No se puede crear un include en tablas que no tengas esta include ya definido. El nombre standard de la estructura empieza con CI_xxx.

Text Element -> Se pueden cambiar las descripciones que traen los elementos de datos por unos que quiere el usuario, para esto se usa la transacción CMOD. Las modificaciones de texto y documentación no son partes de un proyecto de ampliación, se entra por la CMOD pero se acceden por la barra de herramientas GOTO->TEXT ENHANCEMENT.Las modificaciones que se pueden hacer a un text element varían entre KEYWORD

(descripción del campo) y DATA ELEMENT ( agregar documentación al data element).Toda modificación de un text element impactara en forma global en el sistemaPara que los campos en una pantalla tomen los cambios cuando modificamos el text

element se debe setear el atributo modif. En el screen painter.Las modificaciones en keyword deben ser vueltos a aplicar luego de una

actualización de la versión de SAP.

Por la transacción SE95 se pueden ver todas las modificaciones que se realizaron en el sistema, se pueden activar o desactivar cada una por separado.

Capitulo 6

96

Page 97: Resumen ABAP - Certificate

Enhancement

User Exits -> Son FORMs metidos en los programas standard de SAP que están declarados pero no creados, para usarlo es necesario crearlo y meterle código propio a este form.

Customer Exits -> Se basa en proyectos de ampliación, no solo de programas, también de menús y pantallas. Con la transacción CMOD se pueden administrar los proyectos de ampliación.

En los programas Standard de SAP contiene llamadas funciones, estas funciones se utilizan para ampliar la funcionalidad de los programas Standard, estas funciones están contenidas en módulos de funciones, y estos módulos en grupos de funciones

Nomenclaturas standard -> Grupo de funciones -> X…-> Modulo de funciones -> EXIT_<pgm_name>_xxx

Los módulos de funciones tienen definidas una interfaz de parámetros para usar en la función, no se puede modificar esta interfaz de parámetros para agregarle más. La convención para módulos de funciones es EXIT_<pgm_name>_xxx.

Se invoca con la sentencia

CALL CUSTOMER-FUNCTION ‘xxx’

El numero de la función es el numero del modulo de funciones

La modificación de una función se hace a través del include que contiene, el include que contiene tiene la siguiente nomenclatura ZX…, para declarar data elements en la función, el modulo de funciones tiene includes para declararlos. Es necesario activarlo y luego activar el proyecto.

Estructura del function group -> Los grupos de funciones de ampliación contienen includes de la forma LX o ZX, los LX son código de SAP, los ZX son código nuestro, solo estos incluyes podemos modificar ya que caen en el customer name space.El include del tipo LXaaaTAP guarda las variables del globales declaradas por SAP, el

incluye LXaaaTOP contiene las variables nuestras.Los includes de la forma ZXaaaUnn contiene el código fuente de las funciones de

ampliación. En este incluye es solo para funciones, no es posible insertar código de subrutinas (FORM), módulos (modules) o eventos. La declaración de variables en este

include son solo locales para los módulos de funciones.Los includes de la forma ZXaaaFnn o ZXaaaOnn o ZXaaaInn o ZXaaaEnn guardan los

módulos, eventos y funciones del usuario.

Menú Exits -> funciones de menú agregados al menú standard. Los menú exits están programados en la pantalla standard de SAP, lo único que necesitamos es activarlo para que aparezca, y en el código standard que atrapa el OK_CODE de este menú esta la función que debemos programar adentro para agregarle funcionalidad, el OK_CODE de este menú empiezan con +. El menú exit viene junto con un modulo de funciones que implementara el funcionamiento.

97

Page 98: Resumen ABAP - Certificate

Screen Exits -> En algunas de las pantallas de SAP standard existen subscreen escondidas en donde podemos poner screens propias con campos o controles que queramos. En el programa standard existe una llamada en el PBO y PAI la sentencia.

PBOCALL CUSTOMER-SCREEN xxx

INCLUDING <funct_group> <scr_num>PAICALL CUSTOMER-SCREEN xxx

Cuando encontrados el screen exit nos fijamos a que ampliación pertenece y creamos un proyecto para esa ampliación, esta ampliación contendrá 2 componentes, uno será la screen que debemos crear (con formato SUBSCREEN ) y customer exit donde podremos pasar datos la screen a nuestra subscreen, es necesario en la función crear un data object (tables) para poder ligar la función con la screen y asignarle a esta la estructura que nos pasa por parámetro la función (siempre dentro del include, para declarar el data object el modulo de funciones trae un TOP include para nosotros)

Para asignarle una screen a la subscreen que deseamos en tiempo de ejecución se usa la sentencia

PBOCALL SUBSCREEN <scr_conteiner>

INCLUDING <pgm_name> <scr_nro>PAICALL SUBSCREEN <scr_conteiner>

Observaciones -> No pueden tener nombre la subscreen-> No esta permitido definir status GUI-> La subscreen no puede tener definido el atributo next screen

Para trasferir datos entre el programa principal y la subscreen la ampliación dispone módulos de funciones en el PBO y PAI para trasferir los datos.

El nombre técnico de la screen exit tiene el nombre del programa que lo llama, 4 números que es el nombre de la screen más el nombre de la subscreen area.

Capitulo 7Business Transaction Events

BTE (business Transaction Event) -> Herramienta solo para FIEn una herramienta que nos permite comunicarnos con sistemas SAP y no SAP exteriores. Se pueden realizar muchas implementaciones para cada BTE, cuando se ejecuta la BTE se llaman a todas las implementaciones de esta, corren en forma secuencial y no en paralelo sin orden especifico.Estas implementaciones se guardan en una tabla interna la cual es loopeada ejecutando cada una de ellas. La ejecución de cada implementación no estorba a la otra.Las BTE tienen una interfaz ya definida y todas las implementaciones se deben ceñir a esta.

98

Page 99: Resumen ABAP - Certificate

En la implementación NO se puede utilizar la sentencia COMMIT WORK.

Existen 2 tipos de BTE -> public & subscribeLa comunicación es saliente únicamente, el sistema avisa que un evento ocurrió y delega la operación. No retorna nada al sistema, el flujo de datos es unidireccional.

-> Process interfaseLa comunicación es vi direccional, se envía la petición y se espera por la respuesta del otro sistema.

Las funciones tienen la nomenclatura

OPEN_FI_PERFORM_<ev_number>OUTBOUND_CALL_<ev_number>

La transacción FIBF nos permite ver todos los eventos con sus implementaciones. Consta transacción se crean “productos”, este producto agrupa un conjunto de ampliaciones. La activación o desactivación se realiza a nivel de producto.Las BTE son client-specified, esto quiere decir que el mismo evento puede ser reutilizado por distintos clientes.Estas ampliaciones en los programas son solo para código, no se pueden agregar pantallas ni menús.

Diferencias entre CUSTOMER EXIT y BTE

CUSTOMER EXIT

BTE

Source code + +Menus + -Screens + -Tables + -Administration level + -Reusable - +Client-specific - +Filter-specific - +

Las BTE's, o Business Transaction Events son un tipo de extensión del sistema SAP. A diferencia de las BADI's, únicamente se puede modificar código con las BTE's; no es posible modificar dynpros o menúes.

99

Page 100: Resumen ABAP - Certificate

Las BTE's están basadas en Módulos de Funciones y Productos, a diferencia de las BADI's que están basadas en objetos.Al implementar una BTE, se debe crear una interfase para el módulo de funciones de la BTE. De esta manera, el sistema leé una tabla Z y llama dinámicamente la función implementada por el cliente.Existe 2 tipos de interfases:- Interfases de Publicación y Suscripción- Interfases de Proceso

Las interfases de Publicación y Suscripción brindan información sobre eventos en particular, como la creación o la modificación de un documento. Por otro lado, las interfases de proceso se utilizan para reemplazar la lógica estándar de SAP por lógica de cliente.

En este link vas a encontrar más información acercar de las BTE's y todo lo relacionado con la programación ABAP:

Business Transaction Events - BTE's

Capitulo 8Business ADD-ins

BADIs -> Tipo de ampliación implementada en Objetos.Una BADI es una llamada en el código standard de SAP a métodos que no están implementados. Cuando se crea una implementación de una BADI se crea la interfaz del método y la clase que lo va a implementar.

Existen 3 tipos de BADIs -> Ampliación de programa -> Ampliación de menú -> Ampliación de pantalla

Pasos para utilizar una BADI Declarar una variable

Data : r_var type ref to ZIF_EX_PRUEBA, Llamar al método

CALL METHOD cl_exithandler=>get_instance pasándole como parámetro la variable declarada. Llamar al método de la interfaz

CALL METHOD r_var->metodo

Definición de una BADI

Entrar con la transacción SE18 ingresamos el nombre a la BADI y seteamos sus atributos

La BADI crea una clase con el siguiente formato‘Z’ -> prefijo‘CL_’ -> indica de que es una clase‘EX_’ -> indica que la clase es de exit<badi_name> -> nombre de la badi sin

100

Page 101: Resumen ABAP - Certificate

Prefijo

ZCL_EX_<badi_name>

En la solapa INTERFACE se crea la interfaz con los métodos que serán implementados, la nomenclatura de la clase es

‘Z’ -> prefijo‘IF_’ -> indica de que es una clase‘EX_’ -> indica que la clase es de exit<badi_name> -> nombre de la badi sin

Prefijo

ZIF_EX_<badi_name>

Se definen los métodos y sus atributos. Si la BADI es filter-dependent se debe definir un parámetro extra en todos los métodos FLT_VAL

Entrar con la transacción SE19, colocamos el nombre a la implementación, seleccionamos la badi que queremos implementar

En la solapa INTERFACE se crea la clase con los métodos que para implementados, la nomenclatura de la clase es ZIF_IM_<badi_name>

Haciendo doble clic sobre el método se abrirá el editor de ABAP donde deberemos implementar el método.

En la definición el atributo MULTIPLE USE indica que pueden existir múltiples clases de implementación. Las ampliación del tipo pantalla o menú NO pueden tener múltiples implementaciones.

Las ampliaciones de menú con BADIs se aplican igual que las ampliaciones con customers exits, en el STATUS GUI de la pantalla debe estar declarado el function code con el formato ‘+<exit>’, y en el programa en la captura del OK_CODE debe estar contemplado la llamada al método de la interfaz de la BADI.

Solo se puede activar la implementación de una BADI desde el sistema original y luego transportar la activación al resto de los sistemas.

Las ampliaciones de pantalla con BADIs mantienen el mismo principio de customer exit, se prepara un screen conteiner a la cual se le asignaran subscreen dinámicamente.La comunicación entre la screen principal y la subscreen no se realiza en forma directa sino que se maneja a través de una clase BADI.Si una BADI contiene más de una ampliación de pantalla no puede tener marcado el atributo de REUSABLE

Cuando no haya implementación activa para una BADI se puede crear una implementación por default, en la definición ir a GOTO -> DEFAULT CODE.

La maquina virtual de ABAP no puede contener pantallas, solo los programas del tipo 1, F o M. Cuando se crea una BADI de ampliación de pantalla se tiene en el programa el contenedor para la screen, el problema es que el programa y la screen no se comunican directamente, se deben crear métodos para la comunicación entre estos.

101

Page 102: Resumen ABAP - Certificate

Las BADI's (Business ADd Ins) son un nuevo tipo de extensión al sistema SAP basado en ABAP Objetcs. El objetivo de los mismos es cumplir con los requerimientos del cliente permitiendo agregar nuevas funcionalidades dentro del código estándar de SAP.De la misma manera que con los User Exit's, las BADI's tienen dos vistas: la de definición y la de implementación. Mediante la transacción SE18 accedemos a la Definición de las BADI's. Allí se puede ver las características de la misma: parámetros de entrada, salida, tipo de BADI, etc. En la Implementación de la BADI, a la que se accede mediante la transacción SE19, se pueden ver todas las implementaciones que existan de una BADI determinada.

La definición de las BADI's viene definida en el sistema estándar (muy pocas veces es necesario crear una nueva definición para una BADI). En la definición se indica si la BADI es de implementación simple (se puede utilizar sólo una vez, como los User Exits) o múltiple (pueden existir varias implementaciones activas de la misma BADI en el mismo sistema). Además, se pueden definir filtros para la ejecución de la misma permitiendo de esta forma tener diferentes procesos para, por ejemplo, países diferentes. Esto le permite a SAP poder utilizar las BADI's para realizar localizaciones del sistema; por eso es que el sistema estándar ya incluye varias implementaciones de BADI's.

Mediante las implementaciones de BADI's también se pueden hacer aplicaciones para negocios específicos (papeleras, petroleras, químicas, etc). Esto hace que las BADI's sean muy útiles. Esto es así porque a diferencia de los User Exits las BADI's poseen una arquitectura Multicapa (SAP, partners, soluciones de clientes, localizaciones, soluciones específicas para industrias, etc); los User Exits son doble capa únicamente (SAP y soluciones de cliente).

En www.todoabap.com.ar van a encontrar métodos para encontrar las BADI's de una transacción o programa.

Capitulo 9Modifications

Un objeto es original en un solo sistema, en el sistema de creación, en el resto son copias. Esta regla aplica para objetos de SAP (sistema origen SAP) y los objetos propios del cliente.

Los objetos creados por el usuario tienen origen en el sistema de desarrollo y al ser creados se le asigna una orden de cambio del tipo DEVELOPMENT/CORRECTION. Esta orden asegura que el objeto será enviado a los subsecuentes sistemas.

El cambio de objetos originales se denomina CORRECTIONS y se le asigna a una orden de cambio del tipo DEVELOPMENT/CORRECTION. En el caso de que se realicen cambios a un objeto “copia” se denomina MODIFICATION y se asigna a una orden de cambio del tipo REPAIR.

Al modificar un objeto SAP se debe pedir autorización.Objetos que están exentos de esta autorización

-> Matchcode-> Database index -> Buffer settings-> Customer objects-> Objetos de Customizing

102

Page 103: Resumen ABAP - Certificate

La petición de autorización se realiza a través del OSS que necesitara el PGMID, el tipo de objeto OBJ y el nombre del mismo. De esta

manera generara un número de autorización para ese objeto. La petición para modificar un objeto es única, una vez “liberado” las siguientes modificaciones son libres.

Al modificar el objeto el sistema pedirá asignarle una orden de cambio del tipo REPAIR. Este tipo de orden tiene las siguientes funciones

-> Change Lock -> Luego de asignar la tarea, solo el owner de esta puede modificarla.

-> Import Lock -> El objeto no podrá ser sobre escrito en caso de un update.

-> Version Creation -> El sistema crea una copia del objeto original y guarda las diferencias

del viejo objeto y el nuevo en la DB.

Cualquier modificación a tablas pertenecientes a BASIS COMPONENTS se pierden al momento de un upgrade del sistema.

La herramienta de MODIFICATION ASSISTANT nos permiten realizar modificaciones en forma ordenada. Lleva registro de cada modificación y permite volver atrás las modificaciones hechas. Para que la herramienta este disponible se debe activar en el application server la variable de sistema EU/CONTROLLED_MODIFICATION.La herramienta permite ver un registro de todas las modificaciones que se realización

en el sistema separados por el tipo de modificación realizada.

User exits se crearon principalmente para SD, son consideradas MODIFICATION. Tienen una nomenclatura especial, USEREXIT_<name>. Utilizan variables globales y son almacenados en includes especiales. Cuando SAP agrega un nuevo user exit este se guarda en un nuevo include.Son funciones ya creadas vacías a las cuales debemos poner nuestra lógica. Para

utilizar user exist se debe activar el parámetro ABAP/FIELDEXIT. No solo existen actualizaciones para R/3, SAP periódicamente manda correcciones al

sistema llamadas NOTES. Estas modificaciones se implementan utilizando la transacción SNOTE.Un conjunto de NOTES se denominan SUPPORT PACKAGE, funcionan como una

actualización conjunta y en un orden especifico.Las notas o support package se implementan a través del note assistant (SNOTE) pero es

posible aplicarlas en forma manual a través del programa SCWN_REGISTER_NOTES.

Luego una actualización es necesario volver a customizar algunas opciones que la actualización modifica, para esto están las herramientas SPDD (Modificación de diccionario) y SPAU (Objetos del repositorio).

SPDD -> Esta transacción nos acomodar nuestros objetos modificados a los nuevos que SAP instalo en la actualización, esta transacción se ocupa de los objetos del diccionario (Domains, Data elements y tables).

Todo ajuste luego de una modificación se debe transportar a los subsiguientes sistemas para esto hay 2 tipos de ordenes de trasporte.

SPDD adjustment

103

Page 104: Resumen ABAP - Certificate

SPAU adjustment

Cuando se transportan a otro sistema estos ajustes se almacenan, para decidir cual se quiere implementar a esta fase se la llama ADJUSTCHK.

Para evitar conflictos con los nombres entre los objetos del cliente y los de SAP se utiliza una nomenclatura especial para diferenciarlos, pero entre los distintos objetos también, esta nomenclatura se guarda en una vista del sistema V_TRESN.

Validaciones y substituciones

Las validaciones y sustituciones son eventos que se dispara en caso de crear o modificar documentos de FI. (Únicamente FI).

104

Page 105: Resumen ABAP - Certificate

Los programas que contienen los FORM son: RGGBS000 → Sustitución RGGBR000 → Validación

Estos programas son estándar y no pueden ser modificados. SAP recomienda que estos sean copiados a otro y modificados. Para decirle a SAP en que programa buscar los form se debe modificar la tabla T80D que es la que tiene customizados los programas estándar.

Validaciones

Las validaciones se utilizan para chequear valores ingresados en documentos.Para agregar una validación se modifica el programa ZRGGBR000 a la estructura exit una línea con nuestra validación.

exits-name = 'U990'. → nombre del exitexits-param = c_exit_param_none. → interfaz del exit exits-title = text-104. → descripción del exitAPPEND exits.

El código de la validación se debe se pone en el mismo programa (ZRGGBR000).

FORM u990 USING bool_data TYPE gb002_015....

ENDFORM.

Tipo de interfaz

Existen 2 tipos de interfaz para los exit de validación.

→ C_EXIT_PARAM_NONE → Sin parámetros excepto B_RESULT

105

Page 106: Resumen ABAP - Certificate

La variable B_RESULT puede devolver TRUE o FALSE que indica el resultado de la validación.

→ C_EXIT_PARAM_CLASS → El parámetro es la estructura BOOL_DATA. Esta estructura contiene la cabecera y las posiciones del documento.

Customizing de validaciones

Para customizar una validación se ingresa a la transacción GGB0. Ahí encontraremos, los distintos módulos en donde crear la validación dentro de FI.

Para crear una validación debemos pararnos el modulo que queremos y decidir si se ejecutar cuando se modifica o crea una cabecera, por posición o por documento completo.

Dentro de las validaciones se crean pasos que son los encargados de ejecutar nuestro FORM de validación.

Para que se ejecute un paso de validación este debe cumplir con la condición ingresada en la solapa “Condición”.

106

Page 107: Resumen ABAP - Certificate

En la solapa “Verif” se ingresa cual es el exit que se ejecutara para realizar la verificación.

107

Page 108: Resumen ABAP - Certificate

En la solapa “Mensaje” se ingresa cual es el mensaje que se emitirá si el exit que realice la validación. El resultado del exit depende de la variable B_RESULT. Se puede pasar variables a este mensaje.

La transacción OB28 indica si la validación (no el paso dentro de este) esta activo o no.

108

Page 109: Resumen ABAP - Certificate

Sustitución

Las validaciones se utilizan para cambiar el/los valores ingresados en documentos.Para agregar una sustitución se modifica el programa ZRGGBS000 a la estructura exit una

línea con nuestra validación.

exits-name = 'U993'. → nombre del exit

109

Page 110: Resumen ABAP - Certificate

exits-param = C_EXIT_PARAM_FIELD. → interfaz del exit exits-title = text-104. → descripción del exitAPPEND exits.

El código de la validación se debe se pone en el mismo programa (ZRGGBS000).

(C_EXIT_PARAM_FIELD)FORM u993 CHANGING p_zfbdt. ...ENDFORM.

(C_EXIT_PARAM_CLASS)FORM u994 USING bool_data TYPE gb002_015....ENDFORM.

Tipo de interfaz

Existen 2 tipos de interfaz para los exit de validación.

→ C_EXIT_PARAM_NONE→ C_EXIT_PARAM_FIELD → El parámetro es el campo que vamos a

sustituir.→ C_EXIT_PARAM_CLASS → El parámetro es la estructura

BOOL_DATA. Esta estructura contiene la cabecera y las posiciones del documento.

Customizing de validaciones

La transacción para customizar una sustitución es GGB1. Ahí encontraremos, los distintos módulos en donde crear la validación dentro de FI.

Para crear una sustitución se selecciona en que tipo de evento se ejecutara la sustitución, por cabecera, por posición o por documento completo.

110

Page 111: Resumen ABAP - Certificate

Como en validaciones se debe crear un paso dentro de la sustitución. Cuando se crea un paso debe elegir que campo debe sustituirse. Si se elige un campo este campo marcara la interfaz del FORM. Si se elige “Solo exit”, la interfaz del form será la estructura BOOL_DATA.

Al elegir el campo a sustituir se mostrara que tipo de sustitución se realizara.

Valor constante -> Se modificara el campo por un valor constExit -> Se ejecutara un FORM de validaciónAsignación campo-campo -> Se modificara un campo por otro.

En la solapa “Condición” se ingresara la condición que por la cual que se ejecutara o no la sustitución.

111

Page 112: Resumen ABAP - Certificate

En la solapa “Sustitución” en caso de haber elegido el tipo EXIT se ingresara el nombre del exit que se ejecutara.

La transacción OBBH indica si la sustitución (no el paso dentro de este) esta activo o no.

112

Page 113: Resumen ABAP - Certificate

NOTA: Hay casos de que las sustituciones y validaciones creadas no aparecen en el customizing. Existe un programa que regenera las validaciones y sustituciones, el programa es RGUGBR00

Se ingresa el area de aplicación y marcaran todas las opciones menos la ultima.Este programa regenerara todos los FORM que se crearon.

113