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.



