共计 3288 个字符,预计需要花费 9 分钟才能阅读完成。
最近有敌人在微信上问我本文题目这个需要,如何在 SAP Cloud for Customer 里实现。正好我在 2018 年底加入的 SAP 和沈阳自动化研究所单干设计的一个工业 4.0 示范零碎 POC 中,已经用到了这个技术,本文就来说一说。
对于这个 POC 的详情,在 SAP 中国研究院官网公众号这篇文章里有具体叙述:
SAP 中国研究院 & 中科院沈阳自动化所重磅公布第三代自适应模块化智能生产解决方案
SAP 中国研究院和中科院沈阳自动化研究所(沈自所)联结打造了一套自适应模块化智能生产解决方案,作为单方单干的第三代工业 4.0 智能制作解决方案,其生产组织模式采纳世界领先的模块化生产概念,业务流程涵盖从个性化产品销售订单的创立到车间仓储和物料治理和生产执行与交付,在车间里传统的生产线被解耦为模块化生产单元,其机械构造、工业网络、生产工序能够依据产品设计的变动,现场设施状态,自适应实现重构。革新老本大大压缩,调整周期显著缩短。同时,实现了智能仓储零碎、智能生产零碎、智能机器人、智能 AGV 运输车辆等零碎的高度集成和高效运行,这也是 SAP 最新提出的「从设计到运维(D2O,From Design to Operate)」的工业互联网全业务流程中的重要环节。
上面这个 POC 视频,是过后的我的项目兼产品经理,我的研究院共事 Cai Carol 制作的。视频最结尾,展现的是从 SAP Cloud for Customer 里创立销售订单。SAP C4C 销售订单创立结束之后,点击订单明细页面的一个按钮,触发 S/4HANA 的交货单 (Outbound Delivery) 创立,进而触发接下来的制作流程的执行。
其中 SAP Cloud for Customer 局部的定制开发是由我实现的,外面就波及到了本文题目形容的场景,即 SAP Cloud for Customer 里间接调用 SAP S/4HANA 的 API. 整个定制开发局部均可在 C4C 的 Cloud Application Studio 里实现,这意味着 Partners 也能够实现相似场景的开发。
https://v.qq.com/x/page/e3236…
上面是具体的实现步骤。
(1) 首先在 S/4HANA 里开发一个 API,逻辑是接管从 SAP Cloud for Customer 传过来的 Sales Order ID,读出其蕴含的行我的项目,而后调用 SAP S/4HANA 的交货单创立函数,为这些行我的项目创立交货单。
用关键字 S/4HANA Outbound Delivery,一下子就搜寻到了对应的 BAPI 名称:BAPI_OUTB_DELIVERY_CREATE_SLS.
很快写好了一个 report:在第 21 行硬编码了一个 SAP Cloud for Customer 的销售订单 ID,测试后发现没什么问题,将这个报表的源代码拷贝到一个新的 ABAP Class 里,稍作批改,将硬编码去掉,替换成从 SAP Cloud for Customer 传过来的销售订单 ID 即可。
在 SAP S/4HANA 里新建一个 SICF 服务节点,其实现 Class 指定成刚刚建好的蕴含了调用 BAPI_OUTB_DELIVERY_CREATE_SLS 的 ABAP Class. 每个 ABAP SICF 节点会主动生成一个 url,从而将其节点调配的 SICF ABAP Class 的业务逻辑通过 HTTP 的形式裸露给外界。
对于 ABAP SICF 的更多介绍,请参考我之前的文章:从 ABAP Netweaver 的 SICF 到 SAP Kyma 的 Lambda Function.
咱们过后做 POC 的这台 S/4HANA 服务器,其 url 是能够间接被外网拜访到的,所以省去了应用 SAP Cloud Connector 将其裸露给外网这一步。对于惯例的 SAP ABAP On-Premises 平台上开发的 HTTP Service url,请参考我这篇文章将其裸露给公网应用:
应用 Java+SAP 云平台 +SAP Cloud Connector 调用 ABAP On-Premise 零碎里的函数
(2) 回到 SAP C4C,关上 Cloud Application Studio,对规范的 Sales Order BO 进行扩大,削减一个新的 Action.
精确的说,被扩大的 BO 名称应该为 CustomerQuote,因为依据 SAP C4C 帮忙文档介绍,Sales ORder 和 Sales Quote 共用同一个 BO 模型 CustomerQuote,通过模型字段 Type Code 的不同值来辨别。
对 CustomerQuote 进行扩大,创立一个新的 Action:triggerOutboundDelivery:
这个 Action 的实现逻辑当然就是调用前一步骤里创立好的,SAP S/4HANA 通过 SICF 裸露进去的 API.
在入手实现 Action 之前,咱们还须要在 SAP C4C 里创立一些生产 S/4HANA API 所须要的模型。
Cloud Application Studio 里新建一个 External Web Service Integration:
Web Service 名称取为 JerryExternal,类型为 REST. URL 字段,填充成 S/4HANA API 的 url.
这个 Web Service 模型的创立,会同时主动创立一个 Communication Scenario,名称为 JerryExternalService:
基于该 Communication Scenario 创立一个新的 Communication Arrangement:
通过上图邮件菜单,关上 Communication Arrangement 的保护 UI:
将拜访 S/4HANA API 所需的用户名和明码,保护到新建的 Communication Arrangement 里去:
最初,实现 CustomerQuote BO 扩大进去的 Action,在外面通过 C4C 规范的工具库函数 WebServiceUtilities.ExecuteRESTService,生产 S/4HANA API:
从上图 ABSL 实现代码,咱们也能领会到 SAP 引入 Communication Scenario & Arrangement 这些模型带来的益处:
Code Over Configuration is better than Code Over Code – 基于配置编程优于硬编码。
如果 SAP S/4HANA API url 或者用户名和明码发生变化,咱们只需批改 C4C 里 Communication Scenario 和 Arrangement 对应的配置即可,而无需从新编译 ABSL 代码自身。
最初,在 SAP C4C UI 上点击 Trigger Delivery 按钮后,触发咱们在 BO 上自定义的 action:
上图是 SAP C4C ABSL 代码的单步调试,点击 Continue 之后,设置在 SAP S/4HANA SICF 实现类里的 ABAP 断点触发,调试器里能看到 SAP C4C Sales Order ID 曾经胜利传递到 SAP S/4HANA 端了。
之前我曾经将 SAP C4C 端的销售订单,通过这篇文章 一些 SAP Partners 可能通过二次开发实现买通 SAP C/4HANA 和 S /4HANA 的场景分享 介绍的二次开发形式,同步到了 SAP S/4HANA 端,且两个零碎里销售订单的 ID 统一。因而,在 SAP S/4HANA 端,调用 S/4HANA 销售订单的读取 API,读到的是 SAP C4C 同步过去并存储到 S/4HANA 的销售订单数据。
本文介绍了 SAP C4C 如何通过定制开发,实现生产第三方零碎 API 的需要。这里的第三方零碎 API,能够是 SAP S/4HANA,SAP Business Technology Platform 或者其余任何零碎的 API,是一种比拟通用的二次开发形式,心愿对大家有所帮忙。
更多浏览
- 应用 Java+SAP 云平台 +SAP Cloud Connector 调用 ABAP On-Premise 零碎里的函数
- 从 ABAP Netweaver 的 SICF 到 SAP Kyma 的 Lambda Function
- SAP 云平台上的 ABAP 编程环境里如何生产第三方服务
- 一些 SAP Partners 可能通过二次开发实现买通 SAP C/4HANA 和 S /4HANA 的场景分享
更多 Jerry 的原创文章,尽在:” 汪子熙 ”: