本文档详细描述了在不同场景下,插件在动态表单、单据操作、单据列表、单据转换、单据反写、报表取数、打印以及引入引出等过程中的事件执行顺序及作用。涉及了界面初始化、数据包处理、用户交互、资源释放等多个方面的事件,包括界面显示前的准备、表单视图的初始化、用户点击事件的触发、数据包的创建与加载、数据的校验与提交、界面关闭与资源释放等。同时,针对单据和列表插件,还具体描述了其在添加字段、设置过滤器、处理列表显示列、构建取数器、过滤条件调整等方面的操作。此外,还涉及了单据转换与反写、报表取数及打印等高级功能的事件处理。文档最后还提到了引入引出过程中的事件,包括Excel文件的解析、数据导入与导出、引入前后的处理等。
事件执行顺序
一、动态表单
界面打开前事件:
1 setPluginName 显示界面前,准备构建显示参数之前,创建插件后,触发此事件;;js代码触发
2 preOpenForm 显示界面前,准备构建显示参数之前,触发此事件;;设置是否有权限打开页面、设置是否触发什么事件、设置显示界面的标题
3 loadCustomControlMetas 显示界面前,构建界面显示参数时,触发此事件;;动态添加控件
界面初始化
4 setView 表单视图模型初始化,创建插件时,调用此方法,向插件传入表单视图模型IFormViem实例;
5 initialize 表单视图模型初始化,创建插件后,触发此事件
6 registerListener 用户与界面交互时,触发此事件;用于注册监听
7 getEntityType 表单基于实体模型,创建数据包之前,触发此事件
8 createNewData 界面初始化或刷新,开始新建数据包时触发此事件
9 afterCreateNewData 界面初始化或刷新,新建数据包完毕后,触发此事件;新增页面打开后设置默认值;从列表打开/下推/列表引入 不会进入该事件
10 beforeBindData 界面数据包构建完毕,开始生成指令,刷新前端字段值、控件状态之前,触发此事件
11 afterBindData 界面数据包构建完毕,生成指令,刷新前端字段值、控件状态之后,触发此事件;修改控件的锁定性、可见性、颜色,禁止修改从数据库加载的字段值;;可给无字段名的动态赋值;从新增和列表进入都会触发。
用户交互(无先后顺序)
12 beforeItemClick 用户点击界面菜单按钮时,执行绑定的操作之前,触发此事件;工具栏点击事件,注意监听工具栏而不是按钮
13 itemClick 用户点击界面菜单按钮时,触发此事件
14 beforeDoOperation 用户点击按钮、菜单、执行绑定的操作前,触发此事件;用于校验
15 afterDoOperation 用户点击按钮、菜单、执行绑定的操作后,不论成功与否,均会触发此事件
16 comfirmCallBack 前端交互提示确认后,通知插件进行后续处理
17 closedCallBack 子页面关闭时,如果回调函数由父界面进行处理,则会触发父界面的此事件
18 beforeClick 用户点击按钮、标签、执行绑定的操作前,触发此事件;用于校验,判断当前登录人是单据的创建人,按钮可以走click……
19 click 用户点击界面按钮或者标签时触发此事件
20 flexBeforeClosed 弹性域维护界面关闭时,触发父界面此事件
21 onGetControl 在现有代码尝试获取控件的变成模型时,触发此事件
22 customEvent 触发自定义控件的定制事件;后端响应自定义控件前端的请求
23 timerElapsed 定时触发此事件
24 afterDeleteRow 删除单据体行后触发此事件
25 afterAddRow 新增单据体行后触发此事件
26 propertyChanged 字段值更新后触发此事件
27 beforeF7Select F7字段打开时触发事件
界面关闭
28 beforeClosed 界面关闭之前触发此事件
29 destory 界面关闭之后,释放资源时,触发此事件
30 pageRelease 界面关闭之后,释放资源时,触发此事件
单据插件比界面插件多一个事件:
afterLoadData
单据界面加载完毕,会根据传入的单据主键值,到数据库加载单据数据包。本事件在单据数据包加载完毕后触发。插件可以在此事件,根据单据的数据决定业务逻辑的执行。
afterLoadData事件与afterCreateNewData的差别:
1. 这两个事件的触发时机一样,都是在界面数据包准备完毕之后触发,但数据包来源不同:
2. afterCreateNewData事件的数据包,是全新创建的数据包,适合在此事件调整默认值;
3. afterLoadData事件的数据包,来自于数据库,不建议在此事件修改字段值;
4. 这两个事件,在单据界面加载、刷新过程中,只会触发其中一个(互斥):
5. 单据界面以新增模式打开,不需要到数据库加载单据,触发afterCreateNewData事件;
6. 单据界面以修改、查看模式打开,需到数据库加载单据,触发afterLoadData事件。
二、单据操作插件执行顺序:
onPreparePropertys 添加需要用到的字段
onAddValidators 系统预置操作校验器加载完,执行校验前
beforeExecuteOperationTransaction 校验通过后,开启事务前
beginOperationTransaction 开启事务后,提交到数据库前;不能在此事件直接跨库更新数据,跨库需采用KDTX框架实现数据一致性;勿在此事件检查数据合法性;勿通过 e.setCancelOperation(true)取消操作,调用此方法不会回滚已更新的关联数据,会破坏数据一致性
endOperationTransaction 提交数据库后,事务未提交前
rollbackOperationTransaction 事务提交失败,回滚后
afterExecuteOperationTransaction 事务提交后
setContext 设置上下文
initializeOperationResult 初始化操作结果集
onReturnOperation 操作结束
三、单据列表插件
列表初始化
createTreeListView 不触发,仅树形列表界面,会触发此事件
filterContainerInit 初始化过滤控件时,触发此事件,把配置的过滤字段传递给插件;;设置过滤控件默认值
beforeCreateListColumns 在构建列表列之前触发,传入当前待创建的列分组、列;根据页面参数、过滤条件,动态添加、删除单据列表的显示列;刷新单据列表,构建单据列表显示的列时,触发此事件,传入在设计器中已配置的列集合。
beforeCreateListDataProvider 列表初始化,构建列表取数器前触发此事件;可以自定义获取来自不同数据库的数据
setFilter 列表在生成了过滤条件之后,准备查询数据之前,触发此事件;;可以调整过滤条件内容、追加条件,从而影响列表取数。
beforePackageData 包装数据前,需要遍历这个数据包,用于格式化数据 注意:不要修改基础资料的引用属性,因为会打 乱缓存数据,此方法只适合非基础资料字段修改
packageData 包装数据,单元格填值,用于格式化数据;列表初始化,或者列表重新加载时,可以对指定单元格赋值,对已审核状态的数据锁定操作项,不允许操作。
用户交互
1. billListHyperLinkClick 点击超链接单元格时,触发此事件;判断点击的列,取消单据界面打开,自行显示其它界面。
2. filterContainerSearchClick 用户修改了快捷过滤、常用过滤条件,或者点击过滤面板确定按钮,触发此事件;调整用户在过滤面板上的条件配置,后续系统会根据调整后的条件配置,生成取数条件。
3. beforeShowBill 执行新建、修改、查看等操作,打开单据维护界面之 前,触发此事件
4. billClosedCallBack 列表打开的单据维护界面关闭后返回时,触发此事件
5.listRowClick 列表行点击时,触发此事件
6. listRowDoubleClick 列表行双击时,触发此事件
7.filterContainerAfterSearchClick 过滤容器搜索点击后的处理方法,此事件发生在过滤条 件解析后,主要用于点击过滤条件时联动修改其他过 滤字段控件, 修改前已先在filterContainerInit事件将要 修改的字段用全局变量进行缓存
8.filterContainerBeforeF7Select 过滤容器内F7弹出前的处理方法
9.filterColumnSetFilter 过滤字段上的基础资料字段过滤条件调整事件
10.baseDataColumnDependFieldSet 设置常用过滤的基础资料依赖字段
11.setCellFieldValue 设置单元格指令
四、单据转换插件
initVariable | 初始化变量事件 | 用来增加一些必要的变量 |
afterBuildQueryParemeter | 构建取数参数后事件 | 添加额外的字段、过滤条件 |
beforeBuildRowCondition | 编译数据筛选条件前事件 | 取消或增加自定义过滤条件 |
beforeGetSourceData | 取源单数据前事件 | 修改取数语句和取数条件 |
afterGetSourceData | 取源单数据后事件 | 根据源单数据获取其他定制数据,或替换系统获取到的数据 |
beforeBuildGroupMode | 构建分单、行合并模式之前事件 | 可更改分单合并策略及依赖字段 |
beforeCreateTarget | 只在选单时触发 | 获取到现有的目标单数据包进行定制处理 |
afterCreateTarget | 只在下推时触发 | |
afterFieldMapping | 目标字段赋值完毕后事件 | 对目标单字段值进行修订、计算、汇总等 |
beforeCreateLink | 记录关联关系前事件 | 可取消记录关联关系 |
afterCreateLink | 记录关联关系后事件 | 根据源单信息重新计算目标单据其它非转换携带字段的逻辑 |
afterConvert | 单据转换完毕事件,最后执行 | 对生成的目标单据数据进行最后的调整 |
五、单据反写插件
beforeTrack 本关联主实体全部关联记录前,取消关联、反写
beforeCreateArticulationRow 本关联主实体,单行数据与源单的关联记录前,取消本行的关联、反写
beforeExecWriteBackRule 开始分析反写规则,计算反写量前,取消当前反写规则的执行!
afterCalcWriteValue 基于下游单据当前行,反写值计算完毕后,修正反写量,调整对各源单行的分配量
afterCommitAmount 执行反写规则,把当前反写量反写到源单行之后,对源单行进行连锁更新。
beforeExcesscheck 对源单反写完毕,超额检查,可取消超额检查。
afterExcessCheck 超额检査完毕后,控制是否中止反写、提示超额,修正提示内容
六、报表取数插件
事件 | 说明 |
query | query事件用于对数据列操作 |
getColumns | getColumns事件里可以对指定的列属性修改 |
报表界面插件
方法 | 说明 |
filterContainerInit | 初始化过滤容器触发方法 |
filterContainerBeforeF7Select | 过滤容器内F7弹出前的处理方法 |
initDefaultQueryParam | 初始化默认查询参数 |
processRowData | 行数据处理 说明:参数gridPK为表格控件标识,参数rowData为一页数据,参数queryParam为查询参数 |
packageData | 打包数据给前端时触发 |
formatDisplayFilterField | 格式化主界面显示的筛选过滤字段信息 |
verifyQuery | 查询前条件验证 |
beforeQuery | 查询前置处理 |
afterQuery | 查询后置处理 |
afterCreateColumn | 表格列创建完成后置事件 |
七、打印
beforeLoadData事件:读取数据前,取消系统默认的读取数据的动作。
customPrintDataEntities事件:对系统读取的数据集进行加工或者构造自定义数据包,打印自定义的字段,重新提供数据
beforeOuputElement事件:设置自定义控件不打印
afterOutputElement事件:调样式,根据控件值不同,打印不同样式
addDynamicColumns:一列分多列
八、引入引出
resolveExcel解折excel,并将数据放入缓存队列
importData 从队列分批取数
initlmportData 初始化导入数据
执行Save导入数据;引入失败可以自定义设置引入日志
beforelmportData后保存到数据模型执行:引入数据填写之前触发的事件。批量处理时,每张单据触发一次:插件可以对本次引入的源单数报包,进行修订;或者取消本单引入
afterlmportData后保存到数据库;引入数据填写完毕之后,保存数据到数据模型,保存数据库前触发的事件,批量处理时,每张单据触发一次
,可在此事件进行单据的关联操作(建立关联关系,联查,反写等)
IDataModel提供的常用方法
getDataEntityType* 获取运行时表单实体元数据对象,又称为主实体模型
getProperty*获取运行时字段元数据对象,又称为实体的属性对象
createNewData 根据表单主实体模型,创建表单新的数据包,字段填写好默认值
getDataEntity*获取表单数据包
updateCache *提交当前表单数据包到缓存