用友NC63界面新增按钮实现方法
NC开发最基本的添加按钮并实现按钮事件业务逻辑处理,下面写一个例子介绍该过程的实现方法。
拿物流执行模块作为例子,在计量单维护界面增加两个按钮“A杆”“B杆”,单击这两个按钮,分别控制A和B道闸栏杆起降。
第一步:
找到该页面的配置文件。打开“应用管理平台”--“开发配置工具”--“功能注册”节点,找到页面,查看参数注册,查看配置文件
第二步:
在xml中添加两个按钮的配置(红颜色标记),如下:
<!-- 汽运计量模板——按钮 -->
<beans default-lazy-init="false">
<bean id="actions" class="nc.ui.mmgp.uif2.container.MMGPActionList">
<constructor-arg>
<list>
<!-- <ref bean="simulateAction" /> -->
<ref bean="addAction" />
<ref bean="nullaction" />
<ref bean="refreshAction" />
<ref bean="nullaction" />
<ref bean="fillPrintAction" />
<!-- <ref bean="limitedTareUpdateAction" /> -->
<ref bean="printActionGroup" />
<ref bean="nullaction" />
<ref bean="nullaction" />
<ref bean="Railing1Action"/>
<ref bean="nullaction" />
<ref bean="Railing2Action"/>
</list>
</constructor-arg>
</bean>
<!-- 配置道闸栏杆起降的两个按钮 -->
<bean id="Railing1Action" class="nc.ui.levmmeampoundbill.poundbill.action.Railing1Action"/>
<bean id="Railing2Action" class="nc.ui.levmmeampoundbill.poundbill.action.Railing2Action"/>
第三步:创建Railing1Action和Railing2Action类f继承父类NCAction
1、Railing1Action类
package nc.ui.levmmeampoundbill.poundbill.action;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import Automation.BDaq.DaqException;
Automation.BDaq.DeviceInformation;
import Automation.BDaq.DeviceTreeNode;
import Automation.BDaq.InstantDoCtrl;
import nc.ui.uif2.NCAction;
import nc.vo.pub.BusinessException;
/**
* PCI-1761板卡控制
*
* @author dingxm
*
*/
public class Railing1Action extends NCAction {
// 1、定义端口、设备名称
private static int channel = 0;// 继电器通道,默认通道为0
private static String device = "PCI-1761,BID#0"; // 设备描述
// private static int deviceNumber = 2;// 设备号
private static InstantDoCtrl instantDoCtrl = null;
private static final long serialVersionUID = 5566110189672221376L;
@Override
public void setCode(String code) {
super.setCode("Railing1");
}
public Railing1Action() {
// super.setCode("dzupordown1");
super.setCode("Railing2");
super.setBtnName("A杆");
}
@Override
public void doAction(ActionEvent arg0) throws Exception {
instantDoCtrl = new InstantDoCtrl();
// 3、打开设备
try {
instantDoCtrl.setSelectedDevice(new DeviceInformation(device));
} catch (DaqException e) {
e.printStackTrace();
}
if (instantDoCtrl.getState().toInt() == 0) {// 判断设备加载初始化成功
byte status = RailingActionCommon.readStatusFromPCI1761(
instantDoCtrl, channel);
byte value = 0;
if (status == 0) {
value = 1;
}
if (status == 1) {
value = 0;
}
if (status == 2) {
value = 3;
}
if (status == 3) {
value = 2;
}
RailingActionCommon.writeToPCI1761(instantDoCtrl, channel, value);
} else {
// 提示加载设备初始化失败
throw new BusinessException("PCI-1761板卡初始化错误,请检查板卡名称配置");
}
}
}
2、Railing2Action类
package nc.ui.levmmeampoundbill.poundbill.action;
import java.awt.event.ActionEvent;
import Automation.BDaq.DaqException;
import Automation.BDaq.DeviceInformation;
import Automation.BDaq.InstantDoCtrl;
import nc.ui.uif2.NCAction;
import nc.vo.pub.BusinessException;
/**
* PCI-1761板卡控制
*
* @author dingxm
*
*/
public class Railing2Action extends NCAction {
// 1、定义端口、设备名称
private int channel = 0;// 继电器通道,默认通道为0
private static String device = "PCI-1761,BID#0";// "DemoDevice,BID#0";//
// 设备描述
// private static int deviceNumber = 2;// 设备号
private static InstantDoCtrl instantDoCtrl = null;
private static final long serialVersionUID = 5566110189672221376L;
@Override
public void setCode(String code) {
super.setCode("Railing2");
}
public Railing2Action() {
// super.setCode("dzupordown2");
super.setCode("Railing2");
super.setBtnName("B杆");
}
@Override
public void doAction(ActionEvent arg0) throws Exception {
// 2、初始化InstantDoCtrl
instantDoCtrl = new InstantDoCtrl();
// 3、打开设备
try {
instantDoCtrl.setSelectedDevice(new DeviceInformation(device));
} catch (DaqException e) {
e.printStackTrace();
}
if (instantDoCtrl.getState().toInt() == 0) {// 判断设备加载初始化成功
byte status = RailingActionCommon.readStatusFromPCI1761(instantDoCtrl, channel);
byte value = 0;
if (status == 0) {
value = 2;
}
if (status == 1) {
value = 3;
}
if (status == 2) {
value = 0;
}
if (status == 3) {
value = 1;
}
RailingActionCommon.writeToPCI1761(instantDoCtrl, channel, value);
} else {
// 提示加载设备初始化失败
throw new BusinessException("PCI-1761板卡初始化错误,请检查板卡名称配置");
}
}
}
工具类:RailingActionCommon类
package nc.ui.levmmeampoundbill.poundbill.action;
import Automation.BDaq.ByteByRef;
import Automation.BDaq.ErrorCode;
import Automation.BDaq.InstantDoCtrl;
/**
*
* @author dingxiaomin
*
*/
public class RailingActionCommon {
/**
*
* @param channel通道号
* @param device设备描述
* @param portData写入数据
* @return返回写入成功与否
*/
public static boolean writeToPCI1761(InstantDoCtrl instantDoCtrl, int channel, byte portData) {
boolean b = false;
ErrorCode errCode;
// 4、写入数据
errCode = instantDoCtrl.Write(channel, portData);
if ("Success".equals(errCode.toString())) {// 写入成功返回true,其他均返回false
b = true;
}
return b;
}
/**
*
* @param channel通道号
* @param device设备描述
* @return返回该通道该设备读取的值
*
*/
public static byte readStatusFromPCI1761(InstantDoCtrl instantDoCtrl,int channel) {
// ErrorCode errCode;
ByteByRef portData = new ByteByRef();
// 4、读取数据
// errCode =
instantDoCtrl.Read(channel, portData);// 读取
return portData.value;
}
}
运行界面如下,到这一步已经显示出来两个按钮:
到上一步骤,虽然显示出来了两个按钮,按钮的doAction方法已经写完,但界面点击该按钮并未触发事件,还缺少下面一步骤:
在功能注册界面增加按钮配置:
到这一步,添加按钮的操作已经全部完成。
用友NC63界面新增按钮实现方法相关推荐
- 用友NC63界面新增按钮实现方法(转)
原文地址:http://blog.csdn.net/qq_32553271/article/details/65644443 NC开发最基本的添加按钮并实现按钮事件业务逻辑处理,下面写一个例子介绍该过 ...
- NC63 前台新增按钮
1.编写新的xml配置 <?xml version="1.0" encoding="gbk"?> <beans xmlns="htt ...
- Adobe Illustrator CS6 界面文字按钮太小,高分屏win10PS/AI等软件界面字太小解决方法
Adobe Illustrator CS6 界面文字按钮太小,高分屏win10PS/AI等软件界面字太小解决方法 参考文章: (1)Adobe Illustrator CS6 界面文字按钮太小,高分屏 ...
- VC开发多语言界面支持的简单方法
VC开发多语言界面支持的简单方法 作者:成晓旭 (需要完整源代码请留言) 最近在做一个小程序,要求实现对多语言界面显示支持功能,并且,界面显示内容用户能够自己设置. 初步设计用INI文件来配置显示内容 ...
- 纯干货 | UI界面中按钮设计可临摹编辑素材!
按钮是UI界面中最常见的交互元素之一,所以,如果要创建一个稳固的互动且积极有效的用户体验,需要设计好按钮元素.今天我们将搜集整理一些网页app上常见的按钮类型,了解这些不同的按钮设计方法. Viro媒 ...
- UAP扩展开发 - 新增按钮
UAP新增按钮的实现 一.扩展说明 1.按钮扩展的实现有两种方法 - 按钮继承:NCAction,MenuAction - 拦截器实现:ActionInterceptor 此处是通过按钮继承实现的 2 ...
- Photoshop CC 2019( ps cc)新增功能使用方法介绍
全新Adobe Photoshop CC 2019 mac简称ps cc 2019,是Adobe官方推出的最新版图像编辑软件!在最新的ps CC 2019中,添加了多项全新功能,包括选择对象.改进了对 ...
- win7 计算机登录ftp 取消保存密码,Win7系统取消登录界面的两种方法(图文)
本教程小编和大家分享Win7纯净版系统取消登录界面的两种方法,windows7系统设置电脑密码后,即使取消密码,也会出现登录界面 ,每次都要点击用户图标才能进入系统,这样比较麻烦.那么有什么办法可以取 ...
- android 实现浮动窗口,Android_圣诞节,写个程序练练手————Android 全界面悬浮按钮实现,开始我以为悬浮窗口,可以用A - phpStudy...
圣诞节,写个程序练练手----Android 全界面悬浮按钮实现 开始我以为悬浮窗口,可以用Android中得PopupWindow 来实现,虽然也实现了,但局限性非常大.比如PopupWindow必 ...
最新文章
- “Python来玩微信跳一跳”教程(问题总结)
- SAX解析xml (遍历DOM树各节点)
- Zookeeper 服务注册中心
- 2 宽度优先爬虫和带偏好的爬虫(4)
- SQL Server 查询表备注信息的语句
- Huawei S8512
- java类同步_Java中方法,对象,类的同步
- 统计学习方法-李航(6)
- CSS中flex和inline-flex的区别
- 字符串截取mysql
- vs关于_CRT_SECURE_NO_WARNINGS警告说明
- 为什么你买不到一台好用的机器人?因为没有你的代码
- 消消乐 游戏算法html,Vue实现开心消消乐游戏算法
- 动态规划解最长公共子串
- excel冻结窗口怎么设置_粗暴讲解,2分钟 | 即懂excel 冻结首行、首列和单元格怎么弄?...
- Windows10+clion+opencv时报错0xC0000139和0xC0000135的解决方法之一
- UIkit之滚动监听+动画特效
- Docker Are you trying to connect to a TLS-enabled daemon without TLS?
- fuchsia appmgr分析
- linux awk判断字符串开头,Linux文件比较三剑客(awk/grep/sed)之awk
热门文章
- Java GUI编程的几种常用布局管理器
- Day33 PO模型
- 海量资源请加QQ群282781158
- matlab二维图填充,【Matlab】二维图绘制及填色总结(basic)
- 【视频课笔记】相位裕度 相位补偿 开环增益与相移 运放带宽压摆率
- 使用ListBox控件,选中ListBoxItem中的TextBox后,如何改变SelectedItem
- 一种串口拓展方式、使用CH438芯片做并口转八串口
- 深入理解Java虚拟机(第3版)学习笔记——JAVA内存区域(超详细)
- CloudCompare多个pcd文件的拼接为1个pcd
- oracle check更改,Oracle With Check Option