Adobe Forms Archivierung

Aus SAP-Wiki
Wechseln zu: Navigation, Suche

Bei der Archivierung mit Adobe Forms erfolgt beim Aufruf des generierten Funktionsbausteins, der eine Repräsentation der Adobe Forms-Schnittstelle darstellt.

Hier muss eine Tabelle DARATAB als Teil eine Struktur vom Typ SFPDOCPARAMS gefüllt werden. Die Tabelle DARATAB beinhaltet N Belege, an die das PDF archiviert werden soll.

Tabellen

Funktionsbausteine

ARCHIV_CREATE_TABLE

ARCHIV_CONNECTION_INSERT

Archivierung beim Formularaufruf

  • Die Archivierung wird bei der Formularerstellung ausgelöst.
  • Aus Performancegründen erfolgt die Archivierung asynchron, in einem separaten Workprozeß.
  • Dies hat hat den Vorteil, dass die Formularerstellung nicht auf die erfolgreich vorgenommene Archivierung warten muß.
  • Es hat den Nachteil, dass nach dem Formularaufruf keine Information vorliegt, ob die Archivierung erfolgreich erfolgt ist oder nicht.

Protokollierung Archivierung

  • Ist die Archivierung erfolgreich, wurde ein Eintrag in der Tabelle TOA01 angelegt. Will man im Nachhinein eine Auswertung über den Erfolg einer Archivierung durchführen, ist eine Strategie die angelegten Einträge in der Tabelle TOA01 mit einer Liste der zu archivierenden Belege zu vergleichen.
  • Kommt es regelmäßig vor, dass von Usern das Feedback kommt, dass Belege nicht archiviert wurden, bietet es sich an in der Formularschnittstelle eine kundeneigene Protokolltabelle zu füllen. Die Kontrolle der Tabelle TA01 ist gut, aber hier sind nur die erfolgreich archivierten Belege enthalten. Es könnte sein, dass im Formular die Archivierungsparameter nicht übergeben worden sind, dass als Ablagemodus nur "1 = Drucken" übergeben wurde oder die Archvierungsparameter falsch waren.

Die Protokolltabelle könnte diese Felder haben:

  • Fortlaufende Nummer
  • Systemdatum
  • Systemuhrzeit
  • Benutzer
  • Belegnummer (z. B. Rechnungsnummer)
  • Ablagemodus (1 = Drucken, 2 = Ablegen, 3 = Drucken und Ablegen)
  • Drucker
  • Archiverungsparameter

Wenn das Formular nur zur Anzeige aufgerufen wird, sollte kein Eintrag in die Protokolltabelle vorgenommen werden. Hier wird keine Archivierung vorgenommen und würde auch kein User erwarten. Allerdings sollte ein Eintrag hinzugefügt werden, wenn der Ablagemodus = Drucken gewählt wurde. Das kann man als User leicht übersehen, dass hier nicht "3 = Drucken und Ablegen" gewählt wurde und so könnte man dem User beweisen, dass die Nichtarchivierung folgerichtig war, wenn hier ein entsprechender Protokollierungssatz erscheint.

Die Felder Ablagemodus, Drucker und Preview werden nicht direkt dem Formular übergeben. Stehen aber nach dem Aufruf des Funktionsbausteins FP_JOB_OPEN zur Verfügung und können dann in der Formularschnittstelle dem Formular übergeben werden.

Man könnte in die Protokolltabelle auch Felder mit aufnehmen, die im Formular noch nicht bekannt sind, aber beim späteren Auswerten der Tabelle TOA01 in die Protokolltabelle geschrieben werden können.

  • Archivierungsdatum
  • Archivierungsuhrzeit
  • ARC_DOC_ID (Verknüpfung zum Archivierungsserver)

Testprogramm FP_TEST_01

Im SAP-Programm FP_TEST_01 gibt es ein einfaches Beispiel für eine Archivierung eines Adobe Forms-PDF.

*----------------------------------------------------------------------*
*       Report FP_TEST_01
*----------------------------------------------------------------------*
report fp_test_01.

parameter:  p_form     type fpname     default 'FP_TEST_00',
            p_pages    type i          default 2.

data: fm_name           type rs38l_fnam,
      fp_docparams      type sfpdocparams,
      fp_outputparams   type sfpoutputparams,
      itf               type tsftext,
      itf_line          type tline,
      itf_line_pattern1 type tdline value 'Line % on page #', "#EC NOTEXT
      itf_line_pattern2 type tdline,
      page_nr           type string,
      line_nr           type string,
      l_dara            type toa_dara.

...

* print data
  call function 'FP_FUNCTION_MODULE_NAME'
    exporting
      i_name                     = p_form
    importing
      e_funcname                 = fm_name.

* now call the generated function module
  fp_outputparams-arcmode = '2'.
  fp_outputparams-nodialog = 'X'.

  call function 'FP_JOB_OPEN'
    changing
      ie_outputparams       = fp_outputparams
    exceptions
      cancel                = 1
      usage_error           = 2
      system_error          = 3
      internal_error        = 4
      others                = 5.
  if sy-subrc <> 0.
    message id sy-msgid type sy-msgty number sy-msgno
            with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  endif.

* Choose form language and country for data formatting
  fp_docparams-langu   = 'D'.
  fp_docparams-country = 'DE'.

* Archive parameters
  l_dara-function   = 'DARA'.
  l_dara-mandant    = sy-mandt.
  l_dara-sap_object = 'BUS0815'.
  l_dara-ar_object  = 'BUSTESTPDF'.
  concatenate sy-datum 'v' sy-uzeit into l_dara-object_id.  "hier wird in der Praxis Belegnummer stehen, z. B. Rechnungsnummer
  l_dara-notiz      = 'PDF'.
  append l_dara to fp_docparams-daratab.

  call function fm_name
    exporting
      /1bcdwb/docparams       = fp_docparams
      textlines               = itf.

  call function 'FP_JOB_CLOSE'
*   IMPORTING
*     E_RESULT             =
    exceptions
      usage_error          = 1
      system_error         = 2
      internal_error       = 3
      others               = 4.
  if sy-subrc <> 0.
    message id sy-msgid type sy-msgty number sy-msgno
            with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  endif.

YouTube

Web-Links