SAP 调用OO类发送邮件测试(可发送表格和附件)

原文链接:https://blog.csdn.net/sapliumeng/article/details/134152739
在SAP实施中,邮件发送功能在很多项目都会用到,而且往往是把内表以Excel或者CSV的格式发送附件,最好是这个表格也可以显示在正文中,这样的话如果数据行数比较少,就不需要打开附件了。

发送的邮件如下图所示:
在这里插入图片描述
以往这种需要都是每个程序单独写好长的代码,代码的工作量非常大,本文就是把功能都集成到几个子程序和函数中,大大减少了开发工作量。

程序特点:
1、支持发送到多个外部邮箱
2、支持发送到SAP账号(使用事务码SBWP看邮件)
3、可以选择是否紧急邮件
4、支持多个内表发送,表格和附件分别显示
5、附件压缩为ZIP文件
6、邮件表格界面友好美观
7、如果正文表格未显示所有内表行,则最后一行为省略号

示例代码:

*&---------------------------------------------------------------------*
*& Report ZCYCLE064
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zcycle064.
**** RFC 版发送邮件测试 START ********
*DATA: it_document_data  TYPE sodocchgi1,
*      it_content_text   TYPE STANDARD TABLE OF solisti1 WITH HEADER LINE,
*      it_packing_list   TYPE TABLE OF sopcklsti1 WITH HEADER LINE,
*      it_receivers      TYPE STANDARD TABLE OF somlreci1 WITH HEADER LINE,
*      lc_mail_attach    TYPE string,
*      lt_content_hex    TYPE STANDARD TABLE OF solix WITH HEADER LINE,
*      lt_object_header  TYPE STANDARD TABLE OF solisti1 WITH HEADER LINE,
*      lc_mail_xattach   TYPE xstring,
*      lv_send_all       TYPE c,
*      it_makt           LIKE TABLE OF makt WITH HEADER LINE,
*      fir_date          TYPE sy-datum,
*      mimetype          TYPE char64.
*DATA: it_itab           TYPE TABLE OF itab WITH HEADER LINE,
*      wa_itab           TYPE itab.
*
*CONSTANTS:lc_tab  TYPE c VALUE cl_bcs_convert=>gc_tab,       "excel换格符
*          lc_ctrl TYPE c VALUE cl_bcs_convert=>gc_crlf.      "excel换行符
*
*PARAMETER p_flag  TYPE c AS CHECKBOX.
*
*IF p_flag = 'X'.
*  PERFORM send_email.
*ENDIF.
*
**&---------------------------------------------------------------------*
**&      Form  SEND_EMAIL
**&---------------------------------------------------------------------*
**       text
**----------------------------------------------------------------------*
*FORM send_email.
*  DATA sy_vline TYPE i.
*  DATA:mblnr TYPE string,   "物料凭证
*       matnr TYPE string,   "物料
*       mjahr TYPE string,   "年度
*       maktx TYPE string.   "物料描述
*
*  it_document_data-obj_descr = '邮件主题' .    "内容的简短描述
*  it_document_data-priority = '1'.             "优先次序  1~9  1:最高优先权
*  it_document_data-obj_name = 'OFFER'.
*  it_document_data-obj_langu = sy-langu.
*
**  ****邮件正文信息
*  it_content_text = '各位好:'.
*  APPEND it_content_text.
*  it_content_text = '  此邮件为测试邮件!!!!!!!'.
*  APPEND it_content_text.
*
*  DESCRIBE TABLE it_content_text LINES sy_vline.
*  it_document_data-doc_size = 255 * ( sy_vline - 1 ) + strlen( it_content_text ).  "SAPoffice 文档的大小(用于 API1*
*  it_packing_list-transf_bin = space.
*  it_packing_list-head_start = 1.
*  it_packing_list-head_num = 0 .
*  it_packing_list-body_num = sy_vline.
*  it_packing_list-body_start = 1.
*  it_packing_list-doc_type = 'RAW'.
*  APPEND it_packing_list.
*
*
****收件人信息
*  it_receivers-receiver = '1243327997@qq.com'.  "收件人地址
*  it_receivers-rec_type = 'U'.
*  it_receivers-com_type = 'INT'.
*  it_receivers-notif_del =  'X'.
*  it_receivers-notif_ndel = 'X'.
*  APPEND it_receivers.
*
*  CONCATENATE '物料'     lc_tab
*              '物料凭证' lc_tab
*              '物料描述' lc_tab
*              '年度'     lc_ctrl INTO lc_mail_attach.   "lc_ctrl换行符
*
*  CLEAR:mblnr, matnr, mjahr, maktx.
*  mblnr  = '7777777'.
*  matnr  = '7777777'.
*  mjahr  = '7777'.
*  maktx  = 'seven'."物料类型
*
*  CONCATENATE lc_mail_attach
*              matnr  lc_tab
*              mblnr  lc_tab
*              mjahr  lc_tab
*              maktx  lc_ctrl INTO lc_mail_attach.      "lc_ctrl换行符
*
*  CLEAR:mblnr, matnr, mjahr, maktx.
*  mblnr  = '8888888'.
*  matnr  = '8888888'.
*  mjahr  = '8888'.
*  maktx  = 'seven'."物料类型
*
*  CONCATENATE lc_mail_attach
*              matnr  lc_tab
*              mblnr  lc_tab
*              mjahr  lc_tab
*              maktx  lc_ctrl INTO lc_mail_attach.      "lc_ctrl换行符
*
*  mimetype = 'APPLICATION/MSEXCEL;CHARSET=UTF-16LE'.
*  CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
*    EXPORTING
*      text       = lc_mail_attach
*      mimetype   = mimetype
**     ENCODING   =
*   IMPORTING
*      buffer     =  lc_mail_xattach
*   EXCEPTIONS
*      failed     = 1
*      others     = 2 .
*
*  IF sy-subrc = 0.
*    CONCATENATE cl_abap_char_utilities=>byte_order_mark_little lc_mail_xattach INTO lc_mail_xattach IN BYTE MODE.
*  ENDIF.
*
*  CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
*    EXPORTING
*      buffer          = lc_mail_xattach
**    APPEND_TO_TABLE  = ' '
**  IMPORTING
**    OUTPUT_LENGTH    =
*    TABLES
*      binary_tab      = lt_content_hex.
*
*"不知道干啥用的
*  lt_object_header = 'Seven test'.
*  APPEND lt_object_header.
*
*  DESCRIBE TABLE lt_content_hex LINES sy_vline.
*
*  it_packing_list-transf_bin = 'X'.
*  it_packing_list-head_start = 1 .
*  it_packing_list-head_num =  0 .
*  it_packing_list-body_start = 1.
*  it_packing_list-body_num = sy_vline.
*  it_packing_list-doc_type = 'XLS'.
*  it_packing_list-doc_size = 255 * sy_vline.
*  it_packing_list-obj_name = '附件名'.
*  it_packing_list-obj_descr = it_packing_list-obj_name.
*  APPEND it_packing_list.
*
*
*"方法1  无法指定发送人邮箱
********  CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
********    EXPORTING
********      document_data              = it_document_data
********      put_in_outbox              = 'X'
********      commit_work                = 'X'
********    IMPORTING
********      sent_to_all                = lv_send_all
*********       NEW_OBJECT_ID              =
********    TABLES
********      packing_list               = it_packing_list[]
********      object_header              = lt_object_header[]
*********     contents_bin               =
********      contents_txt               = it_content_text[]
********      contents_hex               = lt_content_hex[]
*********     object_para                =
*********     object_parb                =
********      receivers                  = it_receivers[]
********    EXCEPTIONS
********      too_many_receivers         = 1
********      document_not_sent          = 2
********      document_type_not_exist    = 3
********      operation_no_authorization = 4
********      parameter_error            = 5
********      x_error                    = 6
********      enqueue_error              = 7
********      others                     = 8 .
*
*"方法2  可以指定发送人邮箱
*  CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
*    EXPORTING
*      document_data                    = it_document_data
*      put_in_outbox                    = 'X'
*      sender_address                   = 'lei.cao@lifotronic.com' "发件人邮箱
*      sender_address_type              = 'INT'
*      commit_work                      = 'X'
**     IP_ENCRYPT                       =
**     IP_SIGN                          =
**     IV_VSI_PROFILE                   =
*    IMPORTING
*      sent_to_all                      = lv_send_all
**     NEW_OBJECT_ID                    =
**     SENDER_ID                        =
*    TABLES
*      packing_list                     = it_packing_list[]
*      object_header                    = lt_object_header[]
**     CONTENTS_BIN                     =
*      contents_txt                     = it_content_text[]
*      contents_hex                     = lt_content_hex[]
**     OBJECT_PARA                      =
**     OBJECT_PARB                      =
*      receivers                        = it_receivers[]
**     ET_VSI_ERROR                     =
*    EXCEPTIONS
*      too_many_receivers               = 1
*      document_not_sent                = 2
*      document_type_not_exist          = 3
*      operation_no_authorization       = 4
*      parameter_error                  = 5
*      x_error                          = 6
*      enqueue_error                    = 7
*      others                           = 8
*            .
*  IF sy-subrc <> 0.
**   Implement suitable error handling here
*  ELSE.
*    SUBMIT RSCONN01 WITH MODE = 'INT'
*                   WITH OUTPUT = 'X'
*                   AND RETURN.
*  ENDIF.
*
*ENDFORM.                    "SEND_EMAIL
**** RFC 版发送邮件测试 END ************ OO 版发送邮件测试 START ********************
TABLES adr6.
DATA: BEGIN OF gt_out OCCURS 0,bukrs TYPE t001-bukrs,butxt TYPE t001-butxt,ort01 TYPE t001-ort01,land1 TYPE t001-land1,waers TYPE t001-waers,spras TYPE t001-spras,END OF gt_out.SELECT-OPTIONS s_smtp FOR adr6-smtp_addr NO INTERVALS OBLIGATORY.
PARAMETERS p_subj TYPE so_obj_des DEFAULT '发送邮件测试'.AT SELECTION-SCREEN OUTPUT.%_s_smtp_%_app_%-text = '接收邮箱'.%_p_subj_%_app_%-text = '邮件主题'.START-OF-SELECTION.SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_out FROM t001.PERFORM sendmail.MESSAGE s000(oo) WITH 'Done'.*&---------------------------------------------------------------------*
*& sendmail
*&---------------------------------------------------------------------*
FORM sendmail.DATA lv_string TYPE string.DATA lv_csvxstr TYPE xstring.DATA lv_binlen  TYPE i.DATA lt_html TYPE TABLE OF w3html WITH HEADER LINE.DATA lt_smtp TYPE TABLE OF piqapp_email WITH HEADER LINE.DATA lt_atta TYPE wlftt_mail_attachment WITH HEADER LINE.***邮件内容文本APPEND 'TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST<br/>' TO lt_html.APPEND 'TEST TEST TEST TEST TEST TEST TEST TEST <br/>' TO lt_html.APPEND 'TEST TEST TEST TEST <br/><br/>' TO lt_html.***下面显示表格,如果有多个内表需要发送,重复下面4个步骤即可SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_out FROM t001.
***内表转为CSV文件PERFORM itab_to_csvTABLES gt_outUSING '公司代码,名称,城市,国家,货币,语言' "CSV文件的标题CHANGING lv_string lv_csvxstr.***压缩CSV文件PERFORM xstr2zipxstrUSING 'BUKRS.XLS' lv_csvxstrCHANGING lv_csvxstr.***压缩文件作为附件CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'EXPORTINGbuffer        = lv_csvxstrIMPORTINGoutput_length = lv_binlenTABLESbinary_tab    = lt_atta-binary_content.lt_atta-description = 'BUKRS.zip'.lt_atta-binary_size = lv_binlen.APPEND lt_atta.***内表的前N条以表格的形式显示在邮件正文中PERFORM itab_to_mail_bodyTABLES gt_out lt_htmlUSING '公司代码列表:' "表格上面文本'公司代码,名称,城市,国家,货币,语言' "表格标题'XXXXXX'  "要显示的列,按照顺序,如果显示为X,不显示为空格'10'.     "显示内表前N行,如果内表大于N行则最后一行显示省略号***接收邮箱LOOP AT s_smtp.APPEND s_smtp-low TO lt_smtp.ENDLOOP.***调用发送函数CALL FUNCTION 'ZPUB_SEND_MAIL'EXPORTINGsubject   = p_subjcommit    = 'X'atta_tab  = lt_atta[]TABLESmail_body = lt_htmlrecv_smtp = lt_smtp.
ENDFORM.*&---------------------------------------------------------------------*
*& 内表转为CSV文件
*&---------------------------------------------------------------------*
FORM itab_to_csv TABLES t_intab USING pv_headerCHANGING cv_str cv_utf8x.DATA: lo_csv TYPE REF TO cl_rsda_csv_converter.DATA: lv_str TYPE char2048.CALL METHOD cl_rsda_csv_converter=>createRECEIVINGr_r_conv = lo_csv.IF pv_header IS NOT INITIAL.cv_str = pv_header && %_cr_lf.ENDIF.LOOP AT t_intab.CALL METHOD lo_csv->structure_to_csvEXPORTINGi_s_data = t_intabIMPORTINGe_data   = lv_str.cv_str = cv_str && lv_str && %_cr_lf.ENDLOOP.CALL FUNCTION 'SCMS_STRING_TO_XSTRING'EXPORTINGtext     = cv_strmimetype = 'UTF8'IMPORTINGbuffer   = cv_utf8xEXCEPTIONSfailed   = 1OTHERS   = 2.IF sy-subrc = 0.cv_utf8x = cl_abap_char_utilities=>byte_order_mark_utf8 && cv_utf8x.ENDIF.
ENDFORM.*&---------------------------------------------------------------------*
*& XSTRING压缩为ZIP文件XSTRING
*&---------------------------------------------------------------------*
FORM xstr2zipxstr USING pv_filename pv_xstr CHANGING cv_zipxstr.DATA: lo_zip TYPE REF TO cl_abap_zip.DATA: lv_str TYPE string.lv_str = pv_filename.CREATE OBJECT lo_zip.CALL METHOD lo_zip->addEXPORTINGname    = lv_strcontent = pv_xstr.CALL METHOD lo_zip->saveRECEIVINGzip = cv_zipxstr.
ENDFORM.*&---------------------------------------------------------------------*
*& 内表写到邮件表格
*&---------------------------------------------------------------------*
FORM itab_to_mail_body TABLES t_intab t_contents STRUCTURE solisti1USING pv_text pv_coldesc pv_mask pv_toline.DATA: lt_conts TYPE TABLE OF solisti1 WITH HEADER LINE,lt_title TYPE TABLE OF char40 WITH HEADER LINE.DATA: subrc   TYPE sy-subrc,index   TYPE sy-index,charc   TYPE char2048,charstr TYPE string,lmask   TYPE char200,omitnum TYPE i,ftype .FIELD-SYMBOLS <fs_fld> .CHECK t_intab[] IS NOT INITIAL.SPLIT pv_coldesc AT ',' INTO TABLE lt_title.lmask = pv_mask.APPEND pv_text TO lt_conts.APPEND:`<style type="text/css">.solid{BORDER-TOP: 1px solid;` TO lt_conts,`BORDER-RIGHT:1px solid;BORDER-BOTTOM: 1px solid;    ` TO lt_conts,`BORDER-LEFT: 1px solid}</style><table border=1      ` TO lt_conts,`cellpadding=2 style='border-collapse:collapse;font-`  TO lt_conts,`size:10.5pt'><tbody><tr style="background:#DDD9C4;">` TO lt_conts.LOOP AT lt_title.APPEND |<td class="solid">{ lt_title }</td>| TO lt_conts.ENDLOOP.APPEND `</tr>` TO lt_conts.LOOP AT t_intab FROM 0 TO pv_toline.APPEND '<tr>' TO lt_conts.CLEAR omitnum.DO.index = sy-index - 1.ASSIGN COMPONENT sy-index OF STRUCTURE t_intab TO <fs_fld>.IF sy-subrc <> 0.EXIT.ENDIF.CHECK lmask+index(1) = 'X' OR lmask = ''.omitnum = omitnum + 1.DESCRIBE FIELD <fs_fld> TYPE ftype.CASE ftype.WHEN 'I' OR 'P' OR 'F' OR 'a' OR 'e' OR 'b' OR 's'.charc = abs( <fs_fld> ).CONDENSE charc NO-GAPS.IF <fs_fld> < 0.CONCATENATE '-' charc INTO charc.ENDIF.charstr = charc.WHEN 'D' OR 'T'.IF <fs_fld> IS INITIAL OR <fs_fld> = ''.charc = ''.ELSE.WRITE <fs_fld> TO charc .ENDIF.charstr = charc.WHEN 'X' OR 'y' OR 'g'.charstr = <fs_fld> .WHEN OTHERS.WRITE <fs_fld> TO charc .charstr = charc.ENDCASE.APPEND |<td class="solid">{ charstr }</td>| TO lt_conts.ENDDO.APPEND `</tr>` TO lt_conts.ENDLOOP.IF lines( t_intab ) > pv_toline.APPEND '<tr>' TO lt_conts.DO omitnum TIMES.APPEND |<td class="solid">...</td>| TO lt_conts.ENDDO.APPEND '</tr>' TO lt_conts.ENDIF.APPEND '</tbody></table> <br/> ' TO lt_conts.APPEND LINES OF lt_conts TO t_contents.
ENDFORM.
**** OO 版发送邮件测试 END ********************

