Formular auf Server speichern

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

Formular auf Server speichern

Beitrag von STDIN (ForumUser / 39 / 16 / 0 ) »
Hallo zusammen,

ich habe ein Formular über die Transaktion Smartforms erstellt und lasse dies als PDF am Ende über einen Report anzeigen. Jetzt möchte ich das Formular speichern und habe zunächst die Methode gui_download der Klasse cl_gui_frontend_services verwendet. Dies funktioniert auch, allerdings lässt sich hier nicht der Dateipfad ändern und es wird auch nur lokal auf dem PC gespeichert. Stattdessen hieß es, dass ich eher 'OPEN DATASET ...' nutzen soll um das PDF auf den Server abspeichern zu können. Dies habe ich wie folgt gelöst:

Code: Alles auswählen.

DATA: file_path TYPE string VALUE
'/usr/sap/trans/tmp/test123.pdf'.

OPEN DATASET file_path FOR OUTPUT IN BINARY MODE.
      IF sy-subrc = 0.
        TRANSFER gv_xpdf TO file_path.
      ENDIF.
      CLOSE DATASET file_path.
Der Dateipfad ist von SAP aus erreichbar und nach Öffnen des Pfades steht sy-subrc auf 0. Allerdings wird das PDF im Folgendem nicht gespeichert. Weiß hier zufällig jemand warum das denn so ist und was eine Alternative oder Ergänzung dazu wäre?

In einem anderem Programm verwende ich auch dieses Coding um eine PDF in einem Ordner zu speichern, nur komischerweise funktioniert es dort..

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


Re: Formular auf Server speichern

Beitrag von Lukas Sanders (ForumUser / 64 / 7 / 33 ) »
Hallo,

im Ordner "/usr/sap/trans/tmp/" werden doch eigentlich Logs aus Transporten gespeichert, vielleicht gibt es dort (auf Dateisystemebene) besondere Berechtigungen.

Wird der PDF-Inhalt als XString übertragen oder als SOLIX-Tabelle?

Folgende Benutzer bedankten sich beim Autor Lukas Sanders für den Beitrag:
STDIN


Re: Formular auf Server speichern

Beitrag von Tron (Top Expert / 1327 / 35 / 331 ) »
Moin.

In Deinem Coding fehlt beim Transfer Befehl die Angabe der Bytemenge.

Dieses Coding verwende ich zum Binären Speichern von Daten auf dem Server
mit der Tabelle SOLIX_TAB und LG_MAX_LEN = 255.

Code: Alles auswählen.

  METHOD file_write_bin.

    DATA l_len TYPE i.
    DATA l_all_lines_len TYPE i.
    DATA l_diff_len TYPE i.
    DATA l_subrc LIKE sy-subrc.

    DATA rc TYPE sy-subrc.
    DATA ls_data TYPE solix.
    DATA e_file_size TYPE drao-orln.
    DATA i_lines TYPE  i.
    DATA i_file TYPE rcgiedial-iefile.




    i_file = file.

* check if file exists if we arn't allowed to overwrite file
    IF i_file_overwrite = ' '. " apap_FALSE'.

      CLEAR l_subrc.
      CATCH SYSTEM-EXCEPTIONS open_dataset_no_authority = 1
                              dataset_too_many_files = 2
                              OTHERS = 4.
        OPEN DATASET i_file FOR INPUT IN BINARY MODE.
        l_subrc = sy-subrc.
      ENDCATCH.
      IF l_subrc <> 0.
*     nothing
      ELSE.
        CATCH SYSTEM-EXCEPTIONS OTHERS = 4.
          CLOSE DATASET i_file.
        ENDCATCH.
        RAISE ap_file_exists.
      ENDIF.
      CATCH SYSTEM-EXCEPTIONS OTHERS = 4.
        CLOSE DATASET i_file.
      ENDCATCH.

    ENDIF.

    i_lines = lines( data ).
* open dataset for writing
    OPEN DATASET i_file FOR OUTPUT IN BINARY MODE.
    IF NOT sy-subrc IS INITIAL.
      RAISE open_failed.
    ELSE.

      l_len = lg_max_len.
      LOOP AT data INTO ls_data.
*     last line is shorter perhaps
        IF sy-tabix = i_lines.
          l_all_lines_len = lg_max_len * ( i_lines - 1 ).
          l_diff_len = i_file_size - l_all_lines_len.
          l_len = l_diff_len.
        ENDIF.
*     write data in file
        CATCH SYSTEM-EXCEPTIONS dataset_write_error = 1
                                OTHERS = 4.
          TRANSFER ls_data TO i_file LENGTH l_len.
        ENDCATCH.

        IF NOT sy-subrc IS INITIAL.
          RAISE write_failed.
        ENDIF.

      ENDLOOP.
    ENDIF.

* close the dataset

    CATCH SYSTEM-EXCEPTIONS dataset_cant_close = 1
                            OTHERS = 4.
      CLOSE DATASET i_file.
    ENDCATCH.

    IF NOT sy-subrc IS INITIAL.
      RAISE close_failed.
    ENDIF.

  ENDMETHOD.
siehe auch :
http://www.bb1.gate2app.com/viewtopic.php?f=36&t=20626
http://bb1.gate2app.com/viewtopic.php?f=32&t=11466
gruß Jens

Folgende Benutzer bedankten sich beim Autor Tron für den Beitrag:
STDIN

<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Re: Formular auf Server speichern

Beitrag von STDIN (ForumUser / 39 / 16 / 0 ) »
Vielen Dank für eure Antworten.

Bezüglich der fehlenden mitgegeben Länge hat es auch nicht funktioniert. Wahrscheinlich liegt es dann wohl doch an fehlenden Berechtigungen, wie Lukas Sanders meinte.

Habe es jetzt doch wieder mit der Methode gui_download implementiert und lasse den Dateipfad zuvor mit einer F4-Hilfe bestimmen. So nimmt er auch ein anderes Verzeichnis an und wenn ich eines mit fehlenden Zugriff auswähle gibt es eben eine Fehlermeldung und es muss ein anderes Verzeichnis ausgewählt werden bzw. je nachdem dann auf Anfrage von jemanden freigeschaltet werden.

Seite 1 von 1

Vergleichbare Themen

10
Antw.
4336
Views
Selektionsergebnis auf Server speichern
von Newbie2 » 05.04.2005 15:12 • Verfasst in ABAP® für Anfänger
2
Antw.
2011
Views
Speichern Datei auf dem Server
von Gast » 16.11.2004 17:29 • Verfasst in ABAP Objects®
7
Antw.
2751
Views
SmartForms: Coding / Formular speichern
von Jenni » 29.11.2006 14:40 • Verfasst in ABAP® Core
6
Antw.
1712
Views
Daten auf eine Datei im Server speichern
von meocon » 20.07.2020 16:52 • Verfasst in ABAP® für Anfänger
1
Antw.
2013
Views
Datei auf Server speichern - Werthilfe log. Dateiname
von ralf.wenzel » 24.07.2007 17:01 • Verfasst in ABAP® Core

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

Zwischensumme Adobe Forms
vor 4 Wochen von Lucyalison 1 / 134
Group Items auf einer Filterbar
vor 5 Wochen von Bright4.5 1 / 168