PDA

Ver la Versión Completa : Envío de Fax


Daniela Gutierrez
15/01/07, 19:40:16
Hola Foro,

Por favor si tienen alguna información de enviar y recibir documentos directamente desde y hacia sistemas SAP, les sabría agradecer me lo hicieran llegar.
Muchas gracias,

Daniela G.:cool:

andyoscky
17/01/07, 19:58:28
Aca te envio un programa que encontre que te puede ayudar con los primeros pasos
How can you send a fax from within ABAP/4 programs?
The following program shows you how to send a fax from within ABAP/4. The report is delivered
in the standard system and is used in Transaction SCOM for the function "Send test fax".

Only the method via the call of SAPscript with DEVICE='TELEFAX', described below, ensures the
generation of a correct transmission request, independent of the R/3 release and of the used
fax server solution and its configuration.

The regular printing (for example, with NEW-PAGE PRINT ON...) on an output device created in
the spool administration of the device class 'Telefax' does generally not work!

REPORT RSKSENDF MESSAGE-ID SK.
**********************************************************************

* Test report to send a test fax
* sends a fax to the number <TO_CNTRY>-<TO_NMBER>
* containing an automatically generated message text.
**********************************************************************

TABLES: USR03.
PARAMETERS: TO_CNTRY LIKE T005-LAND1 OBLIGATORY,
TO_NMBER LIKE TSP01-RQTELENUM OBLIGATORY,
FROM_USR(30) TYPE C DEFAULT SY-UNAME,
TO_RECIP(30) TYPE C DEFAULT SY-UNAME.
* SAPscript content ITAB
DATA: BEGIN OF TEST_DOC OCCURS 10.
INCLUDE STRUCTURE TLINE.
DATA: END OF TEST_DOC.
* SAPscript header struct
DATA BEGIN OF HEADER.
INCLUDE STRUCTURE THEAD.
DATA END OF HEADER.
**********************************************************************

INITIALIZATION.
**********************************************************************

* get county from user addres in usr03
* system->user profile->user address
* check if not empty
SELECT SINGLE * FROM USR03 WHERE BNAME = SY-UNAME.
IF SY-SUBRC = 0 AND USR03-LAND1 <> SPACE.
TO_CNTRY = USR03-LAND1.
ENDIF.
**********************************************************************

START-OF-SELECTION.
**********************************************************************

PERFORM FILL_UP_TEST_DOC.
PERFORM SHOW_TEST_DOC.
**********************************************************************

AT PF08.
**********************************************************************

PERFORM SEND_FAX TABLES TEST_DOC USING TO_CNTRY
TO_NMBER.
**********************************************************************

AT SELECTION-SCREEN ON TO_NMBER.
**********************************************************************

PERFORM CHECK_NUMBER USING TO_CNTRY TO_NMBER.
*&---------------------------------------------------------------------*

*& Form CHECK_NUMBER
*&---------------------------------------------------------------------*

FORM CHECK_NUMBER USING
COUNTRY
NUMBER.
DATA: SERVICE LIKE TSKPA-SERVICE VALUE 'TELEFAX',
LEN LIKE SY-FDPOS.
FIELD-SYMBOLS <P>.
* windows GUI push the ? from mandatory input instead
of overwriting it
LEN = STRLEN( TO_NMBER ).
IF LEN > 1.
SUBTRACT 1 FROM LEN.
ASSIGN TO_NMBER+LEN(1) TO <P>.
IF <P> = '?'.
<P> = SPACE.
ENDIF.
ENDIF.
* official check FM
CALL FUNCTION 'TELECOMMUNICATION_NUMBER_CHECK'
EXPORTING
COUNTRY = COUNTRY
NUMBER = NUMBER
SERVICE = SERVICE.
* on old 21?/22? release you may have to handle the
exception
* because the Function uses RAISE instead of
MESSAGE... RAISING....
ENDFORM. " CHECK_NUMBER
*&---------------------------------------------------------------------*

*& Form FILL_UP_TEST_DOC
*&---------------------------------------------------------------------*

* fills test text in itab TEST_DOC *
* real life example needs to get real life data *
*----------------------------------------------------------------------*

