CRM
SAP CRM 开发技术分享
汪子熙
Jerry Wang,2007 年从电子科技大学计算机专业硕士毕业后加入 SAP 成都研究院工作至今。Jerry 是 SAP 社区导师,SAP 中国技术大使。在长达15年的 SAP 产品开发生涯里,Jerry 曾经先后参与 SAP Business ByDesign,SAP CRM,SAP Cloud for Customer,SAP S/4HANA,SAP Commerce Cloud(电商云)等标准产品的研发工作。
Jerry 工作中使用 ABAP, Java, JavaScript 和 TypeScript 进行开发, 对包括 SAP UI5 在内的多款 SAP 自研框架有深入的研究。
展开
-
一个 15 年 SAP ABAP 开发人员分享的 SAPGUI 一些个性化设置和实用小技巧试读版
笔者在SAP成都研究院已经工作了15年,曾经使用ABAP参与过SAPBusinessByDesign,SAPCloudforCustomer,SAPCRM,SAPS/4HANA这四款基于ABAP技术栈的SAP标准产品开发工作,对ABAP的使用有着丰富的实战经验。本文分享的都是笔者在工作中真正使用过的技巧和经验,这些技巧和经验都切实提高了笔者ABAP的开发效率。其中SAPGUI算是伴随着ABAP的诞生而一路走到今天,二者可谓互相成就,相得益彰。...原创 2022-07-30 12:35:43 · 77 阅读 · 0 评论 -
SAP SEGW 里的 Entity Type 作用讲解
实体类型属性必须遵循OData协议允许和提供的数据类型,或者是复杂类型。实体类型必须有唯一标识符,允许属于该实体类型的实体在OData上下文中使用。可以在实体集(EntitySet)中将实体类型分组在一起。Label在ServicewithSAPAnnotations项目中使用,需要维护语言相关的文本标签。如下图所示,OpportunityEntityType的key为guid,通过。下图包括Guidkey在内的所有高亮字段都是entitytype的属性。...原创 2022-07-22 09:28:39 · 24 阅读 · 0 评论 -
如何让 ABAP 服务器能够响应通过浏览器发起的自定义 HTTP 请求的试读版
本文就来详细介绍如何在SAPGUI里进行开发,让你的ABAP服务器能够响应用户使用浏览器发起的需求。上面的url,大家需要把主机名和端口号,替换成自己ABAP服务器的实际值。具体如何获取这些实际值,本文后续会介绍。本教程迄今为止的所有步骤,我们都是在SAPGUI里运行ABAP程序。本步骤我们使用SICF和SE24这两个事物码完成开发。在实际项目中,也存在很多ABAP服务器需要响应用户通过。首先看一下本步骤完成后实现的效果。...原创 2022-07-17 18:23:35 · 32 阅读 · 0 评论 -
SAP ECC 和 S4HANA Material 物料库存管理的模型比较
在动态计算库存数据时,使用MATDOC_EXTRACT表的目的是为了加速对MATDOC表的汇总。CDS视图可以定义为数据库表的替代对象(replacement,有时也称代理对象),也可以定义为ABAPDictionary中的经典数据库视图。然而,这些数字是使用新数据模型创建的CDSview视图动态计算的。注意,在S/4HANA里,MARD这些表里包含的库存值,已经是动态计算后的结果,即来自主数据信息表MARC和其他库存相关表比如NSDM_V_MARC的动态计算结果。......原创 2022-07-15 21:28:41 · 146 阅读 · 0 评论 -
SAP ABAP 系统进行数据库表查询的几种常用方法的试读版
本文介绍已知一个数据库表,想查看表里有哪些数据的几种常用方法,即数据库表的查询操作。里,已经成功的找到了存放SAPMM模块里物料数据库存的数据库表名称为。假设我们想获取系统里所有库存。我们在本教程这篇文章。...原创 2022-07-15 16:47:37 · 174 阅读 · 0 评论 -
谈谈 SAP 系统的权限管控和事务记录功能的实现
之前笔者在网络上,曾经也阅读过一些 SAP ABAP同仁们介绍如何通过 ABAP 单步调试,绕过SAP标准权限检查“小技巧”的文章,比如说在调试器里修改权限检查语句AUTHORITY-CHECK的返回值sy-subrc, 或者干脆用调试器的“跳转到某条语句”这一功能,直接绕过权限检查语句。虽然说在SAP生产系统里,按照惯例,普通的业务用户绝对不会有调试的权限,更别说在调试器里修改变量的值了,但如果是在开发系统里,直接在调试器里修改变量的值,或是跳过某些语句的执行,真的就能够不会被别人发现么?答案是否定的。原创 2022-07-07 14:37:02 · 111 阅读 · 0 评论 -
SAP SEGW 事物码里的 ABAP Editor
因为可以为 Entity Type 的属性,设置 EDM 类型和内部 ABAP 类型,所以必须对这些类型进行验证,以确保值之间没有不匹配的情况发生。这种类型的不匹配可能会导致数据丢失,以 DateTime 和 Date 为例,前者类型比后者类型的限制更严格,因此会导致数据丢失。如果 EDM 类型和 ABAP 类型不兼容,则返回错误提示。使用 ABAP 类型编辑器和相应的 ABAP 字段名定义关于属性的附加类型信息,方便 ABAP 类型和 EDM 类型之间的映射。使用ABAP类型编辑器来定义关于属性和相应的A原创 2022-07-05 09:43:34 · 53 阅读 · 0 评论 -
SAP GUI 里的收藏夹事务码管理工具
SAP Netweaver 里有很多名字比较长的事务码,比如 SAP CRM UI开发工具BSP_WD_CMPWB,直到今天我也记不住它。幸好SAP贴心地在SAP GUI里提供了收藏夹功能,我们可以在SAP GUI里创建树状结构的收藏夹事务码列表,可以把若干业务上相关的事务码放在同一个文件夹内,文件夹支持嵌套,如下图:SAP菜单是一个由用户主记录中的一个条目集中定义或覆盖的区域菜单。SAP菜单或SAP区域菜单显示SAP菜单树中所有可用的SAP t-code,如下图所示:下面是 SAP Area menu 的原创 2022-07-01 10:53:06 · 101 阅读 · 0 评论 -
SAP UI5:如何处理resource not found for the segment XXXXX error message
# Created by Jerry Wang, last modified on Dec 10, 2015使用Postman 测试Odata request时遇到如下error message:,借助 Where Used List 按钮的帮助,找到了事物码 QA11 里 System Status 字段的存储数据库表的名称:我们通过 Where Used List 找到的实际是读取 System Status 的函数 ,然后通过进入该函数进行一些简单的单步调试之后,找到了数据库表 JEST 和 TJ02.原创 2022-06-11 21:13:16 · 67 阅读 · 0 评论 -
从解读 BDC 自动生成的代码谈起,讲解 SAPGUI 的程序组成部分试读版
本文我们介绍一个非常实用的技巧,这也是 SAP ABAP 开发里非常常见的一个需求:已知 SAPGUI 里某屏幕上的一个字段,如何查到这个字段在 ABAP 后台哪张数据库表的哪个字段进行的存储。我们选取的 SAPGUI 屏幕字段为事物码 QA11 里的 System Status.打开事物码 QA11,选择一个 Inspection Lot,点击 F8,进入其明细页面。本例我使用的 Inspection Lot ID 为 890000017451:可以看到这个 Lot 的 System Status 为 ,原创 2022-06-10 21:35:29 · 75 阅读 · 0 评论 -
SAP Field Service Management 和微信集成的案例分享和实现介绍
SAP FSM(Field Service Management), 属于SAP C/4HANA五朵云里的Service Cloud.本文介绍笔者在工作中经历过的一个项目,包含 SAP Field Service Management 同微信集成的一个场景的功能需求分析和详细的技术实现。我们需要在微信里能够显示FSM的数据,比如FSM里的产品和客户主数据:一种简易的方式就是使用FSM提供的Query API.打开FSM官网的帮助文档:https://docs.coresystems.net/dev-i原创 2022-06-10 10:47:57 · 116 阅读 · 0 评论 -
从解读 BDC 自动生成的代码谈起,讲解 SAPGUI 的程序组成部分试读版
本教程前面一篇文章通过一个具体的例子,讲解 SAP BDC 技术的使用步骤,我们介绍了通过 SAP BDC 技术,自动打开 SAPGUI 里的一个事物码 SE37,并且在这个事物码里面显示名为 的函数模块的属性面板。这个 BDC 效果如下。执行报表后,会自动打开如下界面:不少 ABAP 初学者对 BDC程序里这些看起来像天书一样的代码感到很头痛,本文就来详细介绍这些代码的含义。本文力求通过上图这些绿色高亮代码的逐行分析,给大家介绍 SAPGUI 里 ABAP 程序的两大重要组成部分,Screen 和代码逻原创 2022-06-10 10:07:18 · 53 阅读 · 0 评论 -
如何开启 ABAP Update function module 和系统程序的调试功能
有朋友咨询,在这些 update function module 里设置了断点,但是运行时,断点并没有停下来,这是为什么?这位朋友有这样的疑问:其实不是这样的,ABAP 里的代码,无论是 update function module,还是系统程序(system program),都是可以调试的,设置如下。所谓 update function module,就是 SE37 里 Update Module 前面的勾被选上的函数:在 update function module 执行之前,启动调试器,选择菜单:S原创 2022-06-03 15:18:24 · 160 阅读 · 0 评论 -
通过一个具体的例子,讲解 SAP BDC 技术的使用步骤试读版
BDC 是 Batch Data Communication,批处理数据交互的英文缩写。这种技术的理念其实不复杂,而且不少游戏玩家想必都已经接触过和 BDC 类似的工具,那就是按键精灵。比如我们玩一些网络游戏时,有一些每日任务的领取和完成方式比较固定,比如在一个固定位置同固定的 NPC 对话,领取任务。然后出城在固定的地方,击杀固定的怪物,然后回城交付任务。此时为了避免重复操作,我们可以用一些按键精灵软件,提前录制一遍完成该任务的整个流程,然后选择按键精灵的回放模式,即可自动完成每日任务的执行了。...原创 2022-06-03 13:40:48 · 70 阅读 · 0 评论 -
ABAP Code Inspector 的一些高级功能分享
ABAP Code Inspector 是每一位 ABAP 开发人员工具箱里必备的代码检测工具之一。使用 ABAP Code Inspector 自带的标准检查项,可以帮助开发人员快速检测 ABAP 代码中潜在的缺陷,提高代码质量,改善代码运行性能。本文分享笔者从事 ABAP 应用程序开发十余年来在工作中积累的一些 ABAP Code Inspector 的使用经验。我们可以在ABAP Code Inspector的检查变体(Check Variant)里,根据自己的需要灵活地选择对ABAP代码进行哪种原创 2022-05-20 21:55:52 · 155 阅读 · 0 评论 -
SAP 订单模型的编排方式概述
笔者在 SAP 成都研究院工作多年,从事过多款 SAP 产品的标准开发工作。这些产品里无一例外地都存在着订单(Order) 这种数据模型。订单模型从数据结构上来说是一棵树,根节点就是我们通常俗称的订单抬头(Header Level) 结构,主要包含订单 ID,创建时间,创建者,订单描述信息,订单涉及到的业务合作伙伴(Business Partner)等字段。根节点通过所谓的 Association 和 Composition,关联到其他叶节点,最典型的叶节点就是订单行项目(Line Item) 结构。行原创 2022-05-14 22:28:57 · 122 阅读 · 0 评论 -
在云平台 ABAP 编程环境上编写第一段 ABAP 程序
距 2017 年秋季的 SAP TechEd 大会上一位大佬 Björn Goerke,SAP Chief Technology Officer 宣布了 SAP Cloud Platform 即将支持 ABAP 至今,已经过去了几年的时间。目前国内的技术媒体平台上,已经有了部分概要性介绍 SAP Cloud Platform ABAP 编程环境的中文文章,但涉及到具体操作细节的文章比较少。其实对于一个已经能够熟练使用 ABAP Development Tools 连接 On-Premises ABAP原创 2022-05-14 21:27:39 · 79 阅读 · 0 评论 -
一种经典的客户关系管理系统(CRM)订单模型的设计与实现
笔者在 SAP 领域工作多年,对 SAP 应用的理解就是:模型以及基于模型的增删改查。只是同我们大学专业课学习时完成的家庭作业相比,SAP 模型的复杂程度增加了好几个数量级。和传统的增删改查相比,以订单编排领域为例,SAP订单模型的"增",还需要考虑实际业务流程中各种类型的前置和后序订单,即 SAP 使用的术语文档流(Document Flow)。而"改", 除了订单自身状态的迁移外,还包括订单模型提供的各种可执行逻辑。这些逻辑既包括订单模型本身字段的更改,也可以包括订单与第三方系统的交互。在很多上原创 2022-05-14 12:57:12 · 329 阅读 · 0 评论 -
谈谈企业管理软件领域内那些很难稳定重现故障的处理技巧
前言我是做企业管理软件的程序员,有一次我遇到一个问题,一段后台作业代码,运行时偶尔会出现运行时异常(runtime exception),但这个异常不是 100% 能重现,运行十次,大概能重现2,3次。而且在系统负载很重的时候,反而一次也不能重现。更折磨人的是,如果在交互式单步调试模式下,这段代码运行完美,一点问题也没有。既然不能通过单步调试来排错,我的同事们都觉得棘手,最后让我来和这个问题死磕。后来我采用类似二分查找的方式,把可能引起这个问题的代码层层过滤,最后定位到几行有高度嫌疑的代码,我自己编写原创 2022-05-06 17:02:44 · 195 阅读 · 0 评论 -
批量删除满足指定条件的 SAP CRM One Order 订单
报表源代码:*&---------------------------------------------------------------------**& Report ZORDER_DELETE*&---------------------------------------------------------------------**&*&------------------------------------------------------原创 2022-03-26 21:10:57 · 100 阅读 · 0 评论 -
SAP应用真的不性感么
这是一个问题。上图的One Order是楼下一个部门领导让我给他的团队做的一个古老框架的session. 这个框架诞生于2000年,采用纯面向过程的思路开发。因为上世纪90年代ABAP开始引入对面向对象编程的支持后,很多语言层面的OO特性还不mature, SAP开发还没有养成使用OOP开发的习罐,所以SAP当时也没有新开发必须用OOP的强制规定。很多朋友可能瞧不起SAP传统产品里这些自研的...原创 2019-01-21 11:44:17 · 587 阅读 · 1 评论 -
关于安卓手机访问一些网站或者Fiori应用弹出安装证书的提示
有朋友问遇到在安卓手机上安装Fiori Client,打开的时候提示需要安装证书,如下图所示:我在自己的Android手机试了试,因为我没有装Fiori Client,所以就用手机浏览器直接访问https://go.sap.com:弹出了类似的对话框。点击取消之后,可以手动输入用户名和密码,但是每次都这样,不太方便。如何安装这个证书呢?IE浏览器里,Tools->Internet...原创 2018-11-08 15:31:24 · 877 阅读 · 0 评论 -
SAP CRM和C4C的产品主数据price维护
SAP CRM点了Edit List之后,可以直接修改产品主数据的Price信息:C4C在C4C的product administration工作中心里:点击Edit按钮进入编辑模式,Price List区域里的内容也不能编辑:那么上图红色高亮的数据从哪里来?首先从Chrome开发者工具里找到C4C产品主数据明细页面的UI模型名称:/sap/ap/ui/json?app.c...原创 2018-10-30 11:39:30 · 364 阅读 · 0 评论 -
从 ABAP Netweaver 到 ABAP Platform,我们一直在努力
Jerry 之前的文章 ABAP 真的会过时吗?聊聊 ABAP 的过去,现在和未来,带着大家简单回顾了 ABAP 这门编程语言的发展史和对其未来进行了展望。之后我收到了一些读者的反馈,咨询关于 ABAP Netweaver 和 ABAP Platform 这两个名词的区别和联系。本文就来说一说。让我们从两张图片开始本文的讨论。用 SAPGUI 登录系统,选择菜单 System 下的 Status 菜单项,能看到当前 SAP 系统的产品版本号(Product Versions).在一个 CRM原创 2021-12-18 20:57:19 · 146 阅读 · 0 评论 -
Hyperledger(超级账本)的worldstate和SAP CRM的CRMD_CUMULAT_H
Hyperledger fabric是基于区块链技术的一个开源项目,由Linux基金会于2015年发起,目的是推进区块链数字技术和交易验证的发展和落地。 Hyperledger由多个区块构成了一个有序链表,每个区块里包含多条交易(trasanction,缩写为tx)。Jerry在学习账本的数据结构时,发现一个有趣的现象:上图中WorldState(世界状态)的设计目的,是为了提升性能。比如,...原创 2018-09-10 21:18:42 · 655 阅读 · 0 评论 -
什么是 SAP Business Function
帮助文档通过业务功能,SAP 为您现有的 SAP 安装提供了独立单元中的新功能和增强功能。这使您能够为各种业务流程使用特定的新功能和增强功能。业务功能 X 随增强包(enhancement package)一起提供。 此业务功能包含允许您更有效地运行给定业务流程的功能。 此时此刻,您对增强包的其他功能不感兴趣。因此,您只需安装使用业务功能 X 所需的那些技术组件。安装这些技术组件后,其他业务功能也可用,它们也是您安装的技术组件的一部分。 但是您只激活业务功能 X。激活业务功能 X 后,您要使用的功能原创 2021-11-22 13:51:23 · 1688 阅读 · 0 评论 -
什么是 SAP Support Package Stack
什么是 Support Package?当 SAP 的最终用户发现 SAP 产品中的错误时,他会向 SAP 支持人员报告同样的问题。 SAP 程序员检查错误并开发错误更正。此更正称为 SNOTE (SAP Note)。随着时间的推移,多个最终用户报告 SAP 发布 SNOTE 的错误。SAP 在一个地方收集所有这些更正,这个集合称为支持包。 此支持包还包括对早期 SAP 版本的增强。简单来说,SAP NOTES 的集合被称为 SUPPORT PACKAGE。支持包在 SAP 系统中使用事务码 S原创 2021-11-24 07:59:02 · 321 阅读 · 0 评论 -
什么是 SAP enhancement package
借助增强包交付技术,SAP 可为您现有的 SAP ERP 安装提供应用程序的新开发和增强功能。这意味着您可以在需要时并根据自己的要求使用为您的业务流程提供的新开发。只有在您决定使用这些新功能、安装相关技术组件并在基于 ABAP 的 SAP Enterprise Central Components 系统(SAP ECC 系统)中激活相应的业务功能后,新的开发和增强才会生效。您未激活业务功能的现有业务流程保持不变。这种交付理念为您提供以下优势:(1) 它在稳定的平台上为您提供长期规划安全,但并不意味着您原创 2021-11-23 08:35:48 · 254 阅读 · 0 评论 -
SAP不同的产品是如何支持用户创建自定义字段的
我们从SAP CRM,Cloud for Customer(简称C4C)和S/4HANA这三个产品分别来看看。SAP CRM我们使用所谓的Application Enhancement Tool(AET)来创建扩展字段。首先在Personalize里将Configuration模式打开,这样才能够直接在浏览器里创建扩展字段。把这个“Enable configuration mo...原创 2018-08-14 18:47:52 · 801 阅读 · 0 评论 -
如何创建最简单的 ABAP 数据库表,以及编码从数据库表中读取数据 (上) 试读版
ABAP 标准培训教程 BC400 学习笔记之一:ABAP 服务器的架构和一个典型的 ABAP 程序结构介绍ABAP 标准培训教程 BC400 学习笔记之二:Cross-client 和 Client-specific 的区别ABAP 标准培训教程 BC400 学习笔记之三:ABAP 编程语言的特性和基本构成要素ABAP 标准培训教程 BC400 学习笔记之四:ABAP 编程语言的数据类型ABAP 标准培训教程 BC400 学习笔记之五:ABAP 编程语言的变量,常量和字面量,以及文本符号专题.原创 2021-10-30 21:15:41 · 209 阅读 · 0 评论 -
从一个 SAP CRM 软件实际的故障处理出发,谈谈企业管理软件领域内那些很难稳定重现故障的处理技巧
分享 Jerry SAP 开发职业生涯中一个让我印象深刻的 bug 分析和解决过程。这个 bug 无法通过单步调试的方式重现,所以我之前掌握的各种单步调试技巧,完全派不上用场......原创 2021-10-24 07:00:00 · 1066 阅读 · 29 评论 -
使用 ABAP 代码创建 CRM 订单 subject
*&---------------------------------------------------------------------**& Report ZCREATE_SUBJECT*&---------------------------------------------------------------------**&*&-----------------------------------------------------------原创 2021-10-18 16:39:22 · 156 阅读 · 0 评论 -
SAP CRM Fiori 应用 my Opportunities 的后台性能分析
The performance bottleneck of this url /sap/opu/odata/NBA/CRM_OPPORTUNITY_SRV/Opportunities()?KaTeX parse error: Expected 'EOF', got '&' at position 99: …ode eq 'E0003')&̲orderby=Score desc&KaTeX parse error: Expected 'EOF', got '&' at posi原创 2021-08-09 13:55:29 · 244 阅读 · 0 评论 -
SAP CRM Fiori 应用 My Note 里创建 Note 失败的一个原因分析
Now I found root cause.and this note Z004 has been successfully created in the buffer, not persisted to Database yet.Then during order save, there is one BAdI implementation done by Zeiss:And there is a logging rule defined by Zeiss:And in My Oppo原创 2021-08-06 11:17:24 · 148 阅读 · 0 评论 -
SAP CRM Enterprise Search 培训材料
原创 2021-08-03 09:26:41 · 149 阅读 · 0 评论 -
如何在 SAP CRM WebClient UI 里在 Context node 上下文里访问其他 Context Node 的数据
今天一个朋友在微信上咨询我一个问题:抽象一下,这个问题就是:如何在 Context Node A 的上下文,比如 GET 方法里,读取到 Context Node B 的数据?以 Product 页面为例,随便选择一个 product,比如 AZ_PROD_06:本文演示的例子是,如何在 PRODUCT 这个 node 的 get 方法里,拿到 PRODSHTEXT 里的数据:进入 Context Node PRODUCT 的 get 方法:首先用 me->owner 拿到 vie原创 2021-08-02 22:11:40 · 147 阅读 · 0 评论