Sie sind auf Seite 1von 79

Integrata - ABAP OO Advanced -

1.

Definition und Implemetierung von Business Addins

Legen Sie eine BadI-Schnittstelle an

>

>

<

<

Integrata - ABAP OO Advanced -

>

<

>

<

>

<

Karte >

>

<

>

<

< ziehen

Integrata - ABAP OO Advanced -

>

>

<

<

>
>
>

<
<
<

Integrata - ABAP OO Advanced -

>

>

<>

<

<
2. Kontrolle der Schnittstelle im Class builder

>

<

Integrata - ABAP OO Advanced -

>

<

>Kontrolle<
3. Legen Sie das Testprogramm an

>

<

Integrata - ABAP OO Advanced -

>

<

> <
>
>

<
<

Coding einbetten -------*&---------------------------------------------------------------------*


*& Report ZBADI_TEST
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZBADI_TEST

tables: spfli.
data: wa_spfli type spfli,
it_spfli type table of spfli with key carrid connid.
*Initialise the object of the interface.
selection-screen begin of block b1.
select-options: s_carr for spfli-carrid.
selection-screen end of block b1.
start-of-selection.
select * from spfli into corresponding fields of table it_spfli

Integrata - ABAP OO Advanced where carrid in s_carr.


end-of-selection.
loop at it_spfli into wa_spfli.
write:/ wa_spfli-carrid,
wa_spfli-connid,
wa_spfli-cityfrom,
wa_spfli-deptime,
wa_spfli-arrtime.
hide: wa_spfli-carrid, wa_spfli-connid.
endloop.
at line-selection.
check not wa_spfli-carrid is initial.
clear wa_spfli.
Coding Ende
Coding testen
Coding Block 2 einbetten ---------*Initialise the object of the interface.
*data: exit_ref1 type ref to ZBADI_SPFLI_00.
get badi exit_ref1.
call badi exit_ref1->lineselection
EXPORTING
i_carrid = wa_spfli-carrid
i_connid = wa_spfli-connid.
Coding Ende vor clear wa_spfli.
Coding testen
4. Legen Sie eine Implementierung an

Integrata - ABAP OO Advanced -

>

>

<

<

>

>

<

<

Integrata - ABAP OO Advanced >

<

>

<

>

< Doppelt anklicken

>
>

<x2
<

Methoden ABAP-Code
data : wa_flights type sflight,
it_flights type table of sflight.
format color col_heading.
write:/ 'Flight info of:', i_carrid, i_connid.
format color col_normal.
select * from sflight
into corresponding fields of table it_flights
where carrid = i_carrid
and connid = i_connid.
loop at it_flights into wa_flights.
write:/ wa_flights-fldate,
wa_flights-planetype,
wa_flights-price currency wa_flights-currency,
wa_flights-seatsmax,
wa_flights-seatsocc.
endloop.

Integrata - ABAP OO Advanced -

10

>aktivieren<
>Programm testen<

5. Umgang mit persistenten Klassen


ABAP-Programme arbeiten prinzipiell mit programmlokalen Daten, die im internen Modus des
Programms leben. Solche Daten leben nur so lange wie ihr Kontext, das heit ihre Prozedur bei
prozedurlokalen Daten, ihr Objekt bei Attributen von Klassen oder ihr Programm bei den globalen
Daten des Programms. Solche Daten heien transient. Daten heien persistent, wenn sie dauerhaft,
also ber die Programmlaufzeit hinaus aufgehoben werden knnen. Im SAP-System kommen
persistente Daten hauptschlich als Inhalte von Datenbanktabellen, aber auch als Inhalte von Dateien
auf Applikations- oder Prsentationsservern vor.
Um mit persistenten Daten zu arbeiten, mssen diese whrend der Programmausfhrung in transiente
Datenobjekte des ABAP-Programms geladen und nach der Verarbeitung wieder persistent abgelegt
werden. Whrend dieser Zeitspanne liegt der Inhalt der Daten doppelt vor: Einmal transient im ABAPProgramm und einmal persistent in der entsprechenden Ablage. Ein typischer Ablauf ist das Lesen
von Daten aus einer Datenbanktabelle mit der Anweisung SELECT in einen transienten
Arbeitsbereich, die Modifikation des Arbeitsbereichs und der anschlieende UPDATE der
Datenbanktabelle. In diesem Fall sind die Inhalte von transienten und persistenten Daten
zwischenzeitlich unterschiedlich.
Um den Persistenzdienst fr Objekte zu nutzen, mssen deren Klassen als sogenannte persistente
Klassen im Class Builder angelegt werden. Der Ausdruck persistente Klasse drckt weniger aus, dass
die Klasse persistent ist (jede globale Klasse ist als Bauplan fr Objekte persistent), sondern dass ihre
Objekte und deren Zustand vom Persistenzdienst verwaltet werden. Die Objekte solcher Klassen
werden im ABAP-Programm beispielsweise nicht mit der normalen Anweisung CREATE OBJECT
erzeugt, sondern mit einer Methode des Persistenzdiensts, die fr die richtige Initialisierung sorgt.
Beim Anlegen einer persistenten Klasse generiert der Class Builder automatisch eine zugehrige
Klasse, den sogenannten Klassenakteur oder Agenten, ber dessen Methoden die Objekte der
persistenten Klassen verwaltet werden. Persistente Klassen knnen neben ihrer eindeutigen Identitt
sogenannte Schlsselattribute enthalten, ber die der Persistenzdienst die inhaltliche Eindeutigkeit
von persistenten Objekten sicherstellt.

>

<

Integrata - ABAP OO Advanced -

11

>

<

>Klick auf Anlegen<

>
Markieren
- Persistente Klasse
- Final
>sichern<

<

Integrata - ABAP OO Advanced -

12

>

<

>

>

>

<

<

<

Integrata - ABAP OO Advanced -

13

>

<

>

>

<

<

Integrata - ABAP OO Advanced -

14

6. Definieren Sie eine neue Methode Display_attributes

>

<

- Sichtbarkeit Public
>

<
==================
write: /
'Daten der Fluggesellschaft',
me->carrid,
icon_ws_plane as icon,
me->carrname,
me->currcode,
me->url.
======================

Integrata - ABAP OO Advanced -

15

>

<
>Typgruppe zufhren und aktivieren<
7. Beispielprogramm setzen der Persistenz

>

<

=========================== Testprogramm Persistenz


data:
ref_carrier
type ref to zcl_00_pers_scarr,
ref_carrier_agent type ref to zca_00_pers_scarr.
parameters:
pa_carr type
pa_name type
pa_curr type
pa_url type

scarr-carrid default 'LH',


scarr-carrname default 'SCHUL01',
scarr-currcode default 'EUR',
scarr-url default 'email@dummy.de'.

data carrid type scarr-carrid.

at selection-screen.
select single carrid from scarr
into carrid
where carrid = pa_carr.
if sy-subrc = 0.
message e210(bc401) with carrid.
endif.

start-of-selection.
* get agent instance:
ref_carrier_agent = zca_00_pers_scarr=>agent.

Integrata - ABAP OO Advanced -

* create carrier instance:


try.
call method ref_carrier_agent->create_persistent
exporting
i_carrid
= pa_carr
i_carrname = pa_name
i_currcode = pa_curr
i_url
= pa_url
receiving
result
= ref_carrier.
message 'Connection created' type 'I'.
catch cx_os_object_existing .
message a210(bc401) with pa_carr.
endtry.
* "work" with instance:
call method ref_carrier->display_attributes.
uline.
* write instance to database:
commit work.

8. Beispielprogramm Lesen der Persistenz


data:
ref_carrier
type ref to zcl_15_scarr,
ref_carrier_agent type ref to zca_15_scarr.
data: exc type ref to cx_root,
text type string.
parameters:

pa_carr type scarr-carrid default 'LH'.

data carrid type scarr-carrid.


selection-screen begin of screen 400 title text-400.
parameters delete as checkbox.
selection-screen end of screen 400.
selection-screen begin of screen 500 title text-500.
parameters commit as checkbox.
selection-screen end of screen 500.
at selection-screen.
select single carrid from scarr
into carrid
where carrid = pa_carr.
if sy-subrc <> 0.
message e211(bc401) with pa_carr.
endif.

16

Integrata - ABAP OO Advanced start-of-selection.


* get agent instance:
ref_carrier_agent = zca_15_scarr=>agent.
* retrieve carrier instance from database:
try.
call method ref_carrier_agent->get_persistent
exporting
i_carrid = pa_carr
receiving
result
= ref_carrier.
call selection-screen 400 starting at 10 10.
if delete = 'X'.
try.
ref_carrier_agent->delete_persistent( i_carrid = pa_carr
).
commit work.
catch cx_root into exc.
text = exc->get_text( ).
message text type 'I'.
endtry.
endif.
catch cx_os_object_not_found .
message a211(bc401) with pa_carr.
endtry.
* "work" with instance:
call method ref_carrier->display_attributes.
uline.

17

Integrata - ABAP OO Advanced -

18

9. Definieren Sie eine Ausnahmeklasse die reagiert wenn der SCARR-Eintrag in der
Methode Display_Attributes keine EmailAdresse aufweist und integrieren Sie den
Ablauf in ihr Persistenzen setzendes Programm

>

<

Integrata - ABAP OO Advanced -

19

>

<
-

enter

>

<

>

<

Integrata - ABAP OO Advanced -

20

>sichern<

>
>

<
>aktivieren<

<

Integrata - ABAP OO Advanced -

ber sotr_edit texte prfen


>

<

21

Integrata - ABAP OO Advanced -

>

22

<

Integrata - ABAP OO Advanced >

<
if me->url eq space.
raise exception type zcx_emailfeld_leer
exporting
*
textid =
*
previous =
carrid = me->carrid.
endif.

23

Integrata - ABAP OO Advanced -

>
data: oref type ref to zcx_emailfeld_leer.
data: text type string.

try.
* "work" with instance:
call method ref_carrier->display_attributes.
uline.
catch zcx_emailfeld_leer into oref.
text = oref->get_text( ).
message text type 'E'.
endtry.

24

<

Integrata - ABAP OO Advanced -

25

10. Abstrakte Klassen


*&---------------------------------------------------------------------*
*& Report Z_ABSTRAKTE_KLASSEN
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT Z_ABSTRAKTE_KLASSEN.
*
* Durch den Zusatz ABSTRACT wird eine abstrakte Klasse class definiert.
* Von einer abstrakten Klasse knnen keine Instanzen erzeugt werden.
* Um die Instanzkomponenten einer abstrakten Klasse zu verwenden,
* muss eine konkrete Unterklasse der Klasse instanziert werden.
* ======================================================================
CLASS c1 DEFINITION ABSTRACT.
PUBLIC SECTION.
METHODS m1.
PRIVATE SECTION.
DATA a1 TYPE string VALUE `Attribute A1 of class C1`.
ENDCLASS.
CLASS c1 IMPLEMENTATION.
METHOD m1.
WRITE / a1.
ENDMETHOD.
ENDCLASS.
*
* Durch den Zusatz FINAL wird eine finale Klasse class definiert.
* Von einer finalen Klasse knnen keine Unterklassen abgeleitet werden.
* Alle Methoden einer finalen Klasse sind implizit final und drfen nicht
* explizit als final deklariert werden.
* ========================================================================
CLASS c2 DEFINITION INHERITING FROM c1 FINAL.
ENDCLASS.
DATA oref TYPE REF TO c2.
START-OF-SELECTION.
CREATE OBJECT oref.
oref->m1( ).

11. Freunde
*&---------------------------------------------------------------------*
*& Report Z_FRIENDS
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT Z_FRIENDS.
*
* Mit dem Zusatz FRIENDS macht die Klasse class die Klassen class1 class2 .
..

Integrata - ABAP OO Advanced -

26

* bzw. die Interfaces intf1 intf2 ... zu ihren Freunden


