Typ Feld Numerisches Feld bei CHAR-Feld oder DECIMAL-Feld

Aus SAP-Wiki
Wechseln zu: Navigation, Suche

Im LiveCycle Designer ist es möglich ein Feld den Typ "Numerisches Feld" zuzuweisen, obwohl es auf ein ABAP-Feld vom Typ CHAR verweist.

Das ist durchaus praktisch, da z. B. so ein Vertriebsbeleg mit dem Namen "0081234567" als Zahl interpretiert wird und somit als Wert "81234567" ausgegeben wird. Das ist leichter zu lesen als ein Wert "0081234567".

Oftmals werden Felder von SAP in Datenbanktabelle als CHAR typisiert, obwohl hier lediglich Zahlenwerte abgespeichert werden. Das Feld VBELN in den Tabellen VBAK, LIKP, VBRK etc. ist dafür ein Beispiel.

Nun muss man jedoch aufpassen im LiveCycle Designer, wenn man ein Feld den "Numerisches Feld" zuweist und es auf ein ABAP-Feld vom Typ CHAR verweist. Steht nun in dem Feld ein Zeichen ungleich 0-9, dann wird das komplette Formular nicht ausgegeben (!!!) und die Fehlermeldung, die nach dem Formularaufruf ausgegeben wird, weist eher auf ein Problem im ADS hin als auf diesen Fehler. Dieser Fehler tritt auch möglicherweise erst Monate nach Produktivsetzung auf, wenn ein z. B. ein User bei der manuellen Eingabe eines Zahlenfeldes in ein CHAR-Feld sich verschrieben hat und so ein Nichtzahlenzeichen abgespeichert wird. Dann wird genau dieser Beleg nicht ausgegeben und dann ist das Rätsel groß warum genau dieser Beleg nicht ausgegeben werden kann.

Aus Entwicklersicht ist es schwer nachzuvollziehen, warum das ganze Formular nicht ausgegeben werden kann. Es wäre besser, wenn hier z. B. in so einer Inkosistenzsituation das Feld leer bleiben würde oder zumindest nach dem Formularaufruf die Systemfelder passend gefüllt wären und auf diese Fehlerkonstellation hinweisen würden. So passiert praktisch der GAU. Das Formular wird komplett nicht ausgegeben und die Fehlerausgabe lässt den Fehler an einer ganz anderen Stelle (im ADS) vermuten.

Im Zweifel, ob in dem Zeichenfeld wirklich zu 100% und ohne Ausnahme eine Zahl eingetragen wird, sollte man besser auf diese Funktionalität verzichten und im Druckprogramm oder der Schnittstelle die führenden Nullen per ABAP-Code löschen.

Beispiel für Fehlerkonstellation

Das Feld BSTNK hat den ABAP-Typ CHAR.

NumerischesFeld10.JPG


NumerischesFeld2.JPG


Nun wird es auf ein ganzzahliges Feld geändert, mit der Erwartung, dass hier nur Zahlenfelder aus dem Druckprogramm geliefert werden.

NumerischesFeld3.JPG


NumerischesFeld4.JPG


Der Beleg (Lieferung) wird nun ausgegeben.

NumerischesFeld5.JPG


Die Ausgabe wird abgebrochen mit einem Returncode 2 (System).

NumerischesFeld7.JPG


NumerischesFeld8.JPG


NumerischesFeld9.JPG

Die Systemfelder mit der Fehlerbeschreibung würden zur irreführenden Fehlermeldung führen: "ADS: com.adobe.ProcessingException: com.adobe.Processing".

Die Ursache liegt jedoch im Feld BSTNK: "LS_PACKLISTE-BSTNK = Barnsley März 803", weil hier entgegen der Erwartung kein Zahlenwert steht.


NumerischesFeld11.JPG

Zuweisung Numerisches Feld bei einem DECIMAL-Feldtyp

  • Die gleiche Fehlermeldung "ADS: com.adobe.ProcessingException: com.adobe.Processing" bekommt man, wenn man ein ABAP-Dezimalfeld den Typ "Numerisches Feld" im LiveCycle Designer zuweist.
  • Intern steht z. B. der Wert "12.000" und damit kann der LiveCycle Typ "Numerisches Feld" nicht umgehen. Das Formular wird nicht ausgegeben.
  • Man muss hier den Typ "Dezimalfeld" zuweisen.

NumerischesFeld12.JPG