Werteprüfung von Merkmalen
Siehe Kategorie: Klassensystem.
Siehe Klassensystem.
Im OSS-Hinweis 1155969 "Funktionsbaustein zur Werteprüfung" ist sehr gut beschrieben, wie man eine Prüfung für ein Klassenmerkmal einrichtet mit drei verschiedenen Funktionen
- Prüfung auf Existenz eines Merkmalwertes
- Ändern des dargestellten Merkmalwertes
- Selektion eines Merkmalwertes über eine F4-Wertehilfe
Transaktion CT04 Merkmalverwaltung
Mit der Transaktion CT04 können die Eigenschaften eines Merkmals verwaltet werden.
Hier heißt das Merkmal Z_SUPP_999_NUMBER, wobei es um die Lieferantennummer geht.
Anforderungen
- Es sollen als Merkmalswerte alle Lieferanten von der Tabelle LFA1-LIFNR möglich sein. Nach Eingabe einer Lieferantennummer soll diese Nummer auf Vorhandensein geprüft werden
- Im Feld soll statt der Lieferantennummer die Lieferantenbezeichnung LFA1-NAME1 dargestellt werden. Gespeichert jedoch weiterhin der Wert aus dem Feld LFA1-LIFNR
- Bei der F4-Wertehilfe sollen alle Lieferanten mit der Kurzbezeichnung dargestellt werden, wo man eine Lieferanten auswählt. Dargestellt soll wieder das Feld LFA1-NAME1
Definition Eigenschaften Merkmal
- Das Merkmal Lieferant ist zeichenartig
- umfasst 10 Stellen
- hat einen eindeutigen Wert.
In der Merkmalverwaltung klickt man nun auf den Reiter "Werte".
Drei Funktionsbausteine Werteprüfungen
Wie man die drei obigen Anforderungen realisiert ist einerseits im OSS-Hinweis beschrieben. Es sind hierzu 3 Funktionsbausteine zu erstellen.
Zunächst klickt man auf "Andere Werteprüfung" und wählt im Popupdialog "Funktionsbaustein" aus.
Nun erscheint ein Feld "Funktion" mit der Überschrift "Werteprüfung über Funktionsbaustein".
Hier wird nun ein Z-Funktionsbausteinname eingetragen. In diesem Fall Z_CHECK_SUPPLIER. Dieser Funktionsbaustein realisiert die Prüfung des eingegebenen Lieferanten.
Setzt man den Cursor in das Feld "Funktion" und öffnet mit F1 die Feldhilfe, so erscheint auch eine Beschreibung, wie man die 3 Funktionsbausteine benennen muß
- Funktionsbaustein zur Werteprüfung = Z<NAME>
- Funktionsbaustein zur F4-Wertehilfe = Z<NAME>_F4
- Funktionsbaustein zur Änderung des dargestellten (oft sprachabhängigen) Merkmalwertes = Z<NAME>_DC
Funktionsbaustein Z_CHECK_SUPPLIER (Werteprüfung)
- Wird der eingegebene Wert nicht gefunden, so wird die Ausnahme NOT_FOUND ausgelöst. Der eingegebene Merkmalswert VALUE wird im Exportwert VALUE_EX wieder zurückgeben. Ggf. müssen hier führende Nullen ergänzt werden.
FUNCTION Z_CHECK_SUPPLIER. *"---------------------------------------------------------------------- *"*"Lokale Schnittstelle: *" IMPORTING *" REFERENCE(CHARACT_NO) TYPE ATINN *" REFERENCE(CHARACT) TYPE ATNAM *" REFERENCE(VALUE) TYPE ATWRT *" EXPORTING *" REFERENCE(VALUE_EX) TYPE ATWRT *" EXCEPTIONS *" NOT_FOUND *"---------------------------------------------------------------------- *&---------------------------------------------------------------------* *& Eberstein Consulting *& René Eberstein *& Paket = ZRD, Funktionsgruppe = ZRD1 *& siehe auch OSS-Hinweis 1155969 - Funktionsbaustein zur Werteprüfung *& Werteprüfung zur Lieferantennummer in der Transaktion CT04 = Merkmalverwaltung *& (Merkmal = Z_SUPP_999_NUMBER) *& Im Reiter "Werte" steht ein Feld "Funktion". Hier wird der Funktionsbaustein *& Z_CHECK_SUPPLIER eingetragen. Nach dem Funktionsbaustein Z_CHECK_SUPPLIER *& wird der implizit der Funktionsbaustein Z_CHECK_SUPPLIER_DC aufgerufen *& (durch das "_DC" am Ende. Hier wird der Name des Lieferanten zurückgegeben *& (im Exportparameter DESCRIPTION) *& Dieser Name wird angezeigt als Merkmalswert. Fortgeschrieben wird weiterhin *& die Lieferantennummer. *& Wenn die Wertehilfe aufgerufen wird, wird der Funktionsbaustein Z_CHECK_SUPPLIER_F4 *& aufgerufen. Im SAP-UI erscheint ein Popup, wo der Lieferant gewählt wird und *& in das Merkmalsfeld zurückgeschrieben wird. *&---------------------------------------------------------------------* DATA: lv_value TYPE atwrt. Data: lv_lifnr type lfa1-lifnr. lv_lifnr = value. shift lv_lifnr RIGHT DELETING TRAILING space. overlay lv_lifnr with '0000000000'. * Prüfe Lieferantennummer in Returnparameter, sonst Ausnahme Select single lifnr into VALUE_EX from lfa1 where lifnr = lv_lifnr. IF NOT sy-subrc IS INITIAL. RAISE not_found. ENDIF. ENDFUNCTION.
Funktionsbaustein Z_CHECK_SUPPLIER_F4 (F4-Wertehilfe)
- Eine Tabellen mit den möglichen Merkmalswerten wird zurückgeliefert in der internen Tabelle VALUES.
FUNCTION Z_CHECK_SUPPLIER_F4. *"---------------------------------------------------------------------- *"*"Lokale Schnittstelle: *" IMPORTING *" REFERENCE(CHARACT_NO) TYPE ATINN *" REFERENCE(CHARACT) TYPE ATNAM *" REFERENCE(DISPLAY) TYPE C *" REFERENCE(ADDITIONAL_VALUES) TYPE ATSON *" REFERENCE(MULTIPLE_VALUES) TYPE ATLIS *" REFERENCE(LANGUAGE) TYPE SY-LANGU *" REFERENCE(DISPLAY_WITH_LANGUAGE) TYPE C *" EXPORTING *" REFERENCE(VALUE_EX) TYPE ATWRT *" TABLES *" VALUES STRUCTURE RCTVALUES *" EXCEPTIONS *" CANCELLED_BY_USER *"---------------------------------------------------------------------- *&---------------------------------------------------------------------* *& Eberstein Consulting *& René Eberstein *& Paket = ZRD, Funktionsgruppe ZRD1 *&---------------------------------------------------------------------* DATA: lt_values TYPE TABLE OF rctvalues, wa_values TYPE rctvalues, lt_return_tab TYPE TABLE OF ddshretval, wa_return_tab TYPE ddshretval. DATA: lt_mark_tab TYPE ddshmarks. DATA: lv_mark LIKE LINE OF lt_mark_tab. * Read Suppliers with description Select lifnr name1 into table lt_values from lfa1. *====================================================================== * Web UI * In WebDynpro / Web UI it is currently not possible to have an own * Popup/Dnypro/Window, instead a table with the allowed values needs * to be returned. So the logic is completly different and very limited. * The popup to select values will be created by classification WDC * after returning from this function module *====================================================================== IF cl_web_dynpro=>is_active = 'X'. values[] = lt_values[]. RETURN. ENDIF. *====================================================================== * ABAP UI * In we create a list of valid values and use basis function module * to create popup. We return the selected value(s), not a list of valid * values like in WebDynpro *====================================================================== IF multiple_values EQ 'X'. LOOP AT values INTO wa_values. READ TABLE lt_values WITH KEY value = wa_values-value TRANSPORTING NO FIELDS. IF sy-subrc IS INITIAL. lv_mark = sy-tabix. APPEND lv_mark TO lt_mark_tab. ENDIF. ENDLOOP. ENDIF. * display the selected values for the input help in an appropriate * format CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING ddic_structure = 'RCTVALUES' "structure of value_tab retfield = 'VALUE' "name of return field * pvalkey = ' ' * dynpprog = ' ' * dynpnr = ' ' * dynprofield = ' ' * stepl = 0 window_title = 'Please choose a value' "name of list * value = ' ' value_org = 'S' "type of value delivery multiple_choice = multiple_values display = display * callback_program = ' ' * callback_form = ' ' mark_tab = lt_mark_tab TABLES value_tab = lt_values "table with selected values * field_tab = return_tab = lt_return_tab "table with chosen value * dynpfld_mapping = EXCEPTIONS parameter_error = 1 no_values_found = 2 OTHERS = 3. * raise an error message if the operation was not successfull IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ELSE. * check if a value was chosen IF NOT lt_return_tab IS INITIAL. * write the chosen value into the output table LOOP AT lt_return_tab INTO wa_return_tab. wa_values-value = wa_return_tab-fieldval. * define a correct status for the chosen value wa_values-status = 'I'. APPEND wa_values TO values. ENDLOOP. * asume all values that are not inserted should be deleted LOOP AT values WHERE status IS INITIAL. values-status = 'D'. MODIFY values. ENDLOOP. ENDIF. ENDIF. ENDFUNCTION.
Funktionsbaustein Z_CHECK_SUPPLIER_DC (Änderung Beschreibung)
- Das Feld "DESCRIPTION" wird gefüllt. Der eigentliche Merkmalswert VALUE (die Lieferantennummer) bleibt erhalten.
FUNCTION Z_CHECK_SUPPLIER_DC. *"---------------------------------------------------------------------- *"*"Lokale Schnittstelle: *" IMPORTING *" REFERENCE(CHARACT_NO) TYPE ATINN *" REFERENCE(CHARACT) TYPE ATNAM *" REFERENCE(VALUE) TYPE ATWRT *" REFERENCE(LANGUAGE) TYPE SY-LANGU *" EXPORTING *" REFERENCE(DESCRIPTION) TYPE ATWTB *" EXCEPTIONS *" NOT_FOUND *"---------------------------------------------------------------------- *&---------------------------------------------------------------------* *& Eberstein Consulting *& René Eberstein *& Paket = ZRD, Funktionsgruppe = ZRD1 *& siehe auch OSS-Hinweis 1155969 - Funktionsbaustein zur Werteprüfung *& Werteprüfung zur Lieferantennummer in der Transaktion CT04 = Merkmalverwaltung *& (Merkmal = Z_SUPP_999_NUMBER) *&---------------------------------------------------------------------* * define a local import variable for the function module * 'CTHE_CHECK_TABLE_VALUE_EXISTS' DATA: lv_value TYPE atwrt. Select single name1 into description from lfa1 where lifnr = value. ** convert the value of the assigned character via an appropriate check ** table into a standardized format * CALL FUNCTION 'CTHE_CHECK_TABLE_VALUE_EXISTS' * EXPORTING * check_table = 'MAKT' "name of check table * value = value "assigned character value * IMPORTING * value_exp = lv_value "converted character value * EXCEPTIONS * value_not_found = 1 * OTHERS = 2. * ** get the language dependent description of the assigned character ** value via the assigned language key * SELECT SINGLE maktx FROM makt INTO description * WHERE matnr = lv_value AND spras = language. * ** raise an error message if no language dependent description exists * IF NOT sy-subrc IS INITIAL. * RAISE not_found. * ENDIF. ENDFUNCTION.