Вы находитесь на странице: 1из 70

Dialog Programming

Overview

SAP System : Dialog Processing


SAP GUI
(Report)
Report zpsm1.

Request

Application Server
Store request to
queue 3

Tables customers.

List

Select single * from

Generate
1
10
Screen(List)
Send Request

Send List

Write: / customersname.

Dispatcher
2

Request
Queue Send request to
WP4

customers where id =
1.

Search for
free WP
Check Program in
Program
Buffer
5

SAP Buffer
Program

Database Server

SQL
Request

Load&Gen
Program

Execute
ABAP
statement

Dialog WP : Executable Program


Dialog WP
TaskHandler

Local Memory
Memory Space

ABAP Processor
DYNPRO Processor

DB Interface

Result Set Memory

Database

List Buffer

Types of ABAP Report


1
3

1. Report Listing

2. Drill-down Report
3. Control-break Report
4. ALV Report

SAP System : Dialog Processing


SAP GUI
(DIALOG)
Program sapmzex001.

Request

Application Server
Store request to
queue 3

Include .

Screen

Set screen 100.

Generate Dialog
1
10
Screen
Send Request

Send List

Dispatcher
2

Request
Queue Send request to
WP4

Search for
free WP
Check Program in
Program
Buffer
5

SAP Buffer
Program

Database Server

SQL
Request

Load&Gen
Program

Execute
ABAP
statement

Dialog WP : Dialog Program


Dialog WP
TaskHandler

Local Memory
ABAP Memory

ABAP Processor
DYNPRO Processor

DB Interface

Result Set Memory

Database

Screen Buffer

Dialog Program :
Transaction

Dialog Program Component


Transaction Code
Transaction Code

Dialog Program
Dialog Program

Program Naming Convention : SAPM

Screen : 100
(Screen Layout)

ABAP Module Pool

PAI

ABAP Module Pool

Flow Logic

Screen : 200
(Screen Layout)

PBO

PBO

ABAP Module Pool

PAI

ABAP Module Pool

Flow Logic

SAP Transaction
DB Commit

DB Commit

An SAP transaction consists of Dialog steps. A Dialog


step begins when the user press Enter,activates a
function by pressing a function key,double-clicks or
chooses a function from a menu.It ends when the next
screen is display
In the course of a Dialog step,The PAI modules
belonging to the current screen and the PBO modules
belonging to the next screen

Data Transfer (Local Memory)


Local Memory

Screen Work Area

ABAP Work Area

ok_code

Screen Buffer
Element List

PBO

ABAP Memory Space


customers
id

0000000

customers-id
customersname

PAI

ok_code

name

city

Flow Logic

Process Before Output(PBO)

After it has processed all of the modules in the


PBO processing block, the system copies the
contents of the fields in the ABAP work area to
their corresponding fields in the screen work
area.

Process After Input(PAI)

Before it processes the first module in the PAI


processing block, the system copies the contents
of the fields in the screen work area to their
corresponding fields in the ABAP work area.

OK Code Field in Screen


OK Code Field or
Command Field
(ok_code in Element
List)

Defining Screen (4 Steps)

Screen Attribute
Screen Layout
Flow Logic
Element List

Element
List(ok_code field)

Flow Logic in Screen 100


PROCESS BEFORE OUTPUT.
MODULE STATUS_0100.
PROCESS AFTER INPUT.
MODULE USER_COMMAND_0100.

PBO in Screen 100


MODULE status_0100 OUTPUT.
SET PF-STATUS 0100.
SET TITLEBAR 0100.
ENDMODULE.

PAI in Screen 100


MODULE user_command_0100 INPUT.
CASE ok_code.
WHEN EXIT.

Leave program

SET SCREEN 0. LEAVE SCREEN. Leave to

screen 0

WHEN SAVE.
UPDATE customers.
MESSAGE S000(38) WITH Update OK.
SET SCREEN 50. LEAVE SCREEN.
ENDCASE.
ENDMODULE.

How to Create Dialog


Program

Transaction SE80 : Create Dialog


Program
Create Screen(4 steps)
Screen Attribute
Screen Layout
Flow Logic(PBO,PAI)
Define Variable ok_code in Element
List
Define Data Object in ABAP Work Area
at TOP Include(Tables, Data,...)

Example I
Maintain Customers Data
Screen : 100

Screen : 200

Example I

Create Dialog Program SAPMZEX<nn>


for changing Customers table
Screen 100
Field customers-id
Screen 200
Field customers-id and customersname

Example I

Screen 100
PROCESS BEFORE OUTPUT.
MODULE STATUS_0100.
PROCESS AFTER INPUT.
MODULE USER_COMMAND_0100.

Example I

Screen 100
MODULE status_0100 OUTPUT.
SET PF-STATUS 0100.
SET TITLEBAR 0100.
ENDMODULE.

Example I

Screen 100
MODULE user_command_0100 INPUT.
CASE ok_code.
WHEN BACK.
LEAVE PROGRAM. leave to screen 0
WHEN space. if not assign Enter Key
SELECT SINGLE * FROM customers
WHERE id = customers-id.
LEAVE TO SCREEN 200.
ENDCASE.
ENDMODULE.

Example I

Screen 200
PROCESS BEFORE OUTPUT.
MODULE STATUS_0200.
PROCESS AFTER INPUT.
MODULE USER_COMMAND_0200.

Example I

Screen 200
MODULE status_0200 OUTPUT.
SET PF-STATUS 0200.
SET TITLEBAR 0200.
ENDMODULE.

Example I

Screen 200

MODULE user_command_0200 INPUT.


CASE ok_code.
WHEN BACK.
LEAVE TO SCREEN 100. set screen 100
WHEN SAVE.
UPDATE customers.
MESSAGE S000(38) WITH Update OK!.
LEAVE TO SCREEN 100.
ENDCASE.
ENDMODULE.

Example I

TOP Include

TABLES customers.
DATA ok_code TYPE sy-ucomm.

Create Transaction Code

Transaction Code : ZEX<nn>

Exercise
Create Dialog Program :
SAPMZCUST<nn>
Transaction Code : ZCUST<nn>

Exercise : Customers
Maintenance
Screen : 100

Screen : 200

Setting the Cursor Position


Dynamically
PROCESS BEFORE OUTPUT.
MODULE STATUS_0200.
MODULE set_cursor.

MODULE set_cursor OUTPUT.


SET CURSOR FIELD CUSTOMERS-CITY
OFFSET 3.
ENDMODULE.
Cursor Position

Avoiding the Unexpected


Processing Step of ok_code
Field

1. Auxiliary OK_CODE
Variable

TOP Include

TABLES customers.
DATA ok_code TYPE sy-ucomm.
DATA save_ok TYPE sy-ucomm.

Example I - Change

Screen 100 : PAI


MODULE user_command_0100 INPUT.
save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
WHEN BACK.
LEAVE PROGRAM.
WHEN space.
SELECT SINGLE * FROM customers WHERE id = customersid.
LEAVE TO SCREEN 200.
ENDCASE.
ENDMODULE.

Example I - Change

Screen 200 : PAI


MODULE user_command_0200 INPUT.
save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
WHEN BACK.
LEAVE TO SCREEN 100.
WHEN space.
LEAVE TO SCREEN 200.
WHEN SAVE.
UPDATE customers.
MESSAGE s000(38) WITH Update OK!.
LEAVE TO SCREEN 100.
ENDCASE.
ENDMODULE.

2. Specify the Enter Function at GUI


Status

Check Enter Function

Screen 100 : PAI


MODULE user_command_0100 INPUT.
CASE ok_code.
WHEN BACK.
LEAVE PROGRAM.
WHEN ENTE.
SELECT SINGLE * FROM customers
WHERE id = customers-id.
LEAVE TO SCREEN 200.
ENDCASE.
ENDMODULE.

3. Clear OK_CODE at PBO

Screen 100 : Flow Logic


PROCESS BEFORE OUTPUT.
MODULE STATUS_0100.
MODULE clear_ok_code.
PROCESS AFTER INPUT.
MODULE USER_COMMAND_0100.

Clear OK_CODE at PBO

Screen 100 : PBO


MODULE status_0100 OUTPUT.
SET PF-STATUS 0100.
SET TITLEBAR 0100.
ENDMODULE.
MODULE clear_ok_code OUTPUT.
CLEAR ok_code.
ENDMODULE.

Checking User Input

Example II
Maintain Customers Data
Check Input Data Manually

Example II

Screen 100 : PAI


MODULE user_command_0100 INPUT.
...
WHEN SPACE.
SELECT SINGLE * FROM customers WHERE id = customers-id.
IF sy-subrc <> 0.
MESSAGE S000(38) WITH Customers data not found.
LEAVE TO SCREEN 100.
ELSE.
LEAVE TO SCREEN 200.
ENDIF.
ENDCASE.
ENDMODULE.

Example III
Maintain Customers Data
Check Input Data Using Field
Command

Example III Field Statement

Screen 100 : Flow Logic (PAI)


PROCESS AFTER INPUT.
FIELD customers-id MODULE
user_command_0100.

Example III

Screen 100 : PAI


MODULE user_command_0100 INPUT.
...
WHEN SPACE.
SELECT SINGLE * FROM customers WHERE id = customers-id.
IF sy-subrc <> 0.
MESSAGE E000(38) WITH Customers data not found.
ELSE.
LEAVE TO SCREEN 200.
ENDIF.
ENDCASE.
ENDMODULE.

Field Input Checking

If you want to check input values in the


module pool and start dialog in the event
of a negative result,you use the FIELD
statement with the addition MODULE.
If the module results in an error(E) or
warning(W) message,the screen is
redisplayed without processing the PBO
modules.The message text is displayed and
only the field being checked by this module
becomes ready for input again

