一些SAP Partners能够通过二次开发实现打通C/4HANA和S/4HANA的方法介绍

有好几位朋友在公众号后台给我留言询问SAP C/4HANA和S/4HANA集成的方案。

尽管我给这些朋友推送了一个方案:打通C/4HANA和S/4HANA的一个原型开发:智能服务创新案例,然而我得到的反馈是:在这个创新案例里,需要在C/4HANA里的服务云做一些后台开发,即下图红色方框标注的C4C API endpoint。因为是云产品,这种后台开发只有SAP能做,并没有对Partners开放。

因此这篇文章我会介绍一些Partners能够进行的二次开发方式,通过这些方式也能实现C/4HANA和S/4HANA的简单集成场景。

需要强调的是,本文的重点是思路的介绍,罗列出的代码仅适用于原型开发场景中,离真正用于生产环境的要求还有很大距离,比如缺少错误处理,缺少足够多的场景覆盖等等。这些需要Partners在真正做二次开发时自己去弥补。

我使用一个简单的场景来介绍一种轻量级的集成方式:将C/4HANA中销售云的销售订单(Sales Order)同步到S/4HANA中。因为在S/4HANA里,基于销售订单可以生成后续的生产订单,那么一旦实现这个集成场景,理论上我就可以用手机访问C/4HANA的销售云,在手机上触发S/4HANA的生产制造流程。

SAP C/4HANA销售云里的C4C Cloud for Sales部分,如果需要同SAP其他On-Premises产品比如SAP ERP, SAP CRM等集成,SAP官方推荐的同步方式是采用SAP HANA Cloud Integration和SAP Netweaver PI作为中间件。

这两种推荐的方式都非常成熟并且在众多的实际项目实施过程中得到了验证。Jerry也简单浏览过这两种方式的官方配置文档。

这个链接是PI的配置文档:

https://support.sap.com/content/dam/SAAP/Sol_Pack/Library/TestScripts/NC8_CFCALL_HowTo_Guide_EN_XX.pdf

这个链接是HCI的配置文档:

https://support.sap.com/content/dam/SAAP/Sol_Pack/Library/TestScripts/NC7_CFCALL_HowTo_Guide_EN_XX.pdf

大家从我截图高亮的文档页码不难发现,使用这两种中间件都存在一些配置工作量——虽然对于诸如销售订单,客户主数据,产品主数据这种通用同步场景,SAP已经提供了开箱即用的解决方案,但仍需专业顾问在中间件上完成配置才能让同步流程正常工作。对于这种方式的思路,Jerry的个人理解就是,配置优于编码,通过大量的配置来减少甚至避免Partners编码的工作量。

Jerry将要介绍的另一种集成方式则反其道而行之,编码优于配置。这种方式的优点就是完全避免了HCI或者PI等中间件的引入,因此也压根不存在配置的工作量了。当然凡事有利就有弊,抛弃了中间件之后,意味着C4C Cloud for Sales采用直连的方式同S/4HANA交互,这样C4C创建的销售订单传送到S/4HANA之后,Partners需要在S/4HANA使用对应的API自行创建销售订单。

来看具体的步骤。

SAP C4C有个功能叫做OData Notification, 在标准的Business Object数据发生状态变化(创建,更新,删除)时,可以通过OData的方式将这些事件推送到事件监听者去,这实际是一个简单的观察者-发布者设计模式。

1. 既然这个功能基于OData,我们首先要创建一个OData服务,在这个OData服务里定义C4C销售订单的哪些字段需要推送到S/4HANA去。

关于SAP产品里各种OData技术的使用,请参考Jerry的文章:SAP OData编程指南

SAP C4C的OData服务的创建可以直接在浏览器里完成:

因为所要做的就是简单的建模工作,把想要暴露的字段从左边的Business Object列表里选中,移动到右边即可。

我创建的OData服务名叫zjerrysalesorder