* Die Freunde einer Klasse haben unbeschrnkten Zugriff auf
* die geschtzten und privaten Komponenten der Klasse und knnen
* uneingeschrnkt Instanzen der Klasse erzeugen.
* =========================================================================
=====
INTERFACE i1.
...
ENDINTERFACE.
CLASS c1 DEFINITION CREATE PRIVATE FRIENDS i1.
PRIVATE SECTION.
DATA a1 TYPE c LENGTH 10 VALUE 'Class 1'.
ENDCLASS.
CLASS c2 DEFINITION.
PUBLIC SECTION.
INTERFACES i1.
METHODS m2.
ENDCLASS.
CLASS c2 IMPLEMENTATION.
METHOD m2.
DATA oref TYPE REF TO c1.
CREATE OBJECT oref.
WRITE oref->a1.
ENDMETHOD.
ENDCLASS.
data: p_c2 TYPE REF TO c2.
START-of-SELECTION.
CREATE OBJECT p_c2.
p_c2->m2( ).

Integrata - ABAP OO Advanced -

12. Abwicklung shared objects

>

<

>

<

>

<

27

Integrata - ABAP OO Advanced >lokales Objekt<

>

<

>doppelklick auf add_message<

DATA: l_message LIKE LINE OF messages.


l_message-text = i_message_text.
GET TIME.
l_message-date = sy-datum.
l_message-time = sy-uzeit.
l_message-user = sy-uname.
INSERT l_message INTO TABLE messages.
DESCRIBE TABLE messages.
WHILE sy-tfill > c_max_messages.
DELETE messages INDEX 1.
DESCRIBE TABLE messages.
ENDWHILE.

Code einbinden und sichern.


2.Modus erffnen

28

Integrata - ABAP OO Advanced >

29

<

>

<

>
<
>lokales Objekt<

type-pool zch20 .
types: begin of zch20_ty_message,
date type sydatum,
time type syuzeit,
user type syuname,
text type string,
end of zch20_ty_message.
types: zch20_ty_message_t type sorted table of
with non-unique key date time.

Im 1.Modus

><

>

<

zch20_ty_message

Integrata - ABAP OO Advanced -

30

>Doppelklick auf Methode<

DATA: l_message LIKE LINE OF messages.


CLEAR sy-lsind.
LOOP AT messages INTO l_message.
WRITE: / l_message-date,
l_message-time,
l_message-user,
l_message-text.
ENDLOOP.

>

<

^
>sichern<

><

Integrata - ABAP OO Advanced -

><
report z_chat_20 no standard page heading.
*&------------------------------------------------------*
*& Report Z640_011
*&------------------------------------------------------*
include <ICON>.
data: area
type ref to zl_chat_area_20,
messages
type ref to zcl_chat_messages_20,
error
type ref to object,
error_msg
type ref to if_message,
errtext
type string,
field_name type char72,
message_text type text80.
start-of-selection.
try.
area = zl_chat_area_20=>attach_for_read( ).
catch cx_shm_attach_error.
try.
area = zl_chat_area_20=>attach_for_write( ).
create object messages area handle area.
area->set_root( messages ).
area->detach_commit( ).
area = zl_chat_area_20=>attach_for_read( ).
catch cx_shm_attach_error into error.
perform error.
endtry.
endtry.
try.
area->root->list_messages( ).
area->detach( ).
catch cx_shm_attach_error.
perform error.
endtry.
perform input.
at line-selection.
get cursor field field_name.
case field_name.
when 'ICON_CREATE_TEXT'.
message_text = sy-lisel+33(80).
check not message_text is initial.
try.
area = zl_chat_area_20=>attach_for_update( ).
area->root->add_message( message_text ).
clear message_text.
area->root->list_messages( ).
area->detach_commit( ).
catch cx_shm_attach_error into error.
perform error.
endtry.
perform input.
when 'ICON_REFRESH'.
try.
area = zl_chat_area_20=>attach_for_read( ).
area->root->list_messages( ).
area->detach( ).
catch cx_shm_attach_error into error.
perform error.
endtry.
perform input.
endcase.
*&------------------------------------------------------*
*&
Form error
*&------------------------------------------------------*
form error.
error_msg ?= error.
errtext = error_msg->get_text( ).
write: / errtext.
stop.

