Jerry在S/4HANA for Customer Management(以下简称S4CRM)和Cloud for Customer(以下简称C4C)开发团队都工作过,这篇文章给出这两款产品一些技术层面的比较。
部署方式
这一差异显而易见,本地部署和云端部署的区别导致了表格里其他比较项目的差异。
SAP标准UI开发方式
S4CRM和C4C的UI虽然看起来都是Fiori风格,但实现技术不同。
S4CRM的标准UI采用的仍然是SAP CRM WebClient UI技术,只不过SAP WebClient UI团队的开发同事们巧妙地设计了一系列CSS,并且对WebClient UI的框架做了一些调整(所谓的"Visual Harmonization"), 使得其视觉效果和体验接近于原生的Fiori应用。
如果看到一个界面风格和原生Fiori应用很类似的UI,您不能判定该UI到底是基于WebClient UI还是SAP UI5,可以打开Chrome开发者工具,倘若能找到下图红色区域所示的CRM Application Frame和带有/bc/bsp的ICF路径,则该UI是基于WebClient UI开发的。
如果在Sources标签页内能看到加载了下图所示的UI5库文件,说明该UI是基于SAP UI5开发的。
安装之后在Chrome开发者工具会多出一个名为UI5的标签页,如果一个UI基于SAP UI5,则该标签页会显示对应信息,否则显示空白。
而C4C的标准UI则是基于SAP UI Designer和SAP UI5协作而成的。C4C标准UI也符合著名的“二八定律”,即80%的标准UI布局类似,只是呈现的业务数据有差异。例如下图红色区域我们称之为工作中心(Work Center),蓝色区域为工作中心视图(Work Center View),绿色区域称为Object Work List。
C4C里不同的应用尽管功能各异,但用户都是通过工作中心-工作中心视图-OWL这个统一的方式去访问。为了避免开发此类布局基本类似的UI模型造成的重复劳动,我们使用UI Designer,以所见即所得的方式开发UI模型。
例如Tickets这个视图里的OWL基于的UI模型名称可以通过Chrome开发者工具找到: /BYD_COD/ServiceOnDemand/AgentQueue/SEOD_Ticket_SADL_OWL
该模型在UIDesigner里打开如下图所示。我们首先从UI控件工具箱里拖拽出一个表格控件放到该模型UI区域,再指定该表格需要显示哪些列,并维护每列需要显示Ticket这个Business Object上哪些字段的内容。
在UI Designer里开发的UI模型保存之后,在ABAP后台以XML的格式存储。运行时这些UI模型的内容被读到C4C前台,通过C4C UI框架翻译成SAP UI5控件渲染给终端用户。
对于UI Designer技术上不能支持的剩下20%的需求,我们仍然会采用原生的SAP UI5开发。比如下图这种地图和C4C标准UI的集成,就是成都SAP研究院的C4C开发团队通过SAP UI5实现的。
Partner UI开发方式
对S4CRM来说,因为是本地部署,Partner可以直接登录后台进行开发,所以理论上来说,只要SAP标准开发能实现的功能,Partner也能做。
有的朋友抱怨WebClient UI和其他开源UI框架相比显得比较笨重,有的特效不易实现。其实,我的个人看法是,WebClient UI底层是基于SAP BSP的,而BSP又支持原生HTML和Javascript的开发,因此BSP其实也是灵活和开放的。
例如您可以参考我的
这篇文章使用WebClient UI实现下面的效果:
对于C4C的Partner来说,只能使用UI Designer进行UI开发。C4C标准的UI5开发那条途径没有对Partner开放。不过存在一个轻量级的替代方案:使用C4C HTML mashup扩展C4C标准UI。
下面是SAP Community上的一篇
博文,介绍了如何调用微软新闻API,取回最新的新闻并显示在C4C的客户明细页面里。
SAP后台开发方式
S4CRM和C4C后台都是基于ABAP Netweaver,因此对于SAP标准开发人员来说,进行这两个产品的后台开发使用的工具相同:SAPGUI或者ABAP Development Tools。关于更多ABAP Development Tools的介绍,请参考我的微信公众号文章
那些年我用过的SAP IDE 。
S4CRM的Service Request的实现是基于One Order这个技术框架,Jerry是该开发框架的一员,而C4C的Service Request则基于ESF(Enterprise Service Framework)框架,Jerry在C4C项目中对该框架也有所了解,因此这里可以多说一句。One Order和ESF这两个框架其实现都有着Java Spring里依赖注入和控制反转的影子,即SAP应用开发人员只需要专注于将具体的业务逻辑实现在框架规定的技术模型里——One Order里称为回调(Callback), ESF里称为Determination,而无需操心这些模式何时调用——这些模型实例的初始化,执行上下文的准备,以及模型与模型之间的依赖,模型与框架的协同工作(orchestration)等等工作都由ESF框架本身完成,这极大程度地降低了应用开发的编程复杂度,提高了应用程序的健壮性。
下图是S4CRM里One Order的部分回调截图,红色区域即为具体的回调函数。
下图是S/4HANA里的BO Determination的一个例子。因为C4C的后台对Partner不可见,因此不允许在社交媒体上发布任何关于C4C后台的截图,这里我采用S/4HANA的截图代替,因为二者技术原理类似。
Partner 后台开发方式
对S4CRM来说,SAP开发人员和Partner采用的开发工具和开发方式相同。
对C4C Partner来说,只允许使用SAP Cloud Application Studio进行后台的二次开发。这是因为C4C基于云的部署模式,多个客户以不同租户(tenant)的方式,共享同一物理服务器。直接用SAPGUI和ABAP Development Tools创建的后台模型均为所有租户可见。因此,SAP提供了新的开发工具Cloud Application Studio供Partner进行后台二次开发。使用该工具创建的后台模型由所谓的PDI(Partner Development Infrastructure)统一管理,确保其租户隔离性(Tenant Isolation)。
我在SAP Community上也写过很多关于Cloud Application Studio的文章,您可以通过这个
链接获得。
与其他系统集成的技术手段
另一方面,虽然S4CRM不需要再借助CRM中间件进行S4CRM和S/4HANA的数据同步,但是仍然可以使用CRM中间件里的一个模块,XIF(External Interface) Adapter来和第三方系统交互。XIF Adapter在整个交互场景中扮演的角色如下:
和S4CRM相比,作为一款云解决方案,C4C同其他系统的交互手段要丰富得多。下图是C4C提供的标准集成场景一览:
C4C所有的集成方式都记录在一位印度美女同事Sapna Ramaiah的博客里,阅读量超过4万:
Key User Extensibility
S4CRM没有继续使用源自SAP CRM的AET(Application Extension Tool), 而是采用了S/4HANA的扩展工具S/4HANA Key User Tool。该工具的一个特色就是支持在浏览器里书写ABAP代码,其原理在我的微信公众号文章
那些年我用过的SAP IDE 里有过介绍。
C4C里的Key User Tool无论从使用方式还是从功能上来说都和S/4HANA Key User Tool非常类似,这在我看来一点也不奇怪。这篇介绍S/4HANA Key User Tool的博客的作者,Thomas Schneider,曾经是大名鼎鼎的SAP PDI的首席架构师:
Thomas博士1996年进入SAP工作至今,出版过多部SAP技术著作。我去德国Walldorf总部出差时,曾看到不少同事桌上都摆着他的一两本书。
C4C的Key User Tool给我留下深刻印象的一个强大功能是提供了灵活的规则(Rule)编辑功能来控制UI上某个元素的显示/隐藏。这种规则甚至可以通过脚本代码来定义。
因为对这个功能的实现很好奇,我做过一些研究并把结果写在了这篇博客里:
而S/4HANA Key User Tool也毫不逊色,甚至支持直接在浏览器里编写ABAP代码:
Office integration
S4CRM和C4C均支持Excel导出,具体实现参考我的博客:
PDF格式的导出也是均支持的,只是具体实现方式有所区别。
C4C除了Excel导出外,还支持通过Excel上传的方式将本地数据导入至C4C系统。
值得一提的是,SAP CRM支持更为强大的word模板功能,即用户可以在本地开发一个word模板文件,将里面的字段绑定到CRM标准的BO模型字段上。比如下图我将该模板分配给CRM Product(产品)这个BO,然后将BO上需要的字段从文档右边的树形结构拖拽到文档左边:
运行时只要我从某个产品明细页面打开该模板,该模板里绑定到BO模型字段上的字段就会自动显示对应的BO模型字段的内容,如下图所示:
具体步骤参考我的博客:
这个功能S4CRM 1.0不支持。
最后是一些我写过的针对一些具体的技术点,S4CRM和C4C的实现差异的比较: