字段摘要 | |
---|---|
String |
description
|
String |
name
|
方法摘要 |
---|
子事物摘要 | |
---|---|
|
Aggregate
对一个List或者数组进行聚合操作。 |
|
Begin
执行一组动作。 |
|
Break
参看: |
|
CodeGenerator
代码生成器,主要功能是生成、替换或者修改目标文件,一次执行只处理一个文件。 |
|
Continue
参看: |
|
Do
相当于 |
|
For
for(self.doAction("init", actionContext);self.doAction('condition", actionCotnext"); self.doAction("control", actionContext")){ |
|
FunctionAction
在普通动作中使用函数式编程中的函数。 |
|
GetAttributeSelf
获取self事物的指定属性值,尤其是属性值是字符串时的一些约定。另外这里的self指的是把本动作作为行为的事物。 |
|
GetThingFromSelf
从一个事物的属性或子事物定义的事物,优先从属性中获取事物,其次从子事物中获取,返回值为获取的事物。 |
|
GetValueByThingAttribute
返回指定事物的某个属性的值或以该属性值为变量名从ActionContext中使用Ognl取值。 |
|
GetVariableOgnl
使用Ognl表达式获取变量。 |
|
GetVariableSelf
用于其他事物的取值,即其他事物调用此方法根据其他事物的属性取值,而其他事物在下面的变量名为parentSelf,本动作事物为self。 |
|
GrabDataFromText
|
|
GroovyAction
使用Groovy脚本定义的动作。 |
|
Group
用于把一个List按照指定的字段分组,分组后的List是List<Map<String, Object>>的结构,其中Map中的_data为分组后的List数据,分组的字段名请不要使用_data。 |
|
If
IF的结构大概如下 |
|
Iterator
每次遍历会有<varName>,<varName>_index,<varName>_hasNext三个临时变量。 |
|
JavaAction
系统最基础的动作定义,元系统从底层只支持JavaAction,其他类型的动作比如JdkScript都是见解利用此动作而实现的。 |
|
JdkScript
JdkScript |
|
Log
把一个变量打印到日志中。 |
|
LogTemplate
使用Freemarker打印日志。 |
|
LuaAction
Lua脚本的动作。 |
|
MethodCall
方法调用。 |
|
NOOP
没有任何操作的动作,一般用于只定义一个动作。 |
|
ObjectFactory
Java对象的构造工厂。 |
|
ObjectPropertiesSetter
|
|
Ongl
Ognl表达式,可以有自己的参数。 |
|
ParamsToObject
一个有x1=v1&x2=v2&....&xn=vn参数转化为对象设置的属性。 |
|
Print
不换行的打印变量到控制台。 |
|
PrintTemplate
不换行的使用模板生成字符串并打印到控制台。 |
|
Println
换行的打印变量到控制台。 |
|
PrintlnTemplate
换行的使用模板生成字符串并打印到控制台。 |
|
PropertyChild
设置属性值,只能是事物的执行动作,因为需要取事物的子事物。 |
|
PropertyGetter
用于取值,使用Ognl表达式。 |
|
PropertySetter
设置属性值。 |
|
RefAction
引用并执行其他动作。 |
|
Return
return控制语句,返回常量、变量或者表达式变量,只能返回其中一个,优先返回变量。 |
|
ReturnFirstNotNull
执行一组动作,如果有一个动作的返回值不为null,那么就立刻返回,其他类似Begin。 |
|
SecurityHandler
安全处理器,运行后将注册到SecurityManager上。 |
|
Sort
对一个List进行排序。 |
|
Switch
swtich和Java的switch有很大不同,它相当于: |
|
Task
任务是在其他线程里执行,一般是定时任务或要在其他线程里的动作。 |
|
Thing
由于任何事物都可以转换为动作(Action),所以普通事物也可以加入到动作列表中。 |
|
ThingAction
|
|
ThingAction1
执行指定事物的动作。 |
|
ThingCollection
事物集合,从指定的事物路径列表里获取事物并放到一个List中。 |
|
ThingCollectionIterator
事物集合,从指定的事物路径列表里获取事物并放到一个List中。 |
|
ThingSelector
返回一个事物路径指定的事物,如果变量名不为空把它保存到指定的变量范围中。 |
|
ThingTemplateAction
事物模板动作,首先通过第一个子节点ThingTemplate生成事物。 |
|
Throw
抛出一个value属性指定的变量。 |
|
Try
XWorker中除了Java的Throwable还可以把普通对象抛出来,catch时指定类的全名,如果匹配那么执行Catch的子节点。 |
|
ValueFactory
构造一些基本类型的数据。 |
|
While
while循环。 |
|
Workflow
工作流 |
字段详细信息 |
---|
方法详细信息 |
---|
子事物详细信息 |
---|
对一个List或者数组进行聚合操作。
执行一组动作。
一个动作只能是一个事物,但有的时候动作是有一组动作构成的,为解决一组动作的情况只有把它们放在一个父动作下,因为Begin起到这个作用。
Begin可以添加子动作,所有的子动作顺序执行,如果有Return、Break、Exception等动作被执行了,则后面的动作将不被执行。
注意:
子动作不能有名为run的动作,否则该run方法将重写Begin的run方法。
参看:
世界、事物、Break、Continue、Do、For、GroovyAction、If、Iterate、JavaAction、JdkScript、Result、Return、Switch、Throw、Try、While、上下文。
代码生成器,主要功能是生成、替换或者修改目标文件,一次执行只处理一个文件。
文件路径的确认方式
默认读属性filePath,通过重载getFilePath方法自定义文件路径。
文件生成方式
生成一次:如果目标文件不存在生成,否则不征程。
覆盖:用新的内容覆盖旧的内容。
替换内容:替换目标文件的指定内容。指定内容使用$#<name>#> $#<name>#>来包围要替换的内容,其中name是内容参数。
文件内容
Content下的子节点为文件内容定义,可以定义多个,但如果是生成文件或覆盖文件则只使用第一个,当替换内容时每一个内容都使用自己名字替换目标文本中的内容。
参看:
世界、事物、Break、Continue、Do、For、GroovyAction、If、Iterate、JavaAction、JdkScript、Result、Return、Switch、Throw、Try、While、上下文。
相当于
do{
//执行子动作下的动作
}while(self.doAction("condition", actionContext));
其中condition可以使用Ognl表达式,也可以是自己的动作condition。
for(self.doAction("init", actionContext);self.doAction('condition", actionCotnext"); self.doAction("control", actionContext")){
//子动作
}
其中init, condition和control方法for自己的行为,分别是初始化,循环条件判断和变量控制。
在普通动作中使用函数式编程中的函数。
designModel
如果为true那么每次执行都会进入设计编辑界面,否则是以安静的非UI的方式运行。
设置函数
请添加子事物Function,只有第一个子节点才会生效,Function子节点是一个Return函数。如果Function子节点不存在不会抛出异常,只有一条警告的日志。
安静模式执行时不能有UI相关的函数,否会会抛出异常。
返回值
如果designModel=true返回动作执行时返回null,否则返回函数执行的结果。
获取self事物的指定属性值,尤其是属性值是字符串时的一些约定。另外这里的self指的是把本动作作为行为的事物。
属性值的前缀约定:
从一个事物的属性或子事物定义的事物,优先从属性中获取事物,其次从子事物中获取,返回值为获取的事物。
返回指定事物的某个属性的值或以该属性值为变量名从ActionContext中使用Ognl取值。
事物
通过thingVarName和thingPath获取。
是否从ActionContext中取值
isVarAttribute=true。
属性名称
varAttribute。
获取的值是否保存到变量上下文中
varName不为空。
使用Ognl表达式获取变量。
可以重载的方法:
用于其他事物的取值,即其他事物调用此方法根据其他事物的属性取值,而其他事物在下面的变量名为parentSelf,本动作事物为self。
变量获取顺序:
使用Groovy脚本定义的动作。
Groovy脚本中未经声明直接使用的变量为全局变量,在脚本中执行完还继续存在,Groovy脚本中声明的变量为局部变量,在脚本执行完后就会消失。
参看:
世界、事物、Break、Continue、Do、For、GroovyAction、If、Iterate、JavaAction、JdkScript、Result、Return、Switch、Throw、Try、While、上下文。
用于把一个List按照指定的字段分组,分组后的List是List<Map<String, Object>>的结构,其中Map中的_data为分组后的List数据,分组的字段名请不要使用_data。
IF的结构大概如下
if(self.doAction("condition", actionContext)){
//if下的子动作
}else if(elseIf.doAction("condition", actionContext)){
//elseif下的子动作
}else{
//else下的子动作
}
每次遍历会有<varName>,<varName>_index,<varName>_hasNext三个临时变量。
集合默认是通过属性collectionName设置的,可以重载getCollection方法返回指定的集合。
系统最基础的动作定义,元系统从底层只支持JavaAction,其他类型的动作比如JdkScript都是见解利用此动作而实现的。
参看:
世界、事物、Break、Continue、Do、For、GroovyAction、If、Iterate、JavaAction、JdkScript、Result、Return、Switch、Throw、Try、While、上下文。
JdkScript
使用JDK1.6的Script定义的动作,即支持使用JSR-223规范的脚本。
使用方法
建议使用GroovyAction
建议使用GroovyAction的动作作为脚本,由于JdkScript用的还比较少,所以暂时还不清楚有哪些优缺点。
把一个变量打印到日志中。
使用Freemarker打印日志。
Lua脚本的动作。
使用Java的ScriptEngine的实现。
方法调用。
参数通过PropertyGetter或ValueFactory获取,请注意子事物的顺序为参数的顺序。
没有任何操作的动作,一般用于只定义一个动作。
Java对象的构造工厂。
Ognl表达式,可以有自己的参数。
一个有x1=v1&x2=v2&....&xn=vn参数转化为对象设置的属性。
不换行的打印变量到控制台。
不换行的使用模板生成字符串并打印到控制台。
使用Freemarker模板。
换行的打印变量到控制台。
换行的使用模板生成字符串并打印到控制台。
使用Freemarker模板。
设置属性值,只能是事物的执行动作,因为需要取事物的子事物。
通过一个事物的第一个子节点设置对象的属性。
用于取值,使用Ognl表达式。
设置属性值。
引用并执行其他动作。
return控制语句,返回常量、变量或者表达式变量,只能返回其中一个,优先返回变量。
执行一组动作,如果有一个动作的返回值不为null,那么就立刻返回,其他类似Begin。
安全处理器,运行后将注册到SecurityManager上。
安全处理器是什么?
可以用作权限处理,比如在登录以后才能访问指定的数据对象等。
实现方法:
对一个List进行排序。
swtich和Java的switch有很大不同,它相当于:
for(case: self.Caese){
if(case.doAction("condition", actionContext)){
//case子动作
}
if(break){
break;
}
}
if(!caseBreak){
//default子动作
}
可以用IF代替。
任务是在其他线程里执行,一般是定时任务或要在其他线程里的动作。
需要实现的方法
定时任务
在Schedule中设置。
固定日期的定时任务
比如每天三点中执行的任务,那么选择fixTime=true,fixTimeStr=03:00,timeUnit=DAYS,period=1。
由于任何事物都可以转换为动作(Action),所以普通事物也可以加入到动作列表中。
作为动作的事物应该有run方法,最好通过添加描述的方式编辑事物。
执行指定事物的动作。
事物集合,从指定的事物路径列表里获取事物并放到一个List中。
事物集合,从指定的事物路径列表里获取事物并放到一个List中。
返回一个事物路径指定的事物,如果变量名不为空把它保存到指定的变量范围中。
事物模板动作,首先通过第一个子节点ThingTemplate生成事物。
1. useRootThing
如果为true返回的是一个事物,这个事物本身是空的,其子节点是通过模板创建事物列表,如果为false,那么返回这个事物的子节点(List)。
2. actionName
如果不为空,那么会执行创建的事物的名为<actionName>的动作,并返回这个动作的结果。
3. varName
如果不为空,那么会把执行的结果以此变量名放入到动作上下文中。
抛出一个value属性指定的变量。
XWorker中除了Java的Throwable还可以把普通对象抛出来,catch时指定类的全名,如果匹配那么执行Catch的子节点。
try{
//执行ChildAction
}catch(obj instanceof Catch.exception){
//执行catch的子节点
}finally{
//执行Finally的子节点
}
构造一些基本类型的数据。
常量
除了type=ognl之外其他都是常量,首先取value的值,然后转化为相对应的类型的值。
ognl
如果type=ognl,那么value对应的是ognl的表达式。
while循环。
while(self.doAction("condition", actionContext)){
//子动作
}
其中condition是While自己的方法,返回true/false,While开启新的局部变量范围。
工作流
一个简单的工作流框架,和一般的工作流不同的是该工作流框架只是一个最简单的任务流程,只负责判断任务的前置是否完成然后运行任务,以及判断流程的结束等。如果要实现特定的功能比如审批流程,那么可以通过监听以及具体的任务来实现。
任务
工作流执行后主要就是执行任务,一个任务有前置任务和后置任务,前置任务满足条件则执行,执行完毕后执行后置任务。
任务可以是任意的事物,一个任务有canStart、run和getNextTasks方法, canStart返回true任务才执行,任务执行时会调用run方法,任务执行完毕后会带哦用getNextTasks方法获取下级任务的事物列表。
一般情况下可以使用xworker.workflow.WorkflowTask来定义任务,新的任务都可以注册到xworker.workflow.WorkflowTasks事物下,这样所有的工作流都可以使用这个任务了。
临时变量存储
工作流运行时产生的临时变量通过DataProvider保存和获取,任务在执行方法时可能需要,此时任务的方法了可以使用dataProvider变量。
工作流管理器
一个工作流管理器通常是全局的,用于保存和处理流程,还可以做一些特殊处理,比如定期检查是否过期等。
监听
当工作流的状态发生变化时可以监听事件。监听有两种实现方式,一是在工作流事物定义里重载statusChanged方法,二是获取工作流Java的实例后手工添加相应的listener。