NC6增加自定义按钮功能实现

目录

前言

1、在原始XML文件里配置

1.1、添加类,继承NCAction

1.2、XML注册自定义按钮 

1.3、xml配置按钮何时可见:示例编辑(新增和修改)下可见 

2、重写XML

3、重新对应Action类

结语


前言

  NC6系列及之前版本重量端添加按钮,一般有三种方法。接下来我们将详细介绍添加按钮功能的三种方法。

1、在原始XML文件里配置

1.1、添加类,继承NCAction

###参考java类

package nc.ui.ts.ts_adcountage.action;

import java.awt.Container;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.HashMap;

import nc.bs.framework.common.NCLocator;
import nc.itf.uap.IUAPQueryBS;
import nc.jdbc.framework.processor.ArrayListProcessor;
import nc.ui.pub.beans.MessageDialog;
import nc.ui.pubapp.uif2app.view.ShowUpableBillForm;
import nc.ui.uif2.NCAction;
import nc.ui.uif2.UIState;
import nc.ui.uif2.model.AbstractAppModel;
import nc.vo.ts.adcountage.AdCountAgeBVO;

/**
 * 自定义按钮:预收账龄查询
 * @author Monkey
 *
 */
public class AdCountageQueryAction extends NCAction{

	//初始化构造函数
	public AdCountageQueryAction(){
		setBtnName("预收账龄查询");
		setCode("adCountageQuery");
	}

	private ShowUpableBillForm editor;
	private AbstractAppModel model;

	public ShowUpableBillForm getEditor() {
		return editor;
	}

	public void setEditor(ShowUpableBillForm editor) {
		this.editor = editor;
	}

	public AbstractAppModel getModel() {
		return model;
	}

	public void setModel(AbstractAppModel model) {
		this.model = model;
	}

	// 设置按钮可用
	@Override
	protected boolean isActionEnable() {
		return this.model.getUiState() == UIState.EDIT;
	}

	@Override
	public void doAction(ActionEvent e) throws Exception {
		//得到所有行
		int rowCount =this.editor.getBillCardPanel().getRowCount();
		//判断是否有数据
		if(rowCount>0){
			if(MessageDialog.showYesNoDlg(new Container(), "提示", "表体已经存在预收账龄,是否重置?")!=nc.ui.pub.beans.UIDialog.ID_YES){
				return;
			}
		}
		// 重置表体数据
		this.getEditor().getBillCardPanel().getBillModel().clearBodyData();
			
		//拼接sql查询相应数据
		StringBuffer sql = new StringBuffer()
		.append(" select org_dept.name as dept2,")//部门2
		.append(" bd_cust_supplier.pk_areacl as larea,")//区域
		.append(" bd_psndoc.name as mktrept,")//销售代表
		.append(" bd_cust_supplier.name as ctmname,")//客户名称
		.append(" gl_detail.debitamount as lbalance,")//余额
		.append(" gl_detail.prepareddatev as makedate")//制单日期
		.append(" from gl_detai")//凭证明细
		.append(" left join gl_docfree1 on gl_detail.assid = gl_docfree1.assid")//assid 辅助核算
		.append(" left join org_dept on gl_docfree1.f1 = org_dept.pk_dept")//HR部门
		.append(" left join bd_cust_supplier on gl_docfree1.f4 = bd_cust_supplier.pk_cust_sup")//客商
		.append(" left join bd_psndoc on gl_docfree1.f2 = bd_psndoc.pk_psndoc")//人员基本信息
		;
		// 预收
		String sql1 = sql.toString() + " where gl_detail.accountcode like '1123%'" +
				" order by bd_cust_supplier.pk_cust_sup,gl_detail.prepareddatev";
		// 应收
		String sql2 = sql.toString() + " where gl_detail.accountcode like '1122%'" +
				" order by bd_cust_supplier.pk_cust_sup,gl_detail.prepareddatev"; 

		IUAPQueryBS bs =(IUAPQueryBS)NCLocator.getInstance().lookup(IUAPQueryBS.class);
		//查询预收数据
		ArrayList> list1 = (ArrayList>) bs.executeQuery(sql1, new ArrayListProcessor());
		//查询应收数据
		ArrayList> list2 = (ArrayList>) bs.executeQuery(sql1, new ArrayListProcessor());
		//新建表体VO,用于存放数据
		AdCountAgeBVO[] bodyvos1 = null;//用于存放预收数据
		AdCountAgeBVO[] bodyvos2 = null;//用于存放应收数据
		AdCountAgeBVO[] bodyvos = null;//用于存放最终数据
		//list存入vo
		bodyvos1 = getVos(list1);
		bodyvos2 = getVos(list2);
		//预收、应收数据核销,生成最终结果数据
		bodyvos = getBodyVOs(bodyvos1,bodyvos2);


	}

	/**
	 * 预收、应收数据核销,生成最终结果数据
	 * @param bodyvos1	预收数据
	 * @param bodyvos2	应收数据
	 * @return bodyvos	最终数据
	 * @核销规则:先按照合同号,核销;再按照客户核销;最后每个客户生成一条数据
	 * @天数=当前-业务日期
	 */
	private AdCountAgeBVO[] getBodyVOs(AdCountAgeBVO[] bodyvos1,
			AdCountAgeBVO[] bodyvos2) {
		AdCountAgeBVO[] bodyvos = null;//用于存放最终数据
		if(bodyvos1 == null){//如果预收数据为空
			bodyvos = bodyvos2;
		}
		if(bodyvos2 == null){ //如果应收数据为空
			bodyvos = bodyvos1;
		}
		if(bodyvos1 != null && bodyvos2 != null){
			
		}
		return bodyvos;
	}

	
	/**
	 * list 转换 vo
	 * ArrayList 转换成AdCountAgeBVO[]
	 * @param list1
	 * @return
	 */
	private AdCountAgeBVO[] getVos(ArrayList> list) {
		// list 存放的是多个bodyvo,map里String是字段编码,object是值
		AdCountAgeBVO[] bodyvos = null;
		if(list != null && list.size() > 0){
			bodyvos = new AdCountAgeBVO[list.size()];
			for(int i = 0; i < list.size(); i++){
				AdCountAgeBVO bodyvo = new AdCountAgeBVO();
				HashMap map = list.get(i);
				String[] itemNames = bodyvo.getAttributeNames();
				for(String itemName : itemNames){
					bodyvo.setAttributeValue(itemName, map.get(itemName));
				}
				bodyvos[i] = bodyvo;
			}
		}
		return bodyvos;
	}

}

1.2、XML注册自定义按钮 

###参考XML


	
	

1.3、xml配置按钮何时可见:示例编辑(新增和修改)下可见 



    
        
        
        
        
        
        
    

2、重写XML

重写一个xml文件,使用xml 的import方法将外面的xml文件导入进去。

3、重新对应Action类

据xml的配置文件,重写这个类。

结语

  NC6添加按钮功能并不复杂,但是经常会出现单据打不开或者打开后列表按钮消失的问题,这个时候就需要去检查XML和Action类,可以通过录日志查看具体失败原因。

你可能感兴趣的:(NC6,UAP,java,开发语言)