//打印模板信息
//Select * From Pub_Systemplate Where Tempstyle=3
String pkCorp=getModel().getContext().getPk_org();
String funCode="20080EBM";
String pkUser=getModel().getContext().getPk_loginUser();
String nodeKey="cheque";
//参数为父窗口
PrintEntry print = new PrintEntry(chequeInfo);
print.setAdjustable(true);//可以调整
print.setMultiPrintCopies(false);//打印多份
print.setAttachPrintable(false);//附件打印
print.setTemplateID(pkCorp, funCode, pkUser, null, nodeKey);
ChequeVO[] datas = chequeInfo.getDatas();
//打印的数据,需要于模板里字段名一致
for (int i = 0; i < datas.length; i++) {
ChequeVO chequeVO = datas[i];
//实现nc.ui.pub.print.IMetaDataDataSource接口
//重写getMDObjects()方法,将通过构造方法传入的数据返回给打印画布
print.setDataSource(new ChequeDataSource(new Object[]{
chequeVO}));
}
//实现nc.ui.pub.print.IPrintListener接口,处理打印前后的逻辑
ChequePrintListener printListener = new ChequePrintListener();
printListener.setBills(datas);
printListener.setModel(getModel());
printListener.setDataManager(getDataManager());
print.setPrintListener(printListener);
print.preview();//预览
打印数据源
package nc.ui.arap.actions.cheque;
import nc.ui.pub.print.IMetaDataDataSource;
public class ChequeDataSource implements IMetaDataDataSource {
/**
*
*/
private static final long serialVersionUID = 5757765450250679031L;
private Object[] printData;
public ChequeDataSource(Object[] printData) {
super();
this.printData = printData;
}
@Override
public String[] getItemValuesByExpress(String paramString) {
// TODO 自动生成的方法存根
return null;
}
@Override
public boolean isNumber(String paramString) {
// TODO 自动生成的方法存根
return false;
}
@Override
public String[] getDependentItemExpressByExpress(String paramString) {
// TODO 自动生成的方法存根
return null;
}
@Override
public String[] getAllDataItemExpress() {
// TODO 自动生成的方法存根
return null;
}
@Override
public String[] getAllDataItemNames() {
// TODO 自动生成的方法存根
return null;
}
@Override
public String getModuleName() {
// TODO 自动生成的方法存根
return null;
}
@Override
public Object[] getMDObjects() {
// TODO 自动生成的方法存根
return printData;
}
}
打印监听器
package nc.ui.arap.actions.cheque;
import java.util.ArrayList;
import java.util.List;
import nc.bs.framework.common.NCLocator;
import nc.itf.arap.cheque.IChequeNo;
import nc.ui.arap.bill.ArapBillUIUtil;
import nc.ui.pub.print.IPrintListener;
import nc.ui.pub.print.PrintException;
import nc.ui.pubapp.uif2app.model.BillManageModel;
import nc.ui.pubapp.uif2app.query2.model.IModelDataManager;
import nc.ui.uif2.UIState;
import nc.ui.uif2.model.AbstractUIAppModel;
import nc.vo.arap.basebill.BaseAggVO;
import nc.vo.arap.basebill.BaseBillVO;
import nc.vo.arap.cheque.ChequeVO;
import nc.vo.arap.pub.ArapBillTypeInfo;
import nc.vo.fipub.exception.ExceptionHandler;
import nc.vo.pub.AggregatedValueObject;
import nc.vo.pub.BusinessException;
/**
* 支票打印监听
* @author xiangfeifei
*
*/
public class ChequePrintListener implements IPrintListener {
private ChequeVO[] bills;
private AbstractUIAppModel model;
private IModelDataManager dataManager;
private IChequeNo chequeService = NCLocator.getInstance().lookup(IChequeNo.class);
private List<Integer> index = new ArrayList<Integer>();
private List<ChequeVO> failed = new ArrayList<ChequeVO>();
private List<ChequeVO> sucess = new ArrayList<ChequeVO>();
@Override
public void beforePrint() throws PrintException {
}
@Override
public void afterPrint(int paramInt) throws PrintException {
if(bills != null){
try {
splitCheque();
update(sucess.toArray(new ChequeVO[0]));
refresh();//代码复制列表刷新和卡片刷新
delete(failed.toArray(new ChequeVO[0]));
} catch (Exception e) {
throw new PrintException(e.getMessage());
}
}
}
@Override
public void beforePrintPage(int paramInt1, int paramInt2)
throws PrintException {
}
@Override
public void afterPrintPage(int paramInt1, int paramInt2)
throws PrintException {
index.add(paramInt1);
}
private void splitCheque() throws Exception {
for (int i = 0; i < bills.length; i++) {
ChequeVO vo = bills[i];
if(index.contains(i)){
sucess.add(vo);
}else{
failed.add(vo);
}
}
}
private void delete(ChequeVO[] vos) throws Exception {
chequeService.deleteCheque(vos);
}
private void update(ChequeVO[] vos) throws Exception {
chequeService.update(vos);
}
private void refresh() throws Exception {
if (getModel().getUiState() == UIState.EDIT) {
Object obj = model.getSelectedData();
if ((obj != null) && ((obj instanceof AggregatedValueObject))) {
BaseBillVO parentVO = (BaseBillVO) ((AggregatedValueObject) obj)
.getParentVO();
BaseAggVO newVO = getBillAggVO(parentVO.getPk_billtype(),
parentVO.getPrimaryKey());
if ((newVO == null)
|| (Integer.valueOf(1).equals(newVO.getParentVO()
.getAttributeValue("dr")))) {
((BillManageModel) getModel()).directlyDelete(obj);
} else {
((BillManageModel) getModel()).directlyUpdate(newVO);
}
}
} else {
getDataManager().refresh();
}
}
private BaseAggVO getBillAggVO(String pk_billtype, String pk) {
BaseAggVO[] bill = null;
try {
bill = NCLocator.getInstance().lookup(
ArapBillTypeInfo.getInstance(pk_billtype)
.getBillQueryService())
.findBillByPrimaryKey(new String[] {
pk });
} catch (BusinessException e) {
ExceptionHandler.consume(e);
}
BaseAggVO baseAggVO = (null != bill) && (bill.length > 0) ? bill[0]
: null;
ArapBillUIUtil
.refreshChildVO2HeadVO(new AggregatedValueObject[] {
baseAggVO });
return baseAggVO;
}
public ChequeVO[] getBills() {
return bills;
}
public void setBills(ChequeVO[] bills) {
this.bills = bills;
}
public AbstractUIAppModel getModel() {
return model;
}
public void setModel(AbstractUIAppModel model) {
this.model = model;
}
public IModelDataManager getDataManager() {
return dataManager;
}
public void setDataManager(IModelDataManager dataManager) {
this.dataManager = dataManager;
}
}