步骤一、下载代码模版
登录魔笔。
在顶部菜单栏选择应用管理,在左上角搜索框中搜索目标应用。
在目标应用的卡片中单击进入设计器,进入魔笔应用设计器。
在左侧功能区单击image,选择后端逻辑流,进入逻辑流编辑面板。
在逻辑流编辑面板,单击自定义逻辑流操作右侧的编辑,打开编辑自定义逻辑流操作,下载最新代码模版bundle.zip。
image..png代码效果参考:https://www.xx-ph.com/sitemap.xml
解压bundle.zip,即可得到一个custom-action的Java工程。开发者可通过IDE(如idea/vs code)打开此工程。
此工程是一个多模块的项目,其中已经生成了custom-action-core模块,工程结构如下:
image
libs目录:存放了core模块所依赖的jar包,默认有三个jar包。
custom-action-api-1.0.0-SNAPSHOT-sources.jar:此jar包为custom-action-api模块的源码,在IDE中可以通过设置关联上源码信息。
custom-action-api-1.0.0-SNAPSHOT.jar:此jar包中包含了模块中每个后端逻辑流自定义操作的接口定义。对于模块中的每个后端逻辑流自定义操作,都会生成一个接口和一个实现类,接口存放在custom-action-api jar包中,而实现类则存在于custom-action-core模块中的src目录下。
image
mobi-app-flow-sdk-1.0.0.jar:此jar包为魔笔平台提供的SDK,内置了魔笔平台实体和结构体的相关操作,下文中将详细介绍。
src目录:该目录为正常Java工程中的目录。模块中的后端逻辑流自定义操作实现类将被放在com.aliyun.mobi.custom.action.core中。
说明
请勿更改com.aliyun.mobi.custom.action.core中的内容,否则可能导致上传的代码包无法被平台识别。
image
对于魔笔平台中的每个后端逻辑流自定义操作,都将生成一个Java实现类,类名为操作英文名称 + Action,如果开发者自行创建自定义操作的实现类时,请遵循此规则。其它非自定义操作的实现类,可以不用遵循此规则。在自定义操作的实现类中,重写的execute方法为自定义action的入口方法,开发者可以将逻辑编写在此方法中。
pom.xml
此文件为core模块中的Maven依赖管理相关文件,如需要增加Java项目依赖时,可将对应的pom依赖加入到此文件中。对于Java项目所需的依赖,只需在pom.xml中添加dependency即可,无需将jar包下载至libs目录中。
重要
请勿修改脚手架内除自定义操作实现目录外的文件,否则可能导致构建错误或失败。
步骤二、设置环境
魔笔平台提供的工程需要JDK11+及Maven3.5+环境,开发者需满足这两个环境要求才能进行代码编写。下载的模版工程可以通过idea/vs code等现代化IDE打开进行编辑。
image
说明
在使用idea进行编辑时,如遇到编辑器无法通过编译、terminal可以构建成功时,可以通过禁用kotlin插件或升级kotlin插件到1.8版本解决。
image
步骤三、代码编写
对于每个后端逻辑流自定义操作,都会在custom-action-core模块中生成一个实现类,每个自定义操作执行的入口方法都是实现类中重写的execute方法,开发者可根据自定义操作中的业务逻辑进行开发。
步骤四、输入输出
魔笔类型转化到Java代码有对应的映射关系,在Java代码中给实体或结构体属性赋值时,也应遵循对应的关系映射。例如,实体有一个属性为DATETIME类型,在设置其值的时候,应该赋予ZonedDateTime类型的变量。
魔笔类型
Java类型
INTEGER
Integer
LONG
Long
DECIMAL
Double
BOOLEAN
Boolean
CHAR、TEXT、ENUMERATION
String
DATETIME
ZonedDateTime
INTEGER
Integer
OBJECT
MobiObject
STRUCTURE
MobiStructure
FILE、IMAGE、AUDIO、VIDEO、DOCUMENT
-
说明
自定义逻辑流操作中不支持配置FILE、IMAGE、AUDIO、VIDEO、DOCUMENT类型的参数。
步骤五、 MobiContext
为了方便开发者操作实体和结构体,每个自定义操作入口方法execute中都有一个MobiContext参数,MobiContext中提供了魔笔实体和结构体的创建方法,其中,实体的ID和结构体的ID可以在魔笔的应用设计器中获取到。
interface MobiContext {
/**
* 创建实体
*
* @param entityId 实体ID,可在Mobi IDE中数据模型面板获取到
*/
MobiObject createMobiObject(String entityId);
/**
* 创建结构体
*
* @param structureId 结构体ID,可在Mobi IDE中结构体处获取
* @param content 结构体初始化内容,为空时可传入空的Map对象
*/
MobiStructure createMobiStructure(String structureId, Map<String, Any> content);
}