在 SAP Fiori 中为 Business Catalog 创建引用:从概念、步骤到项目实践一次讲透

在很多 SAP Fiori 项目里,目录维护看起来像一件偏配置、偏运维的小事,真正落地时却往往决定了系统后续的可维护性。一个团队如果没有把 Business Catalog、Technical Catalog、Tile、Target Mapping 之间的关系理解透,目录会越配越多,角色会越堆越乱,应用升级时还容易牵一发动全身。把引用机制用对,目录治理会立刻清爽很多。SAP 官方对这套模型的定义非常明确:Technical Catalog 存放原始的 tile 与 target mapping,Business Catalog 则承载对这些内容的引用,以便按业务角色进行组织和授权。(SAP Help Portal)

从 SAP Fiori Launchpad Content Manager 的角度看,创建一个 Business Catalog 并不复杂:在 Catalogs 页签中点击 Create,输入名称与 ID

什么是 SAP Fiori 的 Technical Catalog 和 Business Catalog SAP Fiori 为用户提供了一种简洁、现代化的用户界面体验。在 Fiori 框架中,和是两个关键的概念,它们共同支持 Fiori 应用的管理和部署。了解这两者的区别和联系对于有效地使用 SAP Fiori 至关重要。 阅读详情

相关推荐

从工具选型到项目落地:彻底讲透 SAP Fiori 中的 Business Catalog 搭建方法

SAP Fiori 的 Business Catalog 是决定用户体验的核心配置对象,它基于业务角色筛选 Technical Catalog 内容,确保用户只看到相关应用入口。SAP 提供了 Content Manager 和 Launchpad Designer 两套工具进行管理,前者侧重目录治理,后者支持灵活编辑。内容模型采用三层作用域(configuration/customizing/personalization)实现分级控制,优先级从低到高覆盖。管理员需通过特定事务码进入不同作用域,其中系统级

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 49

在 PFCG 中完成 SAP Fiori 对象分配:把 Business Catalog、Space、Page 与授权一次讲透

摘要:SAP Fiori权限配置的关键在于理解Business Catalog与Space的分层授权逻辑。传统SAP GUI中直接分配事务码的方式不适用于Fiori环境,必须通过PFCG为角色分配Catalog(提供应用访问权限)和Space(控制首页展示结构)。Catalog会自动解析所需OData服务授权,而Space则决定用户在Launchpad中看到的导航布局。常见错误包括直接分配Page而非其所属Space,或仅配置Space而忽略Catalog。最佳实践是优先使用Catalog驱动授权提议,再在

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 321

用 SAP Business Application Studio 给 Custom Business Object 做一套真正可交付的 SAP Fiori 应用

摘要: SAP S/4HANA Cloud 的 Key User Extensibility 核心在于将业务对象扩展与 Fiori 应用开发结合。通过 Custom Business Objects 创建数据模型并生成 OData 服务,再使用 SAP Business Application Studio 开发定制化 UI,最终部署到 Fiori Launchpad。关键点包括:业务对象命名影响全链路(CDS、OData、前端绑定);权限需配置 SAP_CORE_BC_EXT_TST 等目录;BAS 需正

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1253

创建 SAP Fiori Catalog 时遇到的 duplicate 记录的问题分析

根据角色和分配给角色的目录,用户可以浏览目录并选择他们想要在 SAP Fiori Launchpad的入口页面上显示的 Tiles / Applications。如果遇到任何错误或无法看到服务 ZPAGE_BUILDER_CONF,请单击添加服务并使用本地系统别名添加服务 PAGE_BUILDER_CONF 并生成元数据。这是因为如果我们使用 SAP 标准角色,最终用户/业务用户将获得许多其他实际上不需要的应用程序,并且他/她的主页最终会因大量业务组和应用程序而变得混乱。按钮,可以创建一个新的。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 712

从 RAP OData 到可交付的 SAP Fiori 应用:部署与授权全链路实战笔记

摘要:本文探讨了RAP开发中常见的交付误区,指出开发者预览(FEAP)并非可部署应用,强调从服务发布到业务应用落地的完整链路。文章详细对比了不同部署路径(ABAP/BTP),解析权限管理关键点(SAP_BR_DEVELOPER的临时性),并提供了标准授权组合方案(IAM+业务目录+角色)。通过"发运跟踪"案例,展示了从开发验证到生产部署的全流程,特别提醒注意开发环境与生产环境的权限差异,避免"开发机正常、生产机403"的典型问题。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1389

从 Custom Business Object 到可上线 SAP Fiori 应用的完整落地路径

SAP S/4HANA Cloud中的Custom Business Objects(CBO)提供了一种轻量级扩展方案,适用于需要维护标准系统外业务数据的场景。CBO不仅能创建自定义业务对象和数据库表,还能生成OData服务和Fiori UI界面。其核心价值在于遵循Clean Core原则,提供受控的扩展路径。设计时需关注字段命名、主键结构、数据类型等要素,同时考虑UI生成和服务发布的完整链路。通过Custom Catalog Extensions可实现应用可见性和权限控制。相比传统ABAP开发,CBO更适

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1837

