当前位置: 首页 > article >正文

ABAP RFC SQL 模糊查询与动态区间条件实战解析

1. ABAP RFC接口中的模糊查询实战技巧在SAP系统开发中RFCRemote Function Call接口是实现跨系统数据交互的核心技术。当外部系统需要从SAP获取数据时模糊查询功能往往成为刚需。不同于选择屏幕的便捷操作RFC接口需要开发者手动处理各种查询条件。模糊查询的基础实现其实非常简单主要依赖SQL的LIKE操作符和通配符%。比如要查询物料描述包含手机的所有记录标准的ABAP代码会这样写DATA: lv_maktx TYPE string. CONCATENATE % 手机 % INTO lv_maktx. SELECT * FROM MAKT WHERE MAKTX LIKE lv_maktx INTO TABLE DATA(lt_result).这里有个实际开发中的经验细节当传入的查询参数可能为空时建议自动转换为%%以匹配所有记录避免因空参数导致查询无结果。我在项目中见过不少因为忽略这个细节而引发的生产问题。对于多字段模糊查询的场景代码会稍显复杂。比如同时查询物料编号、描述和供应商名称时DATA: lv_matnr TYPE string, lv_maktx TYPE string, lv_lifnr TYPE string. CONCATENATE % iv_matnr % INTO lv_matnr. CONCATENATE % iv_maktx % INTO lv_maktx. CONCATENATE % iv_lifnr % INTO lv_lifnr. SELECT * FROM EKPO WHERE MATNR LIKE lv_matnr AND MAKTX LIKE lv_maktx AND LIFNR LIKE lv_lifnr INTO TABLE et_data.性能优化建议当表中数据量较大时模糊查询特别是前导通配符如%ABC会导致全表扫描。这种情况下可以考虑添加必要的索引限制返回记录数量UP TO n ROWS考虑使用全文检索技术如SAP HANA的FULLTEXT INDEX2. 动态区间条件的智能处理方案日期和数值的区间查询是业务系统中最常见的需求之一但在RFC接口中处理各种边界条件需要特别注意。根据我的项目经验用户输入通常存在三种情况都需要在代码中妥善处理。日期区间处理的经典模式如下 1. 用户未输入任何日期 IF iv_date_from IS INITIAL AND iv_date_to IS INITIAL. lv_date_from 19000101. lv_date_to 99991231. 2. 用户只输入起始日期 ELSEIF iv_date_from IS NOT INITIAL AND iv_date_to IS INITIAL. lv_date_from iv_date_from. lv_date_to iv_date_from. 3. 用户只输入结束日期 ELSEIF iv_date_from IS INITIAL AND iv_date_to IS NOT INITIAL. lv_date_from iv_date_to. lv_date_to iv_date_to. 4. 用户输入完整区间 ELSE. lv_date_from iv_date_from. lv_date_to iv_date_to. ENDIF.数值区间处理逻辑类似但要注意数值类型的特殊处理 处理金额区间 IF iv_amount_from 0 AND iv_amount_to 0. lv_amount_from -99999999. lv_amount_to 999999999. ELSEIF iv_amount_from 0 AND iv_amount_to 0. lv_amount_to iv_amount_from. ELSEIF iv_amount_from 0 AND iv_amount_to 0. lv_amount_from iv_amount_to. ENDIF.在实际项目中我建议将这些逻辑封装成可复用的工具方法。比如创建一个ZCL_RFC_UTIL工具类包含以下方法BUILD_DATE_RANGEBUILD_NUMBER_RANGEBUILD_STRING_PATTERN3. 非选择屏幕场景的参数校验技巧在RFC接口开发中参数校验是保证系统稳定性的关键环节。与选择屏幕自动校验不同RFC接口需要开发者手动实现所有校验逻辑。日期格式校验是其中最常见的需求。以下是经过实战检验的校验函数METHODS validate_date IMPORTING iv_date TYPE char8 RETURNING VALUE(rv_valid) TYPE abap_bool. METHOD validate_date. rv_valid abap_false. 检查长度 IF iv_date IS INITIAL OR strlen( iv_date ) 8. RETURN. ENDIF. 检查是否为数字 IF iv_date CO 0123456789. 提取年月日 DATA(lv_year) CONV numc4( iv_date(4) ). DATA(lv_month) CONV numc2( iv_date4(2) ). DATA(lv_day) CONV numc2( iv_date6(2) ). 检查范围 IF lv_month BETWEEN 1 AND 12 AND lv_day BETWEEN 1 AND 31. rv_valid abap_true. ENDIF. ENDIF. ENDMETHOD.数值范围校验同样重要特别是对于金额、数量等关键业务字段METHODS validate_amount_range IMPORTING iv_from TYPE any iv_to TYPE any RETURNING VALUE(rv_valid) TYPE abap_bool. METHOD validate_amount_range. rv_valid abap_false. 检查是否为数值 IF iv_from IS NOT INITIAL AND iv_from CN 0123456789.-. RETURN. ENDIF. IF iv_to IS NOT INITIAL AND iv_to CN 0123456789.-. RETURN. ENDIF. 检查区间合理性 IF iv_from IS NOT INITIAL AND iv_to IS NOT INITIAL AND iv_to iv_from. RETURN. ENDIF. rv_valid abap_true. ENDMETHOD.在C#等外部系统调用RFC时同样需要实现类似的校验逻辑。这不仅能避免无效调用还能显著提升系统性能。4. 综合实战完整的RFC函数实现结合上述技术点我们来看一个完整的RFC函数实现示例。这个函数实现了多条件的模糊查询和区间筛选FUNCTION Z_GET_MATERIAL_DATA. *---------------------------------------------------------------------- **本地接口 * IMPORTING * VALUE(IV_MATNR) TYPE CHAR18 OPTIONAL * VALUE(IV_MAKTX) TYPE CHAR40 OPTIONAL * VALUE(IV_DATE_FROM) TYPE CHAR8 OPTIONAL * VALUE(IV_DATE_TO) TYPE CHAR8 OPTIONAL * VALUE(IV_AMOUNT_FROM) TYPE MBTR OPTIONAL * VALUE(IV_AMOUNT_TO) TYPE MBTR OPTIONAL * EXPORTING * VALUE(EV_COUNT) TYPE I * TABLES * ET_DATA STRUCTURE ZMATERIAL_DATA *---------------------------------------------------------------------- DATA: lv_matnr TYPE string, lv_maktx TYPE string, lv_date_from TYPE char8, lv_date_to TYPE char8, lv_amount_from TYPE mbtr, lv_amount_to TYPE mbtr. 处理模糊查询参数 IF iv_matnr IS NOT INITIAL. CONCATENATE % iv_matnr % INTO lv_matnr. ELSE. lv_matnr %%. ENDIF. IF iv_maktx IS NOT INITIAL. CONCATENATE % iv_maktx % INTO lv_maktx. ELSE. lv_maktx %%. ENDIF. 处理日期区间 IF iv_date_from IS INITIAL AND iv_date_to IS INITIAL. lv_date_from 19000101. lv_date_to 99991231. ELSEIF iv_date_from IS NOT INITIAL AND iv_date_to IS INITIAL. lv_date_from iv_date_from. lv_date_to iv_date_from. ELSEIF iv_date_from IS INITIAL AND iv_date_to IS NOT INITIAL. lv_date_from iv_date_to. lv_date_to iv_date_to. ELSE. lv_date_from iv_date_from. lv_date_to iv_date_to. ENDIF. 处理金额区间 IF iv_amount_from IS INITIAL AND iv_amount_to IS INITIAL. lv_amount_from -99999999. lv_amount_to 999999999. ELSEIF iv_amount_from IS NOT INITIAL AND iv_amount_to IS INITIAL. lv_amount_to iv_amount_from. ELSEIF iv_amount_from IS INITIAL AND iv_amount_to IS NOT INITIAL. lv_amount_from iv_amount_to. ELSE. lv_amount_from iv_amount_from. lv_amount_to iv_amount_to. ENDIF. 执行查询 SELECT * FROM ZMATERIAL_DATA WHERE MATNR LIKE lv_matnr AND MAKTX LIKE lv_maktx AND BUDAT BETWEEN lv_date_from AND lv_date_to AND DMBTR BETWEEN lv_amount_from AND lv_amount_to INTO TABLE ET_DATA UP TO 1000 ROWS. 返回记录数 EV_COUNT lines( ET_DATA ). ENDFUNCTION.这个函数体现了几个最佳实践所有输入参数都设置为OPTIONAL提高接口灵活性对每个查询条件都做了空值处理使用UP TO限制返回记录数避免大数据量问题返回实际查询到的记录数便于调用方处理在外部系统调用时比如用C#可以这样实现public ListMaterialData GetMaterialData(string materialNo, string description, string dateFrom, string dateTo, decimal? amountFrom, decimal? amountTo) { // 创建RFC连接 var destination RfcDestinationManager.GetDestination(SAP_DEV); // 准备RFC函数 var function destination.Repository.CreateFunction(Z_GET_MATERIAL_DATA); // 设置输入参数 function.SetValue(IV_MATNR, materialNo); function.SetValue(IV_MAKTX, description); function.SetValue(IV_DATE_FROM, ValidateDate(dateFrom)); function.SetValue(IV_DATE_TO, ValidateDate(dateTo)); function.SetValue(IV_AMOUNT_FROM, amountFrom ?? 0); function.SetValue(IV_AMOUNT_TO, amountTo ?? 0); // 执行调用 function.Invoke(destination); // 处理返回数据 var resultTable function.GetTable(ET_DATA); return resultTable.ToListMaterialData(); } private string ValidateDate(string date) { if(DateTime.TryParseExact(date, yyyyMMdd, CultureInfo.InvariantCulture, DateTimeStyles.None, out _)) { return date; } return string.Empty; }5. 性能优化与异常处理在实现基础功能后我们需要关注RFC接口的性能和稳定性。根据我的项目经验以下几个优化点特别重要批量处理优化当需要处理大量数据时建议采用分页查询模式。可以在RFC函数中添加分页参数FUNCTION Z_GET_DATA_WITH_PAGING. *---------------------------------------------------------------------- **本地接口 * IMPORTING * VALUE(IV_PAGE_SIZE) TYPE I DEFAULT 100 * VALUE(IV_PAGE_INDEX) TYPE I DEFAULT 1 * ... *---------------------------------------------------------------------- DATA: lv_offset TYPE i. 计算偏移量 lv_offset ( iv_page_index - 1 ) * iv_page_size. 使用分页查询 SELECT * FROM ZTABLE WHERE ... INTO TABLE et_data UP TO iv_page_size ROWS OFFSET lv_offset. ENDFUNCTION.缓存机制对于不常变动的参考数据可以实现缓存机制减少数据库访问 类属性定义 CLASS-DEFINITION. PUBLIC SECTION. CLASS-DATA: gt_cache TYPE STANDARD TABLE OF zmaterial_data. ENDCLASS. 在RFC函数中检查缓存 IF gt_cache IS INITIAL. 从数据库加载数据到缓存 SELECT * FROM zmaterial_data INTO TABLE gt_cache. ENDIF. 从缓存中筛选数据 LOOP AT gt_cache INTO DATA(ls_data) WHERE matnr LIKE lv_matnr AND ... APPEND ls_data TO et_data. ENDLOOP.异常处理完善的异常处理是生产环境RFC接口的必备特性FUNCTION Z_GET_DATA_SAFE. *---------------------------------------------------------------------- **本地接口 * EXPORTING * VALUE(EV_SUCCESS) TYPE ABAP_BOOL * VALUE(EV_MESSAGE) TYPE STRING *---------------------------------------------------------------------- TRY. 业务逻辑处理 ... ev_success abap_true. ev_message Success. CATCH cx_root INTO DATA(lx_error). 记录错误日志 DATA(lv_error) lx_error-get_text( ). WRITE lv_error TO ev_message. ev_success abap_false. 可选发送错误通知 zcl_error_handlersend_alert( lv_error ). ENDTRY. ENDFUNCTION.在外部系统调用时同样需要处理各种可能的异常try { var result sapService.GetMaterialData(...); // 处理结果 } catch(RfcCommunicationException ex) { // 处理通信异常 logger.Error(SAP通信错误, ex); } catch(RfcLogonException ex) { // 处理登录异常 logger.Error(SAP登录失败, ex); } catch(Exception ex) { // 处理其他异常 logger.Error(调用SAP接口出错, ex); }6. 高级技巧动态WHERE条件构建对于条件特别复杂的查询场景我们可以使用动态WHERE条件技术。这种方法特别适合条件组合多变的查询需求。基础动态WHERE实现DATA: lv_where TYPE string. 构建WHERE条件 CONCATENATE MATNR LIKE lv_matnr INTO lv_where. IF lv_maktx IS NOT INITIAL. CONCATENATE lv_where AND MAKTX LIKE lv_maktx INTO lv_where. ENDIF. 执行动态查询 DATA(lt_result) VALUE ztt_material_data( ). DATA(lv_sql) |SELECT * FROM ZMATERIAL_DATA WHERE { lv_where }|. TRY. EXEC SQL. EXECUTE IMMEDIATE :lv_sql INTO :lt_result. ENDEXEC. CATCH cx_sy_dynamic_osql_error INTO DATA(lx_error). 错误处理 ENDTRY.更安全的参数化动态查询DATA: lv_where TYPE string, lt_where TYPE TABLE OF string. 添加条件 IF lv_matnr IS NOT INITIAL. APPEND MATNR LIKE lv_matnr TO lt_where. ENDIF. IF lv_maktx IS NOT INITIAL. APPEND MAKTX LIKE lv_maktx TO lt_where. ENDIF. 合并条件 IF lt_where IS NOT INITIAL. lv_where concat_lines_of( table lt_where sep AND ). ELSE. lv_where 1 1. 默认条件 ENDIF. 执行查询 SELECT * FROM ZMATERIAL_DATA WHERE (lv_where) INTO TABLE DATA(lt_result).这种方法相比纯字符串拼接更安全避免了SQL注入风险同时保持了灵活性。在最近的一个项目中我们开发了一个通用的数据查询RFC函数可以接收任意表名和条件参数其核心就是这种动态WHERE技术。这使得前端可以自由组合各种查询条件而无需为每个查询场景开发单独的RFC函数。

