Form
Form二次开发用于根据GOT的Form自动渲染的画面以及画面控件交互进行二次开发,织入代码逻辑实现业务控制。二次开发类型根据B/.S架构范式划分为服务端二次开发、客户端二次开发两种模式。服务端二次开发用于常规交互控制以及业务逻辑处理为主要场景;客户端二次开发用于在平台组件渲染效果不满足业务需求时,通过二次开发个性化界面渲染效果为主要场景。在实际的项目过程基于企业管理系统的特点,绝大部分以服务端二次开发为主即可满足业务要求,针对小部分页面存在特定页面渲染要求时涉及到客户端二次开发。
通过对企业业务系统交互行为的归纳总结,提出了客户端行为反向控制开发模式,将常规开发模式下需要在前端用JS编写的代码逻辑通过在后端用Java进行编写替代,以降低对人员技能的要求和沟通成本。基于此开发模式,所有二次开发都存在CommandArg入参和CommandResult出参,CommandArg代表用户客户端的上下文对象,用于在二次代码中获取用户端界面上下文数据(例如:当前记录、选中记录、画面打开参数等),CommandResult代表二次开发返回的在客户端执行的行为效果(例如:刷新记录、弹出信息提示框)。
基于数据量、网络带宽对页面响应时间的影响,根据不同二次开发方法的执行时机与应用场景,不同的二次开发方法的CommandArg实际携带数据存在区别,当CommandArg默认携带数据不满足业务场景需求时,可以通过在二次开发方法上增加CommandArgOption注解调整CommandArg实际数据内容,具体CommandArgOption用法参见 CommandArgOption
基于服务端二次开发的应用场景与频率,本章节以下所描述方法均为服务端二次开发方法。
beforeInit
beforeInit方法在每个用户端打开画面过程中的控件渲染之前执行,一般用于在界面渲染前对画面控件进行调整(例如:根据登录账户调整界面控件的可见性),默认情况下只每个客户端第一次打开画面时执行。
方法签名
public CommandResult beforeInit(CommandArg arg)
方法入参
- CommandArg arg:用户端上下文对象。
- 默认CommandArgOption配置:prefetch=true, editors=all, groups=current(cr,sr), joinGroup=yes
示例代码
@Override
public CommandResult beforeInit(CommandArg arg) {
CommandResult result = new CommandResult();
//除去管理员 之外 隐藏 画面上 BirthDate 输入框
//注意 _BirthDate 是FormItemEditor名字的引用
if(UserSession.current().getUserGroups().contains("admin")) {
//设置画面上元素的可见性 为true
result.updateControlVisible(_BirthDate, true);
}else{
//设置画面上元素的可见性 为false
result.updateControlVisible(_BirthDate, false);
}
return result;
}
afterInit
afterInit方法在每个用户端打开画面过程中的控件渲染之后执行,在beforeInit()之后,一般用于打开画面时做数据过滤(例如:根据传入的窗体参数 过滤指定数据源数据),默认情况下只每个客户端每次打开画面时执行。
方法签名
public CommandResult afterInit(CommandArg arg)
方法入参
- CommandArg arg:用户端上下文对象。
- 默认CommandArgOption配置:prefetch=false, editors=all, groups=current(fq), joinGroup=yes
示例代码
@Override
public CommandResult afterInit(CommandArg arg) {
CommandResult result = new CommandResult();
//根据传入的窗体参数 过滤指定数据源数据
String salesPickingId = arg.formParam.paramString;
QueryTable qt = arg.getFormQuery();
qt.findOrCreateWhereItem(SalesPickingLine._SalesPickingId,QueryWhereStatus.Hide).
setValue(salesPickingId);
qt.findOrCreateWhereItem(SalesPickingLine._Closed, QueryWhereStatus.Hide).setValue(false);
result.updateQuery(qt);
return result;
}
formClosing
formClosing方法在每个用户端关闭画面过程中执行,一般用于关闭画面时提醒(例如:关闭画面时提醒 记得去报工功能处报工)
方法签名
public CommandResult formClosing(CommandArg arg)
方法入参
- CommandArg arg:用户端上下文对象。
- 默认CommandArgOption配置:prefetch=false, editors=all, groups=current(cr,sr), joinGroup=yes
示例代码
@Override
public CommandResult formClosing(CommandArg arg) {
CommandResult result = new CommandResult();
result.fadeInfo("请记得前往【报工画面】下 确认报工");
result.doCloseForm();
return result;
}
[!IMPORTANT]
doCloseForm——强制关闭画面,不再触发formClosing方法
formClosed
formClosed方法在每个用户端关闭画面后执行
方法签名
public void formClosed(CommandArg arg)
方法入参
- CommandArg arg:用户端上下文对象。
- 默认CommandArgOption配置:prefetch=false, editors=all, groups=current(cr,sr), joinGroup=yes
示例代码
@Override
public void formClosed(CommandArg arg) {
super.formClosed(arg);
}
buttonOK_
buttonOK_ 方法在每个用户端画面单击对应按钮时执行 此按钮方法拓展性较多 如 打开其他菜单画面
方法签名
//下划线(_) 后面 跟Form 上 FormItemButton 的 名字(英文)
public CommandResult buttonOK_(CommandArg arg)
方法入参
- CommandArg arg:用户端上下文对象。
- 默认CommandArgOption配置:prefetch=false, editors=all, groups=current(cr,sr), joinGroup=yes
示例代码
public CommandResult buttonOK_Button(CommandArg arg) {
CommandResult result = new CommandResult();
//获取到当前选中记录的数据库记录
SalesPackingTable salesPackingTable = (SalesPackingTable) arg.getCurrentRecordOrig();
if(salesPackingTable != null){
//构造 OpenFormArg 对象
OpenFormArg openFormArg = new OpenFormArg();
//执行MeunItemId
openFormArg.menuItemId = GOTHelper.getEntityId(MenuItem_Fetch_RecoilSales.class);
//打开画面传入产生
openFormArg.setParamObject(salesPackingTable.getRecId());
//执行openForm命令打开画面
result.openForm(openFormArg);
}
return result;
}
dialogOK_
dialogOK_ 方法在每个用户端用代码构造的Dialog弹框上 确认按钮点击时执行 一般获取Dialog弹框上的用户输入的值然后执行逻辑(例如:获取到用户输入的名称 修改对应用户记录)
方法签名
//下划线(_) 后面 跟 代码构造的 Dialog 的 Id
public CommandResult dialogOK_(CommandArg arg)
方法入参
- CommandArg arg:用户端上下文对象。
- 默认CommandArgOption配置:prefetch=false, editors=all, groups=current(cr,sr), joinGroup=yes
示例代码
public CommandResult dialogOK_title(CommandArg arg) {
CommandResult result = new CommandResult();
//从arg 里获取Dialog上Editor的值
String id = arg.getDialogFieldValue("id").toString();
//从arg 里获取Dialog上Editor的值
String name = arg.getDialogFieldValue("name").toString();
//开启事务
GongqiSession.ttsbegin();
//根据ID获取SysUser
SysUser sysUser = DAOHelper.findRecord(SysUser.class, SysUser._UserId,id,true);
//修改名称
sysUser.setUserName(name);
//更新用户记录
sysUser.update();
//提交事务
GongqiSession.ttscommit();
return result;
}
dialogCancel_
dialogCancel_ 方法在每个用户端用代码构造的Dialog弹框上 取消按钮点击时执行 (例如:关闭父画面)
方法签名
//下划线(_) 后面 跟 代码构造的 Dialog 的 Id
public CommandResult dialogCancel_(CommandArg arg)
方法入参
- CommandArg arg:用户端上下文对象。
- 默认CommandArgOption配置:prefetch=false, editors=all, groups=current(cr,sr), joinGroup=yes
示例代码
public CommandResult dialogCancel_title(CommandArg arg) {
CommandResult result = new CommandResult();
//新建一个父画面的CommandResult对象
CommandResult parenetResult = new CommandResult();
//执行关闭画面
parenetResult.doCloseForm();
//父画面执行CommandResult命令
result.parentCmdResult(parenetResult);
return result;
}
modifiedEditor_
modifiedEditor_方法在每个用户端 无数据源的Editor的值发生改变时,触发此方法 常用于根据某无数据源的Editor的值发生改变时,改变其他Editor的值(例如:根据 实时生效 字段的 勾选情况 控制 画面上 日期字段的编辑性 和值)
方法签名
//下划线(_) 后面 跟Form 上 FormItemEditor 的 名字(英文)
public CommandResult modifiedEditor_(CommandArg arg, Object oldValue, Object newValue)
方法入参
- CommandArg arg:用户端上下文对象。
- 默认CommandArgOption配置:prefetch=false, editors=all, groups=current(cr,sr), joinGroup=yes
- Object oldValue:修改前的值
- Object newValue:修改后的值
示例代码
public CommandResult modifiedEditor_BulEditor(CommandArg arg, Object oldValue, Object newValue) {
CommandResult result = new CommandResult();
Boolean isRealTime = (Boolean)newValue;
if(!isRealTime){
//利用SysDateHelper帮助类写入今天日期
result.writeEditor(_InvoicDate, SysDateHelper.today());
//控制 编辑框的可编辑性
result.updateControlAllowEdit(_InvoicDate, true);
}else{
result.writeEditor(_InvoicDate, SysDateHelper.dateNull());
result.updateControlAllowEdit(_InvoicDate, false);
}
return result;
}
openLookup_
openLookup_ 方法在每个用户端无数据源的Editor打开下拉列表的时候,触发此方法。常用于控制下拉列表中显示的列数(也可以是自定义下拉画面)以及返回方式(例如:下拉列表构造课程编号和课程名称)
方法签名
//下划线(_) 后面 跟Form 上 FormItemEditor 的 名字(英文)
public CommandResult openLookup_(CommandArg arg, Object oldValue, Object newValue)
方法入参
- CommandArg arg:用户端上下文对象。
- 默认CommandArgOption配置:prefetch=false, editors=all, groups=current(cr,sr), joinGroup=yes
示例代码
public CommandResult openLookup_CourseId(CommandArg arg) {
CommandResult result = new CommandResult();
FormLookup formLookup = new FormLookup ();
formLookup.addColumn (Course._CourseId).setDisplayLength(10);
formLookup.addColumn (Course._CourseName).setDisplayLength(10);
formLookup.addReturnField(Course._CourseId,_CourseId);
formLookup.addReturnField(Course._CourseName,_CourseName);
result.openLookup(formLookup);
//也可以打开一个自定义下拉画面(如果是自定义下拉画面,则不触发lookup_方法,需要过滤数据的应在自定义下拉画面写 lookupRefresh方法)
//result.openLookup(Form_FormLookup_Course2.class);
return result;
}
lookup_
lookup_方法在每个用户端 无数据源的Editor打开下拉列表后(下拉列表非自定义下拉画面)的时候,触发此方法。常用于控制下拉列表中显示哪些数据,可对原数据源中数据进行过滤,也可通过FormDataSourceGroupResult的setResult方法直接给下拉列表赋值(例如:根据QueryTable 过滤ItemSizeTable的 ItemId 字段是 当前记录的ItemId 值的记录)
方法签名
//下划线(_) 后面 跟Form 上 FormItemEditor 的 名字(英文)
public void lookup_(CommandArg arg, String baseValue, QueryTable qt, FormDataSourceGroupResult result)
方法入参
CommandArg arg:用户端上下文对象。
- 默认CommandArgOption配置:prefetch=false, editors=none, groups=none, joinGroup=no
String baseValue:下拉字段的值
- QueryTable qt:下拉画面对应的查询对象 QueryTable
- FormDataSourceGroupResult result:返回给客户端的 CommandResult 一般用 setResult方法直接给下拉列表赋值
示例代码
//构造一个自定义下拉列表返回数据是 Year
public void lookup_YearData(CommandArg arg, String baseValue, QueryTable qt, FormDataSourceGroupResult result) {
List <Map <String ,Object >> list = new ArrayList <Map <String ,Object >>();
Calendar date = Calendar.getInstance ();
int year =date.get (Calendar.YEAR );
int i ;
for (i =year-5 ;i <year+5 ;i ++){
Map <String,Object > map = new HashMap<String ,Object >();
map.put ( "Year",Integer.valueOf (i).toString ());
list.add (map );
}
//设置 下拉列表的数据 是 list
result.setResult (list );
}
lookupRefresh
lookupRefresh 方法在每个用户端 自定义下拉画面被打开时触发 一般用于控制自定义下拉画面的数据过滤。此方法写在对应的自定义下拉画面上(例如:下拉过滤掉用户不是有效的)
方法签名
public CommandResult lookupRefresh(CommandArg arg, String baseTableName, GongqiRecord baseRecord,
String filterFieldName, String baseFilter, QueryTable queryTable)
方法入参
CommandArg arg:用户端上下文对象。
- 默认CommandArgOption配置: prefetch=false,editors=all,groups=current(cr,sr),joinGroup=yes
String baseTableName:主画面表名
- GongqiRecord baseRecord:主画面当前记录
- String filterFieldNamet:主画面表中打开自定义下拉画面的字段名称
- String baseFilter:主画面当前记录中打开自定义下拉画面字段的当前值
- QueryTable queryTable:下拉画面的查询QueryTable
示例代码
public CommandResult lookupRefresh(CommandArg arg, String baseTableName, GongqiRecord baseRecord,
String filterFieldName, String baseFilter, QueryTable queryTable) {
CommandResult result = new CommandResult();
//设置条件
queryTable.findOrCreateWhereItem(SysUser._SysActive).setValue(true);
//更新查询
result.updateQuery(queryTable)
return result;
}
lookupSelect_
lookupSelect_方法在每个用户端 选择自定义下拉画面中DataGrid某一行记录时触发 一般用于打开自定义下拉画面后选择某一行后,控制数值回填方式 (例如:选中课程后返回课程编号和名称到主画面记录的对应字段上)
方法签名
//下划线(_) 后面 跟 Form 上 FormItemDataGird 的名字(英文)
public CommandResult lookupSelect_(CommandArg arg)
方法入参
- CommandArg arg:用户端上下文对象。
- 默认CommandArgOption配置: prefetch=false,editors=all,groups=current(cr,sr),joinGroup=yes
示例代码
public CommandResult lookupSelect_DataGrid(CommandArg arg) {
CommandResult result = new CommandResult();
List<FormLookupReturnField > list = new ArrayList <FormLookupReturnField >();
//FormLookupReturnField 画面 返回对象 第一个参数是 从字段 第二个参数 到字段 效果为 例如 从课程表的课程字段 到 学生信息的课程字段
list.add ( new FormLookupReturnField (Course._CourseId,StudentInfo._CourseId));
list.add ( new FormLookupReturnField (Course._CourseName,StudentInfo._CourseName));
result.lookupReturn (list );
return result;
}
mainForm_
mainForm_方法在每个用户端在无数据源的Editor右键进入主表时触发此方法。一般用于用于控制进入主表时打开哪个画面。没有设置MainForm的无数据源的Editor,复写了mainForm方法,也可以进入方法中指定的主表(例如:画面上无数据源的学生姓名字段 右键进入学生画面)
方法签名
//下划线(_) 后面 跟 Form 上 FormItemEditor 的名字(英文)
public OpenMainFormArg mainForm_(CommandArg arg, OpenMainFormArg openMainFormArg)
方法入参
- CommandArg arg:用户端上下文对象。
- 默认CommandArgOption配置: prefetch=false,editors=all,groups=current(cr,sr),joinGroup=yes
- OpenMainFormArg openMainFormArg:进入主表窗体参数可对里面的属性进行配置 如menuItemId 等
示例代码
@CommandArgOption(editors = "all")
public OpenMainFormArg mainForm_(CommandArg arg, OpenMainFormArg openMainFormArg) {
//MenuItem节点的Id
openMainFormArg.menuItemId =GOTHelper.getEntityId (MenuItem_Student.class )
StringKeyValue kv = new StringKeyValue ();
//进入的主表的过滤字段
kv.key = "ItemId" ;
//过滤的字段值
kv.value = arg.getEditorValue(_Name) ;
openMainFormArg.mainFormWhereValues = new Object []{kv };
return openMainFormArg ;
}
dataTip_
dataTip_ 方法在每个用户端在无数据源的Editor标悬停时触发,一般于获取鼠标悬停时显示的文本(例如:输入密码字段时 悬浮提醒 包含大小写和中文数字)
方法签名
//下划线(_) 后面 跟 Form 上 FormItemEditor 的名字(英文)
public String dataTip_(CommandArg arg)
方法入参
- CommandArg arg:用户端上下文对象。
- 默认CommandArgOption配置: prefetch=false,editors=all,groups=current(cr,sr),joinGroup=yes
示例代码
public String dataTip_Password(CommandArg arg) {
return "注意必须包含:大小写英文字母和数字";
}
linkActive
linkActive方法在每个用户端 父画面切换记录时,触发子画面的linkActive方法。例如,A画面打开B画面,A画面数据源切换记录时,触发B画面中的linkActive方法(例如:切换时 根据A画面的数据 过滤B画面的数据)
方法签名
public CommandResult linkActive(CommandArg arg)
方法入参
- CommandArg arg:用户端上下文对象。
- 默认CommandArgOption配置: prefetch=false,editors=all,groups=current(cr,sr),joinGroup=yes
示例代码
@CommandArgOption(groups="all(fq)")
public CommandResult linkActive(CommandArg arg) {
CommandResult result = new CommandResult();
//根据窗体参数 获取到父画面的记录
TableA atable = (TableA)arg.formParam.callerCommandArg.getCurrentRecord();
//获取当前画面数据源的FormQuery
QueryTable formQuery = arg.getFormQuery();
//根据父画面记录 增加where条件
formQuery.findOrCreateWhereItem(TableB._Name).setValue(atable.getName);
//执行查询
result.updateQuery(formQuery);
return result;
}
tabPageChanged_
tabPageChanged_方法在每个用户端画面切换某个标签页的时候触发此方法 一般用于修改画面数据源的可编辑性(例如:切换到TabPage1 时 加载Tabpage 1 内数据 提升数据加载流畅度)
方法签名
//下划线(_) 后面 跟 Form 上 TabPage 的名字(英文)
public CommandResult tabPageChanged_(CommandArg arg)
方法入参
- CommandArg arg:用户端上下文对象。
- 默认CommandArgOption配置: prefetch=false,editors=all,groups=current(cr,sr),joinGroup=yes
示例代码
@CommandArgOption(groups="all(fq)")
public CommandResult tabPageChanged_TabPage1(CommandArg arg) {
CommandResult result = new CommandResult();
//获取数据源的FormQuery
QueryTable formQuery = arg.getFormQuery();
//根据画面上 StringEditor2 的值 过滤 TableB的数据
formQuery.findOrCreateWhereItem(TableB._Name).setValue(arg.getEditorValue(_StringEditor2));
//更新FormQuery 并执行查询
result.updateQuery(formQuery);
return result;
}
pluginRadioItemSelect_
pluginRadioItemSelect_ 方法在每个用户端 画面上,点击PluginRadio某个选项的时候触发此方法 一般用于数据过滤(例如:根据Radio 的值的不同 对反馈信息数据源的数据进行过滤)
方法签名
//下划线(_) 后面 跟 Form 上 Plugin 的名字(英文)
public CommandResult pluginRadioItemSelect_(CommandArg arg)
方法入参
- CommandArg arg:用户端上下文对象。
- 默认CommandArgOption配置: prefetch=false,editors=all,groups=current(cr,sr),joinGroup=yes
示例代码
public CommandResult pluginRadioItemSelect_Radio(CommandArg arg) {
CommandResult result = new CommandResult();
//从arg 里 获取 Editor 值
String radioValue = arg.getEditorValue (_Plugin ).toString();
//获取指定数据源的formquery
QueryTable formQuery = arg.getGroupInfo(Form_Feedback.__DS_Feedback).getFormQuery();
//根据radio 值的不同设置不同的 查询条件
if("resolved".equals(radioValue)) {
formQuery.findOrCreateWhereItem(Feedback._StateName,QueryWhereStatus.Hide).setValue("待评审");
}else if("solved".equals(radioValue)) {
formQuery.findOrCreateWhereItem(Feedback._StateName,QueryWhereStatus.Hide).setValue("待执行");
}else if("dowaited".equals(radioValue)) {
formQuery.findOrCreateWhereItem(Feedback._StateName,QueryWhereStatus.Hide).setValue("待测试");
}else if("waited".equals(radioValue)) {
formQuery.findOrCreateWhereItem(Feedback._StateName,QueryWhereStatus.Hide).setValue("待验收");
}else if("finashed".equals(radioValue)){
formQuery.findOrCreateWhereItem(Feedback._StateName,QueryWhereStatus.Hide).setValue("已完成");
}else {
formQuery.queryWhere.clear();
}
//更新 formQuery 重新执行查询
result.updateQuery(formQuery).setGroup(Form_Feedback.__DS_Feedback);
return result;
}
pluginTreeNodeChange_
pluginRadioItemSelect_ 方法在每个用户端 画面上,单击PluginTree某个节点的时候出发 常用于对其他数据进行过滤
方法签名
//下划线(_) 后面 跟 Form 上 Plugin 的名字(英文)
public CommandResult pluginTreeNodeChange_(CommandArg arg)
方法入参
- CommandArg arg:用户端上下文对象。
- 默认CommandArgOption配置: prefetch=false,editors=all,groups=current(cr,sr),joinGroup=yes
示例代码
@CommandArgOption(groups="current(fq)",joinGroup="yes")
public CommandResult pluginTreeNodeChange_PluginTree(CommandArg arg) {
CommandResult result = new CommandResult();
// 获取选择的树节点
String mColorClassId = (String) arg.argObject;
//获取数据源的 FormQuery
QueryTable qt = arg.getGroupInfo(__DS_MColorTable).getFormQuery();
//根据树节点 值的不同设置不同的 查询条件
if ("root".equals(mColorClassId)) {
qt.findOrCreateWhereItem(MColorTable._MColorClassId, QueryWhereStatus.Hide).setValue("");
} else {
List<String> mColorClassIdList = MColorClass.util().findLeafNodes(mColorClassId);
String _mColorClassId = "";
for (String str : mColorClassIdList) {
_mColorClassId += "," + str;
}
_mColorClassId = StringHelper.isBlank(_mColorClassId) ? "''" : _mColorClassId.substring(1);
qt.findOrCreateWhereItem(MColorTable._MColorClassId, QueryWhereStatus.Hide).setValue ("#in(" + _mColorClassId + ")");
}
//更新 formQuery 重新执行查询
result.updateQuery(qt);
return result;
}
pluginTreeNodeDoubleClick_
pluginTreeNodeDoubleClick_方法在每个用户端 画面上,双击PluginTree某个节点的时候触发
方法签名
//下划线(_) 后面 跟 Form 上 Plugin 的名字(英文)
public CommandResult pluginTreeNodeDoubleClick_(CommandArg arg)
方法入参
- CommandArg arg:用户端上下文对象。
- 默认CommandArgOption配置: prefetch=false,editors=all,groups=current(cr,sr),joinGroup=yes
示例代码
public CommandResult pluginTreeNodeDoubleClick_PluginTree(CommandArg arg) {
CommandResult result = new CommandResult();
//具体业务逻辑
return result;
}
pluginTreeNodeAdd_
pluginTreeNodeAdd_方法在每个用户端 画面上,右键PluginTree某个节点选中新增的时候触发 一般用于新增节点
方法签名
//下划线(_) 后面 跟 Form 上 Plugin 的名字(英文)
public CommandResult pluginTreeNodeAdd_(CommandArg arg)
方法入参
- CommandArg arg:用户端上下文对象。
- 默认CommandArgOption配置: prefetch=false,editors=all,groups=current(cr,sr),joinGroup=yes
示例代码
public CommandResult pluginTreeNodeAdd_PluginTree(CommandArg arg) {
CommandResult result = new CommandResult();
// 获取选择的树节点
String selectedItem = (String )arg.getEditorValue (PluginTree);
Document eselectedItem = null;
try {
eselectedItem = DocumentHelper.parseText(selectedItem );
} catch (DocumentException e ) {
e .printStackTrace ();
}
//新建一个TreeNodeAddArg 对象 进行 新增树节点
TreeNodeAddArg tna = new TreeNodeAddArg ();
tna.id = eselectedItem.getRootElement().attributeValue("id");
Element node = DocumentHelper.createElement("node");
node.addAttribute ("id", "search");
node.addAttribute ("label","研发部");
node.addAttribute ("delete","true");
tna.data = node.asXML();
//新建一个 TreeRefreshArg 用于执行 ADD_NODE 命令操作
TreeRefreshArg ta = new TreeRefreshArg();
ta.arg =tna ;
ta.opr = TreeRefreshArg.ADD_NODE ;
// 执行 刷新树 命令
result.refreshPlugin_Tree (PluginTree,ta);
return result;
}
pluginTreeNodeDelete_
pluginTreeNodeDelete_方法在每个用户端 画面上,右键PluginTree某个节点选中删除的时候触发 一般用于删除节点
方法签名
//下划线(_) 后面 跟 Form 上 Plugin 的名字(英文)
public CommandResult pluginTreeNodeDelete_(CommandArg arg)
方法入参
- CommandArg arg:用户端上下文对象。
- 默认CommandArgOption配置: prefetch=false,editors=all,groups=current(cr,sr),joinGroup=yes
示例代码
public CommandResult pluginTreeNodeDelete_PluginTree(CommandArg arg) {
CommandResult result = new CommandResult();
String selectedItem = (String )arg.getEditorValue(PluginTree);
Document eselectedItem = null;
try {
eselectedItem = DocumentHelper.parseText(selectedItem);
} catch (DocumentException e ) {
e.printStackTrace ();
}
//新建一个 TreeRefreshArg 对象 指定DELETE_NODE命令
TreeRefreshArg ta = new TreeRefreshArg ();
ta.arg =eselectedItem.getRootElement().attributeValue("id");
ta.opr = TreeRefreshArg.DELETE_NODE ;
// 执行 刷新树 命令
result.refreshPlugin_Tree(PluginTree,ta);
return result;
}
clipboardOK_
clipboardOK_方法在每个用户端 响应剪切板确认按钮单击事件
方法签名
//下划线(_) 后面 跟 剪切板的 ID
public CommandResult clipboardOK_(CommandArg arg)
方法入参
- CommandArg arg:用户端上下文对象。
- 默认CommandArgOption配置: prefetch=false,editors=all,groups=current(cr,sr),joinGroup=yes
示例代码
public CommandResult clipboardOK_paoard(CommandArg arg) {
CommandResult result = new CommandResult();
String str = (String )arg.argObject ;//获取剪切板内容
//... 执行具体业务逻辑
return result;
}