Thursday, April 23, 2009

Datei auf Applikationsserver umbenennen

Eine Datei auf dem Applikationsserver kann per ABAP umbenannt werden
(Kontrolle mit AL11). Dafür und andere File-Kommandos ist die Klasse
CL_ISH_AT_EDI_FILETRANSFER nützlich.
Beispielcode:

DATA: lo_edi TYPE REF TO cl_ish_at_edi_filetransfer,
ls_exppath TYPE rnwat_edi_filcom.

ls_exppath-exppathtype = 'S'.
ls_exppath-exppath = '/usr/sap/GLD/DVEBMGS00/work/'.

CREATE OBJECT lo_edi
EXPORTING
is_exppath = ls_exppath.

CALL METHOD lo_edi->rename_file
EXPORTING
i_filename_src = 'altes_file.xml'
i_filename_dest = 'neues_file.doc'
EXCEPTIONS
error_renaming_file = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
WRITE: / 'File successfully renamed'.
ENDIF.

Friday, April 17, 2009

Eigenes IDoc bauen

Ein eigenes IDoc kann mit der Transaktion WE30 erstellt werden. Ggf.
müssen vorher neue Segmente mit WE31 angelegt werden.
Kann das IDoc keinem bestehenden Nachrichtentyp zugeordnet werden, muss
für die Ein- und Ausgangsverarbeitung zusätzlich ein eigener
Nachrichtentyp erstellt werden. Hierfür die Transaktion WE81 verwenden.
Dem Nachrichtentyp wird dann mit Transaktion WE82 das neue IDoc zugeordnet.

Der Name des IDocs sollte 8 Zeichen nicht überschreiten, damit
Funktionsbausteine, die für Ein-/Ausgangsverarbeitung benutzt werden,
damit umgehen können. Einige alte aber noch aktive FuBa's wie
MASTER_IDOC_DISTRIBUTE verwenden das alte Kontrollsatzformat EDIDC, das
nur Namen mit max. 8 Zeichen unterstützen.

Tuesday, April 14, 2009

Tabelle in CSV-Format umwandeln

Um Tabellen in das CSV-Format umzuwandeln (Zellwerte mit Seperator, z.B.
Semikolon, getrennt), kann der Funktionsbaustein SAP_CONVERT_TO_CSV_FORMAT
verwendet werden.


TYPES ly_text_data(4096) TYPE c.
DATA: lt_datatable TYPE STANDARD TABLE OF ...,
lv_filename TYPE string,
lt_csv TYPE STANDARD TABLE OF ly_text_data,
lv_csv_line TYPE ly_text_data,
lv_errortext TYPE string.

[...]

* Catch system exceptions:
CATCH SYSTEM-EXCEPTIONS
open_dataset_no_authority = 1
dataset_cant_open = 2
dataset_write_error = 3
dataset_cant_close = 4
OTHERS = 99.

* Open dataset:
OPEN DATASET lv_filename FOR OUTPUT IN TEXT MODE
ENCODING DEFAULT "4.7
MESSAGE lv_errortext.

IF sy-subrc <> 0.
IF lv_errortext IS INITIAL.
lv_errortext = 'Error on opening file'. "#EC NOTEXT
ENDIF.

MESSAGE lv_errortext TYPE 'E'.
ENDIF.

* convert result table into csv format
CALL FUNCTION 'SAP_CONVERT_TO_CSV_FORMAT'
TABLES
i_tab_sap_data = lt_datatable
CHANGING
i_tab_converted_data = lt_csv
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.

IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

* Transfer data:
LOOP AT lt_csv INTO lv_csv_line.
TRANSFER lv_csv_line TO lv_filename.
ENDLOOP.

* Close dataset:
CLOSE DATASET lv_filename.
ENDCATCH.

* Check for error:
CASE sy-subrc.
WHEN 1.
MESSAGE 'No authority' TYPE 'E'. "#EC NOTEXT
WHEN 2.
MESSAGE 'Can not open file' TYPE 'E'. "#EC NOTEXT
WHEN 3.
MESSAGE 'File write error' TYPE 'E'. "#EC NOTEXT
WHEN 4.
MESSAGE 'Can not close file' TYPE 'E'. "#EC NOTEXT
WHEN OTHERS.
MESSAGE 'Error on creating file' TYPE 'E'. "#EC NOTEXT
ENDCASE.

Monday, April 6, 2009

Senden DEBITOR (Kunde) per IDoc

Kundenstammdaten können per IDoc verteilt werden. Ein aktives Versenden
ist mit der Transaktion BD12 möglich
Mittels des Porttyps (ABAP-PSS) kann ein eigener Funktionsbaustein
eingebunden werden, der das IDoc verarbeiten kann. Als Vorlage kann der
FuBa own_function verwendet werden.