Zugriff auf Klassifizierungssystem in ABAP

Getting started ... Alles für einen gelungenen Start.
15 Beiträge • Seite 1 von 1
15 Beiträge Seite 1 von 1

Zugriff auf Klassifizierungssystem in ABAP

Beitrag von danielandross (ForumUser / 11 / 0 / 0 ) »
Hallo,
ich möchte auf die Daten eines Materials zugreifen, das ich mit dem Klassifikationssystem mit eigendefinierten Merkmalen beschrieben habe. Im SDN habe ich erfahren, dass man hierzu die BAPI BAPI_OBJCL_GETDETAIL verwendet. Leider ist mir nicht klar wie man die benötigten Parameter hierzu bekommt. Der Aufruf müsste so aussehen:
CALL FUNCTION 'BAPI_OBJCL_GETDETAIL_KEY'
EXPORTING
CLOBJECTKEY =
CLASSNUM =
" KEYDATE = SY-DATUM
" LANGUAGE = SY-LANGU
" IMPORTING
" STATUS =
" STANDARDCLASS =
TABLES
ALLOCVALUESNUM =
ALLOCVALUESCHAR =
ALLOCVALUESCURR =
RETURN = .

Weiß jemand Rat? Oder noch besser kann mir jemand einen funktionierenden copeschnipsel geben mit dem ich arbeiten kann?

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Beitrag von uh (Specialist / 158 / 0 / 1 ) »
objectkey = mara-matnr
objecttable = 'MARA'
classnum = 'Name deiner Klasse'
classtype = '001' "Wenn du es richtig gemacht hast. Sonst deine Nummer..

Grüße

uh

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
uh hat geschrieben:objectkey = mara-matnr
objecttable = 'MARA'
classnum = 'Name deiner Klasse'
classtype = '001' "Wenn du es richtig gemacht hast. Sonst deine Nummer..

Grüße

uh
tut mir leid, wenn ich hier eingreifen muss...

Die Antwort von uh ist zwar richtig, aber eben nur dann, wenn es sich um eine Materialklasse handelt, die keine Mehrfachbewertungen mit mehreren Klassen erlaubt.
Sonst wird üblicher Weise die Objektnummer via Tabelle INOB gebildet.
Daher müsste man sich korrekter Weise den Objektschlüssel über den BAPI BAPI_OBJCL_GET_KEY_FROM_OBJECT bilden lassen, der dann aber auch für alle Klassifizierungsobjekte genutzt werden kann.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von uh (Specialist / 158 / 0 / 1 ) »
ereglam hat geschrieben:
uh hat geschrieben:objectkey = mara-matnr
objecttable = 'MARA'
classnum = 'Name deiner Klasse'
classtype = '001' "Wenn du es richtig gemacht hast. Sonst deine Nummer..

Grüße

uh
tut mir leid, wenn ich hier eingreifen muss...[..]
Darfst du gerne aber bei
ereglam hat geschrieben:BAPI_OBJCL_GET_KEY_FROM_OBJECT
muss ich eingreifen. Der FuBa nennt sich: BAPI_OBJCL_GET_KEY_OF_OBJECT 8)

Grüße

UH

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
uh hat geschrieben:
ereglam hat geschrieben:
uh hat geschrieben:objectkey = mara-matnr
objecttable = 'MARA'
classnum = 'Name deiner Klasse'
classtype = '001' "Wenn du es richtig gemacht hast. Sonst deine Nummer..

Grüße

uh
tut mir leid, wenn ich hier eingreifen muss...[..]
Darfst du gerne aber bei
ereglam hat geschrieben:BAPI_OBJCL_GET_KEY_FROM_OBJECT
muss ich eingreifen. Der FuBa nennt sich: BAPI_OBJCL_GET_KEY_OF_OBJECT 8)

Grüße

UH
:shock: :oops:
mea culpa...
Öhm, ja, klar, hast recht, danke. Richtig abschreiben hilft...
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von danielandross (ForumUser / 11 / 0 / 0 ) »
Hallo zusammen,
danke für eure Unterstützung.
Wenn ich der BAPI jetzt die MATNR als Objectkey mitgebe bekomme ich eine debugger meldung wegen einem Typkonflikt an dieser Stelle:

Code: Alles auswählen.

start-of-selection.
SELECT
MATNR
FROM mara into table itab WHERE matnr in material.
end-of-selection.


loop at itab.
Data:
myStatus(20) type c,
mySTANDARDCLASS(20) type c.

CALL FUNCTION 'BAPI_OBJCL_GETDETAIL_KEY'
  EXPORTING
    CLOBJECTKEY           = itab-MATNR
    CLASSNUM              = 'FARBIGE_UNTERLAGEN'