SAP S/4HANA 里如何创建 Administrator Business Role

摘要:SAP S/4HANA Cloud系统初始化后常见Fiori Launchpad无Tile显示问题,核心原因是管理员账号未绑定正确的Business Role。SAP不推荐直接使用标准SAP_BR_ADMINISTRATOR角色,而建议基于模板创建自定义Z Role,遵循最小权限原则。创建流程需通过Maintain Business Roles应用,从模板生成角色并定义命名规范。权限控制通过Business Role→Business Catalog→App Tile层级实现,Restriction比

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1129

用 Maintain Business Roles 巧妙比较 SAP Fiori Business Role:从概念到实战

摘要 SAP S/4HANA Cloud 和 SAP BTP ABAP 环境中的 Business Role 是权限管理的核心枢纽。本文详细介绍了如何通过 Compare Business Roles 功能高效比较两个 Business Role 的差异,包括: 功能价值:解决跨国角色差异、权限问题排查和升级验证等常见场景 核心概念:Business Role、Business Catalog 与 Restrictions 的关系解析 操作流程:在 Maintain Business Roles 应用中进入

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 142

基于 Custom Business Object 打造 SAP Fiori 自定义应用,从 Web IDE 到可传输交付的完整思路

本文介绍了在SAP S/4HANA Cloud中开发自定义业务对象(Bonus Plan示例)的端到端流程。关键路径包括:创建带OData服务的Custom Business Object,配置通信场景和OAuth scope,开发基于该服务的SAP Fiori应用,并通过Catalog Extension发布给业务用户。文章重点阐述了开发工具从SAP Web IDE迁移到SAP Business Application Studio的注意事项,以及权限管理、通信配置等常见痛点。特别强调了Clean Cor

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1096

Custom Catalog Extensions,给自建应用补上进入 SAP Fiori launchpad 的最后一公里

摘要:SAP S/4HANA Cloud中Custom Catalog Extensions配置的关键在于业务目录的传输与授权管理。常见问题如应用发布后找不到对应目录,往往源于Custom Catalog Extension未随Software Collection一起传输。业务目录不仅是应用入口,更是授权体系的核心环节,需与业务角色、权限检查等机制协同工作。开发人员需注意前端入口与后端数据权限的区分,避免将敏感应用分配给过广的业务目录。最小权限原则在此尤为重要,不当的目录分配可能导致审计风险和支持问题。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1760

从零构建业务角色:基于 Business Catalog 的 SAP 业务角色创建过程全面实战指南

摘要:本文详细介绍了在SAP S/4HANA Cloud中创建业务角色的完整流程。从业务角色(Business Role)、业务目录(Business Catalog)和业务用户(Business User)的核心概念解析开始,逐步说明如何从零构建自定义角色。重点包括:维护角色基本信息时的命名规范建议,通过业务目录组合权限的方法,利用Restrictions实现精细化访问控制,以及与Launchpad Space/Page的集成确保用户界面可见性。文章结合真实项目案例,分享了权限设计的实践经验和常见问题的解

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 125

从 Maintain Business Users 看 SAP S/4HANA Cloud 里的业务用户治理

本文探讨了SAP S/4HANA Cloud Public Edition中的IAM配置问题,指出权限模型而非用户问题往往是系统访问故障的根源。文章详细解析了Business User、Business Role、Business Catalog和SAP Fiori App之间的访问链路,强调业务用户权限应通过角色而非直接应用分配实现。文中对比了Business User与Communication User的区别,阐述了Maintain Business Users应用的核心功能,包括用户数据维护、角色分

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 8305

把 Space 分配给业务角色:一文讲透 SAP Fiori Maintain Business Roles 里的 Assigned Launchpad Spaces

对 ABAP 开发来说,Space分配看起来像“运维配置”,但在RAP、甚至仍有存量的混合系统里,它直接影响你交付功能的可达性与可用性:同一个服务、同一个应用,如果入口没有被正确组织到用户的工作区里,业务方的感知就是“没上线”。把这条链路掌握扎实,你会发现它不只是 Launchpad 美化,而是把权限模型与体验模型闭环起来的一颗关键螺丝钉。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 145

在 SAP Fiori 里编辑已生效 Business Role,别急着动生产权限,先理解 draft 机制

摘要:SAP S/4HANA Cloud中的Business Role是权限治理的核心组件,连接用户、业务目录、权限限制等多个要素。通过Maintain Business Roles应用编辑角色时,系统会创建临时草稿版本,避免直接修改生效中的权限配置。该机制与SAP Fiori的草稿处理理念一致,确保变更可控性。编辑过程需特别注意权限限制(restriction)的调整,这直接影响用户的数据访问范围。保存操作会将草稿变更写入生效角色,完成权限更新。项目实践中需建立规范,避免草稿版本长期滞留系统造成管理混乱。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1545

