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

ABAP 批导demo调用SM30表维护demo

ABAP 批导demo&调用SM30表维护demo

&---------------------------------------------------------------------
*& Report ZPP036
&---------------------------------------------------------------------
*&
&---------------------------------------------------------------------
REPORT zpp036.

TABLES:ztpp010,sscrfields.

**全局定义
DATA:gt_alv TYPE TABLE OF ztpp010,
gs_alv TYPE ztpp010.

DATA: BEGIN OF itfile OCCURS 0 ,
matnr TYPE string, "物料
zmatnr1 TYPE string, "替代料1
zmatnr2 TYPE string, "替代料2
END OF itfile.

DATA: gs_functxt TYPE smp_dyntxt. "功能代码文本
DATA: gt_fcat TYPE lvc_t_fcat, "字段目录
gs_fcat TYPE lvc_s_fcat,
gs_layout TYPE lvc_s_layo.
DATA: excl_cua_funct TYPE TABLE OF vimexclfun.

PARAMETERS: p_pfile TYPE localfile.
SELECTION-SCREEN: FUNCTION KEY 1.
SELECTION-SCREEN: FUNCTION KEY 2.

**初始化
INITIALIZATION.

gs_functxt-icon_id = icon_tools.
gs_functxt-quickinfo = ‘替代料关系表’.
gs_functxt-icon_text = ‘替代料关系表’.
sscrfields-functxt_01 = gs_functxt.

gs_functxt-icon_id = icon_export.
gs_functxt-quickinfo = ‘下载导入模版’.
gs_functxt-icon_text = ‘下载导入模版’.
sscrfields-functxt_02 = gs_functxt.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_pfile.
PERFORM frm_input_help CHANGING p_pfile.

AT SELECTION-SCREEN.
IF sscrfields-ucomm = ‘FC02’.
PERFORM frm_download_template.
ELSEIF sscrfields-ucomm = ‘FC01’.
PERFORM frm_view_maintenance_call TABLES excl_cua_funct USING ‘ZTPP010’ ‘S’.
ENDIF.

START-OF-SELECTION.
PERFORM get_data USING p_pfile. "导入数据

END-OF-SELECTION.
PERFORM frm_layout.
PERFORM frm_fcat.
PERFORM frm_show.
&---------------------------------------------------------------------
*& Form frm_input_help
&---------------------------------------------------------------------
*& text
&---------------------------------------------------------------------
*& <-- P_PFILE
&---------------------------------------------------------------------
FORM frm_input_help CHANGING p_o_file.
DATA:
ltd_filetable TYPE filetable,
lth_filetable TYPE LINE OF filetable,
lw_rc TYPE i.

CALL METHOD cl_gui_frontend_services=>file_open_dialog
CHANGING
file_table = ltd_filetable
rc = lw_rc
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.

IF sy-subrc = 0.
READ TABLE ltd_filetable INTO lth_filetable INDEX 1.
p_o_file = lth_filetable-filename.
ELSE.
MESSAGE ID sy-msgid TYPE ‘I’ NUMBER sy-msgno
DISPLAY LIKE ‘E’
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
LEAVE LIST-PROCESSING.
ENDIF.

ENDFORM.
&---------------------------------------------------------------------
*& Form frm_download_template
&---------------------------------------------------------------------
*& text
&---------------------------------------------------------------------
*& --> p1 text
*& <-- p2 text
&---------------------------------------------------------------------
FORM frm_download_template .
DATA: lv_filepath TYPE string, " 存放路径
lv_filename TYPE string, "文件名称
lv_path TYPE string . " 下载后存放全路径
DATA: lv_objdata LIKE wwwdatatab,
lv_obj_name LIKE wwwdatatab-objid,
lt_mime LIKE w3mime OCCURS 10.
DATA: lv_ret TYPE abap_bool,
lv_answer.
DATA: lv_file TYPE string.

"设置 www object信息
lv_obj_name = ‘ZPP036’.

"保存对话框
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
window_title = ‘下载模板’
default_extension = ‘xlsx’
default_file_name = ‘ZPP036导入模板.xlsx’
file_filter = ‘EXCEL’
prompt_on_overwrite = ‘’
CHANGING
fullpath = lv_path
filename = lv_filename
path = lv_filepath
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.

"检查文件是否存在
MOVE lv_path TO lv_file.
CALL METHOD cl_gui_frontend_services=>file_exist
EXPORTING
file = lv_file
RECEIVING
result = lv_ret
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
wrong_parameter = 3
not_supported_by_gui = 4
OTHERS = 5.

IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ENDIF.

IF lv_ret EQ ‘X’.

  • 模版已存在,是否覆盖
    CALL FUNCTION ‘POPUP_TO_CONFIRM’
    EXPORTING
    text_question = ‘模版已存在,是否覆盖?’
    text_button_1 = ‘是’(005)
    text_button_2 = ‘否’(006)
    IMPORTING
    answer = lv_answer
    EXCEPTIONS
    text_not_found = 1
    OTHERS = 2.
    IF sy-subrc <> 0.

    ENDIF.

    IF lv_answer EQ ‘A’. "取消
    EXIT.
    ELSEIF lv_answer NE ‘1’. "否
    EXIT.
    ENDIF.
    ELSE.
    lv_answer = ‘1’.
    ENDIF.

    IF lv_answer EQ ‘1’.

    SELECT relid objid
    FROM wwwdata
    INTO CORRESPONDING FIELDS OF lv_objdata
    UP TO 1 ROWS
    WHERE srtf2 = 0
    AND relid = ‘MI’
    AND objid = lv_obj_name.
    ENDSELECT.

    IF lv_path IS NOT INITIAL.
    " 装载至本地文件
    p_pfile = lv_path.
    CALL FUNCTION ‘DOWNLOAD_WEB_OBJECT’ "
    EXPORTING
    key = lv_objdata
    destination = p_pfile.
    ENDIF.

    ENDIF.
    ENDFORM.
    &---------------------------------------------------------------------
    *& Form frm_view_maintenance_call
    &---------------------------------------------------------------------
    *& text
    &---------------------------------------------------------------------
    *& --> EXCL_CUA_FUNCT
    *& --> P_
    *& --> P_
    &---------------------------------------------------------------------
    FORM frm_view_maintenance_call TABLES excl_cua_funct STRUCTURE vimexclfun
    USING p_view_name LIKE dd02v-tabname
    p_action TYPE char1.

    CALL FUNCTION ‘VIEW_MAINTENANCE_CALL’
    EXPORTING
    action = p_action

  • CORR_NUMBER                  = '          '
    
  • GENERATE_MAINT_TOOL_IF_MISSING       = ' '
    
  • SHOW_SELECTION_POPUP         = ' '
    view_name                    = p_view_name
    
  • NO_WARNING_FOR_CLIENTINDEP   = ' '
    
  • RFC_DESTINATION_FOR_UPGRADE  = ' '
    
  • CLIENT_FOR_UPGRADE           = ' '
    
  • VARIANT_FOR_SELECTION        = ' '
    
  • COMPLEX_SELCONDS_USED        = ' '
    
  • CHECK_DDIC_MAINFLAG          = ' '
    
  • SUPPRESS_WA_POPUP            = ' '
    

    TABLES

  • DBA_SELLIST                  =
    excl_cua_funct               = excl_cua_funct
    

    EXCEPTIONS
    client_reference = 1
    foreign_lock = 2
    invalid_action = 3
    no_clientindependent_auth = 4
    no_database_function = 5
    no_editor_function = 6
    no_show_auth = 7
    no_tvdir_entry = 8
    no_upd_auth = 9
    only_show_allowed = 10
    system_failure = 11
    unknown_field_in_dba_sellist = 12
    view_not_found = 13
    maintenance_prohibited = 14
    OTHERS = 15.
    IF sy-subrc <> 0.

  • Implement suitable error handling here
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

ENDFORM.
&---------------------------------------------------------------------
*& Form get_data
&---------------------------------------------------------------------
*& text
&---------------------------------------------------------------------
*& --> P_PFILE
&---------------------------------------------------------------------
FORM get_data USING p_p_pfile.

FIELD-SYMBOLS: TYPE any.
DATA: l_intern TYPE zalsmex_tabline3 OCCURS 0 WITH HEADER LINE.

DATA: c_row TYPE i VALUE 4, "读EXCEL第4行开始
c_col TYPE i VALUE 1, "读EXCEL第1列开始
l_index TYPE i,
l_msg(60) TYPE c,
g_mod TYPE d,
l_row(5) TYPE n,
li_len TYPE sy-tabix,
l_cstr(4).

CALL FUNCTION ‘ZALSM_EXCEL_TO_INTERNAL_TABLE2’
EXPORTING
filename = p_pfile
i_begin_col = ‘1’ "开始列
i_begin_row = ‘2’ "开始行
i_end_col = ‘3’ "结束列
i_end_row = ‘99999’ "结束行

  • I_END_ROW               = '100000'   "结束行
    
  • I_SHEET_NO              =
    

    TABLES
    intern = l_intern
    EXCEPTIONS
    inconsistent_parameters = 1
    upload_ole = 2
    OTHERS = 3.
    IF sy-subrc <> 0.
    MESSAGE ‘导入数据文件失败!’ TYPE ‘S’.
    STOP.
    ENDIF.

    SORT l_intern BY row col.

    REFRESH gt_alv.
    LOOP AT l_intern.
    ASSIGN COMPONENT l_intern-col OF STRUCTURE itfile TO .
    "动态方法将值传到相应的内表
    = l_intern-value.

    AT END OF row.
    MOVE-CORRESPONDING itfile TO gs_alv.

    APPEND gs_alv TO gt_alv.
    CLEAR: gs_alv,itfile.
    

    ENDAT.
    ENDLOOP.

    CHECK gt_alv IS NOT INITIAL.

    MODIFY ztpp010 FROM TABLE gt_alv.
    IF sy-subrc = 0.
    COMMIT WORK.
    MESSAGE ‘已成功导入’ TYPE ‘S’.
    ENDIF.

ENDFORM.
&---------------------------------------------------------------------
*& Form frm_layout
&---------------------------------------------------------------------
*& text
&---------------------------------------------------------------------
*& --> p1 text
*& <-- p2 text
&---------------------------------------------------------------------
FORM frm_layout .
CLEAR gs_layout.
gs_layout-zebra = ‘X’.
gs_layout-cwidth_opt = ‘X’.
gs_layout-sel_mode = ‘A’.
ENDFORM.
&---------------------------------------------------------------------
*& Form frm_fcat
&---------------------------------------------------------------------
*& text
&---------------------------------------------------------------------
*& --> p1 text
*& <-- p2 text
&---------------------------------------------------------------------
FORM frm_fcat .
REFRESH gt_fcat.
DEFINE set_fieldcat_alv.

CLEAR gs_fcat.

gs_fcat-fieldname = &1.
gs_fcat-coltext = &2.
gs_fcat-ref_field = &3.
gs_fcat-ref_table = &4.
gs_fcat-outputlen = &5.

APPEND gs_fcat TO gt_fcat.

END-OF-DEFINITION.

set_fieldcat_alv ‘MATNR’ ‘物料代码’ ‘’ ‘’ ‘18’ .
set_fieldcat_alv ‘ZMATNR1’ ‘替代料1’ ‘’ ‘’ ‘18’.
set_fieldcat_alv ‘ZMATNR2’ ‘替代料2’ ‘’ ‘’ ‘18’.
ENDFORM.
&---------------------------------------------------------------------
*& Form frm_show
&---------------------------------------------------------------------
*& text
&---------------------------------------------------------------------
*& --> p1 text
*& <-- p2 text
&---------------------------------------------------------------------
FORM frm_show .
CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY_LVC’
EXPORTING
i_callback_program = sy-repid
is_layout_lvc = gs_layout
it_fieldcat_lvc = gt_fcat

  • i_callback_pf_status_set = 'PF_STATUS'
    
  • i_callback_user_command  = 'USER_COMMAND'
    
  • it_events          = lt_events
    i_save             = 'A'
    
    TABLES
    t_outtab = gt_alv
    EXCEPTIONS
    program_error = 1
    OTHERS = 2.
    ENDFORM.

