NC65在单据添加按钮跳转到固定单据,且进行数据初始化

news2024/11/15 21:52:27

实现功能

下面两个是按钮
在这里插入图片描述
下面红框里面的内容是上面单据带过来的
在这里插入图片描述
上面就是本地代码实现的功能

具体实现代码

提前约定
为了方便称呼,这里把第一张图称为上游单据,第二张图为下游单据
所有代码AggVo都要替换成你自己的

  1. 配置文件
    上游单据拓展配置文件:
	<!-- 插入整改按钮  -->
 <bean class="nc.ui.pubapp.plugin.action.InsertActionInfo">
	<property name="actionContainer" ref="actionsOfList" />
	<property name="actionType" value="notedit" />
	<!-- pFApproveStatusInfoAction是你单据里面的一个按钮 -->
	<property name="target" ref="pFApproveStatusInfoAction" />
	<property name="pos" value="after" />
	<!-- ExecuAction对应下面的bean,这个bean就是按钮配置类 -->
	<property name="action" ref="ExecuAction" />
</bean>
<bean id="ExecuAction" class="nc.ui.hd.hazardenter.action.CorrectAction">
	<property name="model" ref="bmModel" />
</bean> 
  1. ExecuAction对应的CorrectAction类
package nc.ui.hd.hazardenter.action;


import java.awt.event.ActionEvent;



import nc.desktop.ui.WorkbenchEnvironment;
import nc.funcnode.ui.FuncletInitData;
import nc.funcnode.ui.FuncletWindowLauncher;
import nc.ui.pub.beans.MessageDialog;
import nc.ui.uif2.NCAction;
import nc.ui.uif2.model.AbstractAppModel;
import nc.vo.hd.hazardenter.AggHazardHVO;
import nc.vo.sm.funcreg.FuncRegisterVO;
/**
* 
* @author: wangchao
* @ClassName: CorrectAction 
* @Description: 对XX进行XX
* @date: 2022年12月29日
*/
public class CorrectAction extends NCAction {
   
   private static final long serialVersionUID = 9169939802794646069L;
   private AbstractAppModel model;
   public AbstractAppModel getModel() {
   	return model;
   }
   public void setModel(AbstractAppModel model) {
   	this.model = model;
   }
   public CorrectAction(){
   	setBtnName("按钮名称");
   	setCode("writcorrect");
   }
   @Override
   public void doAction(ActionEvent e) throws Exception {
   	// AggHazardHVO 是上游单据的AggVo,换成你自己的
   	AggHazardHVO aggRent=(AggHazardHVO) this.getModel().getSelectedData();
   	if (aggRent==null || aggRent.equals("")) {
   		MessageDialog.showErrorDlg(getModel().getContext().getEntranceUI(),"错误","请选择一项XX进行XX!");
   		return;
   	}
		// 45H90405是要打开的下游单据的功能编码
   	FuncRegisterVO funvo = WorkbenchEnvironment.getInstance().getFuncRegisterVO("45H90405");
   	FuncletWindowLauncher.openFuncNodeInTabbedPane(null, funvo, getInitData(aggRent), null, true);
   }

   public FuncletInitData getInitData(AggHazardHVO aggRent){
   	FuncletInitData data  = new FuncletInitData();
   	
   	data.setInitData(aggRent);
   	data.setInitType(-1);
   	return data;
   }
}
  1. 下游单据配置文件
	<!-- 打开节点监听 newadd-->
	<!--<bean id="InitDataListener" class="nc.ui.pubapp.uif2app.model.DefaultFuncNodeInitDataListener">
		<property name="model" ref="bmModel"/>
		<property name="context" ref="context"></property>
		<property name="voClassName" value="nc.vo.hd.hazardcorrect.AggHazardcorrect"/>
	</bean>-->
	
	<!-- 打开节点监听 newadd-->
	<bean id="InitDataListener" class="nc.ui.hd.hazardcorrect.ace.handler.MyDefaultFuncNodeInitDataListener">
		<property name="model" ref="bmModel"/>
		<property name="context" ref="context"></property>
		<property name="billform" ref="billForm"></property>
		<property name="defaultUIF2RefEditor">
			<ref bean="defaultUIF2RefEditor" />
		</property>
	</bean>
	
	<!-- 导入编辑器 -->
	<bean id="defaultUIF2RefEditor" class="nc.itf.hd.DefaultUIF2RefEditor">
		<property name="addAction" ref="addAction" />
		<property name="billcardPanelEditor" ref="billForm" />
		<property name="appModel" ref="bmModel" />
	</bean>

说明:注释掉原来的节点监听,编写自己的MyDefaultFuncNodeInitDataListener 节点初始化监听类,再来一个DefaultUIF2RefEditor类就可以了

  1. MyDefaultFuncNodeInitDataListener 类
package nc.ui.hd.hazardcorrect.ace.handler;


import java.util.Collection;
import java.util.List;

import nc.bs.framework.common.NCLocator;
import nc.funcnode.ui.FuncletInitData;
import nc.itf.hd.DefaultUIF2RefEditor;
import nc.itf.uap.IUAPQueryBS;
import nc.jdbc.framework.processor.ColumnListProcessor;
import nc.md.persist.framework.MDPersistenceService;
import nc.ui.pubapp.uif2app.model.DefaultFuncNodeInitDataListener;
import nc.ui.pubapp.uif2app.view.ShowUpableBillForm;
import nc.vo.hd.hazardcorrect.AggHazardcorrect;
import nc.vo.hd.hazardcorrect.Hazardcorrect;
import nc.vo.hd.hazardenter.AggHazardHVO;
import nc.vo.pub.BusinessException;
import nc.vo.pubapp.AppContext;

 
/**
 * 
 * @author: wangchao
 * @ClassName: MyDefaultFuncNodeInitDataListener 
 * @Description: 节点打开初始化数据
 * @date: 2022年12月29日
 */
public class MyDefaultFuncNodeInitDataListener extends DefaultFuncNodeInitDataListener {
 
	ShowUpableBillForm billform;
	private DefaultUIF2RefEditor defaultUIF2RefEditor = null;
	
	public MyDefaultFuncNodeInitDataListener(){
		super();
	}
	
	@Override
    public void initData(FuncletInitData data) {
    	if (null == data) {
			this.getModel().initModel(null);
			return;
		}

    	//用参数中传过来的数据初始化AppModel,可能会转换成VO或VO数组,根据业务确定
    	AggHazardHVO parentInitData =(AggHazardHVO) data.getInitData();
    	InitDataListener initData = new InitDataListener();
        String sql = "select * from HD_CORRECT where PK_HIDDENDANGER = '"+ parentInitData.getParentVO().getPk_hiddendanger_h()+"'";        //数据库名 改成需要的
    	System.out.println("=============="+sql);
    	//this.getModel().setContext(context);
    	//我这做了一个逻辑判断,如果查询到下游单据没用数据,则新增。如果有就展示列表数据,进行提交、审核等操作
    	if (initData.getFuncletInitData(sql, AggHazardcorrect.class) != null) {
    		this.getModel().initModel(initData.getFuncletInitData(sql, AggHazardcorrect.class).getInitData());        //agg改成需要的
            //super.initData(initData.getInitData(sql, AggTenderProject.class));
    	}else{
    		//这里bill是下游单据的AggVo,用chg方法封装一下
        	AggHazardcorrect bill = chg(parentInitData);//生成单据
    		
//        	//调用添加按钮
        	getDefaultUIF2RefEditor().addNew();
//        	//初始化数据
        	getDefaultUIF2RefEditor().setValue(bill);
    	}
        
    	
    	

}
	
	
		private AggHazardcorrect chg(AggHazardHVO parentInitData) {
				
			AggHazardcorrect bill = new AggHazardcorrect();
		 
			Hazardcorrect zb = chgHead(parentInitData);
		 
				bill.setParentVO(zb);
		 
				bill.setChildrenVO(null);
		 
				return bill;
			}
		
		
		private Hazardcorrect chgHead(AggHazardHVO parentInitData){
			Hazardcorrect zb = new Hazardcorrect();
			zb.setPk_hiddendanger(parentInitData.getParentVO().getPk_hiddendanger_h());
			zb.setHd_checkform(parentInitData.getParentVO().getHd_checkform());
			zb.setHd_checkorg(parentInitData.getParentVO().getHd_checkorg());
			zb.setHd_checkorg(parentInitData.getParentVO().getHd_checkorg());
			
			zb.setHd_outcheckorg(parentInitData.getParentVO().getHd_outcheckorg());
			zb.setHd_checkuser(parentInitData.getParentVO().getHd_checkuser());
			zb.setHd_becheckorg(parentInitData.getParentVO().getHd_becheckorg());
			zb.setHd_checktime(parentInitData.getParentVO().getHd_checktime());
			zb.setHd_level(parentInitData.getParentVO().getHd_level());
			zb.setHd_content(parentInitData.getParentVO().getHd_content());
			
			zb.setHd_limitime(parentInitData.getParentVO().getHd_limittime());
			zb.setHd_dutydept(parentInitData.getParentVO().getHd_dutydept());
			zb.setHd_status(parentInitData.getParentVO().getHd_status());
			zb.setHd_isextension(parentInitData.getParentVO().getHd_isextension()+"");
			
			zb.setPk_group(parentInitData.getParentVO().getPk_group());
			zb.setPk_org(parentInitData.getParentVO().getPk_org());
			zb.setPk_org_v(parentInitData.getParentVO().getPk_org_v());
			zb.setRec_org(parentInitData.getParentVO().getHd_becheckorg());
			zb.setFstatusflag(-1);
			zb.setOperator(AppContext.getInstance().getPkUser());
			return zb;
		}
	public class InitDataListener {

	    private FuncletInitData data = null;
	    
	    /**
	     * 根据查询主表sql与AggVO类型,获取需要加载到页面的初始化数据
	     * @param sql 需要加载的数据的查询sql,注意,这里只写查询主表的sql
	     * @param clazz 该单据的AggVO
	     * @return
	     */
	    public FuncletInitData getFuncletInitData(String sql, Class<?> clazz){
	        
	        IUAPQueryBS query = (IUAPQueryBS) NCLocator.getInstance().lookup(IUAPQueryBS.class.getName());
	        Object[] objs = null;
	        String[] pkIds = null;
	        List<String> list = null;
	        try {
	            list = (List<String>) query.executeQuery(sql, new ColumnListProcessor());
	            if(list != null && list.size()>0){
	                pkIds = new String[list.size()];
	                for(int i=0; i<list.size(); i++){
	                    pkIds[i] = list.get(i);
	                }
	                Collection collection = MDPersistenceService.lookupPersistenceQueryService().queryBillOfVOByPKs(clazz, pkIds, false);
	                objs = collection.toArray();
	                getData().setInitData(objs);
	            }
	            else{
	                return null;
	            }
	            
	        } catch (BusinessException e) {
	            e.printStackTrace();
	        }
	        
	        return data;
	    }
	    
	    /**
	     * 获取FuncletInitData
	     * @return
	     */
	    public FuncletInitData getData() {
	        if(data == null){
	            data = new FuncletInitData();
	        }
	        return data;
	    }

