CL_DOCUMENT_BCS - ADD_ATTACHMENT - DOCX/XLSX

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV

Re: CL_DOCUMENT_BCS - ADD_ATTACHMENT - DOCX/XLSX

Postby Mark4068 » Mon Nov 14, 2016 2:15 pm

Hallo Jens,

da gebe ich dir recht, Mails und Anhänge anderer User gehen mich nichts an :roll:

Ich suche ja auch nach den Anhängen einer Bestellung, die per Mail an externe Personen
geschickt werden sollen. Und diese Mail erstelle ich nach dem speichern der Bestellung.
Somit sollte das meiner Meinung nach nichts mit Berechtigungen zu tun haben.

Bestellung.PNG(16.68 KiB) Noch nie heruntergeladen

FYI:
Der Versand der Bestellung ist hier als Medium 7 einfache Mail eingestellt.
Daher liegen diese Dateien halt im SAP-Officebereich rum und ich komm einfach nicht an die Daten um diese der Mail dann mitzugeben. Ich sehe zwar in der NAST den Folder, in dem die Anhänge abgelegt sind, komm aber einfach nicht an den Inhalt... :oops:
PDF war kein Problem, das erzeuge ich via Smartform, konvertiere es und hänge es an die Mail.
Aber die anderen möglichen Anhänge, die noch mitgeschickt werden sollen, suche ich eben noch...

Aber ich freue mich bereits auf die Fortsetzung heute abend :lol:

Viele Grüsse
Stefan
Mark4068
...
...
 
Posts: 111
Joined: Tue Sep 02, 2008 12:13 pm

Re: CL_DOCUMENT_BCS - ADD_ATTACHMENT - DOCX/XLSX

Postby Tron » Mon Nov 14, 2016 2:33 pm

... klingt gut . Benutzt Ihr ein Archiv (Archivelink / Content server) ? oder wird in die SAP Tabellen abgelegt ?
gruß Jens
Tron
.....
.....
 
Posts: 1112
Joined: Sat Aug 04, 2007 10:21 pm

Re: CL_DOCUMENT_BCS - ADD_ATTACHMENT - DOCX/XLSX

Postby Mark4068 » Mon Nov 14, 2016 2:38 pm

von Archiv ist mir bisher nichts bekannt... :shock: ...das ist neu eingestellt worden.
Das sollte alles in SAP-Tabellen abgelegt sein.

Bisher wurde immer über Medium 5 externe Mail versendet. Da dort aber keine weiteren
Anhänge und Freitexte versendet werden können, soll das eben umgestellt werden.

Und mich hat's bei der Aufgabenstellung halt erwischt und ich dreh mich nur im Kreis :oops:

Viele Grüsse
Stefan
Mark4068
...
...
 
Posts: 111
Joined: Tue Sep 02, 2008 12:13 pm

Re: CL_DOCUMENT_BCS - ADD_ATTACHMENT - DOCX/XLSX

Postby Tron » Mon Nov 14, 2016 2:45 pm

... nicht so wichtig. Die Bausteine holen sich das schon von der richtigen Quelle.
Kennst Du übrigens
viewtopic.php?f=16&t=2755
meinen Ansatz zum lesen und Versenden von Attachments (GOS) ?
J
Tron
.....
.....
 
Posts: 1112
Joined: Sat Aug 04, 2007 10:21 pm

Re: CL_DOCUMENT_BCS - ADD_ATTACHMENT - DOCX/XLSX

Postby Mark4068 » Mon Nov 14, 2016 4:13 pm

Hallo Jens,

ja, den Ansatz kenn ich :lol:
da hatte wir uns bereits über die Empfänger mal ausgetauscht und
du hattest mir den Tipp mit der ADR6 gegeben...hat funktioniert!

In dem von dir genannten thread geht es aber um GOS-Anhänge...und das liegt hier leider nicht vor...hatte ich auch schon versucht, ob mir das weiterhilft...leider ohne Erfolg.

