NC65新增按钮
基于用友NC65标准功能单据不能满足业务需求,需要客开按钮,本章提供傻瓜式NC65新增按钮教程。从前台配置,到后台代码,应有尽有。
前台操作步骤
本次演示以非产品发货单,增加运单信息按钮演示
1、在功能注册,找到非产品发货单功能节点
2、点击参数注册找到BeanConfigFilePath对应的xml的文件以及xml文件对应的路径
3、创建在eclipse创建模块开发的项目
4、选中项目中的src/client创建一个包。包路径和上面BeanConfigFilePath对应的xml路径一致,文件名为PluginBeanConfigFilePath_ 加自定义名称
5、配置按钮xml代码如下
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE beans PUBLIC ".//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!--新增按钮配置-->
<bean class="nc.ui.pubapp.plugin.action.InsertActionInfo">
<!--actionsOfCard 表示按钮会出现在卡片状态下,actionsOfList表示会出现在列表状态下-->
<property name="actionContainer" ref="actionsOfCard" />
<!--notedit表示当前单据为非编辑状态下才会出现,edit表示编辑状态下才可以出现-->
<property name="actionType" value="notedit" />
<!--printActionGroup参数是根据BeanConfigFilePath对应的xml中找到的,作用是加载当前单据哪个按钮周围,根据名称我将按钮加在打印按钮组周围-->
<property name="target" ref="printActionGroup" />
<!--before表示加载打印按钮组之前,如果填写after表示加在打印按钮组之后-->
<property name="pos" value="before" />
<!--NonProdShipAction客开的按钮的id-->
<property name="action" ref="NonProdShipAction" />
</bean>
<!--新增按钮-->
<bean class="nc.ui.pubapp.plugin.action.InsertActionInfo">
<property name="actionContainer" ref="actionsOfList" />
<property name="actionType" value="notedit" />
<property name="target" ref="printActionGroup" />
<property name="pos" value="before" />
<property name="action" ref="NonProdShipAction" />
</bean>
<!--自定义按钮nc.ui.so.m30.billui.action.NonProdShipAction表示类的全路径-->
<bean id="NonProdShipAction" class="nc.ui.so.m30.billui.action.NonProdShipAction">
<property name="model" ref="manageAppModel" />
<property name="editor" ref="billFormEditor" />
<!--code按钮编码-->
<property name="code" value="NonProdShipAction" />
</bean>
</beans>
6、配置按钮对应的java代码
(1)生成xml对应的java代码
选中PluginBeanConfigFilePath_lcwy.xml右键,选中SpringXml to Java
生成结果如下
package nc.ui.so.m30.billui.model;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import nc.ui.uif2.factory.AbstractJavaBeanDefinition;
public class PluginBeanConfigFilePath_lcwy extends AbstractJavaBeanDefinition {
private Map<String, Object> context = new HashMap();
public nc.ui.pubapp.plugin.action.InsertActionInfo getInsertActionInfo_0() {
if (context.get("nc.ui.pubapp.plugin.action.InsertActionInfo#0") != null)
return (nc.ui.pubapp.plugin.action.InsertActionInfo) context
.get("nc.ui.pubapp.plugin.action.InsertActionInfo#0");
nc.ui.pubapp.plugin.action.InsertActionInfo bean = new nc.ui.pubapp.plugin.action.InsertActionInfo();
context.put("nc.ui.pubapp.plugin.action.InsertActionInfo#0", bean);
bean.setActionContainer((nc.ui.uif2.actions.IActionContainer) findBeanInUIF2BeanFactory("actionsOfCard"));
bean.setActionType("edit");
bean.setTarget((javax.swing.Action) findBeanInUIF2BeanFactory("editLinkActionGroup"));
bean.setPos("after");
bean.setAction(getNonProdShipAction());
setBeanFacotryIfBeanFacatoryAware(bean);
invokeInitializingBean(bean);
return bean;
}
public nc.ui.pubapp.plugin.action.InsertActionInfo getInsertActionInfo_1() {
if (context.get("nc.ui.pubapp.plugin.action.InsertActionInfo#1") != null)
return (nc.ui.pubapp.plugin.action.InsertActionInfo) context
.get("nc.ui.pubapp.plugin.action.InsertActionInfo#1");
nc.ui.pubapp.plugin.action.InsertActionInfo bean = new nc.ui.pubapp.plugin.action.InsertActionInfo();
context.put("nc.ui.pubapp.plugin.action.InsertActionInfo#1", bean);
bean.setActionContainer((nc.ui.uif2.actions.IActionContainer) findBeanInUIF2BeanFactory("actionsOfList"));
bean.setActionType("notedit");
bean.setTarget((javax.swing.Action) findBeanInUIF2BeanFactory("printActionGroup"));
bean.setPos("before");
bean.setAction(getNonProdShipAction());
setBeanFacotryIfBeanFacatoryAware(bean);
invokeInitializingBean(bean);
return bean;
}
public nc.ui.so.m30.billui.action.NonProdShipAction getNonProdShipAction() {
if (context.get("NonProdShipAction") != null)
return (nc.ui.so.m30.billui.action.NonProdShipAction) context
.get("NonProdShipAction");
nc.ui.so.m30.billui.action.NonProdShipAction bean = new nc.ui.so.m30.billui.action.NonProdShipAction();
context.put("NonProdShipAction", bean);
bean.setModel((nc.ui.uif2.model.AbstractAppModel) findBeanInUIF2BeanFactory("manageAppModel"));
bean.setEditor((nc.ui.pubapp.uif2app.view.BillForm) findBeanInUIF2BeanFactory("billFormEditor"));
bean.setCode("NonProdShipAction");
setBeanFacotryIfBeanFacatoryAware(bean);
invokeInitializingBean(bean);
return bean;
}
}
注意:如果生成失败,需要检查xml配置是否正确
生成目录如下
(2)编写客开动作类,需要继承nc.ui.uif2.NCAction类具体代码如下:
package nc.ui.so.m30.billui.action;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import nc.vo.querytemplate.TemplateInfo;
import nc.vo.so.m30.entity.SaleOrderHVO;
import nc.vo.so.m30.entity.SaleOrderVO;
import nc.vo.so.m4331.entity.DeliveryHVO;
import nc.vo.so.m4331.entity.DeliveryVO;
import nc.bs.framework.common.InvocationInfoProxy;
import nc.bs.framework.common.NCLocator;
import nc.hr.utils.PubEnv;
import nc.itf.uap.IUAPQueryBS;
import nc.jdbc.framework.processor.BeanListProcessor;
import nc.jdbc.framework.processor.ColumnProcessor;
import nc.ui.trade.query.HYQueryConditionDLG;
import nc.ui.uif2.NCAction;
import nc.ui.uif2.UIState;
import nc.ui.uif2.model.AbstractAppModel;
import nc.ui.brmm.dlg.SaledetaileDlg;
import nc.ui.pub.ClientEnvironment;
import nc.ui.pub.beans.MessageDialog;
import nc.ui.pub.pf.BillSourceDLG;
import nc.ui.pub.pf.BillSourceVar;
import nc.ui.pubapp.uif2app.view.BillForm;
import nc.vo.arap.receivable.AggReceivableBillVO;
import nc.vo.arap.receivable.ReceivableBillVO;
import nc.vo.fc.firststzj.FirstHVO;
import nc.ui.pubapp.uif2app.actions.RefreshSingleAction;
import nc.ui.querytemplate.QueryConditionDLG;
public class NonProdShipAction extends NCAction {
private BillForm editor;
private AbstractAppModel model;
public NonProdShipAction() {
super.setBtnName("运单信息");
super.setCode("NonProdShipAction");
}
public BillForm getEditor() {
return editor;
}
public void setEditor(BillForm editor) {
this.editor = editor;
}
public AbstractAppModel getModel() {
return model;
}
public void setModel(AbstractAppModel model) {
this.model = model;
model.addAppEventListener(this);
}
@Override
protected boolean isActionEnable() {
UIState uiState = model.getUiState();
return true;
}
@Override
public void doAction(ActionEvent paramActionEvent) throws Exception {
MessageDialog.showHintDlg(editor, "提示", "客开按钮点击成功");
}
}
}
注意:NonProdShipAction的全路径和xml中的NonProdShipAction全路径保持一致,必须有get和set方法。
代码结构图如下:
效果图如下: