The Problem
: I need to develop a tutorial to be published on my personal website. Unfortunately, my personal website
being free-hosted, can’t afford heavy images generated
using print-screen for Z transactions. It should work on MiniSAP – SAP Release 6.10 (Basis/ABA) [ Who cares
about the rest of the world ???? ]
Other Benefits : Unlike print-screen
- 
- HTML pages are scrollable and light.
- Also there will not be any resolution related problems as in case of images.
- Users can cut & paste the data from HTML Screen , if required.
- The downloaded SCREEN-HTML can be used for documentation
 purpose and for sharing it over the web.
- At times SAP Users demand for exact Print of Screens
 rather than a List. This utility, being generic, can be
 used to enable PRINT facility for simple transactions.
 
Requirement
: The attempt is to provide
“Print-Screen to HTML” functionality for simple SAP
Transaction Screens .
This function module can be called
at ‘Print’ command for the current screen.
It will generate a HTML file to display simple SAP
Transaction screens ( Fields with Contents ) as HTML.
The functionality should be generic in nature and
re-usable for other transactions.
 
Processing :
- 
- The function module Z_RMTIWARI_PRINTSCREEN_TO_HTML is called, in the PAI of the screen to be printed,
 at command for ‘Print’.
 
 
CASE sy-ucomm.
*…….
WHEN ‘PRINT’.
data : lv_program type sy-repid,
lv_dynnr   type sy-dynnr.
lv_program =  sy-repid.
lv_dynnr   = sy-dynnr.
CALL FUNCTION ‘Z_RMTIWARI_PRINTSCREEN_TO_HTML’
EXPORTING
PROGRAM       = lv_program
DYNPRO        = lv_dynnr.
- …….
- ENDCASE.
- 
- This FM ‘Z_RMTIWARI_PRINTSCREEN_TO_HTML’
 first generates HTML code for a blank
 screen-display of current screen. This is achieved by
 submitting a program Z_RMTIWARI_PRINTSCREEN_TO_HTML
 which in turn calls FM ‘RS_SCRP_PRINT_IN_LIST’
 for the transaction screen. The program generates a
 spool for a simple list of the blank Screen [ Only the field name
 and blank input/output fields ].
- This list will be read using FM LIST_FROM_MEMORY. Further, it will be converted into HTML.
 Also the field-values needs to
 be supplemented in the subsequent processing.
- FM ‘WWW_HTML_FROM_LISTOBJECT’ is used to convert List to
 HTML and further actual field values, retrieved using
 ‘DYNP_VALUES_READ’, are imposed on the generated
 HTML and downloaded to the local folder. The final HTML file displays a screen similar to
 SAPGui Xn screen including the field values.
 