FORM FILL_UP_TEST_DOC.
DATA: DATUM(12) TYPE C,
UZEIT(10) TYPE C.
* SAPscript initialization
* of course, you may want to set a few parameter
(FORM,LAYOUT,....)
CALL FUNCTION 'INIT_TEXT'
EXPORTING
ID = 'ST '
LANGUAGE = SY-LANGU
NAME = 'FOO-BAR'
OBJECT = 'TEXT'
IMPORTING
HEADER = HEADER
TABLES
LINES = TEST_DOC
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0.
MESSAGE A400 WITH 'INIT_TEXT'.
ENDIF.
PERFORM ADD_EMPTY_LINE.
WRITE: SY-DATUM TO DATUM.
WRITE: SY-UZEIT TO UZEIT.
PERFORM ADD_LINES USING 'This is test Telefax'(001)
DATUM UZEIT.
PERFORM ADD_EMPTY_LINE.
PERFORM ADD_LINES USING 'From: &'(002) FROM_USR SPACE.

PERFORM ADD_LINES USING 'To: &'(003) TO_RECIP SPACE.
PERFORM ADD_LINES USING 'Fax number: & &'(004)
TO_CNTRY TO_NMBER.
PERFORM ADD_EMPTY_LINE.
PERFORM ADD_LINES USING
'This is a test fax send by Report RSKSENDF'(005)
SPACE SPACE.
PERFORM ADD_LINES USING 'on SAP system & '(006)
SY-SYSID SPACE.
PERFORM ADD_EMPTY_LINE.
PERFORM ADD_LINES USING
'the quick brown fox jumps over the lazy dog.'(101)
SPACE SAPCE.
PERFORM ADD_LINES USING
'THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG.'(102)
SPACE SAPCE.
PERFORM ADD_EMPTY_LINE.
PERFORM ADD_LINES USING 'End of test'(007) SPACE
SPACE.
ENDFORM. " FILL_UP_TEST_DOC
*&---------------------------------------------------------------------*

*& Form ADD_LINES
*&---------------------------------------------------------------------*

* printf a line an appends it in test_doc *
*----------------------------------------------------------------------*

* --> cformat format.
* --> p1 param1
* --> p2 param2
*----------------------------------------------------------------------*

FORM ADD_LINES USING CFORMAT P1 P2.
TEST_DOC-TDFORMAT = '/'.
TEST_DOC-TDLINE = CFORMAT.
IF TEST_DOC-TDLINE CA '&'.
REPLACE '&' WITH P1 INTO TEST_DOC-TDLINE.
IF TEST_DOC-TDLINE CA '&'.
REPLACE '&' WITH P2 INTO TEST_DOC-TDLINE.
ENDIF.
ENDIF.
APPEND TEST_DOC.
ENDFORM. " ADD_LINES
*&---------------------------------------------------------------------*

*& Form ADD_EMPTY_LINE
*&---------------------------------------------------------------------*

* appends an empty line to test_doc *
*----------------------------------------------------------------------*

FORM ADD_EMPTY_LINE.
TEST_DOC-TDFORMAT = '/'.
CLEAR TEST_DOC-TDLINE.
APPEND TEST_DOC.
ENDFORM. " ADD_EMPTY_LINE
*&---------------------------------------------------------------------*

*& Form SHOW_TEST_DOC
*&---------------------------------------------------------------------*

* lists the test doc for aproval *
* *
*>>>> this is for fun only because PRINT_TEXT also
offers a preview *
*
*----------------------------------------------------------------------*

FORM SHOW_TEST_DOC.
FORMAT COLOR COL_BACKGROUND INTENSIFIED OFF.
WRITE: / 'Test fax would look like this:'(020).
ULINE.
SKIP.
LOOP AT TEST_DOC.
IF TEST_DOC-TDLINE <> SPACE.
WRITE:/ TEST_DOC-TDLINE.
ELSE.
SKIP.
ENDIF.
ENDLOOP.
SKIP.
ULINE.
FORMAT COLOR COL_POSITIVE INTENSIFIED OFF.
WRITE: 'Press PF8 to send it'(021).
ENDFORM. " SHOW_TEST_DOC
*&---------------------------------------------------------------------*

*& Form SEND_FAX
*&---------------------------------------------------------------------*

* send fax by calling SAPscript *
*----------------------------------------------------------------------*

* Note: Instead of using PRINT_TEXT you may also *
* call OPEN_FORM / WRITE_FORM_LINES / CLOSE_FORM, *
* this allows you to use a similar program structure *

