ABAP for BASIS : Checking mass usage of printers at one go
Hello,
I have created one program which helps Basis team to do a mass test on printers, choosing random printers in a loop of defined count.
It prints one specific spool to any printer which is specified in the selection screen.
I believe such a program is not present in SCN and it would help new ABAPers to work on printers.
Output : Written on screen, so if program is run in background mode also, output can be captured in spool.
Code:
*&---------------------------------------------------------------------*
*& Report ZBC_SPOOL_MASSREPRINT
*&
*&---------------------------------------------------------------------*
REPORT ZBC_SPOOL_MASSREPRINT.
INCLUDE ZBC_SPOOL_MASSTOP. " Decalartions
*****************Declaration of Selection Screen*****************************
SELECTION-SCREEN : BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS : p_spool TYPE TSP01-RQIDENT OBLIGATORY, " Spool Request
p_count TYPE int4 OBLIGATORY. " Number of Count
SELECT-OPTIONS : s_device FOR TSP03-PADEST NO INTERVALS OBLIGATORY. " Device (Printers)
SELECTION-SCREEN END OF BLOCK b1.
*****************End of Declaration of Selection Screen***********************
INCLUDE ZBC_SPOOL_MASSDATAFM. " Include which has FM to print spool
START-OF-SELECTION.
PERFORM get_set_data. " FM to print spool on printers
*&---------------------------------------------------------------------*
*& Include ZBC_SPOOL_MASSTOP
*&---------------------------------------------------------------------*
TABLES : TSP01, TSP03. " Tables Dec.
TYPES : BEGIN OF ty_output, " Type Output
rqident TYPE TSP01-rqident,
count TYPE int4,
padest(10) TYPE c,
message(20) TYPE c,
END OF ty_output.
DATA : it_output TYPE STANDARD TABLE OF ty_output, " Internal Table and Work Area Dec.
wa_output TYPE ty_output,
it_padest TYPE STANDARD TABLE OF TSP03,
wa_padest TYPE TSP03,
v_random TYPE int4,
v_string TYPE string,
v_count type int4 VALUE 0,
v_spool TYPE TSP01-RQIDENT.
*&---------------------------------------------------------------------*
*& Include ZBC_SPOOL_MASSDATAFM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form GET_SET_DATA
*&---------------------------------------------------------------------*
FORM get_set_data .
IF p_count > 500 OR p_count < 1. " Loop count should be >= 1 and <= 500
MESSAGE text-003 TYPE 'I'.
LEAVE LIST-PROCESSING AND RETURN TO SCREEN 0.
ENDIF.
SELECT * INTO TABLE it_padest " Check if printers exists
FROM TSP03
WHERE padest IN s_device.
IF sy-subrc <> 0.
MESSAGE text-004 TYPE 'I'.
LEAVE LIST-PROCESSING AND RETURN TO SCREEN 0.
ENDIF.
SELECT SINGLE rqident INTO v_spool " Check if spool exists
FROM TSP01
WHERE RQIDENT = p_spool.
IF sy-subrc <> 0.
MESSAGE text-006 TYPE 'I'.
LEAVE LIST-PROCESSING AND RETURN TO SCREEN 0.
ENDIF.
v_count = 1.
WHILE v_count LE p_count.
DESCRIBE TABLE it_padest LINES v_lines.
CALL FUNCTION 'RANDOM_I4' " Generate a random INT4 number
EXPORTING
RND_MIN = 1
RND_MAX = v_lines
IMPORTING
RND_VALUE = v_random.
READ TABLE it_padest INTO wa_padest INDEX v_random. " Pick a random printer
IF sy-subrc <> 0.
CONTINUE.
ENDIF.
CALL FUNCTION 'DIALOG_SET_NO_DIALOG'.
CALL FUNCTION 'RSPO_OUTPUT_SPOOL_REQUEST' " Print Spool on Printer
EXPORTING
DEVICE = wa_padest-padest
spool_request_id = p_spool
EXCEPTIONS
ARCHIVE_DEST_INVALID = 1
ARCHIVE_DEST_NOT_FOUND = 2
ARCHIVE_DEST_NO_RIGHT = 3
CANNOT_ARCHIVE = 4
CHANGE_ARCHDEST_NO_RIGHT = 5
CHANGE_COPIES_NO_RIGHT = 6
CHANGE_DEST_NO_RIGHT = 7
CHANGE_DEVTYPE_NO_RIGHT = 8
CHANGE_PRIO_NO_RIGHT = 9
CHANGE_TELENUM_NO_RIGHT = 10
CHANGE_TITLE_NO_RIGHT = 11
DEST_INVALID = 12
DEST_NOT_FOUND = 13
DEST_NO_RIGHT = 14
INTERNAL_PROBLEM = 15
INVALID_FAX_ATTRIBUTE = 16
INVALID_PARAMETERS = 17
NON_OWNER_NO_RIGHT = 18
NO_LAYOUT = 19
NO_SPOOL_REQUEST = 20
OUT_AGAIN_NO_RIGHT = 21
SPOOLER_PROBLEM = 22
OTHERS = 23.
wa_output-rqident = p_spool.
CALL FUNCTION 'CONVERSION_EXIT_SPDEV_OUTPUT' " Change printer name to full descrip.
EXPORTING
input = wa_padest-padest
IMPORTING
OUTPUT = wa_output-padest.
IF sy-subrc <> 0. " Not Successful. Write Log
CASE sy-subrc.
WHEN 1. v_msg = 'ARCHIVE_DEST_INVALID'.
WHEN 2. v_msg = 'ARCHIVE_DEST_NOT_FOUND'.
WHEN 3. v_msg = 'ARCHIVE_DEST_NO_RIGHT'.
WHEN 4. v_msg = 'CANNOT_ARCHIVE'.
WHEN 5. v_msg = 'CHANGE_ARCHDEST_NO_RIGHT'.
WHEN 6. v_msg = 'CHANGE_COPIES_NO_RIGHT'.
WHEN 7. v_msg = 'CHANGE_DEST_NO_RIGHT'.
WHEN 8. v_msg = 'CHANGE_DEVTYPE_NO_RIGHT'.
WHEN 9. v_msg = 'CHANGE_PRIO_NO_RIGHT'.
WHEN 10. v_msg = 'CHANGE_TELENUM_NO_RIGHT'.
WHEN 11. v_msg = 'CHANGE_TITLE_NO_RIGHT'.
WHEN 12. v_msg = 'DEST_INVALID'.
WHEN 13. v_msg = 'DEST_NOT_FOUND'.
WHEN 14. v_msg = 'DEST_NOT_FOUND'.
WHEN 15. v_msg = 'INTERNAL_PROBLEM'.
WHEN 16. v_msg = 'INVALID_FAX_ATTRIBUTE'.
WHEN 17. v_msg = 'INVALID_PARAMETERS'.
WHEN 18. v_msg = 'NON_OWNER_NO_RIGHT'.
WHEN 19. v_msg = 'NO_LAYOUT'.
WHEN 20. v_msg = 'NO_SPOOL_REQUEST'.
WHEN 21. v_msg = 'OUT_AGAIN_NO_RIGHT'.
WHEN 22. v_msg = 'SPOOLER_PROBLEM'.
WHEN OTHERS. v_msg = 'Cannot Print on this device. Error.'.
ENDCASE.
wa_output-message = v_msg.
DELETE it_padest WHERE padest = wa_padest-padest. " deleting error printer from list of printers
WRITE : wa_output-rqident, wa_output-padest, wa_output-message.
ELSE. " Successful. Write Log
wa_output-count = v_count.
v_count = v_count + 1.
wa_output-message = text-005.
WRITE :/ wa_output-rqident, wa_output-padest, wa_output-count, wa_output-message.
ENDIF.
CLEAR : wa_output, v_msg, v_random, v_lines. " Clear temporary variables
ENDWHILE.
ENDFORM. " GET_SET_DATA
Thanks & Regards,
Rajat Bothra
ABAPer
Be the first to leave a comment
You must be Logged on to comment or reply to a post.