CRM中间件里的发布-订阅者模式

2018-03-10
阅读 2 分钟
2.3k
从事务码SMW01里能观察到一个BDOC可能被发送往不止一个目的site去,比如下图所示的5个site都会收到该site,而高亮显示的SMOF_ERPSITE代表ERP系统QI3的client 504会接收到这个BDOC。

利用CRM中间件Middleware从ERP下载Customer Material的常见错误

2018-03-08
阅读 7 分钟
2.1k
使用事务码VD51和VD52创建和修改Customer Material。下图是我在ERP创建的Material,为其维护了一个Customer Material AOP。

如何检查某个用户是否具有某个权限对象上定义的某种权限

2018-03-08
阅读 2 分钟
2.1k
比如下图这个ABAP development studi里创建的角色是为了实现CDS view DEMO_CDS_AUTH_LIT_PFCG的权限控制,里面使用到了权限对象S_CARRID.

如何用ABAP代码读取CDS view association的数据

2018-03-08
阅读 1 分钟
2.7k
我有如下一个CDS view, 这个view的数据来自CRMD_ORDERADM_H, 定义了一个名称为_statushelp的association, 指向了另一个CDS view Z_C_Status_Valuehelp.该view暴露了两个字段STATUS_KEY和STATUS_TEXT.

为什么使用中间件下载时总是收到警告消息Object is in status Wait

2018-03-04
阅读 1 分钟
1.3k
在使用中间件从ERP下载对象时,正常情况下应该看到如下提示消息: 然而有时遇到的是黄色的警告消息:Object is in status Wait. 如何自己排错呢?在函数SMOF0_INIT_DNL_START里设置断点。 使用SMOF0_READ_SMOFPARSFA查询系统参数MAX_PARALLEL_PROCESSES,在我使用的系统上配置为5,意味着最大只允许有5个工作进程用于中间...

CRM和ERP的Sales Organization的映射关系

2018-03-04
阅读 1 分钟
1.8k
在如下的配置里可以维护CRM和ERP的Sales Organization的映射关系。 例如,ERP的编号为0001的销售组织映射到CRM的编号为O 50040102的销售组织: 这种映射关系存储在表HRV1222A里,可以通过字段R3_SA_ORG查询: 其中CRM的Sales Organization的编号存储在字段OBJID里: 也可以在代码里通过CL_CRM_ORGMAN_SERVICES=>MAP_R3_S...

面试问题 - 只用位操作在ABAP里实现a+b

2018-03-03
阅读 3 分钟
2k
用ABAP实现下图的第五种整数相加算法: 实现代码: {代码...} 算法描述参考我的SCN博客 Just for fun – Implement a + b using pure bitwise operation in ABAP

Hello World, S/4HANA for Customer Management 1.0

2018-03-03
阅读 1 分钟
2k
Python 中的 class 体内定义方法时,如果没有显式地包含 self 参数,有时候依然可以被调用。这是一个非常有趣的话题,因为它涉及到对 Python 中类与对象之间关系的更深理解。要理解为什么这种情况下方法依然能够被调用,我们需要逐步拆解 Python 类的构造方式以及方法绑定的原理。

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

2018-02-27
阅读 1 分钟
1.2k
我的同事问我,为什么有的系统看不到下图7的按钮? 对比两张图里工具栏的差异。 答案 这是因为在图2(看不见Enhance Component按钮)的系统里,该系统的类型被设置为"SAP"系统 - 标志位INHOUSE_USE设置为true。 一旦这个标志位为true,Enhance Component这个按钮对应的ID COMP_EXT被加入到内表lt_excl_fcodes里,这导致了...

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

2018-02-27
阅读 1 分钟
5.1k
在Chrome开发者工具里,选中想要监控的DOM元素,点击右键,选择Break on->Attributes modifications:

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

2018-02-27
阅读 1 分钟
5k
在下图测试代码第13行和第16行设断点. 以调试方式运行,首先断点在第13行处触发: 打开Chrome开发者工具,点击Profiles tab, 再点击按钮"Take Snapshot": 生成一个Snapshot, ID为3: 继续以调试mode执行代码到第16行,点击按钮"Take heap snapshot"以生成第二个snapshot。从下拉菜单里选择"Objects allocated between Snap...

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

2018-02-27
阅读 1 分钟
1.6k
以上图的尺寸为50为例,假设在ERP系统里有110个设备(equipment)需要下载,那么CRM中间件会自动生成3个inbound队列执行下载任务,其中2个队列各下载50个设备,另外1个队列下载剩下的10个设备。

CRM数据库表COM_TA_R3_ID的数据来源

2018-02-27
阅读 1 分钟
1.8k
这个表存放的内容是CRM产品同名settype COM_TA_R3_ID对应的业务数据。 表里的数据从来源上分两类: 1. 直接创建自CRM系统的相关数据 2. 从ERP下载的相关数据,如设备(equipment) 第一类的例子如下图: 字段R3SER_NO存储的序列号内容。 这个序列号在WebClient UI的ERP Identification处维护: 第二类的例子:ERP系统里设备...

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

2018-02-26
阅读 1 分钟
1.9k
很多文本编辑器都支持同时开左右两个窗口显示同一段代码,使用场景可能是比较同一段代码的不同版本差异,或者是ABAP里,同一段代码在Netweaver不同版本里的实现差异,比如版本为SP1的系统A和版本为SP2的系统B。

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

2018-02-26
阅读 1 分钟
1.6k
当给一个SAP CRM Quotation文档的行项目维护一个产品时,遇到如下错误信息:Pricing procedure could not be determined

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

2018-02-25
阅读 3 分钟
2k
有时我们能在Chrome开发者工具的Network tab里观察到SAP UI5应用会发出某些状态为"取消"的OData请求。如下图第五个请求。

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

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

Document flow API in SAP CRM and C4C

2018-02-25
阅读 3 分钟
1.8k
以一个具体的例子来说明。在Appointment的Overview page上能看见一个名叫Reference的区域,这里可以维护一些其他的业务文档的ID,这样可以将该业务文档同当前正在编辑的Appointment关联起来。

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

2018-02-25
阅读 1 分钟
2k
事务码 STAUTHTRACE 1. 点击"Activate Trace" button激活跟踪: 可以看到跟踪状态已经处于打开状态。 在同一个application server instance上使用事务码CRM_UI 登陆webclient ui,进行操作。操作完毕后关闭跟踪,点Evaluate button得到所有权限检查的跟踪列表。 点F9可以看到执行权限检查的ABAP代码: 可以查看涉及到的权限...

Opportunity的chance of success的赋值逻辑

2018-02-25
阅读 1 分钟
1.4k
从下列function module CRM_OPPORT_H_PROB_SET_EC可看出,当status不为代码中的这些硬编码的值时,chance of success的值取决于sales cycle和sales stage的不同组合:

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

2018-02-25
阅读 2 分钟
1.4k
答案是: smart control可以像普通的控件一样在xml view中被定义和使用,但是必须结合OData annotation,否则没有意义。以Smart control里的Smart field为例,详细原理在我的博客Currency example – how Smart field works里介绍。

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

2018-02-25
阅读 1 分钟
1.5k
比如SAP HANA Live Reporting这个Customizing Activity,在System AG3里不可见,但是在另一个系统QHD里却能使用。比较下列两张图的差异。

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

2018-02-25
阅读 1 分钟
1.5k
如果您够细心,您或许会发现有的SAP Fiori应用的footerbar区域内的按钮有高亮显示,有的则没有。 如何自己分析这两种按钮的实现原理? 还是借助Chrome Development Tool。更多Chrome development tool的使用技巧,参考我的博客 Chrome Development Tool tips used in my daily work 使用network tab可以观察到实现高亮实...

如何将BSP应用配置成Fiori Launchpad上的一个tile

2018-02-25
阅读 2 分钟
2k
当我们通过WebIDE或者Eclipse的插件Team Provider把一个本地开发好的UI5应用部署到了ABAP Netweaver服务器上之后,我们可以将该UI5应用配置成Fiori launchpad上的一个tile,便于客户使用。本文是具体步骤。

Inner Join, Left Outer Join和Association的区别

2018-02-25
阅读 1 分钟
2.1k
测试用的CDS视图的源代码,第8行用Inner Join连接TJ02T, 后者存放了所有系统状态的ID和描述。 Inner Join测试结果:对于那些在TJ02T里没有维护描述信息的状态,它们不会出现在结果集里。 把第八行的Inner Join改成Outer Join,测试结果相反:注意观察下图stat列值为E0001的行项目也出现在了结果集里。 Association的测试...

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

2018-02-25
阅读 1 分钟
1.9k
1. 使用业务角色ANALYTICSPRO登录WebClient UI: 2. 点击新建按钮: 为新建的报表分配一个HANA Live Query: 指定Query的参数: 上图WebClient UI选择的参数都定义在HANA studio里: 给报表添加属性: 添加measure: 之后报表即可在WebClient UI里成功渲染: 并且也能在CRM Fiori的Customer Report应用里看到该report。 如果想获...

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

2018-02-25
阅读 2 分钟
1.7k
Stefan Hagen在博文SAP Cloud Application Studio Performance Best Practices里介绍了在C4C里使用Cloud Application Studio进行ABSL编程的一些性能方面的最佳实践。

SAP CRM Transaction处理中的权限控制

2018-02-25
阅读 2 分钟
2.2k
当试图打开一个Opportunity时, 系统会进行如下一系列的权限检查: 1. 检查Authorization object CRM_ORD_OP: 此处会检查当前user的partner function和partner function category的设置情况: 如果检查失败,会抛出error message: 2. 进行第二轮针对CRM_ORD_LP的检查: 3. 如果再失败,进行第三轮对CRM_OPP的权限检查:...

CDS view注解解析 - @Environment.systemField

2018-02-25
阅读 2 分钟
1.7k
下面的CDS view使用到了@Environment.systemField这个注解,定义了两个参数#SYSTEM_LANGUAGE和#USER。

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

2018-02-25
阅读 1 分钟
1.5k
事务码 STAUTHTRACE 1. 点击"Activate Trace" button激活跟踪: 可以看到跟踪状态已经处于打开状态。 在同一个application server instance上使用事务码CRM_UI 登陆webclient ui,进行操作。操作完毕后关闭跟踪,点Evaluate button得到所有权限检查的跟踪列表。 点F9可以看到执行权限检查的ABAP代码: 可以查看涉及到的权限...

用ABAP 生成二维码 QR Code

2018-02-25
阅读 2 分钟
3k
除了使用我的这篇blogStep by step to create QRCode in ABAP Webdynpro提到的使用ABAP webdynpro生成二维码之外,也可以通过使用二维码在线生成网站提供的service来生成二维码。

ABAP正则表达式 vs SPLIT INTO

2018-02-25
阅读 1 分钟
2.4k
需求: 把如下通过"/"连接起来的三个字符串分别解析出来。 传统的做法见下图第98行的function module SKWF_UTIL_IO_FIND_BY_KEY: 这个function module的作用就是解析用两个/分隔开的document type: L, document class: CRM_L_ORD和document guid。 这个function module采用传统的做法,把三个key拆分并存储到一个内标里...

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

2018-02-25
阅读 1 分钟
1.2k
注: 这种方法不同于网上流传的在调试器里修改fcode的那种解决方案。 使用场景:我们需要直接在开发系统的事务码SE16里修改某些结果集的值,但是在SE16的工具栏里看不见修改按钮: 解决方案 使用/h进入调试模式: 点击Script tab, 使用按钮"Load Script": 再点Start Script: 之后就可使用Edit icon进行编辑:

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

2018-02-25
阅读 1 分钟
1.4k
Fiori launchpad里的Tile上有一个数字,例如下图My Leads的例子:每隔指定的时间间隔,会向后台发起一次数据请求,读取当前Lead的个数。

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

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