点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)你好大师, 我一直坚持要开发一...
点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)你好大师, 我一直坚持要开发一...
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
你好大师,
我一直坚持要开发一个程序,其中HR Payslip会通过邮件以密码保护格式发送。
我已按照以下方法完成了受密码保护的邮件触发程序。
首先,我安装了一个软件包,其中密码加密库已安装到应用程序服务器中。
然后必须构建用于HR payslip(自定义)中的邮件触发程序。
如果it_reclist []不初始。
呼叫功能'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname ='ZHR_SEQUEL_PAYSLIP1'
IMPORTING
fm_name = fm_name
例外 > no_form = 1
no_function_module = 2
其他=3。
IF sy-subrc <> 0.
*消息ID sy-msgid类型sy-msgty编号sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4。
ENDIF。
wa_ctrlop-getotf ='X'。
wa_ctrlop-no_dialog ='X'。
wa_compop-tdnoprev = 'X'。
用密钥pernr = wa_final-pernr
earn_desc ='Net Pay'读取表it_net到wa_net。
如果sy-subrc =0。
清除wa_final-net_pay。
wa_final-net_pay = wa_net-earn_amt。
ENDIF。
呼叫功能fm_name
导出
控件参数= wa_ctrlop
output_options = wa_compop
user_settings ='X'< br> wa_final = wa_final
lv_finyear = lv_finyear
导入
job_output_info = wa_return
表格
it_display = it_display1
例外情况
formatting_error = 1
内部 _error = 2
send_error = 3
user_canceled = 4
其他=5。
IF sy-subrc <> 0.
*消息ID SY-MSGID类型SY-MSGTY编号SY-MSGNO
*带SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4。
ENDIF。
it_otf [] = wa_return-otfdata []。
呼叫功能'CONVERT_OTF'
导出
格式='PDF'
max_linewidth = 132
导入< br> bin_filesize = lv_len_in
* bin_file = lv_xstring
表格
otf = it_otf
行= it_line
例外
err_max_linewidth = 1
err_format = 2
err_conv_not_pos
其他=4。
IF sy-subrc <> 0.
ENDIF。
循环到it_otf进入lw_otf。
清除lw_content。
CONCATENATE lw_otf- tdprintcom lw_otf-tdprintpar
INTO lw_content。
APPEND lw_content到li_content_txt。
ENDLOOP。
REFRESH:li_content_hex,
li_objhead。
CLEAR:lv_transfer_bin,
lv_len。
*/.. FM将OTF转换为PDF
通话功能'SX_OBJECT_CONVERT_OTF_PDF'
导出
format_src='OTF'
format_dst ='PDF'
更改
transfer_bin = lv_transfer_bin
content_txt = li_content_txt
content_bin = li_content_hex
objhead = li_objhead
len = lv_len
例外情况
err_con v_failed = 1
其他=2。
IF sy-subrc <> 0.
消息ID sy-msgid类型sy-msgty编号sy-msgno
与sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4。
ENDIF。< br>
数据:it_line1类似it_line的表。
呼叫功能'CONVERT_OTF'
导出
格式='PDF'
max_linewidth = 132
导入
bin_filesize = lv_len_in
bin_file = lv_xstring
表格
otf = it_otf
行= it_line1
例外情况
err_max_linewidth = 1
err_format = 2
err_conv_not_possibleS = 3
=4。
IF sy-subrc <> 0.
ENDIF。
*使用SAP标准函数
*生成密码,以避免混淆1和l或0和 O
*字母仅限于可清晰识别的
*字符
呼叫功能'RSEC_GENERATE_PASSWORD'
EXPORTING
字母='ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789'
output_length = 12
IMING 输出=通过
例外情况
some_error = 1
其他=2。
如果sy-subrc <>0。
写:/'发生错误
退出。
ENDIF。
xpayslip = lv_xstring。
*设置PDF和加密
创建对象o_pdf。
o_pdf-> set_pdf_file(xpayslip )。
* pass ='TEST'。
upass = pass。
CONCATENATE'O_'pass INTO opass。
CREATE OBJECT o_encrypt_aes
EXPORTING
键长 =128。
o_encrypt?= o_encrypt_aes。
*设置PDF文件的用户权限
o_encrypt-> set_permission_ex(print_allowed ='X'
Modify_allowed =''
copy_allowed ='X'
add_annotations_allowed =''
fill_fields_allowed =''
copy_accessibility_allowed ='X'
assemble_allowed =''
print_highres_allowed ='X')。
* 设置PDF的用户和所有者密码
o_encrypt-> set_passwords(user_password = upass owner_password = opass)。
*生成密码
o_encrypt-> generate_passwords(o_pdf)。
*加密PDF
o_pdf-> do_action(o_encrypt)。
*获得加密并处理的PDF xs tring
结果= o_pdf-> create_pdf()。
len = xstrlen(结果)。
*转换为solix_tab
调用函数'SCMS_XSTRING_TO_BINARY'
导出< br>缓冲区=结果
表
binary_tab = lt_xpdf。
数据:attch类型so_obj_des。
数据:d_start(10)类型c。
数据:d_end(10)类型 c。
将wa_rgdir-fpbeg写入d_start。
将wa_rgdir-fpend写入d_end。
CONCATENATE'Payslip_from_'d_start'_to_'d_end INTO附件。
*创建邮件 和附件,如BCS_EXAMPLE程序中所述。
send_request = cl_bcs => create_persistent()。
CONCATENATE'Dear'wa_i0001-ename','INTO line-line SEPARATED BY''。
line-line =''。
APPEND line to文本。
APPEND'请在附件中找到您的工资单'TO text。
line-line =''。< br> APPEND行至文本。
CONCATENATE'Password:'传递到行线,以'''。
APPEND行TO至文本。
line-line =''。
APPEND行至文本 。
林 e-line ='收款人'。
APPEND行至文本。
line-line ='工资单'。
APPEND行至文本。
document = cl_document_bcs => create_document(
i_type ='RAW'
i_text =文本
* i_length ='72'
i_subject = attch)。
*数据:w_xpdf如lt_xpdf,
* w_content_hex如li_content_hex。
*循环 ,位于lt_xpdf INTO w_xpdf。
*将w_xpdf附加到li_content_hex。
* ENDLOOP。
将li_content_hex的行追加到lt_xpdf。
呼叫方法文档 >添加附件
导出
i_attachment_type ='PDF'
i_attachment_subject =附件
i_attachment_size = len
i_att_content_hex = lt_xpdf。
*
*呼叫方法文档-> add_attachment
*导出
* i_attachment_type ='PDF'
* i_attachment_subject =附件
* i_attachment_size = len
* i_att_content_hex = lt_xpdf。
" lt_xpdf。
" lt_xpdf
调用方法send_request-> set_document(document)。
sender = cl_sapuser_bcs => create('USERNAME')。< br>
呼叫方法send_request-> set_sender
导出
i_sender =发件人。
收件人= cl_cam_address_bcs => create_internet_address(
'joe.doe@crazy-company.com ')。
呼叫方法send_request-> add_recipient
导出
i_recipient =收件人
i_express ='X'。
呼叫方法send_request-> send(
EXPORTING
i_with_error_screen ='X'
接收
结果= send_to_all)。
如果send_to_all ='X'。
WRITE:/'文档发送成功'。
ENDIF。
提交工作
捕获cx_bcs INTO bcs_exception。
WRITE:'Fehler aufgetreten。'(001)。
WRITE:'Fehlertyp:'(002),bcs_exception-> error_type。
退出。 br>
ENDTRY。
*************************************************** **********************************************
观察1:邮件正在使用加密的密码触发,并且当输入密码时,仅显示空白屏幕,没有PDF详细信息。
方法2:之后,我对程序进行了调试,并在代码中找到了
将li_content_hex的行追加到lt_xpdf。
呼叫方法文档-> add_attachmentEXPORTING
i_attachment_type ='PDF'
i_attachment_subject = attch
i_attachment_size = len
i_att_content_hex = lt_xpdf。
观察:如果在 i_att_content_hex lt_xpdf中通过而没有附加代码行,则显示具有HR工资单的PDF 。 strong>
如果将li_content_hex的行追加到lt_xpdf。
给出密码意味着当我们打开pdf附件时仅出现密码保护屏幕,并且给出了加密密码意味着屏幕空白。
"将li_content_hex的附加行添加到lt_xpdf。"代码的原因是将加密的密码与PDF加密合并。
用于程序的数据声明是。
SPAN {font-family:" Courier New"; 字体大小:10pt; 颜色:#000000; 背景:#FFFFFF; } .L0S32 {color:#3399FF; } .L0S52 {color:#0000FF; } .L0S55 {color:#800080; }
数据:xpayslip类型xstring。
数据:data_lines类型/grube/raw256_table。
数据:len1类型i。
数据:fl类型字符串。
数据:文件类型file_table。
数据:文件类型文件表。
数据:rc类型i。
数据:l_molga类型molga。
数据:l_rgdir类型h99_clst_t_rgdir。
数据:wa_rgdir类型行h99_clst_t_rgdir。
lt_evp类型h99_clst_t_rgdir。
数据:i0001 p0001类型表。
数据:wa_i0001 p0001类型。
数据:pmehf类型pmehf。
数据:hrform_name类型hrf_name。
数据:message1类型 。
数据:form_object类型REF TO对象。
数据:pass(12)。
数据:o_pdf类型REF TO/grube/cl_pdf。
数据:o_encrypt_aes类型REF TO/grube/cl_pdf_encry_aes_256。
数据:o_encrypt TYPE REF TO/grube/cl_pdf_encryption。
数据:upass TYPE字符串。
数据:opass TYPE字符串。
数据:line TYPE soli。
数据:结果TYPE xstring。
数据:len TYPE so_obj_len。
数据:lt_xpdf TYPE solix_tab。
数据:l_xpdf TYPE solix。
数据:send_request 类型参考至cl_bcs。
数据:bcs_exception类型参考至cx_bcs。
数据:text_line类型soli。
数据:文本类型bcsy_text。
数据:文档类型参考至cl_document_bcs。
数据: 发件人类型参考到cl_sapuser_bcs。
数据:接收者类型参考到if_recipient_bcs。
数据:send_to_all类型os_boolean。
已引用链接。
http://pdfencryption.de/fscenario.php
http://pdfencryption.de/dl/ABAPListing_Payslip_encrypted_HRFORM.txt(针对程序 )
附件已从链接安装到服务器中。
http://pdfencryption.de/adownloaddemo.php
ABAP PDF库的安装演示版本。
数据:O_ENCRYPT_AES类型参考至/GRUBE/CL_PDF_ENCRY_AES_256。
数据:O_ENCRYPT类型参考至/GRUBE/CL_PDF_ENCRYPTION。
这些类显示未知,我正在使用S/4最新升级版本。
请帮助。
注意:-我正在使用
的标准自定义工资单通话功能'BAPI_GET_PAYSLIP_PDF'
CALL FUNCTION'SCMS_XSTRING_TO_BINARY'
通话功能'QCE1_CONVERT'
一周热门 更多>