ABAP 显示长文本
业务背景:目前项目上 采购订单打印输出EXCEL的需求:允许客户进行长文本编辑、更改后保存到采购订单抬头,并且打印输出到EXCEL,且下次进入到相同的采购订单打印时,能取出相应的长文本进行excel输出。
一般来讲,这种类型于这种编辑后输出的需求直接在ALV上对应的列设置为可编辑即可,但是这次需求不太一样,它是一个长文本输出, 而ALV的列显示最大128位(这里的意思是:如果ALV的列里存了1000位长度的文本,但是它只会显示128位,但是如果输出成EXCEL时候是可以正常把1000位全都输出的)。为了解决alv不能显示长文本的问题,稍微研究了下长文本的形式。
长文本:在SAP内,我是用一个容器来实现的,或者应该不用容器也是可以的(比如docking),在屏幕上画一个容器,然后显示出来。
效果展示
其中保存按钮是当用户在点击后会把当前的文本更新回ALV,取消按钮则不做任何操作直接返回
主要代码
*&---------------------------------------------------------------------*
*& Module STATUS_9100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE STATUS_9100 OUTPUT.
SET PF-STATUS 'STATUS_9100'.
SET TITLEBAR 'TITLEBAR_9100'.
IF LCL_EDITOR IS INITIAL.
"实例化容器
CREATE OBJECT LCL_CONTAINER
EXPORTING
CONTAINER_NAME = 'ZCON'.
"实例化texteditor控制器
CREATE OBJECT LCL_EDITOR
EXPORTING
* MAX_NUMBER_CHARS =
STYLE = 0
* WORDWRAP_MODE = CL_GUI_TEXTEDIT=>WORDWRAP_AT_FIXED_POSITION "固定位置显示
WORDWRAP_POSITION = -1
WORDWRAP_TO_LINEBREAK_MODE = CL_GUI_TEXTEDIT=>TRUE "可以回车换行
* FILEDROP_MODE = DROPFILE_EVENT_OFF
PARENT = LCL_CONTAINER
* LIFETIME =
* NAME =
EXCEPTIONS
ERROR_CNTL_CREATE = 1
ERROR_CNTL_INIT = 2
ERROR_CNTL_LINK = 3
ERROR_DP_CREATE = 4
GUI_TYPE_NOT_SUPPORTED = 5
OTHERS = 6.
CALL METHOD LCL_EDITOR->SET_TEXT_AS_R3TABLE
EXPORTING
TABLE = GT_LINES
EXCEPTIONS
ERROR_DP = 1
ERROR_DP_CREATE = 2
.
"隐藏TOOLBAR
CALL METHOD LCL_EDITOR->SET_TOOLBAR_MODE
EXPORTING
TOOLBAR_MODE = 0
EXCEPTIONS
ERROR_CNTL_CALL_METHOD = 1
INVALID_PARAMETER = 2
OTHERS = 3
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9100 INPUT.
CLEAR SAVE_CODE.
SAVE_CODE = OK_CODE.
CLEAR OK_CODE.
REFRESH GT_LINES.
CASE SAVE_CODE.
WHEN 'BACK' OR 'EXIT' OR 'ZCANCEL' OR 'CANCEL'.
IF LCL_EDITOR IS NOT INITIAL.
CLEAR:LCL_EDITOR.
* CALL METHOD LCL_EDITOR->FREE.
ENDIF.
IF LCL_CONTAINER IS NOT INITIAL.
CLEAR:LCL_CONTAINER.
* CALL METHOD LCL_CONTAINER->FREE.
ENDIF.
LEAVE TO SCREEN 0.
WHEN 'ZSAVE'.
"读取textedictor中的内容并输出
CLEAR:GT_LINES.
CALL METHOD LCL_EDITOR->GET_TEXT_AS_R3TABLE
* EXPORTING
* ONLY_WHEN_MODIFIED = FALSE
IMPORTING
TABLE = GT_LINES
* IS_MODIFIED =
EXCEPTIONS
ERROR_DP = 1
ERROR_CNTL_CALL_METHOD = 2
ERROR_DP_CREATE = 3
POTENTIAL_DATA_LOSS = 4
OTHERS = 5.
IF G_CG_TYPE EQ 'CGDD'.
CLEAR:GS_OUTPUT-ZTEXT_CGDD.
APPEND LINES OF GT_LINES TO GS_OUTPUT-ZTEXT_CGDD.
ELSEIF G_CG_TYPE EQ 'CGHT'.
CLEAR:GS_OUTPUT-ZTEXT_CGDD.
APPEND LINES OF GT_LINES TO GS_OUTPUT-ZTEXT_CGHT.
ENDIF.
IF LCL_EDITOR IS NOT INITIAL.
CLEAR:LCL_EDITOR.
* CALL METHOD LCL_EDITOR->FREE.
ENDIF.
IF LCL_CONTAINER IS NOT INITIAL.
CLEAR:LCL_CONTAINER.
* CALL METHOD LCL_CONTAINER->FREE.
ENDIF.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架