Application Development Blog Posts
Learn and share on deeper, cross technology development topics such as integration and connectivity, automation, cloud extensibility, developing at scale, and security.
cancel
Showing results for 
Search instead for 
Did you mean: 
GeorgeShlyakhov
Participant


When you prepare HTML-data for ‘SO_NEW_DOCUMENT_ATT_SEND_API1’ function module it could be convenient to make a new internal table line for each tag (or several tags). Like this:



But, this approach has certain drawback. In fact, the greater part of each table line would remain unoccupied. Accordingly, the internal table with HTML code would have been looking like this:



But, the line of HTML table has type ‘SOLISTI1’ (CHAR255), consequently, a very large amount of memory remains useless.

When program started, generated inner table has become inadmissibly spacious.

So, as there is a limitation that e-mail can’t be heavier than 20 megabytes, it is often impossible to send large e-mails via ‘SO_NEW_DOCUMENT_ATT_SEND_API1’ FM.

To avoid this, it would be expedient to use following function module to optimize inner table with HTML code:
FUNCTION z_html_optimize.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*" IMPORTING
*" REFERENCE(WHOLE_WORDS) TYPE FLAG DEFAULT ' '
*" REFERENCE(LINE_LEN) TYPE INT4 DEFAULT 255
*" CHANGING
*" REFERENCE(CT_TAB) TYPE RSPC_T_TEXT
*"----------------------------------------------------------------------

TYPE-POOLS abap.

DATA:
l_in_len TYPE i,
l_free_len TYPE i,
l_diff TYPE i,
ls_out TYPE solisti1,
lt_out TYPE rspc_t_text.

FIELD-SYMBOLS:
<s_in> LIKE LINE OF ct_tab.

LOOP AT ct_tab ASSIGNING <s_in>.

l_in_len = STRLEN( <s_in>-line ).
l_free_len = line_len - STRLEN( ls_out-line ).

IF l_in_len <= l_free_len.
CONCATENATE ls_out-line <s_in>-line INTO ls_out-line.
CONDENSE ls_out-line.
ELSE.
IF whole_words = abap_true.
IF l_free_len >= l_in_len.
CONCATENATE ls_out-line <s_in>-line INTO ls_out-line.
CONDENSE ls_out-line.
APPEND ls_out TO lt_out.
CLEAR ls_out.
ELSE.
APPEND ls_out TO lt_out.
CLEAR ls_out.
CONCATENATE ls_out-line <s_in>-line INTO ls_out-line.
CONDENSE ls_out-line.
ENDIF.
ELSE.
IF l_free_len > 0.
CONCATENATE ls_out-line <s_in>-line(l_free_len) INTO ls_out-line.
CONDENSE ls_out-line.
ENDIF.

APPEND ls_out TO lt_out.

CLEAR ls_out.

IF l_free_len < 0.
l_free_len = 0.
ENDIF.

l_diff = l_in_len - l_free_len.

IF l_diff > 0.
CONCATENATE ls_out-line <s_in>-line+l_free_len(l_diff) INTO ls_out-line.
CONDENSE ls_out-line.
ENDIF.

ENDIF.
ENDIF.

AT LAST.
IF l_in_len <= l_free_len.
APPEND ls_out TO lt_out.
ELSE.
IF whole_words = abap_true.
APPEND ls_out TO lt_out.
ELSE.
IF l_diff > 0.
APPEND ls_out TO lt_out.
ENDIF.
ENDIF.
ENDIF.
ENDAT.
ENDLOOP.

ct_tab[] = lt_out[].

ENDFUNCTION.

If you use it like this:



The inner table would have no useless space:



And it would have allowable weight, so FM ‘SO_NEW_DOCUMENT_ATT_SEND_API1’ would easily send derivable e-mail.