- This FM ‘Z_RMTIWARI_PRINTSCREEN_TO_HTML’
Result :
It seems IFRAMEs can’t be used here. Also, I tried pasting the html code directly but SDN’s weblog is not able to show it properly. So no other go…
Check this link to see the result page:
Result Screen
Function Module :
FUNCTION Z_RMTIWARI_PRINTSCREEN_TO_HTML.
*”—-
““Local interface:
*”  IMPORTING
*”     REFERENCE(PROGRAM) TYPE  SY-REPID
*”     REFERENCE(DYNPRO) TYPE  SY-DYNNR
*”  EXCEPTIONS
*”      DOWNLOAD_ERROR
*”—-
- Written By : Ram Manohar Tiwari
*
- Problem : I need to develop a tutorial to be published on my
- personal website. Unfortunately my personal website
- being free-hosted, can’t afford heavy images created
- using print-screen for Z transactions.
*
- Function : The attempt is to provide
- “Print-Screen to HTML” functionality for simple SAP
- Transaction Screens .
- This function module can be called
- at ‘Print’ command for the current screen.
- It will generate a HTML file to display simple SAP
- Transaction screens ( Fields with Contents ) as HTML.
- The functionality should be generic in nature and
- re-usable for other transactions.
*
- Other Benifits : Unlike print-screen the HTML pages are scrollable and
- light. Also there will not be any resolution related
- problems as in case of images. Further, users can
- cut & paste the data from HTML Screen , if required.
- The downloaded SCREEN-HTML can be used for documentation
- purpose and for sharing it over the web.
- At times SAP Users demand for exact Print of Screens
- rather than a List. This utility, being generic, can be
- used to enable PRINT facility for simple transactions.
*
- Processing : This FM first generates HTML code for a blank
- screen-display of current screen. This is achieved by
- submitting a program Z_RMTIWARI_PRINTSCREEN_TO_HTML
- which in turn calls FM ‘RS_SCRP_PRINT_IN_LIST’
- for the transaction screen. This program generates a
- simple list for the blank Screen [ Only the field name
- and blank input/output fields ]. Further this list
- requires to be converted into HTML and values needs to
- be supplemented in the subsequent processing.
- FM ‘WWW_HTML_FROM_LISTOBJECT’ is used to convert List to
- HTML and further actual field values, retrived using
- ‘DYNP_VALUES_READ’, are imposed on the generated
- HTML. The final HTML file displays a screen similar to
- SAPGui Xn screen including the field values.
*”—-
DATA: lv_dynpname TYPE TSTC-PGMNA,
lv_dynpnumb TYPE TSTC-DYPNO.
DATA: BEGIN OF lt_dynpvaluetab OCCURS 1.
INCLUDE STRUCTURE dynpread.
DATA: END   OF lt_dynpvaluetab.
DATA: lt_dyn_fields TYPE standard table of RSDCF with header line,
lt_lines      TYPE standard table of TLINE with header line.
DATA: lt_abap_list LIKE abaplist OCCURS 1.
DATA: BEGIN OF lt_html_tab OCCURS 0.
INCLUDE STRUCTURE w3html.
DATA: END OF lt_html_tab.
DATA: lv_html_tab_wide(50000) type c.
DATA: BEGIN OF lt_html_tab_str OCCURS 0,
line type string.
DATA: END OF lt_html_tab_str.
DATA: lt_icontab(32) OCCURS 10 WITH HEADER LINE.
—-
TYPE-POOLS: sbdst.
DATA: lineno TYPE i, length TYPE i, size TYPE i.
DATA: icon_wa  TYPE icon,
internal TYPE icon-internal,
existing TYPE c.
DATA: my_bds TYPE REF TO cl_bds_document_set,
key    TYPE sbdst_object_key,
files  TYPE sbdst_files,
wa     TYPE bapifiles.
data: filename type string,
filefilter type string,
path type string,
fullpath type string.
data: user_action type i.
data: cur_guicopdepage(4) type n.
—-
- Get Data Fields of current Screen.
lv_dynpname =  program.
lv_dynpnumb =  dynpro.
CALL FUNCTION ‘DYNPRO_FIELD_GET’
EXPORTING
DYNPRO           = lv_dynpnumb
PROGRAM          = lv_dynpname
TABLES
DYNP_FIELDS      = lt_dyn_fields
LINES            = lt_lines
EXCEPTIONS
DYNPRO_NOT_FOUND = 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.
REFRESH lt_dynpvaluetab.
LOOP AT lt_dyn_fields.
check not lt_dyn_fields-fldname is initial.
lt_dynpvaluetab-fieldname = lt_dyn_fields-DYNPRO_FLD.
APPEND lt_dynpvaluetab.
ENDLOOP.
DATA: lv_dynpname1 TYPE D020S-PROG,
lv_dynpnumb1 TYPE D020S-DNUM.
.
lv_dynpname1 = program.
lv_dynpnumb1 = dynpro.
.
- Read values of data-fields on the current screen.
CALL FUNCTION ‘DYNP_VALUES_READ’
EXPORTING
dyname               = lv_dynpname1
dynumb               = lv_dynpnumb1
TABLES
dynpfields           = lt_dynpvaluetab
EXCEPTIONS
invalid_abapworkarea = 1
invalid_dynprofield  = 2
invalid_dynproname   = 3
invalid_dynpronummer = 4
invalid_request      = 5
no_fielddescription  = 6
invalid_parameter    = 7
undefind_error       = 8
double_conversion    = 9
OTHERS               = 10.
IF sy-subrc = 0.
ENDIF.
- Call program and then get the list from memory.
- This program generates a simple list for the blank Screen
- .
- Further values needs to be supplemented in the subsequent
- processing.
SUBMIT Z_RMTIWARI_PRINTSCREEN_TO_HTML AND RETURN
WITH P_PROG  eq program
WITH P_DYNNR eq DYNPRO
EXPORTING LIST TO MEMORY.
CALL FUNCTION ‘LIST_FROM_MEMORY’
TABLES
LISTOBJECT       = lt_abap_list
- EXCEPTIONS
- NOT_FOUND = 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.
CALL FUNCTION ‘WWW_HTML_FROM_LISTOBJECT’
EXPORTING
- REPORT_NAME =
template_name = ‘WEBREPORTING_REPORT’
TABLES
html          =  lt_html_tab
listobject    =  lt_abap_list
listicons     =  lt_icontab.
- for UNICODE Systems we need a new type of DOWNLOAD: table-lines of
- html_table must be downloaded without end-marks or blanks between the
- lines (still to be developed!, the same problem as with EBCDIC)
DESCRIBE TABLE lt_html_tab LINES lineno .
DESCRIBE FIELD lt_html_tab LENGTH length in byte mode.
size = length * lineno.
data : lv_row type sy-tabix,
lv_text_pos type sy-fdpos.
field-symbols : type any.
data : lv_count type i,
lv_char type c,
lv_replace_str(200) type C,
lv_field_length type i,
lv_value_length type i.
LOOP AT lt_html_tab.
TRANSLATE lt_html_tab using ‘ *’.
CONCATENATE lv_html_tab_wide lt_html_tab  into lv_html_tab_wide.
ENDLOOP.
- lt_html_tab_wide[] = lt_html_tab[].
TRANSLATE lv_html_tab_wide using ‘* ‘.
- Step below is to overwrite the blank input / outputs fields
- retrived in the last step with actual runtime values of those
- fields.
LOOP AT lt_dynpvaluetab.
READ TABLE lt_dyn_fields
with key DYNPRO_FLD = lt_dynpvaluetab-FIELDNAME.
check sy-subrc eq 0.
SEARCH lv_html_tab_wide FOR lt_dyn_fields-stxt1 .
check sy-subrc eq 0.
lv_row = 1. “sy-tabix.
lv_text_pos = sy-fdpos.
- READ TABLE lt_html_tab_wide index lv_row.
- check sy-subrc eq 0.
search lv_html_tab_wide FOR ‘_’ . “STARTING AT lv_text_pos.
check sy-subrc eq 0.
- assign (lt_dynpvaluetab-FIELDNAME) to .
- = lt_dynpvaluetab-FIELDVALUE.
CONDENSE lt_dynpvaluetab-FIELDVALUE.
lv_count = sy-fdpos.
clear lv_replace_str.
DO 50 times.
if lv_count eq 50000.
exit.
endif.
lv_char = lv_html_tab_wide+lv_count(1).
if lv_char eq ‘_’.
lv_count = lv_count + 1.
concatenate ‘_’ lv_replace_str into lv_replace_str .
else.
EXIT.
ENDIF.
ENDDO.
IF lt_dynpvaluetab-FIELDVALUE CO ‘ 0123456789’.
lv_field_length = strlen( lv_replace_str ).
lv_value_length = strlen( lt_dynpvaluetab-FIELDVALUE ).
if lv_field_length ne lv_value_length.
lv_field_length = ( lv_field_length – lv_value_length ).
DO lv_field_length times.
CONCATENATE ‘0’ lt_dynpvaluetab-FIELDVALUE
into lt_dynpvaluetab-FIELDVALUE.
ENDDO.
endif.
endif.
REPLACE lv_replace_str IN lv_html_tab_wide
with lt_dynpvaluetab-FIELDVALUE.
- REPLACE ALL occurrences OF ‘_’ in lt_html_tab
- with ‘ ‘.
- 
- REPLACE SECTION OFFSET sy-fdpos length 1 OF lt_html_tab
 