	    public void setData(FuncletInitData data) {
	        this.data = data;
	    }
	    
	}
	
	
	public ShowUpableBillForm getBillform() {
		return billform;
	}
	public void setBillform(ShowUpableBillForm billform) {
		this.billform = billform;
	}
	public DefaultUIF2RefEditor getDefaultUIF2RefEditor() {
		return defaultUIF2RefEditor;
	}
	public void setDefaultUIF2RefEditor(DefaultUIF2RefEditor defaultUIF2RefEditor) {
		this.defaultUIF2RefEditor = defaultUIF2RefEditor;
	}
    
    
}
  1. DefaultUIF2RefEditor类(这个类不用改动,直接粘过去就行)
package nc.itf.hd;

import nc.ui.pub.bill.BillData;
import nc.ui.uif2.NCAction;
import nc.ui.uif2.editor.IBillCardPanelEditor;
import nc.ui.uif2.model.AbstractUIAppModel;
import nc.vo.pub.AggregatedValueObject;
 
 
 
public  class DefaultUIF2RefEditor  {
 
	
	
	private NCAction addAction = null;
									
	private Exception ex;    //保存过程中通过拦截器将异常抛出 
 
	
	private IBillCardPanelEditor billcardPanelEditor = null;
	
	private AbstractUIAppModel appModel = null;
	
 
	protected NCAction createAddAction()
	{
		return null;
	}
	
	protected NCAction createSaveAction()
	{
		return null;
	} 
	
	protected NCAction createCancelAction()
	{
		return null;
	}
	
	protected IBillCardPanelEditor createBillCardPanelEditor()
	{
		return null;
	}
	
	protected AbstractUIAppModel createAppModel()
	{
		return null;
	}
	
	
	 
	
	/**
	 * 新增操作
	 * 
	 * @see nc.itf.trade.excelimport.IImportableEditor#addNew()
	 */
	public void addNew() {
		try {
			getAddAction().actionPerformed(null);
		} catch (Exception e) {
			nc.bs.logging.Logger.error(e.getMessage());
		}
	} 
	
	/**
	 * 设值操作
	 * 
	 * 标准的操作步骤如下:
	 * 1,转型VO为ExtendedAggregatedValueObject
	 * 2,根据转换规则处理VO的相关属性值
	 * 3,将处理后的VO值设置到界面上
	 */
	public void setValue(Object obj) {
		if(getBillcardPanelEditor() != null)
		{
			BillData bd = getBillcardPanelEditor().getBillCardPanel().getBillData();
			bd.setBillValueVO((AggregatedValueObject)obj);
		}
	}
 
 
 
	
	/**
	 * 返回AddAction对象
	 */
	public NCAction getAddAction() {
		
		if(addAction == null)
			addAction = createAddAction();
		return this.addAction;
	}
 
	
 
	public void setAddAction(NCAction addAction) {
		this.addAction = addAction;
	}
 
	public IBillCardPanelEditor getBillcardPanelEditor() {
		
		if(billcardPanelEditor == null)
			billcardPanelEditor = createBillCardPanelEditor();
		return billcardPanelEditor;
	}
 
	public void setBillcardPanelEditor(IBillCardPanelEditor billcardPanelEditor) {
		this.billcardPanelEditor = billcardPanelEditor;
	}
 
 
 
	
	public AbstractUIAppModel getAppModel() {
		
		if(this.appModel == null)
			appModel = createAppModel();
		return appModel;
	}
 
	public void setAppModel(AbstractUIAppModel model) {
		this.appModel = model;
	}
	
	public int getExportCount() {
		return 1;
	}
 
	public Exception getEx() {
		return ex;
	}
 
	public void setEx(Exception ex) {
		this.ex = ex;
	}
}

上面就是实现开头图片功能的所有代码了,当然也能实现下游单据主子表的功能,具体给

bill.setChildrenVO(null);

找到这行代码,给child赋值查询出来的list即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/130778.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年天津美术学院专升本专业课线上考试安排准备及设备操作说明

