public class InfoPlusEvent extends Object
流程平台事件入参的封装,也是所有事件处理方法的唯一入参。根据事件类型的不同,可以获取到不同的信息。
常用方法举例: 假设e为入参InfoPlusEvent对象
获取表单数据并转换为Bean: | T form = e.toBean(T.class); | 参考toBean(Class) |
获取当前用户: | e.getUser(); | |
获取流水号: | e.getStep().getInstance().getEntryId(); | |
获取主流程流水号: | e.getStep().getInstance().getEntryIdTop(); | |
获取流程viewToken: | e.getStep().getInstance().getToken(); | 参考FormInstance.getToken() |
获取动作执行的备注: | e.getStep().getRemark(); | |
获取第三方令牌: | e.getTokens(); | 参考getTokens() |
构造器和说明 |
---|
InfoPlusEvent() |
限定符和类型 | 方法和说明 |
---|---|
String |
getActionCode()
触发事件的动作代码。
|
String |
getActionName()
触发事件的动作名称。
|
String |
getChangingField()
触发FIELD_CHANGING事件的字段名。
|
<T> T |
getChangingObject(Object bean)
获取包含实际触发FIELD_CHANGING事件字段的最内层对象。
|
<T> T |
getChangingObject(Object bean,
Class<T> clazz)
获取包含实际触发FIELD_CHANGING事件字段的指定类型对象。
|
String |
getCustomUrlParameter(String name)
获取流程发起的自定义参数。
|
FormStep |
getEndStep()
流程的结束步骤。
|
List<Occupy> |
getExecuteOccupies()
获取用户办理当前步骤的有效岗位三元组,或称执行岗位三元组。
|
String |
getField()
已过时。
等价于
getChangingField() ,getChangingField方法的命名更合理。 |
String |
getFieldPath()
触发FIELD_CHANGING事件的字段在重复结构中的路径。
|
List<FormField> |
getFields()
表单的字段定义。
|
Map<String,Object> |
getFormData()
Map格式的表单数据。
|
Object |
getFormGlobalVariable(String name)
获取表单全局变量。
|
List<FormStep> |
getNextSteps()
事件成功后的后续办理步骤。
|
Object |
getResult() |
FormStep |
getStep()
事件关联的步骤。
|
CodeSuggestion |
getSuggestion()
FIELD_SUGGESTING事件相关的特有信息。
|
Map<String,String> |
getTokens()
获取第三方令牌。
|
InfoPlusUser |
getUser()
触发事件的用户。
|
long |
getWhen()
触发事件的时间。
|
boolean |
isRelease()
返回触发事件的流程实例是否为生产实例。
|
<T> T |
locateSplitObject(Object bean)
获取和当前动态并行关联的表单数据对象。
|
Object |
removeFormGlobalVariables(String name)
删除表单全局变量。
|
void |
setFormGlobalVariables(String name,
Object value)
设置表单全局变量。
|
<T> T |
toBean(Class<T> clazz)
将事件中的表单数据转化为Bean格式的实体对象。
|
public InfoPlusUser getUser()
InfoPlusUser
对象public long getWhen()
public FormStep getStep()
即使事件本身与步骤无关,此方法也会返回一个虚拟构造的对象,仍能从FormStep.getInstance()
获取事件关联的流程实例信息。
对于STEP_WITHDRAWING和STEP_WITHDRAWN事件,关联的步骤指撤回后将成为待办步骤的当前已办步骤。
FormStep
public String getActionCode()
仅ACTION_CLICKING、ACTION_DOING、ACTION_DONE、STEP_WITHDRAWING、STEP_WITHDRAWN事件提供此项信息。
对于STEP_WITHDRAWING和STEP_WITHDRAWN事件,动作指撤回后将成为待办步骤的当前已办步骤之前的办理动作。
public String getActionName()
仅ACTION_CLICKING、ACTION_DOING、ACTION_DONE、STEP_WITHDRAWING、STEP_WITHDRAWN事件提供此项信息。
对于STEP_WITHDRAWING和STEP_WITHDRAWN事件,动作指撤回后将成为待办步骤的当前已办步骤之前的办理动作。
public List<FormStep> getNextSteps()
仅ACTION_DONE事件提供此项信息,后续步骤指当前步骤办理后,新产生的后续待办步骤,可能是多个。
FormStep
的Listpublic FormStep getEndStep()
如果动作执行导致流程结束,则ACTION_DONE事件将提供此项信息。并且随后必然触发INSTANCE_COMPLETED事件,也提供此项信息。
其他事件不提供此项信息,如不能在ACTION_DOING事件中通过判断getEndStep的返回值来预判流程是否将会结束。
FormStep
public Object getResult()
public CodeSuggestion getSuggestion()
CodeSuggestion
对象CodeSuggestion
public <T> T toBean(Class<T> clazz)
T
- 转化结果的类型clazz
- 转化结果的类型InfoPlusEntity
@Deprecated public String getField()
getChangingField()
,getChangingField方法的命名更合理。public String getFieldPath()
仅FIELD_CHANGING事件提供此项信息。
如果是重复字段触发的FIELD_CHANGING事件,仅通过字段名无法定位实际变化的字段,需要结合此项信息来精确定位。
开发者一般不需要直接使用,而应该使用 getChangingObject(Object)
来获取包含了实际变化字段的最内层对象。
getChangingObject(Object)
public boolean isRelease()
public String getChangingField()
仅FIELD_CHANGING事件提供此项信息。字段名称为Map格式表单数据中的字段名称,和表单数据结构一致,包含field前缀。
public <T> T getChangingObject(Object bean)
参考getChangingObject(Object, Class)
,了解该方法的作用
T
- 结果类型bean
- Bean格式表单数据的实例。参考toBean(Class)
getChangingObject(Object, Class)
public <T> T getChangingObject(Object bean, Class<T> clazz)
如果想要获取的是包含实际触发FIELD_CHANGING事件字段的最内层对象,可以使用getChangingObject(Object)
方法,不指定类型。
此方法和getChangingObject(Object)
方法用于在重复字段触发的FIELD_CHANGING事件中确定实际触发事件的字段。
为了理解这个概念,以如下的采购申请表单数据结构为例(一个申请包含多个申请部门,每个部门包含多条采购明细):
Java对象定义:
//采购申请主表单 class PurchaseRequest { private String title; //申请标题 private List<RequestDepartment> departments; //申请部门 ... //setter & getter } //申请部门 class RequestDepartment { private CodeItem department; //申请部门 private List<PurchaseItem> items; //采购明细 ... //setter & getter } //采购明细 class PurchaseItem { String itemName; //采购物品名称 BigDecimal itemPrice; //采购物品单价 Integer itemAmount; //采购物品数量 ... //setter & getter }Bean格式的表单数据(json表达):
{ "title": "采购办公用品", "departments": [{ "department": { "codeId": "001", "codeName": "服务部" }, "items": [{ "itemName": "记号笔", "itemPrice": 3, "itemAmount": 20 }, { "itemName": "白板擦", "itemPrice": 5, "itemAmount": 3 }] },{ "department": { "codeId": "002", "codeName": "开发部" }, "items": [{ "itemName": "复印纸", "itemPrice": 20, "itemAmount": 5 }, { "itemName": "签字笔", "itemPrice": 5, "itemAmount": 10 }] }] }假设在字段fieldItemAmount上设置了FIELD_CHANGING事件,当修改了"开发部"申请采购的"复印纸"数量后:
PurchaseRequest form = e.toBean(PurchaseRequest.class); // 获取触发事件的字段名,但无法判断是哪个采购明细发生了变化 String field = e.getChangingField(); assert "fieldItemAmount".equals(field); // 获取实际变化的采购明细,采购明细包含采购数量的最内层对象,可以不指定类型 PurchaseItem item = e.getChangingObject(form); assert "复印纸".equals(item.getItemName()); // 获取实际变化的采购明细,也可以指定类型 PurchaseItem item2 = e.getChangingObject(form, PurchaseItem.class); assert item == item2; // 获取实际变化的申请部门,采购明细的上层对象 RequestDepartment department = e.getChangingObject(form, RequestDepartment.class); assert "开发部".equals(department.getDepartment().getCodeName())
T
- 要获取的对象类型bean
- Bean格式表单数据的实例。参考toBean(Class)
clazz
- 要获取的对象类型getChangingObject(Object)
public <T> T locateSplitObject(Object bean)
此方法用于在动态并行内的步骤事件上,从完整的表单数据对象中获取和当前动态并行相关的数据对象。
为了理解这个概念,以如下的采购申请表单数据结构为例(一个申请包含多个申请部门):
表单数据结构:
purchaseRequest ---- 采购申请主表单 fieldTitle ---- String, 申请标题 groupDepartments ---- 重复结构,申请部门 fieldDepartment ---- Organize, 申请部门Java对象定义:
//采购申请主表单 class PurchaseRequest { private String title; //申请标题 private List<RequestDepartment> departments; //申请部门 ... //setter & getter } //申请部门 class RequestDepartment { private CodeItem department; //申请部门 ... //setter & getter }Bean格式的表单数据(json表达):
{ "title": "采购办公用品", "departments": [{ "department": { "codeId": "001", "codeName": "服务部" } },{ "department": { "codeId": "002", "codeName": "开发部" } }] }流程图:
(填写申请) ---提交---> (按groupDepartments动态并行) ----> (部门审核) ---通过---> (合并) ----> (完成)在开发部的"部门审核"步骤上:
PurchaseRequest form = e.toBean(PurchaseRequest.class); // 获取当前审核的部门 RequestDepartment department = e.locateSplitObject(form); assert "开发部".equals(department.getDepartment().getCodeName())
T
- 要获取的对象类型bean
- Bean格式表单数据的实例。参考toBean(Class)
public String getCustomUrlParameter(String name)
发起的自定义参数指流程在发起时在发起链接上附加的额外参数。如发起链接:
https://form.sjtu.edu.cn/infoplus/form/workflow_code/start?key=value
此发起链接可以发起流程代码为workflow_code的发布版本生产实例,并附带了一个自定义参数,参数名为key,参数值为value。
发起的自定义参数在流程发起后作为特殊的内置变量(_VAR_URL_Attr)保存在表单数据中,此方法为解析该内置变量的辅助方法。 因此在任何事件中均可以通过此方法解析并获取发起的自定义参数。
name
- 参数名public List<Occupy> getExecuteOccupies()
当前用户执行岗位三元组信息存放在表单数据的内置变量_VAR_EXECUTE_POSITIONS中,此方法为解析该内置变量的辅助方法。
public Object getFormGlobalVariable(String name)
表单全局变量存放在表单数据的内置变量_VAR_GLOBAL_VARIABLES中,此方法为解析该内置变量并提取指定名称的表单全局变量的辅助方法。
修改表单全局变量使用setFormGlobalVariables(String, Object)
、removeFormGlobalVariables(String)
方法,修改结果会在使用InfoPlusEvent构造InfoPlusResponse时自动回传。
name
- 表单全局变量名setFormGlobalVariables(String, Object)
,
removeFormGlobalVariables(String)
public void setFormGlobalVariables(String name, Object value)
对表单全局变量的修改将在使用InfoPlusEvent对象构造InfoPlusResponse
时自动回传。
name
- 表单全局变量名value
- 表单全局变量值InfoPlusResponse(InfoPlusEvent, Object)
public Object removeFormGlobalVariables(String name)
对表单全局变量的修改将在使用InfoPlusEvent对象构造InfoPlusResponse
时自动回传。
name
- 表单全局变量名InfoPlusResponse(InfoPlusEvent, Object)
Copyright © 2024. All rights reserved.