*   KEYDATE               = SY-DATUM
*   LANGUAGE              = SY-LANGU
 IMPORTING
   STATUS                = myStatus
   STANDARDCLASS         = mySTANDARDCLASS.
*  TABLES
*    ALLOCVALUESNUM        =
*    ALLOCVALUESCHAR       =
*    ALLOCVALUESCURR       =
*    RETURN                =.
endloop.
Also ich trage alle MATNR aus mara in eine interne tabelle ein. Dann rufe ich die bapi in ner schleife mit alle MATNRs auf. Muss ich das noch irgendwie casten oder wo ist sonst der Fehler?
danke euch.[/code]

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
danielandross hat geschrieben:Hallo zusammen,
danke für eure Unterstützung.
Wenn ich der BAPI jetzt die MATNR als Objectkey mitgebe bekomme ich eine debugger meldung wegen einem Typkonflikt an dieser Stelle:

Code: Alles auswählen.

start-of-selection.
SELECT
MATNR
FROM mara into table itab WHERE matnr in material.
end-of-selection.


loop at itab.
Data:
myStatus(20) type c,
mySTANDARDCLASS(20) type c.

CALL FUNCTION 'BAPI_OBJCL_GETDETAIL_KEY'
  EXPORTING
    CLOBJECTKEY           = itab-MATNR
    CLASSNUM              = 'FARBIGE_UNTERLAGEN'
*   KEYDATE               = SY-DATUM
*   LANGUAGE              = SY-LANGU
 IMPORTING
   STATUS                = myStatus
   STANDARDCLASS         = mySTANDARDCLASS.
*  TABLES
*    ALLOCVALUESNUM        =
*    ALLOCVALUESCHAR       =
*    ALLOCVALUESCURR       =
*    RETURN                =.
endloop.
Also ich trage alle MATNR aus mara in eine interne tabelle ein. Dann rufe ich die bapi in ner schleife mit alle MATNRs auf. Muss ich das noch irgendwie casten oder wo ist sonst der Fehler?
danke euch.[/code]
Die Fehlermeldung besagt doch, was der Fehler ist.

Im Funktionsbaustein wird als Aktualparameter ein Feld vom Typ BAPI1003_KEY-OBJECT_GUID erwartet, aber übergeben tust Du ein Feld vom Typ MATNR.
Ein einfacher Trick wäre z.B. das Feld in Deiner ITAB mit dem gewünschten Typ zu typisieren oder noch ein zweites Feld mit dem gewünschten Typ anzulegen, wenn Du später die MATNR noch als solches übergeben musst.

Code: Alles auswählen.

TYPES:
  BEGIN OF ts_matnr,
    matnr TYPE matnr,
    objcl TYPE cuobj, "Typ hinter BAPI1003_KEY-OBJECT_GUID
  END   OF ts_matnr.
DATA:
  gt_matnr TYPE STANDARD TABLE OF ts_matnr WITH DEFAULT KEY,
  gs_amra TYPE mara. "für SELECT-OPTIONS

SELECT-OPTIONS:
  pr_matnr FOR gs_mara-matnr.

START-OF-SELECTION.
SELECT matnr
       matnr AS objct "Zusatz AS notwendig, wenn mit INTO CORRESPONDING verwendet wird
       FROM mara 
       INTO TABLE gt_matnr WHERE matnr IN pr_matnr.

END-OF-SELECTION.
LOOP AT gt_matnr.
* Deklarationen gehören alle zusammen, meist im TOP-Inlcude
Data:
myStatus(20) type c,
mySTANDARDCLASS(20) type c.

CALL FUNCTION 'BAPI_OBJCL_GETDETAIL_KEY'
  EXPORTING
    CLOBJECTKEY           = gt_matnr-objct "hat Typ OBJCT <=> BAPI1003_KEY-OBJECT_GUID
    CLASSNUM              = 'FARBIGE_UNTERLAGEN'
*   KEYDATE               = SY-DATUM
*   LANGUAGE              = SY-LANGU
 IMPORTING
   STATUS                = myStatus
   STANDARDCLASS         = mySTANDARDCLASS.
*  TABLES
*    ALLOCVALUESNUM        =
*    ALLOCVALUESCHAR       =
*    ALLOCVALUESCURR       =
*    RETURN                =.
ENDLOOP.

Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von danielandross (ForumUser / 11 / 0 / 0 ) »
Hallo,
danke für den code.

Code: Alles auswählen.

SELECT matnr
       matnr AS objct "Zusatz AS notwendig, wenn mit INTO CORRESPONDING verwendet wird
       FROM mara
       INTO TABLE gt_matnr WHERE matnr IN pr_matnr.
Da ist wohl noch ein Fehler im Select, weil jedesmal wenn gt_matnr gelesen werden soll erhalte ich die meldung dass die kopfzeile fehlt. Soweit ich weiß bedeutet das, dass die tabelle leer ist?

edit: Ich habe schon versucht
tables: mara.
einzufügen. Das ist aber auch nicht das Problem. So wie ich das sehe scheint der Select in Ordnung zu sein. Könnt ihr einen Fehler finden?

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
danielandross hat geschrieben:Hallo,
danke für den code.

Code: Alles auswählen.

SELECT matnr
       matnr AS objct "Zusatz AS notwendig, wenn mit INTO CORRESPONDING verwendet wird
       FROM mara
       INTO TABLE gt_matnr WHERE matnr IN pr_matnr.
Da ist wohl noch ein Fehler im Select, weil jedesmal wenn gt_matnr gelesen werden soll erhalte ich die meldung dass die kopfzeile fehlt. Soweit ich weiß bedeutet das, dass die tabelle leer ist?

edit: Ich habe schon versucht
tables: mara.
einzufügen. Das ist aber auch nicht das Problem. So wie ich das sehe scheint der Select in Ordnung zu sein. Könnt ihr einen Fehler finden?
entschuldige bitte. War mein Fehler.
Du benutzt wahrscheinlich noch die 'alte' Form der Tabellendefinition mit OCCURS.

Mit meinem Beispiel benötigt Du noch einen Arbeitsbereich:

Code: Alles auswählen.

DATA:
  gt_matnr TYPE STANDARD TABLE OF ts_matnr WITH DEFAULT KEY,
  gs_matnr LIKE LINE OF gt_matnr,
  gs_mara  TYPE mara. "für SELECT-OPTIONS
und im LOOP muss der Arbeitsbereich auch explizit benutzt werden:

Code: Alles auswählen.

LOOP AT gt_matnr INTO gs_matnr.
* Deklarationen gehören alle zusammen, meist im TOP-Inlcude
Data:
myStatus(20) type c,
mySTANDARDCLASS(20) type c.

CALL FUNCTION 'BAPI_OBJCL_GETDETAIL_KEY'
  EXPORTING
*    CLOBJECTKEY           = gt_matnr-objct "nicht Tabelle, sondern Arbeitsbereich
    CLOBJECTKEY           = gs_matnr-objct "hat Typ OBJCT <=> BAPI1003_KEY-OBJECT_GUID
    CLASSNUM              = 'FARBIGE_UNTERLAGEN'
*   KEYDATE               = SY-DATUM
*   LANGUAGE              = SY-LANGU
 IMPORTING
   STATUS                = myStatus
   STANDARDCLASS         = mySTANDARDCLASS.
*  TABLES
*    ALLOCVALUESNUM        =
*    ALLOCVALUESCHAR       =
*    ALLOCVALUESCURR       =
*    RETURN                =.
ENDLOOP.
PS:
gemäß SAP soll die alte Form der Tabellendefinition mit impliziter Kopfzeile mittels OCCURS aussterben und man soll u.a.auch aus Gründen der Lesbarkeit explizite Arbeitsbereiche benutzen. Ist auch im ABAP OO Pflicht.
Alternativ steht auch die Variante mit Feldsymbolen zur Verfügung.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von danielandross (ForumUser / 11 / 0 / 0 ) »
Hallo,

erstmal ein großes Dankeschön für deine ausführliche Hilfe.
Er sagt immernoch etwas wegen einem Typfehler im Select. Diesmal aber eine andere Fehlermeldung. Ich glaube ich habe den Fehler gefunden: Du schreibst einmal objcl (bei types:)
und sonst verweist du ja auf objct. Ist das Absicht?
vielen dank nochmal.

edit: nein das ändern hat auch nichts gebracht. Er sagt immernoch er konnte die das Feld nicht in das Zielfeld konvertieren.

edit2: danke für den Hinweis wegen alten und neuen Tabellen. Wie man sieht bin ich ein abap n00b. aber ich hatte gar kein occurs drin. Habe die tabelle wie in deinem beisiel mit types gemacht.

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
danielandross hat geschrieben:Hallo,

