ABAP问题记录--->SMARTFORMS上想要显示的文本长度超过255

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显示。
结果:
在这里插入图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值