BOWP的访问策略
BOWP的访问策略模式:定义了触发的条件和规则(name, accessTypes, busObjType和trigFields),一旦符合条件即会调用定义的方法,简化了代码。例如以下:
例如1:用户查询个人的用户信息条件设置,后台的代码片段如下:
@AccessPolicy(name="doSelectAll",accessTypes = AccessType.QueryDefaultSet)
public void setQueryUserId(IDatObj datObj){
datObj.overrideParam(doSelectAll.USR_ID.name(), this.getUserID());
}
例如2:在保存时,检查服务器的IP和端口不能重复,后台的代码片段如下:
@AccessPolicy(accessTypes={AccessType.SAVE},
trigFields={"doServer.IP_ADDR","doServer.PORT_NO"})
public void checkDupl(String as_IPAddr, String as_PortNo){
BufRow br = this.getDatObj(doObj.doServer).getCurrentRow();
Util.checkDuplicateInTable(br, doServer.IP_ADDR, doServer.PORT_NO);
}
该平台提供了两种访问策略模式:
- 服务端访问策略模式
- 客户端访问策略模式
服务端访问策略模式条件和规则说明:
- accessTypes
- name
- trigFields
- busObjType
- isEnquiry
- isActive
- isOnlyPrivilegeMethod
- privilegeKey
- privilegeDesc
- point
- order
服务端accessTypes
1.accessTypes:服务端执行命令种类
目前服务端提供的命令如下:
accessTypes | 类型 | 触发时机 | 访问策略参数 | 返回值 |
---|---|---|---|---|
Button | id及字段类型 | 点击Button触发 | 跟trigField相关参数 | |
FocusField | 字段类型 | 控件获得焦点触发 | 跟trigField相关参数 | |
LostField | 字段类型 | 控件失去焦点触发 | 跟trigField相关参数 | |
FocusRecord | 字段类型 | 移到这条记录触发 | 跟trigField相关参数 | |
LostRecord | 字段类型 | 移出这条记录触发 | 跟trigField相关参数 | |
LostGrid | id及字段类型 | Grid失去焦点触发 | 跟trigField相关参数 | |
FocusGrid | id及字段类型 | Grid获得焦点触发 | 跟trigField相关参数 | |
FocusTab | id及字段类型 | tab获得焦点触发 | 跟trigField相关参数 | |
LostTab | id及字段类型 | tab获得焦点触发 | 跟trigField相关参数 | |
OpenWindow | id及字段类型 | open Window获得焦点触发 | 跟trigField相关参数 | |
CloseWindow | id及字段类型 | close Window获得焦点触发 | 跟trigField相关参数 | |
SAVE | 字段类型 | save动作触发 | 跟trigField相关参数 | |
CHECK | 字段类型 | 审批检查动作触发 | 跟trigField相关参数 | |
APPROVE | 字段类型 | 审批动作触发 | 跟trigField相关参数 | |
REJECT | 字段类型 | 审批拒绝动作触发 | 跟trigField相关参数 | |
PostEnquiry | 数据对象 | 查找每条记录处理 | BufRow | |
AfterEventQuery | 数据对象 | 查找对象集合处理 | list<BufRow> | |
BeforeLoadSO | name是[searchBusObj].[searchDatObj] | getSchObj之前处理 | BufRow,SchObj | |
AfterLoadSO | So对象 | getSchObj之后处理 | BufRow,SchObj | |
OuterLoad | 数据对象 | 加载外部数据 | BufRow,DatObj | |
NewRow | 数据对象 | 新建记录 | BufRow | |
DelRow | 数据对象 | 删除记录 | BufRow | |
ConstructSelectSQL | 数据对象 | 重新构造查询sql语句 | BufRow,List<Object>,DatOjb | |
BeforeInsertRow | 数据对象 | 数据库插入前 | BufRow | Boolean (是否要新增) |
BeforeUpdateRow | 数据对象 | 数据库更改前 | BufRow | Boolean (是否要更改) |
BeforeDeleteRow | 数据对象 | 数据库删除前 | BufRow | Boolean (是否要删除) |
AfterInsertRow | 数据对象 | 数据库插入完后 | Listt<BufRow> | |
AfterUpdateRow | 数据对象 | 数据库更改完后 | Listt<BufRow> | |
AfterDeleteRow | 数据对象 | 数据库删除完后 | Listt<BufRow> | |
AccessOrder | 如果第二个accessType为“Field“, name设置为[datObj]+”.”+[fieldName],除此以外,根据第二个accessType的要求定义name | 在同一级别有多个访问策略进行排序 | Listt<Trig> | |
TransferredMsg | name是MOD_ID+”_”+MSG_CDE | String… (根据MOD_ID和MSG_CDE获取表MSG的参数) | BufRow,Object[] | |
BeforeCallMethod | name是方法名 | 调用这个方法前执行 | 跟此方法对应的参数 | |
AfterCallMethod | name是方法名 | 调用这个方法后执行 | 跟此方法对应的参数 | 还回值可以通过 SessionMgr.singleton(). getLocalVar(RETURNVALUE)得到 |
ErrorCallMethod | name是方法名 | 调用这个方法出错时执行 | ||
FinalCallMethod | name是方法名 | 调用这个方法都执行 | ||
QueryDefaultSet | 数据对象 | 设置查询条件 | DatObj | |
Copy | 数据对象 | 拷贝对象时 | BufRow,BufRow | |
Edit | 数据对象 | 编辑对象时 | BufRow | |
Cancel | 数据对象 | 还原对象时 | BufRow | |
OuterDel | 数据对象 | 外部删除数据 | Listt<BufRow> | |
OuterUpdate | 数据对象 | 外部更改数据 | Listt<BufRow> | |
OuterInsert | 数据对象 | 外部插入数据 | Listt<BufRow> | |
QueryHint | 数据对象 | SqL优化 | PreparedStatement | |
BeforeNewRow | 数据对象 | 新建记录前处理 | DatObj,poid,Record | |
AfterDelRow | 数据对象 | 删除记录后处理 | BufRow | |
EmptyRecordDefault | 数据对象 | 查询空记录处理 | BufRow,DatObj | |
ValueChange | 字段类型 | 值改变的时候触发 | 跟trigField相关参数 | |
OTHER | 字段类型 | 其他类型触发 | 跟trigField相关参数 | |
Filter | 数据对象 | 过滤数据库数据 | Result | Boolean (是否要过滤) |
DupPrimaryKey | 数据对象 | 主键重复除了 | Result | Boolean (是否要过滤) |
2.name:访问策略的名字
命名情况 | 使用访问策略 |
---|---|
datObj的名字 | PostEnquiry,AfterEventQuery,OuterLoad,NewRow,DelRow,ConstructSelectSQL, BeforeInsertRow,BeforeUpdateRow,BeforeDeleteRow,AfterInsertRow,AfterUpdateRow, AfterDeleteRow,AccessOrderQueryDefaultSet,Copy,Edit,Cancel,OuterDel,OuterUpdate, OuterInsert,QueryHint,BeforeNewRow,AfterDelRow,EmptyRecordDefault,ValueChange, Filter,DupPrimaryKey |
控件ID | Button,FocusGird,LostGrid,FocusTab,LostTab,OpenWindow,CloseWindow |
方法名 | BeforeCallMethod,AfterCallMethod,ErrorCallMethod,FinalCallMethod |
searchBusobj+”.”+searchObj | BeforeLoadSO,AfterLoadSO |
mode+”.”+code | TransferredMsg |
自定义名 | OTHER |
3. trigFields:访问策略触发字段
命名情况 | 对应的方法参数 |
---|---|
单个字段 | 这个字段对应参数 |
多个字段 | 这些字段对应多个参数 |
单个字段 | BufRow |
多个字段 | BufRow |
访问策略触发字段特殊字符
特殊字符 | 说明 |
---|---|
& | 值可以为空 |
* | 这条记录有改变 |
** | 这条记录及子记录有改变 |
访问策略触发字段对应的数据类型
1. 这个字段对应的数据类型
2. BufRow
3. EntityBean
4. Listt<BufRow>
5. Listt<EntityBean>
4. busObjType:这个只有有trigFields才生效
业务对象类型 | 说明 |
---|---|
ValChg | 数据有改变,此访问策略才执行 |
ValChgSession | 数据有改变,此访问策略才执行,但执行时出现错误时,在此策略改变的数据回退 |
Must | 不管数据有没改变,都执行这个访问策略 |
MustSession | 不管数据有没改变,都执行这个访问策略,但执行时出现错误时,在此策略改变的数据回退 |
5. isEnquiry
isEnquiry为true,业务是查询时,此访问策略才执行,反之
6. isActive
isActive为true此访问策略才执行,反之
7. isOnlyPrivilegeMethod
isOnlyPrivilegeMethod为true,这个访问策略是空方法,只有用来权限管理
8. privilegeKey
privilegeKey:功能权限标记(必须是唯一的) 用来权限管理
9. privilegeDesc
privilegeKey:功能权限描述
10. point
point:扩展点
11. order
order:如果在同一服务命令时,有多个访问策略时,如果有依赖关系,需要指定执行顺序