自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

SAP资深技术专家Jerry Wang的分享

微信公众号: 汪子熙

原创 CRM中间件里的CSA队列有什么用

我们有时候会在中间件的事务码SMQ2即Inbound队列查看器里观察到以CSA开头的队列: 这些队列的作用是什么呢?在SAP community上已经有很多朋友提出了相同的问题,也有专家在下列两个连接里给予了解答: http://scn.sap.com/thread/2056716 ht...

2018-02-26 22:49:37 118 0

原创 CRM数据库表COM_TA_R3_ID的数据来源

这个表存放的内容是CRM产品同名settype COM_TA_R3_ID对应的业务数据。 表里的数据从来源上分两类: 1. 直接创建自CRM系统的相关数据 2. 从ERP下载的相关数据,如设备(equipment) 第一类的例子如下图: 字段R3SER_NO存储的序列号内容。 ...

2018-02-26 22:48:57 131 0

原创 中间件事务码R3AC1里Block Size的含义

在中间件事务码R3AC1可以为一个中间件的适配器对象维护Block size的大小。 以上图的尺寸为50为例,假设在ERP系统里有110个设备(equipment)需要下载,那么CRM中间件会自动生成3个inbound队列执行下载任务,其中2个队列各下载50个设备,另外1个队列下载剩下的10...

2018-02-26 22:48:09 103 0

原创 如何处理错误信息 Pricing procedure could not be determined

当给一个SAP CRM Quotation文档的行项目维护一个产品时,遇到如下错误信息: When I inserted one product to a quotation, I meet with the following error message: Pricing procedure ...

2018-02-25 21:42:22 165 0

原创 同时开左右两个SAPGUI编辑器显示同一段ABAP代码

很多文本编辑器都支持同时开左右两个窗口显示同一段代码,使用场景可能是比较同一段代码的不同版本差异,或者是ABAP里,同一段代码在Netweaver不同版本里的实现差异,比如版本为SP1的系统A和版本为SP2的系统B。 假设我想同时显示系统A和系统B上的一段ABAP代码,使用菜单Version...

2018-02-25 21:41:11 524 1

原创 一种不通过UI给C4C自定义BO创建测试数据的方式

假设我在Cloud Studio里创建了如下一个非常简单的自定义BO: 我想生成一些该BO的实例。以前我采用的做法是给这个自定义BO创建编辑用的UI。然后使用这些UI创建BO实例。这种方式很花费时间。 其实有另一种更简便的做法:不需要任何UI,而是借助C4C Web Service。 ...

2018-02-24 09:30:01 148 0

原创 Document flow API in SAP CRM and C4C

Document flow API in CRM 以一个具体的例子来说明。在Appointment的Overview page上能看见一个名叫Reference的区域,这里可以维护一些其他的业务文档的ID,这样可以将该业务文档同当前正在编辑的Appointment关联起来。 我写了一个简单...

2018-02-24 09:29:04 184 0

原创 为什么有的系统的事务码BSP_WD_CMPWB看不见Enhance Component这个按钮

我的同事问我,为什么有的系统看不到下图7的按钮? 对比两张图里工具栏的差异。 答案 这是因为在图2(看不见Enhance Component按钮)的系统里,该系统的类型被设置为”SAP”系统 - 标志位INHOUSE_USE设置为true。 一旦这个标志位为true,Enh...

2018-02-21 18:54:55 164 0

原创 使用DOM Breakpoints找到修改属性的Javascript代码

使用Chrome开发者工具的DOM断点功能可以让您快速找到修改了某一个DOM元素的Javascript代码。 在Chrome开发者工具里,选中想要监控的DOM元素,点击右键,选择Break on->Attributes modifications: 之后在DOM Breakp...

2018-02-21 18:53:32 367 0

原创 CDS view注解解析 - @Environment.systemField

下面的CDS view使用到了@Environment.systemField这个注解,定义了两个参数#SYSTEM_LANGUAGE和#USER。 这个view从CRM物料主数据的产品抬头表COMM_PRODUCT读取product_id, product_type,以及comm_prshte...