Field Statement With More Than 1


Field

Screen 100 : Flow Logic (PAI)


PROCESS AFTER INPUT.
CHAIN.
FIELD: customers-id,customers-custtype
MODULE user_command_0100.
ENDCHAIN.

PROCESS AFTER INPUT.


CHAIN.
FIELD customers-id MODULE user_command_0100.
FIELD customers-custtype MODULE user_command_0100.
ENDCHAIN.

Field Statement & Data Transport


PROCESS AFTER INPUT.
Transfer f3,f4
MODULE a.
Call module a
FILED f1 MODULE b. Transfer f1
Call module b
FILED f2 MODULE c.
Transfer f2
Call module c
MODULE d.
Screen 100
f1
f3

f2
f4

Call module d

Required Field

Required Field

Required Field

At exit-command

Function Type : Exit


Command

At exit-command

When user chooses a function with type


E,the screen flow logic jumps directly
to the following statement
MODULE <module> AT EXIT-COMMAND
No other screen fields are transported to
the program except OK Code field

At exit-command

Screen 100 : Flow Logic


PROCESS BEFORE OUTPUT.
MODULE STATUS_0100.
PROCESS AFTER INPUT.
MODULE exit AT EXIT-COMMAND.
MODULE USER_COMMAND_0100.

At exit-command

Screen 100 : PAI


MODULE exit INPUT.
CASE ok_code.
WHEN EXIT.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE.

LEAVE PROGRAM.

Function Module
(POPUP_TO_CONFIRM_LOSS_OF_DAT
A)

Example IV
Maintain Customer Data
Popup confirmation data using
function
POPUP_TO_CONFIRM_LOSS_OF_DATA

Example IV

TOP Include
...
DATA ans.

Example IV

Screen 100 : PAI


MODULE exit INPUT.
CALL FUNCTION POPUP_TO_CONFIRM_LOSS_OF_DATA
EXPORTING
textline1 = Are you sure?
titel
= Please Confirm!!!
IMPORTING
answer = ans.
IF ans = J. J = Ja in German= Yes in English
LEAVE PROGRAM.
ELSE.
ENDIF.

ENDMODULE.

SAP Transaction : Enqueue Lock


Object

SAP Transaction & DB Transaction

Each Dialog step can contain update


requests(INSERT,DELETE,UPDATE)
After each Dialog step,the R/3 system
automatically passes a database commit to the
database system.The database system then
distributes the update requests from the
individual dialog steps across several database
transactions
A rollback in one Dialog step has no effect on
database updates performed in previous Dialog
steps

SAP Transaction(LUW)
DB Commit

DB LUW

SAP LUW

DB Commit

SAP Database Maintenance Steps

Check data locking by calling function


ENQUEUE_<lock object>
object
Read data from Database Ex. Select
single

Data Processing Ex. Update ...


Release lock by calling function
DEQUEUE_<lock object>
object

SAP Lock Object

Transaction SE11 : Lock object

ENQUEUE_<lock object>
object
DEQUEUE_<lock object>
object

SAP Lock Object : Function


Module

Example IV

ENQUEUE /DEQUEUELock Object(SE11)


CALL FUNCTION ENQUEUE_EZCUST<nn>
CALL FUNCTION DEQUEUE_EZCUST<nn>

User 1

User 2

Example IV (I)

Screen 100 : PAI


MODULE user_command_0100 INPUT.
...
WHEN SPACE.
CALL FUNCTION ENQUEUE_EZCUST00
EXPORTING

id = customers-id
EXCEPTIONS
...
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ELSE.
SELECT SINGLE * FROM customers WHERE id = customersid.

Example IV (II)

Screen 100 : PAI


MODULE user_command_0100 INPUT.
...
WHEN SPACE.
CALL FUNCTION ENQUEUE_EZCUST00
EXPORTING
message id sy-msgid type
id = customers-id
sy-msgty number
...
sy-msgno
IF sy-subrc <> 0.
with sy-msgv1 sy-msgv2
CONCATENATE Data was locked by : sy-msgv1
INTO
sy-msgv3
mess.
sy-msgv4.
MESSAGE E000(38) WITH mess.
ELSE.
SELECT SINGLE * FROM customers WHERE id = customersid.

Example IV

Screen 200 : PAI


MODULE user_command_0200 INPUT.
...
WHEN BACK.
CALL FUNCTION DEQUEUE_EZCUST00
EXPORTING

id = customers-id.
LEAVE TO SCREEN 100.

Example IV

Screen 200 : PAI


MODULE user_command_0200 INPUT.
...
WHEN SAVE.
UPDATE customers.
MESSAGE S000(38) WITH Update OK!.
CALL FUNCTION DEQUEUE_EZCUST00
EXPORTING

id = customers-id.
LEAVE TO SCREEN 100.
...
...

Monitoring Enqueue Lock :


SM12

Вам также может понравиться