发送函数 ZPUB_SEND_MAIL:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
源代码:

FUNCTION zpub_send_mail.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     REFERENCE(SUBJECT) TYPE  SO_OBJ_DES
*"     REFERENCE(SENDER) TYPE  AD_SMTPADR OPTIONAL
*"     REFERENCE(EXPRESS) TYPE  OS_BOOLEAN OPTIONAL
*"     REFERENCE(COMMIT) TYPE  CHAR1 OPTIONAL
*"     REFERENCE(ATTA_TAB) TYPE  WLFTT_MAIL_ATTACHMENT OPTIONAL
*"  EXPORTING
*"     REFERENCE(RTYPE) TYPE  BAPI_MTYPE
*"     REFERENCE(RTMSG) TYPE  BAPI_MSG
*"  TABLES
*"      MAIL_BODY STRUCTURE  SOLISTI1 OPTIONAL
*"      RECV_USER STRUCTURE  SSCRUSER OPTIONAL
*"      RECV_SMTP STRUCTURE  PIQAPP_EMAIL OPTIONAL
*"----------------------------------------------------------------------DATA lr_email  TYPE REF TO cl_bcs.DATA lr_body   TYPE REF TO cl_document_bcs.DATA lr_sender TYPE REF TO if_sender_bcs.DATA lr_recver TYPE REF TO if_recipient_bcs.DATA lr_cxbcs  TYPE REF TO cx_bcs.DATA ls_atta   TYPE wlfs_mail_attachment.DATA lv_result TYPE os_boolean.TRY.lr_email = cl_bcs=>create_persistent( ).lr_body = cl_document_bcs=>create_document( i_type = 'HTM'i_text = mail_body[]i_subject = subject ).LOOP AT atta_tab INTO ls_atta.CALL METHOD lr_body->add_attachmentEXPORTINGi_attachment_type    = ls_atta-typei_attachment_subject = ls_atta-descriptioni_attachment_size    = ls_atta-binary_sizei_att_content_hex    = ls_atta-binary_content.ENDLOOP.lr_email->set_document( lr_body ).IF sender IS INITIAL.lr_sender = cl_sapuser_bcs=>create( sy-uname ).ELSE.CALL METHOD cl_cam_address_bcs=>create_internet_addressEXPORTINGi_address_string = senderi_address_name   = 'Sender'RECEIVINGresult           = lr_sender.ENDIF.lr_email->set_sender( lr_sender ).LOOP AT recv_user.lr_recver = cl_sapuser_bcs=>create( recv_user-uname ).lr_email->add_recipient( i_recipient = lr_recver i_express = express ).ENDLOOP.LOOP AT recv_smtp.lr_recver = cl_cam_address_bcs=>create_internet_address( recv_smtp-e_mail ).lr_email->add_recipient( i_recipient = lr_recver i_express = express ).ENDLOOP.lr_email->set_send_immediately( 'X' ).lv_result = lr_email->send( i_with_error_screen = '' ).IF lv_result = 'X'.IF commit IS NOT INITIAL.COMMIT WORK. "在Update进程或者增强里面,禁止提交ENDIF.ENDIF.CATCH cx_bcs INTO lr_cxbcs. " cx_root INTO lr_cxroot.rtype = 'E'.rtmsg = lr_cxbcs->get_text( ).ENDTRY.ENDFUNCTION.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/178282.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux中执行java命令报错:cannot execute binary file: Exec format error

网上很多文章 都是说操作系统和JDK&#xff0c;32位和64位不兼容问题 当你非常确定你的操作系统是64位&#xff0c;并且JDK也是64位的时候 或者非常确定你的操作系统是32位&#xff0c;并且JDK也是32位的时候 怎么办&#xff1f; 使用以下命令&#xff0c;查看你的操作系统…

华为的数字化转型(9)——企业架构4A集成模型

企业架构&#xff08;Enterprise Architecture&#xff0c;EA&#xff09;是衔接战略与项目实施的桥梁&#xff0c;引入企业架构方法&#xff0c;可以对数字化转型愿景进行系统性的、分层分级的梳理和解释&#xff0c;以便企业上下在同一张蓝图上统一认识。 企业架构提供了整体…

接口文档自动生成工具:详细教程和实用技巧

本篇文章详细教你如何使用 Apifox 的 IDEA 插件实现自动生成接口代码。好处简单总结有以下几点&#xff1a; 自动生成接口文档&#xff1a; 不用手写&#xff0c;一键点击就可以自动 生成文档&#xff0c;当有更新时&#xff0c;点击一下就可以自动同步接口文档&#xff1b;代…

影响PPC广告成本预算的因素,如何计算亚马逊PPC广告预算——站斧浏览器

亚马逊PPC&#xff0c;又称按点击付费(Pay Per Click)&#xff0c;是一种只有用户点击你的广告时才会向你收费的模式。那么影响PPC广告成本预算的因素,如何计算亚马逊PPC广告预算&#xff1f; 影响PPC广告成本预算的因素 1、产品类别&#xff1a;不同类别的产品竞争程度不同&…

性能优化的一般策略及方法

性能优化的一般策略及方法 在汽车嵌入式开发领域&#xff0c;性能优化始终是一个无法回避的问题&#xff1a; 座舱 HMI 想要实现更流畅的人机交互 通信中间件在给定的 CPU 资源下&#xff0c;追求更高的吞吐量 更一般的场景&#xff1a;嵌入式设备 CPU 资源告急&#xff0c;需…

Gin投票系统(2)

投票系统 数据库的建立 先分析需求&#xff0c;在sql中建立数据库&#xff0c;关于项目数据库如何建立可以在“goweb项目创建流程分析中看如何去建表” 成功后目前有四个表&#xff1a; vote&#xff0c;user&#xff0c;vote_opt,vote_opt_user 建立数据库&#xff0c;可以…

ERRO报错

无法下载nginx 如下解决&#xff1a; 查看是否有epel 源 安装epel源 安装第三方 yum -y install epel-release.noarch NGINX端口被占用 解决&#xff1a; 编译安装的NGINX配置文件在/usr/local/ngin/conf 修改端口

2024年天津艺术职业学院专升本报名工作的通知

天津艺术职业学院关于2024年天津市高职升本科考试报名工作的通知 请天津艺术职业学院各位2024届大专应届毕业生&#xff08;含高职扩招2024年应届毕业生&#xff09;查阅以下通知。 一、网上报名 &#xff08;一&#xff09;时间及网址&#xff1a;请于2023年12月4日9:00至6日…

