随着云原生技术的发展,越来越多的软件厂商走上了“云化”的道路。其中,以ERP为代表的的企业软件因为普遍存在定制化需求,SaaS版的阻力更大一些。如何为SaaS版ERP软件做二开,成了摆在厂商、代理商和集成商面前的难题。本文将以使用活字格企业级低代码开发平台对接“企企管理云”为例,介绍低代码技术在SaaS版ERP二开领域的应用。

(SaaS ERP,图片来自网络)

使用低代码为私有化部署的ERP做二开

对于私有化部署的ERP,目前最高效的二开方案就是采用可对接该ERP数据库的低代码开发平台,采用低代码的方式构建一个“外挂”的功能模块,该模块直接读写ERP的数据,可以补全成品ERP软件不具备的功能,或者替换软件中与企业实际需求不符的功能。

以国内用户群体最大的私有化部署ERP——用友U8+为例,用友和葡萄城联合推出了活字格客开工具,为用友商业伙伴和企业信息化部门提供了更高效的低代码二开解决方案。作为用友U8+生态圈成员,活字格客开工具可以连接ERP的Microsoft SQL Server,通过对数据表的操作完成数据查询,单据创建、修改等功能。与传统的UAP开发相比,活字格具备全面的可视化开发能力,开发者无需写代码,用拖拉拽的方式即可构建Web页面、APP页面或嵌入CS门户的页面;开发相关的业务逻辑,与用友数据库进行交互。项目实践表明,相比于传统的编码开发,使用活字格客开工具能将嵌入CS门户或者包含移动端APP的项目交付周期缩短到1/4,成本降幅超过70%。

(用友U8生态圈成员:活字格客开工具)

SaaS模式ERP二开的技术挑战

与私有化部署不同,部署在云服务上的SaaS版ERP软件通常不会提供数据库连接能力,而是将常用的扩展能力,如财务凭证生单等操作封装成若干Web API,提供给开发者使用。相比于直观的数据库接口,这些API的接口定义通常更复杂。厂商通常会提供一些配套的SDK,简化编码开发的工作。但是,对于低代码开发者来说,这些SDK显然无法直接使用。

(金蝶云星空的SDK)

此外,为了保护企业核心数据,这些Web API的安全性要求很高,一般会在常见的SSL、OAuth2基础上采用比较复杂的认证手段。比如新一代ERP软件的代表产品——企企管理云就采用了亚马逊的安全方案,API部分用AWS Signature Version 4(AWS V4)来确保数据不会被恶意拦截和篡改。

(AWS V4签名流程)

这些技术上的限制,是否会导致低代码开发无法做SaaS版ERP的二开项目?答案是否定的!具有更高开发性的企业级低代码开发平台依然可以胜任这种类型的项目开发。

如何用活字格集成企企云API

作为一款企业级低代码开发平台,活字格具有很强的开放性,不单提供了可视化的服务端Web API调用能力,还支持开发者通过编码的方式进行扩展,轻松集成各类Web API。近期,浙江某企企云的代理商,使用活字格为企企云做客户化开发,从对接企企云API的过程中,我们可以清晰地看到低代码与SaaS版ERP对接的技术路径。

在实际项目中,使用活字格与企企云对接需要3个步骤。这些操作需要用到活字格的部分高级功能,如果您在自行测试过程中遇到困难,欢迎到葡萄城技术社区中活字格的求助中心版块或官方QQ群(836196143)寻求帮助。

通过安全秘钥获取OpenID

企企云的官方文档上对于获取OpenID的描述比较简略,事实上,这个步骤的核心是我们需要开发一个Web服务,用来接收企企云返回的OpenID等参数。

首先,您需要在运行二开应用的数据库(如MySQL,MS SQL Server等)上创建一个名为Config的数据表,用来存储后续调用所需的accessKeyId,secretAccessKey,openid,service,region等信息,并且添加一行ID为1,service是execute-api,region是cn-north-1(如果您的账户不在cn-north-1服务器,可咨询企企云的技术支持来查询)的记录。

接着,您可以使用活字格创建一个叫77hub的应用(当然,您也可以用其他的名字)。该应用中,您需要连接刚才创建的Config数据表,然后创建一个服务端命令(即Web API),用来接收企企云的回调。这个服务端命令的逻辑非常简单,从URL参数中读取openid和requestid两个参数。如果requestid是我们预定的值(比如HUOZIGE,后面填写URL时会用到这个字符串),就将其中的openid更新到Config表中。

(创建服务端命令)

(定义两个参数)

(将openid参数的值更新到Config数据表中)