下面的UI就是事件发布者和监听者关键维护界面,里面的设置含义是:一旦CUSTOMER_QUOTE(C4C销售订单基于的BO)发生了创建或者更新,则新建或者更新的销售订单数据会通过前一步创建的OData服务zjerrysalesorder推送到注册的事件监听者,即S/4HANA的一个API /sap/bc/dis_c4c上去。

2. 在S/4HANA事务码SICF里按照路径/sap/bc/dis_c4c实现这个事件监听者,这个路径需要和第一步在C4C系统里注册的url一致。

在ABAP Netweaver事务码SICF里开发的这些类从原理上可以类比成Java里的Servlet,在Jerry的博客里有详细介绍:

ABAP ICF handler and Java Servlet

https://blogs.sap.com/2017/05/07/abap-icf-handler-and-java-servlet/

在服务dis_c4c对应的ABAP处理类里设置一个断点,在C4C里新建一个销售订单,然后S/4HANA里这个断点就会触发。

当然这里涉及到一个内外网穿越的问题:运行在Internet网络下的C4C如何能够和位于企业内网环境下的S/4HANA交互呢?

可以采用Jerry之前的文章 使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数 里介绍的SAP云平台加上Cloud Connector的解决方案实现内外网访问,或者直接将S/4HANA这个url /sap/bc/dis_c4c做一个内外网地址映射后,暴露给外网直接访问。当然后者不推荐,用来做原型开发和概念验证没问题,如果是正式使用,那还是用SAP云平台那套标准解决方案吧。

我们在断点里可以观察C4C推送到S/4HANA的数据格式。

从调试器里可以看到,S/4HANA接收到的是一个JSON格式的字符串,包含了触发事件的BO名称,发生状态变化的BO实例的GUID,触发的事件类型以及一个OData服务的url。这个OData服务正是我在第一步创建的zjerrysalesorder。

S/4HANA通过消费这个OData服务,就能获取在C4C创建的销售订单通过OData服务暴露出来的数据,下边这个例子发生的事件是create,通过消费红色高亮的OData服务url,我们就能在S/4HANA里获得C4C新建的销售订单的明细,再调用操作销售订单的API在S/4HANA里进行创建工作。

S/4HANA端完整的ABAP实现代码已经放到我的github上了:

https://github.com/i042416/KnowlegeRepository/tree/master/ABAP/C4_S4_replicate

核心的逻辑就是使用函数SD_SALESDOCUMENT_CREATE进行创建,这个S/4HANA函数的接口虽然和SAP CRM的CRM_ORDER_MAINTAIN有差异,但设计思路都类似,订单的数据散落在诸如Header,Item,Party,Text等节点上,直接填充某节点对应的输入结构即可完成相应数据的创建。

将C4C创建好的销售订单同步到S/4HANA的实际效果,可以参考这个腾讯视频

这种通过观察者-发布者模式进行C/4HANA和S/4HANA数据同步的方式,依赖于C4C里BO状态的三种变化:创建,修改和删除,显得不够灵活。从上面的开发我们能看出,Partners的二次开发工作量主要集中在S/4HANA,C/4HANA端没有任何编码工作,仅仅完成了一个OData服务的建模和事件注册。当事件发生后,从C/4HANA端向S/4HANA发起的事件推送是由C4C系统层面的组件来完成的。

那么Partner有没有办法在C/4HANA里,通过C4C端的二次开发编码,直接消费S/4HANA的服务呢?

当然有。假设这样一个场景:C/4HANA的销售订单同步到S/4HANA后,在S/4HANA完成必要的生产流程后,可以进行后续的交货流程。现在的需求就是:直接在C4C销售订单的UI上触发S/4HANA外向交货单(Outbound Delivery)的创建,这样业务人员不需要登录S/4HANA系统,而只需在手机上使用C4C应用,就能完成S/4HANA交货流程的触发了。

这个需求Partners完全可以通过二次开发来实现。

思路是:在S/4HANA把外向交货单创建函数BAPI_OUTB_DELIVERY_CREATE_SLS包装成一个Restful API,然后在C4C Cloud Application Studio里进行二次开发,使用ABSL(ABAP Scripting Language)来消费API。