相关文章:

ABAP RFC SQL 模糊查询与动态区间条件实战解析

1. ABAP RFC接口中的模糊查询实战技巧 在SAP系统开发中,RFC(Remote Function Call)接口是实现跨系统数据交互的核心技术。当外部系统需要从SAP获取数据时,模糊查询功能往往成为刚需。不同于选择屏幕的便捷操作,RFC接口…...

保姆级教程:在YOLOv8.yaml里手动添加P2层,让你的模型看清8x8像素的小目标

在YOLOv8中集成P2层的实战指南:从配置文件修改到性能优化 当面对监控摄像头中快速移动的蚂蚁群或是卫星图像里的小型车辆时,传统目标检测模型往往会力不从心。这些8x8像素级别的微小目标,恰恰是许多实际应用场景中的关键检测对象。本文将彻底…...

命名空间自动推导、嵌套别名、跨文件作用域优化,PHP 8.9这3项增强将淘汰PSR-4自动加载器?

第一章:PHP 8.9命名空间增强的演进背景与设计哲学PHP 命名空间自 5.3 版本引入以来,已成为组织大型代码库的核心机制。然而,随着现代 PHP 应用向模块化、跨包协作和类型安全深度演进,传统命名空间在语义表达力、跨作用域引用效率及…...

抖音视频批量采集工具:3步搞定全自动下载方案

抖音视频批量采集工具:3步搞定全自动下载方案 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖音…...

Browsershot 终极指南:高效实现网页截图与PDF转换的PHP解决方案

Browsershot 终极指南:高效实现网页截图与PDF转换的PHP解决方案 【免费下载链接】browsershot Convert HTML to an image, PDF or string 项目地址: https://gitcode.com/gh_mirrors/br/browsershot 在当今Web开发中,自动化网页截图和PDF生成已成…...

如何快速掌握BetterGI:面向原神玩家的智能辅助工具终极指南

如何快速掌握BetterGI:面向原神玩家的智能辅助工具终极指南 【免费下载链接】better-genshin-impact 📦BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动刷本 | 自动采集/挖矿/锄地 | 一条龙 | 全连音游…...

【农业物联网PHP可视化实战指南】:20年专家亲授5大高并发数据看板搭建秘技,错过再等三年

第一章:农业物联网PHP可视化实战导论 农业物联网正加速推动传统农耕向数据驱动、智能决策的现代化模式演进。在田间部署的温湿度传感器、土壤EC/pH探头、光照强度模块等设备,通过LoRa或Wi-Fi将实时数据上传至边缘网关或云平台;而PHP凭借其轻量…...

英雄联盟智能对局分析系统:数据驱动的排位赛胜率提升方案

