如何使用快捷键,复制单据体当前焦点光标所在的字段原创
金蝶云社区-吴锐雄
吴锐雄
1人赞赏了该文章 393次浏览 未经作者许可,禁止转载编辑于2023年07月27日 11:31:03

关键词:快捷键,单据体,复制,焦点


一、需求

键盘按下快捷键,对单据体当前光标(焦点)所在的单元格进行复制,插入一个新的分录行,将复制的字段值赋值给新行。


二、思路与方案

  • 快捷键可以通过“系统服务云”“配置工具”中的快捷键页面进行配置。

  • 页面上新增一个空操作,按钮绑定这个操作,当监听到操作触发时,执行相应的业务逻辑。

  • 插入分录可以使用页面上的数据模型model对象进行插入,获取单据体焦点行也可以使用model获取。

  • 获取分录的焦点字段,可以使用单据体控件获取。


三、实现过程

1.配置快捷键

进入“系统服务云”“配置工具”“快捷键配置”页面。

点击新增,新增一行之后,选择一个操作类型。

选择空操作。

image.png


将其操作编码命名为“kdec_copyentry”,快捷键设置为 Ctrl+Alt+K,对操作说明进行一些修改。

最后点击保存按钮。

image.png


2.设计苍穹页面

进入苍穹页面中,添加空操作类型,操作编码命名为“kdec_copyentry”。

image.png


添加普通按钮,绑定刚刚新增的“kdec_copyentry”操作。

image.png


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


注册插件:

image.png


4.配置按钮不可见

有些需求场景,要求复制分录按钮不可见,如果不想在页面上展示这个按钮,那么需要将高度、宽度设置为0px,并且将名称属性的字符全部删除,并且把按钮放置到页面的最末端,这样,这个按钮也是相当于不可见的。

注意:不能开启“隐藏元素”,如果开启了,这个按钮不可见,快捷键将无法触发

image.png


四,效果图

在“码号”单据体字段上,输入一些值,按下快捷键: Ctrl+Alt+K

image.png


发现分录插入了一行,并且复制了焦点所在的字段。

image.png


五、开发环境版本

苍穹5.0


六、参考资料

快捷键

控件-单据体









copyentry.zip(22.50KB)

赞 1