Welche Bausteine meinst du mit dem Auslesen?
Ich hab's bereits mit dem SO_ATTACHMENT_READ versucht; der bringt mir nur eine Zeile als
Content zurück, in etwa so:
&SO_KProObjectID=SOFFLOIO 005056B04BF91ED6AA861842827B8862
Und das ist kein EXCEL-Inhalt!

Der SO_ATTACHMENT_READ_API1 bringt mir mit den gleichen Übergabeparametern
gar nichts mehr zurück. Aber vielleicht fülle ich den auch nur falsch...

Viele Grüsse
Stefan
Mark4068
...
...
 
Posts: 111
Joined: Tue Sep 02, 2008 12:13 pm

Re: CL_DOCUMENT_BCS - ADD_ATTACHMENT - DOCX/XLSX

Postby Tron » Mon Nov 14, 2016 9:19 pm

Sooo.
In dem von dir genannten thread geht es aber um GOS-Anhänge...und das liegt hier leider nicht vor

Ja , nicht nur.
Es geht um Versand jeglicher Nachrichten, ohne das Druckprogramm ändern zu müssen und gleichzeitig volle Kontrolle des Inhalts der Mail, des Receivers und der Anlagen zu behalten.
Mit dem Standard (Medium 5) hast Du nicht mal Kontrolle über die Betreffzeile. :wink:

geht los:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. *&---------------------------------------------------------------------*
  2. *& Report  ZPOSTEINGANG_EINKAUFSBELEG                                  *
  3. *&                                                                     *
  4. *&---------------------------------------------------------------------*
  5. *&                                                                     *
  6. *&                                                                     *
  7. *&---------------------------------------------------------------------*
  8.  
  9. REPORT  zposteingang_einkaufsbeleg                                                .
  10. *** ----------------------------------------------------------------
  11. *** Lesen Posteingang über Tabellen
  12. *** Keine Berechtigungsprüfung!!!!!
  13. *** ----------------------------------------------------------------
  14.  
  15.  
  16.  
  17. hex_return(2) TYPE c VALUE %_cr_lf.
  18.  
  19.  
  20.  
  21. BEGIN OF t_test OCCURS 0,
  22.   line(255),
  23. END OF t_test,
  24.  
  25. l_souc        LIKE souc,
  26. l_soud        LIKE soud,
  27. l_sood        LIKE sood,
  28. t_sofm        LIKE sofm OCCURS 0 WITH HEADER LINE,
  29.  
  30. t_docs        LIKE sood4 OCCURS 0 WITH HEADER LINE,
  31. l_docs        LIKE sood4,
  32.  
  33. t_folder_cont LIKE somt  OCCURS 0 WITH HEADER LINE,
  34. t_object_cont LIKE soli  OCCURS 0 WITH HEADER LINE,
  35. t_object_head LIKE soli  OCCURS 0 WITH HEADER LINE,
  36. t_object_para LIKE selc  OCCURS 0 WITH HEADER LINE,
  37. t_object_parb LIKE soop1 OCCURS 0 WITH HEADER LINE,
  38. l_object_id   LIKE soodk.
  39.  
  40. DATA t_phio_object TYPE TABLE OF sdokobject.
  41.  
  42. DATA lv_tdname TYPE nast-tdname.
  43.  
  44. PARAMETERS: p_ebeln TYPE ekko-ebeln DEFAULT '4500000000'.
  45.  
  46.  
  47. *-- Beleginformation lesen
  48.   SELECT SINGLE tdname FROM nast INTO lv_tdname WHERE objky = p_ebeln AND tdname NE ' '.
  49.  
  50.   IF lv_tdname IS INITIAL.
  51.     EXIT.
  52.   ENDIF.
  53.  
  54. * FOL28000000000004SCR41000000000001
  55. *-- Posteingangsmappe zur weiteren Verarbeitung auswählen
  56.   l_object_id-objtp = lv_tdname(3).
  57.   l_object_id-objyr = lv_tdname+3(2).
  58.   l_object_id-objno = lv_tdname+5(12).
  59.  
  60. *-- Alle Inhalte dieser Mappe lesen
  61.   SELECT * FROM sofm INTO TABLE t_sofm
  62.    WHERE foltp = lv_tdname(3)
  63.      AND folyr = lv_tdname+3(2)
  64.      AND folno = lv_tdname+5(12)
  65.      AND doctp = lv_tdname+17(3)
  66.      AND docyr = lv_tdname+20(2)
  67.      AND docno = lv_tdname+22.
  68.  
  69.   LOOP AT t_sofm.
  70. *-- Header-Information zu dieser Mappe lesen
  71.     SELECT SINGLE * FROM sood INTO l_sood
  72.      WHERE objtp = t_sofm-doctp
  73.        AND objyr = t_sofm-docyr
  74.        AND objno = t_sofm-docno.
  75.  
  76. *-- Überschrift ausgeben
  77.     FORMAT COLOR COL_TOTAL.
  78.     WRITE: / l_sood-objnam, l_sood-objdes.
  79. *-- Status
  80.     CASE t_sofm-objrd.
  81.       WHEN 'X'.
  82. *-- Dokument wurde gelesen
  83.         WRITE icon_mail_sap_read AS ICON.
  84.       WHEN space.
  85. *-- Dokument wurde noch nicht gelesen
  86.         WRITE icon_mail_sap_unread AS ICON.
  87.     ENDCASE.
  88.     FORMAT COLOR OFF.
  89.  
  90.     MOVE-CORRESPONDING t_sofm TO l_docs.
  91.     MOVE-CORRESPONDING l_sood TO l_docs.
  92.  
  93.     l_object_id-objtp = t_sofm-doctp.
  94.     l_object_id-objyr = t_sofm-docyr.
  95.     l_object_id-objno = t_sofm-docno.
  96.  
  97. *-- Dokumenteninhalt lesen (Ohne Berechtigungsprüfung)
  98.     PERFORM data_select(sapfsso1) TABLES t_object_head
  99.                                          t_object_cont
  100.                                          t_object_para
  101.                                          t_object_parb
  102.                                    USING l_object_id
  103.                                          sy-subrc.
  104.  
  105.     PERFORM get_loio TABLES t_phio_object USING t_sofm.
  106. *-- Dokument ausgeben
  107.     LOOP AT t_object_cont.
  108.       DO.
  109. *-- CarriageReturn + NewLine herausfiltern
  110.         REPLACE hex_return WITH '~' INTO t_object_cont-line.
  111.         IF sy-subrc > 0.
  112.           EXIT.
  113.         ENDIF.
  114.       ENDDO.
  115. *-- Zeilenumbruch
  116.       SPLIT t_object_cont-line AT '~' INTO TABLE t_test.
  117.       LOOP AT t_test.
  118.         WRITE: /4 t_test-line.
  119.       ENDLOOP.
  120.     ENDLOOP.
  121.     SKIP 1.
  122.  
  123.  
  124. *&---------------------------------------------------------------------*
  125. *&      Form  get_loio
  126. *&---------------------------------------------------------------------*
  127. *       text
  128. *----------------------------------------------------------------------*
  129. *      -->T_SOFM     text
  130. *----------------------------------------------------------------------*
  131. FORM get_loio TABLES i_phio_object STRUCTURE sdokobject USING i_sofm TYPE sofm.
  132.   DATA rcode TYPE sonv-rcode.
  133.   DATA  objcont TYPE TABLE OF soli.
  134.   DATA  objhead TYPE TABLE OF soli.
  135.   DATA objpara     LIKE selc OCCURS 0 WITH HEADER LINE.
  136.   DATA objparb     LIKE soop1 OCCURS 0 WITH HEADER LINE.
  137.   DATA attach_id TYPE  soodk.
  138.  
  139.   DATA t_sofm TYPE TABLE OF sofm.
  140.   DATA s_sofm TYPE sofm.
  141.  
  142.  
  143.  
  144.   DATA :
  145.   file_access_info TYPE TABLE OF sdokfilaci,
  146.   file_content_ascii TYPE TABLE OF sdokcntasc,
  147.   file_content_binary TYPE TABLE OF sdokcntbin.
  148.  
  149.  
  150.  
  151.  
  152.   SELECT * FROM sofm INTO TABLE t_sofm WHERE
  153.   foltp = i_sofm-doctp AND
  154.   folyr = i_sofm-docyr AND
  155.   folno = i_sofm-docno.
  156.  
  157. *
  158. *  attach_id-objtp = 'EXT'.
  159. *  attach_id-objyr = 41.
  160. *  attach_id-objno = '000000000022'.
  161.  
  162.   LOOP AT t_sofm INTO s_sofm.
  163.  
  164.     attach_id-objtp = s_sofm-doctp.
  165.     attach_id-objyr = s_sofm-docyr.
  166.     attach_id-objno = s_sofm-docno.
  167.  
  168. *     Read content of the object if desired
  169.     PERFORM data_select(sapfsso1) TABLES objhead
  170.                                          objcont
  171.                                          objpara
  172.                                          objparb
  173.                                    USING attach_id
  174.                                          rcode.
  175.  
  176.  
  177.     DATA loio_object TYPE sdokobject.
  178.     DATA s_phio_object TYPE sdokobject.
  179.  
  180.     DATA context TYPE TABLE OF sdokpropty.
  181.  
  182.     CALL FUNCTION 'SO_KPRO_DATA_FROM_OBJCONT_GET'
  183.       IMPORTING
  184.         loio_object       = loio_object
  185.       TABLES
  186.         objcont           = objcont
  187.         context           = context
  188.       EXCEPTIONS
  189.         missing_kpro_data = 1
  190.         OTHERS            = 2.
  191.  
  192.     IF sy-subrc <> 0.
  193.     ENDIF.
  194.  
  195.     CALL FUNCTION 'SO_LOIO_PHIO_GET'
  196.       EXPORTING
  197.         loio_object        = loio_object
  198.       IMPORTING
  199.         phio_object        = s_phio_object
  200.       TABLES
  201.         context            = context
  202.       EXCEPTIONS
  203.         kpro_inconsistency = 105
  204.         x_error            = 1000
  205.         OTHERS             = 1000.
  206.  
  207.     APPEND s_phio_object TO i_phio_object.
  208.  
  209.  
  210.     CALL FUNCTION 'SDOK_PHIO_LOAD_CONTENT'
  211.       EXPORTING
  212.         object_id                 = s_phio_object
  213. *   CLIENT                    = SY-MANDT
  214. *   AS_IS_MODE                =
  215. *   RAW_MODE                  =
  216. *   TEXT_AS_STREAM            =
  217.      TABLES
  218.        file_access_info          = file_access_info
  219.        file_content_ascii        = file_content_ascii
  220.        file_content_binary       = file_content_binary
  221.      EXCEPTIONS
  222.        not_existing              = 1
  223.        not_authorized            = 2
  224.        no_content                = 3
  225.        bad_storage_type          = 4
  226.        OTHERS                    = 5.
  227.  
  228.     IF sy-subrc <> 0.
  229.     ENDIF.
  230.  
  231.  
  232.  
  233. ENDFORM.                    "get_loio
  234.  
