NC57双击表体行弹框

1.在UI类中的构造方法里调用一个自定义的方法,方法名随便写,本例中是afterinitdlg(parentui);

如下为构造函数:

	ReturnArrivalUI parentui = this;

	public ReturnArrivalUI() {
		super();
		afterinit();
		afterinitdlg(parentui);
	}

2.方法
<span style="color:#FF6666;"><strong>afterinitdlg(parentui);</strong></span>
的实现可以在当前类中,也可以放在UI类的父类,本例放在其父类BillManageUI中

BillManageUI 继承于nc.ui.trade.manage.BillManageUI  是一个自定义的BillManageUI,名字与父类nc.ui.trade.manage.BillManageUI
一样,也可以不一样,这里仅作为例子

	/**
	 * 
	 * 说明:实现双击卡片表体 弹出书的详细信息
	 *
	 * 创建人: 李林君 邮箱: 
	 * 创建日期: 2013-8-16
	 * @param parent
	 */
	public void afterinitdlg ( final Container parent){
	
		getBillCardWrapper().getBillCardPanel().addBodyMouseListener(new BillTableMouseListener() {
			public void mouse_doubleclick(BillMouseEnent e) {
				try {
					SlArrivivalBVO[] bvo = (SlArrivivalBVO[]) getBillCardWrapper().getSelectedBodyVOs();
					BookInfoDLG dlg = new BookInfoDLG(parent, "详细信息");
					String	pk_invbasdoc =bvo[0].getAttributeValue("pk_invbasdoc").toString();//存货基本档案主键
					dlg.setConditionData(pk_invbasdoc);
					dlg.setVisible(true);
				} catch (Exception e1) {
					e1.printStackTrace();
				}
			}
		});
	}

3. 上面代码块中的弹框类,本例如下:

/**
 * 目标: 书本详细信息
 * 创建人: 李林君 邮箱: 
 * 创建日期: 2013-8-16
 * <p>
 * 
 * @version 1.0
 * @since NC5.7
 */
class BookInfoDLG extends UIDialog {

	private static BookInfoDLG bookInfoDlg;
	private ReturnArrivalUI parent;
	private BillListPanel listPanel;
	private BillCardPanel cardPanel = new BillCardPanel();

	/**
	 * 构造函数
	 * 
	 * @param parent
	 * @param title
	 * @throws Exception
	 */
	public BookInfoDLG(Container parent, String title) throws Exception {
		super(parent, title);
		this.parent = (ReturnArrivalUI) parent;
		init();
	}

	/**
	 * 说明:初始化
	 * 创建人: 李林君 邮箱: 
	 * 创建日期: 2013-8-15
	 * 
	 * @throws Exception
	 */

	private void init() throws Exception {
		setSize(660, 500);
		setResizable(true);
		setLayout(new BorderLayout());
		JPanel panel = new JPanel(new BorderLayout());
		panel.add(getCardPanel(), BorderLayout.CENTER);
		add(panel, BorderLayout.CENTER);
		Dimension dsScreen = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
		setLocation((dsScreen.width - getWidth()) / 2 - 100, (dsScreen.height - getHeight()) / 2 - 50);
	}

	/**
	 * 说明:加载模板
	 * 创建人: 李林君 邮箱: 
	 * 创建日期: 2013-8-15
	 * 
	 * @return
	 */

	private Component getCardPanel() {
		cardPanel.loadTemplet("TN1B_BS",
				"",
				ClientEnvironment.getInstance().getUser().getPrimaryKey(),
				ClientEnvironment.getInstance().getCorporation().getPrimaryKey());

		return cardPanel;
	}

	/**
	 * 说明:
	 * 返回卡片,包含内容
	 * 创建人: 李林君 邮箱: 
	 * 创建日期: 2013-8-15
	 * 
	 * @return
	 */
	private BillCardPanel getBillCardPanel() {
		if (cardPanel == null) {
			cardPanel = new BillCardPanel();
			cardPanel.setName("详细信息");
			BillData billdata = geneBillData();
			if (null != billdata)
				cardPanel.setBillData(billdata);
			if (null != billdata)
				cardPanel.setBillData(billdata);
		}
		return cardPanel;
	}

	/**
	 * 说明:
	 * 从数据库查找单据模板信息,放在界面上
	 * 创建人: 李林君 邮箱: 
	 * 创建日期: 2013-8-15
	 * 
	 * @return
	 */
	private BillData geneBillData() {
		IBKarrivalService service = NCLocator.getInstance().lookup(IBKarrivalService.class);
		List<BillTempletBodyVO> billTempletBodyVOList = null;
		try {
			String sql =
					"select * from pub_billtemplet_b where "
							+ "pk_billtemplet in (select pk_billtemplet from pub_billtemplet where pk_billtypecode='TN1B_BS' and isnull(dr,0)=0) and isnull(dr,0)=0";
			billTempletBodyVOList = service.getBillBillTempletBodyVO(sql);
		} catch (Exception e) {
			Logger.error(e.getMessage());
		}
		if (!Toolkit.isEmpty(billTempletBodyVOList)) {
			BillItem[] bodyItems = new BillItem[billTempletBodyVOList.size()];
			int index = 0;
			for (BillTempletBodyVO billTempletBodyVO : billTempletBodyVOList) {
				bodyItems[index] = new BillItem(billTempletBodyVO, true);
				bodyItems[index].setWidth(100);
				index++;
			}
			BillData billdata = new BillData();
			billdata.setHeadItems(bodyItems);
			return billdata;
		}
		return null;
	}

	/**
	 * 说明:
	 * 给界面赋值
	 * 创建人: 李林君 邮箱: 
	 * 创建日期: 2013-8-15
	 * 
	 * @param invcode
	 * @param pk_publishtype
	 * @param nprice
	 * @param invname
	 * @param visbn
	 */
	public void setConditionData(String pk_invbasdoc) {
		IUAPQueryBS service = NCLocator.getInstance().lookup(IUAPQueryBS.class);
		// 表头字段赋值
		StringBuilder sql = new StringBuilder();
		sql.append("select ");
		sql.append("pk_publishtype,");
		sql.append("pk_btencategory,");
		sql.append("pk_invcl,");
		sql.append("veditor,");
		sql.append("vtranslator,");
		sql.append("pk_grade,");
		sql.append("dpublishingdate,");
		sql.append("vpublishingno,");
		sql.append("pk_folio,");
		sql.append("pk_binding,");
		sql.append("pk_taxitems,");
		sql.append("pk_caricategory,");
		sql.append("vrecrdtype,");
		sql.append("pk_invbasdoc ,");
		sql.append("invcode,");// 14
		sql.append("pk_publishtype,");
		sql.append("nprice,");
		sql.append("visbn,");
		sql.append("invname ");
		sql.append(" from bd_invbasdoc where pk_invbasdoc='"
				+ pk_invbasdoc
				+ "'");
		sql.append(" and isnull(dr,0)=0");
		try {
			ArrayList<Object[]> invlist =
					(ArrayList<Object[]>) service.executeQuery(sql.toString(), new ArrayListProcessor());

			if (null != invlist
					&& invlist.size() > 0) {

				cardPanel.setHeadItem("pk_publishtype", invlist.get(0)[0]);
				cardPanel.setHeadItem("pk_btencategory", invlist.get(0)[1]);
				cardPanel.setHeadItem("pk_invcl", invlist.get(0)[2]);
				cardPanel.setHeadItem("veditor", invlist.get(0)[3]);
				cardPanel.setHeadItem("vtranslator", invlist.get(0)[4]);
				cardPanel.setHeadItem("pk_grade", invlist.get(0)[5]);
				cardPanel.setHeadItem("dpublishingdate", invlist.get(0)[6]);
				cardPanel.setHeadItem("vpublishingno", invlist.get(0)[7]);
				cardPanel.setHeadItem("pk_folio", invlist.get(0)[8]);
				cardPanel.setHeadItem("pk_binding", invlist.get(0)[9]);
				cardPanel.setHeadItem("pk_taxitems", invlist.get(0)[10]);
				cardPanel.setHeadItem("pk_caricategory", invlist.get(0)[11]);
				cardPanel.setHeadItem("vrecrdtype", invlist.get(0)[12]);

				cardPanel.setHeadItem("cinventorycode", invlist.get(0)[14]);
				cardPanel.setHeadItem("pk_publishtype", invlist.get(0)[15]);
				cardPanel.setHeadItem("nprice", invlist.get(0)[16]);
				cardPanel.setHeadItem("visbn", invlist.get(0)[17]);
				cardPanel.setHeadItem("invname", invlist.get(0)[18]);

				String sqlonhand="select nonhandnum from ic_onhandnum where cinvbasid ='"+pk_invbasdoc+"'";
				BigDecimal nonhandnum= (BigDecimal) service.executeQuery(sqlonhand, new C

<think>我们正在处理一个关于NC65系统客开需求的问题:用户希望在中添加按钮。根据引用内容,我们可以参考一些类似的客开配置方法,但需要特别注意按钮的特殊性。分析思路:1.在NC65中,按钮通常需要扩展UIF2架的Action2.需要修改元数据注册信息,将按钮注册到操作栏3.可能涉及前端界面配置和后台事件处理具步骤:(1)创建自定义按钮Action类参考引用[1]中的LinkQueryAction写法,但需要继承适合的Action基类,通常为nc.ui.pubapp.uif2app.actions.BodyTableRowAction(2)在元数据中注册Action类似引用[1]的bean配置,但作用域需定位到(3)配置按钮显示位置需要修改卡片界面和列界面的操作栏配置(4)实现按钮业务逻辑参考引用[3]中的业务规则实现方式详细实现:###步骤1:创建按钮Action类```javapackagenc.ui.example.action;//替换为实际包名importnc.ui.pubapp.uif2app.actions.BodyTableRowAction;importnc.ui.pubapp.uif2app.model.BillManageModel;publicclassAddBodyButtonActionextendsBodyTableRowAction{publicAddBodyButtonAction(){super();//设置按钮名称this.setCode("yourActionCode");this.setName("按钮显示文本");}@OverrideprotectedbooleanisActionEnable(){//启用条件判断(可选)BillManageModelmodel=(BillManageModel)getModel();returnsuper.isActionEnable()&&model.getSelectedBodyData()!=null;}@OverridepublicvoiddoAction()throwsException{//获取当前选中ObjectselectedLine=getModel().getSelectedBodyData();//在此处添加按钮点击后的业务逻辑}}```###步骤2:在配置文件中注册Action在单据的`config`目录下的`action`配置文件(如`action.xml`)中添加:```xml<beanid="addBodyButtonAction"class="nc.ui.example.action.AddBodyButtonAction"><propertyname="model"><refbean="billManageModel"/></property><propertyname="editor"><refbean="billBodyEditor"/></property></bean>```###步骤3:将按钮添加到界面修改卡片界面配置文件(如`card_config.xml`),在操作区添加按钮:```xml<container><actionref="addBodyButtonAction"/><!--其他按钮--></container>```###步骤4:实现业务逻辑在`doAction`方法中实现具功能,例如打开对话、调用服务等。可参考引用[3]中的异常处理方式:```java@OverridepublicvoiddoAction()throwsException{try{//业务代码}catch(Exceptione){ExceptionUtils.wrappException(e);}}```注意事项:1.按钮需要特别注意选中状态2.如果涉及数据保存,需考虑事务处理3.多语配置需在资源文件中定义按钮文本效果图示意:[操作栏][删除按钮][新增按钮][自定义按钮]§§相关问题§§1.如何控制NC65按钮的显示条件?2.NC65按钮如何调用后端服务?3.如何为NC65按钮添加快捷键?</think>### NC65添加按钮的实现方法 在NC65系统中为添加按钮需要通过客开方式实现,主要涉及前端界面配置和后端逻辑处理。以下是详细步骤: --- ### 一、配置前端界面(卡片界面配置) 1. **修改卡片配置文件** 在卡片界面配置文件(如`card_config.xml`)中增加按钮定义: ```xml <!-- 操作按钮配置 --> <action id="bodyButtonAction" name="自定义操作" group="body" position="body_toolbar" class="nc.ui.example.action.BodyButtonAction"/> ``` - `group="body"`:指定作用于 - `position="body_toolbar"`:定位到工具栏 2. **配置按钮显示条件**(可选) 在元数据文件中配置按钮可见性规则: ```xml <button id="bodyButtonAction"> <show-rule>vdef1 == 'Y'</show-rule> <!-- 当自定义字段为Y时显示 --> </button> ``` --- ### 二、创建按钮Action类 实现按钮的后端逻辑: ```java package nc.ui.example.action; import nc.ui.pubapp.uif2app.actions.BodyTableRowAction; import nc.vo.pubapp.pattern.exception.ExceptionUtils; public class BodyButtonAction extends BodyTableRowAction { @Override public void doAction() { try { // 获取当前选中 Object selectedLine = getModel().getSelectedBodyData(); // 执自定义逻辑(示例:出消息) showInfoDialog("操作成功", "已处理号:" + selectedLine); } catch (Exception e) { ExceptionUtils.wrappException(e); } } } ``` --- ### 三、注册Action到Spring容器 在`applicationContext.xml`中注册Action: ```xml <bean id="bodyButtonAction" class="nc.ui.example.action.BodyButtonAction"> <property name="model" ref="billManageModel"/> <!-- 绑定数据模型 --> <property name="editor" ref="billBodyEditor"/> <!-- 绑定编辑器 --> </bean> ``` --- ### 四、按钮效果实现 1. **位置效果**: - 按钮会出现在工具栏区域 - 支持多同时选中操作 2. **数据交互**: ```java // 获取选中数据示例 Object[] selectedLines = getModel().getSelectedBodyDatas(); for(Object line : selectedLines) { // 处理每一数据 } ``` --- ### 五、注意事项 1. **权限控制**: ```xml <button id="bodyButtonAction"> <permission>voucher_edit</permission> <!-- 需编辑权限 --> </button> ``` 2. **按钮状态管理**: ```java // 在Action中控制按钮状态 protected boolean isActionEnable() { return getModel().getSelectedBodyCount() > 0; // 选中时启用 } ``` 3. **事务处理**: 涉及数据修改时需使用`nc.itf.uap.IUAPTxBP`接口提交事务[^3]。 --- ### 效果示意图 [工具栏] [新增] [删除] **[自定义按钮]** > **注**:完整实现需根据具业务需求扩展`doAction()`方法逻辑,如调用审批流、生成下游单据等[^2][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值