相比于从零开始构建全套信息化零碎,基于成熟的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数据库的读取和写入操作,而这所有,无需把握任何一门编程语言。业余程序员借助平台的编程接口扩大平台能力,非专业程序员通过应用这些能力,可视化实现零碎开发,这种"混合模式"正在成为低代码开发的支流。