NC65 重写系统按钮类

博客围绕单据操作中的按钮事件展开,提到用友提供拦截器处理按钮前后事件。重点介绍按钮重写案例,以保存类重写为例,阐述需求为按钮保存后更新数据,还说明了重写步骤,包括找保存按钮类、新建类继承特定类、重写方法、调整配置文件及清理缓存测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言: 对单据的操作 离不开按钮事件 编辑事件等等

            按钮即增删改查 或者是自定义按钮

            (但是同样对按钮的操作 用友提供了拦截器 用来处理按钮前与按钮后事件  可查看如下链接

            描述了拦截器的用法案例

            https://blog.youkuaiyun.com/qq_19004705/article/details/82658069)

            下面针对按钮的重写进行案例介绍

举例:按钮保存类重写

需求:在按钮保存后执行更新数据

1、重写按钮类 既然是重写 那么我们先要找到保存按钮类是什么?

      打开配置文件,修改前的配置文件如下所示:

	<!--======= 动作:[newActions] [保存] ===========-->
	<bean id="saveScriptAction" class="nc.ui.pubapp.uif2app.actions.pflow.SaveScriptAction">
		<property name="model"><ref bean="bmModel"/></property> 
		<property name="editor"><ref bean="billForm"/></property>
		<property name="billType" value="OA06" />
		<property name="filledUpInFlow" value="true" />
		<property name="actionName" value="SAVEBASE" />
		<property name="exceptionHandler"><ref bean="exceptionHandler" /></property>
	</bean>

    

2、新建一个类 继承 nc.ui.pubapp.uif2app.actions.pflow.SaveScriptAction

      重写doAction方法,这里要是注意一定要实现 super.doAction(e);

      不然数据无法保存

3、代码案例:   

package nc.ui.fdgyl.oahkjh.action;
 
import java.awt.event.ActionEvent;
import java.util.Properties;
 
import nc.bs.framework.common.NCLocator;
import nc.itf.fdgyl.IFdDBService;
import nc.itf.fdgyl.IOahkjhMaintain;
import nc.ui.fdgyl.oahkjh.action.RefreshSingleAction;
import nc.ui.pubapp.uif2app.actions.pflow.SaveScriptAction;
import nc.ui.pubapp.uif2app.query2.model.IModelDataManager;
import nc.ui.pubapp.uif2app.view.BillForm;
import nc.ui.tools.query.PubTools;
import nc.vo.fdgyl.oahkjh.AggOahkjhHVO;
import nc.vo.fdgyl.oahkjh.OahkjhBVO;
import nc.vo.fdgyl.oahkjh.OahkjhHVO;
 
public class SaveHkjhAction extends SaveScriptAction{
 
	private static final long serialVersionUID = 1L;
  
    private IModelDataManager dataManager;
	public IModelDataManager getDataManager() {
		return this.dataManager;
	}
	public void setDataManager(IModelDataManager dataManager) {
		this.dataManager = dataManager;
	}
	private BillForm editor;
    public BillForm getEditor() {
		return editor;
	}
	public void setEditor(BillForm editor) {
		this.editor = editor;
	}
    private RefreshSingleAction refreshaction;
	public RefreshSingleAction getRefreshaction() {
		return refreshaction;
	}
	public void setRefreshaction(RefreshSingleAction refreshaction) {
		this.refreshaction = refreshaction;
	}
	@Override
	public void doAction(ActionEvent e) throws Exception {
		super.doAction(e);
		AggOahkjhHVO aggvo = (AggOahkjhHVO)this.getModel().getSelectedData();
		IOahkjhMaintain iservice = (IOahkjhMaintain) NCLocator.getInstance().lookup(
				IOahkjhMaintain.class);
		IFdDBService iquery = (IFdDBService) NCLocator.getInstance().lookup(
				IFdDBService.class);
		Properties p = PubTools.getParameterInfo();
		String design = p.getProperty("design");
		if (aggvo == null){
			return;
		}
		OahkjhHVO hvo = (OahkjhHVO) aggvo.getParentVO();
		Object objsfsp = hvo.getAttributeValue("sfsp");
		String user = this.model.getContext().getPk_loginUser();// 当前登录用户
		String pk_oahkjh_h =  hvo.getAttributeValue("pk_oahkjh_h").toString();
		String vbillcode   =  hvo.getAttributeValue("vbillcode").toString();
		if(objsfsp!=null&&"Y".equals(objsfsp.toString()))
		{
		    iservice.CreateAggoafkdHVOS(user, pk_oahkjh_h, vbillcode);
		}
		//回写金额 --->得到界面数据
		OahkjhBVO[] bvos = (OahkjhBVO[]) getEditor().getBillCardPanel().getBillModel().getBodyValueVOs(OahkjhBVO.class.getName());
		StringBuffer sbupdate = new StringBuffer();
		String sql = "";
		if(bvos!=null)
		{
			for(int i = 0 ;i <bvos.length ; i++)
			{
				OahkjhBVO tempbvo = bvos[i];
				Object objlsh = tempbvo.getAttributeValue("nc_lsh");
				if(objlsh==null)
					continue;
				String lsh = objlsh.toString();
				Object objfkfp = tempbvo.getAttributeValue("nc_fkfp");
				if(objfkfp==null)
					continue;
				String fkfp = objfkfp.toString();
				double oldfkje = iservice.getByfpjeForHkjh(lsh, vbillcode)+Double.parseDouble(fkfp);
				sql = " update fdgyl_oadjtb_h set nc_syje =(nc_zjje-"+oldfkje+") where nc_lsh = '"+lsh+"';";
				sbupdate.append(sql);	
			}
			if(sbupdate!=null&&sbupdate.length()>0)
			{
				iquery.updateDatas(sbupdate, design);
			}
		}
	}
}

4、配置文件调整:修改后的按钮配置

	<!--======= 动作:[newActions] [保存] ===========-->
	<bean id="saveScriptAction" class="nc.ui.fdgyl.oahkjh.action.SaveHkjhAction">
		<property name="model"><ref bean="bmModel"/></property> 
		<property name="editor"><ref bean="billForm"/></property>
		<property name="billType" value="OA06" />
		<property name="filledUpInFlow" value="true" />
		<property name="actionName" value="SAVEBASE" />
		<property name="exceptionHandler"><ref bean="exceptionHandler" /></property>
	</bean>

5、清理缓存 测试

### NC65 按钮编辑前事件处理 对于NC65中的按钮,在执行特定操作之前触发的事件通常被称为“编辑前事件”。为了实现这一功能,可以采用拦截器模式来捕获并响应这些事件。 #### 创建自定义拦截器类 创建一个新的Java类`EditOADjtbInterceptor.java`,该类应继承自`ActionInterceptor`[^1]。此类用于监听和处理目标动作之前的逻辑: ```java public class EditOADjtbInterceptor extends ActionInterceptor { @Override public void beforeInvoke() throws Exception { super.beforeInvoke(); // 自定义业务逻辑代码放置于此处 System.out.println("Button edit event triggered."); } } ``` 此段代码重写了父类的方法`beforeInvoke()`,当关联的动作即将被执行时会调用它。可以在其中加入任何必要的预处理逻辑或验证条件。 #### 配置XML文件 按照指定路径设置对应的XML配置文件,并确保其结构与系统预期相符[^2]。这一步骤至关重要,因为不正确的配置可能导致组件无法正常加载或工作。例如: ```xml <bean id="editOAInterceptor" class="com.example.EditOADjtbInterceptor"> </bean> <!-- 将拦截器绑定到具体的功能节点 --> <action-interceptor-ref bean="editOAInterceptor"/> ``` 通过上述配置,实现了将新创建的拦截器实例化并与特定的操作相连接的目的。 #### 测试与调试 完成以上两部分之后,建议先尝试编译项目并利用IDE工具(如Eclipse)提供的辅助功能——右键点击XML文件选择菜单项“Spring xml to Java”,以此确认配置无误。一旦生成过程顺利完成,则表明当前环境下的依赖关系已被正确解析;反之则需仔细审查可能存在的错误之处。 最后重启应用服务器使更改生效,随后即可观察界面上新增加的控件是否能够按预期发出请求以及相应前置处理器是否会得到激活。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值