GeSHi ©


gruß Jens
Tron
.....
.....
 
Posts: 1112
Joined: Sat Aug 04, 2007 10:21 pm

Re: CL_DOCUMENT_BCS - ADD_ATTACHMENT - DOCX/XLSX

Postby Mark4068 » Tue Nov 15, 2016 10:22 am

Hallo Jens,

du bist genial!!! :lol:
Hab gerade dein Programm getestet und die Daten gefunden. SUUUPER!

Ein Problem habe ich noch :roll:

Der FB SDOK_PHIO_LOAD_CONTENT bringt die Daten in der Tabelle file_content_binary
richtig zurück....nur hat die eine Länge von 1022.
In der Methode CL_DOCUMENT_BCS=>ADD_ATTACHMENT hat die Tabelle aber nur eine Länge von 255!

Ich hab's nun so versucht:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1.  DATA: x  TYPE xstring,
  2.       lt TYPE solix_tab,
  3.       ls TYPE solix,
  4.       file_content_binary TYPE TABLE OF sdokcntbin,
  5.       ls_bin              TYPE sdokcntbin.
  6.  
  7.       LOOP AT file_content_binary INTO ls_bin.
  8.         x = ls_bin-line.
  9.         CALL METHOD cl_document_bcs=>xstring_to_solix
  10.           EXPORTING
  11.             ip_xstring = x
  12.           RECEIVING
  13.             rt_solix   = lt.
  14.  
  15.         LOOP AT lt INTO ls.
  16.           APPEND ls TO object_hex.
  17.         ENDLOOP.
  18.         REFRESH lt.
  19.  
  20.       ENDLOOP.
  21.  
