SAP ABAP - szybki przewodnik
ABAP to skrót od Advanced Business Application Programming, języka 4GL (4. generacji). Obecnie jest pozycjonowany, wraz z Javą, jako główny język programowania serwerów aplikacji SAP.
Zacznijmy od wysokopoziomowej architektury systemu SAP. Trójwarstwową architekturę klient / serwer typowego systemu SAP przedstawiono w następujący sposób.
Plik Presentation layerskłada się z dowolnego urządzenia wejściowego, które może służyć do sterowania systemem SAP. Może to być przeglądarka internetowa, urządzenie mobilne i tak dalej. Całe centralne przetwarzanie odbywa się wApplication server. Serwer aplikacji to nie tylko jeden system sam w sobie, ale może to być wiele instancji systemu przetwarzania. Serwer komunikuje się zDatabase layerktóry jest zwykle przechowywany na oddzielnym serwerze, głównie ze względu na wydajność, a także ze względów bezpieczeństwa. Komunikacja zachodzi między każdą warstwą systemu, od warstwy prezentacji do bazy danych, a następnie tworzy kopię zapasową łańcucha.
Note- Programy ABAP działają na poziomie serwera aplikacji. Dystrybucja techniczna oprogramowania jest niezależna od jego fizycznej lokalizacji. Oznacza to, że w zasadzie wszystkie trzy poziomy można zainstalować jeden na drugim na jednym komputerze lub każdy poziom można zainstalować na innym komputerze lub serwerze.
Programy ABAP znajdują się w bazie danych SAP. Działają pod kontrolą systemu wykonawczego będącego częścią jądra SAP. System wykonawczy przetwarza wszystkie instrukcje ABAP, kontrolując logikę przepływu i reagując na zdarzenia użytkownika.
Tak więc, w przeciwieństwie do C ++ i Java, programy ABAP nie są przechowywane w oddzielnych plikach zewnętrznych. W bazie danych kod ABAP występuje w dwóch formach -
Source kod, który można wyświetlać i edytować za pomocą narzędzi ABAP Workbench.
Generated code, która jest reprezentacją binarną. Jeśli znasz język Java, ten wygenerowany kod jest w pewnym stopniu porównywalny z kodem bajtowym Java.
System wykonawczy można uznać za maszynę wirtualną, podobną do maszyny wirtualnej Java. Kluczowym elementem systemu wykonawczego ABAP jest interfejs bazy danych, który przekształca instrukcje niezależne od bazy danych (Open SQL) w instrukcje zrozumiałe dla podstawowej bazy danych (Native SQL). SAP może współpracować z wieloma różnymi bazami danych, a na wszystkich może działać ten sam program ABAP.
Raporty są dobrym punktem wyjścia do zapoznania się z ogólnymi zasadami i narzędziami ABAP. Raporty ABAP są używane w wielu obszarach. W tym rozdziale zobaczymy, jak łatwo jest napisać prosty raport ABAP.
Witam ABAP
Zacznijmy od typowego przykładu „Hello World”.
Każda instrukcja ABAP zaczyna się słowem kluczowym ABAP i kończy kropką. Słowa kluczowe muszą być oddzielone co najmniej jedną spacją. Nie ma znaczenia, czy użyjesz jednego, czy kilku wierszy w instrukcji ABAP.
Kod należy wprowadzić za pomocą edytora ABAP, który jest częścią narzędzi ABAP dostarczanych z serwerem SAP NetWeaver Application Server ABAP (znanym również jako „AS ABAP”).
„AS ABAP” to serwer aplikacji z własną bazą danych, środowiskiem wykonawczym ABAP i narzędziami programistycznymi ABAP, takimi jak ABAP Editor. AS ABAP oferuje platformę programistyczną niezależną od sprzętu, systemu operacyjnego i bazy danych.
Korzystanie z edytora ABAP
Step 1- Uruchom transakcję SE38, aby przejść do edytora ABAP (omówionego w następnym rozdziale). Zacznijmy tworzyć raport, który jest jednym z wielu obiektów ABAP.
Step 2- Na początkowym ekranie edytora określ nazwę raportu w polu wejściowym PROGRAM. Możesz podać nazwę jako ZHELLO1. Poprzednie Z jest ważne dla nazwy. Z zapewnia, że raport znajduje się w przestrzeni nazw klienta.
Przestrzeń nazw klienta zawiera wszystkie obiekty z przedrostkiem Y lub Z. Jest ona zawsze używana, gdy klienci lub partnerzy tworzą obiekty (takie jak raport), aby odróżnić te obiekty od obiektów SAP i zapobiec konfliktom nazw z obiektami.
Step 3- Możesz wpisać nazwę raportu małymi literami, ale redaktor zmieni ją na duże. W nazwach obiektów ABAP wielkość liter nie jest rozróżniana.
Step 4- Po określeniu nazwy raportu kliknij przycisk UTWÓRZ. Pojawi się wyskakujące okienko ABAP: PROGRAM ATTRIBUTES, w którym podasz więcej informacji o raporcie.
Step 5- Wybierz „Program wykonywalny” jako typ raportu, wprowadź tytuł „Mój pierwszy raport ABAP”, a następnie wybierz ZAPISZ, aby kontynuować. Następnie pojawi się okno UTWÓRZ WPIS DO KATALOGU OBIEKTÓW. Wybierz przycisk LOKALNY OBIEKT, a wyskakujące okienko zostanie zamknięte.
Możesz uzupełnić swój pierwszy raport, wprowadzając polecenie WRITE pod instrukcją REPORT, tak aby pełny raport zawierał tylko dwa wiersze w następujący sposób:
REPORT ZHELLO1.
WRITE 'Hello World'.
Rozpoczęcie raportu
Do zapisania raportu możemy użyć klawiatury (Ctrl + S) lub ikony zapisu (prawa strona obok pola komend). Rozwój ABAP odbywa się w AS ABAP.
Uruchomienie raportu jest tak proste, jak jego zapisanie. Kliknij przycisk AKTYWACJA (po lewej stronie obok ikony startu) i uruchom raport za pomocą ikony BEZPOŚREDNIE PRZETWARZANIE lub klawisz funkcyjny F8. Tytuł „Mój pierwszy raport ABAP” wraz z danymi wyjściowymi „Hello World” jest również wyświetlany. Oto wynik -
My First ABAP Report
Hello World
Dopóki nie aktywujesz nowego raportu ani nie aktywujesz zmiany w istniejącym raporcie, nie ma to znaczenia dla ich użytkowników. Jest to ważne w centralnym środowisku programistycznym, w którym można pracować nad obiektami używanymi przez innych programistów w swoich projektach.
Przeglądanie istniejącego kodu
Jeśli spojrzysz na pole Program i dwukrotnie klikniesz na wartość ZHELLO1, edytor ABAP wyświetli kod twojego raportu. Nazywa się to nawigacją do przodu. Dwukrotne kliknięcie nazwy obiektu otwiera ten obiekt w odpowiednim narzędziu.
Aby zrozumieć SAP ABAP, musisz mieć podstawową wiedzę na temat ekranów, takich jak logowanie, edytor ABAP, wylogowanie i tak dalej. W tym rozdziale skupiono się na nawigacji po ekranie i standardowych funkcjach paska narzędzi.
Ekran logowania
Po zalogowaniu się do serwera SAP na ekranie logowania SAP zostanie wyświetlony monit o podanie identyfikatora użytkownika i hasła. Musisz podać prawidłowy identyfikator użytkownika i hasło, a następnie nacisnąć klawisz Enter (identyfikator użytkownika i hasło są dostarczane przez administratora systemu). Poniżej znajduje się ekran logowania.
Ikona paska narzędzi
Poniżej znajduje się pasek narzędzi ekranu SAP.
Menu Bar - Pasek menu to górna linia okna dialogowego.
Standard Toolbar - Większość standardowych funkcji, takich jak Początek strony, Koniec strony, Strona w górę, Strona w dół i Zapisz jest dostępnych na tym pasku narzędzi.
Title Bar - Pasek tytułu wyświetla nazwę aplikacji / procesu biznesowego, w którym aktualnie się znajdujesz.
Application Toolbar - Opcje menu specyficzne dla aplikacji są dostępne tutaj.
Command Field- Aplikację możemy uruchomić bez poruszania się po menu transakcji, a procesy biznesowe mają przypisane pewne kody logiczne. Kody transakcji wprowadza się w polu poleceń, aby bezpośrednio uruchomić aplikację.
Edytor ABAP
Możesz po prostu rozpocząć transakcję SE38 (wprowadź SE38 w polu poleceń), aby przejść do edytora ABAP.
Standardowe klawisze i ikony
Exit keyssłużą do wyjścia z programu / modułu lub wylogowania. Służą również do powrotu do ostatnio wyświetlanego ekranu.
Poniżej przedstawiono standardowe klucze wyjścia używane w SAP, jak pokazano na obrazku.
Poniżej przedstawiono opcje sprawdzania, aktywowania i przetwarzania raportów.
Wyloguj
Zawsze dobrze jest wyjść z edytora ABAP lub / i wylogować się z systemu SAP po zakończeniu pracy.
Sprawozdania
Program źródłowy ABAP składa się z komentarzy i instrukcji ABAP. Każda instrukcja w ABAP zaczyna się słowem kluczowym i kończy kropką, a ABAP nie rozróżnia wielkości liter.
Pierwsza linia bez komentarza w programie zaczyna się od słowa REPORT. Raport zawsze będzie pierwszym wierszem każdego utworzonego programu wykonywalnego. Po instrukcji następuje nazwa programu, który został utworzony wcześniej. Linia jest wtedy zakończona kropką.
Składnia to -
REPORT [Program_Name].
[Statements…].
Dzięki temu instrukcja może zająć dowolną liczbę wierszy w edytorze. Na przykład RAPORT może wyglądać następująco -
REPORT Z_Test123_01.
Instrukcje składają się z polecenia oraz wszelkich zmiennych i opcji, zakończonych kropką. Dopóki kropka pojawi się na końcu wyciągu, nie będzie żadnych problemów. To właśnie ten okres oznacza koniec oświadczenia.
Napiszmy kod.
W wierszu poniżej instrukcji REPORT wpisz po prostu tę instrukcję: Napisz „Samouczek ABAP”.
REPORT Z_Test123_01.
Write 'This is ABAP Tutorial'.
Four things to consider while writing statements -
Instrukcja write zapisuje wszystko, co jest w cudzysłowie, do okna wyjściowego.
Edytor ABAP konwertuje cały tekst na wielkie litery z wyjątkiem ciągów tekstowych, które są otoczone pojedynczymi cudzysłowami.
W przeciwieństwie do niektórych starszych języków programowania, ABAP nie dba o to, gdzie instrukcja zaczyna się w wierszu. Możesz to wykorzystać i poprawić czytelność swojego programu, używając wcięć do oznaczania bloków kodu.
ABAP nie ma ograniczeń co do układu instrukcji. Oznacza to, że w jednym wierszu można umieścić wiele instrukcji lub jedna instrukcja może obejmować wiele wierszy.
Notacja dwukropka
Kolejne instrukcje można łączyć ze sobą, jeśli początek każdej instrukcji jest identyczny. Odbywa się to za pomocą operatora dwukropka (:) i przecinków, które są używane do zakończenia poszczególnych instrukcji, podobnie jak kropki kończą zwykłe instrukcje.
Poniżej znajduje się przykład programu, który może zaoszczędzić trochę naciśnięć klawiszy -
WRITE 'Hello'.
WRITE 'ABAP'.
WRITE 'World'.
Używając notacji dwukropków, można to przepisać w ten sposób -
WRITE: 'Hello',
'ABAP',
'World'.
Jak każda inna instrukcja ABAP, układ nie ma znaczenia. To jest równie poprawne stwierdzenie -
WRITE: 'Hello', 'ABAP', 'World'.
Komentarze
Komentarze w wierszu można zadeklarować w dowolnym miejscu programu za pomocą jednej z dwóch metod -
Komentarze dotyczące całej linii są oznaczane gwiazdką (*) na pierwszej pozycji wiersza, w takim przypadku cała linia jest traktowana przez system jako komentarz. Komentarze nie muszą być zakończone kropką, ponieważ nie mogą obejmować więcej niż jednej linii -
* This is the comment line
Komentarze do częściowych wierszy są wskazywane przez wprowadzenie podwójnego cudzysłowu (") po wyrażeniu. Cały tekst następujący po podwójnym cudzysłowie jest traktowany przez system jako komentarz. Nie musisz przerywać komentarzy w wierszach częściowych o okres, ponieważ mogą nie obejmować więcej niż jedna linia -
WRITE 'Hello'. "Here is the partial comment
Note - Skomentowany kod nie jest zapisywany wielkimi literami w edytorze ABAP.
Pomijanie spacji
Polecenie NO-ZERO następuje po instrukcji DATA. Pomija wszystkie wiodące zera w polu liczbowym zawierającym spacje. Dane wyjściowe są zwykle łatwiejsze do odczytania dla użytkowników.
Przykład
REPORT Z_Test123_01.
DATA: W_NUR(10) TYPE N.
MOVE 50 TO W_NUR.
WRITE W_NUR NO-ZERO.
Powyższy kod daje następujące dane wyjściowe -
50
Note - Bez polecenia NO-ZERO wyjście to: 0000000050
Puste linie
Polecenie SKIP pomaga w wstawianiu pustych wierszy na stronie.
Przykład
Polecenie wiadomości jest następujące -
WRITE 'This is the 1st line'.
SKIP.
WRITE 'This is the 2nd line'.
Powyższe polecenie komunikatu generuje następujące dane wyjściowe -
This is the 1st line
This is the 2nd line
Możemy użyć polecenia SKIP, aby wstawić wiele pustych wierszy.
SKIP number_of_lines.
Wynik będzie kilka pustych wierszy zdefiniowanych przez liczbę wierszy. Polecenie SKIP może również ustawić kursor w żądanym wierszu na stronie.
SKIP TO LINE line_number.
To polecenie służy do dynamicznego przesuwania kursora w górę iw dół strony. Zwykle po tym poleceniu występuje instrukcja WRITE, aby umieścić dane wyjściowe w żądanym wierszu.
Wstawianie linii
Polecenie ULINE automatycznie wstawia poziomą linię w poprzek wyjścia. Możliwe jest również sterowanie położeniem i długością linki. Składnia jest dość prosta -
ULINE.
Przykład
Polecenie wiadomości jest następujące -
WRITE 'This is Underlined'.
ULINE.
Powyższy kod daje następujące dane wyjściowe -
This is Underlined (and a horizontal line below this).
Wiadomości
Polecenie MESSAGE wyświetla komunikaty zdefiniowane przez identyfikator komunikatu określony w instrukcji REPORT na początku programu. Identyfikator wiadomości to 2-znakowy kod, który określa zestaw 1000 wiadomości, do których program uzyska dostęp po użyciu polecenia MESSAGE.
Wiadomości są ponumerowane od 000 do 999. Z każdym numerem skojarzony jest tekst wiadomości o maksymalnej długości 80 znaków. Po wywołaniu numeru wiadomości wyświetlany jest odpowiedni tekst.
Poniżej znajdują się znaki używane z poleceniem Wiadomość -
Wiadomość | Rodzaj | Konsekwencje |
---|---|---|
mi | Błąd | Pojawia się komunikat, a aplikacja zatrzymuje się w obecnym miejscu. Jeśli program działa w tle, zadanie jest anulowane, a komunikat jest zapisywany w protokole zadania. |
W. | Ostrzeżenie | Zostanie wyświetlony komunikat, a użytkownik musi nacisnąć klawisz Enter, aby aplikacja mogła kontynuować. W trybie tła wiadomość jest zapisywana w protokole zadania. |
ja | Informacja | Otworzy się wyskakujące okienko z tekstem wiadomości, a użytkownik musi nacisnąć klawisz Enter, aby kontynuować. W trybie tła wiadomość jest zapisywana w protokole zadania. |
ZA | Przerwij | Ta klasa wiadomości anuluje transakcję, z której aktualnie korzysta użytkownik. |
S | Powodzenie | Powoduje to wyświetlenie komunikatu informacyjnego u dołu ekranu. Wyświetlane informacje mają charakter pozytywny i służą jedynie do przekazywania opinii użytkowników. Wiadomość w żaden sposób nie utrudnia działania programu. |
X | Anulować | Ten komunikat przerywa działanie programu i generuje krótki zrzut ABAP. |
Komunikaty o błędach są zwykle używane do powstrzymywania użytkowników przed robieniem rzeczy, których nie powinni robić. Komunikaty ostrzegawcze są zwykle używane do przypominania użytkownikom o konsekwencjach ich działań. Komunikaty informacyjne dostarczają użytkownikom przydatnych informacji.
Przykład
Kiedy tworzymy wiadomość dla wiadomości ID AB, polecenie MESSAGE - MESSAGE E011 daje następujące dane wyjściowe -
EAB011 This report does not support sub-number summarization.
Podczas programowania w ABAP musimy używać różnych zmiennych do przechowywania różnych informacji. Zmienne to nic innego jak zarezerwowane miejsca w pamięci do przechowywania wartości. Oznacza to, że kiedy tworzysz zmienną, rezerwujesz trochę miejsca w pamięci. Możesz chcieć przechowywać informacje o różnych typach danych, takich jak znaki, liczby całkowite, zmiennoprzecinkowe itp. Na podstawie typu danych zmiennej system operacyjny przydziela pamięć i decyduje, co może być przechowywane w zarezerwowanej pamięci.
Podstawowe typy danych
ABAP oferuje programiście bogaty asortyment typów danych o stałej i zmiennej długości. Poniższa tabela zawiera listę podstawowych typów danych ABAP -
Rodzaj | Słowo kluczowe |
---|---|
Pole bajtu | X |
Pole tekstowe | do |
Liczba całkowita | ja |
Punkt zmiennoprzecinkowy | fa |
Liczba zapakowana | P. |
Ciąg tekstowy | STRUNOWY |
Niektóre pola i liczby można modyfikować za pomocą jednej lub kilku nazw w następujący sposób -
- byte
- numeric
- character-like
Poniższa tabela przedstawia typ danych, ilość pamięci potrzebnej do przechowywania wartości w pamięci oraz minimalną i maksymalną wartość, która może być przechowywana w tego typu zmiennych.
Rodzaj | Typowa długość | Typowy zakres |
---|---|---|
X | 1 bajt | Dowolne wartości bajtów (od 00 do FF) |
do | 1 znak | 1 do 65535 |
N (pole tekstowe numeryczne) | 1 znak | 1 do 65535 |
D (data w postaci znaku) | 8 znaków | 8 znaków |
T (czas podobny do znaku) | 6 znaków | 6 znaków |
ja | 4 bajty | Od -2147483648 do 2147483647 |
fa | 8 bajtów | 2.2250738585072014E-308 do 1.7976931348623157E + 308 dodatni lub ujemny |
P. | 8 bajtów | [-10 ^ (2len -1) +1] do [+ 10 ^ (2len -1) 1] (gdzie len = stała długość) |
STRUNOWY | Zmienna | Dowolne znaki alfanumeryczne |
XSTRING (ciąg bajtów) | Zmienna | Dowolne wartości bajtów (od 00 do FF) |
Przykład
REPORT YR_SEP_12.
DATA text_line TYPE C LENGTH 40.
text_line = 'A Chapter on Data Types'.
Write text_line.
DATA text_string TYPE STRING.
text_string = 'A Program in ABAP'.
Write / text_string.
DATA d_date TYPE D.
d_date = SY-DATUM.
Write / d_date.
W tym przykładzie mamy ciąg znaków typu C o wstępnie zdefiniowanej długości 40. ŁAŃCUCH to typ danych, który może być użyty dla dowolnego ciągu znaków o zmiennej długości (ciągi tekstowe). Obiekty danych typu STRING powinny być generalnie używane w przypadku zawartości znakowej, gdzie stała długość nie jest ważna.
Powyższy kod daje następujące dane wyjściowe -
A Chapter on Data Types
A Program in ABAP
12092015
Typ DATE służy do przechowywania informacji o dacie i może przechowywać osiem cyfr, jak pokazano powyżej.
Typy złożone i referencyjne
Złożone typy są podzielone na Structure types i Table types. W typach konstrukcji grupowane są podstawowe typy i struktury (tj. Struktury osadzone w konstrukcji). Możesz rozważyć tylko grupowanie typów podstawowych. Ale musisz być świadomy dostępności zagnieżdżania struktur.
Gdy typy podstawowe są zgrupowane razem, dostęp do pozycji danych można uzyskać jako zgrupowaną pozycję danych lub można uzyskać dostęp do poszczególnych pozycji danych typu podstawowego (pól strukturalnych). Typy tabel są lepiej znane jako tablice w innych językach programowania.Arraysmogą być tablicami prostymi lub strukturalnymi. W ABAP tablice nazywane są tabelami wewnętrznymi i mogą być deklarowane i obsługiwane na wiele sposobów w porównaniu z innymi językami programowania. Poniższa tabela przedstawia parametry, według których scharakteryzowano tabele wewnętrzne.
S.No. | Parametr i opis |
---|---|
1 | Line or row type Wiersz tabeli wewnętrznej może być elementarny, złożony lub referencyjny. |
2 | Key Określa pole lub grupę pól jako klucz wewnętrznej tabeli, który identyfikuje wiersze tabeli. Klucz zawiera pola typów podstawowych. |
3 | Access method Opisuje, w jaki sposób programy ABAP uzyskują dostęp do poszczególnych pozycji tabeli. |
Typy odwołań służą do odwoływania się do wystąpień klas, interfejsów i elementów danych czasu wykonywania. Usługi typu wykonawczego ABAP OOP (RTTS) umożliwiają deklarowanie elementów danych w czasie wykonywania.
Zmienne to nazwane obiekty danych używane do przechowywania wartości w przydzielonym obszarze pamięci programu. Jak sama nazwa wskazuje, użytkownicy mogą zmieniać zawartość zmiennych za pomocą instrukcji ABAP. Każda zmienna w ABAP ma określony typ, który określa rozmiar i układ pamięci zmiennej; zakres wartości, które mogą być przechowywane w tej pamięci; oraz zestaw operacji, które można zastosować do zmiennej.
Musisz zadeklarować wszystkie zmienne, zanim będą mogły zostać użyte. Podstawową formą deklaracji zmiennej jest -
DATA <f> TYPE <type> VALUE <val>.
Tutaj <f> określa nazwę zmiennej. Nazwa zmiennej może mieć maksymalnie 30 znaków. <typ> określa typ zmiennej. Każdy typ danych z w pełni określonymi atrybutami technicznymi jest znany jako <typ>. <val> określa początkową wartość zmiennej of <f>. W przypadku zdefiniowania podstawowej zmiennej o stałej długości instrukcja DATA automatycznie zapełnia wartość zmiennej wartością początkową specyficzną dla typu. Inne możliwe wartości dla <val> mogą być literałem, stałą lub jawną klauzulą, na przykład Is INITIAL.
Poniżej znajdują się prawidłowe przykłady deklaracji zmiennych.
DATA d1(2) TYPE C.
DATA d2 LIKE d1.
DATA minimum_value TYPE I VALUE 10.
W powyższym fragmencie kodu d1 to zmienna typu C, d2 to zmienna typu d1, a minimal_value to zmienna typu integer ABAP I.
W tym rozdziale wyjaśniono różne typy zmiennych dostępne w ABAP. W ABAP istnieją trzy rodzaje zmiennych -
- Zmienne statyczne
- Zmienne odniesienia
- Zmienne systemowe
Zmienne statyczne
Zmienne statyczne są deklarowane w podprogramach, modułach funkcyjnych i metodach statycznych.
Okres istnienia jest powiązany z kontekstem deklaracji.
Za pomocą instrukcji „CLASS-DATA” można deklarować zmienne w ramach klas.
Instrukcja „PARAMETERS” może służyć do zadeklarowania podstawowych obiektów danych, które są połączone z polami wejściowymi na ekranie wyboru.
Możesz również zadeklarować wewnętrzne tabele, które są połączone z polami wejściowymi na ekranie wyboru, używając instrukcji „SELECT-OPTIONS”.
Poniżej przedstawiono konwencje używane podczas nazywania zmiennej -
Do nazywania zmiennych nie można używać znaków specjalnych, takich jak „t” i „,”.
Nazw predefiniowanych obiektów danych nie można zmienić.
Nazwa zmiennej nie może być taka sama jak dowolnego słowa kluczowego lub klauzuli ABAP.
Nazwy zmiennych muszą przekazywać znaczenie zmiennej bez potrzeby dalszych komentarzy.
Łączniki są zarezerwowane do reprezentowania elementów konstrukcji. Dlatego należy unikać myślników w nazwach zmiennych.
Znaku podkreślenia można używać do oddzielania słów złożonych.
Ten program pokazuje, jak zadeklarować zmienną za pomocą instrukcji PARAMETERS -
REPORT ZTest123_01.
PARAMETERS: NAME(10) TYPE C,
CLASS TYPE I,
SCORE TYPE P DECIMALS 2,
CONNECT TYPE MARA-MATNR.
Tutaj NAME reprezentuje parametr składający się z 10 znaków, CLASS określa parametr typu integer z domyślnym rozmiarem w bajtach, SCORE reprezentuje parametr typu spakowanego z wartościami do dwóch miejsc po przecinku, a CONNECT odnosi się do typu MARA-MATNF słownika ABAP .
Powyższy kod daje następujące dane wyjściowe -
Zmienne odniesienia
Składnia deklarowania zmiennych referencyjnych to -
DATA <ref> TYPE REF TO <type> VALUE IS INITIAL.
REF TO dodatek deklaruje zmienną referencyjną ref.
Specyfikacja po REF TO określa statyczny typ zmiennej odniesienia.
Typ statyczny ogranicza zestaw obiektów, do których <ref> może się odnosić.
Dynamiczny typ zmiennej referencyjnej to typ lub klasa danych, do których aktualnie się odnosi.
Typ statyczny jest zawsze bardziej ogólny lub taki sam jak typ dynamiczny.
Dodatek TYPE służy do tworzenia powiązanego typu odwołania i jako wartości początkowej, a po dodaniu VALUE można określić tylko IS INITIAL.
Przykład
CLASS C1 DEFINITION.
PUBLIC SECTION.
DATA Bl TYPE I VALUE 1.
ENDCLASS. DATA: Oref TYPE REF TO C1 ,
Dref1 LIKE REF TO Oref,
Dref2 TYPE REF TO I .
CREATE OBJECT Oref.
GET REFERENCE OF Oref INTO Dref1.
CREATE DATA Dref2.
Dref2→* = Dref1→*→Bl.
W powyższym fragmencie kodu zadeklarowano odwołanie do obiektu Oref i dwie zmienne odniesienia do danych Dref1 i Dref2.
Obie zmienne odniesienia do danych są w pełni wpisane i można je wyłuskać za pomocą operatora wyłuskiwania → * w pozycjach argumentów.
Zmienne systemowe
Zmienne systemowe ABAP są dostępne ze wszystkich programów ABAP.
Te pola są faktycznie wypełniane przez środowisko wykonawcze.
Wartości w tych polach wskazują stan systemu w dowolnym momencie.
Pełną listę zmiennych systemowych można znaleźć w tabeli SYST w SAP.
Dostęp do poszczególnych pól struktury SYST można uzyskać za pomocą „SYST-” lub „SY-”.
Przykład
REPORT Z_Test123_01.
WRITE:/'SY-ABCDE', SY-ABCDE,
/'SY-DATUM', SY-DATUM,
/'SY-DBSYS', SY-DBSYS,
/'SY-HOST ', SY-HOST,
/'SY-LANGU', SY-LANGU,
/'SY-MANDT', SY-MANDT,
/'SY-OPSYS', SY-OPSYS,
/'SY-SAPRL', SY-SAPRL,
/'SY-SYSID', SY-SYSID,
/'SY-TCODE', SY-TCODE,
/'SY-UNAME', SY-UNAME,
/'SY-UZEIT', SY-UZEIT.
Powyższy kod daje następujące dane wyjściowe -
SY-ABCDE ABCDEFGHIJKLMNOPQRSTUVWXYZ
SY-DATUM 12.09.2015
SY-DBSYS ORACLE
SY-HOST sapserver
SY-LANGU EN
SY-MANDT 800
SY-OPSYS Windows NT
SY-SAPRL 700
SY-SYSID DMO
SY-TCODE SE38
SY-UNAME SAPUSER
SY-UZEIT 14:25:48
Literały to nienazwane obiekty danych, które tworzysz w kodzie źródłowym programu. Są w pełni zdefiniowane przez ich wartość. Nie możesz zmienić wartości literału. Stałe są nazwanymi obiektami danych tworzonymi statycznie przy użyciu deklaratywnych instrukcji. Stała jest deklarowana poprzez przypisanie jej wartości, która jest przechowywana w obszarze pamięci programu. Wartość przypisana do stałej nie może zostać zmieniona podczas wykonywania programu. Te stałe wartości można również traktować jako literały. Istnieją dwa rodzaje literałów - numeryczne i znakowe.
Literały numeryczne
Literały liczbowe to sekwencje cyfr, które mogą mieć prefiks. W literałach liczbowych nie ma separatorów dziesiętnych ani notacji z mantysą i wykładnikiem.
Oto kilka przykładów literałów numerycznych -
183.
-97.
+326.
Literały postaci
Literały znakowe to sekwencje znaków alfanumerycznych w kodzie źródłowym programu ABAP ujęte w pojedyncze cudzysłowy. Literały znakowe ujęte w cudzysłów mają predefiniowany typ ABAP C i są opisane jako literały pól tekstowych. Literały ujęte w „cudzysłowy” mają typ ABAP STRING i są opisane jako literały łańcuchowe. Długość pola jest określana przez liczbę znaków.
Note - W literałach pól tekstowych końcowe spacje są ignorowane, ale w literałach łańcuchowych są brane pod uwagę.
Poniżej znajduje się kilka przykładów literałów znakowych.
Literały pól tekstowych
REPORT YR_SEP_12.
Write 'Tutorials Point'.
Write / 'ABAP Tutorial'.
Literały pola ciągów
REPORT YR_SEP_12.
Write `Tutorials Point `.
Write / `ABAP Tutorial `.
Wynik jest taki sam w obu powyższych przypadkach -
Tutorials Point
ABAP Tutorial
Note- Kiedy próbujemy zmienić wartość stałej, może wystąpić błąd składni lub błąd wykonania. Stałe, które deklarujesz w części deklaracyjnej klasy lub interfejsu, należą do statycznych atrybutów tej klasy lub interfejsu.
Oświadczenie CONSTANTS
Możemy zadeklarować wymienione obiekty danych przy pomocy instrukcji CONSTANTS.
Poniżej znajduje się składnia -
CONSTANTS <f> TYPE <type> VALUE <val>.
Instrukcja CONSTANTS jest podobna do instrukcji DATA.
<f> określa nazwę stałej. TYPE <typ> reprezentuje stałą o nazwie <f>, która dziedziczy te same atrybuty techniczne, co istniejący typ danych <typ>. WARTOŚĆ <wartość> przypisuje wartość początkową do zadeklarowanej nazwy stałej <f>.
Note- Powinniśmy użyć klauzuli VALUE w instrukcji CONSTANTS. Klauzula „VALUE” służy do przypisywania wartości początkowej stałej podczas jej deklaracji.
Mamy 3 rodzaje stałych, takie jak stałe elementarne, złożone i referencyjne. Poniższa instrukcja pokazuje, jak definiować stałe przy użyciu instrukcji CONSTANTS -
REPORT YR_SEP_12.
CONSTANTS PQR TYPE P DECIMALS 4 VALUE '1.2356'.
Write: / 'The value of PQR is:', PQR.
Wynik to -
The value of PQR is: 1.2356
Tutaj odnosi się do elementarnego typu danych i jest znany jako elementarna stała.
Poniżej znajduje się przykład dla złożonych stałych -
BEGIN OF EMPLOYEE,
Name(25) TYPE C VALUE 'Management Team',
Organization(40) TYPE C VALUE 'Tutorials Point Ltd',
Place(10) TYPE C VALUE 'India',
END OF EMPLOYEE.
W powyższym fragmencie kodu PRACOWNIK jest stałą złożoną, która składa się z pól Nazwa, Organizacja i Miejsce.
Poniższa instrukcja deklaruje stałe odwołanie -
CONSTANTS null_pointer TYPE REF TO object VALUE IS INITIAL.
Możemy użyć stałego odniesienia w porównaniach lub możemy przekazać go procedurom.
ABAP zapewnia bogaty zestaw operatorów do manipulowania zmiennymi. Wszyscy operatorzy ABAP są podzieleni na cztery kategorie -
- Operatory arytmetyczne
- Operatory porównania
- Operatory bitowe
- Operatory ciągów znaków
Operatory arytmetyczne
Operatory arytmetyczne są używane w wyrażeniach matematycznych w taki sam sposób, jak w algebrze. Poniższa lista zawiera opis operatorów arytmetycznych. Załóżmy, że zmienna całkowita A zawiera 20, a zmienna B 40.
S.No. | Operator arytmetyczny i opis |
---|---|
1 | + (Addition) Dodaje wartości po obu stronach operatora. Przykład: A + B da 60. |
2 | − (Subtraction) Odejmuje operand po prawej stronie od operandu po lewej stronie. Przykład: A - B da -20. |
3 | * (Multiplication) Mnoży wartości po obu stronach operatora. Przykład: A * B da 800. |
4 | / (Division) Dzieli operand lewej ręki przez operand prawej ręki. Przykład: B / A da 2. |
5 | MOD (Modulus) Dzieli operand po lewej stronie przez operand po prawej stronie i zwraca resztę. Przykład: B MOD A da 0. |
Przykład
REPORT YS_SEP_08.
DATA: A TYPE I VALUE 150,
B TYPE I VALUE 50,
Result TYPE I.
Result = A / B.
WRITE / Result.
Powyższy kod daje następujące dane wyjściowe -
3
Operatory porównania
Omówmy różne typy operatorów porównania dla różnych operandów.
S.No. | Operator porównania i opis |
---|---|
1 | = (equality test). Alternate form is EQ. Sprawdza, czy wartości dwóch operandów są równe, czy nie, jeśli tak, warunek staje się prawdziwy. Przykład (A = B) nie jest prawdą. |
2 | <> (Inequality test). Alternate form is NE. Sprawdza, czy wartości dwóch operandów są równe, czy nie. Jeśli wartości nie są równe, warunek staje się prawdziwy. Przykład (A <> B) jest prawdą. |
3 | > (Greater than test). Alternate form is GT. Sprawdza, czy wartość lewego operandu jest większa niż wartość prawego operandu. Jeśli tak, to warunek staje się prawdziwy. Przykład (A> B) nie jest prawdą. |
4 | < (Less than test). Alternate form is LT. Sprawdza, czy wartość lewego operandu jest mniejsza niż wartość prawego operandu. Jeśli tak, to warunek staje się prawdziwy. Przykład (A <B) jest prawdą. |
5 | >= (Greater than or equals) Alternate form is GE. Sprawdza, czy wartość lewego operandu jest większa lub równa wartości prawego operandu. Jeśli tak, to warunek staje się prawdziwy. Przykład (A> = B) nie jest prawdą. |
6 | <= (Less than or equals test). Alternate form is LE. Sprawdza, czy wartość lewego operandu jest mniejsza lub równa wartości prawego operandu. Jeśli tak, to warunek staje się prawdziwy. Przykład (A <= B) jest prawdą. |
7 | a1 BETWEEN a2 AND a3 (Interval test) Sprawdza, czy a1 leży między a2 i a3 (włącznie). Jeśli tak, to warunek staje się prawdziwy. Przykład (A BETWEEN B AND C) jest prawdą. |
8 | IS INITIAL Warunek staje się prawdziwy, jeśli zawartość zmiennej nie uległa zmianie i została automatycznie przypisana jej wartość początkowa. Przykład (A IS INITIAL) nie jest prawdą |
9 | IS NOT INITIAL Warunek staje się prawdziwy, jeśli zawartość zmiennej uległa zmianie. Przykład (A NIE WSTĘPNE) jest prawdą. |
Note- Jeśli typ danych lub długość zmiennych nie są zgodne, wykonywana jest automatyczna konwersja. Automatyczne dopasowanie typu jest wykonywane dla jednej lub obu wartości, podczas porównywania dwóch wartości różnych typów danych. Typ konwersji jest określany przez typ danych i kolejność preferencji typu danych.
Poniżej znajduje się kolejność preferencji -
Jeśli jedno pole jest typu I, drugie jest konwertowane na typ I.
Jeśli jedno pole jest typu P, drugie jest konwertowane na typ P.
Jeśli jedno pole jest typu D, drugie jest konwertowane na typ D. Ale typy C i N nie są konwertowane i są bezpośrednio porównywane. Podobnie jest w przypadku typu T.
Jeśli jedno pole jest typu N, a drugie typu C lub X, oba pola są konwertowane na typ P.
Jeśli jedno pole jest typu C, a drugie typu X, typ X jest konwertowany na typ C.
Przykład 1
REPORT YS_SEP_08.
DATA: A TYPE I VALUE 115,
B TYPE I VALUE 119.
IF A LT B.
WRITE: / 'A is less than B'.
ENDIF
Powyższy kod daje następujące dane wyjściowe -
A is less than B
Przykład 2
REPORT YS_SEP_08.
DATA: A TYPE I.
IF A IS INITIAL.
WRITE: / 'A is assigned'.
ENDIF.
Powyższy kod daje następujące dane wyjściowe -
A is assigned.
Operatory bitowe
ABAP udostępnia również szereg bitowych operatorów logicznych, których można używać do tworzenia logicznych wyrażeń algebraicznych. Operatory bitowe można łączyć w złożone wyrażenia przy użyciu nawiasów i tak dalej.
S.No. | Operator bitowy i opis |
---|---|
1 | BIT-NOT Operator jednoargumentowy, który zamienia wszystkie bity w liczbie szesnastkowej na przeciwną wartość. Na przykład zastosowanie tego operatora do liczby szesnastkowej o wartości poziomu bitów 10101010 (np. „AA”) dałoby 01010101. |
2 | BIT-AND Ten operator binarny porównuje każde pole bit po bicie, używając operatora logicznego AND. |
3 | BIT-XOR Operator binarny porównujący bit po bicie każdego pola przy użyciu operatora logicznego XOR (wyłączne OR). |
4 | BIT-OR Operator binarny porównujący bit po bicie każdego pola przy użyciu operatora logicznego OR. |
Na przykład poniżej znajduje się tabela prawdy, która przedstawia wartości wygenerowane podczas stosowania operatorów logicznych AND, OR lub XOR względem dwóch wartości bitowych zawartych w polu A i polu B.
Pole A | Pole B | I | LUB | XOR |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 0 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
Operatory ciągów znaków
Poniżej znajduje się lista operatorów ciągów znaków -
S.No. | Operator ciągu znaków i opis |
---|---|
1 | CO (Contains Only) Sprawdza, czy A składa się wyłącznie ze znaków z B. |
2 | CN (Not Contains ONLY) Sprawdza, czy A zawiera znaki, które nie znajdują się w B. |
3 | CA (Contains ANY) Sprawdza, czy A zawiera co najmniej jeden znak B. |
4 | NA (NOT Contains Any) Sprawdza, czy A nie zawiera żadnego znaku B. |
5 | CS (Contains a String) Checks whether A contains the character string B. |
6 | NS (NOT Contains a String) Checks whether A does not contain the character string B. |
7 | CP (Contains a Pattern) It checks whether A contains the pattern in B. |
8 | NP (NOT Contains a Pattern) It checks whether A does not contain the pattern in B. |
Example
REPORT YS_SEP_08.
DATA: P(10) TYPE C VALUE 'APPLE',
Q(10) TYPE C VALUE 'CHAIR'.
IF P CA Q.
WRITE: / 'P contains at least one character of Q'.
ENDIF.
The above code produces the following output −
P contains at least one character of Q.
There may be a situation when you need to execute a block of code several number of times. In general, statements are executed sequentially: The first statement in a function is executed first, followed by the second, and so on.
Programming languages provide various control structures that allow for more complicated execution paths. A loop statement allows us to execute a statement or group of statements multiple times and following is the general form of a loop statement in most of the programming languages.
ABAP programming language provides the following types of loop to handle looping requirements.
S.No. | Loop Type & Description |
---|---|
1 | WHILE loop Repeats a statement or group of statements when a given condition is true. It tests the condition before executing the loop body. |
2 | Do loop The DO statement is useful for repeating particular task a specific number of times. |
3 | Nested loop You may use one or more loops inside any another WHILE or DO loop. |
Loop Control Statements
Loop control statements change execution from its normal sequence. ABAP includes control statements that allow loops to be ended prematurely. It supports the following control statements.
S.No. | Control Statement & Description |
---|---|
1 | CONTINUE Causes the loop to skip the remainder of its body and starts the next loop pass. |
2 | CHECK If the condition is false, then the remaining statements after the CHECK are just ignored and the system starts the next loop pass. |
3 | EXIT Terminates the loop entirely and transfers execution to the statement immediately following the loop. |
Decision making structures have one or more conditions to be evaluated or tested by the program, along with a statement or statements that are to be executed, if the condition is determined to be true, and optionally, other statements to be executed, if the condition is determined to be false.
Following is the general form of a typical decision-making structure found in most of the programming languages −
ABAP programming language provides the following types of decision-making statements.
S.No. | Statement & Description |
---|---|
1 | IF Statement An IF statement consists of a logical expression followed by one or more statements. |
2 | IF.. Else Statement An IF statement can be followed by an optional ELSE statement that executes when the expression is false. |
3 | Nested IF Statement You may use one IF or ELSEIF statement inside another IF or ELSEIF statement. |
4 | CASE Control Statement CASE statement is used when we need to compare two or more fields or variables. |
Strings, which are widely used in ABAP programming, are a sequence of characters.
We use data type C variables for holding alphanumeric characters, with a minimum of 1 character and a maximum of 65,535 characters. By default, these are aligned to the left.
Creating Strings
The following declaration and initialization creates a string consisting of the word 'Hello'. The size of the string is exactly the number of characters in the word 'Hello'.
Data my_Char(5) VALUE 'Hello'.
Following program is an example of creating strings.
REPORT YT_SEP_15.
DATA my_Char(5) VALUE 'Hello'.
Write my_Char.
The above code produces the following output −
Hello
String Length
In order to find the length of character strings, we can use STRLEN statement. The STRLEN () function returns the number of characters contained in the string.
Example
REPORT YT_SEP_15.
DATA: title_1(10) VALUE 'Tutorials',
length_1 TYPE I.
length_1 = STRLEN( title_1 ).
Write: / 'The Length of the Title is:', length_1.
The above code produces the following output −
The Length of the Title is: 9
ABAP supports a wide range of statements that manipulate strings.
S.No. | Statement & Purpose |
---|---|
1 | CONCATENATE Two strings are joined to form a third string. |
2 | CONDENSE This statement deletes the space characters. |
3 | STRLEN Used to find the length of a field. |
4 | REPLACE Used to make replacements in characters. |
5 | SEARCH To run searches in character strings. |
6 | SHIFT Used to move the contents of a string left or right. |
7 | SPLIT Used to split the contents of a field into two or more fields. |
The following example makes use of some of the above mentioned statements −
Example
REPORT YT_SEP_15.
DATA: title_1(10) VALUE 'Tutorials',
title_2(10) VALUE 'Point',
spaced_title(30) VALUE 'Tutorials Point Limited',
sep,
dest1(30),
dest2(30).
CONCATENATE title_1 title_2 INTO dest1.
Write: / 'Concatenation:', dest1.
CONCATENATE title_1 title_2 INTO dest2 SEPARATED BY sep.
Write: / 'Concatenation with Space:', dest2.
CONDENSE spaced_title.
Write: / 'Condense with Gaps:', spaced_title.
CONDENSE spaced_title NO-GAPS.
Write: / 'Condense with No Gaps:', spaced_title.
The above code produces the following output −
Concatenation: TutorialsPoint
Concatenation with Space: Tutorials Point
Condense with Gaps: Tutorials Point Limited
Condense with No Gaps: TutorialsPointLimited
Note −
In case of Concatenation, the ‘sep’ inserts a space in between the fields.
The CONDENSE statement removes blank spaces between the fields, but leaving only 1 character’s space.
‘NO-GAPS’ is an optional addition to the CONDENSE statement that removes all spaces.
ABAP implicitly references the Gregorian calendar, valid across most of the world. We can convert the output to country specific calendars. A date is a time specified to a precise day, week or month with respect to a calendar. A time is specified to a precise second or minute with respect to a day. ABAP always saves time in 24-hour format. The output can have a country specific format. Dates and time are usually interpreted as local dates that are valid in the current time zone.
ABAP provides two built-in types to work with dates and time −
- D data type
- T data type
Following is the basic format −
DATA: date TYPE D,
time TYPE T.
DATA: year TYPE I,
month TYPE I,
day TYPE I,
hour TYPE I,
minute TYPE I,
second TYPE I.
Both of these types are fixed-length character types that have the form YYYYMMDD and HHMMSS, respectively.
Timestamps
In addition to these built-in types, the other two types TIMESTAMP and TIMESTAMPL are being used in many standard application tables to store a timestamp in the UTC format. Following table shows the basic date and time types available in ABAP.
S.No. | Data Type & Description |
---|---|
1 | D A built-in fixed-length date type of the form YYYYMMDD. For example, the value 20100913 represents the date September 13, 2010. |
2 | T A built-in fixed-length time type of the form HHMMSS. For example, the value 102305 represents time 10:23:05 AM. |
3 | TIMESTAMP (Type P – Length 8 No decimals) This type is used to represent short timestamps in YYYYMMDDhhmmss form. For instance, the value 20100913102305 represents the date September 13, 2010 at 10:23:05 AM. |
4 | TIMESTAMPL (Type P - Length 11 Decimals 7) TIMESTAMPL represents long timestamps in YYYYMMDDhhmmss,mmmuuun form. Here the additional digits ‘mmmuuun’ represent the fractions of a second. |
Bieżąca data i godzina
Poniższe fragmenty kodu pobierają bieżącą datę i godzinę systemową.
REPORT YR_SEP_15.
DATA: date_1 TYPE D.
date_1 = SY-DATUM.
Write: / 'Present Date is:', date_1 DD/MM/YYYY.
date_1 = date_1 + 06.
Write: / 'Date after 6 Days is:', date_1 DD/MM/YYYY.
Powyższy kod daje następujące dane wyjściowe -
Present Date is: 21.09.2015
Date after 6 Days is: 27.09.2015
Zmienna date_1 ma przypisaną wartość bieżącej daty systemowej SY-DATUM. Następnie zwiększamy wartość daty o 6. Jeśli chodzi o obliczanie daty w ABAP, oznacza to, że zwiększamy składnik dnia obiektu daty o 6 dni. Środowisko wykonawcze ABAP jest na tyle inteligentne, że przenosi wartość daty po osiągnięciu końca miesiąca.
Obliczanie czasu działa podobnie do obliczania daty. Poniższy kod zwiększa bieżący czas systemowy o 75 sekund przy użyciu podstawowej arytmetyki czasu.
REPORT YR_SEP_15.
DATA: time_1 TYPE T.
time_1 = SY-UZEIT.
Write /(60) time_1 USING EDIT MASK
'Now the Time is: __:__:__'.
time_1 = time_1 + 75.
Write /(60) time_1 USING EDIT MASK
'A Minute and a Quarter from Now, it is: __:__:__'.
Powyższy kod daje następujące dane wyjściowe -
Now the Time is 11:45:05
A Minute and a Quarter from Now, it is: 11:46:20
Praca z sygnaturami czasowymi
Możesz pobrać bieżący czas systemowy i zapisać go w zmiennej znacznika czasu za pomocą GET TIME STAMPjak pokazano w poniższym kodzie. Instrukcja GET TIME STAMP przechowuje znacznik czasu w formacie długiej lub krótkiej ręki zgodnie z typem użytego obiektu danych znacznika czasu. Wartość znacznika czasu jest kodowana przy użyciu standardu UTC.
REPORT YR_SEP_12.
DATA: stamp_1 TYPE TIMESTAMP,
stamp_2 TYPE TIMESTAMPL.
GET TIME STAMP FIELD stamp_1.
Write: / 'The short time stamp is:', stamp_1
TIME ZONE SY-ZONLO.
GET TIME STAMP FIELD stamp_2.
Write: / 'The long time stamp is:', stamp_2
TIME ZONE SY-ZONLO.
Powyższy kod daje następujące dane wyjściowe -
The short time stamp is: 18.09.2015 11:19:40
The long time stamp is: 18.09.2015 11:19:40,9370000
W powyższym przykładzie wyświetlamy sygnaturę czasową za pomocą dodania STREFA CZASOWA instrukcji WRITE. Ten dodatek formatuje dane wyjściowe znacznika czasu zgodnie z regułami dla określonej strefy czasowej. Pole systemowe SY-ZONLO służy do wyświetlenia lokalnej strefy czasowej skonfigurowanej w preferencjach użytkownika.
ABAP oferuje różne typy opcji formatowania do formatowania danych wyjściowych programów. Na przykład możesz utworzyć listę zawierającą różne elementy w różnych kolorach lub stylach formatowania.
Instrukcja WRITE to instrukcja formatująca używana do wyświetlania danych na ekranie. Istnieją różne opcje formatowania instrukcji WRITE. Składnia instrukcji WRITE to -
WRITE <format> <f> <options>.
W tej składni <format> reprezentuje specyfikację formatu wyjściowego, którą może być ukośnik (/) wskazujący, że wyjście zaczyna się od nowego wiersza. Oprócz ukośnika specyfikacja formatu zawiera numer kolumny i długość kolumny. Na przykład instrukcja WRITE / 04 (6) pokazuje, że nowy wiersz zaczyna się od kolumny 4, a długość kolumny wynosi 6, podczas gdy instrukcja WRITE 20 pokazuje bieżący wiersz z kolumną 20. Parametr <f> reprezentuje zmienną danych lub numerowany tekst.
W poniższej tabeli opisano różne klauzule używane do formatowania -
S.No. | Klauzula i opis |
---|---|
1 | LEFT-JUSTIFIED Określa, że wynik jest wyrównany do lewej. |
2 | CENTERED Oznacza, że wynik jest wyśrodkowany. |
3 | RIGHT-JUSTIFIED Określa, że wynik jest wyrównywany do prawej. |
4 | UNDER <g> Dane wyjściowe rozpoczynają się bezpośrednio pod polem <g>. |
5 | NO-GAP Określa, że puste miejsce po polu <f> jest odrzucane. |
6 | USING EDIT MASK <m> Oznacza specyfikację szablonu formatu <m>. Używanie bez maski EDIT: określa, że szablon formatu określony w słowniku ABAP jest dezaktywowany. |
7 | NO-ZERO Jeśli pole zawiera tylko zera, są one zastępowane spacjami. |
Poniżej przedstawiono opcje formatowania pól typu liczbowego -
S.No. | Klauzula i opis |
---|---|
1 | NO-SIGN Określa, że na ekranie nie jest wyświetlany żaden znak wiodący. |
2 | EXPONENT <e> Określa, że w typie F (pola zmiennoprzecinkowe) wykładnik jest zdefiniowany w <e>. |
3 | ROUND <r> Pola typu P (spakowane numeryczne typy danych) są najpierw mnożone przez 10 ** (- r), a następnie zaokrąglane do wartości całkowitej. |
4 | CURRENCY <c> Oznacza, że formatowanie jest wykonywane zgodnie z wartością waluty <c>, która jest przechowywana w tabeli bazy danych TCURX. |
5 | UNIT <u> Określa, że liczba miejsc dziesiętnych jest ustalona zgodnie z jednostką <u> określoną w tabeli bazy danych T006 dla typu P. |
6 | DECIMALS <d> Określa, że liczba cyfr <d> musi być wyświetlana po przecinku. |
Na przykład w poniższej tabeli przedstawiono różne opcje formatowania pól daty -
Opcja formatowania | Przykład |
---|---|
DD / MM / RR | 13/01/15 |
DD / MM / RR | 13.01.15 |
DD / MM / RRRR | 13.01.2015 |
DD / MM / RRRR | 13.01.2015 |
DDMMRR | 130115 |
MMDDYY | 011315 |
RRMMDD | 150113 |
Tutaj DD oznacza datę w dwóch cyfrach, MM oznacza miesiąc za pomocą dwóch cyfr, RR oznacza rok za pomocą dwóch cyfr, a RRRR oznacza rok za pomocą czterech cyfr.
Rzućmy okiem na przykład kodu ABAP, który implementuje niektóre z powyższych opcji formatowania -
REPORT ZTest123_01.
DATA: n(9) TYPE C VALUE 'Tutorials',
m(5) TYPE C VALUE 'Point'.
WRITE: n, m.
WRITE: / n,
/ m UNDER n.
WRITE: / n NO-GAP, m.
DATA time TYPE T VALUE '112538'.
WRITE: / time,
/(8) time Using EDIT MASK '__:__:__'.
Powyższy kod daje następujące dane wyjściowe -
Tutorials Point
Tutorials
Point
TutorialsPoint
112538
11:25:38
Na exceptionto problem, który pojawia się podczas wykonywania programu. W przypadku wystąpienia wyjątku normalny przepływ programu zostaje przerwany, a aplikacja programu kończy się nieprawidłowo, co nie jest zalecane, dlatego te wyjątki należy obsługiwać.
Wyjątki umożliwiają przekazanie kontroli z jednej części programu do drugiej. Obsługa wyjątków ABAP jest zbudowana na podstawie trzech słów kluczowych - RAISE, TRY, CATCH i CLEANUP. Zakładając, że blok wywoła wyjątek, metoda przechwytuje wyjątek przy użyciu kombinacji słów kluczowych TRY i CATCH. Blok TRY - CATCH jest umieszczony wokół kodu, który może generować wyjątek. Poniżej znajduje się składnia użycia TRY - CATCH -
TRY.
Try Block <Code that raises an exception>
CATCH
Catch Block <exception handler M>
. . .
. . .
. . .
CATCH
Catch Block <exception handler R>
CLEANUP.
Cleanup block <to restore consistent state>
ENDTRY.
RAISE- Wyjątki wskazują, że zaistniała jakaś wyjątkowa sytuacja. Zwykle program obsługi wyjątków próbuje naprawić błąd lub znaleźć alternatywne rozwiązanie.
TRY- Blok TRY zawiera kod aplikacji, którego wyjątki mają być obsługiwane. Ten blok instrukcji jest przetwarzany sekwencyjnie. Może zawierać dalsze struktury kontrolne i wywołania procedur lub inne programy ABAP. Po nim następuje jeden lub więcej bloków catch.
CATCH- Program przechwytuje wyjątek z obsługą wyjątków w miejscu programu, w którym chcesz obsłużyć problem. Słowo kluczowe CATCH wskazuje na przechwycenie wyjątku.
CLEANUP- Instrukcje bloku CLEANUP są wykonywane za każdym razem, gdy w bloku TRY wystąpi wyjątek, który nie zostanie przechwycony przez procedurę obsługi tej samej konstrukcji TRY - ENDTRY. W ramach klauzuli CLEANUP system może przywrócić obiekt do spójnego stanu lub zwolnić zasoby zewnętrzne. Oznacza to, że czyszczenie można wykonać dla kontekstu bloku TRY.
Podnoszenie wyjątków
Wyjątki mogą być zgłaszane w dowolnym punkcie metody, modułu funkcji, podprogramu i tak dalej. Wyjątek można zgłosić na dwa sposoby -
Wyjątki zgłoszone przez system wykonawczy ABAP.
Na przykład Y = 1 / 0. Spowoduje to błąd czasu wykonywania typu CX_SY_ZERODIVIDE.
Wyjątki zgłoszone przez programistę.
Podnieś i utwórz obiekt wyjątku jednocześnie. Wywołaj wyjątek z obiektem wyjątku, który już istnieje w pierwszym scenariuszu. Składnia jest następująca: RAISE EXCEPTION exep.
Łapanie wyjątków
Programy obsługi służą do wychwytywania wyjątków.
Rzućmy okiem na fragment kodu -
DATA: result TYPE P LENGTH 8 DECIMALS 2,
exref TYPE REF TO CX_ROOT,
msgtxt TYPE STRING.
PARAMETERS: Num1 TYPE I, Num2 TYPE I.
TRY.
result = Num1 / Num2.
CATCH CX_SY_ZERODIVIDE INTO exref.
msgtxt = exref→GET_TEXT( ).
CATCH CX_SY_CONVERSION_NO_NUMBER INTO exref.
msgtxt = exref→GET_TEXT( ).
W powyższym fragmencie kodu próbujemy podzielić Num1 przez Num2, aby uzyskać wynik w zmiennej typu float.
Można wygenerować dwa rodzaje wyjątków.
Błąd konwersji liczb.
Podzielić przez zero wyjątku. Programy obsługi przechwytują wyjątek CX_SY_CONVERSION_NO_NUMBER, a także wyjątek CX_SY_ZERODIVIDE. Tutaj do uzyskania opisu wyjątku używana jest metoda GET_TEXT () klasy wyjątku.
Atrybuty wyjątków
Oto pięć atrybutów i metod wyjątków -
S.No. | Atrybut i opis |
---|---|
1 | Textid Służy do definiowania różnych tekstów wyjątków, a także wpływa na wynik metody get_text. |
2 | Previous Ten atrybut może przechowywać oryginalny wyjątek, który umożliwia tworzenie łańcucha wyjątków. |
3 | get_text Zwraca tekstową reprezentację jako ciąg, zgodnie z językiem systemowym wyjątku. |
4 | get_longtext Zwraca długi wariant tekstowej reprezentacji wyjątku jako ciąg. |
5 | get_source_position Podaje nazwę programu i numer linii, do której został zgłoszony wyjątek. |
Przykład
REPORT ZExceptionsDemo.
PARAMETERS Num_1 TYPE I.
DATA res_1 TYPE P DECIMALS 2.
DATA orf_1 TYPE REF TO CX_ROOT.
DATA txt_1 TYPE STRING.
start-of-selection.
Write: / 'Square Root and Division with:', Num_1.
write: /.
TRY.
IF ABS( Num_1 ) > 150.
RAISE EXCEPTION TYPE CX_DEMO_ABS_TOO_LARGE.
ENDIF.
TRY.
res_1 = SQRT( Num_1 ).
Write: / 'Result of square root:', res_1.
res_1 = 1 / Num_1.
Write: / 'Result of division:', res_1.
CATCH CX_SY_ZERODIVIDE INTO orf_1.
txt_1 = orf_1→GET_TEXT( ).
CLEANUP.
CLEAR res_1.
ENDTRY.
CATCH CX_SY_ARITHMETIC_ERROR INTO orf_1.
txt_1 = orf_1→GET_TEXT( ).
CATCH CX_ROOT INTO orf_1.
txt_1 = orf_1→GET_TEXT( ).
ENDTRY.
IF NOT txt_1 IS INITIAL.
Write / txt_1.
ENDIF.
Write: / 'Final Result is:', res_1.
W tym przykładzie, jeśli liczba jest większa niż 150, zostanie zgłoszony wyjątek CX_DEMO_ABS_TOO_LARGE. Powyższy kod daje następujący wynik dla liczby 160.
Square Root and Division with: 160
The absolute value of number is too high
Final Result is: 0.00
Jak wiesz, SQL można podzielić na dwie części -
- DML (język manipulacji danymi)
- DDL (język definicji danych)
Część DML składa się z poleceń zapytań i aktualizacji, takich jak SELECT, INSERT, UPDATE, DELETE itp., A programy ABAP obsługują część DML języka SQL. Część DDL składa się z poleceń, takich jak CREATE TABLE, CREATE INDEX, DROP TABLE, ALTER TABLE itp., A słownik ABAP obsługuje część DDL języka SQL.
Słownik ABAP można przeglądać jako metadane (tj. Dane o danych), które znajdują się w bazie danych SAP wraz z metadanymi obsługiwanymi przez bazę danych. Słownik służy do tworzenia definicji danych i zarządzania nimi oraz do tworzenia tabel, elementów danych, domen, widoków i typów.
Podstawowe typy w słowniku ABAP
Podstawowe typy w słowniku ABAP są następujące -
Data elements opisać typ podstawowy, określając typ danych, długość i ewentualnie miejsca dziesiętne.
Structures z komponentami, które mogą mieć dowolny typ.
Table types opisać strukturę tabeli wewnętrznej.
W programach ABAP można odwoływać się do różnych obiektów w środowisku Dictionary. Słownik jest znany jako obszar globalny. Obiekty w słowniku są globalne dla wszystkich programów ABAP, a dane w programach ABAP można zadeklarować poprzez odniesienie do tych globalnych obiektów słownika.
Słownik obsługuje definicję typów zdefiniowanych przez użytkownika i te typy są używane w programach ABAP. Definiują również strukturę obiektów bazy danych, takich jak tabele, widoki i indeksy. Obiekty te są tworzone automatycznie w bazowej bazie danych w ich definicjach słownikowych, gdy obiekty są aktywowane. Słownik zapewnia również narzędzia edycyjne, takie jak Pomoc wyszukiwania i narzędzie blokujące, takie jak Zablokuj obiekty.
Zadania słownikowe
Słownik ABAP osiąga następujące wyniki -
- Wymusza integralność danych.
- Zarządza definicjami danych bez nadmiarowości.
- Ściśle integruje się z resztą środowiska roboczego ABAP.
Przykład
Każdy złożony typ zdefiniowany przez użytkownika można zbudować z 3 podstawowych typów w Słowniku. Dane klienta są przechowywane w strukturze „Klient” zawierającej składniki Nazwa, Adres i Telefon, jak pokazano na poniższym obrazku. Nazwa to także struktura składająca się z komponentów, imienia i nazwiska. Oba te składniki są elementarne, ponieważ ich typ jest definiowany przez element danych.
Typ komponentu Adres jest definiowany przez strukturę, której komponenty są również strukturami, a komponent Telefon jest definiowany przez typ tabeli, ponieważ klient może mieć więcej niż jeden numer telefonu. Typy są używane w programach ABAP, a także do definiowania typów parametrów interfejsu modułów funkcyjnych.
Trzy podstawowe obiekty służące do definiowania danych w słowniku ABAP to Domeny, Elementy danych i Tabele. Domena służy do technicznej definicji pola tabeli, takiego jak typ i długość pola, a element danych jest używany do definicji semantycznej (krótki opis). Element danych opisuje znaczenie domeny w określonym kontekście biznesowym. Zawiera przede wszystkim pomoc polową i etykiety pól na ekranie.
Domena jest przypisywana do elementu danych, który z kolei jest przypisywany do pól tabeli lub pól struktury. Na przykład domena MATNR (numer materiału CHAR) jest przypisana do elementów danych, takich jak MATNR_N, MATNN i MATNR_D, i są one przypisane do wielu pól tabeli i pól struktur.
Tworzenie domen
Przed utworzeniem nowej domeny sprawdź, czy jakiekolwiek istniejące domeny mają te same specyfikacje techniczne wymagane w polu tabeli. Jeśli tak, mamy użyć tej istniejącej domeny. Omówmy procedurę tworzenia domeny.
Step 1 - Przejdź do Transakcji SE11.
Step 2- Wybierz przycisk opcji Domena na ekranie początkowym Słownika ABAP i wprowadź nazwę domeny, jak pokazano na poniższym zrzucie ekranu. Kliknij przycisk UTWÓRZ. Możesz tworzyć domeny w przestrzeniach nazw klientów, a nazwa obiektu zawsze zaczyna się od „Z” lub „Y”.
Step 3- Wprowadź opis w krótkim polu tekstowym na ekranie konserwacji domeny. W tym przypadku jest to „domena klienta”.Note - Nie możesz wprowadzić żadnego innego atrybutu, dopóki nie wprowadzisz tego atrybutu.
Step 4- Wprowadź typ danych, liczbę znaków i miejsca dziesiętne w bloku Format na karcie Definicja. Naciśnij klawisz na Output Length, a proponuje i wyświetla długość wyjściową. Jeśli nadpiszesz proponowaną długość wyjściową, możesz zobaczyć ostrzeżenie podczas aktywacji domeny. Możesz wypełnić konwersacje. W razie potrzeby pola rutynowe, znak i małe litery. Ale są to zawsze atrybuty opcjonalne.
Step 5- Wybierz kartę Zakres wartości. Jeśli domena jest ograniczona do posiadania tylko stałych wartości, wprowadź stałe wartości lub przedziały. Zdefiniuj tabelę wartości, jeśli system ma zaproponować tę tabelę jako tabelę kontrolną podczas definiowania klucza obcego dla pól odnoszących się do tej domeny. Ale to wszystko są opcjonalne atrybuty.
Step 6- Zapisz zmiany. Pojawi się wyskakujące okienko Utwórz wpis do katalogu z prośbą o pakiet. Możesz wpisać nazwę pakietu, w którym pracujesz. Jeśli nie masz żadnego pakietu, możesz go utworzyć w Nawigatorze obiektów lub zapisać swoją domenę za pomocą przycisku Obiekt lokalny.
Step 7- Aktywuj swoją domenę. Kliknij ikonę Aktywuj (ikona zapałki) lub naciśnij CTRL + F3, aby aktywować domenę. Pojawi się wyskakujące okienko z listą 2 aktualnie nieaktywnych obiektów, jak pokazano na poniższej migawce -
Step 8- W tym momencie należy aktywować górny wpis oznaczony „DOMA” o nazwie ZSEP_18. Gdy jest to podświetlone, kliknij zielony przycisk ptaszka. To okno znika, a na pasku stanu zostanie wyświetlony komunikat „Obiekt aktywowany”.
Jeśli podczas aktywacji domeny wystąpiły komunikaty o błędach lub ostrzeżenia, dziennik aktywacji zostanie wyświetlony automatycznie. Dziennik aktywacji zawiera informacje o przebiegu aktywacji. Możesz również wywołać dziennik aktywacji za pomocą Narzędzia (M) → Rejestr aktywacji.
Elementy danych opisują poszczególne pola w słowniku danych ABAP. Są to najmniejsze niepodzielne jednostki typów złożonych i służą do definiowania typu pola tabeli, elementu struktury lub typu wiersza tabeli. Do elementu danych można przypisać informacje o znaczeniu pola tabeli, a także informacje o edycji odpowiedniego pola ekranu. Informacje te są automatycznie dostępne dla wszystkich pól ekranu, które odnoszą się do elementu danych. Elementy danych opisują typy podstawowe lub typy referencyjne.
Tworzenie elementów danych
Przed utworzeniem nowego elementu danych należy sprawdzić, czy jakiekolwiek istniejące elementy danych mają takie same specyfikacje semantyczne wymagane w polu tabeli. Jeśli tak, możesz użyć tego istniejącego elementu danych. Do elementu danych można przypisać predefiniowany typ, dziedzinę lub typ odniesienia.
Poniżej znajduje się procedura tworzenia elementu danych -
Step 1 - Przejdź do Transakcji SE11.
Step 2 - Wybierz przycisk opcji Typ danych na ekranie początkowym Słownika ABAP i wprowadź nazwę elementu danych, jak pokazano poniżej.
Step 3- Kliknij przycisk UTWÓRZ. Możesz tworzyć elementy danych w przestrzeniach nazw klientów, a nazwa obiektu zawsze zaczyna się od „Z” lub „Y”.
Step 4 - Zaznacz przycisk opcji Element danych w wyskakującym okienku UTWÓRZ TYP, które pojawia się z trzema przyciskami opcji.
Step 5- Kliknij ikonę zielonego znacznika wyboru. Zostaniesz przekierowany do ekranu konserwacji elementu danych.
Step 6- Wprowadź opis w krótkim polu tekstowym na ekranie konserwacji elementu danych. W tym przypadku jest to „Element danych klienta”.Note - Nie możesz wprowadzić żadnego innego atrybutu, dopóki nie wprowadzisz tego atrybutu.
Step 7- Przypisz element danych do typu. Możesz utworzyć elementarny element danych, sprawdzając typ podstawowy lub element danych odniesienia, zaznaczając Typ odniesienia. Element danych można przypisać do domeny lub predefiniowanego typu w ramach typu podstawowego oraz z nazwą typu odniesienia lub referencją do predefiniowanego typu w ramach typu odniesienia.
Step 8- Wprowadź pola dla krótkiego tekstu, średniego tekstu, długiego tekstu i nagłówka na karcie Etykieta pola. Możesz nacisnąć klawisz Enter, a długość jest automatycznie generowana dla tych etykiet.
Step 9- Zapisz zmiany. Pojawi się wyskakujące okienko Utwórz wpis do katalogu z prośbą o pakiet. Możesz wpisać nazwę pakietu, w którym pracujesz. Jeśli nie masz żadnego pakietu, możesz go utworzyć w Nawigatorze obiektów lub zapisać element danych za pomocą przycisku Obiekt lokalny.
Step 10- Aktywuj swój element danych. Kliknij ikonę Aktywuj (ikona zapałki) lub naciśnij CTRL + F3, aby aktywować element danych. Pojawi się wyskakujące okienko z listą 2 aktualnie nieaktywnych obiektów, jak pokazano na poniższym zrzucie ekranu.
Step 11- W tym momencie należy aktywować górny wpis oznaczony „DTEL” o nazwie Z_CUST. Gdy jest to podświetlone, kliknij zielony przycisk ptaszka. To okno znika, a na pasku stanu zostanie wyświetlony komunikat „Obiekt aktywowany”.
Jeśli podczas aktywacji elementu danych wystąpiły komunikaty o błędach lub ostrzeżenia, dziennik aktywacji zostanie wyświetlony automatycznie. Dziennik aktywacji zawiera informacje o przebiegu aktywacji. Możesz również wywołać dziennik aktywacji za pomocą Narzędzia (M) → Rejestr aktywacji.
Tabele można definiować niezależnie od bazy danych w Słowniku ABAP. Kiedy tabela jest aktywowana w Słowniku ABAP, w bazie danych tworzona jest również podobna kopia jej pól. Tabele zdefiniowane w Słowniku ABAP są automatycznie tłumaczone na format zgodny z bazą danych, ponieważ definicja tabeli zależy od bazy danych używanej przez system SAP.
Tabela może zawierać jedno lub więcej pól, z których każde jest zdefiniowane za pomocą typu i długości danych. Duża ilość danych przechowywanych w tabeli jest rozłożona na kilka pól zdefiniowanych w tabeli.
Rodzaje pól tabeli
Tabela składa się z wielu pól, a każde pole zawiera wiele elementów. W poniższej tabeli wymieniono różne elementy pól tabeli -
S.No. | Elementy i opis |
---|---|
1 | Field name To jest nazwa nadana polu, które może zawierać maksymalnie 16 znaków. Nazwa pola może składać się z cyfr, liter i znaków podkreślenia. Musi zaczynać się od litery. |
2 | Key flag Określa, czy pole należy do pola kluczowego. |
3 | Field type Przypisuje typ danych do pola. |
4 | Field length Liczba znaków, które można wprowadzić w polu. |
5 | Decimal places Określa liczbę cyfr dopuszczalnych po przecinku. Ten element jest używany tylko dla liczbowych typów danych. |
6 | Short text Opisuje znaczenie odpowiedniego pola. |
Tworzenie tabel w słowniku ABAP
Step 1- Przejdź do transakcji SE11, wybierz opcję „Tabela bazy danych” i wprowadź nazwę tworzonej tabeli. W naszym przypadku wpisaliśmy nazwę ZCUSTOMERS1. Kliknij przycisk Utwórz. Pojawi się ekran Dictionary: Maintain Table. Tutaj zakładka „Dostawa i konserwacja” jest wybrana domyślnie.
Step 2 - Wprowadź krótki tekst wyjaśniający w polu Krótki opis.
Step 3- Kliknij ikonę Wyszukaj w Pomocy obok pola Klasa dostawy. Wybierz opcję „A [Tabela aplikacji (dane podstawowe i dane transakcji)]”.
Step 4- Wybierz opcję „Wyświetlanie / konserwacja dozwolona” z menu rozwijanego „Przeglądarka danych / przegląd tabeli”. Zostanie wyświetlony ekran Słownik: Tabela konserwacji.
Step 5- Wybierz kartę Pola. Pojawi się ekran zawierający opcje związane z zakładką Pola.
Step 6- Wpisz nazwy pól tabeli w kolumnie Pole. Nazwa pola może zawierać litery, cyfry i podkreślenia, ale zawsze musi zaczynać się od litery i nie może być dłuższa niż 16 znaków.
Pola, które mają zostać utworzone, również muszą zawierać elementy danych, ponieważ pobierają one atrybuty, takie jak typ danych, długość, miejsca dziesiętne i krótki tekst, ze zdefiniowanego elementu danych.
Step 7- Wybierz kolumnę Klucz, jeśli chcesz, aby pole było częścią klucza tabeli. Stwórzmy takie pola jak KLIENT, KLIENT, NAZWA, TYTUŁ i Data urodzenia.
Step 8- Pierwsze pole jest ważne i identyfikuje klienta, z którym powiązane są rekordy. Wprowadź „Klient” jako pole i „MANDT” jako element danych. System automatycznie wypełnia Typ danych, Długość, Liczby dziesiętne i Krótki opis. Pole „Klient” staje się polem kluczowym, zaznaczając pole „Klucz”.
Step 9- Kolejnym polem jest „Klient”. Zaznacz to pole, aby uczynić je polem kluczowym, i wprowadź nowy element danych „ZCUSTNUM”. Kliknij przycisk Zapisz.
Step 10- Ponieważ element danych „ZCUSTNUM” jeszcze nie istnieje, należy go utworzyć. Kliknij dwukrotnie nowy element danych, a pojawi się okno „Utwórz element danych”. Odpowiedz „Tak”, a pojawi się okno „Zachowaj element danych”.
Step 11- Wpisz „Numer klienta” w obszarze Krótki opis. Dla nowego elementu danych należy zdefiniować elementarny typ danych o nazwie „Dziedzina”. Wpisz więc „ZCUSTD1”, kliknij go dwukrotnie i zaakceptuj zapisanie wprowadzonych zmian. Wybierz „Tak”, aby utworzyć domenę i wpisz w polu „Krótki opis” opis domeny.
Zakładka „Definicja” otwiera się automatycznie. Pierwsze pole to „Typ danych”.
Step 12- Kliknij wewnątrz pola i wybierz typ „NUMC” z menu rozwijanego. Wprowadź cyfrę 8 w polu „Nie. liczby znaków (maksymalnie 8 znaków) i wpisz 0 w polu „Miejsca dziesiętne”. Należy wybrać długość wyjściową 8, a następnie nacisnąć klawisz Enter. Opis pola „NUMC” musi pojawić się ponownie, potwierdzając, że jest to prawidłowy wpis.
Step 13 - Kliknij przycisk Zapisz i Aktywuj obiekt.
Step 14- Naciśnij klawisz F3, aby powrócić do ekranu „Zachowaj / Zmień element danych”. Utwórz cztery etykiety pól, jak pokazano na poniższej migawce. Następnie zapisz i aktywuj element.
Step 15- Naciśnij przycisk Wstecz, aby powrócić do ekranu konserwacji stołu. Kolumna Klient zawiera prawidłowy typ danych, długość, liczby dziesiętne i krótki opis. Wskazuje to na pomyślne utworzenie elementu danych, a także używanej domeny.
Podobnie musimy utworzyć trzy dodatkowe pola, takie jak NAZWA, TYTUŁ i DOB.
Step 16- Wybierz „Ustawienia techniczne” z paska narzędzi. Wybierz APPL0 dla „Klasa danych” i pierwszą kategorię rozmiaru 0 dla pola „Kategoria”. W przypadku opcji buforowania należy wybrać „Buforowanie niedozwolone”.
Step 17- Kliknij Zapisz. Wróć do stołu i aktywuj go. Pojawi się następujący ekran.
Tabela „ZCUSTOMERS1” jest aktywna.
Structure to obiekt danych składający się z komponentów dowolnego typu danych przechowywanych jeden po drugim w pamięci.
Struktury są przydatne do malowania pól ekranowych oraz do manipulowania danymi, które mają spójny format zdefiniowany przez dyskretną liczbę pól.
Struktura może mieć tylko jeden rekord w czasie wykonywania, ale tabela może mieć wiele rekordów.
Tworzenie struktury
Step 1 - Przejdź do transakcji SE11.
Step 2- Kliknij opcję „Typ danych” na ekranie. Wpisz nazwę „ZSTR_CUSTOMER1” i kliknij przycisk Utwórz.
Step 3- Wybierz opcję „Struktura” na następnym ekranie i naciśnij Enter. Możesz zobaczyć kreatora „Utrzymaj / Zmień strukturę”.
Step 4 - Wprowadź krótki opis, jak pokazano na poniższej migawce.
Step 5 - Wprowadź komponent (nazwę pola) i typ komponentu (element danych).
Note: Tutaj nazwy komponentów zaczynają się od Z zgodnie z zaleceniem SAP. Skorzystajmy z elementów danych, które już utworzyliśmy w tabeli bazy danych.
Step 6 - Musisz zapisać, sprawdzić i aktywować po podaniu wszystkich komponentów i typów komponentów.
Pojawi się następujący ekran -
Step 7- Gdy ten „ZSTR_CUSTOMER1” jest podświetlony, kliknij zielony przycisk ptaszka. To okno znika, a na pasku stanu zostanie wyświetlony komunikat „Aktywny”.
Struktura jest teraz aktywowana, jak pokazano na poniższej migawce -
Widok działa tylko jak tabela bazy danych. Ale nie zajmie miejsca do przechowywania. Widok działa podobnie do wirtualnej tabeli - tabeli, która nie istnieje fizycznie. Widok jest tworzony przez połączenie danych z jednej lub kilku tabel zawierających informacje o obiekcie aplikacji. Korzystając z widoków, można przedstawić podzbiór danych zawartych w tabeli lub połączyć wiele tabel w jedną wirtualną tabelę.
Dane związane z obiektem aplikacji są dystrybuowane w wielu tabelach przy użyciu widoków bazy danych. Używają warunku sprzężenia wewnętrznego, aby połączyć dane z różnych tabel. Widok konserwacji służy do wyświetlania i modyfikowania danych przechowywanych w obiekcie aplikacji. Każdy widok konserwacji ma przypisany stan konserwacji.
Używamy widoku rzutowania do maskowania niechcianych pól i wyświetlania tylko odpowiednich pól w tabeli. Widoki rzutowania muszą być zdefiniowane na jednej przezroczystej tabeli. Widok rzutowania zawiera dokładnie jedną tabelę. Nie możemy zdefiniować warunków wyboru dla widoków rzutów.
Tworzenie widoku
Step 1- Wybierz przycisk opcji Widok na ekranie początkowym Słownika ABAP. Wpisz nazwę widoku, który ma zostać utworzony, a następnie kliknij przycisk Utwórz. Nazwę widoku wpisaliśmy jako ZVIEW_TEST.
Step 2- Wybierz przycisk opcji widoku projekcji podczas wybierania typu widoku i kliknij przycisk Kopiuj. Zostanie wyświetlony ekran „Słownik: Zmień widok”.
Step 3 - Wprowadź krótki opis w polu Krótki opis oraz nazwę tabeli, która ma być używana w polu Tabela bazowa, jak pokazano na poniższym obrazie.
Step 4 - Kliknij przycisk „Pola tabeli”, aby uwzględnić pola tabeli ZCUSTOMERS1 w widoku rzutu.
Step 5- Zostanie wyświetlony ekran Wybór pola z tabeli ZCUSTOMERS1. Wybierz pola, które chcesz uwzględnić w widoku projekcji, jak pokazano na poniższej migawce.
Step 6 - Po kliknięciu przycisku Kopiuj wszystkie pola wybrane do widoku projekcji zostaną wyświetlone na ekranie „Słownik: Zmień widok”.
Step 7- Wybierz kartę Stan konserwacji, aby zdefiniować metodę dostępu. Wybierz przycisk opcji tylko do odczytu i opcję „Wyświetl / konserwacja dozwolona z ograniczeniami” z menu rozwijanego „Przeglądarka danych / konserwacja widoku tabeli”.
Step 8- Zapisz i aktywuj. Na ekranie „Słownik: Zmień widok” wybierz Narzędzia (M)> Zawartość, aby wyświetlić ekran wyboru dla ZVIEW_TEST.
Step 9- Kliknij ikonę Wykonaj. Dane wyjściowe widoku projekcji są wyświetlane, jak pokazano na poniższym zrzucie ekranu.
Tabela ZCUSTOMERS1 składa się z 5 pól. Tutaj wyświetlane pola to 3 (Klient, numer klienta i nazwa) z 4 wpisami. Numery klientów to od 100001 do 100004 z odpowiednimi nazwami.
Search Help, kolejny obiekt repozytorium Słownika ABAP, służy do wyświetlania wszystkich możliwych wartości dla pola w postaci listy. Ta lista jest również znana jakohit list. Możesz wybrać wartości, które mają zostać wprowadzone w polach z tej listy trafień, zamiast ręcznie wprowadzać wartość, co jest żmudne i podatne na błędy.
Tworzenie pomocy wyszukiwania
Step 1- Przejdź do transakcji SE11. Wybierz przycisk opcji, aby uzyskać pomoc dotyczącą wyszukiwania. Wpisz nazwę pomocy wyszukiwania, która ma zostać utworzona. Wpiszmy nazwę ZSRCH1. Kliknij przycisk Utwórz.
Step 2- System wyświetli monit o utworzenie typu pomocy wyszukiwania. Wybierz pomoc do wyszukiwania podstawowego, która jest domyślna. Pojawi się ekran tworzenia podstawowej pomocy wyszukiwania, jak pokazano na poniższym zrzucie ekranu.
Step 3- W metodzie selekcji musimy wskazać, czy naszym źródłem danych jest tabela czy widok. W naszym przypadku jest to stół. Tabela to ZCUSTOMERS1. Jest wybierany z listy wyboru.
Step 4- Po wprowadzeniu metody selekcji, kolejnym polem jest typ okna dialogowego. To steruje wyglądem ograniczającego okna dialogowego. Jest rozwijana lista z trzema opcjami. Wybierzmy opcję „Wyświetlaj wartości natychmiast”.
Step 5- Dalej jest obszar parametrów. Dla każdego parametru lub pola pomocy wyszukiwania te pola kolumn należy wprowadzić zgodnie z wymaganiami.
Search help parameter- To jest pole ze źródła danych. Pola z tabeli są wymienione na liście wyboru. Pola uczestniczące w pomocy wyszukiwania zostaną wprowadzone, po jednym polu w każdym wierszu. Uwzględnijmy dwa pola KLIENT i NAZWA. W pozostałych kolumnach wskazano udział tych dwóch pól.
Import- To pole jest polem wyboru wskazującym, czy parametr pomocy wyszukiwania jest parametrem importu. Eksport lub import dotyczy pomocy wyszukiwania.
Export- To pole jest polem wyboru wskazującym, czy parametr pomocy wyszukiwania jest parametrem eksportu. Eksport spowoduje przeniesienie wartości pól z listy wyboru do pól ekranu.
LPos- Jego wartość steruje fizycznym położeniem parametru lub pola pomocy wyszukiwania na liście wyboru. Jeśli wprowadzisz wartość 1, pole pojawi się na pierwszej pozycji na liście wyboru i tak dalej.
SPos- Kontroluje fizyczne położenie parametru lub pola Pomocy wyszukiwania w ograniczającym oknie dialogowym. Jeśli wprowadzisz wartość 1, pole pojawi się na pierwszej pozycji w restrykcyjnym oknie dialogowym i tak dalej.
Data element- Każdy parametr lub pole pomocy wyszukiwania ma domyślnie przypisany element danych, który został mu przypisany w źródle danych (tabela lub widok). Ta nazwa elementu danych pojawia się w trybie wyświetlania.
Step 6- Sprawdź spójność i aktywuj pomoc wyszukiwania. Naciśnij klawisz F8, aby wykonać. Pojawi się ekran „Pomoc w wyszukiwaniu testowym ZSRCH1”, jak pokazano na poniższym zrzucie ekranu.
Step 7- Wprowadźmy liczbę 100004 w polu ekranu „Gotowe do wejścia” KLIENTA. Naciśnij enter.
Zostanie wyświetlony numer klienta 100004 i nazwisko „STEPHEN”.
Zablokuj obiekt to funkcja oferowana przez słownik ABAP, która służy do synchronizowania dostępu do tych samych danych przez więcej niż jeden program. Dostęp do rekordów danych uzyskuje się za pomocą specjalnych programów. Obiekty blokad są używane w SAP, aby uniknąć niespójności podczas wstawiania lub zmiany danych do bazy danych. Tabele, których rekordy danych mają zostać zablokowane, muszą być zdefiniowane w obiekcie Zablokuj wraz z ich kluczowymi polami.
Mechanizm blokujący
Poniżej przedstawiono dwie główne funkcje realizowane przez mechanizm blokady -
Program może komunikować się z innymi programami w zakresie rekordów danych, które właśnie odczytuje lub zmienia.
Program może uniemożliwić sobie odczyt danych, które zostały właśnie zmienione przez inny program.
ZA lock requestjest najpierw generowany przez program. Następnie to żądanie trafia do serwera Enqueue i blokada jest tworzona w tabeli blokad. Serwer Enqueue ustawia blokadę i program jest wreszcie gotowy do dostępu do danych.
Tworzenie obiektów blokujących
Step 1- Przejdź do transakcji SE11. Otworzy się następujący ekran.
Step 2- Kliknij przycisk opcji „Zablokuj obiekt”. Wpisz nazwę obiektu blokady zaczynającą się od E i kliknij przycisk Utwórz. Tutaj używamy EZLOCK12.
Step 3 - Wpisz krótki opis i kliknij zakładkę Tabele.
Step 4 - Wprowadź nazwę tabeli w polu Nazwa i wybierz tryb blokady jako Blokada zapisu.
Step 5 - Kliknij kartę Parametry blokady, pojawi się następujący ekran.
Step 6- Zapisz i aktywuj. Automatycznie wygenerują 2 moduły funkcyjne. Aby sprawdzić moduły funkcyjne, możemy użyć Idź do → Zablokuj moduły.
Step 7 - Kliknij opcję Zablokuj moduły, a otworzy się następujący ekran.
Obiekt blokady został pomyślnie utworzony.
Kluczowe pola tabeli zawartej w obiekcie blokady nazywane są argumentami blokady i są używane jako parametry wejściowe w modułach funkcyjnych. Te argumenty służą do ustawiania i usuwania blokad generowanych przez definicję obiektu blokady.
Dobrą praktyką jest, aby programy były jak najbardziej samodzielne i czytelne. Po prostu spróbuj podzielić duże i skomplikowane zadania na mniejsze i prostsze, umieszczając każde zadanie w osobnym module, na którym programista może się skoncentrować bez innych rozpraszaczy.
W środowisku SAP ABAP modularyzacja polega na organizacji programów w jednostki modułowe, znane również jako logical blocks. Zmniejsza nadmiarowość i zwiększa czytelność programu nawet podczas jego tworzenia, a następnie podczas cyklu konserwacji. Modularyzacja umożliwia również ponowne użycie tego samego kodu. ABAP zmusił programistów do modularyzacji, tj. Organizowania programów w stosunkowo większym stopniu, niż w językach opartych na OOPS, które mają relatywnie więcej wbudowanych funkcji modułowych. Gdy mała, zmodularyzowana sekcja kodu zostanie ukończona, zdebugowana itd., Nie trzeba jej później zwracać, a programiści mogą następnie przejść do innych problemów i skupić się na nich.
Programy ABAP składają się z bloków przetwarzania znanych jako modularyzujące bloki przetwarzania. Oni są -
Bloki przetwarzania wywoływane spoza programu i ze środowiska wykonawczego ABAP (tj. Bloki zdarzeń i moduły dialogowe).
Przetwarzanie bloków wywoływanych z programów ABAP.
Oprócz modularyzacji za pomocą bloków przetwarzania, moduły kodu źródłowego są używane do modularyzacji kodu źródłowego za pomocą makr i dołączania programów.
Modularyzacja na poziomie kodu źródłowego -
- Lokalne makra
- Programy Global Include
Modularyzacja poprzez przetwarzanie bloków wywoływanych z programów ABAP -
- Subroutines
- Moduły funkcyjne
Modularyzacja kodu źródłowego oznacza umieszczenie sekwencji instrukcji ABAP w module. Zmodularyzowany kod źródłowy można wywołać w programie zgodnie z wymaganiami użytkownika. Moduły kodu źródłowego zwiększają czytelność i zrozumiałość programów ABAP. Tworzenie indywidualnych modułów kodu źródłowego zapobiega również konieczności wielokrotnego pisania tych samych instrukcji, co z kolei sprawia, że kod jest łatwiejszy do zrozumienia dla każdego, kto przechodzi przez niego po raz pierwszy.
Podprogram jest sekcją kodu wielokrotnego użytku. Jest to jednostka modularyzacji w programie, w której funkcja jest hermetyzowana w postaci kodu źródłowego. Przekierowujesz część programu do podprogramu, aby uzyskać lepszy przegląd programu głównego i wielokrotnie używać odpowiedniej sekwencji instrukcji, jak pokazano na poniższym diagramie.
Mamy program X z 3 różnymi source code blocks. Każdy blok zawiera te same instrukcje ABAP. Zasadniczo są to te same bloki kodu. Aby ułatwić obsługę tego kodu, możemy zamknąć go w podprocedurze. Możemy wywoływać ten podprogram w naszych programach tyle razy, ile chcemy. Podprogram można zdefiniować za pomocą instrukcji Form i EndForm.
Poniżej znajduje się ogólna składnia definicji podprogramu.
FORM <subroutine_name>.
<statements>
ENDFORM.
Możemy wywołać podprogram za pomocą instrukcji PERFORM. Sterowanie przechodzi do pierwszej instrukcji wykonywalnej w podprogramie <nazwa_programu>. Po napotkaniu ENDFORM sterowanie przeskakuje z powrotem do instrukcji następującej po instrukcji PERFORM.
Przykład
Step 1- Przejdź do transakcji SE80. Otwórz istniejący program, a następnie kliknij program prawym przyciskiem myszy. W tym przypadku jest to „ZSUBTEST”.
Step 2- Wybierz opcję Utwórz, a następnie wybierz opcję Podprogram. Wpisz nazwę podprogramu w polu, a następnie kliknij przycisk kontynuuj. Nazwa podprogramu to „Sub_Display”, jak pokazano na poniższym zrzucie ekranu.
Step 3- Wpisz kod w bloku instrukcji FORM i ENDFORM. Podprogram został pomyślnie utworzony.
Musimy dołączyć instrukcję PERFORM, aby wywołać podprogram. Rzućmy okiem na kod -
REPORT ZSUBTEST.
PERFORM Sub_Display.
* Form Sub_Display
* --> p1 text
* <-- p2 text
FORM Sub_Display.
Write: 'This is Subroutine'.
Write: / 'Subroutine created successfully'.
ENDFORM. " Sub_Display
Step 4- Zapisz, aktywuj i uruchom program. Powyższy kod daje następujące dane wyjściowe -
Subroutine Test:
This is Subroutine
Subroutine created successfully
Dlatego używanie podprogramów sprawia, że program jest bardziej zorientowany na funkcje. Dzieli zadanie programu na pod-funkcje, tak że każdy podprogram jest odpowiedzialny za jedną podfunkcję. Twój program staje się łatwiejszy w utrzymaniu, ponieważ zmiany funkcji często muszą być wprowadzane tylko w podprogramie.
Jeśli chcemy użyć tego samego zestawu instrukcji więcej niż raz w programie, musimy uwzględnić je w makrze. Na przykład makro może być przydatne do długich obliczeń lub do pisania złożonych instrukcji WRITE. Makra możemy używać tylko w programie, w którym jest zdefiniowane. Definicja makra powinna nastąpić przed użyciem makra w programie.
Makra są projektowane w oparciu o symbole zastępcze. Symbol zastępczy działa jak wskaźniki w języku C. Makro można zdefiniować w instrukcji DEFINE ... END-OF-DEFINITION.
Poniżej znajduje się podstawowa składnia definicji makra -
DEFINE <macro_name>. <statements>
END-OF-DEFINITION.
......
<macro_name> [<param1> <param2>....].
Konieczne jest zdefiniowanie makra przed jego wywołaniem. <param1>…. zastępuje symbole zastępcze & 1 ... w instrukcjach ABAP zawartych w definicji makra.
Maksymalna liczba symboli zastępczych w definicji makra to dziewięć. Oznacza to, że podczas wykonywania programu system SAP zastępuje makro odpowiednimi instrukcjami, a symbole zastępcze & 1, & 2,… i 9 są zastępowane parametrami param1, param2, .... param9. Możemy wywołać makro w innym makrze, ale nie w tym samym makrze.
Przykład
Przejdź do transakcji SE38. Utwórz nowy program ZMACRO_TEST wraz z opisem w krótkim polu tekstowym, a także z odpowiednimi atrybutami, takimi jak Typ i Status, jak pokazano na poniższym zrzucie ekranu -
Poniżej znajduje się kod -
REPORT ZMACRO_TEST.
DEFINE mac_test.
WRITE: 'This is Macro &1'.
END-OF-DEFINITION.
PARAMETERS: s1 type C as checkbox.
PARAMETERS: s2 type C as checkbox.
PARAMETERS: s3 type C as checkbox default 'X'.
START-OF-SELECTION.
IF s1 = 'X'.
mac_test 1. ENDIF.
IF s2 = 'X'.
mac_test 2.
ENDIF.
IF s3 = 'X'.
mac_test 3.
ENDIF.
Mamy 3 pola wyboru. Podczas wykonywania programu zaznaczmy pole wyboru S2.
Powyższy kod daje następujące dane wyjściowe -
A Macro Program
This is Macro 2
Jeśli zaznaczone są wszystkie pola wyboru, kod generuje następujące dane wyjściowe -
A Macro Program
This is Macro 1 This is Macro 2 This is Macro 3
Moduły funkcyjne stanowią znaczną część systemu SAP, ponieważ SAP od lat ma modularyzowany kod z wykorzystaniem modułów funkcyjnych, co pozwala na jego ponowne wykorzystanie samodzielnie, przez ich twórców, a także przez klientów.
Moduły funkcyjne to podprogramy zawierające zestaw instrukcji wielokrotnego użytku z parametrami importowania i eksportowania. W przeciwieństwie do programów włączających, moduły funkcyjne mogą być wykonywane niezależnie. System SAP zawiera kilka predefiniowanych modułów funkcyjnych, które można wywołać z dowolnego programu ABAP. Grupa funkcyjna działa jako rodzaj kontenera dla wielu modułów funkcyjnych, które logicznie należałyby do siebie. Na przykład moduły funkcyjne systemu kadrowo-płacowego zostałyby połączone w grupę funkcyjną.
Aby dowiedzieć się, jak tworzyć moduły funkcyjne, należy zapoznać się z konstruktorem funkcji. Możesz znaleźć konstruktora funkcji z kodem transakcji SE37. Wystarczy wpisać część nazwy modułu funkcji z symbolem wieloznacznym, aby zademonstrować sposób wyszukiwania modułów funkcyjnych. Wpisz * amount *, a następnie naciśnij klawisz F4.
Wyniki wyszukiwania zostaną wyświetlone w nowym oknie. Moduły funkcyjne są wyświetlane w wierszach na niebieskim tle, a ich grupy funkcyjne na różowych. Możesz dokładniej przyjrzeć się grupie funkcyjnej ISOC, korzystając z ekranu nawigatora obiektów (Transaction SE80). Możesz zobaczyć listę modułów funkcyjnych, a także innych obiektów znajdujących się w grupie funkcyjnej. Rozważmy moduł funkcji SPELL_AMOUNT. Ten moduł funkcyjny konwertuje cyfry na słowa.
Tworzenie nowego programu
Step 1 - Przejdź do transakcji SE38 i utwórz nowy program o nazwie Z_SPELLAMOUNT.
Step 2- Wprowadź kod, aby można było ustawić parametr, w którym można wprowadzić wartość i przekazać ją do modułu funkcyjnego. Element tekstowy text-001 tutaj brzmi „Wprowadź wartość”.
Step 3- Aby napisać odpowiedni kod, użyj CTRL + F6. Następnie pojawi się okno, w którym „CALL FUNCTION” jest pierwszą opcją na liście. Wpisz „spell_amount” w polu tekstowym i kliknij przycisk Kontynuuj.
Step 4- Część kodu jest generowana automatycznie. Musimy jednak rozszerzyć instrukcję IF, aby zawierała kod NAPISZ wiadomość na ekranie, aby powiedzieć „Moduł funkcji zwrócił wartość: sy-subrc” i dodać instrukcję ELSE, aby zapisać prawidłowy wynik, gdy funkcja moduł się powiódł. Tutaj należy ustawić nową zmienną do przechowywania wartości zwróconej z modułu funkcyjnego. Nazwijmy to „wynikiem”.
Poniżej znajduje się kod -
REPORT Z_SPELLAMOUNT.
data result like SPELL.
selection-screen begin of line.
selection-screen comment 1(15) text-001.
parameter num_1 Type I.
selection-screen end of line.
CALL FUNCTION 'SPELL_AMOUNT'
EXPORTING
AMOUNT = num_1
IMPORTING
IN_WORDS = result.
IF SY-SUBRC <> 0.
Write: 'Value returned is:', SY-SUBRC.
else.
Write: 'Amount in words is:', result-word.
ENDIF.
Step 5- Zmienna zwracana przez moduł funkcji nosi nazwę IN_WORDS. Ustaw odpowiednią zmienną w programie o nazwie „wynik”. Zdefiniuj IN_WORDS, używając instrukcji LIKE, aby odwołać się do struktury o nazwie SPELL.
Step 6- Zapisz, aktywuj i uruchom program. Wprowadź wartość, jak pokazano na poniższym zrzucie ekranu, i naciśnij klawisz F8.
Powyższy kod daje następujące dane wyjściowe -
Spelling the Amount
Amount in words is:
FIVE THOUSAND SIX HUNDRED EIGHTY
Programy dołączane to globalne obiekty repozytorium używane do modularyzacji kodu źródłowego. Umożliwiają one używanie tego samego kodu źródłowego w różnych programach. Dołącz programy umożliwia również uporządkowane zarządzanie złożonymi programami. Aby użyć programu dołączającego w innym programie, używamy następującej składni -
INCLUDE <program_name>.
Instrukcja INCLUDE ma taki sam efekt, jak kopiowanie kodu źródłowego programu włączającego <nazwa_programu> do innego programu. Ponieważ program dołączany nie może działać niezależnie, musi być wbudowany w inne programy. Możesz także zagnieżdżać programy dołączane.
Poniżej przedstawiono kilka ograniczeń dotyczących pisania kodu dla programów dołączanych:
- Dołącz programy nie mogą się nazywać.
- Programy dołączane muszą zawierać pełne instrukcje.
Poniżej przedstawiono kroki tworzenia i używania programu dołączania -
Step 1- Utwórz program (Z_TOBEINCLUDED), który ma zostać dołączony do edytora ABAP. Kod, który ma być zawarty w edytorze ABAP to -
PROGRAM Z_TOBEINCLUDED.
Write: / 'This program is started by:', SY-UNAME,
/ 'The Date is:', SY-DATUM,
/ 'Time is', SY-UZEIT.
Step 2 - Ustaw typ programu na INCLUDE program, jak pokazano na poniższym zrzucie ekranu.
Step 3 - Kliknij przycisk „Zapisz” i zapisz program w pakiecie o nazwie ZINCL_PCKG.
Step 4- Utwórz inny program, w którym ma być użyty program Z_TOBEINCLUDED. Tutaj stworzyliśmy inny program o nazwie Z_INCLUDINGTEST i przypisaliśmy mu typ programu jako wykonywalny.
Step 5 - Kodowanie programu Z_INCLUDINGTEST obejmuje program Z_TOBEINCLUDED za pomocą instrukcji INCLUDE, jak pokazano w poniższym kodzie.
REPORT Z_INCLUDINGTEST.
INCLUDE Z_TOBEINCLUDED.
Step 6 - Zapisz, aktywuj i uruchom program.
Powyższy kod daje następujące dane wyjściowe -
This program is started by: SAPUSER
The Date is: 06.10.2015
Time is 13:25:11
Otwarty SQL wskazuje podzbiór instrukcji ABAP, które umożliwiają bezpośredni dostęp do danych w centralnej bazie danych aktualnego AS ABAP. Instrukcje Open SQL odwzorowują funkcjonalność języka SQL Data Manipulation Language w ABAP, która jest obsługiwana przez wszystkie systemy baz danych.
Instrukcje Open SQL są konwertowane na SQL specyficzny dla bazy danych w interfejsie Open SQL interfejsu bazy danych. Następnie są przesyłane do systemu bazy danych i wykonywane. Instrukcje Open SQL mogą służyć do uzyskiwania dostępu do tabel bazy danych zadeklarowanych w słowniku ABAP. Dostęp do centralnej bazy danych AS ABAP jest dostępny domyślnie, a także dostęp do innych baz danych jest możliwy poprzez dodatkowe połączenia z bazą danych.
Za każdym razem, gdy którakolwiek z tych instrukcji jest używana w programie ABAP, ważne jest, aby sprawdzić, czy wykonana akcja zakończyła się pomyślnie. Jeśli ktoś próbuje wstawić rekord do tabeli bazy danych i nie jest wstawiony poprawnie, bardzo ważne jest, aby wiedzieć, aby można było podjąć odpowiednią akcję w programie. Można to zrobić za pomocą pola systemowego, które zostało już użyte, czyli SY-SUBRC. Gdy instrukcja zostanie wykonana pomyślnie, pole SY-SUBRC będzie zawierało wartość 0, więc można to sprawdzić i kontynuować program, jeśli się pojawi.
Instrukcja DATA służy do deklarowania obszaru roboczego. Nadajmy temu nazwę „wa_customers1”. Zamiast deklarować jeden typ danych, można zadeklarować kilka pól tworzących tabelę. Najłatwiej to zrobić, używając instrukcji LIKE.
Instrukcja INSERT
Obszar roboczy wa_customers1 jest tutaj zadeklarowany JAK tabela ZCUSTOMERS1, przyjmując tę samą strukturę, ale sam nie staje się tabelą. W tym obszarze roboczym można przechowywać tylko jeden rekord. Po zadeklarowaniu instrukcji INSERT można użyć do wstawienia obszaru roboczego i przechowywanego przez niego rekordu do tabeli. Kod w tym miejscu będzie miał postać „WSTAW KLIENTÓW1 OD wa_customers1”.
Obszar roboczy musi być wypełniony danymi. Użyj nazw pól z tabeli ZCUSTOMERS1. Można to zrobić poprzez nawigację do przodu, dwukrotne kliknięcie nazwy tabeli w kodzie lub otwarcie nowej sesji i użycie transakcji SE11. Pola tabeli można następnie skopiować i wkleić do edytora ABAP.
Poniżej znajduje się fragment kodu -
DATA wa_customers1 LIKE ZCUSTOMERS1.
wa_customers1-customer = '100006'.
wa_customers1-name = 'DAVE'.
wa_customers1-title = 'MR'.
wa_customers1-dob = '19931017'.
INSERT ZCUSTOMERS1 FROM wa_customers1.
Instrukcja CHECK może być następnie używana w następujący sposób. Oznacza to, że jeśli rekord zostanie wstawiony poprawnie, system to poinformuje. Jeśli nie, zostanie wyświetlony kod SY-SUBRC, który nie będzie równy zeru. Poniżej znajduje się fragment kodu -
IF SY-SUBRC = 0.
WRITE 'Record Inserted Successfully'.
ELSE.
WRITE: 'The return code is ', SY-SUBRC.
ENDIF.
Sprawdź program, zapisz, aktywuj kod, a następnie przetestuj go. W oknie wyjściowym powinien pojawić się komunikat „Wstawiono rekord pomyślnie”.
Instrukcja CLEAR
Instrukcja CLEAR umożliwia wyczyszczenie pola lub zmiennej w celu wstawienia w jego miejsce nowych danych, umożliwiając ich ponowne wykorzystanie. Instrukcja CLEAR jest zwykle używana w programach i umożliwia wielokrotne użycie istniejących pól.
W poprzednim fragmencie kodu struktura obszaru roboczego została wypełniona danymi w celu utworzenia nowego rekordu, który zostanie wstawiony do tabeli ZCUSTOMERS1, a następnie zostanie przeprowadzona weryfikacja. Jeśli chcemy wstawić nowy rekord, należy użyć instrukcji CLEAR, aby można było ponownie wypełnić go nowymi danymi.
Instrukcja UPDATE
Jeśli chcesz zaktualizować jeden lub więcej istniejących rekordów w tabeli w tym samym czasie, użyj instrukcji UPDATE. Podobnie jak w przypadku instrukcji INSERT, deklarowany jest obszar roboczy, wypełniany nowymi danymi, które są następnie umieszczane w rekordzie podczas wykonywania programu. Rekord utworzony wcześniej za pomocą instrukcji INSERT zostanie tutaj zaktualizowany. Po prostu edytuj tekst przechowywany w polach NAZWA i TYTUŁ. Następnie w nowym wierszu używana jest ta sama struktura, co w przypadku instrukcji INSERT, tym razem przy użyciu instrukcji UPDATE, jak pokazano w poniższym fragmencie kodu -
DATA wa_customers1 LIKE ZCUSTOMERS1.
wa_customers1-customer = '100006'.
wa_customers1-name = 'RICHARD'.
wa_customers1-title = 'MR'.
wa_customers1-dob = '19931017'.
UPDATE ZCUSTOMERS1 FROM wa_customers1.
Po wykonaniu instrukcji UPDATE można wyświetlić przeglądarkę danych w słowniku ABAP, aby sprawdzić, czy rekord został pomyślnie zaktualizowany.
Instrukcja MODIFY
Instrukcja MODIFY może być traktowana jako połączenie instrukcji INSERT i UPDATE. Można go użyć do wstawienia nowego rekordu lub zmodyfikowania istniejącego rekordu. Podąża za podobną składnią do poprzednich dwóch instrukcji w modyfikowaniu rekordu na podstawie danych wprowadzonych do obszaru roboczego.
Po wykonaniu tej instrukcji kluczowe pola zostaną porównane z tymi w tabeli. Jeśli rekord z tymi wartościami pól kluczy już istnieje, zostanie zaktualizowany. Jeśli nie, zostanie utworzony nowy rekord.
Poniżej znajduje się fragment kodu służący do tworzenia nowego rekordu -
CLEAR wa_customers1.
DATA wa_customers1 LIKE ZCUSTOMERS1.
wa_customers1-customer = '100007'.
wa_customers1-name = 'RALPH'.
wa_customers1-title = 'MR'.
wa_customers1-dob = '19910921'.
MODIFY ZCUSTOMERS1 FROM wa_customers1.
W tym przykładzie użyto instrukcji CLEAR, aby w obszarze roboczym można było umieścić nowy wpis, a następnie dodać klienta (numer) 100007. Ponieważ jest to nowa, unikalna wartość pola klucza, zostanie wstawiony nowy rekord i przeprowadzona zostanie kolejna weryfikacja.
Po wykonaniu tej czynności i wyświetleniu danych w przeglądarce danych zostanie utworzony nowy rekord dla numeru klienta 100007 (RALPH).
Powyższy kod daje następujące dane wyjściowe (zawartość tabeli) -
Termin „Native SQL” odnosi się do wszystkich instrukcji, które mogą być statycznie przesyłane do interfejsu Native SQL interfejsu bazy danych. Rodzime instrukcje SQL nie wchodzą w zakres języka ABAP i nie są zgodne ze składnią ABAP. ABAP zawiera jedynie instrukcje do wyodrębnienia sekcji programu, w których można wyszczególnić instrukcje Native SQL.
W rodzimym języku SQL można używać głównie instrukcji SQL specyficznych dla bazy danych. Są one przesyłane bez zmian z natywnego interfejsu SQL do systemu bazy danych i wykonywane. Można użyć pełnego zakresu języka SQL odpowiedniej bazy danych, a adresowane tabele bazy danych nie muszą być deklarowane w Słowniku ABAP. Istnieje również niewielki zestaw instrukcji Native SQL specyficznych dla SAP, które są obsługiwane w określony sposób przez natywny interfejs SQL.
Aby użyć rodzimej instrukcji SQL, należy poprzedzić ją instrukcją EXEC SQL i zakończyć instrukcją ENDEXEC.
Poniżej znajduje się składnia -
EXEC SQL PERFORMING <form>.
<Native SQL statement>
ENDEXEC.
Te instrukcje definiują obszar w programie ABAP, w którym można wyświetlić jedną lub więcej instrukcji Native SQL. Wprowadzone instrukcje są przekazywane do interfejsu Native SQL, a następnie przetwarzane w następujący sposób:
Wszystkie instrukcje SQL, które są ważne dla interfejsu programowego adresowanego systemu baz danych, mogą być wymienione między EXEC i ENDEXEC, w szczególności instrukcje DDL (język definicji danych).
Te instrukcje SQL są przekazywane z interfejsu Native SQL do systemu bazy danych w dużej mierze niezmienione. Reguły składni są określane przez system bazy danych, w szczególności reguły rozróżniania wielkości liter dla obiektów bazy danych.
Jeśli składnia dopuszcza separator między pojedynczymi instrukcjami, między EXEC i ENDEXEC można dołączyć wiele instrukcji Native SQL.
Specyficzne dla SAP elementy języka Native SQL można określić między EXEC i ENDEXEC. Te instrukcje nie są przekazywane bezpośrednio z interfejsu Native SQL do bazy danych, ale są odpowiednio przekształcane.
Przykład
SPFLI to standardowa tabela SAP używana do przechowywania informacji o rozkładzie lotów. Jest to dostępne w systemach R / 3 SAP w zależności od wersji i poziomu wydania. Informacje te można wyświetlić po wprowadzeniu nazwy tabeli SPFLI do odpowiedniej transakcji SAP, takiej jak SE11 lub SE80. Możesz również wyświetlić dane zawarte w tej tabeli bazy danych, korzystając z tych dwóch transakcji.
REPORT ZDEMONATIVE_SQL.
DATA: BEGIN OF wa,
connid TYPE SPFLI-connid,
cityfrom TYPE SPFLI-cityfrom,
cityto TYPE SPFLI-cityto,
END OF wa.
DATA c1 TYPE SPFLI-carrid VALUE 'LH'.
EXEC SQL PERFORMING loop_output.
SELECT connid, cityfrom, cityto
INTO :wa
FROM SPFLI
WHERE carrid = :c1
ENDEXEC.
FORM loop_output.
WRITE: / wa-connid, wa-cityfrom, wa-cityto.
ENDFORM.
Powyższy kod daje następujące dane wyjściowe -
0400 FRANKFURT NEW YORK
2402 FRANKFURT BERLIN
0402 FRANKFURT NEW YORK
Tabela wewnętrzna jest w rzeczywistości tabelą tymczasową, która zawiera rekordy programu ABAP, który jest wykonywany. Tabela wewnętrzna istnieje tylko w czasie wykonywania programu SAP. Służą do przetwarzania dużych ilości danych przy użyciu języka ABAP. Musimy zadeklarować wewnętrzną tabelę w programie ABAP, gdy trzeba pobrać dane z tabel bazy danych.
Dane w tabeli wewnętrznej są przechowywane w wierszach i kolumnach. Każdy wiersz nazywa się aline a każda kolumna nazywa się a field. W tabeli wewnętrznej wszystkie rekordy mają tę samą strukturę i klucz. Dostęp do poszczególnych rekordów tabeli wewnętrznej uzyskuje się za pomocą indeksu lub klucza. Ponieważ tablica wewnętrzna istnieje do czasu wykonania skojarzonego programu, rekordy tablicy wewnętrznej są odrzucane po zakończeniu wykonywania programu. Dlatego tabele wewnętrzne mogą być używane jako tymczasowe obszary przechowywania lub tymczasowe bufory, w których dane mogą być modyfikowane zgodnie z wymaganiami. Tabele te zajmują pamięć tylko w czasie wykonywania, a nie w momencie ich deklaracji.
Tabele wewnętrzne istnieją tylko wtedy, gdy program jest uruchomiony, więc podczas pisania kodu tabela wewnętrzna musi mieć taką strukturę, aby program mógł ją wykorzystać. Przekonasz się, że tabele wewnętrzne działają w taki sam sposób, jak struktury. Główna różnica polega na tym, że struktury mają tylko jedną linię, podczas gdy wewnętrzna tabela może mieć dowolną liczbę wierszy.
Tabela wewnętrzna może składać się z wielu pól odpowiadających kolumnom tabeli, tak jak w słowniku ABAP tabela została utworzona przy użyciu wielu pól. Pola kluczowe mogą być również używane z tabelami wewnętrznymi, a podczas tworzenia tych tabel wewnętrznych zapewniają nieco większą elastyczność. W przypadku tabel wewnętrznych można określić nieunikalny klucz, co pozwala na przechowywanie dowolnej liczby nieunikalnych rekordów i umożliwia przechowywanie zduplikowanych rekordów, jeśli jest to wymagane.
Rozmiar tabeli wewnętrznej lub liczba zawartych w niej wierszy nie jest ustalona. Rozmiar tabeli wewnętrznej zmienia się zgodnie z wymaganiami programu powiązanego z tabelą wewnętrzną. Ale zaleca się, aby wewnętrzne stoły były jak najmniejsze. Ma to na celu uniknięcie powolnego działania systemu, który ma problemy z przetwarzaniem ogromnych ilości danych.
Tabele wewnętrzne są używane do wielu celów -
Mogą służyć do przechowywania wyników obliczeń, które mogą być użyte w dalszej części programu.
Tabela wewnętrzna może również przechowywać rekordy i dane, dzięki czemu można uzyskać do nich szybki dostęp zamiast konieczności uzyskiwania dostępu do tych danych z tabel bazy danych.
Są niezwykle wszechstronne. Można je definiować za pomocą dowolnej liczby innych zdefiniowanych struktur.
Przykład
Załóżmy, że użytkownik chce utworzyć listę numerów kontaktowych różnych klientów z jednej lub kilku dużych tabel. Użytkownik najpierw tworzy wewnętrzną tabelę, wybiera odpowiednie dane z tabel klientów, a następnie umieszcza je w wewnętrznej tabeli. Inni użytkownicy mogą uzyskiwać dostęp do tej wewnętrznej tabeli i bezpośrednio z niej korzystać, aby pobrać żądane informacje, zamiast pisać zapytania do bazy danych w celu wykonania każdej operacji w czasie wykonywania programu.
Instrukcja DATA służy do deklarowania wewnętrznej tabeli. Program musi zostać poinformowany, gdzie zaczyna się i kończy tabela. Dlatego użyj instrukcji BEGIN OF, a następnie zadeklaruj nazwę tabeli. Następnie używany jest dodatek OCCURS, po którym następuje liczba, w tym przypadku 0. OCCURS informuje SAP, że tworzona jest wewnętrzna tabela, a 0 oznacza, że początkowo nie będzie ona zawierać żadnych rekordów. Następnie rozszerzy się, gdy zostanie wypełniony danymi.
Poniżej znajduje się składnia -
DATA: BEGIN OF <internal_tab> Occurs 0,
Utwórzmy pola w nowej linii. Na przykład utwórz „imię”, które jest zadeklarowane jako LIKE ZCUSTOMERS1-name. Utwórz inne pole o nazwie „dob”, TAKIE JAK ZCUSTOMERS1-dob. Na początku warto nadać nazwom pól w tabelach wewnętrznych takie same nazwy, jakie mają inne pola utworzone w innym miejscu. Na koniec zadeklaruj koniec wewnętrznej tabeli za pomocą „END OF <internal_tab>”. jak pokazano w poniższym kodzie -
DATA: BEGIN OF itab01 Occurs 0,
name LIKE ZCUSTOMERS1-name,
dob LIKE ZCUSTOMERS1-dob,
END OF itab01.
Tutaj „itab01” jest często używany skrótowo podczas tworzenia tabel tymczasowych w SAP. Klauzula OCCURS służy do definiowania treści tabeli wewnętrznej przez zadeklarowanie pól tabeli. Gdy używana jest klauzula OCCURS, można określić stałą numeryczną „n”, aby określić dodatkową pamięć domyślną, jeśli jest to wymagane. Domyślny rozmiar pamięci używanej przez klauzulę OCCUR 0 to 8 KB. Została utworzona struktura tabeli wewnętrznej i można napisać kod, aby wypełnić ją rekordami.
Wewnętrzną tabelę można utworzyć z użyciem wiersza nagłówka lub bez niego. Aby utworzyć wewnętrzną tabelę z wierszem nagłówka, w definicji tabeli wewnętrznej użyj klauzuli BEGIN OF przed klauzulą OCCURS lub klauzuli WITH HEADER LINE po klauzuli OCCURS. Aby utworzyć wewnętrzną tabelę bez wiersza nagłówka, użyj klauzuli OCCURS bez klauzuli BEGIN OF.
Możesz również utworzyć wewnętrzną tabelę jako lokalny typ danych (typ danych używany tylko w kontekście bieżącego programu) za pomocą instrukcji TYPES. Ta instrukcja używa klauzuli TYPE lub LIKE w celu odniesienia się do istniejącej tabeli.
Składnia tworzenia tabeli wewnętrznej jako lokalnego typu danych to -
TYPES <internal_tab> TYPE|LIKE <internal_tab_type> OF
<line_type_itab> WITH <key> INITIAL SIZE <size_number>.
Tutaj <internal_tab_type> określa typ tabeli dla wewnętrznej tabeli <internal_tab>, a <line_type_itab> określa typ dla wiersza tabeli wewnętrznej. W instrukcji TYPES można użyć klauzuli TYPE do określenia typu linii tabeli wewnętrznej jako typu danych oraz klauzuli LIKE do określenia typu linii jako obiektu danych. Określenie klucza dla tabeli wewnętrznej jest opcjonalne i jeśli użytkownik nie określi klucza, system SAP definiuje typ tabeli z dowolnym kluczem.
ROZMIAR POCZĄTKOWY <rozmiar_numer> tworzy wewnętrzny obiekt tabeli, przydzielając do niego początkową ilość pamięci. W powyższej składni klauzula INITIAL SIZE rezerwuje miejsce w pamięci dla wierszy tabeli size_number. Za każdym razem, gdy deklarowany jest wewnętrzny obiekt tabeli, rozmiar tabeli nie należy do typu danych tabeli.
Note - Znacznie mniej pamięci jest zużywane, gdy tabela wewnętrzna jest zapełniana po raz pierwszy.
Przykład
Step 1- Otwórz Edytor ABAP, wykonując kod transakcji SE38. Pojawi się początkowy ekran edytora ABAP.
Step 2 - Na ekranie początkowym wprowadź nazwę programu, wybierz przycisk radiowy Kod źródłowy i kliknij przycisk Utwórz, aby utworzyć nowy program.
Step 3- W oknie dialogowym „ABAP: Atrybuty programu” wprowadź krótki opis programu w polu Tytuł, wybierz opcję „Program wykonywalny” z menu rozwijanego Typ w grupie Atrybuty. Kliknij przycisk Zapisz.
Step 4 - Napisz następujący kod w edytorze ABAP.
REPORT ZINTERNAL_DEMO.
TYPES: BEGIN OF CustomerLine,
Cust_ID TYPE C,
Cust_Name(20) TYPE C,
END OF CustomerLine.
TYPES mytable TYPE SORTED TABLE OF CustomerLine
WITH UNIQUE KEY Cust_ID.
WRITE:/'The mytable is an Internal Table'.
Step 5 - Zapisz, aktywuj i uruchom program jak zwykle.
W tym przykładzie mytable jest tabelą wewnętrzną, a unikalny klucz jest zdefiniowany w polu Cust_ID.
Powyższy kod daje następujące dane wyjściowe -
The mytable is an Internal Table.
W tabelach wewnętrznych wypełnianie obejmuje takie funkcje, jak zaznaczanie, wstawianie i dołączanie. Ten rozdział koncentruje się na instrukcjach INSERT i APPEND.
Instrukcja INSERT
Instrukcja INSERT służy do wstawiania pojedynczego wiersza lub grupy wierszy do wewnętrznej tabeli.
Poniżej znajduje się składnia dodawania pojedynczego wiersza do wewnętrznej tabeli -
INSERT <work_area_itab> INTO <internal_tab> INDEX <index_num>.
W tej składni instrukcja INSERT wstawia nowy wiersz do wewnętrznej tabeli internal_tab. Nowy wiersz można wstawić, używając wyrażenia work_area_itab INTO przed parametrem internal_tab. Kiedy używane jest wyrażenie work_area_itab INTO, nowa linia jest pobierana z obszaru roboczego work_area_itab i wstawiana do tabeli internal_tab. Jednak gdy wyrażenie work_area_itab INTO nie jest używane do wstawiania wiersza, wiersz jest pobierany z wiersza nagłówka tabeli internal_tab.
Kiedy nowy wiersz jest wstawiany do wewnętrznej tabeli przy użyciu klauzuli INDEX, numer indeksu wierszy po wstawionym wierszu jest zwiększany o 1. Jeśli wewnętrzna tabela zawiera <index_num> - 1 wiersze, nowy wiersz jest dodawany na koniec stołu. Gdy system SAP pomyślnie doda wiersz do wewnętrznej tabeli, zmienna SY-SUBRC przyjmuje wartość 0.
Przykład
Poniżej znajduje się przykładowy program, który używa instrukcji insert.
REPORT ZCUSLIST1.
DATA: BEGIN OF itable1 OCCURS 4,
F1 LIKE SY-INDEX,
END OF itable1.
DO 4 TIMES.
itable1-F1 = sy-index.
APPEND itable1.
ENDDO.
itable1-F1 = -96.
INSERT itable1 INDEX 2.
LOOP AT itable1.
Write / itable1-F1.
ENDLOOP.
LOOP AT itable1 Where F1 ≥ 3.
itable1-F1 = -78.
INSERT itable1.
ENDLOOP.
Skip.
LOOP AT itable1.
Write / itable1-F1.
ENDLOOP.
Powyższy kod daje następujący wynik wyjściowy -
1
96-
2
3
4
1
96-
2
78-
3
78-
4
W powyższym przykładzie pętla DO dołącza do niej 4 wiersze zawierające liczby od 1 do 4. Składnikowi wiersza nagłówka itable1-F1 przypisano wartość -96. Instrukcja Insert wstawia wiersz nagłówka jako nowy wiersz do treści przed wierszem 3. Istniejący wiersz 3 staje się wierszem 4 po wstawieniu. Instrukcja LOOP AT pobiera te wiersze z wewnętrznej tabeli, które mają wartość F1 większą lub równą 3. Przed każdym wierszem instrukcja Insert wstawia nowy wiersz z wiersza nagłówka. Przed wkładką zmieniono komponent F1 na -78.
Po wykonaniu każdej instrukcji wstawiania system ponownie indeksuje wszystkie wiersze poniżej wstawionego. Wprowadza to narzut podczas wstawiania wierszy w pobliżu górnej części dużej tabeli wewnętrznej. Jeśli chcesz wstawić blok wierszy do dużej tabeli wewnętrznej, przygotuj inną tabelę z wierszami do wstawienia i użyj zamiast tego linii wstawiania.
Podczas wstawiania nowego wiersza wewnątrz itable1 wewnątrz pętli w itable1, nie ma to natychmiastowego wpływu na wewnętrzną tabelę. W rzeczywistości staje się skuteczny przy następnym przejściu pętli. Podczas wstawiania wiersza po bieżącym wierszu tabela jest ponownie indeksowana w ENDLOOP. Sy-tabix jest zwiększane, a następna pętla przetwarza wiersz wskazywany przez sy-tabix. Na przykład, jeśli jesteś w drugim przebiegu pętli i wstawisz rekord przed wierszem 3. Po wykonaniu pętli końcowej nowy wiersz stanie się wierszem 3, a stary wiersz 3 stanie się wierszem 4 i tak dalej. Sy-tabix jest zwiększany o 1, a następne przejście pętli przetwarza nowo wstawiony rekord.
Instrukcja APPEND
Instrukcja APPEND służy do dodawania pojedynczego wiersza lub wiersza do istniejącej tabeli wewnętrznej. Ta instrukcja kopiuje pojedynczy wiersz z obszaru roboczego i wstawia go po ostatnim istniejącym wierszu w wewnętrznej tabeli. Obszarem roboczym może być wiersz nagłówka lub dowolny inny ciąg pola o takiej samej strukturze jak wiersz wewnętrznej tabeli. Poniżej znajduje się składnia instrukcji APPEND, która służy do dołączania pojedynczego wiersza w wewnętrznej tabeli -
APPEND <record_for_itab> TO <internal_tab>.
W tej składni wyrażenie <record_for_itab> może być reprezentowane przez obszar roboczy <work_area_itab>, który można zamienić na typ linii lub za pomocą klauzuli INITIAL LINE. Jeśli użytkownik korzysta z obszaru roboczego <work_area_itab>, system SAP dodaje nowy wiersz do wewnętrznej tabeli <internal_tab> i zapełnia go zawartością obszaru roboczego. Klauzula INITIAL LINE dołącza pusty wiersz zawierający początkową wartość dla każdego pola struktury tabeli. Po każdej instrukcji APPEND zmienna SY-TABIX zawiera numer indeksu dołączanej linii.
Dołączanie wierszy do standardowych i posortowanych tabel z nieunikalnym kluczem działa niezależnie od tego, czy wiersze z tym samym kluczem już istnieją w tabeli. Innymi słowy, mogą wystąpić zduplikowane wpisy. Jednak błąd w czasie wykonywania występuje, gdy użytkownik próbuje dodać zduplikowany wpis do posortowanej tabeli za pomocą unikalnego klucza lub jeśli użytkownik naruszy porządek sortowania posortowanej tabeli, dołączając do niej wiersze.
Przykład
REPORT ZCUSLIST1.
DATA: BEGIN OF linv Occurs 0,
Name(20) TYPE C,
ID_Number TYPE I,
END OF linv.
DATA table1 LIKE TABLE OF linv.
linv-Name = 'Melissa'.
linv-ID_Number = 105467.
APPEND linv TO table1.
LOOP AT table1 INTO linv.
Write: / linv-name, linv-ID_Number.
ENDLOOP.
Powyższy kod daje następujące dane wyjściowe -
Melissa 105467
Kiedy czytamy rekord z wewnętrznej tabeli z wierszem nagłówka, ten rekord jest przenoszony z samej tabeli do wiersza nagłówka. Jest to wtedy wiersz nagłówka, z którym współpracuje nasz program. To samo dotyczy tworzenia nowego rekordu. Jest to wiersz nagłówka, z którym pracujesz iz którego nowy rekord jest wysyłany do samej treści tabeli.
Aby skopiować rekordy, możemy użyć instrukcji SELECT, aby wybrać wszystkie rekordy z tabeli, a następnie użyć instrukcji MOVE, która przeniesie rekordy z oryginalnej tabeli do nowej tabeli wewnętrznej do pól, w których nazwy odpowiadają.
Poniżej znajduje się składnia instrukcji MOVE -
MOVE <table_field> TO <internal_tab_field>.
Przykład
REPORT ZCUSLIST1.
TABLES: ZCUSTOMERS1.
DATA: BEGIN OF itab01 Occurs 0,
name LIKE ZCUSTOMERS1-name,
dob LIKE ZCUSTOMERS1-dob,
END OF itab01.
Select * FROM ZCUSTOMERS1.
MOVE ZCUSTOMERS1-name TO itab01-name.
MOVE ZCUSTOMERS1-dob TO itab01-dob.
ENDSELECT.
Write: / itab01-name, itab01-dob.
Powyższy kod daje następujące dane wyjściowe -
MARGARET 02.11.1994
Pętla wyboru wypełnia po kolei każde pole, używając instrukcji MOVE do przenoszenia danych z jednego pola tabeli do drugiego. W powyższym przykładzie instrukcje MOVE zostały użyte do przeniesienia zawartości tabeli ZCUSTOMERS1 do odpowiednich pól w tabeli wewnętrznej. Możesz wykonać tę czynność za pomocą tylko jednej linii kodu. Możesz użyć instrukcji MOVECORRESPONDING.
Poniżej znajduje się składnia instrukcji MOVE-CORRESPONDING -
MOVE-CORRESPONDING <table_name> TO <internal_tab>.
Nakazuje systemowi przeniesienie danych z pól ZCUSTOMERS1 do odpowiednich pól w itab01.
Przykład
REPORT ZCUSTOMERLIST.
TABLES: ZCUSTOMERS1.
DATA: Begin of itab01 occurs 0,
customer LIKE ZCUSTOMERS1-customer,
name LIKE ZCUSTOMERS1-name,
title LIKE ZCUSTOMERS1-title,
dob LIKE ZCUSTOMERS1-dob,
END OF itab01.
SELECT * from ZCUSTOMERS1.
MOVE-Corresponding ZCUSTOMERS1 TO itab01.
APPEND itab01.
ENDSELECT.
LOOP AT itab01.
Write: / itab01-name, itab01-dob.
ENDLOOP.
Powyższy kod daje następujące dane wyjściowe -
MARK 21.05.1981
JAMES 14.08.1977
AURIELE 19.06.1990
STEPHEN 22.07.1985
MARGARET 02.11.1994
Jest to możliwe dzięki temu, że oba mają pasujące nazwy pól. Korzystając z tej instrukcji, musisz upewnić się, że oba pola mają zgodne typy danych i długości. Zostało to zrobione wcześniej z oświadczeniem LIKE.
Możemy odczytać wiersze tabeli, używając następującej składni instrukcji READ TABLE -
READ TABLE <internal_table> FROM <work_area_itab>.
W tej składni wyrażenie <work_area_itab> reprezentuje obszar roboczy zgodny z typem linii tabeli <internal_table>. Możemy określić klucz wyszukiwania, ale nie klucz tabeli, w instrukcji READ za pomocą klauzuli WITH KEY, jak pokazano w poniższej składni -
READ TABLE <internal_table> WITH KEY = <internal_tab_field>.
Tutaj cała linia tabeli wewnętrznej jest używana jako plik search key. Zawartość całego wiersza tabeli jest porównywana z zawartością pola <internal_tab_field>. Jeśli wartości pola <internal_tab_field> nie są zgodne z typem linii tabeli, wartości te są konwertowane zgodnie z typem linii tabeli. Klawisz wyszukiwania pozwala znaleźć wpisy w tabelach wewnętrznych, które nie mają ustrukturyzowanego typu linii, to znaczy, gdy wiersz jest pojedynczym polem lub wewnętrznym typem tabeli.
Następująca składnia instrukcji READ służy do określenia obszaru roboczego lub symbolu pola za pomocą klauzuli COMPARING -
READ TABLE <internal_table> <key> INTO <work_area_itab>
[COMPARING <F1> <F2>...<Fn>].
Gdy używana jest klauzula COMPARING, określone pola tabeli <F1>, <F2> .... <Fn> typu linii strukturalnej są porównywane z odpowiednimi polami obszaru roboczego przed transportem. Jeśli określono klauzulę ALL FIELDS, system SAP porównuje wszystkie komponenty. Gdy system SAP znajdzie wpis na podstawie klucza, wartość zmiennej SY-SUBRC jest ustawiana na 0. Dodatkowo wartość zmiennej SY-SUBRC jest ustawiana na 2 lub 4, jeśli zawartość porównywanych pola nie są takie same lub jeśli system SAP nie może znaleźć wpisu. Jednak system SAP kopiuje wpis do docelowego obszaru roboczego za każdym razem, gdy znajdzie wpis, niezależnie od wyniku porównania.
Przykład
REPORT ZREAD_DEMO.
*/Creating an internal table
DATA: BEGIN OF Record1,
ColP TYPE I,
ColQ TYPE I,
END OF Record1.
DATA mytable LIKE HASHED TABLE OF Record1 WITH UNIQUE KEY ColP.
DO 6 Times.
Record1-ColP = SY-INDEX.
Record1-ColQ = SY-INDEX + 5.
INSERT Record1 INTO TABLE mytable.
ENDDO.
Record1-ColP = 4.
Record1-ColQ = 12.
READ TABLE mytable FROM Record1 INTO Record1 COMPARING ColQ.
WRITE: 'SY-SUBRC =', SY-SUBRC.
SKIP.
WRITE: / Record1-ColP, Record1-ColQ.
Powyższy kod daje następujące dane wyjściowe -
SY-SUBRC = 2
4 9
W powyższym przykładzie mytable jest wewnętrzną tabelą typu hashed table, z Record1 jako obszarem roboczym i ColP jako unikalnym kluczem. Początkowo mytable jest wypełniane sześcioma wierszami, przy czym pole ColP zawiera wartości zmiennej SY-INDEX, a pole ColQ zawiera wartości (SY-INDEX + 5).
Obszar roboczy Record1 jest wypełniony wartościami 4 i 12 jako wartościami odpowiednio pól ColP i ColQ. Instrukcja READ odczytuje wiersz tabeli po porównaniu wartości pola klucza ColP z wartością w obszarze roboczym Record1 za pomocą klauzuli COMPARING, a następnie kopiuje zawartość odczytanego wiersza w obszarze roboczym. Wartość zmiennej SY-SUBRC jest wyświetlana jako 2, ponieważ gdy wartość w polu ColP wynosi 4, wartość w ColQ nie wynosi 12, ale 9.
Instrukcja DELETE służy do usuwania jednego lub więcej rekordów z wewnętrznej tabeli. Rekordy tabeli wewnętrznej są usuwane albo przez określenie klucza tabeli lub warunku, albo przez znalezienie zduplikowanych wpisów. Jeśli wewnętrzna tabela ma nieunikalny klucz i zawiera zduplikowane wpisy, pierwszy wpis z tabeli jest usuwany.
Poniżej znajduje się składnia użycia instrukcji DELETE do usunięcia rekordu lub wiersza z wewnętrznej tabeli -
DELETE TABLE <internal_table> FROM <work_area_itab>.
W powyższej składni wyrażenie <work_area_itab> jest obszarem roboczym i powinno być zgodne z typem wewnętrznej tabeli <internal_table>. Operacja usuwania jest wykonywana na podstawie domyślnego klucza, który można pobrać z komponentów obszaru roboczego.
Możesz również jawnie określić klucz tabeli w instrukcji DELETE TABLE, używając następującej składni -
DELETE TABLE <internal_table> WITH TABLE KEY <K1> = <F1>………… <Kn> = <Fn>.
W tej składni <F1>, <F2> .... <Fn> są polami tabeli wewnętrznej, a <K1>, <K2> .... <Kn> są polami kluczowymi tabeli. Instrukcja DELETE służy do usuwania rekordów lub wierszy tabeli <internal_table> na podstawie wyrażeń <K1> = <F1>, <K2> = <F2> ... <Kn> = <Fn>.
Note - Jeżeli typy danych pól <F1>, <F2> .... <Fn> nie są zgodne z polami kluczy <K1>, <K2> ... <Kn>, system SAP automatycznie konwertuje je na zgodny format.
Przykład
REPORT ZDELETE_DEMO.
DATA: BEGIN OF Line1,
ColP TYPE I,
ColQ TYPE I,
END OF Line1.
DATA mytable LIKE HASHED TABLE OF Line1
WITH UNIQUE KEY ColP.
DO 8 TIMES.
Line1-ColP = SY-INDEX.
Line1-ColQ = SY-INDEX + 4.
INSERT Line1 INTO TABLE mytable.
ENDDO.
Line1-ColP = 1.
DELETE TABLE mytable: FROM Line1,
WITH TABLE KEY ColP = 3.
LOOP AT mytable INTO Line1.
WRITE: / Line1-ColP, Line1-ColQ.
ENDLOOP.
Powyższy kod daje następujące dane wyjściowe -
2 6
4 8
5 9
6 10
7 11
8 12
W tym przykładzie mytable ma dwa pola, ColP i ColQ. Początkowo mytable jest zapełniane ośmioma wierszami, gdzie ColP zawiera wartości 1, 2, 3, 4, 5, 6, 7 i 8. ColQ zawiera wartości 5, 6, 7, 8, 9, 10, 11 i 12, ponieważ wartości ColP są za każdym razem zwiększane o 4.
Instrukcja DELETE służy do usuwania wierszy z mytable, gdzie wartość pola klucza ColP wynosi 1 lub 3. Po usunięciu pole ColP w mytable zawiera wartości 2, 4, 5, 6, 7 i 8, jak pokazano na wyjściu. Pole ColQ zawiera wartości 6, 8, 9, 10, 11 i 12.
Orientacja obiektowa upraszcza projektowanie oprogramowania, ułatwiając zrozumienie, konserwację i ponowne użycie. Object Oriented Programming(OOP) reprezentuje inny sposób myślenia w pisaniu oprogramowania. Piękno OOP tkwi w jego prostocie. Ekspresyjność OOP ułatwia dostarczanie wysokiej jakości komponentów oprogramowania na czas.
Ponieważ rozwiązania są projektowane pod kątem obiektów ze świata rzeczywistego, programiści i analitykom biznesowym mogą znacznie łatwiej wymieniać pomysły i informacje na temat projektu, który używa wspólnego języka domeny. Te ulepszenia komunikacji pomagają ujawnić ukryte wymagania, zidentyfikować zagrożenia i poprawić jakość tworzonego oprogramowania. Podejście obiektowe koncentruje się na obiektach, które reprezentują abstrakcyjne lub konkretne rzeczy z rzeczywistego świata. Obiekty te są definiowane przez ich charakter i właściwości, które są reprezentowane przez ich wewnętrzną strukturę i ich atrybuty (dane). Zachowanie tych obiektów jest opisane metodami (tj. Funkcjonalnością).
Porównajmy programowanie proceduralne i obiektowe -
funkcje | Podejście zorientowane na procedurę | Podejście zorientowane obiektowo |
---|---|---|
Nacisk | Nacisk kładziony jest na zadania. | Nacisk kładziony jest na rzeczy, które wykonują te zadania. |
Modularyzacja | Programy można podzielić na mniejsze programy zwane funkcjami. | Programy są zorganizowane w klasy i obiekty, a funkcje są osadzone w metodach klasy. |
Ochrona danych | Większość funkcji udostępnia dane globalne. | Dane mogą być ukryte i nie mogą być dostępne z zewnętrznych źródeł. |
Rozciągliwość | Modyfikowanie i rozszerzanie istniejącej funkcjonalności jest bardziej czasochłonne. | Nowe dane i funkcje można bez wysiłku dodawać w razie potrzeby. |
ABAP został początkowo opracowany jako język proceduralny (podobnie jak wcześniejszy język programowania proceduralnego, taki jak COBOL). Ale ABAP dostosował teraz zasady paradygmatów zorientowanych obiektowo wraz z wprowadzeniem obiektów ABAP. Pojęcia zorientowane obiektowo w ABAP, takie jak klasa, obiekt, dziedziczenie i polimorfizm, są zasadniczo takie same, jak w innych współczesnych językach obiektowych, takich jak Java lub C ++.
Kiedy orientacja obiektowa zaczyna nabierać kształtu, każda klasa przyjmuje określone role. Taki podział pracy pomaga uprościć ogólny model programowania, umożliwiając każdej klasie wyspecjalizowanie się w rozwiązywaniu konkretnego fragmentu problemu. Takie klasy mają dużą spójność, a operacje każdej z nich są ze sobą ściśle powiązane w jakiś intuicyjny sposób.
Kluczowe cechy orientacji obiektu to -
- Efektywna struktura programowania.
- Rzeczy ze świata rzeczywistego można bardzo dobrze modelować.
- Nacisk na bezpieczeństwo danych i dostęp do nich.
- Minimalizuje nadmiarowość kodu.
- Abstrakcja i hermetyzacja danych.
Obiekt to specjalny rodzaj zmiennej, która ma odmienne cechy i zachowania. Charakterystyki lub atrybuty obiektu są używane do opisu stanu obiektu, a zachowania lub metody reprezentują czynności wykonywane przez obiekt.
Obiekt jest wzorcem lub instancją klasy. Reprezentuje rzeczywistą jednostkę, taką jak osoba lub jednostka programistyczna, taka jak zmienne i stałe. Na przykład konta i uczniowie są przykładami rzeczywistych jednostek. Ale komponenty sprzętowe i programowe komputera są przykładami jednostek programistycznych.
Obiekt ma następujące trzy główne cechy -
- Ma stan.
- Ma wyjątkową tożsamość.
- Może wyświetlać zachowanie, ale nie musi.
Stan obiektu można opisać jako zbiór atrybutów i ich wartości. Na przykład konto bankowe ma zestaw atrybutów, takich jak numer konta, nazwa, typ konta, saldo i wartości wszystkich tych atrybutów. Zachowanie obiektu odnosi się do zmian, jakie zachodzą w jego atrybutach w czasie.
Każdy obiekt ma unikalną tożsamość, dzięki której można go odróżnić od innych obiektów. Dwa obiekty mogą wykazywać to samo zachowanie i mogą, ale nie muszą, mieć ten sam stan, ale nigdy nie mają tej samej tożsamości. Dwie osoby mogą mieć to samo imię, wiek i płeć, ale nie są identyczne. Podobnie, tożsamość przedmiotu nigdy nie zmieni się przez cały okres jego życia.
Obiekty mogą współdziałać ze sobą poprzez wysyłanie wiadomości. Obiekty zawierają dane i kod do manipulowania danymi. Obiekt może być również używany jako typ danych zdefiniowany przez użytkownika za pomocą klasy. Obiekty są również nazywane zmiennymi klasy typu. Po zdefiniowaniu klasy możesz utworzyć dowolną liczbę obiektów należących do tej klasy. Każdy obiekt jest powiązany z danymi klasy typu, za pomocą której został utworzony.
Tworzenie obiektu
Tworzenie obiektu zwykle obejmuje następujące kroki -
Tworzenie zmiennej referencyjnej w odniesieniu do klasy. Składnia, której jest -
DATA: <object_name> TYPE REF TO <class_name>.
Tworzenie obiektu ze zmiennej referencyjnej. Składnia, której jest -
CREATE Object: <object_name>.
Przykład
REPORT ZDEMO_OBJECT.
CLASS Class1 Definition.
Public Section.
DATA: text1(45) VALUE 'ABAP Objects.'.
METHODS: Display1.
ENDCLASS.
CLASS Class1 Implementation.
METHOD Display1.
Write:/ 'This is the Display method.'.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA: Class1 TYPE REF TO Class1.
CREATE Object: Class1.
Write:/ Class1->text1.
CALL METHOD: Class1->Display1.
Powyższy kod daje następujące dane wyjściowe -
ABAP Objects.
This is the Display method.
Klasa służy do określania formy obiektu i łączy reprezentację danych i metody manipulowania tymi danymi w jeden zgrabny pakiet. Nazywa się dane i funkcje w klasiemembers of the class.
Definicja i implementacja klasy
Definiując klasę, definiujesz plan dla typu danych. W rzeczywistości nie definiuje to żadnych danych, ale definiuje, co oznacza nazwa klasy, z czego będzie się składał obiekt tej klasy i jakie operacje można wykonać na takim obiekcie. Oznacza to, że definiuje abstrakcyjne cechy obiektu, takie jak atrybuty, pola i właściwości.
Poniższa składnia pokazuje, jak zdefiniować klasę -
CLASS <class_name> DEFINITION.
..........
..........
ENDCLASS.
Definicja klasy zaczyna się od słowa kluczowego CLASS, po którym następuje nazwa klasy, DEFINICJA i treść klasy. Definicja klasy może zawierać różne składniki klasy, takie jak atrybuty, metody i zdarzenia. Kiedy deklarujemy metodę w deklaracji klasy, implementacja metody musi być uwzględniona w implementacji klasy. Poniższa składnia pokazuje, jak zaimplementować klasę -
CLASS <class_name> IMPLEMENTATION.
...........
..........
ENDCLASS.
Note- Implementacja klasy zawiera implementację wszystkich jej metod. W obiektach ABAP struktura klasy zawiera składniki, takie jak atrybuty, metody, zdarzenia, typy i stałe.
Atrybuty
Atrybuty to pola danych klasy, które mogą mieć dowolny typ danych, taki jak C, I, F i N. Są zadeklarowane w deklaracji klasy. Atrybuty te można podzielić na 2 kategorie: atrybuty instancji i atrybuty statyczne. Nainstance attributedefiniuje stan obiektu dla instancji. Stany są różne dla różnych obiektów. Atrybut instancji jest deklarowany za pomocą instrukcji DATA.
Static attributeszdefiniuj wspólny stan klasy, który jest współużytkowany przez wszystkie instancje tej klasy. Oznacza to, że jeśli zmienisz atrybut statyczny w jednym obiekcie klasy, zmiana będzie widoczna również dla wszystkich innych obiektów tej klasy. Atrybut statyczny jest deklarowany za pomocą instrukcji CLASS-DATA.
Metody
Metoda to funkcja lub procedura, która reprezentuje zachowanie obiektu w klasie. Metody klasy mogą uzyskać dostęp do dowolnego atrybutu klasy. Definicja metody może również zawierać parametry, dzięki czemu można podać wartości do tych parametrów podczas wywoływania metod. Definicja metody jest zadeklarowana w deklaracji klasy i zaimplementowana w części implementacyjnej klasy. Instrukcje METHOD i ENDMETHOD służą do definiowania części implementacyjnej metody. Poniższa składnia pokazuje, jak zaimplementować metodę -
METHOD <m_name>.
..........
..........
ENDMETHOD.
W tej składni <m_name> reprezentuje nazwę metody. Note - Możesz wywołać metodę za pomocą instrukcji CALL METHOD.
Dostęp do atrybutów i metod
Komponenty klas można definiować w publicznych, prywatnych lub chronionych sekcjach widoczności, które kontrolują sposób uzyskiwania dostępu do tych komponentów. Prywatna sekcja widoczności służy do odmowy dostępu do komponentów spoza klasy. Dostęp do takich składników można uzyskać tylko z wnętrza klasy, na przykład metody.
Dostęp do komponentów zdefiniowanych w sekcji widoczności publicznej można uzyskać z dowolnego kontekstu. Domyślnie wszyscy członkowie klasy będą prywatni. W praktyce definiujemy dane w sekcji prywatnej i pokrewne metody w sekcji publicznej, aby można było je wywołać spoza klasy, jak pokazano w poniższym programie.
Dostęp do atrybutów i metod zadeklarowanych w sekcji Public w klasie może uzyskać ta klasa i każda inna klasa, podklasa programu.
Gdy atrybuty i metody są zadeklarowane w sekcji Chronione w klasie, dostęp do nich może uzyskać tylko ta klasa i podklasy (klasy pochodne).
Kiedy atrybuty i metody są zadeklarowane w sekcji Private w klasie, dostęp do nich może uzyskać tylko ta klasa, a nie inna klasa.
Przykład
Report ZAccess1.
CLASS class1 Definition.
PUBLIC Section.
Data: text1 Type char25 Value 'Public Data'.
Methods meth1.
PROTECTED Section.
Data: text2 Type char25 Value 'Protected Data'.
PRIVATE Section.
Data: text3 Type char25 Value 'Private Data'.
ENDCLASS.
CLASS class1 Implementation.
Method meth1.
Write: / 'Public Method:',
/ text1,
/ text2,
/ text3.
Skip.
EndMethod.
ENDCLASS.
Start-Of-Selection.
Data: Objectx Type Ref To class1.
Create Object: Objectx.
CALL Method: Objectx→meth1.
Write: / Objectx→text1.
Powyższy kod daje następujące dane wyjściowe -
Public Method:
Public Data
Protected Data
Private Data
Public Data
Atrybuty statyczne
Atrybut statyczny jest deklarowany za pomocą instrukcji CLASS-DATA. Wszystkie obiekty lub instancje mogą używać statycznego atrybutu klasy. Dostęp do atrybutów statycznych uzyskuje się bezpośrednio za pomocą nazwy klasy, takiej jak nazwa_klasy⇒nazwa_1 = 'Jakiś tekst'.
Przykład
Poniżej znajduje się program, w którym chcemy wydrukować tekst z linią numer 4 do 8 razy. Definiujemy klasę class1, aw sekcji public deklarujemy CLASS-DATA (atrybut statyczny) oraz metodę. Po zaimplementowaniu klasy i metody uzyskujemy bezpośredni dostęp do statycznego atrybutu w zdarzeniu Start-Of-Selection. Następnie po prostu tworzymy instancję klasy i wywołujemy metodę.
Report ZStatic1.
CLASS class1 Definition.
PUBLIC Section.
CLASS-DATA: name1 Type char45,
data1 Type I.
Methods: meth1.
ENDCLASS.
CLASS class1 Implementation.
Method meth1.
Do 4 Times.
data1 = 1 + data1.
Write: / data1, name1.
EndDo.
Skip.
EndMethod.
ENDCLASS.
Start-Of-Selection.
class1⇒name1 = 'ABAP Object Oriented Programming'.
class1⇒data1 = 0.
Data: Object1 Type Ref To class1,
Object2 Type Ref To class1.
Create Object: Object1, Object2.
CALL Method: Object1→meth1,
Object2→meth1.
Powyższy kod daje następujące dane wyjściowe -
Konstruktorzy
Konstruktory to specjalne metody wywoływane automatycznie podczas tworzenia obiektu lub uzyskiwania dostępu do składników klasy. Konstruktor jest uruchamiany za każdym razem, gdy tworzony jest obiekt, ale musimy wywołać metodę, aby wyzwolić metodę ogólną. W poniższym przykładzie zadeklarowaliśmy dwie metody publiczne method1 i konstruktor. Obie te metody mają różne operacje. Podczas tworzenia obiektu klasy metoda konstruktora wyzwala swoją operację.
Przykład
Report ZConstructor1.
CLASS class1 Definition.
PUBLIC Section.
Methods: method1, constructor.
ENDCLASS.
CLASS class1 Implementation.
Method method1.
Write: / 'This is Method1'.
EndMethod.
Method constructor.
Write: / 'Constructor Triggered'.
EndMethod.
ENDCLASS.
Start-Of-Selection.
Data Object1 Type Ref To class1.
Create Object Object1.
Powyższy kod daje następujące dane wyjściowe -
Constructor Triggered
Operator ME w metodach
Gdy deklarujesz zmienną dowolnego typu w publicznej sekcji klasy, możesz jej użyć w dowolnej innej implementacji. Zmienną można zadeklarować z wartością początkową w sekcji publicznej. Możemy ponownie zadeklarować zmienną wewnątrz metody o innej wartości. Kiedy napiszemy zmienną wewnątrz metody, system wypisze zmienioną wartość. Aby odzwierciedlić poprzednią wartość zmiennej, musimy użyć operatora „ME”.
W tym programie zadeklarowaliśmy publiczną zmienną text1 i zainicjowaliśmy wartością. Ponownie zadeklarowaliśmy tę samą zmienną, ale utworzyliśmy instancję z inną wartością. Wewnątrz metody piszemy tę zmienną z operatorem „ME”, aby uzyskać wcześniej zainicjowaną wartość. Zmienioną wartość otrzymujemy, deklarując bezpośrednio.
Przykład
Report ZMEOperator1.
CLASS class1 Definition.
PUBLIC Section.
Data text1 Type char25 Value 'This is CLASS Attribute'.
Methods method1.
ENDCLASS.
CLASS class1 Implementation.
Method method1.
Data text1 Type char25 Value 'This is METHOD Attribute'.
Write: / ME→text1,
/ text1.
ENDMethod.
ENDCLASS.
Start-Of-Selection.
Data objectx Type Ref To class1.
Create Object objectx.
CALL Method objectx→method1.
Powyższy kod daje następujące dane wyjściowe -
This is CLASS Attribute
This is METHOD Attribute
Jedną z najważniejszych koncepcji programowania obiektowego jest dziedziczenie. Dziedziczenie pozwala nam zdefiniować klasę pod względem innej klasy, co ułatwia tworzenie i utrzymywanie aplikacji. Daje to również możliwość ponownego wykorzystania funkcjonalności kodu i szybkiego czasu implementacji.
Tworząc klasę, zamiast pisać zupełnie nowe składowe i metody danych, programista może wyznaczyć, że nowa klasa powinna dziedziczyć elementy już istniejącej klasy. Ta istniejąca klasa nosi nazwębase class lub super class, a nowa klasa jest nazywana derived class lub sub class.
Obiekt jednej klasy może uzyskać właściwości innej klasy.
Klasa pochodna dziedziczy dane i metody superklasy. Mogą jednak nadpisywać metody, a także dodawać nowe metody.
Główną zaletą dziedziczenia jest możliwość ponownego wykorzystania.
Relacja dziedziczenia jest określana za pomocą dodatku „INHERITING FROM” do instrukcji definicji klasy.
Poniżej znajduje się składnia -
CLASS <subclass> DEFINITION INHERITING FROM <superclass>.
Przykład
Report ZINHERITAN_1.
CLASS Parent Definition.
PUBLIC Section.
Data: w_public(25) Value 'This is public data'.
Methods: ParentM.
ENDCLASS.
CLASS Child Definition Inheriting From Parent.
PUBLIC Section.
Methods: ChildM.
ENDCLASS.
CLASS Parent Implementation.
Method ParentM.
Write /: w_public.
EndMethod. ENDCLASS.
CLASS Child Implementation.
Method ChildM.
Skip.
Write /: 'Method in child class', w_public.
EndMethod.
ENDCLASS.
Start-of-selection.
Data: Parent Type Ref To Parent,
Child Type Ref To Child.
Create Object: Parent, Child.
Call Method: Parent→ParentM,
child→ChildM.
Powyższy kod daje następujące dane wyjściowe -
This is public data
Method in child class
This is public data
Kontrola dostępu i dziedziczenie
Klasa pochodna może uzyskać dostęp do wszystkich nieprywatnych elementów członkowskich swojej klasy bazowej. Zatem elementy składowe superklasy, które nie powinny być dostępne dla funkcji składowych podklas, powinny być zadeklarowane jako prywatne w superklasie. Możemy podsumować różne typy dostępu według tego, kto może uzyskać do nich dostęp w następujący sposób -
Dostęp | Publiczny | Chroniony | Prywatny |
---|---|---|---|
Same calss | tak | tak | tak |
Klasy pochodnej | tak | tak | Nie |
Poza klasą | tak | Nie | Nie |
Wyprowadzając klasę z superklasy, można ją dziedziczyć poprzez dziedziczenie publiczne, chronione lub prywatne. Typ dziedziczenia jest określony przez specyfikator dostępu, jak wyjaśniono powyżej. Rzadko używamy dziedziczenia chronionego lub prywatnego, ale powszechnie stosowane jest dziedziczenie publiczne. Podczas korzystania z różnych rodzajów dziedziczenia obowiązują następujące zasady.
Public Inheritance- Podczas tworzenia klasy z publicznej superklasy, publiczni członkowie superklasy stają się publicznymi członkami podklasy, a chronieni członkowie superklasy stają się chronionymi członkami podklasy. Prywatni członkowie superklasy nigdy nie są dostępni bezpośrednio z podklasy, ale można uzyskać do nich dostęp poprzez wywołania publiczne i chronione członkowie superklasy.
Protected Inheritance - W przypadku wyprowadzenia z chronionej superklasy, publiczni i chronieni członkowie superklasy stają się chronionymi członkami podklasy.
Private Inheritance - W przypadku wywodzenia się z prywatnej superklasy, publiczni i chronieni członkowie superklasy stają się prywatnymi członkami podklasy.
Przedefiniowanie metod w podklasie
Metody klasy super można ponownie zaimplementować w podklasie. Kilka zasad redefiniowania metod -
Instrukcja redefinicji metody dziedziczonej musi znajdować się w tej samej sekcji, co definicja metody oryginalnej.
Jeśli przedefiniujesz metodę, nie musisz ponownie wprowadzać jej interfejsu w podklasie, a jedynie nazwę metody.
W ramach przedefiniowanej metody można uzyskać dostęp do komponentów bezpośredniej superklasy za pomocą super odwołania.
Pseudo odwołanie super może być używane tylko w przedefiniowanych metodach.
Przykład
Report Zinheri_Redefine.
CLASS super_class Definition.
Public Section.
Methods: Addition1 importing g_a TYPE I
g_b TYPE I
exporting g_c TYPE I.
ENDCLASS.
CLASS super_class Implementation.
Method Addition1.
g_c = g_a + g_b.
EndMethod.
ENDCLASS.
CLASS sub_class Definition Inheriting From super_class.
Public Section.
METHODS: Addition1 Redefinition.
ENDCLASS.
CLASS sub_class Implementation.
Method Addition1.
g_c = g_a + g_b + 10.
EndMethod.
ENDCLASS.
Start-Of-Selection.
Parameters: P_a Type I, P_b TYPE I.
Data: H_Addition1 TYPE I.
Data: H_Sub TYPE I.
Data: Ref1 TYPE Ref TO sub_class.
Create Object Ref1.
Call Method Ref1→Addition1 exporting g_a = P_a
g_b = P_b
Importing g_c = H_Addition1.
Write:/ H_Addition1.
Po wykonaniu F8, jeśli wprowadzimy wartości 9 i 10, powyższy kod daje następujący wynik -
Redefinition Demo
29
Termin polimorfizm oznacza dosłownie „wiele form”. Z perspektywy obiektowej polimorfizm działa w połączeniu z dziedziczeniem, umożliwiając wymienne używanie różnych typów w drzewie dziedziczenia. Oznacza to, że polimorfizm występuje, gdy istnieje hierarchia klas i są one powiązane przez dziedziczenie. Polimorfizm ABAP oznacza, że wywołanie metody spowoduje wykonanie innej metody w zależności od typu obiektu, który wywołuje metodę.
Poniższy program zawiera abstrakcyjną klasę „class_prgm”, 2 podklasy (class_procedural i class_OO) oraz klasę sterownika testowego „class_type_approach”. W tej implementacji metoda klasy „start” pozwala nam wyświetlić typ programowania i jego podejście. Jeśli przyjrzysz się uważnie sygnaturze metody „start”, zauważysz, że otrzymuje ona parametr importu typu class_prgm. Jednak w zdarzeniu Start-Of-Selection ta metoda została wywołana w czasie wykonywania z obiektami typu class_procedural i class_OO.
Przykład
Report ZPolymorphism1.
CLASS class_prgm Definition Abstract.
PUBLIC Section.
Methods: prgm_type Abstract,
approach1 Abstract.
ENDCLASS.
CLASS class_procedural Definition
Inheriting From class_prgm.
PUBLIC Section.
Methods: prgm_type Redefinition,
approach1 Redefinition.
ENDCLASS.
CLASS class_procedural Implementation.
Method prgm_type.
Write: 'Procedural programming'.
EndMethod. Method approach1.
Write: 'top-down approach'.
EndMethod. ENDCLASS.
CLASS class_OO Definition
Inheriting From class_prgm.
PUBLIC Section.
Methods: prgm_type Redefinition,
approach1 Redefinition.
ENDCLASS.
CLASS class_OO Implementation.
Method prgm_type.
Write: 'Object oriented programming'.
EndMethod.
Method approach1.
Write: 'bottom-up approach'.
EndMethod.
ENDCLASS.
CLASS class_type_approach Definition.
PUBLIC Section.
CLASS-METHODS:
start Importing class1_prgm
Type Ref To class_prgm.
ENDCLASS.
CLASS class_type_approach IMPLEMENTATION.
Method start.
CALL Method class1_prgm→prgm_type.
Write: 'follows'.
CALL Method class1_prgm→approach1.
EndMethod.
ENDCLASS.
Start-Of-Selection.
Data: class_1 Type Ref To class_procedural,
class_2 Type Ref To class_OO.
Create Object class_1.
Create Object class_2.
CALL Method class_type_approach⇒start
Exporting
class1_prgm = class_1.
New-Line.
CALL Method class_type_approach⇒start
Exporting
class1_prgm = class_2.
Powyższy kod daje następujące dane wyjściowe -
Procedural programming follows top-down approach
Object oriented programming follows bottom-up approach
Środowisko wykonawcze ABAP wykonuje niejawne rzutowanie zawężające podczas przypisywania importowanego parametru class1_prgm. Ta funkcja pomaga w ogólnej implementacji metody „start”. Dynamiczne informacje o typie skojarzone ze zmienną odwołania do obiektu umożliwiają środowisku wykonawczemu ABAP dynamiczne powiązanie wywołania metody z implementacją zdefiniowaną w obiekcie wskazywanym przez zmienną odwołania do obiektu. Na przykład parametr importu „class1_prgm” dla metody „start” w klasie „class_type_approach” odnosi się do typu abstrakcyjnego, którego nie można by utworzyć samodzielnie.
Za każdym razem, gdy metoda jest wywoływana z konkretną implementacją podklasy, taką jak class_procedural lub class_OO, typ dynamiczny parametru odwołania class1_prgm jest powiązany z jednym z tych konkretnych typów. Dlatego wywołania metod „prgm_type” i „approach1” odnoszą się raczej do implementacji podanych w podklasach class_procedural lub class_OO niż do niezdefiniowanych abstrakcyjnych implementacji zawartych w klasie „class_prgm”.
Hermetyzacja to koncepcja programowania zorientowanego obiektowo (OOP), która wiąże ze sobą dane i funkcje, które manipulują danymi, i chroni je przed zewnętrznymi zakłóceniami i niewłaściwym wykorzystaniem. Enkapsulacja danych doprowadziła do powstania ważnej koncepcji OOP, polegającej na ukrywaniu danych. Hermetyzacja to mechanizm łączenia danych i funkcji, które z nich korzystają, a abstrakcja danych to mechanizm ujawniania tylko interfejsów i ukrywania szczegółów implementacji przed użytkownikiem.
ABAP obsługuje właściwości hermetyzacji i ukrywania danych poprzez tworzenie typów zdefiniowanych przez użytkownika zwanych klasami. Jak wspomniano wcześniej, klasa może zawierać członków prywatnych, chronionych i publicznych. Domyślnie wszystkie elementy zdefiniowane w klasie są prywatne.
Hermetyzacja według interfejsu
Hermetyzacja w rzeczywistości oznacza, że jeden atrybut i metoda mogą być modyfikowane w różnych klasach. Dlatego dane i metody mogą mieć różną formę i logikę, które mogą być ukryte w oddzielnych klasach.
Rozważmy hermetyzację według interfejsu. Interfejs jest używany, gdy potrzebujemy stworzyć jedną metodę o różnej funkcjonalności w różnych klasach. W tym przypadku nie trzeba zmieniać nazwy metody. Ta sama metoda będzie musiała zostać zaimplementowana w różnych implementacjach klas.
Przykład
Poniższy program zawiera interfejs inter_1. Mamy zadeklarowany atrybut i metodę method1. Zdefiniowaliśmy również dwie klasy, takie jak Class1 i Class2. Musimy więc zaimplementować metodę „method1” w obu implementacjach klas. Zaimplementowaliśmy metodę „method1” w różny sposób w różnych klasach. Na początku selekcji tworzymy dwa obiekty Object1 i Object2 dla dwóch klas. Następnie wywołujemy metodę różnymi obiektami, aby uzyskać funkcję zadeklarowaną w oddzielnych klasach.
Report ZEncap1.
Interface inter_1.
Data text1 Type char35.
Methods method1.
EndInterface.
CLASS Class1 Definition.
PUBLIC Section.
Interfaces inter_1.
ENDCLASS.
CLASS Class2 Definition.
PUBLIC Section.
Interfaces inter_1.
ENDCLASS.
CLASS Class1 Implementation.
Method inter_1~method1.
inter_1~text1 = 'Class 1 Interface method'.
Write / inter_1~text1.
EndMethod.
ENDCLASS.
CLASS Class2 Implementation.
Method inter_1~method1.
inter_1~text1 = 'Class 2 Interface method'.
Write / inter_1~text1.
EndMethod.
ENDCLASS.
Start-Of-Selection.
Data: Object1 Type Ref To Class1,
Object2 Type Ref To Class2.
Create Object: Object1, Object2.
CALL Method: Object1→inter_1~method1,
Object2→inter_1~method1.
Powyższy kod daje następujące dane wyjściowe -
Class 1 Interface method
Class 2 Interface method
Klasy hermetyzowane nie mają wielu zależności od świata zewnętrznego. Co więcej, ich interakcje z klientami zewnętrznymi są kontrolowane przez ustabilizowany interfejs publiczny. Oznacza to, że klasa hermetyzowana i jej klienci są luźno powiązani. W większości przypadków klasy z dobrze zdefiniowanymi interfejsami można podłączyć do innego kontekstu. Prawidłowo zaprojektowane klasy hermetyzowane stają się zasobami oprogramowania wielokrotnego użytku.
Projektowanie strategii
Większość z nas nauczyła się poprzez gorzkie doświadczenie, aby domyślnie uczynić członków klasy prywatnymi, chyba że naprawdę musimy ich ujawniać. To po prostu dobra hermetyzacja. Mądrość ta jest najczęściej stosowana do członków danych i dotyczy również wszystkich członków.
Podobnie jak klasy w ABAP, interfejsy działają jako typy danych dla obiektów. Komponenty interfejsów są takie same jak komponenty klas. W przeciwieństwie do deklaracji klas, deklaracja interfejsu nie zawiera sekcji widoczności. Dzieje się tak, ponieważ komponenty zdefiniowane w deklaracji interfejsu są zawsze zintegrowane z publiczną sekcją widoczności klas.
Interfejsy są używane, gdy dwie podobne klasy mają metodę o tej samej nazwie, ale funkcje różnią się od siebie. Interfejsy mogą wyglądać podobnie do klas, ale funkcje zdefiniowane w interfejsie są zaimplementowane w klasie, aby rozszerzyć zakres tej klasy. Interfejsy wraz z funkcją dziedziczenia stanowią podstawę dla polimorfizmu. Dzieje się tak, ponieważ metoda zdefiniowana w interfejsie może zachowywać się inaczej w różnych klasach.
Poniżej przedstawiono ogólny format tworzenia interfejsu -
INTERFACE <intf_name>.
DATA.....
CLASS-DATA.....
METHODS.....
CLASS-METHODS.....
ENDINTERFACE.
W tej składni <intf_name> reprezentuje nazwę interfejsu. Instrukcje DATA i CLASSDATA mogą służyć do definiowania odpowiednio instancji i atrybutów statycznych interfejsu. Instrukcje METHODS i CLASS-METHODS mogą służyć do definiowania odpowiednio instancji i metod statycznych interfejsu. Ponieważ definicja interfejsu nie obejmuje klasy implementacji, nie jest konieczne dodawanie klauzuli DEFINITION w deklaracji interfejsu.
Note- Wszystkie metody interfejsu są abstrakcyjne. Są w pełni zadeklarowane, w tym ich interfejs parametrów, ale nie są zaimplementowane w interfejsie. Wszystkie klasy, które chcą używać interfejsu, muszą implementować wszystkie metody interfejsu. W przeciwnym razie klasa stanie się klasą abstrakcyjną.
W części implementacyjnej klasy używamy następującej składni -
INTERFACE <intf_name>.
W tej składni <intf_name> reprezentuje nazwę interfejsu. Zauważ, że ta składnia musi być używana w publicznej sekcji klasy.
Następująca składnia służy do implementacji metod interfejsu wewnątrz implementacji klasy -
METHOD <intf_name~method_m>.
<statements>.
ENDMETHOD.
W tej składni <intf_name ~ method_m> reprezentuje w pełni zadeklarowaną nazwę metody interfejsu <intf_name>.
Przykład
Report ZINTERFACE1.
INTERFACE my_interface1.
Methods msg.
ENDINTERFACE.
CLASS num_counter Definition.
PUBLIC Section.
INTERFACES my_interface1.
Methods add_number.
PRIVATE Section.
Data num Type I.
ENDCLASS.
CLASS num_counter Implementation.
Method my_interface1~msg.
Write: / 'The number is', num.
EndMethod.
Method add_number.
ADD 7 TO num.
EndMethod.
ENDCLASS.
CLASS drive1 Definition.
PUBLIC Section.
INTERFACES my_interface1.
Methods speed1.
PRIVATE Section.
Data wheel1 Type I.
ENDCLASS.
CLASS drive1 Implementation.
Method my_interface1~msg.
Write: / 'Total number of wheels is', wheel1.
EndMethod.
Method speed1.
Add 4 To wheel1.
EndMethod.
ENDCLASS.
Start-Of-Selection.
Data object1 Type Ref To num_counter.
Create Object object1.
CALL Method object1→add_number.
CALL Method object1→my_interface1~msg.
Data object2 Type Ref To drive1.
Create Object object2.
CALL Method object2→speed1.
CALL Method object2→my_interface1~msg.
Powyższy kod daje następujące dane wyjściowe -
The number is 7
Total number of wheels is 4
W powyższym przykładzie my_interface1 to nazwa interfejsu zawierającego metodę „msg”. Następnie zdefiniowano i zaimplementowano dwie klasy, num_counter i drive1. Obie te klasy implementują metodę 'msg', a także określone metody, które definiują zachowanie ich odpowiednich instancji, takie jak metody add_number i speed1.
Note - Metody add_number i speed1 są specyficzne dla odpowiednich klas.
Na eventjest zbiorem wyników, które są zdefiniowane w klasie w celu wyzwolenia procedur obsługi zdarzeń w innych klasach. Po wyzwoleniu zdarzenia możemy wywołać dowolną liczbę metod obsługi zdarzenia. Połączenie między wyzwalaczem a jego metodą obsługi jest w rzeczywistości ustalane dynamicznie w czasie wykonywania.
W normalnym wywołaniu metody program wywołujący określa, która metoda obiektu lub klasy ma zostać wywołana. Ponieważ stała metoda obsługi nie jest rejestrowana dla każdego zdarzenia, w przypadku obsługi zdarzenia metoda obsługi określa zdarzenie, które ma zostać wywołane.
Zdarzenie klasy może wyzwolić metodę obsługi zdarzeń tej samej klasy przy użyciu instrukcji RAISE EVENT. W przypadku zdarzenia metodę obsługi zdarzeń można zdefiniować w tej samej lub innej klasie za pomocą klauzuli FOR EVENT, jak pokazano w poniższej składni -
FOR EVENT <event_name> OF <class_name>.
Podobnie jak w przypadku metod klasy, zdarzenie może mieć interfejs parametrów, ale ma tylko parametry wyjściowe. Parametry wyjściowe są przekazywane do metody obsługi zdarzeń przez instrukcję RAISE EVENT, która odbiera je jako parametry wejściowe. Zdarzenie jest dynamicznie łączone z jego metodą obsługi w programie za pomocą instrukcji SET HANDLER.
Po wyzwoleniu zdarzenia we wszystkich klasach obsługi powinny zostać wykonane odpowiednie metody obsługi zdarzeń.
Przykład
REPORT ZEVENT1.
CLASS CL_main DEFINITION.
PUBLIC SECTION.
DATA: num1 TYPE I.
METHODS: PRO IMPORTING num2 TYPE I.
EVENTS: CUTOFF.
ENDCLASS.
CLASS CL_eventhandler DEFINITION.
PUBLIC SECTION.
METHODS: handling_CUTOFF FOR EVENT CUTOFF OF CL_main.
ENDCLASS.
START-OF-SELECTION.
DATA: main1 TYPE REF TO CL_main.
DATA: eventhandler1 TYPE REF TO CL_eventhandler.
CREATE OBJECT main1.
CREATE OBJECT eventhandler1.
SET HANDLER eventhandler1→handling_CUTOFF FOR main1.
main1→PRO( 4 ).
CLASS CL_main IMPLEMENTATION.
METHOD PRO.
num1 = num2.
IF num2 ≥ 2.
RAISE EVENT CUTOFF.
ENDIF.
ENDMETHOD.
ENDCLASS.
CLASS CL_eventhandler IMPLEMENTATION.
METHOD handling_CUTOFF.
WRITE: 'Handling the CutOff'.
WRITE: / 'Event has been processed'.
ENDMETHOD. ENDCLASS.
Powyższy kod daje następujące dane wyjściowe -
Handling the CutOff
Event has been processed
ZA reportto prezentacja danych w zorganizowanej strukturze. Wiele systemów zarządzania bazami danych zawiera narzędzie do tworzenia raportów, które umożliwia projektowanie i generowanie raportów. Aplikacje SAP wspierają tworzenie raportów.
Klasyczny raport jest tworzony przy użyciu danych wyjściowych w instrukcji WRITE wewnątrz pętli. Nie zawierają żadnych raportów podrzędnych. SAP udostępnia również standardowe raporty, takie jak RSCLTCOP, który służy do kopiowania tabel między klientami, oraz RSPARAM, który służy do wyświetlania parametrów instancji.
Raporty te zawierają tylko jeden ekran jako wynik. Możemy wykorzystać różne zdarzenia, takie jak INITIALIZATON i TOP-OF-PAGE, aby stworzyć klasyczny raport, a każde zdarzenie ma swoje własne znaczenie podczas tworzenia klasycznego raportu. Każde z tych zdarzeń jest powiązane z konkretną czynnością użytkownika i jest wyzwalane tylko wtedy, gdy użytkownik wykona tę akcję.
Poniżej znajduje się tabela opisująca zdarzenia i opisy -
S.No. | Opis wydarzenia |
---|---|
1 | INITIALIZATON Wyzwalane przed wyświetleniem ekranu wyboru. |
2 | AT SELECTION-SCREEN Wywoływane po przetworzeniu danych wprowadzonych przez użytkownika na ekranie wyboru. To zdarzenie weryfikuje dane wejściowe użytkownika przed wykonaniem programu. Po przetworzeniu danych wprowadzonych przez użytkownika ekran wyboru pozostaje w trybie aktywnym. |
3 | START-OF-SELECTION Wywoływane dopiero po zakończeniu przetwarzania ekranu wyboru; to znaczy, gdy użytkownik kliknie ikonę Wykonaj na ekranie wyboru. |
4 | END-OF-SELECTION Wyzwalane po wykonaniu ostatniej instrukcji w zdarzeniu START-OF-SELECTON. |
5 | TOP-OF-PAGE Wyzwalane przez pierwszą instrukcję WRITE w celu wyświetlenia danych na nowej stronie. |
6 | END-OF-PAGE Wyzwalane w celu wyświetlenia tekstu na końcu strony w raporcie. Należy zauważyć, że to zdarzenie jest ostatnim zdarzeniem podczas tworzenia raportu i powinno być połączone z klauzulą LINE-COUNT instrukcji REPORT. |
Przykład
Stwórzmy klasyczny raport. Informacje przechowywane w standardowej bazie danych MARA (zawierającej ogólne dane materiałowe) wyświetlimy za pomocą sekwencji instrukcji w edytorze ABAP.
REPORT ZREPORT2
LINE-SIZE 75
LINE-COUNT 30(3)
NO STANDARD PAGE HEADING.
Tables: MARA.
TYPES: Begin of itab,
MATNR TYPE MARA-MATNR,
MBRSH TYPE MARA-MBRSH,
MEINS TYPE MARA-MEINS,
MTART TYPE MARA-MTART,
End of itab.
DATA: wa_ma TYPE itab,
it_ma TYPE STANDARD TABLE OF itab.
SELECT-OPTIONS: MATS FOR MARA-MATNR OBLIGATORY.
INITIALIZATION.
MATS-LOW = '1'.
MATS-HIGH = '500'.
APPEND MATS.
AT SELECTION-SCREEN. .
IF MATS-LOW = ' '.
MESSAGE I000(ZKMESSAGE).
ELSEIF MATS-HIGH = ' '.
MESSAGE I001(ZKMESSAGE).
ENDIF.
TOP-OF-PAGE.
WRITE:/ 'CLASSICAL REPORT CONTAINING GENERAL MATERIAL DATA
FROM THE TABLE MARA' COLOR 7.
ULINE.
WRITE:/ 'MATERIAL' COLOR 1,
24 'INDUSTRY' COLOR 2,
38 'UNITS' COLOR 3,
53 'MATERIAL TYPE' COLOR 4.
ULINE.
END-OF-PAGE.
START-OF-SELECTION.
SELECT MATNR MBRSH MEINS MTART FROM MARA
INTO TABLE it_ma WHERE MATNR IN MATS.
LOOP AT it_ma into wa_ma.
WRITE:/ wa_ma-MATNR,
25 wa_ma-MBRSH,
40 wa_ma-MEINS,
55 wa_ma-MTART.
ENDLOOP.
END-OF-SELECTION.
ULINE.
WRITE:/ 'CLASSICAL REPORT HAS BEEN CREATED' COLOR 7.
ULINE.
SKIP.
Powyższy kod generuje następujące dane wyjściowe zawierające ogólne dane materiałowe ze standardowej tabeli MARA -
Programowanie dialogowe zajmuje się tworzeniem wielu obiektów. Wszystkie te obiekty są powiązane hierarchicznie z programem głównym i są wykonywane po kolei. Tworzenie programu dialogowego wykorzystuje narzędzia w środowisku ABAP. Są to te same narzędzia, które są używane przy tworzeniu standardowych aplikacji SAP.
Oto główne składniki programów dialogowych -
- Screens
- Pule modułów
- Subroutines
- Menus
- Transactions
Zestaw narzędzi
Programy dialogowe powinny być tworzone przez przeglądarkę obiektów (transakcja: SE80), tak aby wszystkie obiekty zostały połączone z programem głównym bez konieczności jawnego wskazywania każdego obiektu. Zaawansowane techniki nawigacji usprawniają proces przemieszczania się z jednego obiektu do drugiego.
Ekrany składają się z atrybutów ekranu, układu ekranu, pól i logiki przepływu. Pula modułów składa się ze zmodularyzowanej składni, która jest umieszczona w programach programu dialogowego. Te moduły mogą być wywoływane przez logikę przepływu, która jest przetwarzana przez procesor dialogu.
Tworzenie nowego programu dialogowego
Step 1 - W ramach transakcji SE80 wybierz „Program” z listy rozwijanej i wprowadź nazwę Z dla swojego niestandardowego programu SAP jako „ZSCREENEX”.
Step 2 - Naciśnij Enter, wybierz „Z TOP INCL” i kliknij przycisk „Tak”.
Step 3 - Wpisz nazwę swojego topu, w tym „ZSCRTOP” i kliknij zielony znacznik.
Step 4 - Na ekranie atrybutów wpisz tytuł i kliknij przycisk zapisywania.
Dodawanie ekranu do programu dialogowego
Step 1 - Aby dodać ekran do programu, kliknij prawym przyciskiem myszy nazwę programu i wybierz opcje Utwórz → Ekran.
Step 2 - Wprowadź numer ekranu jako „0211” i kliknij zielony znacznik.
Step 3 - Na następnym ekranie wprowadź krótki tytuł, ustaw normalny typ ekranu i kliknij przycisk zapisywania na górnym pasku narzędzi aplikacji.
Układ ekranu i dodawanie tekstu „Hello World”
Step 1 - Kliknij przycisk układu na pasku narzędzi aplikacji, aby wyświetlić okno Screen Painter.
Step 2 - Dodaj pole tekstowe i wprowadź tekst, na przykład „Hello World”.
Step 3 - Zapisz i aktywuj ekran.
Tworzenie transakcji
Step 1 - Aby utworzyć kod transakcji dla swojego programu, po prostu kliknij prawym przyciskiem myszy nazwę programu i wybierz opcję Utwórz → Transakcja i wprowadź kod transakcji jako „ZTRANEX”.
Step 2 - Wprowadź tekst transakcji, program i ekran, który właśnie utworzyłeś (ZSCREENEX & 0211) i zaznacz pole wyboru „SAPGUI for Windows” w sekcji „Obsługa GUI”.
Wykonanie programu
Zapisz i aktywuj wszystko. Możesz uruchomić program. Podczas wykonywania programu wprowadzony tekst jest wyświetlany na ekranie, jak pokazano na poniższym zrzucie ekranu.
Narzędzia SAP Smart Forms można używać do drukowania i wysyłania dokumentów. To narzędzie jest przydatne przy tworzeniu formularzy, plików PDF, wiadomości e-mail i dokumentów do Internetu. Narzędzie zapewnia interfejs do tworzenia i utrzymywania układu i logiki formularza. SAP zapewnia również wybór formularzy dla procesów biznesowych, takich jak te używane w zarządzaniu relacjami z klientami (CRM), sprzedaży i dystrybucji (SD), rachunkowości finansowej (FI) i zasobach ludzkich (HR).
Narzędzie umożliwia modyfikowanie formularzy za pomocą prostych narzędzi graficznych zamiast używania dowolnego narzędzia programistycznego. Oznacza to, że użytkownik bez wiedzy programistycznej może bez trudu skonfigurować te formularze z danymi dla procesu biznesowego.
W formularzu Smart Form dane są pobierane z tabel statycznych i dynamicznych. Nagłówek tabeli i suma częściowa są określane przez wyzwalane zdarzenia, a dane są następnie sortowane przed ostatecznym wynikiem. Formularz inteligentny umożliwia włączenie grafiki, która może być wyświetlana jako część formularza lub jako tło. W razie potrzeby można również ukryć grafikę w tle podczas drukowania formularza.
Oto kilka przykładów standardowych formularzy Smart Forms dostępnych w systemie SAP -
SF_EXAMPLE_01 reprezentuje fakturę z tabelą wyników rezerwacji lotu dla klienta.
SF_EXAMPLE_02 reprezentuje fakturę podobną do SF_EXAMPLE_01, ale z sumami częściowymi.
SF_EXAMPLE_03 określa fakturę podobną do SF_EXAMPLE_02, ale taką, w której można wybrać kilku klientów w programie użytkowym.
Tworzenie formularza
Stwórzmy formularz za pomocą narzędzia SAP Smart Forms. Dowiesz się również, jak dodać węzeł w Smart Form i przetestować formularz w tym samouczku. Tutaj zaczynamy od stworzenia kopii formularza SF_EXAMPLE_01. Formularz SF_EXAMPLE_01 to standardowy formularz Smart Form dostępny w systemie SAP.
Step 1- Smart Form Builder to główny interfejs używany do tworzenia Smart Form. Jest dostępny na ekranie początkowym SAP Smart Forms. Musimy wpisać kod transakcji „SMARTFORMS” w polu Polecenie, aby otworzyć początkowy ekran SAP Smart Forms. Na tym ekranie wprowadź nazwę formularza SF_EXAMPLE_01 w polu Formularz.
Step 2 - Wybierz Smart Forms → Kopiuj lub kliknij ikonę Kopiuj, aby otworzyć okno dialogowe Kopiuj formularz lub tekst.
Step 3- W polu Obiekt docelowy wprowadź nazwę nowego formularza. Nazwa musi zaczynać się od litery Y lub Z. W tym przypadku nazwa formularza to „ZSMM1”.
Step 4 - Kliknij ikonę Kontynuuj lub naciśnij klawisz ENTER w oknie dialogowym Kopiuj formularz lub tekst, aby formularz ZSMM1 został utworzony jako kopia wstępnie zdefiniowanego formularza SF_EXAMPLE_01.
Step 5- Kliknij ikonę Zapisz. Nazwa formularza jest wyświetlana w polu Formularz na ekranie początkowym SAP Smart Forms.
Step 6- Kliknij przycisk Utwórz na ekranie początkowym SAP Smart Forms. Formularz ZSMM1 pojawi się w Kreatorze formularzy.
Step 7- Pierwsza wersja robocza strony jest tworzona z oknem GŁÓWNYM. Wszystkie składniki nowego formularza są oparte na predefiniowanym formularzu SF_EXAMPLE_01. Możesz po prostu kliknąć węzeł w menu Nawigacja, aby wyświetlić jego zawartość.
Tworzenie węzła tekstowego w formularzu
Step 1 - Otwórz formularz w trybie zmian ekranu SAP Form Builder i kliknij prawym przyciskiem myszy opcję Main Window w węźle First Page i wybierz Utwórz → Tekst z menu kontekstowego.
Step 2- Zmień tekst w polu Tekst na „Mój_tekst”, a tekst w polu Znaczenie na „Tekst_Demo”. Wpisz tekst „Hello TutorialsPoint…” w polu edycji tekstu w środkowej ramce Kreatora formularzy, jak pokazano na poniższej migawce -
Step 3 - Kliknij przycisk Zapisz, aby zapisać węzeł.
Step 4- Aktywuj i przetestuj węzeł, klikając odpowiednio ikony Aktywuj i Testuj. Pojawi się początkowy ekran Konstruktora funkcji.
Step 5- Aktywuj i przetestuj moduł funkcyjny, klikając ikony Aktywuj i Wykonaj. Parametry modułu funkcyjnego są wyświetlane na ekranie początkowym Kreatora funkcji.
Step 6- Uruchom moduł funkcyjny, klikając ikonę Wykonaj. Pojawi się okno dialogowe Drukuj.
Step 7 - Określ urządzenie wyjściowe jako „LP01” i kliknij przycisk Podgląd wydruku.
Powyższe kroki dadzą następujący wynik -
Narzędzia SAPscript systemu SAP można używać do tworzenia formularzy biznesowych, takich jak faktury i zamówienia, oraz zarządzania nimi. Narzędzie SAPscript udostępnia liczne szablony, które w dużym stopniu upraszczają projektowanie formularza biznesowego.
System SAP jest dostarczany ze standardowymi formularzami SAPscript, które są dostarczane ze standardowym klientem SAP (zwykle jako klient 000). Poniżej znajduje się kilka przykładów standardowych formularzy SAPscript dostarczonych z klientem 000 -
S.No. | Nazwa i opis formularza |
---|---|
1 | RVORDER01 Formularz potwierdzenia zamówienia sprzedaży |
2 | RVDELNOTE Lista rzeczy do spakowania |
3 | RVINVOICE01 Faktura |
4 | MEDRUCK Zamówienie |
5 | F110_PRENUM_CHCK Prenumerowany czek |
Struktura formularza SAPscript składa się z 2 głównych komponentów -
Content - Może to być tekst (dane biznesowe) lub grafika (logo firmy).
Layout - Jest to definiowane przez zestaw okien, w których pojawia się treść formularza.
SAPscript - narzędzie malarza formularzy
Narzędzie Malarz formularzy zapewnia graficzny układ formularza SAPscript oraz różne funkcje umożliwiające manipulowanie formularzem. W poniższym przykładzie utworzymy formularz faktury po skopiowaniu jego struktury układu ze standardowego formularza SAPscript RVINVOICE01 i wyświetlimy jego układ, uzyskując dostęp do narzędzia Malarz formularzy.
Step 1- Otwórz Malarza formularzy. Możesz zażądać wyświetlenia ekranu, nawigując po menu SAP lub używając kodu transakcji SE71.
Step 2- Na ekranie Form Painter, request, wprowadź nazwę i język formularza SAPscript odpowiednio w polach Form i Language. Wprowadźmy odpowiednio „RVINVOICE01” i „EN” w tych polach.
Step 3 - Wybierz przycisk opcji Układ strony w polu grupy Obiekty podrzędne.
Step 4- Wybierz opcję Narzędzia → Kopiuj od klienta, aby utworzyć kopię formularza RVINVOICE01. Zostanie wyświetlony ekran „Kopiuj formularze między klientami”.
Step 5- Na ekranie „Kopiuj formularze między klientami” wprowadź oryginalną nazwę formularza „RVINVOICE01” w polu Nazwa formularza, numer klienta źródłowego „000” w polu Klient źródłowy oraz nazwę celu formularz jako „ZINV_01” w polu Formularz docelowy. Upewnij się, że inne ustawienia pozostają niezmienione.
Step 6- Następnie kliknij ikonę Wykonaj na ekranie „Kopiuj formularze między klientami”. Zostanie wyświetlone okno dialogowe „Utwórz wpis do katalogu obiektów”. Kliknij ikonę Zapisz.
Formularz ZINV_01 jest kopiowany z formularza RVINVOICE01 i wyświetlany na ekranie „Kopiuj formularze między klientami”, jak pokazano na poniższej migawce -
Step 7 - Kliknij dwukrotnie ikonę wstecz i przejdź z powrotem do ekranu Form Painter: Request, który zawiera nazwę skopiowanego formularza ZINV_01.
Step 8 - Po kliknięciu przycisku Wyświetl, pojawi się okno „Formularz ZINV_01: Układ strony PIERWSZY” oraz ekran „Formularz: Zmień układ strony: ZINV_01”, jak pokazano na poniższym zrzucie ekranu.
Step 9- Okno „Formularz ZINV_01: Układ strony PIERWSZY” pokazuje początkowy układ formularza. Układ formularza zawiera pięć okien: HEADER, ADDRESS, INFO, INFO1 i MAIN. Opis tych okien jest dostępny w edytorze PC.
Na przykład, po prostu wybierając okno GŁÓWNE i klikając ikonę Tekst na ekranie „Formularz: Zmień układ strony: ZINV_01”, możesz wyświetlić wszystkie wartości marginesów, jak pokazano na poniższym zrzucie ekranu -
Wyjścia klienta można uznać za zaczepy do standardowych programów SAP. Nie potrzebujemy klucza dostępu do pisania kodu i nie ma potrzeby modyfikowania standardowego programu SAP. Te wyjścia nie mają żadnej funkcjonalności i są puste. Logika biznesowa mogłaby zostać dodana w celu spełnienia różnych wymagań klienta. Jednak wyjścia klientów nie są dostępne dla wszystkich programów.
Wyjście klienta dla standardowych transakcji
Poniżej przedstawiono kroki, aby znaleźć wyjścia klientów w zakresie standardowych transakcji. Zidentyfikujmy wyjścia klientów dostępne w MM01 (Material Master Creation).
Step 1 - Przejdź do transakcji MM01 i zidentyfikuj nazwę programu MM01, przechodząc do Pasek menu → System → Status, jak pokazano na powyższym zrzucie ekranu.
Step 2- Uzyskaj nazwę programu z wyskakującego ekranu. Nazwa programu to „SAPLMGMM”.
Step 3 - Przejdź do transakcji SE38, wprowadź nazwę programu i kliknij Wyświetl.
Step 4 - Przejdź do Idź do → Właściwości i znajdź pakiet o nazwie tego programu.
Nazwa pakietu to „MGA”.
Step 5- Przejdź do kodu transakcji SMOD, który jest zwykle używany do identyfikacji wyjść klientów. Przejdź do Utilities → Find (lub) możesz bezpośrednio nacisnąć Ctrl + F na kodzie transakcji SMOD.
Step 6 - Po przejściu do ekranu „Znajdź wyjścia” wprowadź nazwę pakietu, którą otrzymaliśmy wcześniej i naciśnij przycisk F8 (Wykonaj).
Powyższe kroki dają następujący wynik wraz z listą wyjść dostępnych w tworzeniu materiału głównego.
Wyjścia użytkownika są używane podczas wyodrębniania, jeśli standardowe ekstraktory SAP nie zapewniają oczekiwanych danych lub wymaganej funkcjonalności, na przykład w zakresie uprawnień lub kontroli czasu. Wyjścia użytkowników są powszechnie używane w modułach Sales and Distribution (SD). SAP zapewnia wiele wyjść w obszarach sprzedaży, transportu, wysyłki i fakturowania. Wyjście użytkownika ma na celu wprowadzenie pewnych zmian, gdy standardowy SAP nie jest w stanie spełnić wszystkich wymagań.
Aby uzyskać dostęp do wyjść dostępnych w każdym obszarze sprzedaży, przejdź do IMG, korzystając z tej ścieżki: IMG → Sprzedaż i dystrybucja → Modyfikacje systemu → Wyjścia użytkowników. Dokumentacja każdego wyjścia w obszarach SD jest dokładnie wyjaśniona.
Na przykład, jeśli chcesz znaleźć wyjścia użytkowników w przetwarzaniu dokumentów sprzedaży (umowa, oferta lub zamówienie sprzedaży), postępuj zgodnie ze ścieżką wymienioną powyżej i kontynuuj rozwijanie węzła Wyjścia użytkowników w Sprzedaż → Wyjścia użytkowników. Kliknij dokumentację ikony, aby zobaczyć wszystkie wyjścia użytkowników dostępne w przetwarzaniu dokumentów sprzedaży.
S.No. | Wyjście użytkownika i opis |
---|---|
1 | USEREXIT_FIELD_MODIFICATION Służy do modyfikowania atrybutów ekranu. |
2 | USEREXIT_SAVE_DOCUMENT Pomaga w wykonywaniu operacji, gdy użytkownik kliknie przycisk Zapisz. |
3 | USEREXIT_SAVE_DOCUMENT_PREPARE Bardzo przydatne do sprawdzania pól wejściowych, umieszczania dowolnej wartości w polu lub wyświetlania wyskakującego okienka użytkownikom i potwierdzania dokumentu. |
4 | USEREXIT_MOVE_FIELD_TO_VBAK Używane, gdy zmiany nagłówka użytkownika są przenoszone do obszaru roboczego nagłówka. |
5 | USEREXIT_MOVE_FIELD_TO_VBAP Używane, gdy zmiany pozycji użytkownika są przenoszone do obszaru roboczego pozycji SAP. |
Wyjście użytkownika służy temu samemu celowi, co wyjście klienta, ale jest dostępne tylko dla modułu SD. Wyjście jest realizowane jako wywołanie modułu funkcyjnego. Wyjścia użytkownika to modyfikacje standardowych programów SAP.
Przykład
REPORT ZUSEREXIT1.
TABLES:
TSTC, TSTCT,
TADIR, TRDIR, TFDIR, ENLFDIR,
MODSAPT, MODACT.
DATA:
JTAB LIKE TADIR OCCURS 0 WITH HEADER LINE,
field1(30),
v_devclass LIKE TADIR-devclass.
PARAMETERS:
P_TCODE LIKE TSTC-tcode OBLIGATORY.
SELECT SINGLE *
FROM TSTC
WHERE tcode EQ P_TCODE.
IF SY-SUBRC EQ 0.
SELECT SINGLE *
FROM TADIR
WHERE pgmid = 'R3TR' AND
object = 'PROG' AND
obj_name = TSTC-pgmna.
MOVE TADIR-devclass TO v_devclass.
IF SY-SUBRC NE 0.
SELECT SINGLE *
FROM TRDIR
WHERE name = TSTC-pgmna.
IF TRDIR-subc EQ 'F'.
SELECT SINGLE *
FROM TFDIR
WHERE pname = TSTC-pgmna.
SELECT SINGLE *
FROM ENLFDIR
WHERE funcname = TFDIR-funcname.
SELECT SINGLE *
FROM TADIR
WHERE pgmid = 'R3TR' AND
object = 'FUGR' AND
obj_name EQ ENLFDIR-area.
MOVE TADIR-devclass TO v_devclass.
ENDIF.
ENDIF.
SELECT *
FROM TADIR
INTO TABLE JTAB
WHERE pgmid = 'R3TR' AND
object = 'SMOD' AND
devclass = v_devclass.
SELECT SINGLE *
FROM TSTCT
WHERE sprsl EQ SY-LANGU AND
tcode EQ P_TCODE.
FORMAT COLOR COL_POSITIVE INTENSIFIED OFF.
WRITE:/(19) 'Transaction Code - ',
20(20) P_TCODE,
45(50) TSTCT-ttext.
SKIP.
IF NOT JTAB[] IS INITIAL.
WRITE:/(95) SY-ULINE.
FORMAT COLOR COL_HEADING INTENSIFIED ON.
WRITE:/1 SY-VLINE,
2 'Exit Name',
21 SY-VLINE ,
22 'Description',
95 SY-VLINE.
WRITE:/(95) SY-ULINE.
LOOP AT JTAB.
SELECT SINGLE * FROM MODSAPT
WHERE sprsl = SY-LANGU AND
name = JTAB-obj_name.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
WRITE:/1 SY-VLINE,
2 JTAB-obj_name HOTSPOT ON,
21 SY-VLINE ,
22 MODSAPT-modtext,
95 SY-VLINE.
ENDLOOP.
WRITE:/(95) SY-ULINE.
DESCRIBE TABLE JTAB.
SKIP.
FORMAT COLOR COL_TOTAL INTENSIFIED ON.
WRITE:/ 'No of Exits:' , SY-TFILL.
ELSE.
FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
WRITE:/(95) 'User Exit doesn’t exist'.
ENDIF.
ELSE.
FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
WRITE:/(95) 'Transaction Code Does Not Exist'.
ENDIF.
AT LINE-SELECTION.
GET CURSOR FIELD field1.
CHECK field1(4) EQ 'JTAB'.
SET PARAMETER ID 'MON' FIELD sy-lisel+1(10).
CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN.
Podczas przetwarzania wprowadź kod transakcji „ME01” i naciśnij przycisk F8 (Wykonaj). Powyższy kod daje następujące dane wyjściowe -
W niektórych przypadkach należy wstępnie zdefiniować funkcje specjalne w aplikacji, aby zwiększyć funkcjonalność różnych aplikacji. Istnieje wiele dodatków do programu Microsoft Excel poprawiających funkcjonalność programu MS Excel. Podobnie SAP ułatwia niektóre predefiniowane funkcje, udostępniającBusiness Add-Ins znane jako BADI.
BADI to technika udoskonalenia, która ułatwia programistom SAP, użytkownikowi lub określonej branży dodanie dodatkowego kodu do istniejącego programu w systemie SAP. Możemy wykorzystać logikę standardową lub niestandardową, aby ulepszyć system SAP. Najpierw należy zdefiniować, a następnie wdrożyć BADI, aby ulepszyć aplikację SAP. Podczas definiowania BADI tworzony jest interfejs. Interfejs BADI jest implementowany przez ten interfejs, który z kolei jest implementowany przez jedną lub więcej klas adapterów.
Technika BADI różni się od innych technik ulepszania na dwa sposoby -
- Technikę wzmocnienia można zastosować tylko raz.
- Ta technika ulepszania może być używana przez wielu klientów jednocześnie.
Możesz także tworzyć filtry BADI, co oznacza, że BADI są definiowane na podstawie przefiltrowanych danych, co nie jest możliwe w przypadku technik ulepszania. Koncepcja BADI została na nowo zdefiniowana w SAP Release 7.0 z następującymi celami:
Udoskonalenie standardowych aplikacji w systemie SAP poprzez dodanie dwóch nowych elementów w języku ABAP, czyli „GET BADI” i „CALL BADI”.
Zapewnia większą elastyczność funkcji, takich jak konteksty i filtry w celu ulepszenia standardowych aplikacji w systemie SAP.
Po utworzeniu BADI zawiera interfejs i inne dodatkowe komponenty, takie jak kody funkcji rozszerzeń menu i ekranu. Tworzenie BADI umożliwia klientom dołączanie własnych ulepszeń do standardowej aplikacji SAP. Rozszerzenia, interfejs i wygenerowane klasy znajdują się w odpowiedniej przestrzeni nazw tworzenia aplikacji.
Dlatego BADI można uznać za technikę ulepszenia, która wykorzystuje obiekty ABAP do tworzenia „predefiniowanych punktów” w komponentach SAP. Te predefiniowane punkty są następnie wdrażane przez indywidualne rozwiązania branżowe, warianty krajowe, partnerów i klientów, aby spełnić ich specyficzne wymagania. Firma SAP faktycznie wprowadziła technikę udoskonalenia BADI w wersji 4.6A, a technika ta została ponownie zaimplementowana w wersji 7.0.
Web Dynpro (WD) dla ABAP to standardowa technologia interfejsu użytkownika SAP opracowana przez SAP AG. Może być używany do tworzenia aplikacji internetowych w środowisku SAP ABAP, które wykorzystuje narzędzia i koncepcje programistyczne SAP. Zapewnia interfejs użytkownika sieci Web typu front-end do bezpośredniego łączenia się z systemami zaplecza SAP R / 3 w celu uzyskania dostępu do danych i funkcji raportowania.
Web Dynpro for ABAP składa się ze środowiska wykonawczego i graficznego środowiska programistycznego z określonymi narzędziami programistycznymi zintegrowanymi z ABAP Workbench (transakcja: SE80).
Architektura Web Dynpro
Poniższa ilustracja przedstawia ogólną architekturę Web Dynpro -
Poniżej znajduje się kilka punktów, o których należy pamiętać w związku z Web Dynpro -
Web Dynpro to model programowania SAP NetWeaver dla interfejsów użytkownika.
Wszystkie aplikacje Web Dynpro mają strukturę zgodną z modelem programowania Model View Controller (MVC).
Model definiuje interfejs do systemu głównego, a aplikacja Web Dynpro może mieć dostęp do danych systemowych.
Widok odpowiada za wyświetlanie danych w przeglądarce internetowej.
Kontroler znajduje się między widokiem a modelem. Kontroler formatuje dane modelu do wyświetlenia w widoku. Przetwarza wpisy użytkownika wprowadzone przez użytkownika i zwraca je do modelu.
Zalety
Web Dynpro oferuje twórcom aplikacji następujące korzyści -
Użycie narzędzi graficznych znacznie zmniejsza nakład pracy związany z wdrożeniem.
Ponowne wykorzystanie i lepsza konserwacja dzięki zastosowaniu komponentów.
Układ i nawigację można łatwo zmienić za pomocą narzędzi Web Dynpro.
Obsługiwana jest dostępność interfejsu użytkownika.
Pełna integracja ze środowiskiem programistycznym ABAP.
Komponent i okno Web Dynpro
Komponent jest globalną jednostką projektu aplikacji Web Dynpro. Utworzenie komponentu Web Dynpro to pierwszy krok w tworzeniu nowej aplikacji Web Dynpro. Po utworzeniu komponent działa jako węzeł na liście obiektów Web Dynpro. Możesz utworzyć dowolną liczbę widoków komponentów w komponencie i złożyć je w dowolnej liczbie odpowiednich okien Web Dynpro.
Co najmniej jedno okno Web Dynpro jest zawarte w każdym komponencie Web Dynpro. Okno Web Dynpro zawiera wszystkie widoki, które są wyświetlane w aplikacji sieciowej typu front-end. Okno jest przetwarzane w edytorach okien ABAP Workbench.
Note
Widok komponentu wyświetla wszystkie szczegóły administracyjne aplikacji, w tym opis, nazwisko osoby, która ją utworzyła, datę utworzenia i przypisany pakiet programistyczny.
Aplikacja Web Dynpro jest niezależnym obiektem na liście obiektów ABAP Workbench. Interakcję między oknem a aplikacją tworzy widok interfejsu danego okna.