1、常用方法

  1. getView 获取动态表单界面视图模型接口IFormView的实例
  2. getModel 获取动态表单界面数据模型接口IDataModel的实例
  3. getPageCache 获取页面缓存管理器,存取数据到缓存中
  4. getControl 获取界面上的控件 addClickListeners 注册插件,监听按钮点击事件
  5. 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、常用表单插入事件

  1. preOpenForm
    时机:系统收到showForm指令,显示界面前,准备构建界面显示参数时,触发此事件。
    场景:此事件触发时,新界面还没有显示出来,可以在此事件,取消界面的显示,或者修改显示参数。

  2. 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);}}
}

苍穹插件常用事件与方法相关推荐

  1. video 元素自定义 controls 控件以及常用事件、方法

    video 元素自定义 controls 控件以及常用事件 属性参考 隐藏控件 隐藏播放器右下角三个点 自定义播放速度 阻止默认的全屏和暂停 自定义全屏播放 常用事件 常用属性和方法 <vide ...

  2. 百度地图的常用事件和方法

    1.滚轮缩放     map.enableScrollWheelZoom();   //启用滚轮放大缩小,默认禁用     map.enableContinuousZoom();    //启用地图惯 ...

  3. jquery项目中一些比较常用的简单方法

     1:选择器//这两个都是选择input中被选中的空间,但是在IE中$("#child input:checked")有可能还会选中text控件 $("#child in ...

  4. 夺命雷公狗jquery---18jquery中常用属性(方法)

    <!DOCTYPE html> <html><head><meta charset="utf-8"><title>< ...

  5. Visual Event插件----查看html元素绑定的事件与方法的利器

    WEB标准提倡结构.表现和行为相 分离,现在越来越多采用这种表现和行为的方式,但它也为我们开发调试带来一些问题,网页载入一堆JavaScript,,我们很难搞清楚最后在哪些元素的哪个动作绑定了事件,尤 ...

  6. 查看html元素绑定的事件与方法 visual Event 插件

    WEB标准提倡结构.表现和行为相 分离,现在越来越多采用这种表现和行为的方式,但它也为我们开发调试带来一些问题,网页载入一堆JavaScript,,我们很难搞清楚最后在哪些元素的哪个动作绑定了事件,尤 ...

  7. Ajax--概述、xhr对象的常用属性和方法、xhr的常用事件、xhr对象发送POST请求、xhr对象发送GET请求、xhr对象的兼容性问题、数据交换格式(XML、JSON)

    一.概述 1.1 发展历程 在开始之前先来看一下Ajax的工作原理吧,如下图所示: Ajax全称Asynchronous javascript and xml(异步 JavaScript 和 XML) ...

  8. JavaScript常用事件+方法

    javascript常用事件onclick 单击 ondblclick 双击 onfocus 元素获得焦点 onblur 元素失去焦点 onmouseover 鼠标移到某元素之上 onmouseout ...

  9. vb中mshflexgrid每格宽度_VB中MSHFLEXGRID常用的属性,方法事件

    1)  MSHFLEXGRID的重要属性. MSHFLEXGRID的属性非常多,其实绝大部分的属性和网格的显示的外观有关.在MSDN里,这些属性足以将人搞得眼花缭乱的了(我相信你没有耐性一个一个地翻查 ...

最新文章

  1. 0基础小白学好JAVA的5个方法
  2. android 漂亮的表单界面,面向ArcGIS for Android的表单界面生成器的设计与实现
  3. 机票垂直搜索引擎的性能优化
  4. oracle++dtcol,Oracle 中的 Incarnation 到底是个什么?实验操作篇
  5. Hibernate中Java对象的生命周期
  6. 【OpenCL开发入门】01 - 搭建Visual Studio 2022+OpenCL开发环境
  7. 计算机禁止安装游戏软件,禁止游戏软件(游戏控制软件)
  8. VC中的_variant_t和_bstr_t
  9. 本地Remix与私链节点相连
  10. 深度:嵌入式系统的软件架构设计
  11. 关于怎么在图片里加边框,这几个好用软件就能实现
  12. RED GIANT-2023版本更新内容介绍
  13. win7打开计算机一片空白,Win7系统打开文件夹查看选项发现一片空白怎么办
  14. 最新PHP编程零基础入门项目实战教程(完整)
  15. arcpy.mapping-认识arcpy.mapping
  16. 微信小程序 · 页面分享
  17. 英语学习笔记(二)语法
  18. Web数据流的一生——从前端界面到后端数据,以及万级QPS的后台服务搭建
  19. Unity 相机跟随(第三人称视角)
  20. NAT网络与内网穿透详解

热门文章

  1. Python3.6实现图片转文字
  2. 关于注册校验和密钥生成软件问题
  3. 2022最新oneNav导航系统源码全开源版本下载总裁导航
  4. python爬虫系列(一):爬虫简介
  5. 一套系统让打工人瑟瑟发抖,监控员工离职动态。
  6. LeetCode刷题遇到的小知识点总结
  7. 明日之后营地14庄中式风房子上线,网友:都是氪金大佬
  8. 【Unity Shader】关于Stencil的理解小记
  9. Innosetup安装界面美化卸载界面美化
  10. 开篇的个人感想和想法