1. 在S/4HANA里按部就班的完成上述Restful API的创建与实现。详细实现代码还是放在Jerry的github上:

https://github.com/i042416/KnowlegeRepository/tree/master/ABAP/C4_S4_replicate

2. 在销售订单的BO上创建一个新的Action triggerOutboundDelivery:

绑定到UI这个叫做Trigger Delivery的按钮上。同时在销售订单抬头区域新建一个字段,用于存放S/4HANA创建好的交货单ID。

最后完成这个按钮点击后的编码实现工作,调用WebServiceUtilties.ExecuteRESTService去消费S/4HANA的Restful API。

这段ABSL的完整代码:

https://github.com/i042416/KnowlegeRepository/blob/master/ABAP/C4_S4_replicate/triggerOutboundDelivery.absl

其中代码中出现的"JerryExternal", "JerryExternalService"这些,均是和Restful API的消费有关的模型的名称。

Jerry的另一位同事宋浩曾经写过一篇文章:SAP S4CRM 1811 服务订单API介绍,里面提到了S4CRM基于Netweaver技术架构的Service Integration场景里必需的三大模型:

  • Communication Arrangment
  • Communication System
  • Communication Scenario

因为C4C后台也基于Netweaver,所以为了消费S/4HANA的Restful API,我们同样需要在C4C里创建这三大模型。

简单地说,Communication System负责维护Service Provider所在的系统,在我们这个例子里是S/4HANA系统:

Communication Scenario负责维护Restful Service endpoint,而Communication Arrangement将两者关联起来。

关于这三个模型的详细创建步骤,请参考Jerry的博客:

Use Restful Service to consume S4 functionality in SAP Cloud for Customer

https://blogs.sap.com/2018/12/06/use-restful-service-to-consume-s4-functionality-in-sap-cloud-for-customer/

最后实现的效果是:点击按钮之前,存放S/4HANA生成的交货单ID的字段是空的:

点了按钮在S/4HANA生成交货单之后,其ID通过S/4HANA Restful API的返回结果存储在C4C销售订单BO的扩展字段上,并显示在UI抬头区域:

还是通过这个视频查看运行时的效果。

对于这种同步解决方案有任何意见,欢迎留言。感谢阅读。

更多阅读

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

原文地址:https://www.cnblogs.com/sap-jerry/p/10114024.html

时间: 2024-10-10 13:29:53

一些SAP Partners能够通过二次开发实现打通C/4HANA和S/4HANA的方法介绍的相关文章

个别二次开发电脑无法保存功能里面代码的解决方法

度量快速开发-平台在二次开发过程中,有极个别电脑上的开发客户端在二次开发的时候,书写的功能和事件中的代码,保存显示成功了的,但是重新打开后又没有. 排查方法:1.请检查客户端下面的autoupdate.exe,查看是否客户端是最新的,有没有升级文件未更新.2.如果是很久之前的客户端,中途升级多次后,突然出现,请检查客户端里面是否有升级异常的temp文件,有则删除.3.重新启动客户端,使用测试.4.客户端打开的时候,请使用管理员权限打开.5.卸载客户端,重新下载新客户端使用.6.检查电脑是否中毒,

还在用ABAP进行SAP产品的二次开发?来了解下这种全新的二次开发理念吧

Jerry从2018年底至今,已经写了一系列关于SAP Kyma的文章,您可以移步到本文末尾获得这些文章的列表.Kyma是SAP开源的一个基于Kubernetes的云原生应用开发平台,能够允许SAP的partners以简捷而现代的方式,对SAP的云解决方案和传统On Premises产品进行连接,集成和扩展.所谓"现代",即partners在进行二次开发时,可以充分利用近些年来企业级开发领域不断涌现出的新技术,比如Serverless计算,微服务架构等等. Kyma是完全开源和免费的,

易扩展二次开发的web快速开发平台