erstmal ein großes Dankeschön für deine ausführliche Hilfe.
Er sagt immernoch etwas wegen einem Typfehler im Select. Diesmal aber eine andere Fehlermeldung. Ich glaube ich habe den Fehler gefunden: Du schreibst einmal objcl (bei types:)
und sonst verweist du ja auf objct. Ist das Absicht?
vielen dank nochmal.
nein, dass ist auch ein Fehler. :oops:
Es muss dann schon in allen Fällen OBJCT oder OBJCL heißen.
danielandross hat geschrieben: edit: nein das ändern hat auch nichts gebracht. Er sagt immernoch er konnte die das Feld nicht in das Zielfeld konvertieren.
*grmbl* benutze mal den Zusatz CORRESPONDING FIELDS OF hinter dem INTO des SELECT's.
SAP versucht in bestimmten Fällen die Datenbankdaten beim Übertragen in Felder zu konvertieren. Ohne den Zusatz CORRESPONDING müssen wohl die Feld-Typen konvertierbar sein... QED
danielandross hat geschrieben: edit2: danke für den Hinweis wegen alten und neuen Tabellen. Wie man sieht bin ich ein abap n00b. aber ich hatte gar kein occurs drin. Habe die tabelle wie in deinem beisiel mit types gemacht.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von danielandross (ForumUser / 11 / 0 / 0 ) »
Hallo,
leider hatte das CORRESPONDING auch keinen effekt.
Hier mal der genaue Fehler:
Bei einem SELECT-Zugriff konnten die gelesenen Daten nicht in das zur Verfügung gestellte Zielfeld gestellt werden.
Die Konvertierung wird entweder für den Typ des Zielfelds nicht unterstützt, oder das Zielfeld ist zur Aufnahme des Werts zu klein, oder die Daten weisen nicht das für das Zielfeld geforderte Format auf.

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Hallo danielandross,

*grmbl*
so etwas habe ich schon verschiedentlich gemacht, habe jetzt aber grad keine Beispiele vorliegen...

Nun gut. Dann definiere Dir eine Variable vom Typ BAPI1003_KEY-OBJECT_GUID und schiebe die Materialnummer im LOOP dort hinein. Dann sollte es mit dem Auslesen der Konfiguration klappen...
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von danielandross (ForumUser / 11 / 0 / 0 ) »
Hallo,
ich danke dir. So hat es funktioniert. Die BAPI wird ohne Fehler gerufen.
Meine Frage jetzt ist allerdings noch welchen typ mir diese BAPI zurückgibt. Bzw. wo kann ich das nachsehen. Ich habe es jetzt so gehandhabt dass ich als Importing ein OBJECT angebe.

Beitrag von uh (Specialist / 158 / 0 / 1 ) »
Hallo,

da es sichbei einem BAPI um einen stinknormalen FuBa handelt, kannst du dir das in der SE37 anschauen. Da siehst du die Parametersignatur und damit die Typen.

Das der "Compiler" es nicht schafft, bei dem statischen Aufruf eines FuBa eine Typ-Prüfung druch zu führen, kann ich dir aber nicht beantworten. Das ein "implizites" casting alle Nase lang passiert, beim FuBa-Aufruf aber nicht ist dann auch wieder so ein Widerpsruch...

Grüße

UH

Seite 1 von 1

Vergleichbare Themen

1
Antw.
3551
Views
Zugriff aus ABAP auf eine Java-Methode
von crux » 04.06.2007 15:11 • Verfasst in Java & SAP®
1
Antw.
1828
Views
Zugriff auf MS-SQL aus ABAP (S/4HANA 2021 onPrem)
von whaslbeck » 13.12.2023 20:30 • Verfasst in Basis
1
Antw.
3638
Views
ABAP Zugriff auf externe Datenbank über DB-Link
von thommasj » 22.07.2008 08:41 • Verfasst in ABAP® Core
6
Antw.
3275
Views
Zugriff auf die ABAP Workbench beim Free Trial
von RWMC » 10.11.2016 11:38 • Verfasst in ABAP® für Anfänger
0
Antw.
1205
Views

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Trennen Strasse und Hausnummer
vor 15 Minuten von DeathAndPain 14 / 10728
Dialog-Container mit Toolbar/Status
vor 26 Minuten von DeathAndPain gelöst 24 / 3847
User Exit EXIT_RQCPRM10_001
vor 19 Stunden von a-dead-trousers 2 / 338
Daten an Tabelle binden
Gestern von Lukas Sanders 2 / 1388

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Trennen Strasse und Hausnummer
vor 15 Minuten von DeathAndPain 14 / 10728
Dialog-Container mit Toolbar/Status
vor 26 Minuten von DeathAndPain gelöst 24 / 3847
User Exit EXIT_RQCPRM10_001
vor 19 Stunden von a-dead-trousers 2 / 338
Daten an Tabelle binden
Gestern von Lukas Sanders 2 / 1388

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2920
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9513