通过报告在工作流程中发送动态邮件

2020-08-20 18:05发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)大家好, 我正试图创建一个报告...

         点击此处--->   EasySAP.com群内免费提供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)
付费偷看设置
发送
5条回答
木偶小白
1楼-- · 2020-08-20 18:52

嗨,

您能否尝试将容器元素声明为'TEXT'而不是'text'。

谢谢

奄奄一息的小鱼
2楼-- · 2020-08-20 18:45

谢谢 是时候解释整个情况了。

您是否在调用GET_TEXTSTREAM方法之后立即调试了变量TEXT的值。 文字是否完整?

Haoba3210
3楼-- · 2020-08-20 18:55

Sandra Rossi 我 在方法调用GET_TEXTSTREAM之后调试TEXT的值。 在调用flush方法后,我正在获取文本的值。 获得的文本是完整的(带有我的姓氏)。

能不能别闹
4楼-- · 2020-08-20 18:52

我在您的屏幕截图中看不到任何可疑之处。 电子邮件任务容器中的属性TEXT可能定义了不正确的长度。 但问题可能不存在。