Das Anlegen einer Klassifikation geschieht mit dem BAPI_OBJCL_CHANGE. Das größte Problem ist es dabei, herauszufinden wie sich der Objektschlüssel (objectkey) zusammensetzt und welche Tabelle (objecttable) gefüllt werden muss.
Folgende Vorgehensweise kann angewandt werden:
Klassifikation 'von Hand' in der jeweiligen Transaktion anlegen, beim gewählten Beispiel geschieht das in der Transaktion IW52 (Ändern Kundendienstmeldung), auf dem Registerblatt 'Positionen' die Position markieren und die UNTERE 'LUPE' klicken (Detailansicht). Im sich darauf öffnenden Fenster kann die Klassifikation angelegt werden [der Modulberater weiß, wie jeweils die Klassifikation anzulegen ist :-))].
Nach dem Anlegen einer Klassifikation mit dem Klassifikationsnamen (hier im Beispiel 'S_02_BELNR') im Feld ATNAM der Tabelle CABN den soeben angelegten Eintrag suchen. Aus dem gefundenen Datensatz das Feld ATINN in der Tabelle AUSP suchen (die maximale Trefferzahl auf 1 begrenzen!). Der so gefundene Datensatz enthält im Feld OBJEK den Objektschlüssel. Im Beispiel des Coding wird z.B. die Position 0010 (so angelegt) in der Datenbank mit '0001' weggeschrieben!
Die Klassennummer entnimmt man beim Anlegen den angebotenen Klassen, hier 'S_MELD_MIG'.
Die Tabelle (objecttable) findet man über das Customizing, Transaktion SPRO, Anwendungsübergreifende Komponenten, Klassensystem, Klassen, Objektschlüssel pflegen oder Objekttypen und Klassenarten pflegen. Hier also QMFE [der Modulberater sollte das aber auch {auswendig} wissen].
* * Coded by Thorsten Neubüser - www.4ap.de *
*<SNIP>
* für BAPI_OBJCL_CHANGE DATA: * export objectkey LIKE bapi1003_key-object, " Objektschlüssel, * konkateniert objecttable LIKE bapi1003_key-objecttable, " Objekttabelle classnum LIKE bapi1003_key-classnum, " Klassennummer classtype LIKE bapi1003_key-classtype, " Klassenart status LIKE bapi1003_key-status, " '1' Status der * Klassifizierung standardclass LIKE bapi1003_key-stdclass, " Kennzeichen: * Standardklasse changenumber LIKE bapi1003_key-changenumber, " Änderungsnummer keydate LIKE bapi1003_key-keydate, " SY-DATUM Stichtag no_default_values LIKE bapi1003_key-flag, " SPACE Vorschlagswerte * import classif_status LIKE bapi1003_key-status, " Status der * Klassifizierung * tables * neue Bewertungen NUM,DATE,TIME numnew LIKE bapi1003_alloc_values_num OCCURS 0 WITH HEADER LINE, * neue Bewertungen CHAR,BOOL charnew LIKE bapi1003_alloc_values_char OCCURS 0 WITH HEADER LINE, * neue Bewertungen CURR currnew LIKE bapi1003_alloc_values_curr OCCURS 0 WITH HEADER LINE, * Fehlermeldungen return_bapi_objcl_change LIKE bapiret2 OCCURS 0 WITH HEADER LINE.
*<SNIP>
* KLASSIFIKATION PERFORM prepare_data_classification USING fname. PERFORM bapi_objcl_change USING fname. " Klassifikation
*<SNIP>
*---------------------------------------------------------------------* * Form prepare_data_CLASSIFICATION *---------------------------------------------------------------------* FORM prepare_data_classification USING objectkey.
* Export *OBJECTKEY LIKE BAPI1003_KEY-OBJECT Objektschlüssel, *konkateniert *OBJECTTABLE LIKE BAPI1003_KEY-OBJECTTABLE Objekttabelle *CLASSNUM LIKE BAPI1003_KEY-CLASSNUM Klassennummer *CLASSTYPE LIKE BAPI1003_KEY-CLASSTYPE Klassenart *STATUS LIKE BAPI1003_KEY-STATUS '1' Status der * Klassifizierung *STANDARDCLASS LIKE BAPI1003_KEY-STDCLASS * Kennzeichen: Standardklasse *CHANGENUMBER LIKE BAPI1003_KEY-CHANGENUMBER Änderungsnummer *KEYDATE LIKE BAPI1003_KEY-KEYDATE SY-DATUM Stichtag *NO_DEFAULT_VALUES LIKE BAPI1003_KEY-FLAG SPACE Vorschlagswerte
DATA: help_objkey(16). help_objkey(12) = objectkey. help_objkey+12(4) = '0001'. MOVE help_objkey TO objectkey. objecttable = 'QMFE'. " Name der Datenbanktabelle d. Objektes classtype = '015'. " Fix für Meldungsposition classnum = 'S_MELD_MIG'. status = ''. standardclass = ''. keydate = sy-datum.
* Import * CLASSIF_STATUS LIKE BAPI1003_KEY-STATUS Status der * Klassifizierung
* Tabellen *neue Bewertungen NUM,DATE,TIME *ALLOCVALUESNUMNEW LIKE BAPI1003_ALLOC_VALUES_NUM ** *CHARACT ATNAM CHAR 30 0 Merkmalname *VALUE_FROM ATFLV FLTP 16 16 interner Fließkomma-Wert von *VALUE_TO ATFLB FLTP 16 16 interner Fließkomma-Wert bis *VALUE_RELATION ATCOD CHAR 1 0 Code für Wertebeziehung *UNIT_FROM MEINS UNIT 3 0 Basismengeneinheit *UNIT_TO MEINS UNIT 3 0 Basismengeneinheit *UNIT_FROM_ISO MEINS_ISO CHAR 3 0 * Basismengeneinheit im ISO-Code *UNIT_TO_ISO MEINS_ISO CHAR 3 0 Basismengeneinheit im *ISO-Code *INHERITED FLINH CHAR 1 0 Kennzeichen: Merkmal ererbt *INSTANCE ATZIS NUMC 3 0 Instanzenzähler *CHARACT_DESCR ATBEZ CHAR 30 0 Merkmalbezeichnung
* neue Bewertungen CHAR,BOOL *ALLOCVALUESCHARNEW LIKE BAPI1003_ALLOC_VALUES_CHAR ** *CHARACT ATNAM CHAR 30 0 Merkmalname *VALUE_CHAR ATWRT CHAR 30 0 Merkmalwert *INHERITED FLINH CHAR 1 0 Kennzeichen: Merkmal ererbt *INSTANCE ATZIS NUMC 3 0 Instanzenzähler *VALUE_NEUTRAL ATWRT CHAR 30 0 Merkmalwert *CHARACT_DESCR ATBEZ CHAR 30 0 Merkmalbezeichnung
* neue Bewertungen CURR *ALLOCVALUESCURRNEW LIKE BAPI1003_ALLOC_VALUES_CURR ** *CHARACT ATNAM CHAR 30 0 Merkmalname *VALUE_FROM ATFLV FLTP 16 16 interner Fließkomma-Wert von *VALUE_TO ATFLB FLTP 16 16 interner Fließkomma-Wert bis *VALUE_RELATION ATCOD CHAR 1 0 Code für Wertebeziehung *CURRENCY_FROM WAERS CUKY 5 0 Währungsschlüssel *CURRENCY_TO WAERS CUKY 5 0 Währungsschlüssel *CURRENCY_FROM_ISO ISOCD CHAR 3 0 Iso-Code Währung *CURRENCY_TO_ISO ISOCD CHAR 3 0 Iso-Code Währung *INHERITED FLINH CHAR 1 0 Kennzeichen: Merkmal ererbt *INSTANCE ATZIS NUMC 3 0 Instanzenzähler *CHARACT_DESCR ATBEZ CHAR 30 0 Merkmalbezeichnung
CLEAR: charnew. REFRESH: charnew. charnew-charact = 'S_02_SCHADKZ'. " Schadenskennziffer charnew-value_char = split_tab-kziff. " Merkmalwert APPEND charnew. charnew-charact = 'S_02_KOSTL'. " Merkmalname Kostenstelle charnew-value_char = split_tab-kostl. " Merkmalwert APPEND charnew. charnew-charact = 'S_02_BELNR'. " Merkmalname Belegnummer charnew-value_char = split_tab-belnr. " Merkmalwert APPEND charnew. charnew-charact = 'S_02_WERT'. " Merkmalname charnew-value_char = split_tab-wert. " Merkmalwert Wert APPEND charnew.
ENDFORM. " prepare_data_CLASSIFICATION
*---------------------------------------------------------------------* * Form BAPI_OBJCL_CHANGE *---------------------------------------------------------------------* FORM bapi_objcl_change USING fname. * wir sind im loop at split_tab.
MOVE fname TO objectkey. * analog ZS3KLASSIFIZIERUNG CALL FUNCTION 'BAPI_OBJCL_CHANGE' EXPORTING objectkey = objectkey objecttable = objecttable classnum = classnum classtype = classtype status = status standardclass = standardclass changenumber = changenumber keydate = keydate no_default_values = no_default_values IMPORTING classif_status = classif_status TABLES allocvaluesnumnew = numnew allocvaluescharnew = charnew allocvaluescurrnew = currnew return = return_bapi_objcl_change . " PUNKT !! *Wenn das BAPI fehlerfrei abläuft, enthält die Tabelle Return keine *Meldung des Typs 'E'. *Zuordnung wurde angelegt: Meldung CL735 *Zuordnung wurde geändert: Meldung CL737 *Zuordnung wurde nicht geändert: Meldung CL738 IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ELSE. * alles wird gut *Dieses BAPI führt keine Änderung auf der Datenbank durch, dazu muß *anschließend das BAPI BapiService.TransactionCommit aufgerufen werden! PERFORM bapi_commit USING 'CLAF_CLASSIFICATION_OF_OBJECTS'. ENDIF. ENDFORM. " BAPI_OBJCL_CHANGE
*---------------------------------------------------------------------* * Form bapi_commit *---------------------------------------------------------------------* FORM bapi_commit USING aufrufer. DATA: bapi_return TYPE bapiret2 OCCURS 0 WITH HEADER LINE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X' IMPORTING return = bapi_return. * save_subrc = sy-subrc. IF NOT bapi_return[] IS INITIAL. LOOP AT bapi_return. WRITE: / bapi_return-message. ENDLOOP. ELSE. " not bapi_return[] is initial ** Import * EQUIPMENT LIKE BAPI_ITOB_PARMS-EQUIPMENT, * DATA_GENERAL_EXP LIKE BAPI_ITOB, * DATA_SPECIFIC_EXP LIKE BAPI_ITOB_EQ_ONLY, * RETURN LIKE BAPIRET2, CASE aufrufer. * WHEN 'BAPI_EQUI_CREATE'. * WRITE: / * 'Equipment erfolgreich angelegt:'(011), equipment. WHEN 'CLAF_CLASSIFICATION_OF_OBJECTS'. WRITE: / 'Klassifikation erfolgreich angelegt:'(014), objectkey. ENDCASE. ENDIF. " not bapi_return[] is initial ENDFORM. " bapi_commit
|