最后,您需要把这个应用发布到位于公网的服务器(比如阿里云ECS主机),就可以通过下面的URL访问了:https://xxxx/77hub/ServerCommand/getOpenID,其中xxxx是您部署该应用的主机名或IP地址。

准备就绪后,您可以按照企企文档的说明,在浏览器中输入下面的URL地址,按照界面提示完成OpenID的获取。其中,KKKK是企企云给您分配的accessKey,xxxx是您将刚才开发的应用发布到外网时,服务器的主机名或IP。

https://openapi.77hub.com/auth/openid?requestId=HUOZIGE&accessKeyId=KKKK&redirectUrl=<https://xxxx/77hub/ServerCommand/getOpenID>

操作完成后,您在数据库上Config表就能看到可用的openid了。

(存储到数据库中的openid等信息)

实现AWS V4签名

AWS V4的签名机制很复杂,无法直接通过活字格设计器提供的功能来进行配置。此时,我们就必须要用到低代码提供的编程接口能力了。考虑到企企云是一个有着较大用户群体的SaaS版ERP,活字格技术支持团队为您开发好了一套“桥接”扩展程序集。这个程序集的主要工作是对企企云的接口进行封装,在其中完整地实现了AWS V4签名。

(系统架构图,执行签名操作的桥接服务)

您可以在葡萄城技术社区中搜索活字格企企云,获取最新版的企企云集成DLL文件;然后,在活字格设计器上,将其添加为自定义Web API。这样,活字格就具备了通过AWS V4签名机制调用企企云接口的能力。事实上,编程扩展能力是低代码相比于无代码的标志性功能,也是其能广泛应用于成品软件二次开发领域的技术保障。

(添加企企云自定义Web API)

调用企企云接口

准备就绪后,您就可以使用活字格的“发送HTTP请求”服务端命令,通过上一步中引入的“桥接”服务调用企企云服务了。为了帮助您完整理解下面的演示示例,我们建议您先学习活字格官方的帮助文档,了解“发送HTTP请求”命令和“JSON反序列化”命令。如果您参加过新手训练营,这一过程大约只需要20分钟。

如果您需要调用的是获取数据的GET请求,可以直接利用活字格的“发送HTTP请求”命令调用桥接服务。但是,如果您需要调用的是POST,则需要按照桥接服务的要求,重新封装想要发送给企企云的请求体数据。从文档中我们可以看到,桥接服务将会读取请求体中的postjson→json对象,并将其加签名后发给企企云服务。所以,以list接口的post请求为例,我们需要将企企云帮助文档中的参数封装到postjson→json下,才能发给桥接服务进行后续处理。可以简单理解为将企企云帮助文档的第一级,用作“发送HTTP请求”命令参数的第三集,上一级为json,再上一级为postjson。

(企企云的文档:list路径的POST请求)

(调用桥接服务时的封装方式)

桥接服务在接收到来自企企云服务器的数据后,会将结果写入返回信息的json属性。您可以获取这个属性,通过“JSON反序列化”命令将其解析为对象,继续操作其中的列表和属性。

(通过JSON反序列化命令循环处理返回的列表)

组建混合型团队,为二开提效

本文中,我们通过使用活字格对接企企云实现外挂式客户化开发的例子,为您展示了使用低代码技术为SaaS版ERP做二开的技术路线。从中我们不难发现,活字格企业级低代码开发平台出色的开放性和专业的功能设置,能帮助开发者从容应对AWS V4签名等技术挑战,集成现有成品软件。与此同时,覆盖软件全生命周期的可视化能力,大幅降低了增删改查等简单业务逻辑和前端页面交互的开发投入,全面体现出低代码开发技术在企业核心业务系统开发领域的价值所在。

(低代码技术降低软件开发成本的原理)

在实际的项目中,高价值企业级应用的开发团队通常由受过专业编程训练的程序员和普通IT技术人员(包含刚毕业的大学生)构成。低代码开发过程中,两种不同技术能力的开发者可以协同工作,不仅可以让程序员专注于高价值工作,同时还能降低整个团队的人员单价。

以本文中提到的团队为例,来自开发部门的专业程序员根据项目的实际需求,将需调用企企云OpenAPI的业务封装为服务端命令,大幅简化了JSON数据组织和反序列化的复杂度,使实施团队中不懂编码的同事也能利用这些服务端命令完成业务的编排和页面的交互与呈现。

(二次开发中各方的分工)

如果您对使用活字格为企企云等SaaS版ERP做开发感兴趣,或者想尝试向“混合型开发团队”转型,欢迎百度搜索“活字格”,访问官网,预约技术顾问咨询或免费下载试用。