Skip to content

数据结构与模板函数

数据结构定义

定义一个作用于流程运行时的数据结构,流程运行时可修改或引用其中的值。其语法如下:

数据名 = 初始值
  • 数据名:需符合groovy变量命名规范,注意不要与隐示变量名冲突
  • 初始值:可以是单项数据、列表、复合数据等类型,但不能是闭包。
    • 初始值不能是一个闭包
    • 不能引用非全局的隐示变量比如isLock=input.user.lock 将会初始错误,因为定义逻辑会在dsl加载时也会运行。
    • 定义的数据无法指定类型,再次强调整个DSL都是弱类型的设计

数据定义示例

groovy
// 单结构数据
isLock=true
// 列表
blacklist = [22, 12, 45, 55 ]
// 复合数据项
user= [
  		name:"li", age:18,
      address:[city:"changsha",detail:"xxx"],
  	  label:["red","blue"]
]

数据定义使用建议与规范

  • 为避免数据项过多造成混乱,建议定义[:]Map这种复合数据结构且只对内部属性进行修改。
  • 定义的数据结构的作用范围是流程运行时,不能在初始模块init { }中引用
  • 数据定义应位于初始模块 init{ } 之后。

模板函数定义

对于DSL中大量使用的重复逻辑可封装在函数中,模板函数的声明与groovy中普通函数声明一至,推荐以下方式使用:

def 函数名(参数){
    ...
}

模板函数对于构建相似任务非常有用,比如dsl中要重复使用某个HTTP任务 可以将该任务封装成一个模板函数。

模板函数示例

// 消息发送模板
def SEDND_MSG(message){
  HTTP {
  	method="POST"
    url="https://httpbin.org/post"
    heads["Content-Type"]="application/x-www-form-urlencoded" // 请求头
    params["content"] = message
  }
}
t1 = SEDND_MSG "发送消息1"

// 获取消息任务
getMsg = CODE {
  "helo apiFlow"
}

t2 = SEDND_MSG "发送消息2 ${->getMsg.result}"

start {
  run t1
  run getMsg
  run t2
}
  • 消息发送模板调用了HTTP任务声明方法,返回一个HTTP任务实例
  • 通过模板函数声明任务t1 构建一个发送指定消息的HTTP任务
  • 通过模板函数声明任务t2 该任务发送的消息嵌入了 getMsg任务的结果,必须通过延迟插值${-> }语法进行嵌入否则在任务声明阶段 是取不到其它任务结果值的。

App 附录

下一步