- WITH lt_dynpvaluetab-FIELDVALUE.
- check sy-subrc eq 0.
- MODIFY lt_html_tab_wide index lv_row.
ENDLOOP.
REFRESH lt_html_tab[].
- DESCRIBE TABLE lt_html_tab_wide LINES lineno .
- DESCRIBE FIELD lt_html_tab_wide LENGTH length in byte mode.
- size = length * lineno.
- For the time-being limit of downloaded file size is set to 20000.
CALL FUNCTION ‘IQAPI_WORD_WRAP’
EXPORTING
TEXTLINE                  = lv_html_tab_wide
- DELIMITER = ‘ ‘
OUTPUTLEN = 255
- IMPORTING
- OUT_LINE1 =
- OUT_LINE2 =
- OUT_LINE3 =
TABLES
OUT_LINES                 = lt_html_tab
- EXCEPTIONS
- OUTPUTLEN_TOO_LARGE = 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.
*
- size = 20000.
- data : lv_pos1 type i.
- DO 80 times.
- lt_html_tab = lv_html_tab_wide+lv_pos1(255).
- lv_pos1 = lv_pos1 + 255.
- APPEND lt_html_tab.
*
- SEARCH lt_html_tab for ‘’.
- if sy-subrc eq 0.
- exit.
- endif.
- ENDDO.
- Save HTML File
concatenate text-ht1 ‘|’ into filefilter.
call method CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
EXPORTING
file_filter = filefilter
CHANGING
filename    = filename
path        = path
fullpath    = fullpath
user_action = user_action.
if user_action = CL_GUI_FRONTEND_SERVICES=>ACTION_OK.
call ‘CUR_LCL’ id ‘GUICP’  field cur_guicopdepage.
loop at lt_html_tab.
call function ‘SCP_TRANSLATE_CHARS’
EXPORTING
inbuff           = lt_html_tab
outcode          = cur_guicopdepage
csubst           = ‘X’
substc_space     = ‘X’
IMPORTING
outbuff          = lt_html_tab
EXCEPTIONS
invalid_codepage = 1
internal_error   = 2
cannot_convert   = 3
fields_bad_type  = 4
others           = 5.
if sy-subrc <> 0.
message i020(02) raising download_error.
endif.
modify lt_html_tab.
endloop.
CALL FUNCTION ‘GUI_DOWNLOAD’
EXPORTING
filename     = fullpath
FILETYPE     = ‘ASC’
- bin_filesize = size
TRUNC_TRAILING_BLANKS = ‘X’
TABLES
DATA_TAB     = lt_html_tab
EXCEPTIONS
OTHERS       = 99.
if sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
RAISING DOWNLOAD_ERROR.
endif.
endif.
- download of SAP icons appearing in the list
LOOP AT lt_icontab.
- no icon download if icon already exists in directory
CONCATENATE path lt_icontab ‘.gif’ INTO filename.
call method CL_GUI_FRONTEND_SERVICES=>FILE_EXIST
EXPORTING
file   = filename
RECEIVING
result = existing.
IF existing is initial.
- icon not there -> download from BDS
IF my_bds IS INITIAL.
CREATE OBJECT my_bds.
ENDIF.
TRANSLATE lt_icontab TO UPPER CASE.               “#EC
“SYNTCHAR
CONCATENATE ‘@’ lt_icontab+2 ‘@’ INTO internal.
SELECT SINGLE * FROM icon INTO icon_wa
WHERE internal = internal.
key =  icon_wa-name .
wa-comp_count = 1.
wa-directory = path.
wa-mimetype = ‘IMAGE/GIF’.
APPEND wa TO files.
CALL METHOD my_bds->get_with_files
EXPORTING
classname  = ‘SAP_ICONS’
classtype  = ‘OT’
object_key = key
CHANGING
files      = files
EXCEPTIONS
OTHERS     = 1.
IF sy-subrc NE 0.
MESSAGE i004(02) WITH key
‘Problem in getting ICON Files from BDS’.
ENDIF.
CLEAR files.
ENDIF.
ENDLOOP.
ENDFUNCTION.
Program :
&—-
*& Report  Z_RMTIWARI_PRINTSCREEN_TO_HTML                              *
*&                                                                     *
&—-
*& Written By : Ram Manohar Tiwari                                     *
*& Function   : It can print a spool-list for the specified Screen     *
&—-
REPORT  Z_RMTIWARI_PRINTSCREEN_TO_HTML          .
PARAMETERS : P_PROG     LIKE d020s-prog OBLIGATORY.
PARAMETERS : P_DYNNR(4) TYPE C          OBLIGATORY.
SET LANGUAGE ‘EN’..
CALL FUNCTION ‘RS_SCRP_PRINT_IN_LIST’
EXPORTING
ATTRIBS         = ‘ ‘
DYNNR           = P_DYNNR
FIELDS          = ‘ ‘
FULLSCR         = ‘X’
LOGIC           = ‘ ‘
PROGNAME        = P_PROG
- TRANS = ‘ ‘
- EXCEPTIONS
- CANCELLED = 1
- NOT_FOUND = 2
- OTHERS = 3
.
IF SY-SUBRC <> 0.
- MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
- WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Conclusion:
As you must have figured it out by now …it’s useless…well almost ????
New NetWeaver Information at SAP.com
Very Helpfull