ABAP传输的字符串长度最长为255,从代码传递字符串到SMARTFORMS只能传255。
处理方法:
把字符串拆分成自己想要的长度,一串最多255,然后存到内表里面。
* "构造序列号内表---一个长255
* DATA(A) = STRLEN( LS_DATA-SERNR ). "这里的LS_DATA-SERNR是一个长度为10000的字符串
* DATA(B) = CEIL( A / 255 ).
* DATA(C) = A MOD 255.
* DATA(POS) = 0.
* DO B - 1 TIMES.
* "添加到内表中
* APPEND LS_DATA-SERNR TO LT_SERNR.
* "偏移量加255,pos += 255;
* POS += 255.
* ENDDO.
* "把最后一段不足255的也添加到内表中
* APPEND LS_DATA-SERNR+POS(C) TO LT_SERNR.
* MOVE-CORRESPONDING LT_SERNR TO LT_DATA.
然后把内表传输到SMARTFORMS去显示。
SMARTFORMS接收内表,然后显示(使用TABLE或者TEMPLATE,TABLE可以自动换页)。
(注意:这里接收到的内表不能在SMARTFORMS去使用LOOP循环把内表里面的东西拼接出来,这里拼接出来的依然只能传输255个字符,可以理解为从SMARTFORMS的程序行传输字符串到SMARTFORMS显示也最多传输255个字符)。
复杂的一个例子:
LOOP AT LT_DATA2 INTO DATA(LS_DATA) .
CLEAR LT_DATA[].
"拆分再按三个一组拼接
SPLIT LS_DATA-SERNR AT '/' INTO TABLE LT_SERNR_TEMP.
DATA(LV_INDEX2) = LINES( LT_SERNR_TEMP ).
DATA(LV_INDEX3) = LV_INDEX2.
"拼接
LOOP AT LT_SERNR_TEMP INTO DATA(LW_SERNR_TEMP).
IF SY-TABIX MOD 3 = 0.
DATA(LV_INDEX) = SY-TABIX.
READ TABLE LT_SERNR_TEMP INDEX LV_INDEX - 2 INTO DATA(LW_SERNR_TEMP2).
READ TABLE LT_SERNR_TEMP INDEX LV_INDEX - 1 INTO DATA(LW_SERNR_TEMP1).
LW_SERNR_TEMP-SERNR = LW_SERNR_TEMP2-SERNR && '/' && LW_SERNR_TEMP1-SERNR && '/' && LW_SERNR_TEMP-SERNR.
APPEND LW_SERNR_TEMP TO LT_SERNR.
LV_INDEX2 = LV_INDEX2 - 3.
ENDIF.
ENDLOOP.
CLEAR: LW_SERNR_TEMP,LW_SERNR_TEMP1,LW_SERNR_TEMP2.
IF LV_INDEX2 = 1.
READ TABLE LT_SERNR_TEMP INDEX LV_INDEX3 INTO LW_SERNR_TEMP1.
APPEND LW_SERNR_TEMP1 TO LT_SERNR.
ELSEIF LV_INDEX2 = 2.
READ TABLE LT_SERNR_TEMP INDEX LV_INDEX3 - 1 INTO LW_SERNR_TEMP2.
READ TABLE LT_SERNR_TEMP INDEX LV_INDEX3 - 0 INTO LW_SERNR_TEMP1.
LW_SERNR_TEMP-SERNR = LW_SERNR_TEMP2-SERNR && '/' && LW_SERNR_TEMP1-SERNR.
APPEND LW_SERNR_TEMP TO LT_SERNR.
ENDIF.
MOVE-CORRESPONDING LT_SERNR TO LT_DATA.
CLEAR LT_SERNR.
* MOVE-CORRESPONDING LS_DATA TO IS_DATA.
CALL FUNCTION LV_FNAME
EXPORTING
CONTROL_PARAMETERS = LS_CONTROL_PARAM
OUTPUT_OPTIONS = LS_COMPOSER_PARAM
* USER_SETTINGS = ''
GS_HEADER = LS_DATA
TABLES
GT_DATA = LT_DATA
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
* IMPLEMENT SUITABLE ERROR HANDLING HERE
ENDIF.
ENDLOOP.
CALL FUNCTION 'SSF_CLOSE'
IMPORTING
JOB_OUTPUT_INFO = LS_JOB_OUTPUT_INFO
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
OTHERS = 4.
ENDFORM.
上面例子中LS_DATA-SERNR是长度为1400的字符串,先按照‘/’拆分到内表。
SPLIT LS_DATA-SERNR AT '/' INTO TABLE LT_SERNR_TEMP.
然后把内表里面的以
000000002021060075/000000002021060074/000000002021060073
这样的格式为一串拼接起来,所以是三个一组,三个一组即为内表的一行。
可以看到已经按照格式拆分出来了。
然后把这个内表传递给SMARTFORMS显示。
结果: