前面五个章节,我们学习了CodeWave的页面布局,数据模型的构建以及使用,逻辑功能的实现等,通过前面章节的学习,我们基本上可以独立构建简单的业务逻辑了。但是对于一些负责的业务逻辑,单纯的使用前端页面是无法处理的,只能借助后端服务来处理业务。幸运的是,CodeWave也为我们提供了这样的能力,从本节开始,我们将学习扩展开发能力,用于处理我们的复杂业务。
在使用CodeWave进行低代码应用开发时,80%的常规场景可以直接拖拽搭建,而20%的定制化需求往往呈现低频、零散又无法绕行的长尾特征,对于此类需求我们开放了强大且灵活的扩展机制,让专业开发者可以通过传统编程方式实现,并纳入到低代码IT资产中进行沉淀,提供给广大低代码开发者使用。前端和服务端的传统开发技术栈不同,我们这里只介绍服务端扩展开发:目前有两种方式:
服务端扩展依赖库的开发步骤如下:
(1)创建maven工程。(2)添加依赖jar包。(3)添加maven插件。(4)配置pom基础信息。(5)功能开发。(6)生成zip包。
创建maven项目,确保maven使用3.0以上版本,JDK使用1.8。
jar包下载:nasl-metadata-collector-0.7.0.jar, 此jar包可以放在maven仓库上也可以放在本地工程中进行引用。这里使用本地导入jar包的方式。
扩展依赖库maven插件,用于编译后进行打包,会生成library-<libraryName>-<version>.zip
格式的压缩包,该压缩包便是最终上传至平台的依赖库包。压缩包中会包括当前依赖库的描述文件和所有的依赖jar包,在上传到平台时,会自动将所有的依赖项一并进行上传以保证依赖库的可用性。一般情况下使用了本插件后,不需要再使用spring或maven的打包插件。
mvn install:install-file -Dfile="nasl-metadata-maven-plugin-1.3.0.jar" -DpomFile="pom.xml"
也可使用下载的文件中提供的安装脚本。
<plugin>
<groupId>com.netease.lowcode</groupId>
<artifactId>nasl-metadata-maven-plugin</artifactId>
<version>1.3.0</version>
<executions>
<execution>
<goals>
<goal>archive</goal>
</goals>
</execution>
</executions>
</plugin>
会在执行打包时,生成一个library-<libraryName>-<version>.zip
格式压缩文件。
依赖库的基础信息(标识、名称、版本号、描述、适用IDE版本)依赖于maven工程中的pom.xml文件,maven工程中必须要存在groupId、artifactId、version字段。对于基础信息的收集会读取工程根路径中的pom.xml,如果为父子工程,则对子工程的打包会读取子工程下的pom.xml文件。
在pom.xml的<properties>
标签中添加<nasl.ide.version>
用于设置IDE最低版本。应用不能引入大于此版本的依赖库,例如应用的IDE版本为2.20,只能引入<nasl.ide.version>
<=2.20的依赖库。<nasl.ide.version>
标签使用示例:
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<nasl.ide.version>2.22</nasl.ide.version>
</properties>
扩展依赖库的标识,由pom.xml文件中的artifactId
字段决定。如果定义的artifactId
包含-则会自动转换为_。pom.xml配置示例:
扩展依赖库的版本获取的是pom.xml文件中的version
字段。版本号支持格式为x.y.z,如果定义的version
包含-SNAPSHOT
则会编译失败。pom.xml配置示例:
标题通过解析pom.xml中的name
标签来生成,此标签为可选项,如果未声明name
标签,则默认为artifactId
标签对应的值。pom.xml配置示例:
描述是通过解析pom.xml中的description
标签来生成,此标签为可选项,如果未声明description
标签,则默认扩展依赖库描述为空字符串。pom.xml配置示例:
项目中使用的NASL注解将被引入的jar包识别,将依赖库与平台融合,注解的功能如下:
使用注解可以将方法声明为Logic,即平台的逻辑,声明Logic有以下要求:
@NaslLogic
注解。非静态方法需要在类上添加Spring中的@Component
(或@Service
、@Configuration
)注解。示例代码如下:
第二步:方法修改为非static,在类名上加@Component注解,在springIOC中为当前类创建一个实例化的bean。
使用@NaslStructure
注解可以将类声明为Structure,即平台的数据结构,定义数据结构有以下要求:
在类的成员变量上添加@NaslConfiguration
注解即声明为Configuration,可以设置参数在不同环境下的默认值,如果未指定的话则默认为空字符串。
代码编写完毕后,使用maven的clean和package,将在项目的target文件夹下生成依赖库zip压缩包。
在平台的资产中心-依赖库界面上传该压缩包。
(1)依赖库成功上传至资产中心后,点击IDE右上方“更多”按钮,点击弹出框中的“依赖库管理”。
(2)在弹窗中点击左下角“导入依赖库”按钮。
(3)在导入依赖库弹窗内选择需要的依赖库,点击“引入”按钮即可。
导入依赖库后在服务端逻辑下可查看并调用新增的依赖库逻辑。
Java扩展逻辑是面向Java专业开发者提供的一种扩展方式,即:可以在低代码IDE中编写Java代码。和扩展依赖库相比,它的优势是:可以将Java代码同低代码编程内容一起托管,而扩展依赖库则存在Java代码管理分散的问题,后续迭代需要找到当时开发的源码。而它也存在较明显的劣势,如:开发Java扩展逻辑时,输入参数、输出参数需要限定为CodeWave平台能够识别的数据类型,在引入三方jar包方面,操作也是比较麻烦,同时没有Java语法校验、不支持在线运行调试,开发者使用成本还是比较高的。
本节我们不对此进行展开说明,需要读者自行学习。
环境准备:平台3.3版本、Java8、Maven3,代码编辑器为IDEA。
案例学习:使用Java制作发送邮件的扩展依赖库逻辑,上传至平台在应用中调用依赖库逻辑发送邮件,逻辑的输入参数为邮件标题、邮件正文内容、收件人邮箱。
前提条件:已安装Java8、Maven。
前提条件:已下载jar包(nasl-metadata-collector),jar包的下载及引入方式请参考服务端依赖库开发快速入门下的引入nasl-metadata-collecter的jar包。本案例使用maven仓库引用,dependency
配置如下图所示。
前提条件:已下载并安装扩展依赖库Maven插件,插件的下载与安装请参考服务端依赖库开发快速入门-引入依赖库maven插件。maven插件用于生成最终的zip压缩包,plugin
配置如下图所示。
依赖库的信息包含:标识、版本号、名称、描述,在pom文件中进行配置,具体请参考服务端依赖库开发快速入门下的声明依赖库基础信息。本案例的配置如下:
本案例调用hutool工具包发送邮件,maven依赖如下:
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.16</version>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
创建包和类,类中创建public static方法,方法中编写用于发送邮件的代码,方法使用@NaslLogic注解,声明该方法是一个逻辑。方法的入参分别为收件人邮箱地址、邮件标题、邮件正文内容,方法的返回值类型为Boolean代表邮件是否发送成功。本案例的发件人邮箱信息写在方法体中,可根据实际需求添加方法参数从而动态传参。
使用maven的clean后再使用package打包。(需要已安装扩展依赖库Maven插件,如未安装请参照服务端依赖库开发快速入门下的引入依赖库maven插件)
打包成功后,项目target文件夹下可以看到library–.zip格式压缩文件。
成功生成zip压缩包后,进入平台地址,点击资产中心-依赖库,点击“手动上传”按钮,在弹窗中上传压缩包后将自动展示依赖库信息。可手动选择库分类,修改描述,点击“发布”即可完成扩展依赖库的上传。
进入平台IDE,点击右上角“更多”,点击“依赖库管理”。
在弹窗中点击“导入依赖库”
可使用搜索框搜索上传的依赖库,选择依赖库后点击引入。
成功引入后在依赖库管理界面中可以看到新引入的扩展依赖库。
制作发送邮件的页面。
为按钮添加点击事件,事件中使用调用逻辑组件,在服务端逻辑下可以看到依赖库逻辑,选择发送邮件逻辑。
将表单项绑定的变量作为发送邮件逻辑的参数,使用布尔类型变量接收返回结果。
效果预览:
本节我们学习了CodeWave的扩展开发功能,通过本节的学习,我们已经对扩展开发功能有一个大致的认识。我们首先学习了依赖库开发的概念,然后介绍了依赖库开发Jar包的构建,Jar包配置,Jar包业务开发,Jar包打包,Jar包部署以及Jar使用,最后通过案例学习对本节内容进行了串烧,上面是我们本节的全部内容,希望对同学们有所帮助。
**文末彩蛋:**作者一名热爱人工智能的专栏作者,致力于分享人工智能领域的最新知识、技术和趋势。这里,你将能够了解到人工智能在各个领域的应用和创新,探讨人工智能对未来社会的影响,以及探索人工智能背后的科学原理和技术实现。欢迎大家点赞,评论,收藏,让我们一起探索人工智能的奥秘,共同见证科技的进步!