SAP_ABAP_接口技术_RFC远程函数实践总结
SAP ABAP顾问能力模型梳理_企业数字化建设者的博客-CSDN博客SAP Abap顾问能力模型,ALV/REPORT|SMARTFROM|SCREEN|OLE|BAPI|BDC|PI|IDOC|RFC|API|WEBSERVICE|Enhancement|UserExits|Badi|Debug
https://blog.csdn.net/java_zhong1990/article/details/132469977
SAP接口常用的有这5种:PI、远程RFC、API、Webservice、IDOC
SAP_ABAP_接口技术_PI实践总结_企业数字化建设者的博客-CSDN博客
SAP_ABAP_接口技术_RFC远程函数实践总结_企业数字化建设者的博客-CSDN博客
SAP_ABAP_接口技术_API实践总结_企业数字化建设者的博客-CSDN博客
SAP_ABAP_接口技术_Webservice实践总结_企业数字化建设者的博客-CSDN博客
一、背景介绍
-
函数模块: 在 SAP 系统中,函数模块是预定义的业务逻辑单元,可以被其他程序调用。RFC 机制允许通过网络调用远程系统中的函数模块。
-
远程调用: RFC 允许在一个 SAP 系统中调用另一个 SAP 系统中的函数模块,即使这些系统可能位于不同的服务器上。
-
同步和异步调用: RFC 调用可以是同步的(等待调用返回结果)或异步的(不等待返回结果)。同步调用适用于需要等待结果的情况,而异步调用适用于不需要立即获取结果的情况。
-
RFC 目标: 在调用 RFC 函数模块之前,需要定义 RFC 目标。RFC 目标描述了要调用的远程系统和目标函数模块。这些目标可以在事务代码
SM59中配置。 -
事务和批处理: RFC 调用可以在事务内或批处理作业中执行。这使得可以在不同系统之间传递数据并处理业务流程。
-
安全性: RFC 调用可以通过网络进行,因此安全性是一个关键问题。SAP 提供了各种身份验证和授权机制来确保数据的安全传输和处理。
实现步骤
1.1 SE37-->创建函数-->创建输入输出参数-->编写代码
1.2 启用远程的函数模块

