Académique Documents
Professionnel Documents
Culture Documents
TAW12_1
1
Unidad 2: Programación de pantallas
Principios de programación de pantallas
Fortalezas de las pantallas
Las pantallas permiten introducir y visualizar pantallas. Unas de sus fortalezas es que se
combinan con el diccionario de ABAP para permitir chequear la consistencia de los
datos que los usuarios deben introducir.
Las pantallas permiten crear dialogos user-friendly con botones, tabstrip controls, table
controls, y otros elementos gráficos.
2
Elementos de pantalla
Atributos
Los elementos de pantalla text field, input/output field, status icon, group box, radio
button, checkbox y pushbuttons tienen atributos generales, atributos de diccionario,
atributos de programa y atributos de visualización.
Los elementos subscreen, tabstrip control, y table control tienen atributos generales y
atributos especiales.
Se pueden dividir los atributos de un elemento en:
-Atributos definibles estáticamente que no se pueden cambiar dinámicamente.
-Atributos definibles estáticamente que si se pueden cambiar dinámicamente.
-Atributos que solo pueden cambiar dinámicamente.
Procesamiento de pantalla
Pantallas
Las pantallas son objetos definibles que se pueden usar para visualizar o introducir
información a través de input y output fields, listas y demás.
Están formadas por un dialogo entre el usuario y el programa ABAP.
3
Atributos
Cada pantalla tiene unos atributos de administración que especifican el tipo, tamaño, y
la pantalla subsecuente.
Los atributos de administración Program y Screen number identifican la pantalla por su
número y el programa que les corresponde.
Los números mayores de 9000 estan reservados para clientes de SAP System. De 1000
a 1010 para el mantenimiento de pantallas de las tablas del diccionario ABAP y
pantallas de selección estándar de programas ejecutables.
El tipo de pantalla identifíca el proposito de la pantalla. Otros atributos especiales de la
pantalla y sus componentes dependen de este atributo.
El next screen permite especificar la pantalla que se debe procesar después de la
pantalla actual en una secuencia fija.
Creación de pantallas
Cuando se crean pantallas se debe:
-Dar atributos generales de la pantalla.
-Diseñar el layout.
-Dar atributos a los campos.
-Escribir el flujo lógico.
Atributos de pantalla
4
Para crear una pantalla desde el object navigator, se crea un nuevo desarrollo con tipo
screen. Se posiciona en screen y se hace clic al botón derecho del ratón.
El object navigator abre el screen painter.
Cuando se crea una pantalla, primero hay que introducir sus atributos. Se mete el
número de pantalla, un texto corto, y el tipo de pantalla. Normalmente el tipo normal.
Se puede especificar la siguiente pantalla en next screen.
Si se pone 0 para la siguiente pantalla, el sistema sigue el procesamiento desde el punto
en el que la pantalla ha sido llamada una vez que se termina de procesar.
También se puede crear una pantalla llamando a CALL SCREEN <nnn> en el editor
ABAP y haciendo doble clic en el <nnn>.
Layout
El editor gráfico provee una manera fácil de definir los elementos de pantalla.
Solamente se escogen y se posicionan donde se quieran en la pantalla.
Para eliminarlo se escoge y se da a delete.
Se pueden mover los elementos con drag&drop.
La lista de elementos
Para permitir dar valores a los atributos de los elementos de las pantallas, el screen
painter contiene una lista de elementos con seis vistas. También se pueden mostrar
todos los atributos para un único elemento desde cualquier lista de atributos. Tambien
se pueden mantener ls atributos para un elemento desde el layout utilizando la función
attributes.
En el screen painter, se trabaja con tipos de datos externos. Estos se corresponden con
tipos de datos del diccionario ABAP. Para campos que se han elegido que estan
definidos en el diccionario, el sistema visualiza el tipo de datos externo en la columna
format. Para elementos que no tienen una referencia al diccionario, hay que introducir el
tipo de datos externo.
Flujo lógico
En el flujo lógico se escriben las llamadas a MODULE. Los módulos son componentes
del mismo program SAP. Contienen sentencias ABAP que se quieren ejecutar.
Se puede crear un módulo haciendo doble clic sobre el nombre en el editor de flujo
lógico.
5
Para crear un módulo desde el object navigator, se elige el módulo de desarrollo PBO o
PAI.
Se puede llamar al mismo modulo desde más de una pantalla. Si el procesamiento
depende del número de pantalla, se puede obtener el número de la pantalla actual desde
el campo sy-dynnr.
Los módulos que se llaman desde el PBO tienen que estar definidos con la sentencia
MODULE…..OUTPUT. Las del PAI con MODULE……INPUT.
Visibilidad de datos
6
Para poder comunicar una pantalla y su programa ABAP, los campos en la pantalla y
los correspondientes campos en el programa tienen que tener el mismo nombre.
Después de haber procesado todos los módulos en el PBO, el sistema copia el contenido
del campo en el ABAP work area a su correspondiente campo en el screen work area.
Antes de haber procesado el primer modulo en el PAI, el sistema copia el contenido de
los campos en el screen work area a sus correspondientes campos en el ABAP work
area.
Hay que utilizar nuestras propias estructuras (como SDYN_CONN) para transportar
datos entre la pantalla y el programa ABAP. Esto asegura que el dato a transportar
desde la pantalla al programa y viceversa es exactamente el dato que se desea.
En el comienzo del PBO, el sistema de ejecución lee los atributos modificables creados
estáticamente y dinámicamente para cada elemento de pantalla en la pantalla actual en
una tabla de sistema con el tipo de línea SCREEN.
7
La tabla de sistema SCREEN
La tabla de sistema con tipo de linea SCREEN se llama tabla de sistema SCREEN.
Cuando se procesa una pantalla, la SCREEN system table contiene una entrada para
cada elemento creado en la Screen painter para esa pantalla.
La Screen system table se inicializa al comienzo del PBO para la pantalla actual. Para
hacer esto el sistema copia los atributos definidos estáticamente de cada uno de los
elementos de la pantalla en la tabla.
Luego se pueden cambiar dinámicamente en el PBO con estas sentencias:
LOOP AT SCREEN
……
MODIFY SCREEN .
ENDLOOP.
Para hacer esto, se utiliza la estructura SCREEN, que se crea automáticamente por el
sistema y se llena con los valores de cada linea sucesiva en la tabla del sistema. Los
atributos set tienen valor 1 y los que no 0. Para cambiar la tabla de sistema se usa
MODIFY SCREEN con el loop.
8
Para encontrar el elemento cuyos atributos se quieren modificar se puede usar un LOOP
en la pantalla y preguntar uno de los siguientes campos: SCREEN-NAME O SCREEN-
GROUP1 hasta SCREEN-GROUP4.
Hay que programas las modificaciones en el PBO. Se usa un loop a través de la pantalla
para cambiar los atributos de un elemento o un grupo. (LOOP AT SCREEN
WHERE…. Y READ TABLE SCREEN no se soportan)
Para activar y desactivar atributos se le da el valor 1 o 0 y se guarda con MODIFY
SCREEN.
Los elementos que se han definido estáticamente en el screen painter como invisible no
se pueden reactivar con SCREEN-ACTIVE =1. Sin embargo los atributos que se han
definido estaticamente como visibles, se pueden hacer invisibles con SCREEN-
ACTIVE =0. Esto tiene el mismo efecto que (SCREEN-INVISIBLE=0, SCREEN-
INPUT =0 Y SCREEN OUTPUT =0).
9
Secuencia de pantallas
Determinar la siguiente pantalla
Para transacciones complejas quizá sea necesario utilizar varias pantallas. La pantalla
inicial se determina cuando se crea la transactio code. Cada pantalla determina su next
screen.
El atributo next screen se introduce estáticamente en los atributos de pantalla. En tiempo
de ejecución se pueden controlar usando SET SCREEN <nnn>.
10
Insertando secuencias de pantallas
Se pueden insertar secuencias de pantallas. Esto añade una nueva capa a la pila.
Se añade una secuencia de pantalla utilizando CALL SCREEN <nnn>.
11
Si se omite ENDING AT, el tamaño del dialog box se determina por used size en los
atributos de pantalla. El sistema determina después el tamaño del dialog box utilizando
el atributo Ocupied size.
Si se usa el ENDING AT, el sistema visualiza como mucho el dialog box que entra en
el espacio disponible. Si no entra por completo se muestran las scrollbars.
La posición de comienzo para cada ventana del sistema SAP es la esquina superior
izquierda.
Left_col, upper_row, right_col y lower_row se pueden utilizar para la segunda pantalla
llamada.
12
Unidad 3: Interfaz del programa
Visión general
La barra de estado del GUI como se ve en la figura se compone de la barra del menú, de
la estándar y de la propia de la barra de aplicación. Cada pantalla se compone de 1 o
más GUI status. Los elementos del GUI status permiten al usuario elegir funciones
usando el ratón.
Los menús son elementos de control que permiten al usuario elegir que funciones se van
a procesar por una aplicación. También pueden contener submenús. System y help
aparecen en todas las pantallas de sap. Nos e pueden ni cambiar ni ocultar sus
funciones.
La barra de aplicaciones contiene iconos de funciones usadas frecuentemente. La barra
estándar es la misma en todas las aplicaciones del Sistema R/3. Permite utilizar
funciones frecuentes. Se utilizan las function keys para asignar funciones a estas.
Todos los programas GUI de barras de títulos y estado conforman el interfaz de usuario.
13
Status
Un estado (‘status’) es una referencia a una barra de un menú, a ciertas asignaciones de
teclas (key assignments) y a una barra de aplicaciones. Un único componente (como una
barra de menú) puede ser utilizado por más de un GUI. Los GUI status son objetos de
programa en ABAP que se pueden visualizar en pantallas y listas. Se debería configurar
un status para cada pantalla de la aplicación
La barra de menús está hecha de menús individuales. Las asignaciones de teclas (keys)
y las barras de aplicaciones son subobjetos de la configuración de las funciones de una
tecla (‘function key settings’).
Se puede crear una configuración de una barra de aplicación para una tecla individual
eligiendo el menú path GUI-1. Las funciones hay que asignarlas a una tecla (‘function
key’) antes de asignarlas a un botón. Cada status contiene una sola barra de
aplicaciones.
Todos los menús y asignaciones de teclas hacen referencia a todos los interfaces
(interface function list). Estas funciones están en la ayuda F4.
Una función dentro de un status puede estar activa o inactiva.
Funciones
14
Las funciones se pueden asignar a function keys individuales o a botones. Una
‘function key setting’ se compone de la (key) tecla y el botón correspondiente de la
application toolbar.
Las asignación de keys se dividen en grupos:
Function keys reservadas: no se puede modificar la función a la que están asignadas
(las de la barra estándar). Se pueden activar y desactivar su función, pero no cambiar
iconos y texto asignados.
Function keys recomendadas.
Function keys de asignación libre.
Las funciones asignadas a function keys también se pueden asignar a botones en la
application toolbar.
Una application toolbar puede tener hasta 35 botones. Se pueden agrupar los botones
visualmente, mediante separadores verticales. Se puede controlar la visualización de las
funciones inactivas en la toolbar: Goto → Attributes → Pushbotton settings.
El tipo de status indica los atributos técnicos del status. Se puede elegir entre status de
diálogo (para pantalla completa) y status de cuadro de diálogo (para dialog box
modales). Los menús contextuales son colecciones especiales de funciones que se
muestran con un clic derecho del ratón.
Se puede crear un status creando enlaces a componentes ya existentes o uno creado
desde 0. En uno propio hay que crearse tus propias barras de menú, funciones, etc…
Los cambios solo afectan a ese status.
15
En la técnica de enlazar con otras aplicaciones hay que crear barras de menús, barras de
aplicaciones y asignaciones de teclas como elementos independientes. Entonces creas tu
propio status y lo referencias al menú, barra de aplicaciones o función del teclado que
quieras. Esta técnica es particularmente efectiva para asegurar la consistencia en
grandes aplicaciones que tienen varios status.
16
Si se asigna un icono a una función con un texto estático (atributo ‘nombre del icono’),
el sistema muestra el icono en vez del texto estático en la barra de aplicaciones. Para
mostrar texto adicional al botón introducirlo en el campo ‘texto del icono’. Para insertar
un separador en la application toolbar, se utiliza el insert menú en el Menu painter.
Una entrada del menú puede ser una función, un separador u otro menú (menús en
cascada). Para añadir una función a un menú hay que introducir su código de función en
la columna de la izquierda. Si la función ya existe en la lista de funciones y tiene texto
asignado, se inserta automáticamente en el campo del texto.
Para añadir un separador, usar el Insert menu, rellenar el campo de texto de la función
(‘function text field’) un signo ‘-’. Para crear un submenú hay que insertar su nombre en
la parte derecha de la entrada del menú.
17
Visualización de estándars
Para asegurar la consistencia de datos hay que reutilizar los objetos ya creados (menús,
barra de aplicaciones, etc…). Cuando se asigna funciones a teclas reservadas en la barra
estándar, hay que incluirlas también en los estándares del sistema SAP. Esto hace que el
programa sea más fácil de usar y mantener.
18
Utilizando un GUI status
Procesando el Function Code
Cuando el usuario llama a una función del tipo ‘ ’(espacio blanco), usando una entrada
de menú o function key, el sistema coloca el código de función en campo OK_CODE
de la pantalla.
Para poder ejecutar el campo en un evento PAI debes asignar un nombre al campo que
se inserta entonces en la lista de elementos del editor gráfico (layout). Hay que crear
también un campo con el mismo nombre en el programa de ABAP.
Para que no haya pasos inesperados en la ejecución del programa hay que inicializarlo
en el programa de ABAP con el mismo nombre El valor inicial se transporta
automáticamente al command field correspondiente en el PBO
19
Unidad 4: Elementos de pantalla de
salida
Campos de texto (text fields)
Un campo de texto es un área rectangular en la pantalla en la que el sistema muestra
texto. Normalmente contienen etiquetas a otros elementos que no se pueden cambiar ni
mover en tiempo de ejecución. Son solamente para visualizar. Se muestran en un sitio
fijo.
Pueden contener líneas, iconos u otros elementos estáticos. Pueden contener caracteres
alfanuméricos pero no pueden empezar con _ o ?. Si se utiliza un texto para un radio
button o un check box, se puede especificar la ubicación (izquierda o derecha).
Si el campo consta de más de una palabra usar caracteres bajos (_) como separadores. El
sistema interpreta los espacios en blanco como separador de 2 campos distintos.
Los campos de texto se pueden traducir. Pueden aparecer en el idioma de logeo.
Atributos
20
Creación de campos
Cuando se procesa el módulo PBO, la tabla de sistema con el tipo de línea SCREEN se
inicializa por el entorno de ejecución y se llena con atributos estáticos desde el Screen
Painter.
21
Para ocultar un text fiel en tiempo de ejecución se modifica la tabla de sistema. Se usa
un LOOP AT SCREEN….MODIFY SCREEN. ENDLOOP
Atributos
22
Son campos especiales que muestran iconos. El sistema marca los atributos ‘campo de
salida’ y ‘bidimensional’ y no se pueden cambiar. El tipo de datos por defecto es char.
Se pueden modificar dinámicamente los atributos longitud visible, marcado
(‘intensified’) e invisible.
23
Se consigue el nombre técnico que quieres mostrar con la función ICON_CREATE.
Hay que pasarle el nombre del icono que quieres mostrar y esté te devuelve el nombre
técnico.
Grupos de cajas
Se pueden agrupar los elementos que pertenecen a un grupo (un grupo de campos o
botones). Se les puede asignar un titulo.
Atributos
Creación
Se puede definir un grupo de elementos desde el layout. Debe tener nombre y
encabezamiento.
Se puede cambiar el texto dinámicamente. Para ello hay que activar el atributo ‘output
field’ y crear una variable global en el programa ABAP con el mismo nombre.
24
SECCIÓN: PROGRAMMING USER DIALOG
Unidad 5: Screen elements de input/output
Input/Output fields
Un input field es un elemento de pantalla rectangular en el cual el usuario introduce
datos. Puede tener chequeos automáticos de los valores introducidos en ellos que los
relacione con sus data type. Los input field creados con referencia a los ABAP
Dictionary fiels pueden tener chequeos de consistencia de datos (foreign key check, y
value sets).
Atributos
Los input/output fields tienen los siguientes atributos:
No es posible activar todas las combinaciones de los atributos. Esto depende del
formato del input/output field.
25
• Usando una plantilla del diccionario ABAP: Botón Dict/Program fields.
Los atributos del parámetro SET y del parámetro GET (SPA y GPA en la tabla)
permiten habilitar las funciones de dichos parámetros de forma separada.
El sistema puede llevar a cabo chequeos de foreign key solo si un screen field hace
referencia a un ABAP Dictionary field para el cual una check table ha sido definida.
26
Field Input checks con Error Dialog
Si los chequeos automáticos de los field input son insuficientes, el usuario puede
programar los suyos propios en el PAI event. Para ello se usa la sentencia FIELD con
la adición MODULE.
Si se quiere asegurar que mas de un campo esta preparado para un error dialog (chequeo
de grupo de campos), el usuario debe listar todos los campos que desee chequear en la
sentencia FIELD con el MODULE, e incluir ambos en el bloque CHAIN …
ENDCHAIN.
27
Si un usuario confirma un warning message, el sistema reiniciara el PAI processing
alter la sentencia MESSAGE donde se lanzan los errores.
28
Condicional Module Calls
Los field input checks normalmente requieren acceso a la base de datos. Evitando esto
cuando sea posible, se mejorara el rendimiento del programa.
Normalmente para poder abandonar una pantalla se deben rellenar todos los campos
obligatorios. Esto es un problema, porque si un usuario se mete por equivocación en una
ventana, y no conoce el conjunto de valores de entrada que satisfaga los input checks,
no podría salir de ella. Se debe permitir que un usuario pueda salir de una pantalla sin
necesidad de que los field check tengan lugar.
Para proteger al usuario de la perdida de los datos que el a metido si sale de la ventana
involuntariamente, se utilizan security prompts (indicaciones de seguridad).
Execution on Input
Si se utiliza ON INPUT en una sentencia MODULE que se encuentra dentro de la
sentencia FIELD, solo se llama al modulo si el contenido del campo es diferente a su
valor inicial.
29
Execution on Change
Si se usa ON REQUEST en una sentencia MODULE que se encuentra dentro de la
sentencia FIELD, se llama al modulo solo si el usuario introduce un nuevo valor en ese
campo.
30
Evitando los Field Input checks
El module con la adicion AT EXIT-COMMAND es procesado antes que los field input
checks automaticos. Solo se puede usar el AT EXIT-COMMAND con un modulo por
cada ventana. No puede estar asociado con la sentencia FIELD.
Navegación: Targets
Con las funciones Back y Cancel : desde ventanas del mismo nivel que la
ventana inicial, se vuelve a la ventana inicial; desde ventanas que contienen información
de detalles, se vuelve a la ventana que llamo a la ventana actual. La función Cancel
difiere de la Back es su dialog behavior.
31
Navegación: Single-Screen Transaction
Las funciones Exit y Back se diferencian en su dialog behavior para prevenir la perdida
de input data.
Cancel muestra otra vez la pantalla con los data fields inicializados y permite al usuario
seleccionar nuevos objetos.
Navegación: Dialogs
32
Para las funciones Exit y Cancel, primero se envía un dialog box al usuario para que lo
acepte y rechace. Despues (en el caso de la función Exit), el sistema chequea los input
en la ventana. La función en cuestión debe ser de tipo E.
En el caso de la función Back, los input checks se hacen antes de mostrar el dialog box.
Input help
Input help (F4 help) muestra al usuario una lista de posibles valores de entrada para un
screen field. Además de las posibles entradas, se puede mostrar información adicional
relevante sobre las entradas. El input help normalmente esta definido en el diccionario
ABAP.
Dropdown boxes ayudan a los usuarios a elegir una entrada de un pull-downl list que
contiene las posibles entradas.
33
Los valores son automáticamente llenados usando el search help asignado al ABAP
Dictionary field. El ABAP Dictionary field debe tener un search help (check table) con
dos columnas o una tabla de valores fijos.
Atributos
A los checkbox y a los radio buttons se les debe poner un nombre.
Se puede mostrar texto e icono junto a ellos. El texto esta contenido en el atributo Text.
Para mostrar un icono se debe introducir el nombre de dicho icono en el atributo Icon
name.
34
Crear un Checkbox
Los checkbox se crean en el editor de la Screen Painter. Se debe seleccionar el objeto
checkbox de la lista de objetos y colocarlo en la pantalla. Se le debe asignar un nombre a
cada checkbox. En el programa ABAP, crear un campo con el mismo nombre, tipo C, y
longitud 1.
35
Crear un Radio Button Group
Pasos para crear un radio button:
• Crear el radio button como elemento individual. Elegir radio button de la lista
de objetos y colocarlo en la pantalla. Se le debe asignar un nombre a cada radio
button. En el programa ABAP, crear un campo con el mismo nombre, tipo C, y
longitud 1.
• Se puede combinar una colección de radio buttons en un radio button group.
Para ello, se debe seleccionar los radio button del layout edit, botón derecho,
elegir Edit > Group > Radio button group > Define.
Se puede asignar una function code y function type al radio button group. Cuando el
usuario selecciona un radio button, el PAI event es lanzado y la function code es
asignado al command field (OK_CODE).
Se puede asignar una function code a un radio button después de tener definido un radio
button group. El sistema asigna la misma function code a todos los radio button del
grupo.
36
Pushbuttons
Los pushbuttons son input filds para el command field (OK_CODE).
Usar pushbuttons en la data area de una ventana para mostrar o esconder información.
Cuando el usuario elige un pushbutton, el sistema llama al programa que contiene dicha
función. En este punto, el control del programa pasa a un work process en la application
server, que proceso el PAI processing block.
Atributos
Los pushbuttons pueden contener texto (atributo Text), un icono, o ambos. Se puede
especificar un icono estáticamente o dinámicamente, usando el function module
ICON_CREATE.
Se puede cambiar dinámicamente los atributos visible lenght, ouput field y visible
usando el SCREEN system table.
37
mismo nombre, cualquier cambio en el contenido del campo será inmediatamente
visible en la ventana.
Si el usuario elige un pushbutton que tiene una function type ‘ ‘ (space), se procesa el
PAI event.
Si el usuario elige un pushbutton que tiene una function type E, el sistema procesa un
modulo AT EXIT-COMMAND. Esto ocurre antes del field transport automatico y los
field input checks. Después del modulo AT EXIT-COMMAND, el sistema continua
procesando la pantalla normalmente.
38
Unidad 6: Subscreens y Tabstrip Controls
Subscreens
39
Atributos
40
Creando un subscreen area
Para crear una area subscreen, escoge desde la lista de objetos del Screen Painter y
colócala en la pantalla.
En el campo Object text, introduce un nombre al área de subscreen. Lo necesitarás
para identificar el área cuando llames al subscreen.
Llamada a subscreen
Para usar una subscreen, debes llamarla en ambas secciones, tanto en el PBO y en el
PAI del flow logic de la pantalla principal. La sentencia CALL SUBSCREEN
41
<subarea> le dice al sistema que ejecute los bloques del PBO y del PAI para los
componentes del PBO y PAI de la pantalla principal.
Los campos que se usan dentro del flow logic son campos globales de tu programa
ABAP, estos campos deben ser declarados en el TOP include de tu programa.
Si la subscreen no esta dentro del programa principal, el dato global del programa
principal no esta disponible en la subscreen y los datos de la pantalla no serán
transferidos de regreso al programa. Debes programar la transferencia de datos por
tu mismo (por ejemplo, usando un módulo de funciones que exporta e importa
datos, con la sentencia MOVE en el código de la subscreen).
42
Encapsulación en function groups
Usas functions modules para transporta datos entre el programa que llama y la
function group
Para declarar los datos desde el programa que llama a la subscreen desde la function
group, usa un module antes de la llamada de la subscreen. Esta llama un function
module la cual la cual hace la interfaz de datos requerida para la function group.
La llamada de la function group debe ocurrir antes de la llamada de la subscreen.
Esto asegura que los datos sean conocidos en la function group antes que el
PROCESS BEFORE OUTPUT sea ejecutado.
43
La secuencia es reservada en el modulo PAI de la pantalla que llama. Puedes llamar
al bloque PROCESS AFTER INPUT de la subscreen antes que llames a la function
module para pasar los datos desde la function group y regresarlos al programa que la
llama.
Los datos desde el programa que llama están disponibles globalmente en la function
group, debes transferir los parámetros desde la function module en los data fields
globales de la function group.
La function module que usa la transferencia de datos desde el programa que llama
dentro de la function group debe copiar los parámetros de interface en los datos
globales en una function group.
Tabstrip controls
Screen Elements: Tabstrip Controls
44
o Los componentes son procesados dinámicamente, eso es, la entrada de un
usuario en un tab page causar que aparezca otro tab page de repente.
Controles tabstrip son compatibles con los procesos de entrada batch.
Un control tabstrip consiste de páginas individuales con un tab page y un tab title.
Si el control tabstrip contiene muchas páginas, no es posible por todos los tab titles
mostrarlos de una sola vez. En este caso, un scrollbar te permite revisar a través de
los tab pages restantes. En la esquina superior derecha se encuentra este pushbutton.
Si el usuario selecciona este pushbutton, una lista de todos los tab titles es
desplegada. El tab title activo es marcado con un check.
Elementos de página
Atributos
• Adicionalmente, los atributos en general, Object name, Starting position, y static
size, los controles tabstrip tienen atributos especiales.
Creación de un tabstrip
• Para crear un tabstrip debes seguir los siguiente 3 pasos:
o Define un tab area
o Define el tab titles y si es necesario más tab titles.
o Asigna una subscreen area a cada page element.
45
TABSTRIP AREA
• Para crear un tabstrip control area, escoje Tabstrip control desde la lista de objetos
del Screen Painter y ponlo en el screen. Fija la esquina izquierda del table control
area y arrastra el objeto al tamaño requerido.
• Asigna un nombre al tabstrip control en el atributo Object name. Necesitas este
nombre para identificar tu tabstrip control
• En tu programa ABAP, usa las sentencias de CONTROLS para declarar un objeto
con el mismo nombre. Usa el TABSTRIP como tipo.
• El tipo TABSTRIP es definido en el pool de tipos CXTAB. El campo ACTIVETAB
contiene el function code de la tab title de la tabstrip actual. Los otros campos son
reservados para usos internos.
• El número por defecto de tab pages por cada tabstrip es de 2.
46
TAB TITLE
• Técnicamente, tab titles son tratados en la misma forma que los pushbuttons. Tienen
un nombre, un texto, un fuction code, y un function type. Cada uno lo ingresas a los
siguientes campos Name, Text, FctCode y FctType respectivamente.
• Un tab title puede tener el function type ‘’ (spacio) o P si el function type es
‘’(espacio), el bloque PAI es disparado cuando los usuarios escogen y el function
code del tab title es puesto en el campo de comando. Si el function type es P, el
usuario puede desplazarse entre diferentes tab pages del mismo tipo sin disparar el
bloque de proceso del PAI. Si quieres que tu control tabstrip tenga más de 2 páginas,
debes crear más tabtitles. Para hacer esto, escoje el pushbutton desde los objetos de
lista en el Screen Painter y ponlo en el área del tab title.
TABSTRIP SUBSCREENS
47
Scrolling locally in Tabstrip controls
48
o Asigna la función type P para todos los tab titles
El sistema oculta cualquier page element de los subscreen que no tengan elementos
para ser mostrados.
Si no hay page elements que contengan elementos a ser mostrados, el sistema oculta
el tabstrip completo.
Si todos los page elements comparten una sola subscreen area, el programa analiza
el function code que ha escogido en el tab title para determinar que pantalla será
mostrada.
Hay dos pasos en este proceso:
o En el bloque de PAI, el programa determina cual page element necesita ser
activo basado en el tab title elegido por el usuario.
o Cuando el bloque PBO es procesado de nuevo, el programa muestra las
pantallas correspondientes.
Durante este proceso, el sistema verifica solo los campos que se mostraran en la
subscreen.
49
PROGRAMACIÓN
50
Creando tabstrip controls usando el wizard
Puedes usar el Tabstrip Control Wizard como ayuda para crear los tabstrip control e
insertarlos en screens en un programa. El Asistente te ayuda a través de todo el
proceso. Puedes regresar a configuraciones anteriores en cualquier momento. Los
programas objetos son creados hasta el final de pantalla solo cuando se completa el
proceso. El asistente crea no solo el tabstrip sino también los componentes
correspondientes en el flow logia, junto con los modules relevantes, subrutinas, y
necesarias definiciones de datos.
En Adición al tabstrip control en la screen y al correspondiente flow logic, los
siguientes objetos son creados si estos no existieran:
o El programa principal y la pantalla para el tabstrip juntos con el flow logia
o Subscreens vacías para cada control page del tabstrip.
o Includes para definición de datos, PBO módulos, PAI módulos, y sentencias
INCLUDE para los includes.
Todos los objetos son puestos en la lista de objetos inactivos.
51
Unidad 7: Table controls
Table control
El table control es un área en la pantalla en la que el sistema muestra datos en forma
tabular. Este es procesado usando un bucle. La primera línea del table control es la línea
de cabecera, que se distingue por un separador gris.
Características
52
Table settings
Los usuarios pueden guardar las variantes de visualización para table controls.
Además del nombre, posición inicial en la pantalla y tamaño estático, también poseen
atributos especiales.
Los campos STEPL Y LOOPC de la estructura syst contienen información de
procesamiento loop utilizado con los table controls.
Se utiliza el tipo Entry table para introducir datos. Selection table si solo es para
seleccionar y transferir entradas o si la tabla existe solo en modo de visualización.
53
Creación
Cuando se crea un table control, hay que crear:
-Un table control area.
-Table control fields (campos del table control)
Para crear un table control area, se escoge el objeto table control en la lista del Screen
painter.
En el atributo Name, se le asigna un nombre al table control. En el programa ABAP se
declara una estructura con el mismo nombre, que contiene los atributos que se pueden
cambiar dinámicamente del table control.
La sentencia CONTROLS declara un objeto de datos con el tipo TABLEVIEW. En
tiempo de ejecución el objeto (my_control , del ejemplo) contiene los atributos
estáticos de la table control.
La adición de USING SCREEN determina que valores iniciales de que pantalla son
usados para el table control.
Para refrescar un table control a sus valores inicialesREFRESH CONTROL <ctrl.>
FROM SCREEN <scr>.
Campos
54
Se crean los campos en un table control usando la función Dict/Program fields. Esto
envuelve los siguientes pasos:
-Introducir el nombre de la estructura cuyos campos se quieren utilizar.
-Elegir los campos a utilizar y dar a ok.
-Hacer clic en el table control area. El sistema coloca todos los campos en el table
control.
Cuando se crea un table control, el sistema propone automáticamente uno con columna
de selección.
Este se comporta como un checkbox. Tiene que tener longitud 1 y tipo de datos CHAR.
Hay que introducir el nombre de campo en los atributos del table control.
El selection column es un campo usado para el transporte entre la pantalla y el programa
ABAP.
55
Estructura
Se leen los datos de la base de datos y se almacenan en una tabla interna. El sistema
llena el table control a través de esta tabla interna.
56
Aplicaciones
Antes de visualizar los datos desde un internal table en un table control, hay que llenar
primero la tabla. No se hace en cada evento PBO, solo cuando los campos clave
cambian. (La primera linea marcada en el ejemplo).
Se usa DESCRIBE TABLE para encontrar el número de entradas en la internal table y
guardar este número de líneas en el campo lines de la table control.
Solo hay un work area para procesar las lineas en un table control. Por esto se necesita
un LOOP…ENDLOOP, tanto en el PBO y el PAI para cada table control.
En el PAI, se necesita pasar los cambios realizados en el table control.
3 pasos:
-El sistema se mete en un bucle a través de las líneas del table control. Cada línea se
procesa una a una.
- Para cada línea, el sistema coloca la línea de la tabla interna en el work area de
la tabla interna.
-Para cada línea, el sistema copia el dato desde el work area de la interna table a
línea relevante de la table control.
57
Código
58
Cambiando el contenido de un table control
Para transferir valores que han cambiado desde el table control a la internal table:
-El sistema se mete en un bucle a través de las líneas del table control.
-Para cada línea, el sistema copia el dato de la línea actual del table control a los campos
con nombre identico en el work area de la tabla interna.
-Transporta el contenido del work area a la línea correspondiente de la tabla interna.
Código
59
En el PAI, todos los campos de la pantalla que no estan asociados a un table control y
que no se listan en la sentencia FIELD se tranportan de vuelta al work fields en el
programa ABAP.
El contenido de la table control se transporta línea a línea al correspondiente work area
en el programa ABAP en un loop apropiado.
Los campos que estan en la sentencia FIELD se transportan directamente antes de esa
sentencia.
Técnicas adicionales
Cambiando table control
60
Cambiando atributos de un table control
Si se quiere cambiar atributos de las columnas en un table control, hay que cambiar las
entradas en la tabla <control>-cols. La tabla no tiene cabecera. Esto implica crear una
work area especifica.
Los campos de la estructura del table control proveen información de interacción de
usuario con la tabla de control. Se puede usar el campo selected para determinar si el
usuario ha seleccionado una columna concreta.
61
Cambiando atributos de campos temporalmente
Es posible cambiar lso atributos de los campos de un table control temporalmente. Estos
cambios son solo efectivos cuando se esta procesando la pantalla actual.
Para cambiar atributos temporalmente, se llama a un módulo desde el loop del table
control, en las que se cambian los atributos para dicha línea.
Se utiliza el LOOP AT SCREEN….ENDLOOP.
Se pueden ordenar fácilmente por una columna concreta, usando los atributos del table
control, wa_cols-selected y wa_cols-screen-name.
Se pueden usar criterios de ordenación usando procesamientos de string. Asegurarse de
que wa_cols-screen-name contiene el nombre del campo en pantalla y no la columna de
la internal table.
62
Posición del cursor
63
Unidad 8: Context Menus
Context Menu
Los context menus son atajos para las funciones que se utilizan a menudo.
Cuando un usuario selecciona un objeto del context menú, un mecanismo de evento
llama a una subrutina concreta en la aplicación. Esto entrega una referencia de menú
(menu reference) a la subrutina. El programa utiliza esta referencia para crear el menú
que se visualiza. Se pueden utilizar menús definidos con el Menu Painter o menús
dinámicos.
Después de que el usuario ejecute una función del menú, el programa de aplicación
recupera el control y reacciona a la introducción del usuario.
Los context menus son asignados a output fields. Cuando se asigna un context menu a
un box, una table control o pantalla, todos los output fields subordinados que no tienen
context menú asignado, lo heredan.
Se puede crear un context menú desde el object navigator. Hay que posicionarse en el
GUI status. Inmediatamente el Object navigator abre el Menu painter.
También se puede crear directamente en el menú painter.
El context menú es un GUI status especial. Se le asigna un nombre, texto breve y se
elige como tipo context menú.
64
Se les puede enlazar con cualquier function code y function text. Se pueden usar las
funciones que se proveen en la interfaz.
La técnica de enlazar, asegura context menus consistentes en aplicaciones grandes.
Reglas para diseñar context menus:
-No utilizar funciones que no se pueden encontrar en otro lugar en el sistema.
-Evitar utilizar mas de dos niveles en la jerarquía.
-No usar más de 10 entradas.
-Usar separadores para estructurar.
-Ubicar sentencias de objetos específicos en el comienzo del menú.
65
La rutina se hace de la siguiente manera:
FORM ON_CTMENU_<nombre> USING p_menu TYPE REF TO cl_ctmenu.
Definición
ENDFORM.
Se hace clic en el botón derecho del ratón y este lanza el callback correspondiente.
Se utiliza el método estático load_gui_status de la clase cl_ctmenu para cargarlo.
La clase cl_ctmenu provee varios métodos que se pueden utilizar para ajustar el context
menú en tiempo de ejecución. A estos métodos se les llama con callback.
66
Unidad 9: Listas en pantallas
Creando un list buffer
Visualización en pantalla
67
Para crear la visualización de una lista en pantalla, hay que usar LEAVE TO LIST-
PROCESING. SET PF-STATUS SPACE asegura la lista se visualiza con el GUI status
estándar para las listas.
Una vez que la lista se ha procesado y se ha ejecutado el LEAVE, la lista se visualiza en
la pantalla 120.
Después del LEAVE se trata de procesar el PBO de la pantalla que le ha llamado, pero
si ponemos AND RETURN TO SCREEN <scr> podemos hacer que se proceso el de
otra pantalla.
Si se incluye SUPRESS DIALOG en un modulo PBO, la pantalla actual no se visualiza.
Si se quiere visualizar una lista en un dialog box con una transacción, hay que llamar a
la pantalla, pero hay que incluir la sentencia SUPRESS DIALOG en su PBO.
Para volver a la pantalla que le ha llamado cuando se deje la lista, al LEAVE se le
añade AND RETURN TO SCREEN 0.
68
Appendix
Transaction variants
son una referencia a un conjunto de screen variants. Se pueden crear n screen variants,
la transaction variant se basa en esas screen variant.
Opciones
Creación
Para crear una transaction variant, se elige ToolsAccelerateSAP Pesonalization
Transaction variant.
Con el GOTO del menú se elige si se quiere crear una client-specific o cross-client
transaction variant.
Screen variants
Es un objeto independiente del repositorio con un único nombre. Su nombre se
construye de esta manera:
• Nombre de la variante
• Mandante
• Screen number
Se puede especificar que campos se pueden copiar o no en la screen variant.
69
GuiXT
Es una herramienta que permite diseñar las screens de una manera flexible. Se pueden
seleccionar ficheros GuiXT de la máquina local. También se pueden importar scripts
creados en la máquina local y exportarlos.
Script lenguage
Se puede cambiar el layout de una pantalla con el scrip lenguaje usado por GuiXT.
podemos:
• Mover objetos
• Insertar screens
• Insertar pushbuttons
• Insertar value helps
• Eliminar elementos de la screen
Para empezar una transaction variant desde un menú, se tiene que crear un transaction
code de tipo variant transaction.
Se puede insertar un transaction variant en un menú manteniendo:
-Un role
-Un area menú.
70
Orientación a objetos
La orientación a objetos consiste en tener los datos y la funcionalidad residente en una
misma clase. De esta clase se crean las instancias llamadas objetos que contienen tanto
los atributos y las funciones definidas en su clase.
Un objeto consiste de dos capas:
Parte publica: todo el contenido que esta en esta parte es accesible desde fuera.
Parte privada: solo las funciones propias del objeto pueden acceder y/o
modificar los atributos privados del objeto.
En una clase hay dos partes, la parte donde se definen los métodos y los atributos. Y la
parte donde se implementan. A la hora de crear un objeto se debe crear una variable de
referencia a el objeto type ref to class. Y después con el comando create object se crea
el objeto en si.
Llamada a un metodo de una clase: con call method ref -> function o ref -> function.
Implementación de controles
Controlo framework
El container control provee espacio para mostrar otros controles en la pantalla. Los hay
de diferentes tipos.
71
Comunicación con controles
Llamadas a métodos
Si se llama a un metodo de control de un enjoySAP en el programa ABAP, este ultimo
pasa el control al control framework. El metodo llama al correspondiente objeto Gui.
Eventos
Un objeto puede cambiar su estado lanzando un evento que podran gestionar otros
objetos. El programa que lanza el evento no sabe quien lo gestionara.
Si desde un objeto gui se lanza un evento al front end, el CFW se encarga de que llegue
al objeto que lo gestiona.
Fuentes de información
Search help
72
El internal behaviour del search help describe el proceso del F4. este contiene el
selection method, que es el que sustrae los datos para mostrarlos y el dialog behaviour,
que describe la iteración con el usuario.
Un search help describe el proceso de un input help. Para que pueda funcionar, se
necesita un mecanismo que asigne el search help al campo ( field ). A esto se le llama
search help connection.
Los parámetros de un search help pueden ser de entrada import o de salida export.
Existen tres mecanismos para enlazar un search help a un campo del diccionario
ABAP:
1-Un search help se puede enlazar directamente a un campo de una estructura o
tabla.
2-Si un campo tiene asociado un check table, el contenido de esta es automáticamente
mostrado como posibles valores.
3-Es posible asociar un search help a un data element. Así estará disponible el search
help para aquellos campos que sean del tipo data element.
Si existe más de un mecanismo se selecciona el search help en base a que este más
arriba en la jerarquía. El orden sería: para un campo directamente, check table,
para un data element.
Sap R/3 contiene un amplio rango de mecanismos con los cuales se pueden definir
input helps. Es posible utilizar mas de uno de estos en un campo en particular.
Ademas del input help se puede definir un screen help, una ventaja de esto es que no se
puede reutilizar automáticamente.
Se puede añoadir un search help a un screen help en el screen painter.
Nunca se debe de utilizar input checks programados en el flor logia.
73
Unidad 11: Actualizando bases de datos
con Open SQL
En ABAP se puede utilizar tanto Open SQL como SQL nativo para realizar
actualizaciones de base de datos.
El acceso a la bd con SQL nativo permite usar comandos especificos de la base de
datos.
Los comandos de Open SQL no son específicos de la bd. Se convierten en sentencias
SQL a través del database interface y se pasa a la base de datos. No hay que ajustar los
programas que utilizan Open SQL.
Otra ventaja es que se pueden utilizar buffers en tablas locales para que se haga una
lectura más rapida. Los datos se leen del buffer después de realizar las configuraciones
de tabla pertinentes.
Solo incluyen sentencias de tipo DML (Manipulation). No hay comandos de DDL
(Definition) porque se incluyen en el diccionario.
Solo hay que utilizar SQL nativo si alguna función particular que no esta en Open SQL
se necesita.
74
Creación de un solo registro
Para inserta un nuevo registro en la bd, se utiliza el comando INSERT INTO <dbtab>
VALUES <wa>. Para esto primero se rellena el wa. Esta estructura tiene que ser del
mismo tipo que las lineas de la tabla.
El campo cliente (mandante) del wa solo se tiene en cuenta cuando se utiliza la
especificación de CLIENT SPECIFIC. Sino se inserta en el cliente actual.
Las filas también se pueden insertar utilizando vistas. Pero la vista se tiene que crear en
el diccionario con el maintenance status “read and change” y solo pueden contener
campos de tabla.
Códigos que retorna:
-0OK.
-4No se ha insertado porque ya existe una fila con la misma clave.
Sintaxis alternativa: INSERT <dbtab> [CLIENT SPECIFIC] FROM wa.
75
Se puede utilizar el comando INSER <dbtab> FROM TABLA <itab>. La tabla interna
que se especifica tiene que tener el mismo tipo de línea que la tabla de la base de datos.
El campo cliente solo se tiene en consideración con CLIENT SPECIFIC.
Si es posible crear las líneas SY-SUBRC = 0. Sino toda la operación de inserción se
descarta. Si hay error SY-SUBRC = 4. SY-DBCNT contiene el número de filas
insertadas satisfactoriamente.
Con ACCEPTING DUPLICATE KEYS para que pueden haber duplicados.
76
Cambiar varios registros (con condición)
Se pueden realizar cambios de varios registros especificando una tabla interna que tenga
la misma estructura que la tabla y los registros que se tienen que cambiar.
El mandante para tenerlo en cuenta hay que especificarlo.
Puede retornar:
-0 ok
-4 como mínimo una fila no se ha podido cambiar, el resto si.
SY-DBCNT es el número de filas que han sido cambiadas.
77
Modificando un/ varios registros
78
Borrando varios registros con condiciones
Se puede utilizar el where para eliminar varios registros. Hay posibilidad de especificar
el mandante.
Para eliminar todos los registros: DELETE FORM <dbtab> WHERE campo LIKE ‘%’
Códigos que retorna:
-0 se ha eliminado como mínimo un registro.
-4 no se ha eliminado porque el registro especificado no existe.
SY-DBCNT especifica el número de registros eliminados.
Si se quieren eliminar varios registros se puede hacer con una tabla interna en el
comando DELETE. Solo se tiene en cuenta el mandante si se añade CLIENT
SPECIFIED.
Códigos que retorna:
-0 todas las líneas se han borrado.
-4 Como mínimo una línea no se ha borrado; las otras si
SY-DBCNT especifica el número de registros eliminados.
79
Restaurando el estado previo de la base de datos
80
Unidad 12: LUWs y arquitectura
cliente/servidor
Unidad lógica de trabajo SAP (SAP LUW)
Una SAP LUW conssite en cambios en SAP R/3 que lógicamente permanecen juntos.
Estos cambios se llevan a cabo completamente o no se llevan a cabo. El principio del
todo o nada.
En general una transacción de negocio no se lleva a cabo por una única LUW.
Database LUW
Una database LUW consiste en cambios que se ejecutan cuando el estado de la base de
datos se cierra (Commit de base de datos).
Con un database LUW, siempre es posible volver al estado anterior de la misma,
mediante un rollback. Se utiliza la rollback para restaurar el estado de la bd si ha habido
algún error.
Una vez que se da el commit, no es posible descartar el database LUW actual, ya no es
posible volver al estado anterior a este.
En ABAP, mediante los comandos COMMIT WORK y ROLLBACK WORK se
implementa explícitamente los rollback y commit de bd. También hay situaciones en las
que se dan commits implícitamente.
Si se da un error durante el procesamiento de una SAP LUW, debería ser posible volver
a un estado consistente de bd.
Siempre que se de un cambio de pantalla, se lanza un commit de bd implicito. Sin
embargo, debería ser posible mediante una transacción meter bruscamente (bundle) las
entradas de un usuario que forman una SAP LUW mediante una DB LUW y escribir
estos en la base de datos.
81
Arquitectura cliente/servidor de un sistema R/3
DB commits implicitos
Antes de que cada pantalla se visualice, el work process actual se libera en el servidor
de aplicación. Esto libera el work process de la bd y se lanza un db commit implicito.
Casos que se dan commits implicitos:
-Cuando el sistema visualiza una pantalla.
-Cuando el sistema manda un dialog message.
-Cuando hay tanto RFC asíncronas como síncronas.
-Con CALL TRANSACTION y SUBMIT.
82
Unidad 13: Concepto de bloqueos
(Locks)
¿Por qué utilizar bloqueos?
Si varios usuarios están intentando acceder a los mismos recuersos, hay que encontrar
una manera de sincronizar esos accesos para proteger la consistencia de los datos.
Mediante esto, los usuarios piden un bloqueo antes de acceder a datos críticos. Es
importante liberar el bloqueo tan pronto como sea posible para no entorpecer al resto de
usuarios.
83
Bloqueos lógicos
Para mantener bloqueos durante una serie de pantallas, el sistema SAP R3 tiene una
tabla global de bloqueos (global lock table) en el servidor de aplicación, el que se puede
utilizar para realizar bloqueos lógicos para entradas de tablas.
El bloqueo de tabla y el enqueue work process respectivo, manejan el bloque de tabla
(lock table) en un servidor de aplicación único definido del sistema SAP.
También se pueden utilizar los bloqueos lógicos para bloquear registros que todavía no
existen. Esto es apropiado, por ejemplo, cuando se meten nuevas líneas y no es posible
hacerlo con la ayuda de los database locks.
84
foreign key con la tabla primaria. De esta manera se pueden bloquear los registros en
ambas tablas.
El lock module creado contiene como parámetros de entrada los lock parameters que
son contenidos en el objeto de bloqueo. Estos lock parameters son usados para
comunicar al lock module que registros tienen que tener un bloqueo lógico en la tabla
de bloqueo. El sistema propone para estos parámetros los nombres de los campos que
pertenecen a la clave primaria.
Cuando se define un objeto se puede definir el modo (E, X o S).
85
Llamando a lock modules
Usando los parámetros import de la función ENQUEUE que corresponde a los campos
clave en la respectiva tabla, se determinan los registros que se van a bloquear. Estos
parámetros import se llaman lock parameters.
Si no se puede realizar el bloqueo correctamente (sy-subrc <> 0) hay que lanzar un
mensaje .
Al final del dialog program, se puede utilizar el DEQUEUE para eliminar los bloqueos.
No lanzan excepciones los DEQUEUE, si no existe el bloqueo no tiene efecto.
Si se quiere eliminar todos los bloqueos, se utiliza la función DEQUEUE_ALL.
Se aplican la siguientes reglas cuando se llama a un function module con respecto al
parámetro mandante:
-Si el parámetro no se especifica, solo el mandante actual.
-Si se especifica, solo se bloquean los registros de ese mandante.
-Si se especifica con SPACE, el bloqueo se aplica a todos los mandantes.
Para visualiza la tabla de bloqueos se utiliza la transacción SM12.
86
Usando el lock container
Si se utiliza el lock container, se pone en _collect = ‘X’. Esto tiene el efecto de que las
peticiones de bloqueo se almacenan en un contenedor local.
Se puede mandar el contenido del contenedor al lock management (gestor de bloqueos)
con el function module FLUSH_ENQUEUE.
Si uno de los bloqueos del contenedor no se puede crear, el function moduel lanza una
excepción de FOREIGN_LOCK. En este caso ninguno de los bloqueos del contenedor
se llevan a cabo y el contenido del contenedor permanecerá para intentos posteriores.
Se puede eliminar el contenido utilizando el function module RESET_ENQUEUE.
Modo de bloqueo
87
Si se tienen bloqueos, y otros intentan realizar bloqueos sobre los mismos registros, se
actua de la siguiente manera:
-Si existen bloqueos de E o X se rechazan bloqueos de cualquier tipo.
-Si es de tipo S, se permite bloqueo de tipo S. El resto se rechazan.
Si se intenta bloquear un dato más de una vez durante la ejecución del programa:
-Si el bloqueo es de tipo E, se aceptan E y S para el mismo dato.
-Tipo X, se rechazan todos los bloqueos.
-Tipo S, se permiten E y S para ese registro.
88
De este modo te aseguras que los cambios se realicen bajo los bloqueos y que los datos
que se leen, han sido cambiados consistentemente.
89
Unidad 14: Organizando actualizaciones
de base de datos
Cambios desde el programa directamente
Escala de tiempo
Si la transacción ejecuta actualizaciones de base de datos, se deben realizar las
actualizaciones en único paso de dialogo. Esta es la única forma de asegurarse que se
cumple el principio de todo o nada.
Flujo de datos
Si se ejecutan actualizaciones del programa de dialogo, hay que salvar los datos que se
quieren cambiar en el global program data hasta que se realicen los cambios en la base
de datos.
Bloqueos
90
Cambios desde el programa con subrutinas retrasadas
Escala de tiempo
91
Proceso
92
Paso 3: Un programa base lee los datos asociados al LUW desde el log table y se lo
provee al update program.
Paso 4: El update program acepta la transferencia de datos a este y actualiza las entradas
de la base de datos
93
Paso 5: Si el update program se ejecuta bien, el programa base elimina todas las
entradas para la LUW del log table. Si se da un error, las entradas en la log table
continuan pero marcadas como erroneas. Si se da error, se puede notificar vía email.
La transacción SM13 para monitorizar las peticiones de actualización.
Implementación técnica
Módulos update
La implementación técnica del concepto de update, requiere, en adición al programa que
monitoriza el dialogo de usuario, un programa update que tiene que ser implementado
como un function module especial (update module).
Estos módulos tienen una interfaz para transferir información. Solo incluyen parámetros
importing y tables. Los parámetros export y las excepciones se ignoran. Los módulos de
función contienen las sentencias de actualización de la base de datos.
Escribiendo/cerrando peticiones
94
Se pueden crear peticiones de update desde el dialogo del programa llamando a las
funciones de actualización pertinentes. Se utiliza la adició IN UPDATE TASK. Con
esto la función no se ejecuta inmediatamente, pero se escribe en el log table.
Todas las peticiones de actualización se almacenan en una SAP LUW bajo la misma
clave de actualización.
Solo cuando se ejecuta una COMMIT WORK se cierra la unidad. Se informa al sistema
que hay un paquete para ser procesado.
Descartando peticiones
A veces es necesario descartar todas las peticiones de cambio. Este es el caso cuando se
termina una transacción.
Para descartar los cambios se utiliza ROLLBACK WORK o un mensaje de tipo A.
El ROLLBACK WORK no afecta al contexto del programa, se mantienen los objetos
de datos sin cambiar y no se resetean.
Proceso
La tarea de un módulo de update es pasar las peticiones para las actualizaciones de base
de datos a la bd y para evaluar sus códigos de retorno.
Si se quiere lanzar un db rollback en el módulo de actualización, se emite un mensaje de
tipo A. Esto también termina el proceso del SAP LUW actual. La entrada de log
correspondiente al SAP LUW se marca con un flag conteniendo un error. El mensaje de
terminación también mete en el log.
Se puede utilizar la transacción SM13 para examinar el log.
El sistema envía un mail al usuario, diciendole que el LUW de actualización ha
terminado. Para esto como se ha mencionado con anterioridad, hay que configurar los
parámetros del perfil rdisp/vbmail y rdisp/vb_mail_user_list.
En un módulo de actualización no se pueden utilizar las sentencias COMMIT WORK o
ROLLBACK WORK.
95
Poniendo bloqueos en el update
Modos de actualización
Actualización asíncrona
En actualizaciones asíncronas, el programa de diálogo y el programa de actualización se
ejecutan separadamente.
-El programa de diálogo escribe las peticiones de cambio en el log table y cierra la
LUW con un COMMIT WORK.
-La actualización iniciada por el COMMIT WORK procesa la petición de cambio. El
programa de dialogo continua. El sistema no espera a que termine la actualización.
-El programa de actualización se ejecuta en un proceso de trabajo especial.
Las actualizaciones asíncronas son prácticas en transacciones en las que las
actualizaciones de bd se llevan a cabo en un tiempo largo y el tiempo de respuesta de
cara al usuario es importante.
Las actualizaciones asíncronas es la técnica estándar utilizada en procesamiento de
diálogo.
Se puede implementar la log table VBLOG como un fichero de cluster en el sistema o
reemplazar este con las tablas VBHDR, VBMOD, VBDATA y VBERRROR.
96
Actualización síncrona
Si se tiene una actualización síncrona que se lanza a través de un COMMIT WORK
AND WAIT, el programa de diálogo espera hasta que la actualización termina para
seguir procesando el programa.
Se utiliza este tipo de actualización si el programa depende de los resultados de la
actulización.
Se puede saber si el procesamiento de actualización ha sido bueno con SY-SUBRC.
Durante la fase de espera, el programa de diálogo esta en un estado “rolled out”
(enrollado). Esto quiere decir que el proceso de trabajo de diálogo respectivo se libera
para un uso posterior. Cuando se completa la actualización, el sistema vuelve a asignar
un proceso de trabajo de dialogo libre para un procesamiento posterior.
Actualización local
97
Actualizaciones V1 y V2
Tipos
Dos tipos de módulos de actualización: V1 y V2. Solo si las peticiones V1 se ejecutan
correctamente, se procesan las peticiones V2. Las V2 son actualizaciones de
estadísticas…
Las V1 se pueden reiniciar o no. Si ocurre un error, se pueden reiniciar a mano usando
la transacción SM13. Se hace esto después de eliminar el error. Las V2 se pueden
reiniciar siempre después de un error.
Las V2 tienen una opción collective run. Las actualizaciones correspondientes no se
llevan a cabo tras la V1, pero solo si se ha llamado al collector program RSM13005.
Generando peticiones V1 y V2
Las actualizaciones V1 crean peticiones en la tabla VBLOG para actualizaciones
síncronas y asíncronas. Para actualizaciones locales, las peticiones V1 se retienen en
memoria.
Las peticiones V2 se almacenan siempre en la tabla VBLOG.
Ejecución de actualización
98
Poniendo bloqueos en la actualización
99
Perform on commit en la actualización
Las rutinas form no se ejecutan hasta que se ha terminado de procesar el último módulo
de actualización.
100
Unidad 15: Procesamiento de LUW
complejas
Runtime arquitectura and storage acces by programs
called within programs
Llamadas síncronas
Los function modules también se pueden llamar asincronamente para ejecutar procesos
en paralelo. Para esto la llamada tiene que tener la adición de STARTING NEW TASK
task_name.
101
Las llamadas de function modules asincronas son procesadas en paralelo con indepencia
del programa llamador.
Se pueden recibir las salidas de la función (RECEIVE RESULTS FORM FUNCTION)
en una fase de procesamiento posterior al programa lamador.
Los modulos de función que se llaman con STARTING NEW TASK tienen que
marcarse como remote-capable modules.
Pueden haber varias sesiones externas para un user session. Pueden haber varias
sesiones internas para cada sesión externa.
Se puede utilizar la SAP memory y la ABAP memory para pasar datos entre diferentes
programas.
Cada sesión SAP tiene una SAP memory que puede ser accedida desde el resto de
modos de la sesión. La SAP memory sirve como area de almacenamiento para valores
de campo y se retiene durante la sesión. Es apropiado para transferir datos entre las
external sessions.
Cada external session tiene una ABAP memory. El acceso a la ABAP memory es solo
posible desde la internal session respectiva. Es un área de almacenamiento para
variables internas de programa que se pueden pasar entre las internal sessions de una
external session. Cuando se cierra una external session, la ABAP memory se libera.
102
Llamadas sincronas a function modules
103
Submit
Leave to transaction
104
Llamadas asincronas a function modules
Los modulos de función que han sido llamados asincronamente son procesados en el
mismo servidor de aplicación en una nueva sesion abierta. El procesamiento se lleva a
cabo en paralelo.
Se pueden recibir las salidas de la función (RECEIVE RESULTS FROM FUNCTION).
105
Los módulos de función tienen una interfaz para pasar datos entre el programa llamador
y el propio módulo de función.
Si se llama a un programa ABAP que tienen una selection screen estándar, se pasan los
valores a los input fields en la selection screen. Hay dos opciones:
-Se puede introducir una variante para la llamada (La adición a SUBMIT, USING
SELECTION-SET.
-Se pueden introducir los valores actuales para los input fields de la selection screen
durante la llamada.
Submit….With
106
El las variables de origen y destino tienen que tener el mismo formato en el programa de
lectura y escritura.
La sentencia FREE MEMORY ID <id> borra respectivamente el data cluster.
La sentencia FREE MEMORY sin la adición de ID borra toda la ABAP memory de la
external session actual.
Se puede usar IMPORT APRA leer variables en el data cluster.
Usando el object navigator, se puede definir parameter IDs para el sistema SAP R/3. El
parámetro ID no tiene que tener mas de 20 caracteres.
Usando la sentencia SET PARAMETER ID, se pueden dar valores a la SAP Memory de
la sesión actual para el parámetro especificado. Este valor se puede leer por todos los
programas de la misma sesión utilizando el GET PARAMETER ID.
Un parámetro en una SAP memory también se le puede dar valor a través de una
entrada de un usuario en un campo de la pantalla. Para esto el campo de la pantalla,
tiene que estar definido a través de un elemento de datos que esta enlazado con el
parameter ID respectivo. Las funciones SET deben ser activadas en las propiedades del
campo de la pantalla.
Un input field de una pantalla puede visualizar al el valor de ese parámetro en la SAP
memory como entrada propuesta. Se tienen que dar los siguientes prerrequisitos:
-El input field de la pantalla tiene que estar definido a través del elemento de datos que
esta enlazado al correspondiente parameter ID.
-Las funciones GET de los campos de la pantalla estan activados.
-El programa solicita el campo de pantalla solo con el valor inicial.
De esta manera los programas y las pantallas pueden intercambiar datos a través de la
SAP memory durante la misma sesión.
107
Valores por defecto a través de la SAP memory
El ejemplo muestra como dar valores por defecto a las input fields de una transacción
llamada por un programa. En este sentido se puede ejecutar la transacción sin
visualizar la pantalla inicial. (AND SKIP FIRST SCREEN).
Se tienen que dar los prerrequisitos indicados anteriormente.
Los modulos de función se ejecutan en la misma SAP LUW como los programas que
les llaman.
Los programas que se utilizan usando SUBMIT AND RETURN, CALL
TRANSACTION, SUBMIT o LEAVE TO TRANSACTION se ejecutan en una LUW
separada.
Si se ejecuta una SUBMIT AND RETURN y CALL TRANSACTION, la LUW del
programa llamador continua hasta que se completa el programa llamador. Las LUW del
programa llamador y llamado se ejecutan en independientemente uno de otro. Ocurre lo
siguiente:
-Los cambios directos de líneas se actualizan a la bd en cada cambio de pantalla.
108
-Los flags de update y calls utilizando PERFORM ON COMMIT requieren un
COMMIT WORK separado en el correspondiente SAP LUW.
Si se usan SUBMIT y LEAVE TO TRANSACTION, la SAP LUW del programa
llamador termina.
109
Otros valores de MODE: A visualizar y E visualizar solo en caso de error.
Usando el call parameter UPDATE, se puede sobrescribir el modo de actualización por
defecto para la transacción que se llama, que normalmente es asincrona. Posibles
valores para UPDATE: A asincrona, S sincronía y L local.
110
Cualquier intento de bloqueo desde los programas se rechaza con la excepción
FOREIGN LOCK.
Si se tiene un programa llamado utilizando SUBMIT o LEAVE TO TRANSACTION,
el programa llamador termina inmediatamente. Todos los bloqueos que se han puesto
hasta el momento se borran automáticamente.
Las peticiones de bloqueos del mismo usuario desde sesiones diferente, se tratan como
si fuesen de diferentes usuarios.
111
Unidad 16: Asignación de números
Asignación de números
Durante la asignación de números los business objects son asignados a intervalos de
números específicos.
Se llevan a cabo externamente o internamente. Con asignación externa, el usuario
introduce un número que es chequeado por el sistema para ver si ha sido reservado para
una asignación externa. Con la asinganción interna, el sistema asigna directamente un
número a un business object. Hay diferentes rangos de números para la asignación
interna y externa.
Cuando se asignan números hay que poner atención a regulaciones legales y criterios
específicos de aplicación.
Paraa asignar números sin problemas se necesita un range object, un range interval bien
mantenido y acceso a estos dos desde la aplicación.
El mantenimiento de objetos number range esta en el menú de desarrollo junto con otras
herramientas. (Transacción SNRO).
Los nombre deben empezar por Y o Z.
Se pueden organizar de acuerdo a los subobjetos.
Si se quieren organizar en función del año fiscal, hay que seleccionar el campo to-year
flag.
La longitud de los números no se puede meter directamente. Hay que introducir un
dominio de tipo NUMC o CHAR y una longitud hasta 20.
Si se mete un código de transacción en el campo number range transaction, hay que
mantener el intervalo para este rango cuando se llama al código.
En el campo Warning% hay que introducir un valor entre 0.1 y 99.9. Esto lanza un
warning cuando quedan menos números para asignar que ese porcentaje.
112
Number range intervals
Subobjetos
113
Getting numbers (de un internal number range)
114
Getting number range information
El dato para el number range se almacena en la tabal NRIV. En esta tabla, existe una
entrada para cada number range.
Si un objeto number range no se ha utilizado buffer, el sistema lee directamente de la
base de datos cada vez que se asignan nuevos números.
Ventajas:
-Asignación de números sin huecos.
-Secuencia cronológica de números.
Desventajas:
-Bloqueos de bd.
-Posibles efectos de multiplicación.
115
En el módulo de función NUMBER_GET_NEXT, se utiliza la sentencia SELECT
SINGLE….FOR UPDATE, para acceder a la tabla NRIV. Esto bloquea la tabla
relevante en la bd hasta que se completa el LUW actual.
Esto puede implicar un tiempo de espera considerable cuando múltiples programas,
piden números al mismo number range.
116
Acceso paralelo a number range
Se permite el acceso paralelo a varios servidores. La serialización surge para cada uno
de estos servidores individuales.
Todos los números son asignados. No hay huecos. Los números no se asignan en orden.
Para procesar objetos number range, los number range, y grupos, módulos de función
adicionales permite editar dialogos, acceso a bd, y otras tareas.
Hay cinco grupos de function groups.
Si solo se esta interesado en utilizar las funciones estándar, solo se necesita el function
group SNR3.
117
Unidad 17: Creando change documents
Principio de creación change documents
118
Para poder registrar (log) los cambios a un business object en un change document, se
tiene que definir un objeto change document en el sistema.
Hay que incluir las tablas correspondientes.
El sistema después crea un módulo de creación de documento así como dos Include
programs con las definiciones de objetos de datos. Esto se da durante la generación o
cuando se llama al módulo de creación de documento.
Los dos include programs se incluyen en el programa de aplicación y hace que los
change documents sean escritos cuando ciertos requerimientos se cumplan.
Si se llama a un módulo de creación de documento, este crea un documento solo si un
campo relevante del documento cambia en el registro de aplicación.
Los change documents se almacenan en el cluster CDCLS.
La cluster CDCLS contiene las estructuras CDHDR (cabecera), CDPOS (item del
documento) PCDHDR (planned change document: header) y PCDPOS (planned change
document: ítems).
Los números de change document se generan automáticamente cuando se crea un
change document.
Un change document consiste en general document data y una document header con sus
document ítems.
El general document data incluye:
-Object class: Nombre del objeto change document usado.
-Object ID: En la creación del documento, se puede decidir el nombre del documento.
-Change number: Número asignado automáticamente al documento.
Un document header contiene el nombre de la changed table, la persona que cambia el
documento, la fecha y hora etc. Un document header contiene varios document ítems.
Un document item consiste en la clave del registro cambiado, el nombre del campo
cambiado, y los valores viejos y nuevos del campo. Cada document item describe el
campo cambiado en el registro cambiado.
Cuando se llama al modulo de creación de documento, se crea un documento solo si al
menos un campo relevante del documento ha cambiado en el registro de aplicación.
Solo los cambios para estos campos se registran como document ítem.
119
Creación de un objeto change document
Para crear un change document primero hay que definir un objeto change document.
Desde el menú de SAP se elige ToolsABAP WorkBenchDevelopmentFurther
tools change documents (transacció SCDO).
El nombre tiene que empezar por Y o Z.
El objeto change document incluye todas las tablas relevante para los cambios
realizados.
Tiene que haber nuevos valores en cada uno de los work areas listados de las tablas.
Para cada work area de tabla, hay que especificar una estructura interna que contiene el
registro viejo cuando se le llama después.
Hay que especificar el nombre de un functio group para almacenar los módulos de
función.
También pide una abreviación para asignar los nombres de las partes de programas
(includes) generados.
Después de la generación se tiene un Include program con las definiciones de datos
globales para la aplicación de programa. Tambien se tieen un include para cuando se
llama al modulo de generación de documento, que también habra que incluir en el
programa. Después habra que incluir la llamada en el sitio apropiado en el programa.
120
Estructura de los includes generados
En el ejemplo FZBOOKCDT:
-Contiene una declaración global de datos.
-Declaración de datos específicos del objeto de cambio.
En FZBOOKCDC se contiene la llamada para el modulo de creación de documento.
En la aplicación hay que incluir los dos includes y llamar a la rutina form para la
creación de documento en el lugar adecuado.
121
Visualización de change documents
Los módulos de función de SAP estan disponibles para todas las tareas requeridas en el
procesamiento de change documents.
Se agrupan juntas en 6 function groups.
Los módulos de función del grupo SCD0 se llaman por el document function module
que se ha generado específicamente para el objeto.
122
APENDICE
Autorization Checks
Para asegurar que los datos del sistema SAP están protegidos contra accesos
desautorizados y que cada usuario puede acceder solo a los datos para las cuales tiene
autorización explicita, el application Developer debe implementar authorization object
en cada una de las aplicaciones del programa.
Authorization Checks
123
En el application program, se debe llevar a cabo chequeos antes de la ejecucion de las
tareas requeridas por el caller. Para ello, se debe usar la sentencia AUTHORITY-
CHECK. Se especifica un authorization object junto con los campos a evaluar.
El uso de autorización checks evita los típicos errores que ocurren a causa de errores
sintácticos o incluso por un incorrecto chequeo del resultado.
SAP Buffers
124
SAP database table puede ser almacenadas en el nivel application server. Los objetivos
del buffering son:
• Reducir el tiempo necesario para acceder a los datos con los accesos a lectura: Se
puede acceder más rápidamente a los datos de la application server que a los de la
base de datos.
• Reducir la carga en la base de datos: Leyendo los datos desde los application
server buffers se reduce el número de accesos a la base de datos.
Cuando el sistema ejecuta un comando Native SQL, este atraviesa la database interface,
por lo que no usa la table buffer. No es conveniente utilizar sentencias Native SQL para
tablas que son almacenadas.
125
Server leen es tabla a intervalos de tiempo. Si un application Server encuentra una
entrada relevante, se marca el contenido de su buffer como no puede ser
actualizado (“no longer up-to-date”).
• El siguiente acceso a lectura a los datos del buffer es llevado a cabo por la
database interface en la base de datos. Se actualiza el buffer al mismo tiempo.
El tiempo entre los accesos a lectura a la tabla DDLOG puede ser fijados usando el
profile parameter //rdisp/bufreftime.
Tipos de buffers
Hay tres tipos de buffers:
• Resident buffering (full buffering): Se carga toda la tabla en el table buffer
cuando se accede a la tabla por primera vez.
• Generic buffering: En technical settings, se debe especificar una generic key
para la tabla en el diccionario. Esta key es utilizada para dividir el contenido de la
tabla en generic areas. Las entradas de la generic area son cargada en el table
buffer. Las tablas dependientes de mandante usan este tipo de buffer para cada
cliente.
• Single-record buffering: La base de datos solo lee un único registro, y lo
almacena en el table buffer.
Native SQL
Native SQL permite llevar a cabo operaciones en la base de datos que superan el
comando estandar Open SQL. Contiene todas las sentencias estaticas de la data
definition language (DDL) y el data manipulation language (DML) de la relational
database system.
Cluster Tables
Data Cluster
Un data cluster es una combinación de data objects. Los data objecs son campos,
structured field, tablas internas, y complex structured derivados de estos. Se procesa los
data clusters usando los comandos EXPORT, IMPORT y DELETE. Los data cluster
pueden ser almacenados en cluster databases.
Export
126
La tabla INDX es una cluster database para propósitos generales. Las cluster database
deben ser creadas como transparent tables en el diccionario y deben tener una estructura
estandarizada.
Para un EXPORT, hay que especificar en una lista los data objects de su cluster.
Para llevar a cabo el export, hay que especificar el cluster database y la application area
dentro del cluster database. Para identificar el cluster se usa el cluster ID. Si se quiere
definir el nombre de un data object en el cluster que es diferente en otro programa, hay
que usar la adición FROM. Los data objects puede ser listados en cualquier orden.
La sentencia TABLES declara una application area para la cluster database al comienzo
del programa.
Import
Para una IMPORT, se necesita listar solo un subconjunto de los data objects del cluster
en cualquier orden. Si se quiere definir el nombre de un data object en el programa que
es diferente en el cluster, se usa la adicion TO.
DELETE siempre borrara todo el cluster. No se puede borrar un data object individual
dentro del cluster. Devuelve un código.
127
ABAP Cluster Database
128
La key consiste de un client, area, cluster ID, y numero de registros posterior. El cluster
ID tiene por defecto una longitud de 22 bytes, pero en una cluster database puede tener
cualquier longitud.
Cluster tables:
• Solo contiene datos del cluster
• Menos accesos para grandes cantidades de datos
• Datos heterogéneos
• Técnicas flexibles
• No es posible linkar los datos.
• Los accesos requieren el cluster ID y la application area
• Los accesos solo devuelven un cluster
Transparente tables:
• Muchos accesos a los datos almacenados en varias tablas.
• Los datos pueden ser linkados y evaluados.
• Selección con cualquier condición lógica.
SAP Locks
Update y Lock Durations: _SCOPE = 1
Para _SCOPE = 1, el dialog program contiene los locks (bloqueos) que han generado.
Los locks permanecen en conjunto hasta que son liberados, usando el function module
DEQUEUE_<object>, o implícitamente al final del programa. Esto incluye las
sentencias LEAVE PROGRAM, LEAVT TO TRANSACTION <ta>, y SUBMIT
<program>, y el termination message (mensaje tipo A).
129
Update y Lock duration: _SCOPE = 3
Si se usa asynchronous update y se quiere asegurar que los locks generador en el dialog
program permanecen mas tiempo que la V1 update function module esta activa, se
puede usar _SCOPE = 3. En este caso, el lock es compartido entre el dialog program y
el update program.
Los locks generados con _SCOPE = 3 deben ser eliminados tanto por el dialog program
como por el update program.
Una BAPI es una interfaz bien definida para procesos y datos de una business
application system, implementada como un método de un objeto en el Business Object
Repository (BOR).
130
Un objeto en el BOR puede tener muchos métodos, de los cuales uno o más están
implementados como BAPIs.
Las BAPIs pueden tener varias funciones, entre ellas: generar un objeto, consultar
atributos de un objeto, y cambiar atributos de un objeto.
Propiedades de la BAPI
• Son orientadas a objetos.
• Stable interface: La interfaz de una BAPI es “frozen” (congelada).
o Libera function module para los clientes.
o Linka data elements a los interface parameter.
• Puede ser usada internamente y externamente.
• No contienen presentation layer: Los resultados se visualizan externamente por
cada caller.
• Siempre se llama a las BAPIs de forma sincronía. Hay una excepción en donde se
les llama de forma asíncrona, via ALE en un IDoc.
• Implementan los database changes a traves de update task.
• En vez del COMMIT WORK, ahora se debe usar
BAPI_TRANSACTION_COMMIT y BAPI_TRANSACTION_ROLLBACK.
Las BAPIs realizan por si mismas el comando COMMIT WORK, es decir, una BAPI
es sincronía con un LUW o transaction. Esto se muestra en la documentación, y es la
única manera de que el usuario pueda encontrar donde están los COMMIT WORK.
131
BAPI Transaction Model para Release 4.0
El Commit control debe ser eliminado de las writing BAPIs, en otras palabras, de las
BAPIs que causan los cambios de base de datos. Se debe llamar al RFC-capable
function module BAPI_TRANSACTION_COMMIT.
En la transaction model usada para desarrollar BAPIs, una transacción representa una
processing unit o logical unit of work (LUW).
Las operaciones que cambien la base de datos deben ser realizadas por el update task.
Para cerrar LUW processing iniciados por la BAPI call, se usa el function module
BAPI_TRANSACTION_COMMIT.
132
o Se realiza un commit con todas las actualizaciones que se han hecho
durante el dialog step en curso.
o Todos los database locks son liberados.
o Todos los databse cursors abiertos son cerrados (incluso si están abiertos
usando WITH HOLD).
• Update son lanzadas (CALL FUNCTION IN UPDATE TASK)
o COMMIT WORK no espera al final del update
o COMMIT WORK espera al final del update.
o Para un local update: ejecución inmediata de los update modules.
• Los locks (_SCOPE = 2):
o No se liberan si no surge ninguna update requests
o Son transferidos al update y liberados cuando esta acaba.
ROLLBACK WORK
• Los DB LUW (DB Rollback) en curso son terminados
o Se deshacen todos los cambios hechos en el dialog step en curso.
o Todos los locks son liberados.
o Se cierran todos los cursores abiertos.
• Los datos en el SAP LUW correspondiente son eliminados:
o Se rechaza el registro de los update modules registrados con CALL
FUNCTION IN UPDATE TASK.
o Lo mismo se aplica a las subrutinas registradas con PERFORM ON
COMMIT.
o No se ejecutan los function modules que fueron registrados por
transactional o queued RFC (CALL FUNCTION IN BACKGROUND
TASK).
• Los SAP locks son liberados (_SCOPE = 2).
133