2018-02-21 18:52:39 497 0

原创 如何查找Authorization object在哪些ABAP代码里使用到

使用事务码SUIM: 双击where-Used List->Authorization Objects->In Programs: 输入要查找的Authorization Object名称: COM_PRD 指定搜索范围: 得到搜索结果: 双击...

2018-02-21 18:51:55 130 0

原创 ABAP的权限检查跟踪(Authorization trace)工具

事务码 STAUTHTRACE 1. 点击”Activate Trace” button激活跟踪: 可以看到跟踪状态已经处于打开状态。 在同一个application server instance上使用事务码CRM_UI 登陆webclient ui,进行操作。操作完毕后关闭跟踪,...

2018-02-21 18:40:58 796 0

原创 谣言粉碎机 - 极短时间内发送两个Odata request,前一个会自动被cancel掉?

背景 有时我们能在Chrome开发者工具的Network tab里观察到SAP UI5应用会发出某些状态为”取消”的OData请求。如下图第五个请求。 之前有一种似是而非的说法:极短时间内发送两个OData请求,则第一个会自动被cancel掉。 这个说法从字面上看,有两点值得推敲: 1...

2018-02-21 18:40:03 102 0

原创 在ABAP里实现条件断点的三种方式

背景 有不同的同事问我这个问题:例如下图的LOOP要执行1000次,我只对其中的某一次比如第501次循环感兴趣,我肯定不可能按500次F5然后进入第501次的调试。或者我只对LOOP里某个变量为某一个具体值的那一次循环感兴趣。如何才能避免重复按F5,让断点直接停在满足我期望的条件上? 其实...

2018-02-21 18:36:19 584 0

原创 ABAP正则表达式 vs SPLIT INTO

需求: 把如下通过”/”连接起来的三个字符串分别解析出来。 传统的做法见下图第98行的function module SKWF_UTIL_IO_FIND_BY_KEY: 这个function module的作用就是解析用两个/分隔开的document type: L, document...

2018-02-21 16:45:36 202 0

原创 利用Chrome的Heap Snapshot功能分析一个时间段内的内存占用率

在下图测试代码第13行和第16行设断点. 以调试方式运行,首先断点在第13行处触发: 打开Chrome开发者工具,点击Profiles tab, 再点击按钮”Take Snapshot”: 生成一个Snapshot, ID为3: 继续以调试mode执行代码到第16行,点击按钮”T...

2018-02-21 16:39:46 748 0

原创 另一种方式实现事务码SE16里的结果集修改

注: 这种方法不同于网上流传的在调试器里修改fcode的那种解决方案。 使用场景:我们需要直接在开发系统的事务码SE16里修改某些结果集的值,但是在SE16的工具栏里看不见修改按钮: 解决方案 使用/h进入调试模式: 点击Script tab, 使用按钮”Load Script...

2018-02-21 16:22:15 155 1

原创 如何修改Fiori Launchpad里Tile计数调用的时间间隔

Fiori launchpad里的Tile上有一个数字,例如下图My Leads的例子:每隔指定的时间间隔,会向后台发起一次数据请求,读取当前Lead的个数。 这个请求可以在Chrome Development Tool里观察到: 如何修改这个时间间隔?比如我想把默认的30秒改成300...

2018-02-21 16:21:12 90 0

原创 Fiori里花瓣的动画效果实现原理

Fiori里的busy dialog有两种表现形式,一种是下图里的花朵形状,由5个不断旋转的花瓣组成。另一种是下图的3/4个圆环不断旋转的效果。 关于前者的效果,可以看我制作的这个视频。这个视频是手动将下图setTimeout的300毫秒延时改成30秒之后的效果,意思是30秒之后这个花瓣效果...

2018-02-21 16:20:10 340 1

原创 到底哪种类型的错误信息会阻止business transaction的保存

当试图在CRM WebUI保存一个business transaction比如Opportunity时,可能会遇到各种各样的错误消息。有的错误消息会阻止Business transaction被save,有的则不会。这些错误消息有何区别? 通过debug, 发现method check_popu...

2018-02-21 12:08:34 127 0