1.3 代码样例
FUNCTION zfm_mm_140.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(IH) TYPE ZSMM140HEADER
*" EXPORTING
*" VALUE(STATUS) TYPE CHAR2
*" VALUE(MESSAGE) TYPE CHAR255
*" TABLES
*" ITAB STRUCTURE ZSMM140ITEM
*"----------------------------------------------------------------------
*程序名:
*程序描述:MM-140_采购订单收货退货接口
*----------------------------------------------------------------------
*创建日期 ABAP开发顾问 业务顾问
*2019.09.17. zlog_save1 'ZFM_MM_330'.zlog_save2 'B'.
*-----------------------------------------------------------------------DATA ls_gh TYPE bapi2017_gm_head_01.DATA ls_gi TYPE bapi2017_gm_item_create.DATA lt_gi TYPE TABLE OF bapi2017_gm_item_create.DATA ls_poitem TYPE bapimepoitem.DATA lt_poitem TYPE TABLE OF bapimepoitem.DATA ls_poitemx TYPE bapimepoitemx.DATA lt_poitemx TYPE TABLE OF bapimepoitemx.DATA ls_return TYPE bapiret2.DATA lt_return TYPE TABLE OF bapiret2.DATA gr_ebeln TYPE RANGE OF ekpo-ebeln. "采购订单号DATA gw_ebeln LIKE LINE OF gr_ebeln.DATA lv_message_str(255) TYPE c.IF itab[] IS NOT INITIAL."1.==========为检查逻辑所需要准备的数据源CLEAR itab.LOOP AT itab[] INTO itab.gw_ebeln-sign = 'I'.gw_ebeln-option = 'EQ'.gw_ebeln-low = itab-po_number.gw_ebeln-high = ''.APPEND gw_ebeln TO gr_ebeln.ENDLOOP.DELETE ADJACENT DUPLICATES FROM gr_ebeln COMPARING low.SELECT ekpo~ebeln,"采购订单号ekpo~ebelp,"项次ekpo~retpo,"采购退货订单标识 X:采购退货订单ekpo~werks "工厂FROM ekpoWHERE ekpo~ebeln IN @gr_ebelnINTO TABLE @DATA(lt_ekpo)."查找未打删除标识的来料单号SELECTztmm_incom_list~incom, "来料单号ztmm_incom_list~item, "来料单项次ztmm_incom_list~ebeln, "采购凭证ztmm_incom_list~ebelp, "项目ztmm_incom_list~loekzFROM ztmm_incom_list WHERE ztmm_incom_list~loekz IS INITIAL AND ztmm_incom_list~incom = @ih-incomINTO TABLE @DATA(lt_incom_list)."取工厂和库存地点SELECTt001l~werks,t001l~lgortFROM t001lINTO TABLE @DATA(lt_t001l)."取物料过账日志表SELECTztmm_140~incom,ztmm_140~item,ztmm_140~mblnr "物料凭证编号FROM ztmm_140 WHERE ztmm_140~incom = @ih-incomINTO TABLE @DATA(lt_ztmm_140)."2.==========接口传入参数进行检查LOOP AT itab[] ASSIGNING FIELD-SYMBOL(<ls_itab>)." 传入的采购订单及项次若为空,则返回错消息“采购订单、项次不能为空”;IF <ls_itab>-po_number IS INITIAL OR <ls_itab>-po_item IS INITIAL.<ls_itab>-type = 'E'.<ls_itab>-message = '采购订单、项次不能为空'.CONTINUE.ENDIF."根据传入采购订单及项次取退货标识(EKPO-RETPO),EKPO-RETPO =‘X’为退货采购订单;若采购订单及项次不是退货采购订单,"则传入的来料单(INCOM)及来料单项次ITEM不为空,否则提示“非采购退货单,来料单及项次不能为空”READ TABLE lt_ekpo INTO DATA(ls_ekpo) WITH KEY ebeln = <ls_itab>-po_number ebelp = <ls_itab>-po_item.IF sy-subrc = 0.IF ls_ekpo-retpo = 'X'."EKPO-RETPO =‘X’退货采购订单<ls_itab>-retpo = 'X'."根据传入的的采购订单及项次从EKPO取RETPO,若RETPO = ‘X’,则给161;其他情况给101<ls_itab>-move_type = '161'."移动类型ELSE."采购订单<ls_itab>-move_type = '101'."移动类型"若采购订单及项次不是退货采购订单,"则传入的来料单(INCOM)及来料单项次ITEM不为空,否则提示“非采购退货单,来料单及项次不能为空”IF <ls_itab>-item IS INITIAL OR ih-incom IS INITIAL .<ls_itab>-type = 'E'.<ls_itab>-message = '及来料单以及项次ITEM不为空'.CONTINUE.ENDIF.ENDIF.ELSE.<ls_itab>-type = 'E'.<ls_itab>-message = '采购订单以及行项目不存在'.CONTINUE.ENDIF."若库存地点为空,则返回错误消息“库存地点不能为空;IF <ls_itab>-stge_loc IS INITIAL.<ls_itab>-type = 'E'.<ls_itab>-message = '库存地点不能为空'.CONTINUE.ENDIF."根据传入的采购订单号及项次从EKPO取 工厂(EKPO-WERKS);根据传入的库存地点及刚取到的PO 工厂判断在table T001l 是否存在,不存在返回错误消息“库存地XXX在工厂YYY 不存”READ TABLE lt_ekpo INTO DATA(ls_ekpo_werks) WITH KEY ebeln = <ls_itab>-po_number ebelp = <ls_itab>-po_item.IF sy-subrc = 0.READ TABLE lt_t001l INTO DATA(ls_t001l) WITH KEY werks = ls_ekpo_werks-werks lgort = <ls_itab>-stge_loc.IF sy-subrc <> 0.<ls_itab>-type = 'E'.<ls_itab>-message = '库存地'&& <ls_itab>-stge_loc &&'在工厂'&& ls_ekpo_werks-werks &&'不存'.CONTINUE.ENDIF.ELSE.<ls_itab>-type = 'E'.<ls_itab>-message = '传入的采购订单和项次在采购订单表 ekpo中,不存在'.CONTINUE.ENDIF."若未税价格(NETPR)为空或价格基数PEINH为空或购买税代码(MWSKZ)空,则返回错误消息“未税价格,价格基数及税代码都不能为空”;IF <ls_itab>-netpr IS INITIAL OR <ls_itab>-peinh IS INITIAL OR <ls_itab>-mwskz IS INITIAL.<ls_itab>-type = 'E'.<ls_itab>-message = '未税价格,价格基数及税代码都不能为空'.CONTINUE.ENDIF."若传入的来料单(INCOM)及来料单项次ITEM不为空,则根据来料单、项次 及ZTMM_INCOM_LIST-LOEKZ 等于空,判断来料单及项次在ztable ZTMM_INCOM_LIST 是否存在,不存在,则返回错误消息“来料单XXXXX 项次YY在SAP 不存在”READ TABLE lt_incom_list INTO DATA(ls_incom_list) WITH KEY incom = ih-incom item = <ls_itab>-item.IF sy-subrc <> 0.<ls_itab>-type = 'E'.<ls_itab>-message = '传入的来料单号已经项次在 ZTMM_INCOM_LIST表中不存在'.CONTINUE.ELSE."根据传入的来料单(INCOM)及来料单项次ITEM 及ZTMM_INCOM_LIST-LOEKZ 等于空条件,"从table ZTMM_INCOM_LIST取采购订单号(EBELN)及项次(EBELP),如果取到的采购订单号及项次与接口传入的订单号及项次不一致,"则返回错误消息“来料单XXXXX 项次YY 对应的采购订单号及项次不匹配”;IF ls_incom_list-ebeln = <ls_itab>-po_number AND ls_incom_list-ebelp = <ls_itab>-po_item."相等通过ELSE."不相等<ls_itab>-type = 'E'.<ls_itab>-message = '来料单'&& ih-incom &&'项次' && <ls_itab>-po_item && '对应的采购订单号及项次不匹配'.CONTINUE.ENDIF.ENDIF."若传入的来料单(INCOM)及来料单项次ITEM不为空,根据传入的来料单(INCOM)及来料单项次和上述新建ztable Zpo_gr"能取到不为空的物料凭证(MBLNR),则提示“来料单XXX 项次之前已经入库”的错误消息READ TABLE lt_ztmm_140 INTO DATA(ls_ztmm_140) WITH KEY incom = ih-incom item = <ls_itab>-item.IF sy-subrc = 0.IF ls_ztmm_140-mblnr IS NOT INITIAL.<ls_itab>-type = 'E'.<ls_itab>-message = '来料单'&& ih-incom &&'项次'&& <ls_itab>-item &&'之前已经入库'.CONTINUE.ENDIF.ENDIF.ENDLOOP."3.==========对检查通过的记录进行业务处理LOOP AT itab[] ASSIGNING FIELD-SYMBOL(<ls_tb>) WHERE type <> 'E' .IF <ls_tb>-retpo = 'X'. "退货订单,直接过账ELSE. "非采购订单,更改PO价格在过账ls_poitem-po_item = <ls_tb>-po_item." 行项目ls_poitemx-po_item = <ls_tb>-po_item." 行项目ls_poitemx-po_itemx = 'X'." 行项目ls_poitem-net_price = <ls_tb>-netpr ."净价ls_poitemx-net_price = 'X'.ls_poitem-price_unit = <ls_tb>-peinh."价格单位ls_poitemx-price_unit = 'X'.ls_poitem-tax_code = <ls_tb>-mwskz."税码ls_poitemx-tax_code = 'X'.APPEND ls_poitem TO lt_poitem.APPEND ls_poitemx TO lt_poitemx.CALL FUNCTION 'BAPI_PO_CHANGE'EXPORTINGpurchaseorder = <ls_tb>-po_numberTABLESreturn = lt_returnpoitem = lt_poitempoitemx = lt_poitemx.IF sy-subrc = 0.READ TABLE lt_return INTO ls_return INDEX 1.IF sy-subrc = 0.<ls_tb>-type = ls_return-type.<ls_tb>-id = ls_return-id.<ls_tb>-number = ls_return-number.<ls_tb>-message = ls_return-message.<ls_tb>-log_no = ls_return-log_no.<ls_tb>-log_msg_no = ls_return-log_msg_no.<ls_tb>-message_v1 = ls_return-message_v1.<ls_tb>-message_v2 = ls_return-message_v2.<ls_tb>-message_v3 = ls_return-message_v3.<ls_tb>-message_v4 = ls_return-message_v4.<ls_tb>-parameter = ls_return-parameter.<ls_tb>-row = ls_return-row.<ls_tb>-field = ls_return-field.<ls_tb>-system = ls_return-system.ENDIF.CLEAR ls_return.IF lines( lt_return ) > 1.lv_message_str = ''.LOOP AT lt_return INTO ls_return.lv_message_str = lv_message_str && ls_return-type && ls_return-message && ','.ENDLOOP.<ls_tb>-message = lv_message_str.ENDIF.IF <ls_tb>-type = 'S'.CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' "BAPI事务提交EXPORTINGwait = 'X'.ELSE.CONTINUE.ENDIF."20190927 zhongjz add : ---------------------------------------------------------------------------------------------strat" 根据当前记录的采购订单及行项目从EKPO取最新的价格(EKPO-NETPR)、价格基数(EKPO-PEINH)和税码(EKPO-MWSKZ),"只要有一个字段的值和对应传入的值不相等,则说明价格更新更新失败,继续下一条,否则继续当前采购订单收货SELECT ekpo~ebeln FROM ekpoWHERE ekpo~ebeln = @<ls_tb>-po_numberAND ekpo~ebelp = @<ls_tb>-po_itemAND ekpo~netpr = @<ls_tb>-netprAND ekpo~peinh = @<ls_tb>-peinhAND ekpo~mwskz = @<ls_tb>-mwskzINTO TABLE @DATA(lt_ekpo_update_success).IF sy-subrc = 0 AND lt_ekpo_update_success IS NOT INITIAL."po价格等更新检查通过clear lt_ekpo_update_success.ELSE."po价格等更新检查未通过<ls_tb>-type = 'E'.<ls_tb>-message = '价格更新失败'.CONTINUE.ENDIF."20190927 add : ---------------------------------------------------------------------------------------------end.ELSE.<ls_tb>-type = 'E'.<ls_tb>-message = '价格更新失败'.CLEAR ls_poitem.REFRESH lt_poitem.CLEAR ls_poitemx.REFRESH lt_poitemx.CONTINUE.ENDIF.CLEAR ls_poitem.REFRESH lt_poitem.CLEAR ls_poitemx.REFRESH lt_poitemx.ENDIF."过账。CLEAR ls_return.REFRESH lt_return.ls_gh-pstng_date = ih-pstng_date."过帐日期ls_gh-doc_date = ih-doc_date."凭证日期ls_gh-ref_doc_no = ih-incom."参考凭证编号 -来料单号ls_gh-bill_of_lading = ih-bill_of_lading."收货时提单号ls_gh-header_txt = ih-header_txt."凭证抬头文本ls_gi-material_long = <ls_tb>-material."物料编号ls_gi-plant = <ls_tb>-plant."工厂ls_gi-stge_loc = <ls_tb>-stge_loc."库存地点ls_gi-batch = <ls_tb>-batch. "批号ls_gi-move_type = <ls_tb>-move_type. "移动类型ls_gi-entry_qnt = <ls_tb>-entry_qnt."以录入项单位表示的数量CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'EXPORTINGinput = <ls_tb>-entry_uomlanguage = sy-languIMPORTINGoutput = <ls_tb>-entry_uom.ls_gi-entry_uom = <ls_tb>-entry_uom."条目单位ls_gi-po_number = <ls_tb>-po_number. "采购订单号ls_gi-po_item = <ls_tb>-po_item. "采购凭证的项目编号ls_gi-item_text = <ls_tb>-item."项目文本ls_gi-mvt_ind = 'B'. "移动标识 fix value B 表示采购订单收货APPEND ls_gi TO lt_gi.CALL FUNCTION 'BAPI_GOODSMVT_CREATE'EXPORTINGgoodsmvt_header = ls_ghgoodsmvt_code = '01'IMPORTINGmaterialdocument = <ls_tb>-materialdocument "物料凭证编号matdocumentyear = <ls_tb>-matdocumentyear "物料凭证年度TABLESgoodsmvt_item = lt_gireturn = lt_return.IF sy-subrc = 0.IF <ls_tb>-materialdocument IS NOT INITIAL.<ls_tb>-type = 'S'.ENDIF.READ TABLE lt_return INTO ls_return INDEX 1.IF sy-subrc = 0.<ls_tb>-type = ls_return-type.<ls_tb>-id = ls_return-id.<ls_tb>-number = ls_return-number.<ls_tb>-message = ls_return-message.<ls_tb>-log_no = ls_return-log_no.<ls_tb>-log_msg_no = ls_return-log_msg_no.<ls_tb>-message_v1 = ls_return-message_v1.<ls_tb>-message_v2 = ls_return-message_v2.<ls_tb>-message_v3 = ls_return-message_v3.<ls_tb>-message_v4 = ls_return-message_v4.<ls_tb>-parameter = ls_return-parameter.<ls_tb>-row = ls_return-row.<ls_tb>-field = ls_return-field.<ls_tb>-system = ls_return-system.CLEAR ls_return.IF lines( lt_return ) > 1.lv_message_str = ''.LOOP AT lt_return INTO ls_return.lv_message_str = lv_message_str && ls_return-type && ls_return-message && ','.ENDLOOP.<ls_tb>-message = lv_message_str.ENDIF.ENDIF.IF <ls_tb>-type = 'S'.CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' "BAPI事务提交EXPORTINGwait = 'X'."20190927 zhongjz update :注释ELSE.CONTINUE. 代码如下:
* ELSE.
* CONTINUE.ENDIF.ELSE.<ls_tb>-type = 'E'.<ls_tb>-message = '过账失败'.CLEAR ls_gh.CLEAR ls_gi.REFRESH lt_gi.CLEAR ls_return.REFRESH lt_return.CONTINUE.ENDIF.CLEAR ls_gh.CLEAR ls_gi.REFRESH lt_gi.CLEAR ls_return.REFRESH lt_return.ENDLOOP."==============4.对过账成功的记录 记录log到ztmm_140.DATA ls_tlog TYPE ztmm_140.DATA lt_tlog TYPE TABLE OF ztmm_140.DATA lv_date LIKE sy-datum.DATA lv_time LIKE sy-uzeit.DATA lv_tzone LIKE tzonref-tzone.DATA lv_tstamp LIKE tzonref-tstamps.lv_date = sy-datum.lv_time = sy-uzeit.CONVERT DATE lv_date TIME lv_time INTO TIME STAMP lv_tstamp TIME ZONE lv_tzone."20190927 zhongjz upate : "不仅仅是成功的记录存入log table, 所有成功或者失败的都需要存入log table"
* LOOP AT itab ASSIGNING FIELD-SYMBOL(<ls_itab_success>) WHERE materialdocument IS NOT INITIAL AND type = 'S'.LOOP AT itab ASSIGNING FIELD-SYMBOL(<ls_itab_success>).ls_tlog-z_tiwmstamp = lv_tstamp. "时间搓ls_tlog-incom = ih-incom."来料单号ls_tlog-item = <ls_itab_success>-item."项次ls_tlog-ebeln = <ls_itab_success>-po_number."采购凭证编号ls_tlog-ebelp = <ls_itab_success>-po_item."采购凭证的项目编号ls_tlog-budat = ih-pstng_date."凭证中的过账日期ls_tlog-bldat = ih-doc_date."凭证中的凭证日期ls_tlog-frbnr = ih-bill_of_lading."收货时提单号ls_tlog-bktxt = ih-header_txt."凭证抬头文本ls_tlog-werks = <ls_itab_success>-plant."工厂ls_tlog-matnr = <ls_itab_success>-material."物料编号ls_tlog-lgort = <ls_itab_success>-stge_loc."库存地点ls_tlog-charg = <ls_itab_success>-batch."批号ls_tlog-erfmg = <ls_itab_success>-entry_qnt."以录入项单位表示的数量ls_tlog-z_erfme = <ls_itab_success>-entry_uom."条目单位ls_tlog-netpr = <ls_itab_success>-netpr."净价ls_tlog-mwskz = <ls_itab_success>-mwskz."销售/购买税代码ls_tlog-peinh = <ls_itab_success>-peinh."价格单位ls_tlog-mblnr = <ls_itab_success>-materialdocument."物料凭证编号ls_tlog-mjahr = <ls_itab_success>-matdocumentyear."物料凭证的年份ls_tlog-z_type = <ls_itab_success>-type."单字符标记ls_tlog-z_wmssage = <ls_itab_success>-message."Char255APPEND ls_tlog TO lt_tlog.ENDLOOP.MODIFY ztmm_140 FROM TABLE lt_tlog.CLEAR ls_tlog.REFRESH lt_tlog.* status = 'S'.
* message = ''.ELSE.status = 'E'.message = '行项目不能为空!'.ENDIF.*-----------------------------------------------------------------------zlog_save2 'R'.
ENDFUNCTION.
相关文章:
SAP_ABAP_接口技术_RFC远程函数实践总结
SAP ABAP顾问能力模型梳理_企业数字化建设者的博客-CSDN博客SAP Abap顾问能力模型,ALV/REPORT|SMARTFROM|SCREEN|OLE|BAPI|BDC|PI|IDOC|RFC|API|WEBSERVICE|Enhancement|UserExits|Badi|Debughttps://blog.csdn.net/java_zhong1990/article/details/132469977 SAP接…...
计算机 --> 磁盘 --> 分区
一、分区;步骤较完整,未测试 网址:电脑硬盘怎么分区?C盘/D盘/E盘......快来创建自己的DIY磁盘吧!_e盘怎么创建_布 迪的博客-CSDN博客...
3D视觉测量:形位公差 平面度测量(附源码)
文章目录 0. 测试效果1. 基本内容2. 实现方法3. 代码实现4. 参考文章目录:3D视觉测量目录微信:dhlddxB站: Non-Stop_0. 测试效果 1. 基本内容 平面度是一个表达平面平整程度的度量指标,它描述了一个表面与一个理想平面之间的偏差程度。在工程和制造领域,平面度是一个重要的…...
vmware虚拟机远程开发
目录 1. 下载vmware2. 下载ubuntu镜像3. 安装4. 做一些设置4.1 分辨率设置4.2 语言下载4.3 输入法设置4.4 时区设置 5. 直接切换管理员权限6. 网络6.1 看ip6.2 ssh 7. 本地编译器连接远程服务器7.1 创建远程部署的配置7.2 文件同步7.3 远程启动项目 8. ubuntu安装golang环境8.1…...
Web安全——穷举爆破上篇(仅供学习)
Web安全 一、概述二、常见的服务1、burpsuite 穷举后台密码2、burpsuite 对 webshell 穷举破解密码3、有 token 防御的网站后台穷举破解密码3.1 burpsuite 设置宏获取 token 对网站后台密码破解3.2 编写脚本获取token 对网站后台密码破解 4、针对有验证码后台的穷举方法4.1 coo…...
POJ 3045 Cow Acrobats 二分+优先队列
一、题目大意 题目中给出了N头牛,这些牛要互相叠罗汉,牛i承担的风险risk[i]为牛i上面的牛的质量之和sum[i](如果上面没有牛就是0)减去牛i的力量strength[i],即risk[i]sum[i]-strength[i] 我们要优化这个叠罗汉的顺序…...
手写实现call() apply() bind()函数,附有详细注释,包含this指向、arguments讲解
手写实现call() apply() bind()函数是很经典的问题,但是能掰扯清楚的文章确实不算多,于是笔者才决定写下本文,希望能给读者带来一些启发,如有错误欢迎指正。 目录 补充知识 函数中的this指向 类数组对象arguments call() 原理…...
MySQL中日期、时间直接相减的坑
前言 在牛客网上写一道 SQL 题时,需要计算两个日期之间相隔的秒数,我在写的时候直接将两个日期进行相减,得出来的值却不是相差的秒数。 情景再现 我在 MySQL 中进行了测试,得出的结论是:如果日期类型直接相减&#…...
漏洞发现-web应用发现探针类型利用(43)
关于在真实环境下面,这个漏洞该如何发现 这里老师把它分成了三块第一类是 #已知cms 如常见的dedecms,discuz,wordpress等源码结构,这些都是网上比较知名的php源码的cms的名称,这是我们在国内常见的几个程序…...
专门针对开发人员,攻击者利用Rust获取操作系统信息
近日,研究人员在 Rust 编程语言的 crate 注册表中发现了一些恶意软件包,专门针对开发人员。 Phylum 在上周发布的一份报告中称,这些库是由一个名为 "amaperf "的用户在 2023 年 8 月 14 日至 16 日之间上传的。现已删除的软件包名…...
PHP8的箭头函数-PHP8知识详解
php 7.4 引入了箭头函数(Arrow Functions),并在 PHP 8 中得到了进一步改进和扩展。 箭头函数是一种更简洁的匿名函数形式,它们提供了一种更便捷的方式来定义轻量级的、单行的回调函数。 箭头函数的语法如下: fn (参…...
初识PHP编程:探索Web开发的起点
初识PHP编程:探索Web开发的起点 PHP(Hypertext Preprocessor)是一种广泛使用的服务器端脚本语言,专门用于Web开发。它的强大功能和简单易学的语法使得它成为初学者和专业开发者的首选。在本文中,我们将探索什么是PHP&…...
Git——Windows平台创建gitee私有仓库详解
目录 1. 安装git 2. gitbash配置 2.1 设置 2.2 生成key 2.3 项目管理 2.3.1 本地新建 2.3.2 clone远程仓库的工程到本地改文件 1. 安装git 默认安装。 2. gitbash配置 2.1 设置 打开gitbash,设置用户名和邮箱: git config --global user.name …...
Git基础教程-常用命令整理:学会Git使用方法和错误解决
目录 一、了解Git的基本概念 二、Git的安装和配置 Git的安装 Git的配置 用户信息 文本编辑器 差异分析工具 查看配置信息 三、Git的基本操作 基本原理 基本操作命令 基本操作示例 场景一:创建新仓库 场景二:拉取并编辑远程仓库 四、常见问…...
Ops实践 | 国产化KylinOS系统中快速部署企业内部高性能DNS服务器、时间同步服务器 (精选)...
各位看友,由于微信公众号推送机制改变,现在需要设置为星标才能收到的本公众号推送消息哟。关注回复【学习交流群】加入【安全开发运维】答疑交流群 请朋友们【多多点击文中的广告】,支持作者更新更多文章。 目录: 本文为作者原创文章…...
stm32之IIC协议
主要通过两个层面来讲:物理层、协议层。 IIC是一个同步半双工串行总线协议。 一、物理层(通信模型) 1、最早是飞利浦公司开发的这个协议,最早应用到其产品上去。 2、两线制(两根信号线) 其中SCL为时钟…...
范式 事务 多表查询
范式 概念:设计数据库时,需要遵循的一些规范。要遵循后边的范式要求,必须遵循前边的所有范式要求 第一范式: 数据库表的每一列都是不可分割的基本数据项 这样子就不满足第一范式 这样子就满足第一范式 存在问题: 数…...
基于白鲸算法优化的BP神经网络(预测应用) - 附代码
基于白鲸算法优化的BP神经网络(预测应用) - 附代码 文章目录 基于白鲸算法优化的BP神经网络(预测应用) - 附代码1.数据介绍2.白鲸优化BP神经网络2.1 BP神经网络参数设置2.2 白鲸算法应用 4.测试结果:5.Matlab代码 摘要…...
java并发编程 ReentrantLock详解
文章目录 1 概要2 相关文章3 例子4 方法详解4.1 lock()4.2 unlock()4.3 tryLock()4.4 其他公平锁 总结 1 概要 ReentrantLock 通过实现Lock接口的行为,提供锁机制。但是实现委托给了内部的Sync,Sync extends AbstractQueuedSynchronizer,继承…...
Java获取文件内容IO流
文章目录 InputStream和ReaderScannerNIO外传 一般读取文件类的使用字符流即可 InputStream和Reader InputStream和Reader是Java IO中的两个重要的抽象基类,InputStream是二进制流,Reader是字符流。使用InputStream或者Reader读取文件内容可以帮助我们…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
