Suche nach Materialnummern ohne führende Nullen

Rund um Java und SAP®.
9 Beiträge • Seite 1 von 1
9 Beiträge Seite 1 von 1

Suche nach Materialnummern ohne führende Nullen

Beitrag von shapoc (ForumUser / 52 / 3 / 0 ) »
Hallo zusammen,

ich habe mal eine Frage zum Aufruf eines FuBa's aus einem Java IView:

Ich möchte gerne über ein Eingabefeld eine Materialnummer oder einen Teil davon eingeben können. Abhängig davon, ob ein Wildcardzeichen (*) benutzt wird, sollen entweder alle passenden Materialnummern oder genau die Eingegebene angezeigt werden.

Dazu habe ich den BAPI_MATERIAL_GETLIST aufgerufen und in der Übergabetabelle MATNRSELECTION den Wert des Feldes übergeben.
Leider funktioniert das so nicht ganz, weil die interne Suche nach nach dem Material 4711 fehlschlägt. Es wird nämlich nicht genau nach der Materialnummer 4711 gesucht, sondern intern nach 00000000004711.
Als Benutzer möchte ich aber nur 4711 eingeben und genau diese Nummer angezeigt bekommen.

Leider ist der FuBa CONVERSION_EXIT_MATN1_INPUT für die Nummernkonvertierung von extern->intern nur für den internen Gebrauch gedacht (nicht RFC-fähig)!

Wie bekomme ich nun die korrekten Ergebnisse, wenn der Benutzer a) 4711 und b) *11 eingibt?!

Oder liege ich komplett falsch?

Hier mein bisheriger Versuch:

Code: Alles auswählen.

		JCO.Repository repository = new JCO.Repository("PDKM", connection);
		IFunctionTemplate template = repository.getFunctionTemplate("BAPI_MATERIAL_GETLIST");
		JCO.Function function = template.getFunction();
		
		function.getImportParameterList().setValue("1000","MAXROWS");
		
		JCO.Table tableMaterial = function.getTableParameterList().getTable("MATNRSELECTION");

		if (material.startsWith("*") && material.endsWith("*")) {
			tableMaterial.appendRow();
			tableMaterial.setValue("I","SIGN");
			tableMaterial.setValue("CP","OPTION");
			tableMaterial.setValue(material,"MATNR_LOW");			
		}
		else if (material.startsWith("*") || (material.endsWith("*"))) {
			tableMaterial.appendRow();
			tableMaterial.setValue("I","SIGN");
			tableMaterial.setValue("CP","OPTION");
			tableMaterial.setValue(material,"MATNR_LOW");			
		
		}
		else if (!(material.startsWith("*")) && !(material.endsWith("*"))) {
			tableMaterial.appendRow();
			tableMaterial.setValue("I","SIGN");
			tableMaterial.setValue("EQ","OPTION");
			tableMaterial.setValue(material,"MATNR_LOW");			
		
		}
		else {
			tableMaterial.appendRow();
			tableMaterial.setValue("I","SIGN");
			tableMaterial.setValue("CP","OPTION");
			tableMaterial.setValue(material),"MATNR_LOW");			
			
		}

Bin für jede Hilfe dankbar!!

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


Re: Suche nach Materialnummern ohne führende Nullen

Beitrag von ewx (Top Expert / 4846 / 311 / 642 ) »
shapoc hat geschrieben:Leider ist der FuBa CONVERSION_EXIT_MATN1_INPUT für die Nummernkonvertierung von extern->intern nur für den internen Gebrauch gedacht (nicht RFC-fähig)!
Dann schreib doch am einfachsten einen am besten gleich generischen RFc-fähigen baustein, der diesen Baustein aufruft.
Mit generisch meine ich, dass du die Kovertierungsroutine mitgibst und der Baustein dann den richtigen FUBA zusammenbaut und aufruft:
fuba = "CONVERSION_EXIT_" konvroutine + "_INPUT"
Call Function fuba ...

Gruß, Enno

Beitrag von shapoc (ForumUser / 52 / 3 / 0 ) »
Ja, daran habe ich auch schon gedacht. Hatte aber eher gehofft, dass es vielleicht einen anderen Weg gibt...
Werd das mal ausprobieren!

Trotzdem bleibt noch die Frage, wie ich denn nun die Suchparameter korrekt übergeben muss, damit ich das gewünschte Ergebnis erhalte.
Irgendwie habe ich das mit den Wildcards und den Logical Expressions noch nicht so im Griff... :-( !

Beitrag von shapoc (ForumUser / 52 / 3 / 0 ) »
Danke nochmal Enno für deinen Tipp.

Hier mein neu erstellter, RFC-fähiger FuBa:
FUNCTION Z_CONVERSION_EXIT_INPUT.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(CONVERSION_ROUTINE) DEFAULT 'MATN1'
*" VALUE(INPUT)
*" EXPORTING
*" VALUE(OUTPUT)
*" EXCEPTIONS
*" LENGTH_ERROR
*"----------------------------------------------------------------------

Data: FuBa(50) type c.

condense CONVERSION_ROUTINE NO-GAPS.
concatenate 'CONVERSION_EXIT_' CONVERSION_ROUTINE '_INPUT' into FuBa.

CALL FUNCTION FuBa
EXPORTING
input = INPUT
IMPORTING
OUTPUT = OUTPUT
EXCEPTIONS
LENGTH_ERROR = 1
OTHERS = 2
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

ENDFUNCTION.
Jetzt muss ich mich um die Suchfunktionalität kümmern. Also falls diesbzgl. noch jemand einen Tipp hat, wär ich sehr dankbar.

Gruß,
Andy

Beitrag von shapoc (ForumUser / 52 / 3 / 0 ) »
Hallo nochmal,

ich habe noch ein bischen experimentiert und nun bin ich in der Lage mit dem unten aufgeführten FuBa die für mich relevanten Konvertierungen (MatNr und EquNr) in beide Richtungen (Input/Output) durchzuführen!

Code: Alles auswählen.

FUNCTION z_conversion_exit .
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(DIRECTION) TYPE  FUNC_NAME
*"     VALUE(CONVERSION_ROUTINE) TYPE  FUNC_NAME DEFAULT 'MATN1'
*"     VALUE(INPUT) TYPE  TEXT
*"  EXPORTING
*"     VALUE(OUTPUT) TYPE  TEXT
*"  EXCEPTIONS
*"      LENGTH_ERROR
*"----------------------------------------------------------------------


  DATA: fuba like E071-OBJ_NAME,
        exists like SXST_PARE-EXIST.

  CONDENSE direction NO-GAPS.

  if conversion_routine EQ ''.
    conversion_routine = 'MATN1'.
  endif.
  CONDENSE conversion_routine NO-GAPS.
  CONCATENATE 'CONVERSION_EXIT_' conversion_routine '_' direction INTO fuba.

  CALL FUNCTION 'CHECK_EXIST_LIMU_FUNC'
    EXPORTING
      name                  = fuba
*     AGGNAME               = ' '
*     MTYPE                 = ' '
   IMPORTING
     EXIST                 = exists
*   EXCEPTIONS
*     TR_INVALID_TYPE       = 1
*     OTHERS                = 2
            .
  IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.



  IF exists EQ 'X'.

    CALL FUNCTION fuba
      EXPORTING
        input        = input
      IMPORTING
        output       = output
      EXCEPTIONS
        length_error = 1
        OTHERS       = 2.
    IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.

  ELSE.
    output = input.
  ENDIF.

ENDFUNCTION.
Danke Enno nochmal, für den Hinweis!

Gruß
Andy

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

nun stellt sich nur noch die Frage, welches Ergebnis Dein FB liefern sollte, wenn der CONV-Baustein nicht gefunden wurde.
In diesem Fall wird bei Dir OUTPUT derzeit nicht gesetzt.

Code: Alles auswählen.

  IF exists EQ 'X'. 

    CALL FUNCTION fuba 
      EXPORTING 
        input        = input 
      IMPORTING 
        output       = output 
      EXCEPTIONS 
        length_error = 1 
        OTHERS       = 2. 
    IF sy-subrc <> 0. 
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO 
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. 
*[Ergänzung]
    ELSE. 
      output = input. 
*[/Ergänzung]
    ENDIF. 

  ELSE. 
    output = input. 
  ENDIF. 
Gruß
Ereglam


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

Beitrag von shapoc (ForumUser / 52 / 3 / 0 ) »
ereglam hat geschrieben:Hallo Andy,

nun stellt sich nur noch die Frage, welches Ergebnis Dein FB liefern sollte, wenn der CONV-Baustein nicht gefunden wurde.
In diesem Fall wird bei Dir OUTPUT derzeit nicht gesetzt.

Code: Alles auswählen.

  IF exists EQ 'X'. 

    CALL FUNCTION fuba 
      EXPORTING 
        input        = input 
      IMPORTING 
        output       = output 
      EXCEPTIONS 
        length_error = 1 
        OTHERS       = 2. 
    IF sy-subrc <> 0. 
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO 
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. 
*[Ergänzung]
    ELSE. 
      output = input. 
*[/Ergänzung]
    ENDIF. 

  ELSE. 
    output = input. 
  ENDIF. 
Das Vorhandensein prüfe ich schon mit dem IF ab, aber was du hinzugefügt hast, ist, dass der FuBa selbst einen Fehler wirft und "output" nicht füllt.
In diesem Fall wäre deine Ergänzung sinnvoll!

Gruß
Andy

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

ich denke, die Ergänzung wäre nicht nur sinnvoll. Sie ist es! Oder?
Gruß
Ereglam


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

Beitrag von shapoc (ForumUser / 52 / 3 / 0 ) »
Ja klar, anders war es auch nicht gemeint :D

Gruß
Andy

Seite 1 von 1

Vergleichbare Themen

4
Antw.
3322
Views
Führende Nullen
von Kelly » 05.10.2005 09:48 • Verfasst in ABAP® für Anfänger
18
Antw.
13897
Views
führende Nullen
von tabea* » 14.04.2007 09:21 • Verfasst in ABAP® für Anfänger
9
Antw.
7219
Views
Führende Nullen
von Beginner014 » 24.10.2014 08:51 • Verfasst in ABAP® für Anfänger
4
Antw.
3275
Views
GUI_DOWNLOAD -> führende Nullen
von holderda » 19.05.2014 09:54 • Verfasst in ABAP® für Anfänger
22
Antw.
67734
Views
Führende Nullen löschen
von thomasxy » 27.11.2007 15:08 • Verfasst in ABAP® Core

Über diesen Beitrag


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

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.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
vor 3 Tagen von Bright4.5 1 / 775
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2395
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8982