点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)大家好, 我正试图创建一个报告...
点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)大家好, 我正试图创建一个报告...
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
大家好,
我正试图创建一个报告,该报告将允许用户输入自由文本。 保存此文本时,将通过此报告触发工作流,并且该文本将成为tcode SBWP中的邮件正文。
但是,整个文本未显示在邮件正文中。 我什至将工作流容器设置为"多行",但仍然缺少一些文本。
下面是完整的步骤:
1)我创建了一个类ZCL_WF_TEST2。 创建了标准属性GS_OBJ类型的SIBFLPOR(即使我在课堂上不需要它)。
使用参数创建了一个事件。
2)创建了一个带有导入参数的方法。
3)下面是为该方法编写的代码:
方法UPDATE_PO。 数据:IF_SWF_IFS_PARAMETER_CONTAINER的lr_cont类型参考。 数据:lv_text TYPE char255。 呼叫方法cl_swf_evt_event => get_event_container 出口 im_objcateg ='CL' im_objtype ='ZCL_WF_TEST2' im_event ='START_WF' 接收 re_reference = lr_cont。 尝试。 lr_cont-> set( 出口 名称='EV_TEXT' 值= ev_TEXT)。 捕获cx_swf_cnt_cont_access_denied。 "不允许更改对容器的访问权限 捕获cx_swf_cnt_elem_access_denied。 "不得更改元素 捕获cx_swf_cnt_elem_not_found。 找不到元素 捕获cx_swf_cnt_elem_type_conflict。 值与当前参数之间的类型冲突 捕获cx_swf_cnt_unit_type_conflict。 单元和当前参数之间的类型冲突 捕获cx_swf_cnt_elem_def_invalid。 "元素定义(例如,类型名称)无效 捕捉cx_swf_cnt_container。 "容器服务中的异常 ENDTRY。 尝试。 调用方法cl_swf_evt_event => raise 出口 im_objcateg ='CL' im_objtype ='ZCL_WF_TEST2' im_event ='START_WF' im_objkey = gs_obj-instid im_event_container = lr_cont。 提交工作。 捕获cx_swf_evt_invalid_objtype。 捕捉cx_swf_evt_invalid_event。 ENDTRY。 终止方法。
4)然后在SWDD中,我为ZCL_WF_TEST2类型的实例(带有导入参数)和char255的长文本(带有导入参数)创建了一个容器元素。
5)绑定看起来像这样:
6)我创建了一个邮件步骤,并将文本作为邮件的正文,它将成为用户输入的文本。
7)然后,我创建了一个报表并称为屏幕100,在其中创建了布局中的自定义控件。 下面是报告的完整代码。
报告zlong_text。 数据:line_length TYPE i VALUE 254, editor_container类型参考cl_gui_custom_container, text_editor类型参考cl_gui_textedit。 数据:文本TYPE字符串。 选择开始。 呼叫屏幕" 100"。 *&------------------------------------------------ --------------------- * *&模块STATUS_0100输出 *&------------------------------------------------ --------------------- * *文字 * ------------------------------------------------- --------------------- * 模块状态_0100输出。 设置PF-STATUS'STATUS_100'。 如果text_editor是INITIAL。 创建对象editor_container 出口 container_name ='TEXTEDITOR' 例外情况 cntl_error = 1 cntl_system_error = 2 create_error = 3 lifetime_error = 4 lifetime_dynpro_dynpro_link = 5。 创建对象text_editor 出口 父= editor_container wordwrap_mode = cl_gui_textedit => wordwrap_at_fixed_position wordwrap_position = line_length wordwrap_to_linebreak_mode = cl_gui_textedit => true。 调用方法text_editor-> set_toolbar_mode 出口 工具栏模式= cl_gui_textedit => false。 调用方法text_editor-> set_statusbar_mode 出口 statusbar_mode = cl_gui_textedit => false。 万一。 * SET TITLEBAR'xxx'。 ENDMODULE。 *&------------------------------------------------ --------------------- * *&模块USER_COMMAND_0100输入 *&------------------------------------------------ --------------------- * *文字 * ------------------------------------------------- --------------------- * MODULE user_command_0100输入。 数据:l_ref类型引用到zcl_wf_test2。 案例sy-ucomm。 当"退出"时。 离开程序。 当"返回"时。 离开屏幕0。 当"保存"时。 调用方法text_editor-> get_textstream *出口 * ONLY_WHEN_MODIFIED = CL_GUI_TEXTEDIT => TRUE 输入 文字=文字 * IS_MODIFIED = 例外情况 error_cntl_call_method = 1 not_supported_by_gui = 2 其他= 3。 如果sy-subrc <> 0。 消息ID sy-msgid类型sy-msgty编号sy-msgno 与sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4。 万一。 呼叫方法cl_gui_cfw =>冲洗 例外情况 cntl_system_error = 1 cntl_error = 2 其他= 3。 消息"文本已成功保存",类型为" I"。 创建对象l_ref。 l_ref-> update_po(导出ev_text = text)。 如果sy-subrc = 0。 写入" WF已触发"。 万一。 结束。 ENDMODULE。
8)我执行报告,输入一些自由文本并保存。 按照我写的逻辑,我得到以下输出。
9)但是,当我打开收件箱时,可以看到我的姓氏未显示在邮件正文中。 我输入了另一个长文本,我看到只显示了一部分文本。
那么为什么整个文本都无法显示? 我缺少某处的约束吗?
此致
Manish
(135.0 kB)
嗨,
您能否尝试将容器元素声明为'TEXT'而不是'text'。
谢谢
谢谢 是时候解释整个情况了。
您是否在调用GET_TEXTSTREAM方法之后立即调试了变量TEXT的值。 文字是否完整?
Sandra Rossi 我 在方法调用GET_TEXTSTREAM之后调试TEXT的值。 在调用flush方法后,我正在获取文本的值。 获得的文本是完整的(带有我的姓氏)。
我在您的屏幕截图中看不到任何可疑之处。 电子邮件任务容器中的属性TEXT可能定义了不正确的长度。 但问题可能不存在。
安詹·保罗 a>
嗨,我将容器元素更改为" TEXT",但邮件正文仍不完整。
一周热门 更多>