Aufruf Adobe Forms-Formular bricht mit einer ADS-Fehlermeldung ab

Aus SAP-Wiki
Wechseln zu:Navigation, Suche

Voraussetzung für die Ausgabe eines Adobe Forms-Formulars ist die korrekte Konfiguration des Adobe Document Servers (ADS).

Wenn alle Formulare nicht ausgegeben werden können, dann liegt das Problem in der Basis und man kann es als Formularentwickler an die Basis delegieren.

Im Projekt wurde jedoch nur eine bestimmte Bestellung nicht ausgegeben. Beim Formularaufruf mit dem generierten Funktionsbaustein wurde eine Ausnahme "SYSTEM_ERROR = 2" ausgelöst mit einer Meldung:

"ADS: com.adobe.ProcessingException: com.adobe.Processin(200101)"

Das Formular wurde nicht ausgegeben. Der ADS arbeitete grundsätzlich korrekt, andere Formulare und auch andere Bestellungen konnten korrekt ausgegeben werden.

Das hat verunsichert, weil das Problem produktiv auftrat und die Fehlermeldung wenig hilfreich war.

Formularaufruf

 CALL FUNCTION lv_fm_name
  EXPORTING
    /1bcdwb/docparams  = ls_docparams
    bil_prt_com        = gs_interface
    s_invoice          = gs_invoice
  IMPORTING
    /1bcdwb/formoutput = ls_pdf_file
  EXCEPTIONS
    usage_error        = 1
    system_error       = 2
    internal_error     = 3
    OTHERS             = 4.

Der SY-SUBRC = 2 wurde nach dem Aufruf zurückgegeben.

Ausgabe Messagefelder mit ADS-Fehlermeldung

Bei der Abfrage der Messagefelder

sy-msgno
sy-msgv1
sy-msgv2
sy-msgv3
sy-msgv4
  • kam eine Meldung "ADS: com.adobe.ProcessingException: com.adobe.Processin(200101)".

Ursache der Nichtausgabe im Scripting-Code

  • Beim Googeln der Fehlermelduong stösst man auf einen SAP-Blogeintrag, der auf ein Scriptproblem hindeutet. Da ich am gleichen Tag einigen Script-Code ins Formular eingefügt hatte, der im Bestellformur nur unter einer bestimmten Datenkonstellation ausgeführt wurde, passte das ins Bild, dass dieser irgendwie dafür verantwortlich sein könnte.
  • Bei einem Scripting-Code, der dynamisch Felder einer Tabelle ausgeblendet hat, gab es einen Bindingfelder
if ($.parent.parent.Ueberschriften.X50.rawValue == null) then
 $.presence = "hidden"
endif
  • In diesem Fall existierte das Textfeld "X50" nicht. Es war jedoch sehr überraschend, dass das Formular nicht ausgegeben werden konnte.
  • Grundsätzlich kommt es häufiger vor, dass man im Scripting-Code z. B. aufgrund eines Rechtschreibfehlers auf ein nicht vorhandendes Textfeld im Scripting referenziert wird. Diese Erfahrung hatte ich vorher nicht, dass aufgrund eines Scriptingfehlers ein Formular nicht ausgegebgen wurde.
  • Es ist schwierig genau vorherzusagen wann ein Formular mit der betreffenden Fehlermeldung nicht ausgegeben werden kann. Wenn man jedoch obige Fehlermeldung hat, sollte man sein zuletzt hinzugefügtes Scripting überprüfen. In meinem Fall war es eine Kombination von
    • Tabellendarstellung
    • Abfrage eines (nicht existierenden) Textfeldes
    • Ausblenden "hidden" von einem Textfeld

Tipps Fehlereingrenzung

  • Nach Möglichkeit sollte man einen solchen Fall auch im Development- oder Q-System zur Verfügung haben, um sich Produktivtransporte zum "testen" zu ersparen und den Produktivbetrieb auch nicht zu stören.
  • Aber auch im Produktiv kann man oft im Debugger Teile der Daten der Formularausgabe löschen, um zu wissen, welcher Teil des Formulars das Problem verursacht. Werden die betreffenden Daten nicht dem Formular übergeben, wird auch das problematische Scripting nicht durchlaufen und das Formular kann ausgegeben werden. So lässt sich oft der Fehler eingrenzen.
  • Sehr häufig werden die letzten Änderungen am Coding verantwortlich sein und die sollte man als erstes analysieren, wenn der Produktivbetrieb kürzlich erfolgte.
  • Das problematische Coding kann allerdings auch schon länger im Produktiv sein, wenn das Problem nur bei einer sehr seltenen Datenkonstellation auftritt.
  • Hilfreich ist es auch ganze Teile vom Formular inaktiv zu setzen. Das geht sehr schnell und wenn bei Inaktivierung eines bestimmten Hierarchieknotens im LiveCycle Designer das Formular wieder ausgegeben werden kann, muss der Fehler in diesem Hierarchieknoten sein. So kreist man schnell das Problem ein und muss ggf. weniger Scriptingcode überprüfenb.
  • Ist man unsicher bei einem Scriptingcode, ob der für die Nichtausgabe verantwortlich ist, kann man ihn auskommentieren und sehen ob dann das Formular ausgegeben werden kann.
//auskommentierter Scriptingcode
  • In meinem Fall der Nichtausgabe verwies der Scriptingcode auf ein nicht vorhandenes Textfeld. Darauf sollte man besonders achten. Es kann natürlich aber auch andere Ursachen haben.

Web-Links