PDF fehlerhaft nach Übergabe an REST-API von Adobe-Sign

Platform-as-a-Service Angebot der SAP
6 Beiträge • Seite 1 von 1
6 Beiträge Seite 1 von 1

PDF fehlerhaft nach Übergabe an REST-API von Adobe-Sign

Beitrag von P4dd3y (ForumUser / 5 / 1 / 0 ) »
Hallo zusammen,
ich bin aktuell dabei, OAUTH2.0 mit der Rest API von der Adobe-Cloud umzusetzen.
Ich habe dabei folgendes Problem:
Ich lade mein PDF aktuell mittels GUI-UPLOAD ins SAP-System und gebe dieses als XSTRING formatiert an meinen request in Form eines SET_BINARY_DATA weiter:

Code: Alles auswählen.

lr_request->set_binary_data( iv_data = lf_binary_pdf ).
Zu diesem Zeitpunkt, ist das PDF korrekt. Wenn ich dieses downloade und als PDF abspeichere, kommt das richtige PDF raus.

Im Anschluss passiert ein post, auf die Schnittstelle "transcient_documents" der Adobe Cloud und ein darauf folgendes agreement.

Sobald ich nun allerdings die Email zum signieren erhalte, bekomme ich ein PDF, das nun alle möglichen UNICODE-Zeichen enthält statt dem ursprünglichen PDF.

Ich habe mittlerweile alles versucht:
- Der Aufruf der Methoden ist korrekt
- Alle nötigen Profile / Zertifikate / etc. wurden korrekt eingepflegt
- Das Dateiformat wurde richtig gewählt:
In diesem Fall Multipart für transcient documents mit folgendem Aufbau:

Code: Alles auswählen.

lr_rest_multi->set_header_field(
  EXPORTING
    iv_name = if_http_header_fields=>content_type
    iv_value = if_rest_media_type=>gc_multipart_form_data
    ).

  lr_rest_multi->set_header_field(
  EXPORTING
    iv_name = if_http_header_fields=>content_disposition
    iv_value = 'form-data; name="File"; filename="test.pdf"'
  ).
- Der JSON für das agreement ist richtig gebaut und korrekt
- Verschiedene PDF Versionen funktionieren ebenfalls nicht
- Das Token ist aktiv und die Statusmeldungen sind immer 200er
- Aufruf mit und ohne Kompression(beides erfolglos)
- Firewall Einstellungen wurden geprüft
- Das JSON enthält keine Escape-Zeichen(alles ist in UTF-8)

Falls jemand noch eine Idee hat, was ich tun kann, wäre ich sehr dankbar. Vielen Dank im Voraus.


Re: PDF fehlerhaft nach Übergabe an REST-API von Adobe-Sign

Beitrag von a-dead-trousers (Top Expert / 3710 / 136 / 971 ) »
Hört sich für mich danach an, als ob irgendwo im Ablauf eine (implizite) Codepage-Konvertierung passiert die eigentlich bei durchgängig als binär gekennzeichnete Daten nicht sein sollte. Daher ist vermutlicht irgendwo eine "Lücke" in der Verarbeitungskette.
Wie lädst du das PDF hoch? Binär oder Ascii?
Wie wird der XSTRING erstellt?
Wie läuft die Übertragung selbst? Base64 codiert?
Wie empfängst du das Ergebnis? Variablentyp?
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.07
Basis: 7.40

Re: PDF fehlerhaft nach Übergabe an REST-API von Adobe-Sign

Beitrag von P4dd3y (ForumUser / 5 / 1 / 0 ) »
Der Upload ist Binär und es wird folgendermaßen konvertiert:

Code: Alles auswählen.

cl_gui_frontend_services=>gui_upload(
EXPORTING
  filename   = gf_filename
  filetype   = 'BIN'
  IMPORTING
    filelength = gf_file_length
  CHANGING
    data_tab   = gt_data_tab ).

    DATA(lv_bin_data) = cl_bcs_convert=>solix_to_xstring( it_solix = gt_data_tab ).
Es wird also im Binärformat hochgeladen und mittels cl_bcs_convert in einen xstring konvertiert.


Der Post erfolgt so:

Code: Alles auswählen.

lr_request->set_binary_data( iv_data = lf_binary_pdf ).
  lr_rest_client->if_rest_client~post( io_entity = lr_rest_multi ).
Ich bin mir allerdings nicht sicher ob es jetzt Base64 codiert ist. Gibt es eine Möglichkeit das zu prüfen oder festzulegen?

Die API liefert eine Antwort als String (Diese Antwort hat aber nichtsmehr mit dem PDF selbst zu tun. Es handelt sich dabei nur um eine ID, mit der ich das PDF, dann in der Cloud identifizieren kann, um die nächsten Aufrufe, der API zu starten) :

Code: Alles auswählen.

DATA(lf_transcient_ID) = lr_response->get_string_data( ).
Ich sehe das PDF, dann, nachdem ich den agreement Aufruf in der API gemacht habe. Ich erhalte daraufhin eine Email, in der das PDF im Anhang zu finden ist.
Ich vermute allerdings, dass es bereits beim erstmaligen post in die Cloud (in dem hier angegegeben Codeabschnitten, kaputt geht.)

Ich packe mal für besseres Verständnis einen Link der API selbst mit rein(Hier können die Aufrufe per Hand getestet werden, insofern ein Account vorhanden ist):
https://secure.na1.echosign.com/public/ ... ntDocument

Vielen Dank bereits jetzt :)

Re: PDF fehlerhaft nach Übergabe an REST-API von Adobe-Sign

Beitrag von jocoder (Specialist / 260 / 3 / 75 ) »
Ohne die API genau zu kenne, würde ich den MIME-Type multipart/form-data als Ursache vermuten (siehe https://wiki.selfhtml.org/wiki/MIME-Type/%C3%9Cbersicht).

Code: Alles auswählen.

lr_rest_multi->set_header_field(
  EXPORTING
    iv_name = if_http_header_fields=>content_type
    iv_value = if_rest_media_type=>gc_multipart_form_data
    ).
Multipart-Requests sind speziell aufgebaut und enthalten mehr als nur die reinen Binärdaten (https://www.w3.org/TR/html401/interact/ ... -17.13.4.2):

Code: Alles auswählen.

POST /url HTTP/1.1\r\n
Content-Type: multipart/form-data; boundary=AaB03x\r\n
\r\n
 --AaB03x
Content-Disposition: form-data; name="File"; filename="file1.pdf"
Content-Type: application/pdf\r\n
Content-Transfer-Encoding: binary\r\n
\r\n
<Binärdaten aus PDF>
--AaB03x--
AaB03x ist ein willkürliches Trennzeichen, das im Header Content-Type festgelegt wird.

Mit dem Kommandozeilenwerkzeug curl (https://curl.se) lässt sich ein Request zum Testen ohne ABAP aufbauen, um das richtige Requestformat zu finden. So ungefähr könnte das aussehen:

Code: Alles auswählen.

curl -X POST -H 'Authorization: Bearer <token>' -H 'Content-Type: multipart/form-data' -F File=@file1.pdf  http://adobe.whatever.uri/path
<token> ist dabei das OAUTH-Access-Token.

Wie genau der Request in ABAP aufgebaut, geht nicht aus den wenigen Code-Snippets hervor. Aber vermutlich liegt hier der Hund begraben.
Zuletzt geändert von jocoder am 07.05.2021 12:35, insgesamt 5-mal geändert.

Re: PDF fehlerhaft nach Übergabe an REST-API von Adobe-Sign

Beitrag von a-dead-trousers (Top Expert / 3710 / 136 / 971 ) »
Noch eine kurze Anmerkung zum "cl_bcs_convert=>solix_to_xstring":
Du hast hier vergessen die IV_SIZE zu versorgen. Es werden so halt unnötig Null-Zeichen hinten an das Ergebnis angehängt (aufgefüllt auf die Zeilenlänge von SOLIX_TAB). Normalerweise sollte das keine Probleme machen, aber wie die API auf solche "Unschönheiten" reagiert, vorallem wenn es ums Signieren geht, kann ich nicht sagen.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.07
Basis: 7.40

Re: PDF fehlerhaft nach Übergabe an REST-API von Adobe-Sign

Beitrag von P4dd3y (ForumUser / 5 / 1 / 0 ) »
Vielen Dank für die vielen Tipps!!!
Ich hatte den Multipart falsch aufgebaut. Im Curl hatte es dann funktioniert.

Ich habe mich jetzt an einem Beispielcode orientiert den ich bei der besseren Recherche zu Multiparts gefunden habe und damit hat es auch funktioniert(Es handelt sich hierbei um die Antwort auf den Post):
https://answers.sap.com/questions/7174658/index.html

Vielen Dank und euch allen einen schönen Tag :)

Seite 1 von 1

Vergleichbare Themen

BSP und Single Sign On
von Meex » 19.08.2005 07:51
Single Sign-on
von anam.jabrane » 19.04.2014 10:44
Adobe Interactive Forms / Adobe Life Cycle Designer
von sap_inchen » 03.04.2018 12:24
Vorzeichen in Dynprofeldern. (sign lost)
von asano » 09.06.2004 09:41