DM8误删除操作恢复方案

达梦数据库三种在误删除操作后的回退方案 一、闪回表 当用户操作不慎导致错误的删改数据时&#xff0c;闪回方式可以恢复数据。闪回技术&#xff0c;就是为了用户可以迅速处理这种 数据逻辑损坏的情况而产生的。 闪回技术主要是通过回滚段存储的 UNDO 记录来完成历史记录的还原…

C语言:编程实现1!+2!+3!+4!+……+n!

分析&#xff1a; #include<stdio.h>//这是一个预处理指令&#xff0c;将stdio.h头文件包含到程序中&#xff0c;以便使用输入输出函数。 int main()//这是程序的主函数&#xff0c;是程序执行的入口点。 int i, a 1, t 0, n;//定义了整型变量i、a、t和n。其中&#x…

13.Spring源码解析-prepareBeanFactory

点进去 此处是 Spel表达式设置 BeanExpressionResolver 此接口只有一个实现: StandardBeanExpressionResolver。接口只含有一个方法: Object evaluate(String value, BeanExpressionContext evalContext) prepareBeanFactory将一个此对象放入BeanFactory: beanFactory.setB…

使用elementPlus去除下拉框蓝色边框

// 下拉框去除蓝色边框 .el-select {--el-select-input-focus-border-color: none !important; }