相关文章:

ABAP 批导demo调用SM30表维护demo

ABAP 批导demo&调用SM30表维护demo &--------------------------------------------------------------------- *& Report ZPP036 &--------------------------------------------------------------------- *& &-----------------------------------…...

Mysql 文件导入与导出

i/o 一、导出(mysqldump)<一>、导出sql文件<二>、导出csv文件 二、导入(load)三、常见报错The Mysql server is running with the --secure-file-priv option so it cannot execute this statement 一、导出(mysqldump) <一>、导出sql文件 1、整库 mysqld…...

《每天十分钟》-红宝书第4版-迭代器与生成器

理解迭代 计数循环就是一种最简单的迭代 for (let i 1; i < 10; i) { console.log(i); }迭代之前需要事先知道如何使用数据结构。数组中的每一项都只能先通过引用取得数组对象&#xff0c;然后再通过[]操作符取得特定索引位置上的项。这种情况并不适用于所有数据结构。遍…...

1、【vue篇】vue框架快速上手

注意事项&#xff1a; methods必须要加s 导入vue&#xff1a;<script src"https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>导入Axios:<script src"https://unpkg.com/axios/dist/axios.min.js"></script> 简单Vue程序…...

Unity 编辑器篇|(九)编辑器美化类( GUIStyle、GUISkin、EditorStyles) (全面总结 | 建议收藏)

目录 1. GUIStyle1.1 参数总览1.2 样式代码 2. GUISkin2.1 参数总览2.2 创建自定义Skin 3. EditorStyles2.1 参数总览1.2 反射获取所有EditorStyles 1. GUIStyle GUIStyle是一个用于定制GUI控件样式的类&#xff0c;它包含了控件的外观属性&#xff0c;如字体、颜色、背景等。…...

Spring Boot Starters

Spring Boot Starters 概述 Spring Boot Starters是一系列为特定应用场景预设的依赖管理和自动配置方案。每个Starter都是为了简化特定类型的项目构建和配置。例如&#xff0c;spring-boot-starter-web是为创建基于Spring MVC的Web应用程序而设计的。 Starter的结构 一个典型…...

Qt防止创建窗口抢焦点

问题是&#xff0c;当我在 Qt 中打开一个新窗口时&#xff0c;它会自动窃取前一个应用程序的焦点。 有什么办法可以防止这种情况发生吗&#xff1f; setAttribute(Qt::WA_ShowWithoutActivating);这会强制窗口不激活。即使有Qt::WindowStaysOnTopHint flag 出处&#xff1a; S…...

shared_ptr 与 unique_ptr 的转换 笔记

推荐B站文章&#xff1a; 6.shared_ptr与unique_ptr_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV18B4y187uL?p6&vd_sourcea934d7fc6f47698a29dac90a922ba5a3我的往期文章&#xff1a; 独占指针&#xff1a;unique_ptr 与 函数调用-CSDN博客https://blog.csdn.n…...

python windows和linux 文件同步

在Python中&#xff0c;可以使用paramiko库来实现Windows和Linux之间的文件同步。paramiko是一个用于SSH连接的Python库&#xff0c;可以用于在Windows和Linux之间进行文件传输。 以下是一个简单的示例代码&#xff0c;演示如何使用paramiko库在Windows和Linux之间同步文件&am…...

【数据结构】72变的双端队列

双端队列 前言一、双端队列1.1 双端队列的定义1.2 输入受限的双端队列1.3 输出受限的双端队列1.5 输入输出都受限的双端队列1.6 小结 二、双端队列的使用2.1 双端队列的出队序列——暴力求解2.1.1 栈的出栈序列2.1.2 输入受限的双端队列2.1.3 输出受限的双端队列2.1.4 输入输出…...

kafka为什么不支持读写分离?

kafka为什么不支持读写分离&#xff1f; 在kafka中&#xff0c;生产者写入消息&#xff0c;消费者读取消息的操作都是与 leader 副本进行交互的&#xff0c;从而实现的是一种主写主读的生产消费模型。kafka不支持读写分离&#xff0c;也就是主写从读。 读写分离有以下不足&am…...