* as with NEW-PAGE PRINT ON / WRITE / NEW-PAGE PRINT
OFF *
*----------------------------------------------------------------------*

FORM SEND_FAX
TABLES DOC2FAX STRUCTURE TEST_DOC
USING COUNTRY
NUMBER.
DATA: SID(5) TYPE N.
DATA BEGIN OF POPT.
INCLUDE STRUCTURE ITCPO.
DATA END OF POPT.
DATA BEGIN OF PRES.
INCLUDE STRUCTURE ITCPP.
DATA END OF PRES.
CLEAR POPT.
POPT-TDCOPIES = 1. " one copy
* POPT-TDDEST = " done internaly by script,
* POPT-TDPRINTER = " do not fill !!!
POPT-TDNEWID = 'X'. " do not reuse old spool request
POPT-TDDATASET = 'TEST'(022). " fill as you want
POPT-TDSUFFIX1 = 'FAX'(023). " fill as you want
POPT-TDSUFFIX2 = SY-UNAME. " fill as you want
POPT-TDIMMED = 'X'. " send now
POPT-TDLIFETIME = 8. " keep 8 days in spool
POPT-TDTELENUM = NUMBER. " number without country code

POPT-TDTELELAND = COUNTRY. " country of recipient
POPT-TDCOVER = 'test fax'(024).
POPT-TDCOVTITLE = 'test fax'(024).
* POPT-TDIEXIT = 'X'.
CALL FUNCTION 'PRINT_TEXT'
EXPORTING
APPLICATION = 'TX'
ARCHIVE_INDEX = ' '
ARCHIVE_PARAMS = ' '
DEVICE = 'TELEFAX' "<<< here we say: fax it !
DIALOG = 'X'
HEADER = HEADER
OPTIONS = POPT
IMPORTING
RESULT = PRES
TABLES
LINES = DOC2FAX
EXCEPTIONS
OTHERS = 01.
* do not bother with exception in sample code
* CANCELED = 01
* DEVICE = 02
* FORM = 03
* OPTIONS = 04
* UNCLOSED = 05
* UNKNOWN = 06
* FORMAT = 07
* TEXTFORMAT = 08
* EXTERNAL = 09.
IF SY-SUBRC = 0.
* arriving here means we could send:
SID = PRES-TDSPOOLID.
IF SID > '00000'.
MESSAGE S433 WITH SID.
ENDIF.
LEAVE .
ELSE.
* do not bother with exception in sample code
MESSAGE A400 WITH 'PRIN_TEXT'.
ENDIF.
ENDFORM. " SEND_FAX

Daniela Gutierrez
18/01/07, 17:36:17
Muchas gracias
Andyoscky

Esto esta perfecto :)

Saludos,

CARLOS.ARGUETA
22/01/07, 16:37:04
Err.tmpo.ejec. CALL_FUNCTION_UC_STRUCT
Excep. CX_SY_DYN_CALL_ILLEGAL_TYPE
Fecha y hora 22.01.2007 11:39:05
Linea 253

241 POPT-TDNEWID = 'X'. " do not reuse old spool request
242 POPT-TDDATASET = 'TEST'(022). " fill as you want
243 POPT-TDSUFFIX1 = 'FAX'(023). " fill as you want
244 POPT-TDSUFFIX2 = SY-UNAME. " fill as you want
245 POPT-TDIMMED = 'X'. " send now
246 POPT-TDLIFETIME = 8. " keep 8 days in spool
247 POPT-TDTELENUM = NUMBER. " number without country code
248
249 POPT-TDTELELAND = COUNTRY. " country of recipient
250 POPT-TDCOVER = 'test fax'(024).
251 POPT-TDCOVTITLE = 'test fax'(024).
252 * POPT-TDIEXIT = 'X'.
>>>>> CALL FUNCTION 'PRINT_TEXT'
254 EXPORTING
255 APPLICATION = 'TX'
256 ARCHIVE_INDEX = ' '
257 ARCHIVE_PARAMS = ' '
258 DEVICE = 'TELEFAX' "<<< here we say: fax it !
259 DIALOG = 'X'
260 HEADER = HEADER
261 OPTIONS = POPT
262 IMPORTING
263 RESULT = PRES
264 TABLES
265 LINES = DOC2FAX
266 EXCEPTIONS
267 OTHERS = 01.

Carlos Argueta
ABAP