天津美术学院2023年高职升本招生专业考试考生须知及操作说明一、考试时间安排二、考前准备 (一)纸张及其他材料(二)考试设备及网络 1.考生须提前准备好至少两部智能手机&#xff0c;为确保网络考试顺利进行&#xff0c;建议考生使用最近3年上市的主流品牌手机&#xff08;如iPh…

太强了!这么设计中间件完美解决了百万并发的问题!

V-xin&#xff1a;ruyuan0330 获得600页原创精品文章汇总PDF 目录 一、大部分人对Java并发仍停留在理论阶段二、中间件系统的内核机制&#xff1a;双缓冲机制三、百万并发的技术挑战四、内存数据写入的锁机制以及串行化问题五、片机制 分段加锁机制 六、缓冲区写满时的双缓冲…

c++ - 第19节 - c++11

1.C11简介 c11简介&#xff1a;在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1)&#xff0c;使得C03这个名字已经取代了C98称为C11之前的最新C标准名称。不过由于C03(TC1)主要是对C98标准中的漏洞进行修复&#xff0c;语言的核心部分则没有改动&#xff0c;因此人们习惯…

Pycharm打开Project(工程)时停留在preparing workspace时间过长,导致打开很慢的解决方法...

Pycharm打开Project(工程)时停留在preparing workspace时间过长,导致打开很慢的解决方法… 昊虹君用Pycharm进行Python的开发&#xff0c;一直用得好好的&#xff0c;也没作过什么异常操作&#xff0c;但是从上星期开始&#xff0c;打开Project(工程)时停留在preparing worksp…

【王道操作系统】2.1.1 进程的定义、特征、组成、组织

进程的定义、特征、组成、组织 文章目录进程的定义、特征、组成、组织1.进程的定义2.进程的特征3.进程的组成4.进程的组织1.进程的定义 程序的概念&#xff1a; 进程的概念&#xff1a; 进程和程序的区别和联系&#xff1a; 区别&#xff1a; 进程是动态的&#xff0c;程序是静…

Linux系统下crond任务调度指令的常见用法

Linux系统下crond任务调度指令的常见用法 任务调度 任务调度是指系统在某个时间执行的特定的命令或程序。任务调度分类:1)系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等;2)个别用户工作:个别用户可能希望执行某些程序&#xff0c;比如对mysql数据库的备份。 基本语…

【攻防世界】网鼎杯2018 Web fakebook

学web总是能让我学到新的知识&#xff0c;很开心&#xff0c;很有趣&#xff0c;很好玩 打开题目 一个登录按钮&#xff0c;一个注册按钮&#xff0c;其余没有什么发现&#xff0c;对于web来说&#xff0c;常规先测试一下robots.txt文件 果然又发现&#xff0c;有一个bak文件…

opencv-python常用函数解析及参数介绍(二)——图像填充与图像融合

1.图像填充 函数及参数介绍 在opencv中使用cv2.copyMakeBorder可以进行图像的边界填充&#xff0c;需要的参数为(img, top_size, bottom_size, left_size, right_size, borderType&#xff09;&#xff0c;即&#xff08;图片&#xff0c;上侧填充值&#xff0c;下侧填充值&a…

【数据结构与算法】KMP算法

文章目录前言一 .KMP的来历二.KMP解决的问题1.引入2.定义的引入1.字符串前缀2.字符串后缀3.最长相等前后缀3.核心思想三.next/prefix1.next的含义定义规律2.next的求取1.准备工作2.思路和图解4.应用前言 在C语言的strcmp的实现过程中&#xff0c;所涉及的算法较为简单&#xff…

Golang - 字符串操作汇总

Golang 字符串操作汇总1 string初始化2 遍历string3 byte & Rune3.1 初始化3.2 byte和rune区别1 string初始化 func newString() {//1. 字符串初始化// 方式一&#xff1a;使用简写声明&#xff0c;带有字符串的变量,支持特殊字符str : "one hello \n world"fmt…

三个月后,快手To B怎么样了?

未来&#xff0c;如何独立作战和走出快手的TOC“客户资源圈”&#xff0c;或将成为快手TOB新的十字路口。 作者|斗斗 编辑|皮爷 出品|产业家 人口红利终结&#xff0c;流量红利终结&#xff0c;超常规的高速增长终结。TOC模式的路越来越难走了。 快手与抖音作为短视频…

光耦特性以及计算

光耦特性 光耦器件电路图 这是我们常用的。光耦器件以及它的连接方式。 左侧R1是我们主要考虑的。 电流最小值是要让LED能够保持发光状态&#xff0c;最大值的话。1.不能让LED烧坏了。2. LED的负极端是单片机的。 这里主要是看引脚灌入电流的最大值。 电气规格 我们看看说…

手机数据包抓包详解

今天继续给大家介绍渗透测试相关知识&#xff0c;本文主要内容是手机数据包抓包详解。 免责声明&#xff1a; 本文所介绍的内容仅做学习交流使用&#xff0c;严禁利用文中技术进行非法行为&#xff0c;否则造成一切严重后果自负&#xff01; 再次强调&#xff1a;严禁对未授权设…

并发编程——6.共享模型之不可变

目录6.共享模型之不可变6.1.日期转换的问题6.1.1.问题提出6.1.2.解决思路——同步锁6.1.3.解决思路——不可变6.2.不可变设计6.3.享元模式6.3.1.简介6.3.2.体现6.3.3.DIY6.4.final 原理6.5.无状态本文笔记整理来自黑马视频https://www.bilibili.com/video/BV16J411h7Rd/?p197&…

Unity脚本(二)

视频教程&#xff1a;https://www.bilibili.com/video/BV12s411g7gU/?share_sourcecopy_web Transform 对象的位置、旋转和缩放 场景中的每个对象都有一个Transform&#xff0c;用于存储和操作对象的位置、旋转和缩放。 每个Transform都可以有一个父级&#xff0c;能够分…

C语言强制类型转换

强制类型转换是把变量从一种类型转换为另一种数据类型。例如&#xff0c;如果您想存储一个 long 类型的值到一个简单的整型中&#xff0c;您需要把 long 类型强制转换为 int 类型。您可以使用强制类型转换运算符来把值显式地从一种类型转换为另一种类型&#xff0c;如下所示&am…

gitlab-ci.yml关键字(五)tags 、only 、when

tags 使用Tags用于选择Runner的标签列表 我们在创建Runner 时可以给该Runner打上特定的标签&#xff0c;那后续流水线中的job如果需要使用特定标签的Runner执行时&#xff0c;就需要使用tags来标记 比如这里有两个标签的Runner 也可以对当前的runner进行一些配置上的设置 …

2022总结:我是怎样从一个混子到如今小有所成

前言 &#x1f340;作者简介&#xff1a;被吉师散养、喜欢前端、学过后端、练过CTF、玩过DOS、不喜欢java的不知名学生。 &#x1f341;个人主页&#xff1a;红中 &#x1f342;抽根烟&#xff0c;吹个牛b(不是 入门 如果硬要问我是在什么时候入门的&#xff0c;那就要说到高一…

MySQL添加用户及用户权限管理

目录 1、用户 <1> 用户信息 <2> 创建用户 <3> 删除用户 <4> 修改用户密码 2、用户权限管理 <1> 查看用户权限 <2> 给用户授权 <3> 回收权限 1、用户 <1> 用户信息 MySQL中的用户&#xff0c;都存储在系统数据库mysq…

机器翻译与数据集

机器翻译指的是将文本序列从一种语言自动翻译成另一种语言。 使用单词级词元化时的词表大小&#xff0c;将明显大于使用字符级词元化时的词表大小。为了缓解这一问题&#xff0c;我们可以将低频词元视为相同的未知词元。 通过截断和填充文本序列&#xff0c;可以保证所有的文…