Wykorzystanie TYPE-POOLS w Smartforms

Grupy typów są prostą metodą definiowania i wielokrotnego wykorzystywania typów danych. Są szeroko wykorzystywane w systemie SAP ERP m.i. do definiowania interfejsów funkcji np. funkcje biblioteki ALV. Ponadto grupy typów definiuje się znacznie szybciej niż domeny i elementy danych. Z jakiegoś powodu jednak SAP Smartform uniemożliwia wykorzystywanie grup typów do definiowania interfejsów formularzy, mimo iż smartform generuje zwyczajny moduł funkcyjny – zobacz też wątek na SDN Forum: Smartform error: not a pre-defined type or a type from a type group (ECC 6). Przeczytaj jak “zmusić” Smartform do wykorzystania grup typów.

Przede wszystkim należy zdefiniować grupę w słowniku danych przy pomocy transakcji SE11. Powiedzmy, że grupa będzie się nazywała ZSSF. Wszystkie typy zdefiniowane w tej grupie muszą być zatem poprzedzone prefiksem ZSSF_.

Następnie należy dodać następujący kod w części Global definitions formularza, na zakładce Types:

TYPE-POOLS: ZSSF.

Taka konstrukcja nie jest do końca poprawna i SAP będzie generował komunikat błędu Statement in context not permitted podczas sprawdzania czy aktywowania formularza. Jeśli to jest jedyny błąd nie przejmujmy się nim na razie. Teraz można już opracować cały formularz i zdefiniować jego interfejs przy pomocy typów z grupy ZSSF.

Kiedy formularz jest gotowy można go aktywować mimo powyższego błędu opcją menu Utilities->Activate without check. Zwróć uwagę na status formularza Active Unchecked. Warto też sprawdzić, że funkcja wygenerowana z formularza jest poprawna składniowo. Teraz można już przetestować drukowanie przy pomocy formularza. Ważne jest, aby dokładnie sprawdzić działanie formularza przed jego przesłaniem do systemu produkcyjnego.

Status Active Unchecked uniemożliwia zwolnienie transportu z formularzem. Zatem musimy wykonać jeszcze jedną sztuczkę. Uruchom transakcję SE24 i wyświetl klasę CL_SSF_FB_SMART_FORM. Przejdź do kodu źródłowego metody CHECK i ustaw break point na początku wyrażenia IF znajdującego się na końcu metody:

if check_object->error_table[] is not initial.
   raise exception type cx_ssf_fb_check
         exporting textid       = cx_ssf_fb_check=>check_error
                   error_table  = check_object->error_table
                   check_object = check_object.
 endif.

Teraz przejdź do transakcji SMARTFORMS i aktywuj formularz. Przetwarzanie zatrzyma się na break point’cie. Sprawdź czy tablica check_object->error_table[] zawiera tylko błąd Statement in context not permitted. Jeśli tak, wyczyść tę tablicę i kontynuuj przetwarzanie. Formularz zostanie aktywowany – zwróć uwagę na status formularza Active. Teraz można zwolnić transport z formularzem.

Wykorzystałem tę metodą podczas niedawnego upgrade’u SAP ERP 5.0 -> 6.0, który ma właśnie startować produktywnie. Metoda działa i oszczędza kłopotliwego przenoszenia definicji typów do domen, elementów danych i struktur słownika danych.

Zostaw komentarz