GeSHi ©


Jedoch zerschiesst mir das die Daten scheinbar und ich kann die Anhänge wg. Formatfehler nicht öffnen. Hast du eine andere Methode die Tabelle in die richtige Länge zu konvertieren?

Viele Grüsse
Stefan
Mark4068
...
...
 
Posts: 111
Joined: Tue Sep 02, 2008 12:13 pm

Re: CL_DOCUMENT_BCS - ADD_ATTACHMENT - DOCX/XLSX

Postby Tron » Tue Nov 15, 2016 12:15 pm

Freut mich..
Der Trick geht so..
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. DATA lbuffer TYPE xstring.
  2. DATA contents_hex TYPE solix_tab.
  3. DATA numbytes TYPE i.
  4. DATA: BEGIN OF lt_pdf OCCURS 0,
  5. t(134),
  6. END OF lt_pdf.
  7.  
  8. * I_tab nach Xstring
  9. CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
  10. EXPORTING
  11. input_length = numbytes
  12. IMPORTING
  13. buffer = lbuffer
  14. binary_tab = lt_pdf
  15. EXCEPTIONS
  16. failed = 1
  17. OTHERS = 2.
  18.  
  19. IF sy-subrc <> 0.
  20.  
  21. * Xstring nach Itab
  22.  
  23. CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
  24. EXPORTING
  25. buffer = lbuffer
  26. binary_tab = contents_hex[].
GeSHi ©


gruß Jens
Tron
.....
.....
 
Posts: 1112
Joined: Sat Aug 04, 2007 10:21 pm

Re: CL_DOCUMENT_BCS - ADD_ATTACHMENT - DOCX/XLSX

Postby Mark4068 » Tue Nov 15, 2016 12:30 pm

Hallo Jens,

du bist echt genial! :lol:

Hab auch noch rumgesucht und folgende Methoden gefunden:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1.  DATA: x type XSTRING.
  2.  
  3.     TRY.
  4.     CALL METHOD cl_bcs_convert=>xtab_to_xstring
  5.       EXPORTING
  6.         it_xtab    = file_content_binary
  7.       receiving
  8.         rv_xstring = x.
  9.      CATCH cx_bcs .
  10.     ENDTRY.
  11.  
  12.     TRY.
  13.     CALL METHOD cl_bcs_convert=>xstring_to_xtab
  14.       EXPORTING
  15.         iv_xstring = x
  16.       IMPORTING
  17.         et_xtab    = object_hex.
  18.      CATCH cx_bcs .
  19.     ENDTRY.
  20.  
GeSHi ©


Damit funktioniert die Konvertierung auch, im Grunde genommen machen die Methoden
nichts anderes, als deine Funktionsbausteine.

Nochmals vielen, vielen Dank! Endlich kann ich das Thema abschliessen.

Viele Grüsse
Stefan
Mark4068
...
...
 
Posts: 111
Joined: Tue Sep 02, 2008 12:13 pm

Re: CL_DOCUMENT_BCS - ADD_ATTACHMENT - DOCX/XLSX

Postby Tron » Tue Nov 15, 2016 1:51 pm

Prima. 8)
Tron
.....
.....
 
Posts: 1112
Joined: Sat Aug 04, 2007 10:21 pm

Previous

Return to ABAP® Core

Who is online

Users browsing this forum: No registered users and 1 guest

cron