英雄联盟智能对局分析系统:数据驱动的排位赛胜率提升方案 【免费下载链接】hh-lol-prophet lol 对局先知 上等马 牛马分析程序 选人阶段判断己方大爹 大坑, 明确对局目标 基于lol client api 合法不封号 项目地址: https://gitcode.com/gh_mirrors/hh/hh-lol-prop…...

4大核心能力!March7thAssistant让崩坏:星穹铁道实现全自动游戏体验

4大核心能力!March7thAssistant让崩坏:星穹铁道实现全自动游戏体验 【免费下载链接】March7thAssistant 崩坏:星穹铁道全自动 三月七小助手 项目地址: https://gitcode.com/gh_mirrors/ma/March7thAssistant March7thAssistant是一款专…...

如何免费优化电脑散热?FanControl风扇控制软件5分钟入门教程

如何免费优化电脑散热?FanControl风扇控制软件5分钟入门教程 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trend…...

智能课堂助手:如何让教学管控与自主学习和谐共存

智能课堂助手:如何让教学管控与自主学习和谐共存 【免费下载链接】JiYuTrainer 极域电子教室防控制软件, StudenMain.exe 破解 项目地址: https://gitcode.com/gh_mirrors/ji/JiYuTrainer 在数字化教学环境中,极域电子教室系统作为主流教学管控工…...

