[]
推荐阅读
技术决策者 | 项目经理 | 高级技术人员 | 初级技术人员 | 测试人员 |
---|---|---|---|---|
√ |
type=info
系统集成的目的在于避免新造数据孤岛,进而打通现有的数据孤岛。此外,充分利用现有软件的能力,降低开发成本也是系统集成的价值之一。
经过数十年的积累,企业软件已经走过了以会计电算化为代表的“从无到有”时代,进入整合发展的新时代。如何充分利用现有的软件的数据和能力,减少数据孤岛,提升数据质量和管理成熟度,是摆在低代码开发者面前的重大挑战。所以,系统集成在企业信息化建设中的地位与日俱增,是每个企业级应用开发者必须要关注的关键技术。
企业软件的系统集成通常分为四个层次:数据集成、API集成、用户认证集成和页面集成,逐层递进。这四层的主要关注点如下,您可以根据项目特点和客户需求,在项目的不同阶段提供对应的系统集成能力:
数据集成:确保系统数据互通,提升全公司信息化系统的数据实时性和准确性
API集成:从全公司层面提升系统的复用性,减少重复劳动,缩短交付周期,提升软件质量
用户认证集成:统一全公司的权限管理机制,确保数据安全
页面集成:打造无缝体验,降低用户培训成本。在一些媒体和厂商的语境中,页面集成和用户认证集成加在一起,也被称为“门户集成”
活字格为了支持这四个层面,提供了相关功能、插件,如果无法满足需求,还可以使用编程接口进行扩展开发。本章节重点介绍一些相关的机制和最佳实践。值得一提的是,系统集成工作的技术门槛较高,需要对企业的信息化架构、数据治理有一定的理解,还需要对被集成的系统有较深入的了解,部分场景下还需要具备特定语言的编程能力。这项工作通常有低代码开发团队内的“高级技术人员”负责,以确保开发效率。
数据集成是系统集成中最常见的模式,最终目标是使用活字格读取或写入第三方系统的数据。被集成的数据主要有两类:业务数据和主数据(含数据字典),前者需要支持读写,后者通常是只读。在选择数据集成的技术方案时,首先要考虑其业务场景对时延的要求。按照DAMA国际数据管理协会的定义,时延是指从源系统生成数据到目标系统可用该数据的时间差。不同的数据处理方法会导致不同程度的数据延迟。延迟可以从高到低通常可以分成三个等级:
推荐场景:主数据(如WMS系统中使用保存在ERP或MDM中的存货档案),字典数据,实时性要求低的、用作参考的业务数据(如WMS系统中出库单所引用的,保存在ERP中的订单)
要么根据数据使用者的人工请求,要么是按照周期自动触发的数据处理方式。以批处理模式移动的数据代表在给定时间点的全部数据,对时间点后的数据不会进行更新同步。批处理对于在短时间内处理大量数据非常有用,它倾向于数据仓库数据集成解决方案。为了实现快速处理和低延迟,一些数据集成解决方案使用变更数据捕获技术。变更数据捕获是一种通过增加过滤来减少传送宽带需求的方法,只包含在特定时间范围内更改过的数据。变更数据捕获监视数据集的更改(插入、更改、删除),然后将这些更改(增量)传送给使用这些数据的其他数据集、应用程序和组织。变更数据捕获可是基于数据的,也可基于日志。
在实际项目中,批处理通常是将主数据系统或参考单据(如需要建立勾稽关系的销售订单、采购单等)单向同步到当前开发的系统中使用,避免出现数据孤岛。
建立服务端数据缓存的最简单方法,是利用活字格内置的支持定时同步的【外联表副本】功能。该功能可以连接第三方系统或主数据系统数据库中的表,定期将其全量同步到活字格服务器的SQLite数据缓存中。在应用开发过程中,开发者可以像操作数据库中的表一样,读取到同步过来的数据。因为这种方案用到了SQLite数据库和全量更新,性能一般,推荐用于数据量不大(如数千行)的数据字典或主数据。
实际操作时有如下技巧,供参考:
在创建外联表副本时,仅业务所需的列,以减少数据传输的性能损失。除非必要,不推荐全选
在设计器中【表设计】里,根据业务需求设置合理的同步间隔时间(默认为1小时),不宜间隔过短
如果仅需要用到部分数据,如当前年度的数据,推荐在设计器中【表设计】里设置【查询条件】,以减少同步的数据量
该模式暂不支持集群部署
官方文档:创建外联表副本
对于数据量大的场景,推荐采用“变更数据捕获”技术方案,定时将增量数据同步到中间库或当前系统使用的数据库中,开发者通过读取同步后的数据表完成前后端开发。这里的中间库指的是被集成系统之外的另一台数据库,如果需要同步的数据量不大,推荐直接将业务数据库作为中间库使用,进一步降低部署复杂度的同时,还能通过建立数据查询视图、表关联等进一步提升开发效率。
中间库方案与本地缓存类似,只不过将活字格自动同步的SQLite数据库替换为主流ETL工具和数据库;而且同步过程可自由定制,足够灵活,能够做到更小的同步数据集,进一步降低数据同步的性能开销以及对被集成系统的性能压力。
实际操作层面,开发者通常采用ETL工具实现从被集成系统到中间库的同步。关于ETL增量同步的做法,请参考对应产品的技术文档。
实用教程:datax教程:将ERP系统的主数据同步到业务数据库
推荐场景:实时性要求高的、用作参考的业务数据
大多数未采用批量方式的数据集成解决方案都是使用准实时或事件驱动的方式。数据在特定的时间表内是以较小的集合进行处理,或者在事件发生时处理,如数据更新。与批处理相比,该方案具有更低的延迟,而且通常因为工作是随时间分布的,所以系统负载较低。事件驱动通常是异步的,不会阻塞被集成系统的继续执行,也不会在当前系统不可用时导致被集成系统不可用。
在实际项目中,该方案通常意味着需要对被集成系统进行改造,接入企业服务总线或Kafka等队列服务,成本和风险较高。在这里不做展开。
推荐场景:需要实时处理的告警数据(如EAM系统中接入来自安灯系统的设备故障数据)、需要写回的业务数据(如WMS系统中写回ERP订单数据中的出库单号)
采用该方案后,当前系统和被集成系统可视为一个整体。在具体实现上,可通过数据库的事务能力确保事务中的两个系统读写的数据同步更新,要么都成功,要么都没有成功。此方案中的时延可以简单理解为数据的写入时间,大多数场景下可以做到毫秒级。
在实际项目中,开发者可以使用活字格的【连接到外联表】功能,将需要集成的第三方系统数据库中的表引入工程,使用数据绑定、设置变量命令、数据操作表命令操作即可。如果对第三方系统的数据库读写压力不大,直连方案的“性价比”最高。实际操作时有如下技巧,供参考:
在数据集成的场景下,开发者需要在设计器中【表设计】里确保【允许活字格修改数据库或表结构】不被勾选,以免误操作影响被集成系统的正常运行
不推荐为跨数据库服务器的多个表(如一个来自第三方系统数据库的表和当前系统中使用的表)创建表关联,以减少没有必要的数据查询与传输
如果被集成的系统没有提供文档,或担心文档与实际不符,可利用数据库跟踪工具确认数据表和列的业务含义。详细教程:不了解成品软件的数据结构,如何用低代码做二开?
写入数据时,一定要根据被集成系统的要求,做好数据校验,避免对第三方系统的数据一致性造成损害,引起故障
在同一个解决方案中,我们可以同时采用一个或多个数据集成解决方案。开发者需要根据不同场景的实时性要求和其他技术因素,综合评估数据集成的方案。
时延与技术方案 | 实时同步(数据库直连) | 准实时(事件驱动) | 批处理 |
---|---|---|---|
对当前系统的性能影响 | 低 | 中 | 低 |
对被集成系统的性能影响 | 高 | 低 | 低 |
对被集成系统的功能/稳定性影响风险 | 中 | 高 | 低 |
开发的复杂度 | 低 | 高 | 中 |
如果被集成的软硬件系统提供了封装好的API,使用API做集成的效率更高,更安全。根据系统的应用场景不同,API集成有主动和被动两个模式。以线上商城的订单处理为例,该系统以被动模式提供给RPA调用,当商城后台有订单生成时,RPA调用该系统的WebAPI,即被动模式;经过自动和人工处理后,系统调用ERP系统自动生成对应的单据,即主动模式。
您可以使用活字格的【发送HTTP请求】命令,配合【JSON反序列化】命令、【创建数组对象】命令、【导入JSON到表格】命令、【导入JSON到单元格】命令等,调用第三方系统提供的WebAPI,并且将WebAPI返回的内容填充到页面中,或使用命令做后续处理。考虑到性能和安全,强烈推荐在服务端命令中调用第三方WebAPI,不要在前端命令中调用。
视频教程:全栈开发新体验 | 全方位演示低代码快速构建前后端应用(1小时08分开始)
如果被调用的第三方系统没有提供JSON格式的WebAPI(如采用SOAP或私有协议),您需要参考该系统提供的SDK或文档,用编码的方式将这些API封装成WebAPI后,再与活字格集成。
如使用CO的方式集成用友U8时,先用C#开发一个ASP.NET Core的站点,引用本地的CO SDK,将单据创建等操作接口封装为WebAPI,再使用上述方法与活字格集成。
扩展阅读:使用C#开发的WebAPI示例(ASP.NET Core)
如果客户有完善的中台服务,在使用活字格开发业务层应用时,推荐优先调用中台的服务,而不是从头开发。其中涉及到鉴权、白名单等安全机制,请参考中台的文档完成。
被动模式也被称为“推模式”,主要用于物联网或RPA集成的场景,用来代替低效的轮询,提升系统的整体效能。
活字格的服务端命令本质上就是供第三方调用的WebAPI。除了允许匿名访问的服务端命令,活字格内置了OAuth2认证方式。
在调用时,需要先获取Token,然后使用Token调用。按照被集成系统的要求设计创建服务端命令,配置参数和处理逻辑,然后将发布后的URL地址注册到被集成系统中即可。
视频教程:全栈开发新体验 | 全方位演示低代码快速构建前后端应用(1小时08分开始)
活字格官方提供了“WebSocket客户端命令”插件,可以注册侦听特定地址的消息,并对收到的消息进行处理。
在工业互联网领域,综合考虑时效性和性能压力,基于MQTT等消息协议来做数据监听和处理是常见的解决方案,部分不涉及硬件的企业服务也需要采取类似的方案来集成。
在这种技术方案中,活字格通常定位于消息的消费者,需要以客户端的形式订阅特定的主题(如MQTT中的Topic),在接收到消息推送时进行业务处理,如保存到数据库等。对于最常见的MQTT协议,可直接使用【MQTT客户端】插件。其他协议的话,需要定制开发对应的插件。
专题教程:使用活字格对接MQTT服务器
当使用活字格开发的前端在交互、动画或性能上无法满足需求时,推荐使用编码方式开发前端,调用使用活字格开发的后端WebAPI(服务端命令),即前端编码+后端低代码模式。此模式下,推荐启用OAuth2等认证方式,确保安全性。典型场景如下:
高并发的门户网站(如果有必要,甚至可以使用活字格做SSR后端渲染)
第三方设计和开发的小程序/H5
用户集成的目标是让最终用户可以避免重复的登录操作,通常与页面集成配合使用。
建议优先选择活字格官方提供的连接器,如果没有找到,再基于“第三方安全提供程序”接口完成开发
在第三方安全提供程序类上实现 ISupportSettings
接口,通过 public List<SecurityProviderSettings> Settings
属性,在管理控制台站点上提供用于输入数据库连接字符串以及白名单或黑名单的输入框,然后将其写入数据库或持久化到本地文件。
安全提供程序中的InMemoryCache
用户存储模式会在系统启动时做“全量同步”,除非用户数据量不大,否则建议谨慎使用
安全提供程序和单点登录的开发较为复杂,推荐您直接向官方技术支持寻求帮助:寻求帮助
将活字格开发的页面与第三方系统紧密连接在一起,可以为最终用户提供无缝的体验,应用场景包括但不限于传统的二开。
利用“HTML自定义集成”单元格插件,可以将第三方页面以iframe的形式嵌入活字格,因为浏览器的安全限制,集成的页面和被集成的页面需要都启用HTTPS或都禁用HTTPS
如需将活字格的页面与第三方的Web系统集成,如果可以的话,推荐采用弹出页面的形式,除非必要,不推荐采用iframe嵌入
如需将活字格的页面与第三方的Windows程序集成,需要确保程序使用的是较新的WebView2或其他基于Chromium浏览器内核的控件(活字格V8.0开始不再支持IE浏览器)
如需将活字格的页面与第三方的Android APP集成,需要在WebView上做以下设置,参考:HAC中配置WebView的代码
type=info
温馨提示
企业级低代码开发最佳实践是活字格官方面向进阶开发者推出的产品技术资源,旨在帮助对活字格基本功能有一定了解的开发者快速提升应用开发能力,保质保量做好企业级项目交付。如果您是初次接触活字格,这些内容可能会有些艰深难懂,这也是正常的。如果您有软件开发经验,推荐您学习《面向程序员的活字格入门课程》;否则,您也可以免费报名参加新手训练营直播课程或购买阅读《低代码开发实战:基于低代码平台构建企业级应用》(机械工业出版社),快速上手低代码开发。