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;
}

undefined

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;
}

undefined

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;
}

undefined

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;
}

results matching ""

    No results matching ""