FanControl智能调控指南:从噪音优化到硬件保护的全方位解决方案

FanControl智能调控指南:从噪音优化到硬件保护的全方位解决方案 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Tr…...

Cursor Pro功能解锁技术指南:突破限制与优化使用方案

Cursor Pro功能解锁技术指南:突破限制与优化使用方案 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your tria…...

Cat-Catch资源嗅探终极指南:5分钟掌握网页媒体高效抓取

Cat-Catch资源嗅探终极指南:5分钟掌握网页媒体高效抓取 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在当今信息爆炸的时代&#xff…...

2026年终极指南:3步掌握B站资源下载神器BiliTools

2026年终极指南:3步掌握B站资源下载神器BiliTools 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools 还在为…...

如何快速上手 Plus Jakarta Sans:面向新手的完整实践指南

如何快速上手 Plus Jakarta Sans:面向新手的完整实践指南 【免费下载链接】PlusJakartaSans Jakarta Sans is a open-source fonts. Designed for Jakarta "City of collaboration" program in 2020. 项目地址: https://gitcode.com/gh_mirrors/pl/Plus…...

Papa Parse故障排查:从异常识别到深度修复的5个实战策略

Papa Parse故障排查:从异常识别到深度修复的5个实战策略 【免费下载链接】PapaParse Fast and powerful CSV (delimited text) parser that gracefully handles large files and malformed input 项目地址: https://gitcode.com/gh_mirrors/pa/PapaParse 问题…...

Blazor组件生态生死线,2026年淘汰清单曝光:17个高危NuGet包+5个即将废弃API(含迁移路径图谱)

第一章:Blazor组件生态生死线:2026年淘汰预警全景图Blazor 组件生态正站在结构性分化的临界点。微软官方已明确将 .NET 8 的长期支持(LTS)周期定为至 2026 年 11 月,而所有基于 .NET 6/7 构建的第三方组件库若未完成向…...

STM32F407 RTC实战:从CubeMX配置到低功耗日历应用

1. STM32F407 RTC模块入门指南 第一次接触STM32的RTC功能时,我完全被它强大的低功耗特性震惊了。记得当时做一个环境监测项目,需要设备在断电后依然能保持准确计时,RTC完美解决了这个问题。STM32F407的RTC模块不仅提供精准的日历时钟功能&…...

贵州公共活动策划公司名录

2026年想在贵州办一场出圈的公共活动?从企业年会到文化展览,从体育赛事到艺术节庆,选对策划公司是关键!但贵州公共活动策划公司鱼龙混杂,如何避开“低价陷阱”“执行脱节”等坑?本文结合本地市场真实案例&a…...

手把手教你部署coze-loop:让AI帮你重构代码,提升编程效率

手把手教你部署coze-loop:让AI帮你重构代码,提升编程效率 1. 项目概述 coze-loop是一款基于Ollama框架的AI代码优化助手,它能像一位专业软件工程师一样,帮你重构和优化代码。这个工具特别适合那些希望提升代码质量但时间有限的开…...

技术判断力之AI三问映

认识Pass层级结构 Pass范围从上到下一共分为5个层级: 模块层级:单个.ll或.bc文件 调用图层级:函数调用的关系。 函数层级:单个函数。 基本块层级:单个代码块。例如C语言中{}括起来的最小代码。 指令层级:单…...

5个进阶技巧:掌握ControlNet-v1-1_fp16_safetensors的图像生成调优

5个进阶技巧:掌握ControlNet-v1-1_fp16_safetensors的图像生成调优 【免费下载链接】ControlNet-v1-1_fp16_safetensors 项目地址: https://ai.gitcode.com/hf_mirrors/comfyanonymous/ControlNet-v1-1_fp16_safetensors ControlNet-v1-1_fp16_safetensors为…...

英雄联盟智能助手ChampR:快速提升游戏水平的终极指南

英雄联盟智能助手ChampR:快速提升游戏水平的终极指南 【免费下载链接】champr 🐶 Yet another League of Legends helper 项目地址: https://gitcode.com/gh_mirrors/ch/champr 你是否在英雄联盟游戏中苦苦寻找最佳的出装和符文配置?C…...

别再数据线了!用FastAPI 分钟搭个局域网文件+剪贴板神器伊

为 HagiCode 添加 GitHub Pages 自动部署支持 本项目早期代号为 PCode,现已正式更名为 HagiCode。本文记录了如何为项目引入自动化静态站点部署能力,让内容发布像喝水一样简单。 背景/引言 在 HagiCode 的开发过程中,我们遇到了一个很现实的问…...

简单三步:用Win11Debloat一键清理Windows系统,让你的电脑运行速度提升50%

简单三步:用Win11Debloat一键清理Windows系统,让你的电脑运行速度提升50% 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various othe…...

突破抖音内容采集瓶颈:开源工具如何实现高效批量下载

突破抖音内容采集瓶颈:开源工具如何实现高效批量下载 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppor…...

最新短网址系统源码 分用户链接

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示一、详细介绍 最新短网址系统源码 分用户链接 简单介绍一下这个短链接源码,这个是我根据自己需要自建的,偏向于个人需求的完成 说一下特点吧,短链接格式如同https://域名/0810a7/t…...

解锁嵌入式视觉开发:ESP32-OpenCV实现低功耗边缘计算方案

解锁嵌入式视觉开发:ESP32-OpenCV实现低功耗边缘计算方案 【免费下载链接】esp32-opencv Shrinked OpenCV for ESP32 项目地址: https://gitcode.com/gh_mirrors/es/esp32-opencv 在物联网设备日益普及的今天,嵌入式视觉技术正面临着"算力需…...

最新多模式防红系统源码+对接易支付

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示一、详细介绍 最新多模式防红系统源码对接易支付 支持直链/跳转/短链接,使用本系统红了的域名可在微信和QQ直接打开, 系统带访问记录列表,可查看访问者ip和访问方式,带…...