我们先来看看web快速开发平台的发展 从编程之初,便免不了和方法,类,接口之类的东西打交道.久而久之,自然会对此进行总结,由此而产生了开发平台.而今中国的程序员之中,有很大一部分都是编一些企业MIS.政府MIS之类的程序.其主要工作就是对数据进行一下增删改查的操作,对MIS系统做一些基础的管理而已.随着互联网的流行,自然又要求以互联网为基础,把这些都网络化,以实现网络资源共享,而不是传统的单机模式.诸如用友.金蝶等都有自己的开发构件库,还有SAP的ABAP开发平台等等.但是ABAP开发平台太复杂

微控工具xp模块-开发版[微信(wechat)二次开发模块]

http://repo.xposed.info/module/com.easy.wtool 微控工具xp模块-开发版[微信(wechat)二次开发模块] 基于xposed框架的微信二次开发模块,方便开发者用微信做一些扩展功能(如微信群发.多群直播等...) 目前支持功能: 发文本消息 发图片消息 发语音消息 发视频消息 获取微信好友列表 群列表 支持群发消息 支持消息转发(目前支持文本.图片.语音.视频.图文消息转发) 群管理功能(建群.加人.踢人.设置公告.改群名.退群.解散群) [注:本模块

浅析PHP的开源产品二次开发的基本要求

浅析PHP的开源产品二次开发的基本要求 第一, 基本要求:HTML(必须要非常熟悉),PHP(能看懂代码,能写一些小系统,如:留言板,小型CMS),Mysql(至少会一种数据库),Javascript(能看懂,能改现成的一些代码),Div+Css(能进行界面的调整,明白CSS是怎么使用的) 第二, 熟悉开源产品的使用,比如 Dedecms,你要知道怎么登录,怎么新建栏目,怎么添加文章,模板标签的使用方法,模型的概念和使用方法等等一些功能 第三, 要熟悉这个开源产品的数据库结构,还要理解里面核心文

通达OA 二次开发培训第二讲

本次是通达OA二次开发第二讲,主要介绍了如何在通达OA中进行程序开发,并将开发程序挂接到OA系统中.

xshell远程终端操作Ubuntu server安装LAMP环境之最详细笔记之二PHP开发环境配置

前言: 昨天学会了安装server,今天试着通过远程终端xshell来安装LAMP,搭配一下开发环境,也有集成环境可以一键安装使用,还是瞎折腾一下,手动一步一步搭建一下这个开发环境. 接上一篇:ubuntu server 14.04 LTS下搭建LAMP环境之最详细笔记之一U盘安装双系统本文原创博客地址:http://www.cnblogs.com/unofficial官网地址:www.pushself.com) 准备: 在windows系统上首先需要安装xhsell,具体下载地址可以搜一下,安

微信公众平台搭建与开发(二)开发模式的搭建和关键词回复

在第一部分介绍了编辑模式,但是编辑模式有较大局限性,下面主要开始介绍开发模式,这一部门先简单介绍下开发模式的环境搭建和关键词回复. 开发模式首先要有一个虚拟主机,本人使用的是新浪开发者平台的虚拟主机,使用云豆计算流量,若成为新浪开发者用户基本上就可以免费使用了,本人注册用户所赠送的云豆不知道能用多久.当然国内比较大还有就是百度开发者平台,注册后发现部署还没有新浪的方便,并且在BAE3.0以后好像也是要收费的.有兴趣的朋友可以研究下google的开发者平台,不知道是否要收费. 在注册新浪开发者平台

结合Django+celery二次开发定时周期任务

需求: 前端时间由于开发新上线一大批系统,上完之后没有配套的报表系统.监控,于是乎开发.测试.产品.运营.业务部.财务等等各个部门就跟那饥渴的饿狼一样需要 各种各样的系统数据满足他们.刚开始一天一个还能满足他们,优化脚本之后只要开发提供查询数据的SQL.收件人.执行时间等等参数就可以几分钟写完一个定时任务脚本 ,到后面不知道是不是吃药了一天三四个定时任务,不到半个月手里一下就20多个定时任务了,渐渐感到力不从心了,而且天天还要给他们修改定时任务的SQL.收件人.执 行时间等等,天天写定时任务脚本