算法之插入排序及希尔排序(C语言版)

我们来实现上述排序 一.插入排序. 当插入第i(i>1)个元素时&#xff0c;前面的array[0],array[1],.,array[i-1]已经排好序&#xff0c;此时用array[i的排序码与array[i-1]array[i-2].的排序码顺序进行比较&#xff0c;找到插入位置即将arrayU插入&#xff0c;原来位置上的元…

Python神器解密:掌握property特性巧管理属性

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com property 是Python中的一个内置装饰器&#xff0c;它用于创建属性并允许开发者定义特定的操作&#xff0c;例如获取&#xff08;getter&#xff09;、设置&#xff08;setter&#xff09;和删除&#xff08;dele…

Vue中的过滤器了解吗?过滤器的应用场景有哪些?

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue-filter过滤器 目录 一、是什么 二、如何用 定义filter 小结&#xff1a; 三、应用场景 四…

苍穹外卖项目笔记(6)— Redis操作营业状态设置

1 在 Java 中操作 Redis 1.1 Redis 的 Java 客户端 Jedis&#xff08;官方推荐&#xff0c;且命令语句同 redis 命令&#xff09;Lettuce&#xff08;底层基于 Netty 多线程框架实现&#xff0c;性能高效&#xff09;Spring Data Redis&#xff08;对 Jedis 和 Lettuce 进行了…

同为科技(TOWE)模块化定制化让每条PDU实现专属供电解决方案

作为追求最高功率和空间效率的动态数据中心的理想产品&#xff0c;模块化、定制化PDU是追求最高功率和空间效率的动态数据中心的理想产品。同为科技&#xff08;TOWE&#xff09;是我国PDU行业的开创者和领导者&#xff0c;曾率先于中国电源分配单元http://www.pdu.com.cn网站上…

机器学习实战第3天:手写数字识别

☁️主页 Nowl &#x1f525;专栏《机器学习实战》 《机器学习》 &#x1f4d1;君子坐而论道&#xff0c;少年起而行之 ​ 文章目录 一、任务描述 二、数据集描述 三、主要代码 &#xff08;1&#xff09;主要代码库的说明与导入方法 &#xff08;2&#xff09;数据预…

2023-11-28 C语言if语句多个||或 与的时时候,会顺序执行,不满足条件则退出,不会再比较后面的内容,实例测试

一、if(i > 0 || image(0) > 5)或者if(i > 0 && image(0) > 5)&#xff0c;C语言if语句多个||或 与&&的时时候&#xff0c;会顺序执行&#xff0c;不满足条件则退出&#xff0c;不会再比较后面的内容。 二、测试代码 #include <stdio.h> #i…