共计 3783 个字符,预计需要花费 10 分钟才能阅读完成。
相比于从零开始构建全套信息化零碎,基于成熟的 ERP 等行业软件做二次开发是更多中大型企业应答个性化软件需要的首选计划。如何在二开模块中,牢靠地对成品软件的数据库进行读写操作,以满足单据主动创立、元数据主动同步等系统集成要求,是摆在开发者背后的难题。明天,咱们基于活字格低代码平台的技术支持工作中较为常见 SAP HANA 为例,为您介绍几种典型的路线。
计划 1:通过 ODBC 直连 HANA,操作原始数据
SAP HANA 的客户端程序中提供了 ODBC 的数据源,这就使得开发团队能够间接通过 ODBC 连贯 HANA 数据库,并通过 SQL 语句对数据库中的原始数据进行读写操作。
(通过 ODBC 操作 HANA)
首先,咱们须要在开发环境、测试环境和生产环境的服务器上,配置 SAP 提供的 ODBC 数据源。在装置有 SAP Client(举荐 x64)之后,关上零碎的 odbc 数据源管理程序(留神辨别 64 为和 32 位,须要和 SAP Client 保持一致)。在 ” 零碎 DSN” 选项卡中点击 ” 增加 ”,抉择 HDBODBC,之后依照界面提醒输出数据源的名称,如 ”HANA- 测试库 ”、服务器 IP 地址、用户名和明码就能够了。
(创立到 HANA 的 ODBC 数据源)
配置实现后,咱们就能够像操作其余数据库一样,对 SAP HANA 的数据进行读写了。回到活字格外面,咱们应用 ” 连贯到外联表 ” 性能,引入 HANA 中须要操作的所有数据表。之后就能够用拖拽的形式实现数据绑定,或者在服务端拼接和执行 SQL 语句了。
(在活字格低代码平台中引入 ODBC 数据源)
如果仅仅是读取元数据或者一些简略的单据,这种计划的确是一个简略的方法。然而,SAP 的数据表结构复杂,且不足无效的数据库脚本跟踪能力,咱们很难确定一个单据创立过程须要操作哪几张表的哪些字段。所以,在波及到略微简单一点的利用场景时,通过 ODBC 间接操作原始数据的做法的危险较高。
(纯代码,通过 ODBC 操作 HANA 的数据表)
基于多年的技术支持教训,咱们通常不会举荐客户采纳这个计划。
计划 2:调用 NetWeaver API,操作业务对象
SAP 显然也分明开发者直连 HANA,操作原始数据带来的可靠性危险。所以,SAP 推出了 NetWeaver 集成平台,给开发者提供了一个原厂级二开解决方案,” 尽量 ” 确保写入的数据不会对 SAP 零碎运行造成威逼。然而,这个平台的开发成本仍然不如人意,以至于大多数开发者在二开我的项目之初就放弃了这个计划。不过,NetWeaver 中对数据表中原始数据的操作封装成对业务对象的操作,并退出了一些必要的校验逻辑,这一点对于二开来说还是十分有意义的。更重要的是,这些封装的接口是凋谢的,即使咱们采纳了其余的二开计划,仍然能够通过 RFC 协定,调用 NetWeaver 提供的 HANA 操作能力,从而防止间接读写原始数据带来的危险。
引入 NetWeaver 后,二开模块能够不再间接操作 HANA 数据库,而是通过位于二开服务器上的 RFC 桥(如果对可维护性要求不高,也可间接集成到二开模块中)和位于 SAP 集群中的 NetWeaver 来实现。二开模块通过 HTTP 等协定调用 RFC 桥,RFC 桥则通过 RFC 协定转调 NetWeaver,NetWeaver 则负责在 HANA 上间接对应的 SQL 语句。
之所以咱们将 RFC 调用局部形象成一个专门的 RFC 桥模块,次要是思考到这部分采纳了一个第三方组件库(SAP 原厂的.NET SDK 口碑不佳),将其与二开模块进行隔离,可无效升高保护危险。因为客户采纳的是低代码的开发方式,这个 RFC 桥的实现形式为基于活字格服务端编程接口开发的自定义 WebAPI。对于纯代码开发者来说,RFC 桥通常是一个 ASP.NET MVC 或 Java SpringBoot 的 Web 服务。在实现逻辑和架构原理上,低代码与纯代码大同小异,都须要通过写代码的形式实现。
(通过 RFC + NetWeaver 操作 HANA)
步骤一:应用 C# 开发调用 NetWeaver 的 RFC 桥
在这一步中,咱们须要应用到 Visual Studio(截屏是 VS2021)、活字格服务端编程接口(截屏是活字格 V7.0 Update1)、SAP NetWeaver RFC SDK(截屏是 7.5)和开源我的项目 SapNwRfc(https://github.com/huysentruitw/SapNwRfc)。其中 SAP 的 SDK 须要客户应用 SAP 账号,从 SAP 官网下载。
首先,咱们在 VS2021 中创立.NET 4.7.2 的类库工程,援用 RFC SDK 中 lib 文件夹的 sapnwrfc.dll;而后通过 nuget 查找并装置 SapNwRfc 包和 Microsoft.AspNetCore.Http.Abstractions 包(活字格服务端编程接口须要依赖这个包);最初援用活字格服务器程序装置目录中的 GrapeCity.Forguncy.ServerApi.dll。为了确保 RFC SDK 的失常运行,简化部署操作,咱们更倡议将 RFC SDK 的文件间接拷贝到系统盘下的某个目录,并且在零碎的 PATH 变量中追加这个目录上面的 lib 文件夹,以确保运行时能够精确找到所援用的 sapnwrfc.dll。
(Nuget 中的 SapNwRfc 包)
而后,咱们须要依据 SAP 的文档阐明,创立 RFC 的传入和传出参数所对应的类。SAP 为每一个 NetWeaver 接口筹备一个 Excel 文件,记录了办法名,传入参数和传出参数的类型和构造。咱们只须要找到所需调用的那个接口对应的 Excel 文件,依据文档要求创立入参和出参对应的 class 即可。须要留神的是,属性的名称、SapName 标签的值须要和文档中的参数名严格保持一致。以创立供应商为例,咱们须要创立传入参数类:CreateVendorParameters 和传出参数类:createVendorParametersObj。
(NetWeaver 中创立供应商的接口所对应的参数构造)
而后,咱们在工程中创立 WebAPI,一个继承自 ForguncyApi 的类 GetSAPInfo,而后创立 POST 申请的响应办法 CallRFCFunction(办法名和类名组成了 URL 的 Path 局部)。在代码中,咱们从申请中读取连贯字符串、须要应用的办法和参数,调用 SapConnection 类的对应办法进行解决,最初把后果序列化后返回给该 WebAPI 的调用者。和属性名称一样,调用 SapConnection 时传入的办法名也须要和文档中的文字严格保持一致,如创立供应商的办法名为 ZLIFNR\_CREATE。
(RFC 桥的 WebAPI 实现)
依据既往教训,为了升高调用 RFC 桥的开发者的学习门槛,让他们也能够参照 SAP 提供的文档间接进行操作,咱们举荐将所有用到的接口统合到一个 WebAPI 中,在代码中通过 SAP 的办法名进行 switch 分支。
如需应用这些示例代码,能够从码云获取:https://gitee.com/GrapeCity/lowcode\_extention\_demo\_hana\_via\_sap\_rfc
步骤二:在活字格中调用 RFC 桥
应用活字格服务端编程接口开发出的 WebAPI 与纯代码开发出的 WebAPI 的应用办法完全一致。在应用活字格开发业务零碎的时候,都能够通过 ” 发送 HTTP 申请 ” 命令来调用。
首先,开发和测试的环境下,咱们通常会连贯不同的 SAP 数据库,所以,咱们须要将连贯 NetWeaver 所需的必要信息存储到数据库中,随程序一起公布,而不是写死在代码或全局配置文件中。
(存储在数据库中的 NetWeaver 连贯信息)
在须要操作 SAP 的数据时,咱们须要先应用 ” 设置变量命令 ”,从数据库中读取以后环境所应用的 HANA 数据库的参数,拼接成连贯字符串;而后应用 ” 发送 HTTP 申请命令 ”,通过调用 RFC 桥的 WebAPI。
依照步骤一中 RFC 桥的实现,其 URL 地址是 customapi/{类名}/{办法名}。咱们还须要在 HEAD 中设置连贯字符串和办法名(来自 SAP 提供的 Excel 文档,如 ZLIFNR\_CREATE)。
(配置 NetWeaver 的连贯字符串和办法名)
而具体的申请参数则须要在 BODY 中进行设置,将二开零碎的业务数据作为参数传递给 HANA,执行对应的数据操作,最终达到系统集成的成果,如这里举例的创立供应商档案。
(配置传递给 NetWeaver 的业务数据)
上面是咱们帮忙客户进行技术评估时,疾速构建的活字格与 SAP NetWeaver 集成的 Demo。如需应用这个工程,能够从码云获取:https://gitee.com/GrapeCity/lowcode\_demo\_hana\_via\_sap\_rfc
(应用活字格集成 SAP HANA 的成果)
探讨
为了帮忙开发者做二次开发,SAP 和用友等支流厂商大多提供了直连数据库和封装业务接口两种开发模式。在纯代码开发方式下,两种模式最大的差别在于前者性能下限更高,后者可靠性更强。
进入低代码时代后,封装业务接口的模式体现出了更强的竞争劣势。比方明天的例子中,在 RFC 桥的帮忙下,业务利用的开发者能通过可视化配置,轻松实现对 HANA 数据库的读取和写入操作,而这所有,无需把握任何一门编程语言。业余程序员借助平台的编程接口扩大平台能力,非专业程序员通过应用这些能力,可视化实现零碎开发,这种 ” 混合模式 ” 正在成为低代码开发的支流。