31

Integrata - ABAP OO Advanced endform.

32

" error

*&------------------------------------------------------*
*&
Form input
*&------------------------------------------------------*
form input .
get time.
write: / sy-datum,
sy-uzeit,
sy-uname,
message_text input,
icon_create_text as icon hotspot,
icon_refresh as icon hotspot.
endform

Behandelte Themen
- Verschachtelte Interfaces
- Persistente Objekte
- neue Technologie zur Workflowabwicklung
13. Betrachten Sie das Workflow-Interface

>

>

<

<

Integrata - ABAP OO Advanced -

>

33

<

>

<

>

<
Die Methode BI_PERSISTENT~FIND_BY_LPOR wird von der SAP WebFlow Engine
aufgerufen, wenn eine persistent gespeicherte Darstellung eines Objektes in eine Instanz der
entsprechenden ABAP-Klasse umgewandelt werden soll.
Die Methode BI_PERSISTENT~LPOR ist das Gegenstck zur Methode
BI_PERSISTENT~FIND_BY_LPOR. Sie liefert die persistente Darstellung zu einer
vorhandenen Instanz eines ABAP-Objektes.

Integrata - ABAP OO Advanced -

34

Die Methode BI_PERSISTENT~REFRESH wird von der SAP WebFlow Engine aufgerufen,
wenn das System sicherstellen muss, dass alle Werte des Objektes gltig sind bzw. genau mit
der persistenten Abbildung des Objektes bereinstimmen.
Die Methode BI_OBJECT~DEFAULT_ATTRIBUTE_VALUE liefert den Anzeigename des
Objektes.Wenn Sie die Methode in Ihrer Klasse nicht bentigen, sollten Sie eine leere
Implementierung (ohne weiteres Coding) vornehmen, um Programmfehler beim Systemaufruf
der Methode zu vermeiden.
Die Methode BI_OBJECT~EXECUTE_DEFAULT_METHOD ist die Standardmethode des
Objektes. Diese Methode wird ausgefhrt, wenn z. B. im Business Workplace das Objekt
aufgerufen wird.
Mit Hilfe der Methode BI_OBJECT~RELEASE signalisiert das System, dass die Referenz
auf die Instanz nicht mehr bentigt wird. Die Referenz kann folglich aus der
Instanzverwaltung gelscht werden. Nachdem die letzte Referenz aus der Instanzverwaltung
gelscht wurde, kann der GARBAGE COLLECTOR den entsprechenden Speicherbereich
freigeben.

>

<

==================================================================

Integrata - ABAP OO Advanced -

35

14. Legen Sie eine globale Klasse an

>

>

>

<

<

<

Integrata - ABAP OO Advanced -

36

>

<

>
>

<

<

==================== Cut & Paste


MATNR
Instance Attribute
Public Type MARA-MATNR
====================
>

<

Materialnummer

Integrata - ABAP OO Advanced -

37

>

>
>

<

<

<

Integrata - ABAP OO Advanced -

38

==================== Cut & Paste

**********************************************************************
* Das Schlsselfeld des Objekts mit dem Importparameter fllen
matnr = im_matnr.
* Unsere Implementierung eines Existenz-Checks
select single * from mara into m_mara
where matnr = me->matnr.
if sy-subrc ne 0.
* Hier muss die Behandlung erfolgen, wenn das Material nicht auf der
* Datenbank vorhanden ist!
endif.

====================

>

>

>

Besonderheit
- Anpassen auf eigene Klasse

<

<

<

Integrata - ABAP OO Advanced -

39

==================== Cut & Paste

types:
begin of t_instance,
matnr type mara-matnr,
instance type ref to zcl_00_mara,
end of t_instance .
types:
t_instances type standard table of t_instance .

====================

=========== Block 1:1 bernehmen

MATNR
Instance Attribute
Public Type MARA-MATNR
Materialnummer
MST_INSTANCES Static Attribute
Private Type T_INSTANCES
Tabellen
Instanzen
M_POR
Instance Attribute
Private Type SIBFLPOR Lokale Persistente
Objektreferenz
M_MARA
Instance Attribute
Private Type MARA
Allgemeine Materialdaten
Augenmerk
- static Attribute
- Private
- Typverwendung
- Besonderheit um eine Instanzverwaltung zu bercksichtigen muss ein das
Attribut M_POR vom Typ SIBLPOR angelegt werden.
=======================
class-data MST_INSTANCES type T_INSTANCES .

=====================

Integrata - ABAP OO Advanced -

Um die Instanzverwaltung zu implementieren wechseln Sie wieder auf


den Reiter Methoden und klicken Sie doppelt auf die Methode
BI_PERSISTENT~FIND_BY_LPOR und fgen Ihr Programmcoding hinzu.
><

=========================
**********************************************************************
* Datendeklaration
**********************************************************************
data: l_instance type ref to zcl_00_mara. "Referenz des eigenen Objekts
data: l_matnr type mara-matnr. "Materialnummer / Schlssel
data: ls_instance type t_instance. "Verwaltung der Instanzen
**********************************************************************
* Programmlogik
**********************************************************************
* berprfung, ob bereits eine Lokale Persistente Objektrefererenz
* existiert
check lpor-instid is not initial.
* instid of import parameter LPOR is object key
l_matnr = lpor-instid.
* Gibt es bereits eine Instanz?
read table mst_instances with key matnr = l_matnr
into ls_instance.
* Wenn es noch keine Instanz gibt
if sy-subrc ne 0.
* Erzeugen des Objekts fr die Instanzverwaltung
try.
create object l_instance
exporting
im_matnr = l_matnr.
catch cx_bo_error .
exit.
endtry.

40

Integrata - ABAP OO Advanced * Anhngen der Instanzen


ls_instance-matnr = l_matnr.
ls_instance-instance = l_instance.
append ls_instance to mst_instances.
endif.
* Fllen des Rckgabewerts
result = ls_instance-instance.
endmethod.
"BI_PERSISTENT~FIND_BY_LPOR
========================================================

>

<

========================
**********************************************************************
* Programmlogik
**********************************************************************
* Erstellen der lokalen Persistenten Objektreferenz
m_por-catid = 'CL'.
m_por-typeid = 'ZCL_00_MARA'.
m_por-instid = me->matnr.
* Laden der Instanz in den Rckgabewert vom Typ SIBFLPOR
result = m_por.
==============================

>aktivieren und testen<

41

Integrata - ABAP OO Advanced -

42

>

>

<

<

Integrata - ABAP OO Advanced -

43

15. Erweitern Sie ihre globale Klasse

==============================
MATKL
Instance Attribute
Private Type
MTART
Instance Attribute
Public Type
SPART
Instance Attribute
Public Type
BISMT
Instance Attribute
Public Type
ERNAM
Instance Attribute
Public Type
DESCRIPTION
Instance Attribute
Public
EMAIL_ERNAM
Instance Attribute
Public
================================

MARA-MATKL
MARA-MTART
MARA-SPART
MARA-BISMT
MARA-ERNAM
Type SYST-TITLE
Type AD_SMTPADR

Integrata - ABAP OO Advanced -

=============================
**********************************************************************
* Programmlogik
**********************************************************************
* Ermitteln der Daten aus der MARA
select single * from mara into m_mara
where matnr = me->matnr.
* Zuweisen der Daten aus der Struktur in die Attribute
me->matkl = me->m_mara-matkl.
me->mtart = me->m_mara-mtart.
me->spart = me->m_mara-spart.
me->bismt = me->m_mara-bismt.
me->ernam = me->m_mara-ernam.
===================================

44

Integrata - ABAP OO Advanced -

45

Integrata - ABAP OO Advanced -

======================

**********************************************************************
* Datendeklaration
**********************************************************************
data: l_matnr type mara-matnr, "Materialnummer
l_maktx type makt-maktx. "Materialkurztext
**********************************************************************
* Programmlogik
**********************************************************************
* Materialkurztext zum Material in lokale Variable schreiben
select single maktx from makt into l_maktx
where matnr = matnr
and spras = sy-langu.
* Fhrende Nullen bei interner Nummernvergabe lschen
l_matnr = matnr.
shift l_matnr left deleting leading '0'.
* Beschreibenden Text zusammensetzen
concatenate 'Material:'(001) l_matnr '-'(002) l_maktx into
description separated by space.
==========================

46

Integrata - ABAP OO Advanced -

====================
me->read_attributes( ).
me->set_description( ).
=========================

>aktivieren + test<

47

Integrata - ABAP OO Advanced -

============================

48

Integrata - ABAP OO Advanced -

**********************************************************************
* Datendeklaration
**********************************************************************
data: lt_return type table of bapiret2,
lt_addsmtp type table of bapiadsmtp,
wa_addsmtp type bapiadsmtp.
**********************************************************************
* Programmlogik
**********************************************************************
* Ermitteln der E-Mail Adressen zum Erfasser
call function 'BAPI_USER_GET_DETAIL'
exporting
username = me->ernam
tables
return
= lt_return
addsmtp = lt_addsmtp.
* Lesen der ersten E-Mail Adresse
read table lt_addsmtp index 1 into wa_addsmtp.
* Attribut ausgeben, wenn E-Mail Adresse gepflegt
if sy-subrc = 0.
me->email_ernam = wa_addsmtp-e_mail.
endif.
=============================

>aktivieren + testen<

49

Integrata - ABAP OO Advanced -

50

Integrata - ABAP OO Advanced -

16. Erweitern Sie ihre globale Klasse um betriebswirtschaftliche Aktionen am Objekt

51

Integrata - ABAP OO Advanced =================


**********************************************************************
* Programmlogik
**********************************************************************
* berprfung, ob das Material auf der Datenbank vorhanden ist
select single * from mara into m_mara
where matnr = me->matnr.
* Material nich vorhanden -> Ausnahme
if sy-subrc ne 0.
raise exception type cx_bo_error.
endif.
====================

================
**********************************************************************
* Das Schlsselfeld des Objekts mit dem Importparameter fllen
matnr = im_matnr.
* Existenzcheck Methode aufrufen, Fehler abfangen
try.
call method me->existencecheck.
catch cx_bo_error.
exit.
endtry.
me->read_attributes( ).
me->set_description( ).
=====================

52

Integrata - ABAP OO Advanced -

========================
**********************************************************************
* Programmlogik
**********************************************************************
call function 'BAPI_MATERIAL_DISPLAY'
exporting
material = matnr
* MATERIAL_EVG =
importing
return = ex_return
.
============================
>aktivieren und test<

53

Integrata - ABAP OO Advanced -

>
===================

54

<

**********************************************************************
* Programmlogik
**********************************************************************
try.
display( ).
catch cx_root.
endtry.
======================

>
<

Integrata - ABAP OO Advanced -

************************************************************************
* Programmlogik *
************************************************************************
set parameter id 'MAT' field matnr.
set parameter id 'MXX' field im_statm.
call transaction 'MM03' and skip first screen.

**********************************************************************
* Programmlogik
**********************************************************************
set parameter id 'MAT' field matnr.
call transaction 'MM02' and skip first screen.

>

<

55

Integrata - ABAP OO Advanced -

56

>

<

>

<

Integrata - ABAP OO Advanced -

57

========================
**********************************************************************
* Programmlogik
**********************************************************************
call function 'BAPI_STANDARDMATERIAL_CREATE'
* EXPORTING
* NEWMATERIAL = ' '
* NEWMATERIAL_EVG =
importing
material = ex_matnr
* NEWMATERIAL =
return = ex_return
* MATERIAL_EVG =
* NEWMATERIAL_EVG =
.
============================

17. Workflow-Muster definieren

>

<

><

Integrata - ABAP OO Advanced -

58

<

<

>

<

Integrata - ABAP OO Advanced >

<
>

<

59

Integrata - ABAP OO Advanced -

>

>

60

<

<

Integrata - ABAP OO Advanced -