C++常见面试题总结

C++常见面试题总结

xu_fu_yong的专栏 8万+

Aurora8b10b光口通信实战:复位时序与IP核配置详解

本文深入解析了Aurora 8B10B协议在FPGA高速光口通信中的核心实践,重点剖析了确保链路稳定启动的关键复位时序与IP核配置细节。通过详解全双工与单工模式下的复位流程、Vivado中IP核的物理层与链路层参数设置,并结合用户逻辑设计实例,为工程师实现可靠的高速数据传输提供了清晰的实战指南。

weixin_29280219的博客 172

fMRI数据处理:从DICOM到NIFTI(下)

上一篇我们完成了对原始DICOM的数据整理,将其整理为了BIDS目录结构。作为从从DICOM到NIFTI的最后一篇,当然是介绍如何批量将DICOM格式转NIFTI格式啦!从DICOM到NIFTI系列就完成啦!撒花★,°.°★。从核磁机器把数据拷回来——到整理成BIDS格式——到批量转格式;我们fMRI数据处理的第一步就算是正式迈出去啦!接下来的内容,敬请期待吧~

weixin_44933894的博客 2074

毕设案例|保安公司智慧管理系统的建设与开发方案

"保安公司智慧管理系统是一款专为保安行业设计的高效信息化解决方案,其核心功能涵盖了从人力资源管理到业务运营的各个方面。系统以Java作为开发语言,结合SpringMVC框架,确保了稳定性和可扩展性,而MySQL数据库则提供了强大的数据存储和处理能力。首先,系统允许用户设置各类保安,如门卫、巡逻员等,实现精细化分类管理。其次,保安信息管理模块包括详细的人事档案、资格证书、培训记录等,便于人员追踪和考核。部门和城市设置方便公司层级管理和异地项目管理。岗位设置与时间安排精确到分钟,确保排班科学合理。

muyu2980的专栏 934

从零配置Archery:手把手教你用Docker部署多数据库审核系统(MySQL/PostgreSQL/ClickHouse)

本文详细介绍了如何从零开始使用Docker部署Archery多数据库审核系统,涵盖MySQL、PostgreSQL和ClickHouse的配置与整合。文章提供了生产级Docker-compose配置、审核规则定制、工单流程设置以及企业微信通知集成等实战指南,帮助团队构建统一的企业级SQL审计平台,提升数据库操作规范与安全。

e4f5g6h7的博客 935

COMSOL+AI实战:5个超实用技巧让你的仿真效率翻倍(附Python代码)

本文详细介绍了如何将人工智能(AI)与COMSOL仿真软件结合,通过Python脚本实现五大实用技巧,包括自动化生成数据集、构建代理模型、集成AI优化算法、利用神经网络加速场量求解以及智能结果分析,从而显著提升多物理场仿真的效率和自动化水平。

weixin_29230865的博客 431

046篇:数据统计:分组、求和、平均值、最大最小值

本文介绍了在RPA中实现数据分组统计的方法。通过字典+循环组合,可以完成按单字段或多字段的分组聚合操作,包括求和、计数、求平均值及最大/最小值等。文章详细讲解了分组统计的原理,并提供了单级分组、多级分组的具体实现步骤,最后通过销售数据按月分组的实战案例,演示了如何从原始数据到生成汇总报表的完整流程。这些方法可以灵活应用于各类数据统计分析场景。

weixin_59649563的博客 210

YOLOv8 眼底病变检测(眼底照片)详细说明

本文介绍了基于YOLOv8的眼底病变自动检测系统。该系统可识别糖尿病视网膜病变、青光眼等5类常见眼底病变,包括微动脉瘤、出血点等特征。核心技术包含图像预处理、模型训练、病变检测与量化分析三个模块,采用1024×1024高分辨率输入,针对医学图像特点优化数据增强策略。系统支持批量处理、可视化标注和临床报告生成,提供病变数量、面积密度和严重程度评分等量化指标。特别强调医学合规性要求,需专业医生参与数据标注和模型验证,符合医疗器械认证标准。该系统可作为眼科医生的辅助诊断工具,提高眼底病变筛查效率。

u010117029的博客 129

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: 管好 SAP Fiori Launchpad Content:技术目录、业务目录与 KPI 工具的完整治理思路
下一篇: 从内容建模到分层治理:全面理解 SAP Fiori Launchpad Designer 的正确打开方式
汪子熙
汪子熙 新星创作者: 前端开发技术领域 新星创作者: 前端开发技术领域 优质创作者: 软件测试技术领域 优质创作者: 软件测试技术领域 领域专家: 数据库技术领域 领域专家: 数据库技术领域
博客等级 码龄16年 3万+粉丝 1万+原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汪子熙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值