培训day06(按钮弹窗)
1.登录系统管理员,在单据模板初始化中增加弹窗
在单据模板类型的框中输入单据模板类型(px_popover),点击显示模板,点击增加,右键点击增加自定义项,修改增加自定义项的可编辑性和类型,点击保存模板(模块为H6H1)。
2.保存模板时出现:false保存模板失败
解决方案:重启,清下缓存,重新保存几次,应该会好。
3.弹窗中的参数(TrainingPopoverParam.java)
4.弹窗按钮事件(TrainingPopoverAction.java)
public class TrainingPopoverAction extends BaseAction<AggYhlypxhtfkdVO> {
private static final long serialVersionUID=-1046058299865292490L;
public TrainingPopoverAction(){
setCode("TrainingPopoverAction");
setBtnName("培训弹窗");
}
public void doAction(ActionEvent arg0) throws Exception {
//获取选中AggVO
AggYhlypxhtfkdVO aggvo = getSelectedAggVo();
//封装参数对象
TrainingPopoverParam param=new TrainingPopoverParam();
//把当前单据表头的单据号赋值给参数对象中的单据号
param.setVbillno(aggvo.getParentVO().getVbillno());
//把当前单据表头的本币汇率赋值给参数对象中的本币汇率
param.setCurrate(aggvo.getParentVO().getCurrate());
//把当前单据表头的放款金额原币赋值给参数对象中的放款金额原币
param.setNorifkmny(aggvo.getParentVO().getNorifkmny());
//把当前单据表头的放款金额本币赋值给参数对象中的放款金额本币
param.setNrerate(aggvo.getParentVO().getNrerate());
//把当前单据表头的币种赋值给参数对象中的币种
param.setPk_currtype(aggvo.getParentVO().getPk_currtype());
//弹框显示
PopupDialog dialog=new PopupDialog(param);
//弹窗是否点击确定按钮
if(dialog.showModal()!=UIDialog.ID_OK){
return;
}
//获取维护的值
param=dialog.getParam();
//克隆AggVO aggvo.clone()
AggYhlypxhtfkdVO clientvo=(AggYhlypxhtfkdVO) aggvo.clone();
//弹窗中的更新字段赋值给克隆AggVO
updateLoanctapp(clientvo,param);
//执行更新-调用单据的更新服务 getService().update(修改后VO,修改前VO)
getService().update(new AggYhlypxhtfkdVO[]{clientvo},new AggYhlypxhtfkdVO[]{aggvo});
//刷新
doRefresh();
}
//弹窗中的更新字段赋值给克隆AggVO
private void updateLoanctapp(AggYhlypxhtfkdVO clientvo,TrainingPopoverParam param) {
//把更新后参数对象中的本币汇率赋值给克隆AggVO中的本币汇率字段
clientvo.getParentVO().setCurrate(param.getCurrate());
//把更新后参数对象中的原币赋值给克隆AggVO中的原币字段
clientvo.getParentVO().setNorifkmny(param.getNorifkmny());
//更新后参数对象中的本币汇率和更新后参数对象中的原币相乘的结果赋值给克隆AggVO中的本币字段
clientvo.getParentVO().setNrerate(param.getCurrate().multiply(param.getNorifkmny()));
//克隆AggVO的状态赋值为更新态
clientvo.getParentVO().setStatus(VOStatus.UPDATED);
}
private IYhlypxfkdMaintain service;
private IYhlypxfkdMaintain getService(){
if(service == null){
service = NCLocator.getInstance().lookup(IYhlypxfkdMaintain.class);
}
return service;
}
@Override
protected boolean isActionEnable() {
// TODO 自动生成的方法存根
if(getModel().getSelectedOperaDatas()==null){
return false;
}else{
Object[] objs=getModel().getSelectedOperaDatas();
for(int i = 0; i < objs.length; i++){
AggYhlypxhtfkdVO aggvo = (AggYhlypxhtfkdVO) objs[i];
String jxzq = NullValueUtils.getNullStringValue(aggvo.getParentVO().getJxzq());
if(!jxzq.equals("年") && !jxzq.equals("半年")){
return false;
}
}
}
return true;
}
}
5.弹窗类(PopupDialog.java)
public class PopupDialog extends UIDialog {
private static final long serialVersionUID = 8569366112349546821L;
private UIPanel UIPanel = null;
private BillCardPanel billCardPanel = null; // 获取到在NC里面对应的单据模板,不用自己画模板
private UIPanel UIPanel3 = null;
private UIButton okBtn;
private TrainingPopoverParam param;
@SuppressWarnings("deprecation")
public PopupDialog(TrainingPopoverParam param) {
init(param); // 设置窗体大小
}
public void init(TrainingPopoverParam param) {
this.setContentPane(getUIPanel());
this.setTitle("培训弹窗");
this.setSize(600, 300);
this.param = param;
//把参数对象中的单据号赋值给弹窗中的单据号字段
getBillCardPanel().setHeadItem("vbillno", param.getVbillno());
//把参数对象中的本币汇率赋值给弹窗中的本币汇率字段
getBillCardPanel().setHeadItem("currate", param.getCurrate());
//把参数对象中的放款金额原币赋值给弹窗中的放款金额原币字段
getBillCardPanel().setHeadItem("norifkmny", param.getNorifkmny());
//把参数对象中的放款金额本币赋值给弹窗中的放款金额本币字段
getBillCardPanel().setHeadItem("nrerate", param.getNrerate());
//把参数对象中的币种赋值给弹窗中的币种字段
getBillCardPanel().setHeadItem("pk_currtype", param.getPk_currtype());
}
private UIPanel getUIPanel() {
if (UIPanel == null) {
UIPanel = new UIPanel();
UIPanel.setLayout(new BorderLayout());
UIPanel.add(getBillCardPanel(), java.awt.BorderLayout.CENTER);
UIPanel.add(getUIPanel3(), java.awt.BorderLayout.SOUTH);
}
return UIPanel;
}
private BillCardPanel getBillCardPanel() {
if (billCardPanel == null) {
billCardPanel = new BillCardPanel();
billCardPanel.loadTemplet("px_popover", null, AppContext.getInstance().getPkUser(), null);
billCardPanel.addEditListener(new BillEditListener() {
@Override
public void bodyRowChange(BillEditEvent arg0) {
}
//弹窗里编辑后方法
@Override
public void afterEdit(BillEditEvent e) {
String key = e.getKey();
if(key.equals("currate") || key.equals("norifkmny")){
//本币汇率
UFDouble currate = NullValueUtils.getNullUFdoubleValue(getBillCardPanel().getHeadItem("currate").getValueObject());
//申请贷款原币
UFDouble noriappmny = NullValueUtils.getNullUFdoubleValue(getBillCardPanel().getHeadItem("norifkmny").getValueObject());
//申请贷款本币 = 原币×汇率
getBillCardPanel().setHeadItem("nrerate", currate.multiply(noriappmny));
}
}
});
}
return billCardPanel;
}
private UIPanel getUIPanel3() {
if (UIPanel3 == null) {
initUIButtons();
UIPanel3 = new UIPanel();
UIPanel UIPanel4 = new UIPanel();
UIPanel4.setLayout(new FlowLayout());
UIPanel4.add(okBtn);
UIPanel3.add(UIPanel4, null);
}
return UIPanel3;
}
private void initUIButtons() {
okBtn = new UIButton("确定");
okBtn.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
try {
getBillCardPanel().dataNotNullValidate();
if (MessageDialog.showOkCancelDlg(null, "提示", "是否更新当前单据?") != UIDialog.ID_OK) {
return;
}
//获取弹窗里的本币汇率
param.setCurrate(NullValueUtils.getNullUFdoubleValue(getBillCardPanel().getHeadItem("currate").getValueObject()));
//获取弹窗里的合同金额原币
param.setNorifkmny(NullValueUtils.getNullUFdoubleValue(getBillCardPanel().getHeadItem("norifkmny").getValueObject()));
} catch (BusinessException e1) {
// TODO 自动生成的 catch 块
MessageDialog.showErrorDlg(getBillCardPanel(), "错误", e1.getMessage());
return;
}
closeOK();
}
});
}
public TrainingPopoverParam getParam() {
return param;
}
public void setParam(TrainingPopoverParam param) {
this.param = param;
}
}
6.Yhlypxfkd_config.xml配置文件
在卡片显示下的按钮中新增一个按钮:
<ref bean="TrainingPopoverAction" />
在列表显示下的按钮中新增一个按钮:
<ref bean="TrainingPopoverAction" />
给新增的按钮和PopupAction.java联系在一起:
<!--培训弹窗按钮-->
<bean id="TrainingPopoverAction" class="nc.ui.yhlypx.yhlypxfkd.ace.action.TrainingPopoverAction">
<property name="model"><ref bean="bmModel"/></property>
<property name="editor"><ref bean="billForm"/></property>
</bean>