61

<

<

>

<

Integrata - ABAP OO Advanced -

>
3 x zurck
>

<
Zurck x 2
Aktivieren

62

<

Integrata - ABAP OO Advanced Testen


ber swel kontrollieren
>

<

18. Standardaufgabe definieren

63

Integrata - ABAP OO Advanced >

<

64

Integrata - ABAP OO Advanced -

65

>
<

>

<

Integrata - ABAP OO Advanced -

19. Ereignisdefinition und Erzeugung

=============
*********************************************************************
* Programmlogik
**********************************************************************
call function 'BAPI_MATERIAL_DISPLAY'
exporting
material = matnr
* MATERIAL_EVG =
importing
return = ex_return
.
case ex_return-number.
when '000'. "Material wurde angezeigt
when '262'.

66

Integrata - ABAP OO Advanced raise exception type cx_bo_error


exporting textid = 'Material nicht bergeben'.
when '305'.
raise exception type cx_bo_error
exporting textid = 'Material exsistiert nicht'.
when others.
raise exception type cx_bo_error
exporting textid = 'Anderer Fehler'.
endcase.
===================

=====================
**********************************************************************
* Datendeklaration
**********************************************************************
data: l_event_container type ref to if_swf_ifs_parameter_container.
**********************************************************************
* Programmlogik
**********************************************************************

67

Integrata - ABAP OO Advanced -

68

call function 'BAPI_STANDARDMATERIAL_CREATE'


* EXPORTING
* NEWMATERIAL = ' '
* NEWMATERIAL_EVG =
importing
material = ex_matnr
* NEWMATERIAL =
return = ex_return
* MATERIAL_EVG =
* NEWMATERIAL_EVG =
.
case ex_return-number.
when '356'. "Material wurde angelegt
try.
*--- get the event container that is used to transport the event
call method cl_swf_evt_event=>get_event_container
exporting
im_objcateg = 'CL'
im_objtype
= 'ZCL_00_MARA'
im_event
= 'CREATED'
receiving
re_reference = l_event_container.
*--- set the values of the parameters
call method l_event_container->set
exporting
name = 'ERNAM'
value = sy-uname.
*--- raise the event
call method cl_swf_evt_event=>raise
exporting
im_objcateg
= 'CL'
im_objtype
= 'ZCL_00_MARA'
im_event
= 'CREATED'
im_objkey
= ex_matnr
im_event_container = l_event_container.
*--- start the receivers (tRFC)
commit work.
catch cx_swf_evt_exception.
catch cx_swf_cnt_container.
endtry.
endcase.
==================================

>

<

Integrata - ABAP OO Advanced -

>
>

<
>

<

69

<

Integrata - ABAP OO Advanced -

70

>

>

>

<

<

<

Integrata - ABAP OO Advanced -

71

>

>

<

<

Integrata - ABAP OO Advanced -

72

20. Wiederholung CL Workflow Abwicklung


berprfen Sie ihre Klasse hinsichtlich der korrekten Methodenabwicklung

>

<

>Doppelklick<

>
Die Methode Create muss ein Ereignis erzeugen
Testen der Methode Create + Display und Kontrolle ber SWEL

<

Integrata - ABAP OO Advanced -

73

21. Standardaufgabe definieren

>

<

>Doppelklick<

- Aufgabentyp TS Standardaufgabe whlen und Ikone Anlegen drcken<

Integrata - ABAP OO Advanced >

<
>Sichern
>Synchrone Objektmethode
>Sichern

74

Integrata - ABAP OO Advanced -

75

>

<
>Bearbeiterzuordnung pflegen

>

<

>anlegen<

>

<

>Benutzer<

>
Ihr Benutzer

<

Integrata - ABAP OO Advanced -

>
>zurck

>
<
>Auslsende Ereignisse

76

<

Integrata - ABAP OO Advanced -

77

>

<
>Aktivieren des Ereginisses und test<

>
>

<

<

Integrata - ABAP OO Advanced >

<

78

Integrata - ABAP OO Advanced -

form.

" input

79

Das könnte Ihnen auch gefallen