关键词:快捷键,单据体,复制,焦点
一、需求
键盘按下快捷键,对单据体当前光标(焦点)所在的单元格进行复制,插入一个新的分录行,将复制的字段值赋值给新行。
二、思路与方案
快捷键可以通过“系统服务云”“配置工具”中的快捷键页面进行配置。
页面上新增一个空操作,按钮绑定这个操作,当监听到操作触发时,执行相应的业务逻辑。
插入分录可以使用页面上的数据模型model对象进行插入,获取单据体焦点行也可以使用model获取。
获取分录的焦点字段,可以使用单据体控件获取。
三、实现过程
1.配置快捷键
进入“系统服务云”“配置工具”“快捷键配置”页面。
点击新增,新增一行之后,选择一个操作类型。
选择空操作。
将其操作编码命名为“kdec_copyentry”,快捷键设置为 Ctrl+Alt+K,对操作说明进行一些修改。
最后点击保存按钮。
2.设计苍穹页面
进入苍穹页面中,添加空操作类型,操作编码命名为“kdec_copyentry”。
添加普通按钮,绑定刚刚新增的“kdec_copyentry”操作。
3.编写插件代码
继承AbstractBillPlugIn,编写页面插件,afterDoOperation事件中监听操作被触发。
@Override public void afterDoOperation(AfterDoOperationEventArgs afterDoOperationEventArgs) { super.afterDoOperation(afterDoOperationEventArgs); if (afterDoOperationEventArgs.getOperateKey().equals("kdec_copyentry")) { copyentry(); } }
复制分录,需要获取到单据体焦点字段、单据体焦点行。
使用model插入分录之后,从焦点单元格取值,赋值给新分录行上的字段。
代码如下,kdec_textline_en是单据体标识。
public void copyentry() { EntryGrid entryGrid = getView().getControl("kdec_textline_en"); // 获取单据体焦点字段 String focusField = entryGrid.getEntryState().getFocusField(); // 获取单据体焦点行 int currentRow = this.getModel().getEntryCurrentRowIndex("kdec_textline_en"); // 插入分录 getModel().insertEntryRow("kdec_textline_en", currentRow+1); // 赋值 Object copyValue = getModel().getValue(focusField, currentRow); getModel().setValue(focusField, copyValue, currentRow+1); }
注册插件:
4.配置按钮不可见
有些需求场景,要求复制分录按钮不可见,如果不想在页面上展示这个按钮,那么需要将高度、宽度设置为0px,并且将名称属性的字符全部删除,并且把按钮放置到页面的最末端,这样,这个按钮也是相当于不可见的。
注意:不能开启“隐藏元素”,如果开启了,这个按钮不可见,快捷键将无法触发。
四,效果图
在“码号”单据体字段上,输入一些值,按下快捷键: Ctrl+Alt+K
发现分录插入了一行,并且复制了焦点所在的字段。
五、开发环境版本
苍穹5.0
六、参考资料
copyentry.zip(22.50KB)
推荐阅读