*---------------------------------------------------------------------*
* Z _ B J H _ S M A R T F O R M S _ M I N I *
* *
* Autor: Bernd Haase (BJH Software) *
*---------------------------------------------------------------------*
* Beispielprogramm für die Ansteuerung des Druckes über Smart Forms. *
* Programm führt keine Aktionen aus, liest auch keine Daten ein ! *
* Das dazugehörige SmartForms-Formular benötigt nur 2 Ausgaben in *
* einem Fenster, wobei der Texte und die Grafik Eingabeparameter sind.*
* Das Programm kann als Test genutzt werden, da alle Aktionsrichtungen*
* wie Druck, Fax und Email aktiv hinterlegt sind. *
*---------------------------------------------------------------------*
* (S) SmartForms *
*---------------------------------------------------------------------*
* 18.02.2005 BHaa: Programm für einen Grafiktest erstellt *
* 18.05.2005 BHaa: Emailversand über SmartForms *
*---------------------------------------------------------------------*
REPORT z_bjh_smartforms_mini.
DATA:
i TYPE i,
j TYPE i,
x_mark(1) TYPE c VALUE 'X',
* interne SAP-Codierung für das SmartForms-Formular
fm_name TYPE rs38l_fnam,
* Ausgabegerät für Smart Forms Ausgabe
wa_smartforms_geraet TYPE ssfctrlop,
wa_smartforms_output TYPE ssfcompop,
* Smart Forms Email-Funktion. Datendeklaration (BOR).
sender_id LIKE swotobjid,
appl_object_id LIKE swotobjid,
recipient_id LIKE swotobjid.
*---------------------------------------------------------------------*
* *
* A u s w a h l b i l d s c h i r m *
* *
*---------------------------------------------------------------------*
* Eingabeparameter zum Formular
SELECTION-SCREEN: BEGIN OF BLOCK a1 WITH FRAME TITLE text-901.
PARAMETER:
* Formularname, welches Formular gedruckt wird
pm_forms TYPE tdsfname DEFAULT 'ZMGL_BJH_MINI',
* welchen Text ausgeben
pm_text(30) TYPE c,
* welche Grafik zeichnen
pmgrafik LIKE stxbitmaps-tdname DEFAULT 'BJH_DAMPFLOK'.
SELECTION-SCREEN: END OF BLOCK a1.
* Ausgabeoptionen
SELECTION-SCREEN: BEGIN OF BLOCK a2 WITH FRAME TITLE text-902.
PARAMETER:
*********
* Druck *
*********
pmxdruck TYPE c RADIOBUTTON GROUP grp2 DEFAULT 'X',
* Ausgabedrucker. Achtung: Referenzierung auf TSP03D-PADEST geht nicht !
pm_wohin LIKE tsp03-padest,
*******
* Fax *
*******
pmxfax TYPE c RADIOBUTTON GROUP grp2,
* Faxen. In welches Land
pm_land LIKE t005-intca,
* Faxen, zu welcher Telefonnummer
pm_telnr LIKE adr2-tel_number,
*********
* Email *
*********
pmxemail TYPE c RADIOBUTTON GROUP grp2,
* an welche Emailadresse was schicken
pm_email(50) TYPE c. "50 Zeichen sollten ausreichen
* Zusatzoptionen
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31) text-921 FOR FIELD pmdialog.
* Kontrollausgabe am Bildschirm
PARAMETERS pmdialog TYPE c DEFAULT 'X' AS CHECKBOX.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(31) text-922 FOR FIELD pm_f8.
* Druckansicht
PARAMETERS pm_f8 TYPE c DEFAULT 'X' AS CHECKBOX.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN: END OF BLOCK a2.
INITIALIZATION.
***********************************************************************
* *
* P R O G R A M M S T A R T *
* *
***********************************************************************
START-OF-SELECTION.
PERFORM upro-smartforms.
END-OF-SELECTION.
EXIT.
*---------------------------------------------------------------------*
* S M A R T F O R M S *
*---------------------------------------------------------------------*
* Ab hier Routinen für den Aufruf des Drucken über die Programme von *
* Smart Forms. Alle Werte und Tabellen sind vorbereitet und brauchen *
* nur durch die Funktionsbausteine übergeben werden *
*---------------------------------------------------------------------*
FORM upro-smartforms.
* internen Programmparameter für Formular herausfinden
* Formularname (pm_forms) ist als Variable gehalten
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING formname = pm_forms
* variant = ' '
* direct_call = ' '
IMPORTING fm_name = fm_name
EXCEPTIONS no_form = 1
no_function_module = 2
OTHERS = 3.
*---------------------------------------------------------------------*
* Fehlerroutine und Meldung (Standard SAP-Meldung)
*---------------------------------------------------------------------*
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ENDIF.
CLEAR: wa_smartforms_geraet, wa_smartforms_output.
*---------------------------------------------------------------------*
* Entsprechend der Ausgabeart Werte ermitteln und vorbesetzen.
* Standard ist Druck (Option: Druck, Email und Fax sind aktiv)
*---------------------------------------------------------------------*
CASE x_mark.
* Formular als Email ausgeben. Da Aufbereitung mehrere Funktionen
* beinhaltet, diese über ein Extra-Unterprogramm gesteuert.
WHEN pmxemail.
MOVE 'MAIL' TO wa_smartforms_geraet-device.
PERFORM upro-smartforms_email.
* Formular als Fax aufbereiten
WHEN pmxfax.
* Smart Forms Definition für Faxausgabe
MOVE 'TELEFAX' TO wa_smartforms_geraet-device.
* Länderkennzeichen (ISO-Code), Basis hier aus dem Lieferantenstamm
MOVE pm_land TO wa_smartforms_output-tdteleland.
* Land und Telefaxnummer vorbesetzen. Sicherheitshalber bei der
* Faxnummer nur Zahlen zulassen und nur das entsprechende Feld
* aufbereiten, auch wenn SmartForms einige Sonderzeichen unterstützt
i = 0.
j = 0.
WHILE i < 31.
CASE pm_telnr+i(1).
WHEN '0' OR '1' OR '2' OR '3' OR '4'
OR '5' OR '6' OR '7' OR '8' OR '9'.
MOVE pm_telnr+i(1) TO
wa_smartforms_output-tdtelenum+j(1).
ADD 1 TO j.
ENDCASE.
ADD 1 TO i.
ENDWHILE.
PERFORM upro-smartforms_druck.
* Standardausgabe. Drucker. Keinerlei Werte zu besetzen
* Ausgabedrucker nur interessant im Hintergrundprozeß
WHEN OTHERS.
MOVE ' ' TO wa_smartforms_geraet-device.
MOVE pm_wohin TO wa_smartforms_output-tddest.
PERFORM upro-smartforms_druck.
ENDCASE.
ENDFORM.
*---------------------------------------------------------------------*
* S M A R T F O R M S - E M A I L *
*---------------------------------------------------------------------*
* Verwendung des Kommunikations-Interfaces über SmartForms: *
* *
* Dieser Report zeigt an einem einfachen Beispiel, wie man auch über *
* SmartForms von der erweiterten Funktionalität des neuen Kommunika- *
* tions-Interfaces profitieren kann. *
*---------------------------------------------------------------------*
* A C H T U N G !!! 13102003 *
* Programmmacke SmartForms: bei Aufbereitung Email und Schablone im *
* Formular beachten: Höhe muß in cm angegeben sein und generell 1,00. *
* Andere Werte (Zahl oder Maßeinheit) führen zum Abbruch, SQLcode = 1 *
*---------------------------------------------------------------------*
FORM upro-smartforms_email.
TABLES: soud. "SAPoffice: Benutzerdefinition
* Makros für Zugriff aufs BOR
INCLUDE .
* Datendeklaration (BOR), allgemeine Datendeklaration (global)
* DATA: sender_id LIKE swotobjid,
* appl_object_id LIKE swotobjid,
* recipient_id LIKE swotobjid,
DATA:
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.
* Deklaration eines Containers
swc_container container.
************************************************************************
* Sender (BOR-Objekt-ID)
************************************************************************
* Adreßtypen, mögliche Werte
* B=interner SAP Benutzer, Benutzerkennung (s. Absender)
* P=Persönliche Verteilerliste
* C=Allgemeine Verteilerliste
* F=Faxnummer
* U=Internet-Adresse
* R=Remote-Mail-Adresse (innerhalb R/3-R/3 Systemverbundes)
* X=X.400-Adresse
* G=ID einer Organisationseinheit
* H=Name einer Organisationseinheit
************************************************************************
* 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.
* Adresse (aufrufender interner Benutzer oder Email)
swc_set_element container 'AddressString' pm_email.
* Adreßtyp (Internet-Adresse)
swc_set_element container 'TypeId' 'U'.
* 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.
* Container leeren
swc_clear_container container.
* send express flag
swc_set_element container 'SendExpress' 'X'.
* Methodenlauf
swc_call_method recipient 'SetExpress' container.
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE 'E' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
************************************************************************
* 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.
***********************************************************************
* Aufruf von Smart Forms *
* *
* Auflösen des Recipient-Objekts in "flache" Recipient-Objekte mit *
* Hilfe der Methode Expand. Bei genau einer Emailadresse ist diese *
* Auflösung eigentlich nicht nötig. Für den allgemeinen Fall wird *
* diese Vorgehensweise jedoch dringend empfohlen, deswegen ist es *
* hier so programmiert. *
***********************************************************************
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.
* Anzeige am Bildschirm, da sonst nie die Adresse angegeben wird
CONCATENATE 'Emailversand an:' pm_email
'am' sy-datum 'um' sy-uzeit
INTO wa_smartforms_output-tdtitle
SEPARATED BY space.
* 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.
PERFORM upro-smartforms_druck.
IF sy-subrc NE 0.
MESSAGE a634(so) WITH 'OPEN_FORM' sy-subrc.
ENDIF.
ENDLOOP.
ENDFORM.
*---------------------------------------------------------------------*
* S M A R T F O R M S - D R U C K *
*---------------------------------------------------------------------*
* Druck oder Faxen des aufbereiteten Dokumentes. Es braucht nur noch *
* der Funktionsbaustein zum Ausdrucken des Formulares aufgerufen *
* werden. *
*---------------------------------------------------------------------*
FORM upro-smartforms_druck.
* Die Ausgabe erscheint immer über den Dialog-Bildschirm (Standard)
* auch dieser könnte ausgeschaltet werden. Dazu dienen folgende
* Parameter.
* Pop-Up für Druckeinstellung. Achtung, negierte Logik, wenn gesetzt,
* soll Pop-Up erscheinen, Übergabeparameter muß dann ausgeschaltet sein
* WICHTIGER HINWEIS: Pop-Up kann nur unterdrückt werden, wenn Benutzer-
* stamm sauber gepflegt ist (su01d - Festwerte)
IF pmdialog = 'X'.
MOVE ' ' TO wa_smartforms_geraet-no_dialog.
ELSE.
MOVE 'X' TO wa_smartforms_geraet-no_dialog.
ENDIF.
* Druckansicht (Eingabeparameter), Sofortausgabe und Spoolauftrag
* löschen als Konstanten
MOVE pm_f8 TO wa_smartforms_geraet-preview.
MOVE 'X' TO wa_smartforms_output-tdimmed.
MOVE 'X' TO wa_smartforms_output-tddelete.
* Funktionsbaustein zum Ausrucken des Formulares
CALL FUNCTION fm_name
EXPORTING
* archive_index =
* archive_parameters =
control_parameters = wa_smartforms_geraet
mail_appl_obj = appl_object_id
mail_recipient = recipient_id
mail_sender = sender_id
output_options = wa_smartforms_output
* user_settings = 'X'
dr_grafik = pmgrafik
dr_text = pm_text
* importing
* document_output_info =
* job_output_info =
* job_output_options =
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
*---------------------------------------------------------------------*
* Fehlerroutine und Meldung (Standard SAP-Meldung)
*---------------------------------------------------------------------*
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM.
*--- Copyright BJH Software, 2003 -----*
***** Ende *****
* Copyright BJH Software, Datei überarbeitet am: 21.5.2005