arcgis 面要素shp数据处理

面要素是工作中用到最多的&#xff0c;那么面要素是如何形成的呢&#xff0c;主要还是由闭合的线要素转换而成。在面要素数据中常用的有以下几点&#xff1a; 一、 线转面&#xff08;要素转面&#xff09; 通过上一篇得到了点转线的要素&#xff0c;那么根据上节的线要素&am…...

数轴(0 ~ m)上有n个不同点,最多只能移动一个点,移动到[1, m]中任意一点,求最终最小相邻两个点的距离的最大值是什么

题目 思路:先找到相邻距离最小的位置,假设为pos, 那么不是移动第pos个点就是移动第(pos - 1)个点,先移动pos点,用数组vec存除了pos点之外的所有点,求出最小相邻距离和最大相邻距离,那么肯定将pos点插入到最大相邻距离中。 #include <bits/stdc++.h> using namesp…...

BGP路由反射-数据中心IDC项目经验

一、背景描述 R1,R2,R3在AS200区域内&#xff0c;R1和R2,R1和R3建立OSPF&#xff0c;宣告接口互联. AS200区域内&#xff0c;R1和R2建立IBGP, R1和R3建立IBGP R2和R4建立EBGP, R3和R5建立EBGP。 网络拓扑&#xff1a; 二、故障现象 R1和R2可以收到来自AS100区域R4的E…...

提取视频中的某一帧画面,留住视频中的美好瞬间

你是否曾经被视频中的某一帧画面深深吸引&#xff0c;却又惋惜于无法将其永久保存&#xff1f;现在&#xff0c;有了我们【媒体梦工厂】&#xff0c;这一遗憾将成为过去&#xff0c;这个软件可以提取视频中的某一帧保存为图片&#xff0c;为你留住那些稍纵即逝的美好。 所需工…...

一个好用的服务器控制面板

简介 它是一个免费开源的管理面板工具&#xff0c;可以帮助你集中管理多个服务器和网站。Ajenti 支持 Linux、BSD、Mac OS X和Windows 等多个操作系统&#xff0c;并且可以通过一个直观的 Web 界面来完成各种系统管理任务。 相比于其他管理面板&#xff0c;Ajenti有以下几个优…...

软件测评中心▏软件系统测试的定义与测试流程简析

软件系统测试是指在软件开发的各个阶段对软件系统进行全面、系统的测试&#xff0c;以发现并修复潜在的问题和错误。系统测试旨在确保软件在各种不同的环境和使用条件下都能正常运行&#xff0c;满足用户需求&#xff0c;并且具备良好的性能和稳定性&#xff0c;包括以下测试流…...

基于JavaWeb+SSM+Vue基于微信小程序生鲜云订单零售系统的设计和实现

基于JavaWebSSMVue基于微信小程序生鲜云订单零售系统的设计和实现 滑到文末获取源码Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 滑到文末获取源码 Lun文目录 目录 1系统概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系统设计…...

查询列表实时按照更新时间降序排列 没有更新时间就按创建时间

例子: sql两个字段排序 ORDER BY update_time DESC , create_time DESC <select id"selectLawIllegalActivitiesList" parameterType"LawIllegalActivities" resultMap"LawIllegalActivitiesResult"><include refid"selectL…...

愉快的使用vscode刷leetcode,开启摸鱼新高度

文章目录 1. 安装leetcode插件2. 安装node.js3. vscode配置 1. 安装leetcode插件 插件扩展中搜索LeetCode&#xff0c;一般刚开始都是第一个&#xff0c;如下图所示。 2. 安装node.js window安装方法 去 node.js官网 下载相应的安装包&#xff0c;一路next即可。 ubuntu安…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...

倒装芯片凸点成型工艺

UBM&#xff08;Under Bump Metallization&#xff09;与Bump&#xff08;焊球&#xff09;形成工艺流程。我们可以将整张流程图分为三大阶段来理解&#xff1a; &#x1f527; 一、UBM&#xff08;Under Bump Metallization&#xff09;工艺流程&#xff08;黄色区域&#xff…...

云原生安全实战:API网关Envoy的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口&#xff0c;负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...