Code: Alles auswählen.
REPORT RSSOKIF2 .
************************************************************************
* Verwendung des Kommunikations-Interfaces über SAPscript:
*
* Dieser Report zeigt an einem einfachen Beispiel, wie man auch
* über SAPscript von der erweiterten Funktionalität des
* neuen Kommunikations-Interfaces profitieren kann.
* Hier gezeigt am Beispiel des FAXens.
*
************************************************************************
TABLES: SOUD.
PARAMETERS: LAND LIKE SOXFX-REC_STATE DEFAULT 'DE' OBLIGATORY.
PARAMETERS: NUMBER LIKE SOXFX-REC_FAX OBLIGATORY.
* Makros für Zugriff aufs BOR
INCLUDE <CNTN01>.
* Datendeklaration
* * (BOR)
DATA: SENDER_ID LIKE SWOTOBJID,
APPL_OBJECT_ID LIKE SWOTOBJID,
RECIPIENT_ID LIKE SWOTOBJID,
RECIPIENT TYPE SWC_OBJECT,
SENDER TYPE SWC_OBJECT,
RECIPIENT_TAB TYPE SWC_OBJECT OCCURS 0 WITH HEADER LINE,
FOLDER TYPE SWC_OBJECT,
BEGIN OF SOFMFOL_KEY,
FOLDERTYPE LIKE SOFM-FOLTP,
FOLDERYEAR LIKE SOFM-FOLYR,
FOLDERNUMBER LIKE SOFM-FOLNO,
TYPE LIKE SOFM-DOCTP,
YEAR LIKE SOFM-DOCYR,
NUMBER LIKE SOFM-DOCNO,
FORWARDER LIKE SOUB-USRNAM,
END OF SOFMFOL_KEY,
BOR_KEY LIKE SWOTOBJID-OBJKEY,
ADDRESS_STRING LIKE SOXNA-FULLNAME.
* * (SAPscript)
DATA: HEADER LIKE THEAD,
RESULT LIKE ITCPP,
LINES LIKE TLINE OCCURS 0 WITH HEADER LINE,
OTFDATA LIKE ITCOO OCCURS 0,
OPTIONS LIKE ITCPO.
* Deklaration eines Containers
SWC_CONTAINER CONTAINER.
************************************************************************
* Sender (BOR-Objekt-ID) *
************************************************************************
* Objektreferenz auf ein RECIPIENT-Objekt erzeugen
SWC_CREATE_OBJECT SENDER 'RECIPIENT' SPACE.
* Container leeren
SWC_CLEAR_CONTAINER CONTAINER.
* Adresse (aufrufender interner Benutzer)
SWC_SET_ELEMENT CONTAINER 'AddressString' SY-UNAME.
* Adreßtyp (interner Benutzer)
SWC_SET_ELEMENT CONTAINER 'TypeId' 'B'.
* Aufruf der Methode RECIPIENT.FindAddress
SWC_CALL_METHOD SENDER 'FindAddress' CONTAINER.
* Ausgabe der zur Ausnahme gehörigen Fehlermeldung
IF SY-SUBRC NE 0.
MESSAGE ID SY-MSGID TYPE 'E' NUMBER SY-MSGNO.
ENDIF.
* Ermittlung der BOR-Objekt-ID
SWC_OBJECT_TO_PERSISTENT SENDER SENDER_ID.
************************************************************************
* Empfänger (BOR-Objekt-ID) *
************************************************************************
* Objektreferenz auf ein RECIPIENT-Objekt erzeugen
SWC_CREATE_OBJECT RECIPIENT 'RECIPIENT' SPACE.
* Container leeren
SWC_CLEAR_CONTAINER CONTAINER.
* Importparameter: Adreßtyp (FAX)
SWC_SET_ELEMENT CONTAINER 'TypeId' 'F'.
* Importparameter: FAX-Nummer
MOVE: LAND TO ADDRESS_STRING,
NUMBER TO ADDRESS_STRING+3.
SWC_SET_ELEMENT CONTAINER 'AddressString' ADDRESS_STRING.
* Aufruf der Methode RECIPIENT.CreateAddress
SWC_CALL_METHOD RECIPIENT 'CreateAddress' CONTAINER.
* Ausgabe der zur Ausnahme gehörigen Fehlermeldung
IF SY-SUBRC NE 0.
MESSAGE ID SY-MSGID TYPE 'E' NUMBER SY-MSGNO.
ENDIF.
* Ermittlung der BOR-Objekt-ID
SWC_OBJECT_TO_PERSISTENT RECIPIENT RECIPIENT_ID.
************************************************************************
* Anwendungsobjekt (BOR-Objekt-ID) *
************************************************************************
* Dieser Parameter (MAIL_APPL_OBJECT) sollte mit der BOR-Objekt-ID
* des Anwendungsobjekts (z.B. Rechnung, Bestellung), von dem aus
* das Senden initiiert wird, gefüllt werden. Beim Senden wird dieses
* Anwendungsobjekt automatisch mit dem Dokument verknüpft.
* In diesem Beispiel wird als Anwendungsobjekt-ID die BOR-ID des
* Eingangs des Reportaufrufers genommen.
* Lesen der Eingangs-ID des Aufrufers
SELECT * FROM SOUD WHERE SAPNAM LIKE SY-UNAME AND DELETED = ' '.
ENDSELECT.
IF SY-SUBRC NE 0.
* Aufrufer besitzt kein Office => wird angelegt
CALL FUNCTION 'SO_USER_AUTOMATIC_INSERT'
EXPORTING
SAPNAME = SY-UNAME
EXCEPTIONS
NO_INSERT = 1
SAP_NAME_EXIST = 2
X_ERROR = 3
OTHERS = 4.
IF SY-SUBRC NE 0.
* Office konnte nicht angelegt werden: Inbox-ID = SPACE
CLEAR SOUD.
ELSE.
* * Neuer Versuch: Lesen der Eingangs-ID des Aufrufers
SELECT * FROM SOUD WHERE SAPNAM LIKE SY-UNAME AND DELETED = ' '.
ENDSELECT.
ENDIF.
ENDIF.
* Anlegen eines Anwendungsobjekts (hier vom Typ SOFMFOL)
CLEAR SOFMFOL_KEY.
SOFMFOL_KEY-TYPE = 'FOL'.
SOFMFOL_KEY-YEAR = SOUD-INBYR.
SOFMFOL_KEY-NUMBER = SOUD-INBNO.
BOR_KEY = SOFMFOL_KEY.
IF NOT BOR_KEY IS INITIAL.
SWC_CREATE_OBJECT FOLDER 'SOFMFOL' BOR_KEY.
IF SY-SUBRC = 0.
* * Ermittlung der BOR-Objekt-ID
SWC_OBJECT_TO_PERSISTENT FOLDER APPL_OBJECT_ID.
IF SY-SUBRC NE 0.
CLEAR APPL_OBJECT_ID.
ENDIF.
ENDIF.
ELSE.
CLEAR APPL_OBJECT_ID.
ENDIF.
************************************************************************
* Anlegen des Textbausteins, d.h. des zu faxenden Textes *
************************************************************************
REFRESH LINES.
CLEAR LINES.
LINES-TDLINE = 'FAXen über SAPscript mit Device = MAIL,'(104).
APPEND LINES.
CLEAR LINES.
LINES-TDFORMAT = '* '.
LINES-TDLINE = 'd.h. über das Business Communication Interface.'(103).
APPEND LINES.
* Füllen des Text-Headers für SAPscript
CLEAR HEADER.
HEADER-TDOBJECT = 'TEXT'.
HEADER-TDNAME = 'Testfax'(102).
HEADER-TDID = 'ST'.
HEADER-TDSPRAS = SY-LANGU.
HEADER-TDFORM = 'SYSTEM'.
CLEAR OPTIONS.
CONCATENATE 'Senden über SAPscript'(101) SY-DATUM SY-UZEIT
INTO OPTIONS-TDTITLE SEPARATED BY SPACE.
************************************************************************
* Aufruf von SAPscript *
************************************************************************
* Auflösen des Recipient-Objekts in "flache" Recipient-Objekte mit
* Hilfe der Methode Expand.
* Bei diesem konkreten Beispiel (Recipient = genau eine Fax-Nummer)
* ist diese Auflösung eigentlich nicht nötig. Für den allgemeinen Fall
* wird diese Vorgehensweise jedoch dringend empfohlen und daher in
* diesem Beispiel vorgeführt.
SWC_CLEAR_CONTAINER CONTAINER.
REFRESH RECIPIENT_TAB.
SWC_CALL_METHOD RECIPIENT 'Expand' CONTAINER.
IF SY-SUBRC NE 0.
MESSAGE ID SY-MSGID TYPE 'E' NUMBER SY-MSGNO.
ENDIF.
* "Flache" Recipient-Objekte aus Container lesen
SWC_GET_TABLE CONTAINER 'ResultTable' RECIPIENT_TAB.
IF SY-SUBRC NE 0.
REFRESH RECIPIENT_TAB.
ENDIF.
* Loop über die "flachen" Recipient-Objekt.
LOOP AT RECIPIENT_TAB.
* * Für jedes "flache" Recipient-Objekt ein Aufruf von SAPscript:
* * BOR-Objekt-ID des Handles ermitteln
SWC_OBJECT_TO_PERSISTENT RECIPIENT_TAB RECIPIENT_ID.
* * Aufruf von OPEN_FORM
CALL FUNCTION 'OPEN_FORM'
EXPORTING
DEVICE = 'MAIL'
DIALOG = SPACE
FORM = HEADER-TDFORM
LANGUAGE = HEADER-TDSPRAS
OPTIONS = OPTIONS
MAIL_SENDER = SENDER_ID
MAIL_RECIPIENT = RECIPIENT_ID
MAIL_APPL_OBJECT = APPL_OBJECT_ID
EXCEPTIONS
CANCELED = 1
DEVICE = 2
FORM = 3
OPTIONS = 4
UNCLOSED = 5
MAIL_OPTIONS = 6
OTHERS = 7.
IF SY-SUBRC NE 0.
MESSAGE A634(SO) WITH 'OPEN_FORM' SY-SUBRC.
ENDIF.
CALL FUNCTION 'WRITE_FORM_LINES'
EXPORTING
HEADER = HEADER
TABLES
LINES = LINES
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC NE 0.
MESSAGE A634(SO) WITH 'WRITE_FORM_LINES' SY-SUBRC.
ENDIF.
CALL FUNCTION 'CLOSE_FORM'
IMPORTING
RESULT = RESULT
TABLES
OTFDATA = OTFDATA
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC NE 0.
MESSAGE A634(SO) WITH 'CLOSE_FORM' SY-SUBRC.
ENDIF.
* * Commit work wird unbedingt benötigt für Verknüpfung
COMMIT WORK.
* Protokollausgabe
WRITE: / 'Dokument erfolgreich in die Sendequeue gestellt.'(001).
WRITE: / 'Falls für die Kommunikationsart FAX kein Sendeprozess'(002).
WRITE: / 'regelmäßig eingeplant ist, bitte Sendeprozess in'(003).
WRITE: / 'SAPconnect (TA SCOT) von Hand starten.'(004).
ENDLOOP.