苍穹插件常用事件与方法
1、常用方法
- getView 获取动态表单界面视图模型接口IFormView的实例
- getModel 获取动态表单界面数据模型接口IDataModel的实例
- getPageCache 获取页面缓存管理器,存取数据到缓存中
- getControl 获取界面上的控件 addClickListeners 注册插件,监听按钮点击事件
- addItemClickListeners 注册插件,监听子菜单项点击事件
2、设置默认值
//key为修改组件的编号,value修改后的值
this.getModel().setValue("key",value);
3、获取创建人userId和部门Id
String userId = RequestContext.get().getUserId();
long deptId = UserServiceHelper.getUserMainOrgId(Long.valueOf(userId));
4、常用表单插入事件
preOpenForm
时机:系统收到showForm指令,显示界面前,准备构建界面显示参数时,触发此事件。
场景:此事件触发时,新界面还没有显示出来,可以在此事件,取消界面的显示,或者修改显示参数。registerListener
时机:用户与界面上的控件进行交互时,即会触发此事件。
场景:建议在此事件,侦听各个控件的插件事件
public class RegisterListenerSample extends AbstractFormPlugin implements ItemClickListener, ClickListener, RowClickEventListener, TreeNodeClickListener {private final static String KEY_MBAR = "tbmain";private final static String KEY_BARITEM1 = "baritem1";private final static String KEY_BUTTON1 = "buttonap1";private final static String KEY_ENTRYENTITY = "entryentity";private final static String KEY_TREEVIEW1 = "treeviewap1";@Overridepublic void registerListener(EventObject e) {super.registerListener(e);// 侦听各控件的插件事件,传入实现了事件接口的插件实例// 主菜单按钮点击Toolbar mbar = this.getView().getControl(KEY_MBAR);mbar.addItemClickListener(this);// 按钮点击Button button = this.getView().getControl(KEY_BUTTON1);button.addClickListener(this);// 单据体行点击EntryGrid entryGrid = this.getView().getControl(KEY_ENTRYENTITY);entryGrid.addRowClickListener(this);// 树型控件点击TreeView treeView = this.getView().getControl(KEY_TREEVIEW1);treeView.addTreeNodeClickListener(this);}@Overridepublic void itemClick(ItemClickEvent evt) {super.itemClick(evt);if (StringUtils.equals(KEY_BARITEM1, evt.getItemKey())){// 事件处理代码略过}}@Overridepublic void click(EventObject evt) {super.click(evt);Control source = (Control)evt.getSource();if (StringUtils.equals(KEY_BUTTON1, source.getKey())){// 事件处理代码略过}}@Overridepublic void entryRowClick(RowClickEvent evt) {Control source = (Control) evt.getSource();if (StringUtils.equals(KEY_ENTRYENTITY, source.getKey())){// 事件处理代码略过}}@Overridepublic void treeNodeClick(TreeNodeEvent evt) {// 事件处理代码略过TreeView treeView = (TreeView)evt.getSource();if (StringUtils.equals(KEY_TREEVIEW1, treeView.getKey())){// 事件处理代码略过}}
}
5、createNewData
时机:界面初始化或刷新,开始新建数据包时触发此事件;
场景:插件可以在此事件,自行创建界面数据包传回给系统,跳过系统内置的数据包创建过程。
1. 需要由外部传入完整地界面数据包,显示在界面上:就可以在此事件,先读取传入的数据包,然后传回表单,替代系统创建数据包的过程;
2. 动态添加字段时,系统内置创建的数据包,没有新字段的值,需要自行创建界面数据包;
6、afterCreateNewData
时机:界面初始化或刷新,新建表单数据包成功,并给字段填写了默认值之后,触发此事件;
场景:插件可以在此事件,重设字段的默认值。
7、beforeBindData
时机:面数据包构建完毕,开始生成指令,刷新前端字段值、控件状态之前,触发此事件;
场景:插件可以在此事件中,调整后台视图模型(IFormView)中的字段、控件属性,间接控制前端界面字段值、控件状态
特别说明:
本事件与afterCreateNewData事件的区别:
- 本事件比afterCreateNewData事件晚触发;
- 适合在afterCreateNewData事件中,修改数据模型中的字段值:
- 在afterCreateNewData改变字段值,数据修改标志为false;退出时,不会提示数据被修改;而在此事件中修改字段值,数据修改标志为true,退出时系统可能会提示数据被修改。
- 适合在beforeBindData中,调整视图模型中的控件属性;
- 单据界面插件,afterCreateNewData不是必然会被触发(与afterLoadData互斥),而beforeBindData必然触发
本事件与afterBindData事件的差别:
- 本事件比afterBindData早触发:在本事件之后,系统会调用内置的字段值绑定过程,随后才会触发afterBindData事件;
- beforeBindData事件,适合设置字段、控件的属性,以间接的控制前端字段值、控件状态的刷新过程;
- 在beforeBindData事件中设置控件状态会没有效果,因为系统随后会清空所有控件的状态;
- afterBindData事件,适合直接设置控件在前端表现的内容、状态;
8、afterBindData
时机:界面数据包构建完毕,生成指令,刷新前端字段值、控件状态之后,触发此事件;
场景:插件可以在此事件,根据各字段值数据,重新设置控件、字段的可用、可见性等。
注意:不要在此事件,修改字段值!
9、beforeItemClick
时机:用户点击菜单按钮后,在执行按钮绑定的操作前,触发此事件;
场景:插件可以在此事件,取消菜单绑定的操作;
import java.util.EventObject;import kd.bos.dataentity.utils.StringUtils;
import kd.bos.form.control.events.BeforeItemClickEvent;
import kd.bos.form.plugin.AbstractFormPlugin;public class BeforeItemClick extends AbstractFormPlugin {private final static String KEY_MAINBAR = "tbar_main";//菜单标识private final static String KEY_BARITEM_NEW = "baritem_new";//按钮标识@Overridepublic void registerListener(EventObject e) {super.registerListener(e);// 侦听主菜单按钮点击事件this.addItemClickListeners(KEY_MAINBAR);}@Overridepublic void beforeItemClick(BeforeItemClickEvent evt) {if (StringUtils.equals(KEY_BARITEM_NEW, evt.getItemKey())){// TODO 在此添加业务逻辑}}
}
10、itemClick
时机:用户点击菜单项时,触发此事件;
场景:插件可以在此响应自定义菜单项的点击处理。
import java.util.EventObject;import kd.bos.dataentity.utils.StringUtils;
import kd.bos.form.control.events.ItemClickEvent;
import kd.bos.form.plugin.AbstractFormPlugin;public class ItemClick extends AbstractFormPlugin {private final static String KEY_MAINBAR = "tbar_main";//菜单标识private final static String KEY_BARITEM_NEW = "baritem_new";//按钮标识@Overridepublic void registerListener(EventObject e) {super.registerListener(e);// 侦听主菜单按钮点击事件this.addItemClickListeners(KEY_MAINBAR);}@Overridepublic void itemClick(ItemClickEvent evt) {super.itemClick(evt);if (StringUtils.equals(KEY_BARITEM_NEW, evt.getItemKey())){// TODO 在此添加业务逻辑}}
}
11、beforeDoOperation
时机:用户点击按钮、菜单,执行绑定的操作逻辑前,触发此事件
场景:1、提示确认信息;2、校验数据,取消操作的执行;3、传递给自定义操作参数给操作服务、操作插件;
表单beforeDoOperation事件与操作校验器的区别:
1、运行时机不同
- 表单beforeDoOperation事件, 是由表单触发的,只有在表单上执行操作时,才会被触发;后台直接操作服务,不会触发此事件;数据校验放在这个事件,有可能漏过;
- 操作校验器,是由微服务层操作引擎执行的,不管是在表单上执行操作,还是后台调用操作服务,都会执行微服务层操作引擎,都会执行操作校验器;
2、适用操作类型不同
- 操作分为两种大类:表单操作:对界面进行处理,如关闭界面;实体操作:更新数据库,如保存;
- 只有实体操作,才允许配置操作校验
- 对普通的表单操作进行数据校验,只能使用表单插件beforeDoOperation事件;
3、控制颗粒度不同
- 批量操作时,操作校验器,对批量数据进行逐个校验,略过校验失败的数据,继续执行校验成功数据;
- 表单beforeDoOperation事件,只能整体取消操作,不能对批量数据进行区分;
注意:对操作进行数据校验,尽可能配置操作校验器、或使用操作插件,而不是使用表单beforeDoOperation事件。
public class BeforeDoOperation extends AbstractFormPlugin {final static String KEY_OPKEY = "myoperation";//操作标识@Overridepublic void beforeDoOperation(BeforeDoOperationEventArgs args) {super.beforeDoOperation(args);FormOperate formOperate = (FormOperate)args.getSource(); if ( StringUtils.equals(KEY_OPKEY, formOperate.getOperateKey())){// TODO 在此添加业务逻辑//取消操作args.setCancel(true);}}
}
苍穹插件常用事件与方法相关推荐
- video 元素自定义 controls 控件以及常用事件、方法
video 元素自定义 controls 控件以及常用事件 属性参考 隐藏控件 隐藏播放器右下角三个点 自定义播放速度 阻止默认的全屏和暂停 自定义全屏播放 常用事件 常用属性和方法 <vide ...
- 百度地图的常用事件和方法
1.滚轮缩放 map.enableScrollWheelZoom(); //启用滚轮放大缩小,默认禁用 map.enableContinuousZoom(); //启用地图惯 ...
- jquery项目中一些比较常用的简单方法
1:选择器//这两个都是选择input中被选中的空间,但是在IE中$("#child input:checked")有可能还会选中text控件 $("#child in ...
- 夺命雷公狗jquery---18jquery中常用属性(方法)
<!DOCTYPE html> <html><head><meta charset="utf-8"><title>< ...
- Visual Event插件----查看html元素绑定的事件与方法的利器
WEB标准提倡结构.表现和行为相 分离,现在越来越多采用这种表现和行为的方式,但它也为我们开发调试带来一些问题,网页载入一堆JavaScript,,我们很难搞清楚最后在哪些元素的哪个动作绑定了事件,尤 ...
- 查看html元素绑定的事件与方法 visual Event 插件
WEB标准提倡结构.表现和行为相 分离,现在越来越多采用这种表现和行为的方式,但它也为我们开发调试带来一些问题,网页载入一堆JavaScript,,我们很难搞清楚最后在哪些元素的哪个动作绑定了事件,尤 ...
- Ajax--概述、xhr对象的常用属性和方法、xhr的常用事件、xhr对象发送POST请求、xhr对象发送GET请求、xhr对象的兼容性问题、数据交换格式(XML、JSON)
一.概述 1.1 发展历程 在开始之前先来看一下Ajax的工作原理吧,如下图所示: Ajax全称Asynchronous javascript and xml(异步 JavaScript 和 XML) ...
- JavaScript常用事件+方法
javascript常用事件onclick 单击 ondblclick 双击 onfocus 元素获得焦点 onblur 元素失去焦点 onmouseover 鼠标移到某元素之上 onmouseout ...
- vb中mshflexgrid每格宽度_VB中MSHFLEXGRID常用的属性,方法事件
1) MSHFLEXGRID的重要属性. MSHFLEXGRID的属性非常多,其实绝大部分的属性和网格的显示的外观有关.在MSDN里,这些属性足以将人搞得眼花缭乱的了(我相信你没有耐性一个一个地翻查 ...
最新文章
- 0基础小白学好JAVA的5个方法
- android 漂亮的表单界面,面向ArcGIS for Android的表单界面生成器的设计与实现
- 机票垂直搜索引擎的性能优化
- oracle++dtcol,Oracle 中的 Incarnation 到底是个什么?实验操作篇
- Hibernate中Java对象的生命周期
- 【OpenCL开发入门】01 - 搭建Visual Studio 2022+OpenCL开发环境
- 计算机禁止安装游戏软件,禁止游戏软件(游戏控制软件)
- VC中的_variant_t和_bstr_t
- 本地Remix与私链节点相连
- 深度:嵌入式系统的软件架构设计
- 关于怎么在图片里加边框,这几个好用软件就能实现
- RED GIANT-2023版本更新内容介绍
- win7打开计算机一片空白,Win7系统打开文件夹查看选项发现一片空白怎么办
- 最新PHP编程零基础入门项目实战教程(完整)
- arcpy.mapping-认识arcpy.mapping
- 微信小程序 · 页面分享
- 英语学习笔记(二)语法
- Web数据流的一生——从前端界面到后端数据,以及万级QPS的后台服务搭建
- Unity 相机跟随(第三人称视角)
- NAT网络与内网穿透详解