原创 不同系统里同一Customizing activity的显示差异分析

比如SAP HANA Live Reporting这个Customizing Activity,在System AG3里不可见,但是在另一个系统QHD里却能使用。比较下列两张图的差异。 一种可能的原因是,这个customizing activity绑定到了某个业务开关(Business ...

2018-02-21 12:07:57 63 0

原创 SAP Fiori应用Footerbar区域按钮的高亮显示逻辑

如果您够细心,您或许会发现有的SAP Fiori应用的footerbar区域内的按钮有高亮显示,有的则没有。 如何自己分析这两种按钮的实现原理? 还是借助Chrome Development Tool。更多Chrome development tool的使用技巧,参考我的博客 Chr...

2018-02-21 12:07:12 197 0

原创 Fiori Launchpad Tile点击后跳转的调试技巧

在SAP Fiori launchpad 里点击某个tile之后,后台会计算出跳转的目标url返回给前台。 下图中一个个白色的方框就成为tile。每个tile点击之后,会打开一个对应的Fiori应用。 本文介绍如何在后台调试这个跳转目标的计算逻辑。 首先我们可以直接在浏览器里点击tile...

2018-02-21 12:06:19 106 0

原创 找出OData service出错根源的小技巧

SAP的Fiori应用是通过OData和后台交互的。在使用Fiori应用时您可能会遇到这样的错误消息: 这个错误消息没有包含有助于partner或者客户定位问题根源的线索。 下面是如何在后台找出问题根源的步骤。 1. 在Fiori前台系统上使用事务码/IWFND/ERROR_LOG找到当...

2018-02-21 12:04:44 181 0

原创 Fiori Launchpad Tile点击后跳转的调试技巧

在SAP Fiori launchpad 里点击某个tile之后,后台会计算出跳转的目标url返回给前台。 下图中一个个白色的方框就成为tile。每个tile点击之后,会打开一个对应的Fiori应用。 本文介绍如何在后台调试这个跳转目标的计算逻辑。 首先我们可以直接在浏览器里点击tile...

2018-02-20 22:17:08 167 0

原创 Inner Join, Left Outer Join和Association的区别

测试用的CDS视图的源代码,第8行用Inner Join连接TJ02T, 后者存放了所有系统状态的ID和描述。 Inner Join测试结果:对于那些在TJ02T里没有维护描述信息的状态,它们不会出现在结果集里。 把第八行的Inner Join改成Outer Join,测试结果相反:注...

2018-02-20 22:14:24 113 0

原创 如何在SAP CRM WebClient UI里创建HANA Live Report

1. 使用业务角色ANALYTICSPRO登录WebClient UI: 2. 点击新建按钮: 为新建的报表分配一个HANA Live Query: 指定Query的参数: 上图WebClient UI选择的参数都定义在HANA studio里: 给报表添加属性: ...

2018-02-20 22:12:49 154 0

原创 CRM Transaction处理中的权限控制

当试图打开一个Opportunity时, 系统会进行如下一系列的权限检查: 1. 检查Authorization object CRM_ORD_OP: 此处会检查当前user的partner function和partner function category的设置情况: ...

2018-02-20 22:11:37 411 0

原创 用ABAP 生成二维码 QR Code

除了使用我的这篇blogStep by step to create QRCode in ABAP Webdynpro提到的使用ABAP webdynpro生成二维码之外,也可以通过使用二维码在线生成网站提供的service来生成二维码。 二维码在线生成网站: http://www.makep...

2018-02-18 13:36:04 1039 1

原创 C4C Cloud Application Studio做ABSL开发的一些性能方面的最佳实践

Stefan Hagen在博文SAP Cloud Application Studio Performance Best Practices里介绍了在C4C里使用Cloud Application Studio进行ABSL编程的一些性能方面的最佳实践。 文章里提纲挈领地给出了一些guidelin...

2018-02-18 13:35:00 547 0

原创 Smart template的控件能否当成普通控件来用

我的同事问过我这个问题: 只要弄清楚Smart control的原理,就能回答这个问题。 答案是: smart control可以像普通的控件一样在xml view中被定义和使用,但是必须结合OData annotation,否则没有意义。以Smart control里的Smart fie...

2018-02-18 13:34:16 110 0

原创 一个查看UI5控件所有公有方法的小技巧

一个很小的tip:比如我想把UI5表格控件里的每列设置成宽度根据显示的内容自适应,需要知道应该调用控件的哪个方法来实现。 一种办法当然是查SAP帮助文档,得知需要调用控件的公有方法setAutoSizable。 另一种办法是在debugger里研究,因为根据经验,这种公有方法的名称按照惯例...

2018-02-18 13:33:23 102 0

原创 Opportunity的chance of success的赋值逻辑

该字段的值和另外两个字段Sales Stage和Status都相关。 从下列function module CRM_OPPORT_H_PROB_SET_EC可看出,当status不为代码中的这些硬编码的值时,chance of success的值取决于sales cycle和sales st...

2018-02-18 13:32:11 214 0

原创 一些Java反编译工具/源代码查看工具的介绍

有的朋友抱怨他们在使用他们公司的闭源框架时看不到底层的源代码。那么可以尝试使用一些Java反编译工具。 下面我举个例子介绍具体使用这些反编译工具的步骤。 JAD 假设我们想在Eclipse里查看第42行Graphics2D的源代码: 直接ctrl加左键进去是看不见源码的。 我...

2018-02-17 11:23:18 289 0

原创 从产品展示页面谈谈Hybris系列之二: DTO, Converter和Populator

文章作者:张健(Zhang Jonathan) 上一篇文章 从产品展示页面谈谈Hybris的特有概念和设计结构 我们讲解了Hybris一些特有的概念以及大体架构,并且介绍了Facade层里是如何定义DTO(Data Transfer Object)对象。 一...

2018-02-10 14:12:45 281 0

原创 如何查找Fiori UI上某个字段对应的后台存储表的名称

今天微信群里有朋友问到这个问题。 如果是SAPGUI里的事务码,比如MM01,对于开发者来说这个任务非常容易完成。 比如我想知道下图“Sales Unit”这个字段的值到底保存在哪张表的哪个字段里,只需要选中这个字段,按F1,在弹出窗口里即可得知表名是MVKE,字段名是VRKME. 在S...

2018-02-10 14:11:34 131 0

原创 想要阅读一些开源项目或框架的源代码,不知道从哪里入手?

有个朋友在知识星球上向我提问。 我的建议是从Spring的源代码入手。至少我自己也是这么做的,毕竟Spring里有大量的设计模式和OO编程的最佳实践。我之前在SAP使用SAP自己的开发语言ABAP进行日常工作,后来因为工作原因也需要用Java开发。虽然SAP之前大多数产品都是基于ABAP开发...

2018-02-08 22:11:50 185 0

原创 SAP Fiori里两种锁机制(lock)的实现

方法1: ETAG机制 SAP CRM Fiori采用了这种机制。 看一个具体的例子来理解。假设我用用户名Jerry选中了这个ID为3456的Opportunity,点击Edit按钮之后: 会触发一个读操作发到后台: 后台响应这个读请求,并且在响应的头部字段ETAG里写入了对应的值...

2018-02-08 22:11:19 173 1

原创 webpack最简单的入门教程里bundle.js之运行单步调试的原理解析

有的朋友可能在ST05里看到这个按钮但是不知道如何使用。 方法如下。 首先使用事务码ST05,使用下面的按钮打开trace开关,指定trace的client,用户名和待trace的程序。 打开trace之后,在另一个SAPGUI里执行您想要trace的程序,完毕之后关掉trace: ...

2018-02-08 21:31:04 763 0

原创 Webpack 10分钟入门

我发现Google和百度上关于HANA DB Hint的中文介绍比较少,所以就写了这一篇。本文部分内容来自SAP note 2142945 – FAQ: SAP HANA Hints。 什么是SAP HANA Hint HANA Hint是SAP14 HANA数据库服务器执行的一种指令。H...

2018-02-08 21:30:11 312 0

提示
确定要删除当前文章?
取消 删除