NC开发帮助

NC开发帮助

模拟编辑后时事件
//表头
nc.ui.pub.bill.BillEditEvent event = new nc.ui.pub.bill.BillEditEvent(getBillCardPanel().getHeadItem(“cbiztype”), Value, “cbiztype”);
//表体
nc.ui.pub.bill.BillEditEvent event1 = new nc.ui.pub.bill.BillEditEvent(
getBillCardPanel().getBodyItem(“noutnum”), getBillCardPanel().getBodyItem(“noutnum”).getValueObject(), null, “noutnum”, rowCount - 1,
BillItem.BODY);
afterEdit(event1);

// 取当前行
int iRow = getBillCardPanel().getBillTable().getSelectedRow();
合并行

this.getBillCardPanel().getBillTable(“pf_kptpweight”).setUI(new MergeTableUI(0, colomn, false));// 页签【权重】
鼠标监听
/**
* 初始化方法
/
@Override
protected void initSelfData()
{
/
*
* 表体单元格合并,设置不可排序
*/
this.getBillCardPanel().getBillTable(“pf_kpibas”).setSortEnabled(false);// 子表二<考核指标>
this.getBillCardPanel().getBillTable(“pf_kptpweight”).setSortEnabled(false);// 子表三<权重>

	this.getBillCardPanel().getBillTable("pf_kpibas").addMouseListener(new MouseAdapter()//鼠标监听
	{
		public void mouseClicked(MouseEvent e)
		{
			if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 2)// 双击鼠标左键
			{
				UITable tb = getBillCardPanel().getBillTable("pf_kpibas");
				if (tb.getSelectedColumn() == 3 && tb.getSelectedRow() >= 0)// 选择表格第3列[评分方法]
				{
					int currentrow = getBillCardPanel().getBillTable().getSelectedRow();
					Object pk_pointrule = getBillCardPanel().getBodyValueAt(currentrow, "vdef1");// 评分方案主键
					if (isPointRulePK(pk_pointrule))
					{
						updateKPI(pk_pointrule.toString());//评分方法编辑方法
					}
				}
			}
		}
	});

}
修改时表头编辑后事件改变表体需要改表行状态
int status = getBillCardPanel().getBillModel(“bx_ywszl_b”).getRowState(i);//行状态第一次不更新,因此需要设置为修改状态
if(status == BillModel.NORMAL)
getBillCardWrapper().getBillCardPanel().getBillModel(“bx_ywszl_b”).setRowState(i, BillModel.MODIFICATION);
查询条件 日期
between@=
介于@等于
#当前日期#
加载单据模板
billCardPanel.loadTemplet(“36JT01”, null, null, null);
前台校验Ts、时间戳校验(先不用看)
/**
* 由于UAP通过插件回写,所以需要在前台校验Ts
* @throws BusinessException
*/
private void checkTs(ClientUI clientUI) throws BusinessException {
ServiceContext context = new ServiceContext();
context.setQueryTs(true);
context.setBean(bean);
String ts = (String)clientUI.getService().doQuery(context);
CheckException.checkArgument(!ts.equals(bean.getTs().toString()), “单据已经有后续处理,请刷新界面”);
}

private void lock() throws BusinessException {
	boolean lock = PKLock.getInstance().acquireLock(bean.getPrimaryKey(), null, "cmp_applybill");
	CheckException.checkArgument(!lock, nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("payment","UPPpayment-000012")/*@res "有用户正在对该单据操作,请刷新界面"*/);
}

@SuppressWarnings("static-access")
private void unLock() throws BusinessException {
	PKLock.getInstance().getInstance().releaseLock(bean.getPrimaryKey(), null, "cmp_applybill");
}

【NC55】如何实现上传附件?(不用看)
传pk:主键 ,billcode:单据号,
if(pk != null,billcode != null) {
nc.ui.pub.filemanager.FileManagerDialog fd = new FileManagerDialog(this.UI,new String[]{pk}, new String[]{ billcode});
fd.setShowStyle(nc.ui.pub.filemanager.FileManagerDialog.SHOW_FILE_LOCAL);
fd.showModal();
}

/**
按钮m_boFileWrite点击时执行的动作,如有必要,请覆盖.
/
private void onBoFileWrite() throws Exception {
if (!getBufferData().isVOBufferEmpty()) {
AggregatedValueObject bill = getBufferData().getCurrentVO();
if (bill != null
bill.getParentVO() != null
bill.getParentVO().getPrimaryKey() != null) {
FileManageUI.showInDlg(
getBillUI(),
nc.ui.ml.NCLangRes.getInstance().getStrByID(uifactoryUPPuifactory-000110)/文件管理/,
bill.getParentVO().getPrimaryKey());
} else {
throw new BusinessException(nc.ui.ml.NCLangRes.getInstance().getStrByID(uifactory, UPPuifactory-000111)/
@res该单据无主键,无法进行文件管理*/);
}
} else {
throw new BusinessException(nc.ui.ml.NCLangRes.getInstance().getStrByID(uifactory, UPPuifactory-000112")/@res没有选择单据/);
}
}

A

安装时从这个文件里找版本信息…\NCHOME\ierp\bin.installhistory.xml

供应链接口
nc.itf.ic.service.IICPub_InvOnHandDMO 现存量
nc.itf.ic.service.IICPub_InvATPDMO 可用量
打开节点权限控制

	/**
	 *  校验是否有打开节点权限
	 * @@see nc.ui.cmp.applaybill.AbstractClientUI#checkPrerequisite()
	 * @author lzx  
	 * @date 2011-6-7
	 * @Override
	*/
	@Override
	public String checkPrerequisite() {

		String funcode = createIReportCtl()._getModuleCode();
		
		String pk_corp = ClientEnvironment.getInstance().getCorporation()
				.getPk_corp(); 获取公司主键
		if(pk_corp!=null && !pk_corp.equals("0001")){
		// ISettleCenter iscenter =
		// (ISettleCenter)NCLocator.getInstance().lookup(ISettleCenter.class);
		// boolean flag = iscenter.isSettleCenter(pk_corp);
		boolean flag = SettleCenterCache.getInstance().isSettleCenter(pk_corp);
		if (funcode.equals("20040802")||funcode.equals("20040804")||funcode.equals("20040806")) { // 单位无打开管理节点的权限
			if (!flag) {
				return "非结算中心不能打开此节点";
			}
		}
		}
		return super.checkPrerequisite();
	}

日志
打开logger-config.properties全文替换ERROR为DEBUG—>重启中间件–>在运行时如果有异常会存在
于nc-log.log如果想看SQL可以到anony-log.log中查看

参照的父类
如果不知道一个参照字段用的具体是哪个参照
到AbstractRefModel中的getData方法那打个断点,这样可以看到此参照执行的sql
单据类型注册
参照查询对应的DMO类:nc.bs.pub.SuperDMO
审批流检查类:nc.bs.trade.business.HYSuperDMO
集团参数

–参数模板定义
insert into pub_sysinittemp (AFTERCLASS, CHECKCLASS, CORPFLAG, DATACLASS, DEFAULTVALUE, DOMAINFLAG, DR, EDITCLASS, EDITCOMPONENTCTRLCLASS, GROUPCODE, GROUPNAME, INITCODE, INITNAME, INITTYPE, JZFLAG, MAINFLAG, MUTEXFLAG, PARATYPE, PK_REFINFO, PK_SYSINITTEMP, REMARK, SHOWFLAG, STATEFLAG, SYSFLAG, SYSINDEX, TS, VALUELIST, VALUETYPE)
values (’’, ‘’, 0, ‘’, ‘N’, ‘3618’, null, ‘’, ‘’, ‘fp8’, ‘资金计划’, ‘FP0135’, ‘是否联动下级封存’, 0, ‘Y’, ‘N’, 0, ‘2’, ‘’, ‘0001Z61000000001BMIY’, ‘请慎重修改’, ‘Y’, 2, ‘N’, 12, ‘2011-03-16 18:19:06’, ‘Y,N’, 1);

–集团0001参数值
insert into pub_sysinit (CONTROLFLAG, DR, EDITFLAG, INITCODE, INITNAME, MAKEDATE, PK_CORP, PK_ORG, PK_SYSINIT, PKVALUE, SYSINIT, TS, VALUE)
values (‘0’, null, ‘Y’, ‘FP0135’, ‘是否联动下级封存’, ‘2011-03-16’, ‘’, ‘0001’, ‘0001Z61000000001BMK2’, ‘’, ‘0001Z61000000001BMIY’, ‘2011-03-16 18:12:14’, ‘N’);

–代码调用取参数
String value = SysinitAccessor.getInstance().getParaString(“0001”,“FP0135”);
SysInitQuery
报表列居中对齐
DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
renderer.setHorizontalAlignment(JLabel.CENTER);
getReportBase().getBillTable().getColumnModel().getColumn(1).setCellRenderer(renderer);//设置第二列【代码】居中对齐

/*
 * 初始化界面
 * 
 * @see nc.ui.hfjy.report.AbstractReportUI#initSelfData() @author lzx @date
 *      2011-3-22
 */
protected void initSelfData()
{
	super.initSelfData();
	// 去除列排序监听
	getReportBase().getBillTable().removeSortListener();
	// // 设置界面数据
	// displayData(new InvclReportVO().getVOs());
	// // 报表设置单元格字体颜色,第70行第一列字体颜色为红色
	// getReportBase().getBillModel().setForeground(Color.RED, 69, 0);
	// // 报表设置单元格字体颜色,第71行第一列字体颜色为红色
	// getReportBase().getBillModel().setForeground(Color.RED, 70, 0);
	// 初始化表头表尾字段值
	// getReportBase().getBillData().getHeadItem("tbdw").setValue(env.getCorporation().getUnitname());
	// getReportBase().getBillData().getTailItem("zbr").setValue(env.getUser().getUserName());
	// getReportBase().getBillData().getHeadItem("tbrq").setValue(env.getDate());
	// 设置报表列居中对齐
	DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
	// renderer.setHorizontalAlignment(JLabel.CENTER);
	getReportBase().getBillTable().getColumnModel().getColumn(7).setCellRenderer(renderer);// 设置第二列【代码】居中对齐

}

参照多选
UIRefPane readerRef = (UIRefPane) getBillCardPanel().getHeadItem(BXZBVO.VBUSIPSN).getComponent();
readerRef.setMultiSelectedEnabled(true);
设置最大化、表头最大化、行操作等TABACTION
if (getBillCardPanel().getHeadTabbedPane().getTabAreaComponent() == null) {
int[] actTypes = new int[] {
BillTableLineAction.ADDLINE, BillTableLineAction.INSERTLINE, BillTableLineAction.DELLINE
};
ArrayList acts = new ArrayList();
for (int i = 0; i < actTypes.length; i++) {
acts.add(BillTableLineAction.getInstance(getBillCardPanel(), actTypes[i]));
}
acts.add(new SeparatorAction());
acts.add(new BillViewMaxAction(getBillCardPanel(), 1));
getBillCardPanel().addDefaultTabAction(0);
getBillCardPanel().addTabAction(1, acts);
getBillCardPanel().addDefaultTabAction(2);
}

快捷方式
E:\Eclipse_All\Eclipse3.2_hx\eclipse_hx.exe -vm E:\NCHOME\hx_NCHOME56\ufjdk\bin\javaw -vmargs -Xms320m -Xmx320m

调试
-Xms600m -Xmx600m
JRE
-Xms128M -Xmx1024M -XX:PermSize=64M -XX:MaxPermSize=128M

db2数据库
coalesce(dr,0)=0
生成凭证:
public void sendMessage(CashGatherBillVO gatvo) throws FTSBusinessException {
CashGatherHeadVO voHead = (CashGatherHeadVO) gatvo.getParentVO();
CashGatherChildVO[] voChildren = (CashGatherChildVO[]) gatvo
.getChildrenVO();
DapMsgVO msgVO = new DapMsgVO();
UFDouble udMoney = voHead.getTotalmoneyy();
// 设置数据
msgVO.setMsgType(DapMsgVO.ADDMSG);
msgVO.setDestSystem(IAccountPlat.DESTSYS_GL);
msgVO.setCorp(voHead.getPk_corp()); // 公司主键
msgVO.setSys(ConstVO.m_sModuleFTS); // 系统:资金结算
msgVO.setBillCode(voHead.getVbillno()); // 单据号
msgVO.setProcMsg(voHead.getPrimaryKey()); // 单据主键
msgVO.setBusiDate(voHead.getCentermakedate()); // 业务生效日期
msgVO.setCurrency(voHead.getPk_currtype()); // 币种主键
msgVO.setOperator(voHead.getCentermakeuser()); // 业务员主键
msgVO.setChecker(voHead.getCentermakeuser()); // 审批人
msgVO.setProc(CashConst.BillType_CashGather); // 单据类型代码
msgVO.setMoney(udMoney); // 金额
msgVO.setComment(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID(
“36103710”, “UPP36103710-000048”)/* @res “现金缴存单” */);
// 把VO 加入全局HASHTABLE
for (int i = 0; i < voChildren.length; i++) {
FtsGlobalVO.putVoIntoHash(voChildren[i].getPrimaryKey(), gatvo);
}
try {
(IDapSendMessage) getLocator().lookup(
IDapSendMessage.class.getName()).sendMessage(msgVO,gatvo);

//RetVoucherVO vo = FTSProxy.getDapSendMessage().sendMessage(msgVO,
gatvo);
// if (vo != null) {
// int operateResult = vo.getOperateResult();
// if (RetVoucherVO.OPE_FAILED == operateResult) {
// throw new
// FTSBusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID(“36103510”,“UPP36103510-000231”)/@res
// “发送会计平台失败!”
/);
// }
// }
} catch (FTSBusinessException e) {
Log.getInstance(this.getClass()).error(e.getMessage());
throw e;
} catch (BusinessException e) {
Log.getInstance(this.getClass()).error(e.getMessage());
throw new FTSBusinessException(e.getCause().getMessage());
} catch (Exception e) {
Log.getInstance(this.getClass()).error(e.getMessage());
throw new FTSBusinessException(e.getMessage());
} finally {
// 从全局HASHTABLE 释放 VO
for (int i = 0; i < voChildren.length; i++) {
FtsGlobalVO.freeVo(voChildren[i].getPrimaryKey());
}
}
}

UFDouble whBJ = exes[exes.length - 1].getWhbjy();//加千分位,自动取小数位数
if (param.getBjMoney().equals(whBJ)) {// 取最后一笔未还本金
throw new BusinessException(“合同最后一笔还本” + UFNumberFormat.format(whBJ) + “不能利随本清”);//加千分位,自动取小数位数
}
联查审批流
@Override
protected void initPrivateButton()
{
addPrivateButton(createQUERYFLOWButton());
super.initPrivateButton();
}

/**
 * 联查审批情况按钮
 * 
 * @type: ButtonVO
 * @author lzx
 * @date 2011-5-20
 */
private ButtonVO createQUERYFLOWButton()
{
	ButtonVO btn = createButtonVO(IButton.BTN_QUERYFLOW, "联查审批情况", "联查审批情况");
	btn.setOperateStatus(new int[] { IBillOperate.OP_NOTEDIT });
	return btn;
}

/**
 * 联查审批情况
 * 
 * @type: void
 * @author lzx
 * @date 2011-5-20
 */
public void onBoQueryFlowState()
{
	AggregatedValueObject vo = getBufferData().getCurrentVO();
	if (vo == null)
	{
		getBillUI().showErrorMessage(MessageUtils.getFav50Message("UPPfav50-400034"));
		return;
	}
	String billId = null;
	try
	{
		billId = vo.getParentVO().getPrimaryKey();
	}
	catch (BusinessException e)
	{
		e.printStackTrace();
		getBillUI().showErrorMessage(e.getMessage());
		return;
	}
	new FlowStateDlg(getBillUI(), getUIController().getBillType(), billId).showModal();
}

protected void queryApproveFlow() throws BusinessException {
	new FlowStateDlg(getUI().getToftPanel(), getUI().getBillType(), getBillPKForApproveFlow()).showModal();
}

UI中的doApproveAction()//打开审批消息
联查单据
/**
联查放款单,被联查的单据UI中需实现doQueryAction()方法
/
private final boolean query_contreceipt() throws BusinessException{
String[] pks = getContBillPks(false);//联查的单据主键
if(pks == null || pks.length == 0){
throw new BusinessException(nc.ui.ml.NCLangRes.getInstance().getStrByID(“363027”,“UPP363027-000018”)/
@res “找不到合同相关的还款单”
/);/-=notranslate=-/
}

	DefaultLinkQueryParam linkParam = new DefaultLinkQueryParam(pks);
	linkParam.setBillType("36DF");
	SFClientUtil.openLinkedQueryDialog("363028", getUI().getToftPanel(), linkParam); 
	return true;
}

/**
* 单据联查
*/
public void doQueryAction(ILinkQueryData querydata) {
String sourcePk = (String) querydata.getBillID();
try {
if(sourcePk!=null){
setCurrentPanel(BillTemplateWrapper.CARDPANEL);
if (!CommonUtil.isNull(sourcePk)) {
getBufferData().clear();

			AggregatedValueObject loadHeadData = loadHeadData(sourcePk);
			if (loadHeadData == null || loadHeadData.getParentVO() == null) {
				MessageDialog
						.showErrorDlg(
								this,
								nc.ui.ml.NCLangRes.getInstance()
										.getStrByID("fbmcomm",
												"UPPFBMComm-000157")/* @res"错误" */,
								nc.ui.ml.NCLangRes.getInstance()
										.getStrByID("fbmcomm",
												"UPPFBMComm-000158")/* @res"找不到相应的业务单据!" */);
				loadHeadData = null;
			}
			getBufferData().addVOToBuffer(loadHeadData);
			getBufferData().setCurrentRow(getBufferData().getCurrentRow());

			dealButtonStatus(querydata.getBillType());
			setButtonVisible(getButtons(), false);
			
			// 精度控制
			((AccManageEventHandler)getManageEventHandler()).setDigitForCard();
	}
	}else if(querydata.getUserObject() instanceof String[]){
		setCurrentPanel(BillTemplateWrapper.LISTPANEL);
		getBufferData().clear();
		String[] pks = (String[])querydata.getUserObject();
	 
			List list = new LinkedList();
			for(String pk:pks){
				AggregatedValueObject loadHeadData = loadHeadData(pk);
				list.add(loadHeadData);
			}
			getBufferData().addVOsToBuffer((AggregatedValueObject[])list.toArray(new AggregatedValueObject[0]));
			setListHeadData(getBufferData().getAllHeadVOsFromBuffer());
			 
			setButtonVisible(getButtons(), false);
			AbstractManageController controller = createController();
			int[] listBtns = controller.getListButtonAry();
			for(int i = 0 ; i < listBtns.length ;i++){
				if(IBillButton.Card == listBtns[i]){
					ButtonObject boaction = getButtonManager().getButton(listBtns[i]);
					boaction.setVisible(true);
					boaction.setEnabled(true);
				}
			}
			
			int[] cardBtns = controller.getCardButtonAry();
			for(int i = 0 ; i < cardBtns.length ;i++){
				if(IBillButton.Card == cardBtns[i]){
					ButtonObject boaction = getButtonManager().getButton(cardBtns[i]);
					boaction.setVisible(true);
					boaction.setEnabled(true);
				}
				if(IBillButton.Print == cardBtns[i]){
					ButtonObject boaction = getButtonManager().getButton(cardBtns[i]);
					boaction.setVisible(false);
					boaction.setEnabled(false);
				}
				if(ICdmButton.PrintFormal == cardBtns[i]){
					ButtonObject boaction = getButtonManager().getButton(cardBtns[i]);
					boaction.setVisible(false);
					boaction.setEnabled(false);
				}
				if(ICdmButton.PrintInFormal == cardBtns[i]){
					ButtonObject boaction = getButtonManager().getButton(cardBtns[i]);
					boaction.setVisible(false);
					boaction.setEnabled(false);
				}
			}
			updateButtonUI();

		}
		updateButtonUI();
	}catch(Exception e){
		Logger.error(e.getMessage(), e);
	}

询问对话框
if (UIDialog.ID_YES != MessageDialog.showYesNoDlg(getUI(),“询问”, “存在不满足条件的单据,是否继续?”))
return;

/**
 *  按钮执行前的校验,如果是当前公司则可操作
 * @type: void
 * @author lzx  
 * @date 2010-10-25
*/
protected Boolean Limit() {
	Object pk_corp = null;
	if(((AdjustRationUI) getBillUI()).isListPanelSelected()){
	pk_corp = this.getBufferData().getCurrentVO().getParentVO().getAttributeValue("pk_corp");
	}else{
	pk_corp = getBillCardPanelWrapper().getBillCardPanel().getHeadItem("pk_corp").getValueObject();
	}
	String corp = ClientInfo.getPkcorp();
	if(pk_corp!=null && !corp.equals(pk_corp)){
		((AdjustRationUI) getBillUI()).showErrorMessage("非本公司业务单据,限制此操作!");
		return Boolean.FALSE;
	}else{
		return Boolean.TRUE;
	}
	
}

VO中主键转中文
UIRefPane refpane = (UIRefPane) ((BillManageUI) getBillUI()).getBillCardPanel().getHeadItem(“字段名”).getComponent();
refpane.setPK(“PK”);
Object name = refpane.getRefName();
if (name != null && !name.equals("")) {
VO.setAttributeValue(“字段名”, name.toString());
Accsubjdoc
// 通过系统提供的会计科目接口查询所有会计科目
Accsubjdoc itf =
(Accsubjdoc) NCLocator.getInstance().lookup(Accsubjdoc.class.getName());
nc.vo.bd.b02.AccsubjVO[] targetSubjVos = itf.queryAccsubjVOs(pk_glorgbook, null, false);
参照手书
UIRefPane refpanl = (UIRefPane) getBillCardPanel().getHeadItem(ContractVO.JIAFANGACCOUNT).getComponent();
refpanl.setAutoCheck(false);
addBetch
a.无参批量更新
String sql = “update bd_deptdoc set dept_code =‘aaa’ where dept_code=‘bbb’”;
session.addBatch(sql); //添加需要执行的同构SQL
int rows = session.executeBatch(); //执行
b.有参批量更新
String sql = "update bd_deptdoc set dept_code =‘aaa’ where dept_code=?”;
SQLParameter param = new SQLParameter(); //构造参数对象
param.addParam(“bbb”); //添加参数
session.addBatch(sql, param); //添加需要执行的同构SQL
int rows = session.executeBatch(); //执行
afterEdit
@Override//表的编辑后赋默认值方法(UI类重写方法) 先执行afterEdit,后执行公式
public void afterEdit(BillEditEvent event)
{
super.afterEdit(event);

    if(event.getKey().equals("zd"))
    {

UFDouble nduemny = getBillCardPanel().getHeadItem(SdPaymentplanVO.NDUEMNY).getValueObject() == null ? new UFDouble(0) : new UFDouble(getBillCardPanel().getHeadItem(SdPaymentplanVO.NDUEMNY).getValueObject().toString());
this.getBillCardPanel().execHeadEditFormulas();
}
else if (event.getTableCode().equals(“st_xx_jyzy”) && event.getKey().equals(“code”))
{
this.getBillCardPanel().setBodyValueAt(new UFBoolean(‘N’), event.getRow(), “jyzt”);
this.getBillCardPanel().setBodyValueAt(new UFBoolean(‘Y’), event.getRow(), “zyzt”);
}
}

public void afterEdit(BillEditEvent arg0) {
// TODO 自动生成方法存根
super.afterEdit(arg0);
if (arg0.getPos() == HEAD) {
if (arg0.getKey().equals(“fsummny”)) {
// 取表头的值
getBillCardPanel().getHeadItem(“fexpensemny”).setValue(
“fsummny”);
}
if (arg0.getKey().equals(“ftaxmny”)) {
}
}
int row;
// float row1 ;
UFDouble fsummny = new UFDouble(0.00);
UFDouble ftaxmny = new UFDouble(0.00);
if (arg0.getPos() == BODY) {
// if(arg0.getKey().equals(“fsummny”)){
// // 取表体的值
// // row1=getBillCardPanel().getBillTable().getAlignmentY();
// row=getBillCardPanel().getBillTable().getSelectedRow();//取当前表体选择行号
// fsummny=getBillCardPanel().getBillModel().getValueAt(row,“fsummny”)==null?new
// UFDouble(0.00):new
// UFDouble(getBillCardPanel().getBillModel().getValueAt(row,“fsummny”).toString());
// ftaxmny=getBillCardPanel().getBillModel().getValueAt(row,“ftaxmny”)
// ==null?new UFDouble(0.00):new
// UFDouble(getBillCardPanel().getBillModel().getValueAt(row,“ftaxmny”).toString());
// getBillCardPanel().getBillModel().setValueAt(ftaxmny.add(fsummny),
// row, “fexpensemny”);
// }
// if(arg0.getKey().equals(“ftaxmny”)){
// // 取表体的值
// row=getBillCardPanel().getBillTable().getSelectedRow();//取当前表体选择行号
// ftaxmny=getBillCardPanel().getBillModel().getValueAt(row,“ftaxmny”)
// ==null?new UFDouble(0.00):new
// UFDouble(getBillCardPanel().getBillModel().getValueAt(row,“ftaxmny”).toString());
// fsummny=getBillCardPanel().getBillModel().getValueAt(row,“fsummny”)==null?new
// UFDouble(0.00):new
// UFDouble(getBillCardPanel().getBillModel().getValueAt(row,“fsummny”).toString());
// getBillCardPanel().getBillModel().setValueAt(fsummny.add(ftaxmny),
// row, “fexpensemny”);
// }
// }
if (arg0.getKey().equals(“fsummny”)
|| arg0.getKey().equals(“ftaxmny”)) {
row = getBillCardPanel().getBillTable().getSelectedRow();// 取当前表体选择行号
//UIRefPane pane = (UIRefPane)getBillCardPanel().getBillModel(“hfgf_sincerity”).getItemByKey(“barcode”).getComponent() ; //取表体参照值
UIRefPane pane = (UIRefPane)getBillCardPanel().getHeadItem(“gk”).getComponent();//取表头参照值
String gk = pane.getRefName();
fsummny = getBillCardPanel().getBillModel().getValueAt(row,
“fsummny”) == null ? new UFDouble(0.00) : new UFDouble(
getBillCardPanel().getBillModel().getValueAt(row,
“fsummny”).toString());
ftaxmny = getBillCardPanel().getBillModel().getValueAt(row,
“ftaxmny”) == null ? new UFDouble(0.00) : new UFDouble(
getBillCardPanel().getBillModel().getValueAt(row,
“ftaxmny”).toString());

			getBillCardPanel().getBillModel().setValueAt(
					ftaxmny.add(fsummny), row, "fexpensemny");
			UFDouble fexpensemny = (UFDouble) getBillCardPanel()
					.getTotalTableModel().getValueAt(
							0,
							getBillCardPanel().getBillModel().getItemIndex(
									"fexpensemny"));
			getBillCardPanel().setHeadItem("ftotalmny", fexpensemny);
			//			UFDouble fexpensemny =
			//				(UFDouble) getBillCardPanel().getTotalTableModel().getValueAt(0,getBillCardPanel().getBillModel().getItemIndex("fexpensemny"));
			//			getBillCardPanel().setHeadItem("fexpensemny", fexpensemny);
		}
	}
}

ALTER
ALTER TABLE so_sale ADD ntotaloutmny number(20,8);//增加字段
ALTER TABLE so_sale MODIFY ntotaloutmny number(38);//修改字段长度
组件
UIRefPane secondpayaccount = (UIRefPane) getBillCardPanel().getHeadItem(“vuserdef2”).getComponent();// 二级收款清算账户
secondpayaccount.setEnabled(true);//参照可编辑
secondpayitem.setEnabled(true);//组件可编辑
secondpayitem.setNull(true);//不能为空
参照过滤条件添加
UIRefPane yifangBankAccPane = (UIRefPane) getBillCardPanel().getHeadItem(ContractVO.YIFANGACCOUNT).getComponent();// 借款单位银行帐户
AbstractTMRefModel yifangBankModel = (AbstractTMRefModel) yifangBankAccPane.getRefModel();
yifangBankModel.addWherePart(" and pk_createcenter = ‘"+ pk_settlecent + "’ ");
ArrayList
ArrayList list = new ArrayList();
……
list.add();
SettleVO[] vos = new SettleVO[list.size()];
vos = list.toArray(vos);//List与VO数组转换
B
BillCardPanel
//需要有保存前非空字段的校验
nc.ui.pub.bill.BillCardPanel.dataNotNullValidate()
//后台保存前要做单据号唯一性校验
nc.bs.trade.comcheckunique.BillIsUnique.checkBillIsUnique(AggregatedValueObject, ArrayList)
需要实现新增保存和修改保存。
新增保存时,单据号可以手输,也支持自动生成
自动生成的单据号必须在后台类获取,参考
nc.jdbc.framework.generator.SequenceGenerator.generate(int)。

对于修改保存,单据号不可编辑,不需要检验单据号唯一性。
能处理包括删行以及修改某行数据后的修改保存操作。

保存后必须将后台得到的时间戳ts字段的值传回前台界面,如果是新增,还要回传单据号,
以保持界面数据与数据库一致(主要是ts的值要保持与数据库一致) 。

响应取消按钮操作

用户点击取消按钮,表示取消编辑,界面还原为编辑前的状态。

nc.ui.pub.bill.BillCardPanel 还需要关注的一些方法

执行公式的相关方法
nc.ui.pub.bill.BillCardPanel.execHeadEditFormulas() 执行所有的单据模板表头 编辑公式 属性所定义的公式
nc.ui.pub.bill.BillCardPanel.execHeadLoadFormulas()执行所有的单据模板表头 显示公式 属性所定义的公式
//表体显示公式的执行
String[] str3 = {
// “ctbudget->getColValue(cctv_bd_zhibiao,vname,pk_zhibiao,vctbudget)”
“ctbudget->iif(getColValue(cctv_bd_zhibiao,vname,pk_zhibiao,vctbudget) == null, getColValue(cctv_bd_zhzb,vname,pk_zhzb,vctbudget),getColValue(cctv_bd_zhibiao,vname,pk_zhibiao,vctbudget) )”
};
getBillCardPanel().getBillModel(tablecode).execFormula(rowtemp - 1, str3);

getBillCardPanelWrapper().getBillCardPanel().
execHeadTailLoadFormulas(getBillCardPanelWrapper().getBillCardPanel().getHeadItem(“pk_supercorp”));//执行表头字段pk_supercorp显示公式

nc.ui.pub.bill.BillCardPanel.getBillValueChangeVO(String, String, String) 获取包括新增/修改/删除行的vo,没有变化的行不取。
nc.ui.pub.bill.BillCardPanel.getBillValueVO(String, String, String) 获取单据界面VO,包括没有变化的行

后台保存操作可以用到的数据库操作类 nc.bs.dao.BaseDAO,先要关注的方法

nc.bs.dao.BaseDAO.updateVOArray(SuperVO[])
nc.bs.dao.BaseDAO.insertVO(SuperVO)
nc.bs.dao.BaseDAO.insertVOArray(SuperVO[])

响应删除按钮,删除相关单据

删除操作只是置标志位,即令dr=1

nc.ui.pub.bill.BillItem类,对应单据模板上某一个字段的所有属性

可以说是单据模板字段的描述器
需要关注的方法
nc.ui.pub.bill.BillItem.getComponent() 获取字段对应的组件
nc.ui.pub.bill.BillItem.getEditFormulas() 字段对应的编辑公式
nc.ui.pub.bill.BillItem.getKey()
nc.ui.pub.bill.BillItem.getLoadFormula()
nc.ui.pub.bill.BillItem.getPos() 0 表头, 1 表体, 2 表尾
nc.ui.pub.bill.BillItem.setDecimalDigits(int) 设置字段精度
nc.ui.pub.bill.BillItem.setEdit(boolean) 初始化时字段能否编辑
nc.ui.pub.bill.BillItem.setEnabled(boolean) 字段能否编辑

nc.ui.pub.bill.BillModel 单据的数据模型,

大部分方法都可以通过BillCardPanel来调用
类似的有nc.ui.pub.bill.BillData
大部分方法也都可以通过BillCardPanel来调用

//得到单据号
BillcodeGenerater billNoGen = new BillcodeGenerater();
单据类型 公司
billno = billNoGen.getBillCode(“TI55”, “0001”, null, null);

BillData
BillData bd = getBillCardPanel().getBillData();
BillItem
BillItem item = bd.getBodyItem(NodeInfo.NAME_TABLECODE1, “ialloctype”);
BillEditListener
nc.ui.pub.bill.BillEditListener
nc.ui.pub.bill.BillEditListener.afterEdit(BillEditEvent) //监听表体的编辑事件
nc.ui.pub.bill.BillEditListener.bodyRowChange(BillEditEvent) //监听表体的行变换

//填加监听的方法
nc.ui.pub.bill.BillCardPanel.addBillEditListenerHeadTail(BillEditListener) //表头表尾编辑后监听
nc.ui.pub.bill.BillCardPanel.addEditListener(BillEditListener) //表体编辑后监听
nc.ui.pub.bill.BillCardBeforeEditListener
nc.ui.pub.bill.BillCardBeforeEditListener.beforeEdit(BillItemEvent) 表头编辑前事件监听

nc.ui.pub.bill.BillCardPanel.setBillBeforeEditListenerHeadTail(BillCardBeforeEditListener)
nc.ui.pub.bill.BillEditListener2 表体编辑前事件监听器
nc.ui.pub.bill.BillEditListener2.beforeEdit(BillEditEvent)
nc.ui.pub.bill.BillCardPanel.addBodyEditListener2(BillEditListener2)

BillField
@Override//修改单据状态时需重写此方法
protected IBillField createBillField()
{
return BillField.getInstance();
}

表体增行 参考 nc.ui.pub.bill.BillCardPanel.addLine() 增行按钮
表体删行 参考 nc.ui.pub.bill.BillCardPanel.delLine() 删行按钮
表体复制行 nc.ui.pub.bill.BillCardPanel.copyLine() 复制行按钮
表体粘贴行 nc.ui.pub.bill.BillCardPanel.pasteLine() 粘贴行按钮

Button
//自定义按钮
public ButtonVO getFujian_btn()
{
ButtonVO btnVO = new ButtonVO();
btnVO.setBtnNo( IprivateButton.Fujian_btn );
btnVO.setBtnName( “附件管理” );
btnVO.setHintStr( “附件管理” );
btnVO.setOperateStatus( new int[]{IBillOperate.OP_NOTEDIT} ); // 在非新增和非编辑状态下可用
return btnVO;
}

//在UI中设置按钮状态
getButtonManager().getButton(nc.ui.trade.button.IBillButton.Add).setEnabled(false);

Byte[]
public static final byte[] m_ENTER = {0x0d, 0x0a};//换行符 ASCII码: 0x0d 0x0a
C
CaseWhen
ORACLE: Case……When 语句
SELECT
(CASE dr WHEN 0 THEN ‘有效’
WHEN 1 THEN ‘无效’
END) AS 显示
FROM bd_corp
catch
try{
}
catch(DbException e){
//如果是语法错误
if(e.isBadSQLGrammar()){
Logger.error(“语法错误:”+e.getMessage(),e);
}
//如果是数据一致性错误
if(e.isDataIntegrityViolation()){
Logger.error(“数据一致性错误:”+e.getMessage(),e);
}
}

CheckRule
<前台校验类> XXXUICheckRule
//校验数据是否重复
public IUniqueRule[] getItemUniqueRules(String tablecode) {
if( “cl_gg_ytzwlb”.equals( tablecode ) )
{
IUniqueRule[] unique = null;
unique = new IUniqueRule[]{
new UniqueRule(“座类编码不能重复”,new String[]{(“zlbm”)})
};
return unique;
}
return null;
}
//校验是否为空
public ICheckRule[] getItemCheckRules(String tablecode) {
CheckRule[] rules = new CheckRule[] {
new CheckRule("【NC结算方式编码】", “ncsettlecode”, false, null, null)
};
return rules;
}
checkPrerequisite
//对于控制集团不能打开节点,只有公司可以打开节点的处理,节点权限
//在ClientUI中覆写Toftpanel的方法:
/**
* 校验节点权限
*/
public String checkPrerequisite()
{
String pk_corp = _getCorp().getPk_corp();
if (pk_corp.equals(“0001”)) {
return “当前处于集团,此功能点无法进入”;
}
return null;
}
ClientEnvironment(前台环境信息类)
UFDate date = ClientEnvironment.getInstance().getDate();//得到登陆日期
nc.ui.pub.ClientEnvironment.getServerTime() //得到系统时间
nc.ui.pub.ClientEnvironment.getDate() //得到登录日期
nc.ui.pub.ClientEnvironment.getUser() //得到当前用户

Column
//单据模板获得jtable可通过getBillCardPanel().getBillTable()
//获取列表模型 TableColumnModel tcm=table.getColumnMode();
//第n列设置为隐藏
TableColumn hideColumn = table.getColumn(“第n列”);
//隐藏第n列设置
tcm.removeColumn(hideColumn);
//显示第n列设置
tcm.addColumn(hideColumn);
//把i列移动到第j列
tcm.moveColumn(i, j);

getBillCardPanel().getBodyPanel().hideTableCol(strKey);//隐藏
getBillCardPanel().getBodyPanel().showTableCol(strKey);//显示
ComboBox
UIComboBox typeCom = (UIComboBox) this.getBillCardPanel().getBodyItem(“x”).getComponent();
typeCom.addItems(Object[] obj);

Connection
PersistenceManager sessionManager = PersistenceManager.getInstance();
JdbcSession session = sessionManager.getJdbcSession();
Connection con = session.getConnection();
PreparedStatement stmt = null;
stmt = prepareStatement(con, sql);
finally{
stmt.close();
con.close();
sessionManager.release();}
ConnectException
//启动NC时抛异常
java.net.ConnectException: Connection refused: connect
原因:80端口被占用
ConditionVO
//取查询对话框VO值
ConditionVO[] conVOs = getQueryDLG().getConditionVO();
for (int i = 0; i < conVOs.length; i++)
{
if (“billdate”.equals(conVOs[i].getFieldCode()))
{
billdate = conVOs[i].getValue();
}
else if()
{}}
Coperatorid
//操作员对应的业务员
cworkpsnid->getColValue(bd_psndoc,pk_psndoc,pk_psnbasdoc,getColValue(sm_userandclerk,pk_psndoc,userid,coperatorid))
createQueryDLG()
/**<UI类–查询对话框>
* 重写父类方法,取得查询对话框,如有动态显示下拉框和默认值需重写此方法
*/
protected QueryDLG createQueryDLG() {
FundReportDLG dlg = new FundReportDLG();
dlg.setTempletID(
getUIControl()._getPk_corp(),
this.getModuleCode(),
getUIControl()._getOperator(),
null);
//设置默认日期
QueryConditionVO[] qryvos = dlg.getConditionDatas();
for(int i=0;i<qryvos.length;i++) {
if(qryvos[i].getFieldCode().equals(“billdate”)){
qryvos[i].setValue(getClientEnvironment().getDate().toString());
break;
}}
return dlg;}
CARDPANEL
if(clientUI.isListPanelSelected())//如果是选取的是否列表界面
//if (((BillManageUI) getBillUI()).isListPanelSelected())
clientUI.setCurrentPanel(BillTemplateWrapper.CARDPANEL);

Control
control userpasswords2 //运行【用户帐户】
D
DapCall
nc.ui.pf.pub.DapCall
getPkcorp()//取公司
getOperator()//取操作员
dataSource
String dataSource = DataSourceCenter.getInstance().getSourceName();//取当前数据源
Date
UFDate date = ClientEnvironment.getInstance().getDate();//得到登陆日期
DateFormat
public class DateTest {
public static void main(String[] args) {
String dates = “2007-8-14”;//日期时间
DateFormat df = new SimpleDateFormat(“yy-MM-dd”);//日期格式化辅助类
Date d;
try {
d = df.parse(dates);//格式化日期
if (d.getDay() == 0 || d.getDay() == 6)//判断是不是双休日
System.out.println(“日期:[” + dates + “] 是双休日”);
else
System.out.println(“日期:[” + dates + “] 不是双休日”);
} catch (ParseException e) {
e.printStackTrace();
} } }
dataNotNullValidate
getBillCardPanel().getHeadItem(“issamecity”).setNull(true);//lzx 设置issamecity字段为必输项。False为非必输
public void onBoSave() throws Exception {
getBillCardPanelWrapper().getBillCardPanel().getBillData().dataNotNullValidate();//验证UAP模板设置必输项是否为空
boolean flag = true;
try
{
super.onBoSave();
}
catch (IllegalArgumentException e)
{
Logger.info(e);
flag = false;
}
catch (Exception e)
{
if(flag)
this.getSelfUI().showErrorMessage("【资产名称】已存在,请检查");
return ;
}
super.onBoRefresh();
}
Delete
删除废数据的方法如下:
有个表有3个字段ID, PID, NAME; 用父子结构来保存树的信息。
其中ID代表节点编号,PID是父节点编号;
由于删除的时候只删除了ID = id的记录, 没有把所有PID指向id的数据删除,导致大量无用的数据滞留
DELETE FROM TEST1
WHERE ID IN (SELECT ID
FROM TEST1
MINUS
SELECT ID
FROM TEST1
START WITH PID IS NULL
CONNECT BY PRIOR ID = PID);
//删除表中重复记录:
DELETE FROM a a1 WHERE ROWID IN (SELECT rd FROM (SELECT ROWID rd,ROW_NUMBER() OVER(PARTITION BY bm,mc ORDER BY ROWID) rn FROM a) WHERE rn <> 1);
delLine
//表体增删行的操作,注意加上这一句代码
if ( event.getKey().equals(“vdef2”) )
{
for( int i = 0 ; i < delnum ;i++)
{
this.getBillCardPanel().getBodyPanel().getTable().selectAll();
this.getBillCardPanel().delLine();
}
for( int j = 0 ; addnum.intValue() > 0 && j < addnum.intValue() ;j++ )
{
this.getBillCardPanel().addLine();
this.getBillCardPanel().setBodyValueAt( “” + (j+1) , j, “code”);
}
}
DetailReportBaseEx
//报表UI类中的反注册按钮方法
protected void setPrivateButtons() {
this.unRegisterButton(ButtonAssets.m_boRefresh);
this.unRegisterButton(ButtonAssets.m_boGroup);
this.unRegisterButton(ButtonAssets.m_boFilter);
this.unRegisterButton(ButtonAssets.m_boCross);
this.unRegisterButton(ButtonAssets.m_boSort);
}
Dialog
可使用日志系统。
if(SCMEnv.DEBUG){
System.out.println…
}
这样只有在调试状态才会把内容输出。
/**
* 启用系统运行提示框 避免造成假死现象
/
private void onButton_import()
{
// 该操作是耗时操作,所以启用系统运行提示框
Runnable runImpDoc = new Runnable()
{
public void run()
{
BannerDialog dialog = new BannerDialog(getCurrUI());
dialog.start();
try
{
importData();
}
catch (Exception e)
{
dialog.end();
e.printStackTrace();
return;
}
dialog.end();// 销毁系统运行提示框
}
};
new Thread(runImpDoc).start();
}
/
*
* 系统运行提示框
*/
private Container getCurrUI()
{
return this.getSelfUI();
}
E
Exception
对于后台异常,暂时可以使用 nc.vo.dm.pub.ExceptionUtils.marsh(Exception)
作用在于将异常信息链中最原始的异常取出来,抛到前台,便于程序员快速定位问题。
用法说明:
Try{
你的代码
}catch(Exception e){
ExceptionUtils.marsh(e);
}
即可。
该方法本身会执行cause.printStackTrace(); 不需要再加打印错误信息的语句。
对于前台的异常,必须将异常信息打印出来,即执行e.printStackTrace();

查询
查询对话框 nc.ui.pub.query.QueryConditionClient
查询条件VO nc.vo.pub.query.QueryConditionVO
列表多选
//  在单据的UI类提供表头行多选功能
this.getBillListPanel().getHeadTable().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
参照组件的使用
参照多选:setMultiSelectedEnabled(true);
参照的三个基本元素:编码,名称,PK。
在单据中对一个参照型的字段录入数据后,参照模型会自己维护上述三个基本元素的值。
卡片状态下,表头的参照在录入时显示编码,失去焦点后变成名称。表体不会做这种变换。

UI类 nc.ui.pub.beans.UIRefPane 参照模型类 nc.ui.bd.ref.AbstractRefModel
nc.ui.pub.beans.UIRefPane.getRefCode() 获取参照编码;
nc.ui.pub.beans.UIRefPane.getRefCodes() 获取多个参照编码,在一次参照选择多个记录时用;
nc.ui.pub.beans.UIRefPane.getRefModel()
nc.ui.pub.beans.UIRefPane.getRefName()
nc.ui.pub.beans.UIRefPane.getRefPK()

参照模型
nc.ui.bd.ref.AbstractRefModel.addWherePart(String, boolean) 增加额外的查询约束子句;
nc.ui.bd.ref.AbstractRefModel.setSealedWherePart(String) 设置封存数据的查询子句;
nc.ui.bd.ref.AbstractRefModel.setSealedDataShow(boolean) 是否显示封存的数据;
nc.ui.bd.ref.AbstractRefModel.setStrPatch(String) select 后的子句,如 distinct ;
nc.ui.bd.ref.AbstractRefModel.setWherePart(String, boolean) 设置原始的查询子句;
下拉框组件的使用
对应的类 nc.ui.pub.beans.UIComboBox
其内部数据结构就是内部维护了一个Vector 矢量,下拉框的内容按顺序添加到该Vector中。
可通过方法 nc.ui.pub.beans.UIComboBox.addItems(Object[]) 一次添加所有的内容;
javax.swing.JComboBox.setSelectedIndex(int) 设置默认选择的项;
使用日志系统
if(SCMEnv.DEBUG){
System.out.println…
}

后台加锁,申请单据号需要用到当前登陆公司的ID和当前登陆人的ID,一般vo中会有这些信息,如果没有,可以使用
nc.jdbc.framework.util.SQLHelper.getCorpPk(); //得到公司的ID
InvocationInfoProxy.getInstance().getUserCode(); //得到当前登陆人的ID
Excel
//获取sheet中的HSSFRow对象,如果没有就创建一个
private HSSFRow getRow(HSSFSheet sheet, int rowNum)
{
HSSFRow row = sheet.getRow(rowNum);
return row == null ? sheet.createRow(rowNum) : row;
}
//获取sheet中的HSSFCell对象,如果没有就创建一个
private HSSFCell getCell(HSSFRow row, short cellNum)
{
HSSFCell cell = row.getCell(cellNum);
return cell == null ? row.createCell(cellNum) : cell;
}
//单元格赋值
public static void setCellValue(HSSFCell cell ,String cellValue) {
cell.setEncoding(HSSFWorkbook.ENCODING_UTF_16);//这一句是解决中文乱码问题
cell.setCellValue(cellValue);//单元格赋值
}
//设置单元格背景颜色(为红色)
public static void setCellColorRed(HSSFCellStyle style, HSSFCell cell)
{
style.setFillForegroundColor(HSSFColor.RED.index);
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
cell.setCellStyle(style);;
}//说明:HSSFColor里有好多颜色,可根据要求改为其他
//获取单元格背景颜色
public static void getCellColor(HSSFCell cell ) {
HSSFCellStyle style = cell.getCellStyle();
short colorIndex = style.getFillForegroundColor();
}
//报表设置单元格字体颜色,第70行第一列字体颜色为红色
getReportBase().getBillModel().setForeground(Color.RED, 70, 0);
Exe
1 用java调用windows系统的exe文件,比如notepad,calc之类:
public class Demo{
public static void main(String args[]){
Runtime rn=Runtime.getRuntime();
Process p=null;

try{
p=rn.exec(notepad);
}catch(Exception e){
System.out.println(“Error exec notepad”);
}
}
}
2 调用其他的可执行文件,例如:自己制作的exe,或是下载安装的软件
public class Demo{
public static void main(String args[]){
Runtime rn=Runtime.getRuntime();
Process p=null;
try{
p=rn.exec("“D:/AnyQ/AnyQ.exe”");
}catch(Exception e){
System.out.println(“Error exec AnyQ”);
}
}
}
EXP/IMP
exp nc50/nc50@MINE file=e:\0328.dmp OWNER = nc50//导出
imp nc50/nc50@mine file=e:\0227.dmp fromuser=nc50test touser=nc50//导入
F
File
//处理单据上的图片类型
//首先在模版上设置此字段数据类型为: 图片类型
//在节点上新增单据时,双击此字段可以选择图片(和参照类似),选择后界面会自动显示
//单据保存时:
//得到路径
String path = getBillCardPanel().getHeadItem(“userphoto”).getImagePath();
//取到文件名然后上传到服务器(默认路径是 nchome\webapps\nc_web\ncupload )
File file = new File(path);
FileManagerUtil.saveFileToServer(“USERIMAGE/”,file.getAbsolutePath());

//然后可以把服务器存取此 图片的路径和文件名 赋值到VO保存到数据库.
//以后查询的时候转载图片:
//首先取到此单据 VO 中的: 图片路径和文件名
File file = new File(vo.getUserPhoto);
//用下边方法把图片下载到本地(默认是在和缓存同级的 NCCODE/ 下)
FileManagerUtil.saveFileToLocal(“USERIMAGE/”, file.getName());
//构造 URL
URL url = FileManagerUtil.getFileURLLocal(“USERIMAGE/”, file.getName());
//为图片字段赋值
ImageIcon = new ImageIcon(url);
((UILabel)getBillCardPanel().getHeadItem(“userphoto”).getComponent()).setIcon(new ImageIcon(url));

FileCreate
//在用户目录\jieely\下创建文件test.txt
public static void main(String[] args)
{
String userhome = System.getProperty(“user.home”);
String path = “\jieely\”;
String absPath = userhome+path;
RandomAccessFile mm = null;
try
{
File folder = new File(absPath);
if (!folder.exists()) // 如果不存在则建该文件夹
folder.mkdir();
mm = new RandomAccessFile(absPath+“test.txt”, “rw”);
mm.writeBytes(“AAAAAAA”);
}
catch (FileNotFoundException e)
{
Logger.error(e);
}
catch (IOException e)
{
Logger.error(e);
e.printStackTrace();
}
}
FileFilter
A: 设置读取指定类型的文件
public class PhotoFileFilter extends FileFilter
{
public boolean accept(File f)
{
if (f.isDirectory() || f.getName().endsWith(".jpg") || f.getName().endsWith(".gif") || f.getName().endsWith(".jpeg"))
{
return true;
}
else
{
return false;
}
}

public String getDescription()
{
	return "图片";
}

}
B:根据规则过滤出符合条件的文件列表
File file = new File(“C:\ftp\”);
FileFilter fileFilter = new FileFilter()//过滤出【导入日期】当天的凭证
{
public boolean accept(File pathname)
{
String tmp = pathname.getName();
if (tmp.startsWith(“HX_”) && tmp.endsWith(".TXT"))
return true;
return false;
}
};
File[] files = file.listFiles(fileFilter);
}
FTPClient
//连接FTP读取文件
FTPClient ftp = new FTPClient();
BufferedReader br = null;
try {
ftp.connect(“172.168.2.214”, 21);
ftp.login(“root”, “root”);
ftp.changeWorkingDirectory(“\oracel\updata\”);
InputStream is = ftp.retrieveFileStream(“HX_20091124_01.TXT”);
if (is == null)
throw new BusinessException(“没有有找到需要导入的文件\n” + fileName ); //后台异常提示
InputStreamReader isr = new InputStreamReader(is);
br = new BufferedReader(isr);
}
G
getBillCardPanel
getBillCardPanel().getBodySelectedScrollPane().getName();//获得当前页签
getBillNo
//取得单据号(从NC取,服务器端)
String billNo = new nc.bs.trade.business.HYPubBO().
getBillNo(ISYYSBilltype.CTRLDDEPT_BGT_BILL, parentVo.getPk_corp(), null, null); // 设置单据号

//取得单据号(从NC取,客户端)
return HYPubBO_Client.getBillNo(getUIControl().getBillType(), _getCorp().getPrimaryKey(), null, null);
getBodyValue
//得到表体选择行的某个字段值
int row = getSelfUI().getBillCardPanel().getBillTable(“st_sy_jy”).getSelectedRow();
Object code = getSelfUI().getBillCardPanel().getBillTable(“st_sy_jy”).getValueAt(row, column);
getBodyValueVOs
//得到表体VO
BodyVO[] vos = (BodyVO[])ui.getBillCardPanel().getBillModel().getBodyValueVOs(“nc.vo.wdyx_gg.lbdy.BVO”);
getBusinessActionType
public int getBusinessActionType() {
return IBusinessActionType.BD;//
}
getButtonManager
//在UI中设置按钮状态
getButtonManager().getButton(nc.ui.trade.button.IBillButton.Add).setEnabled(false);
getCurrUI
//耗时操作,启用系统运行提示框
private void onButton_import(){
Runnable runImpDoc = new Runnable(){
public void run(){
BannerDialog dialog = new BannerDialog(getCurrUI());
dialog.start();
try{
importFile();
} catch(Exception e) {
dialog.end();
e.printStackTrace();
return;
}
dialog.end();//销毁系统运行提示框
}
};
new Thread(runImpDoc).start();
}
private Container getCurrUI(){
return this;
}
getFormulas
// 对参照里的字段设置为参照
@Override//AbstractRefModel
public String[][] getFormulas() {
return new String[][]{{“coperatorid”,“getColValue(sm_user,user_name ,cuserid ,coperatorid)”}};
}
getHeadCondition
// 类MyEventHandler重写方法,作用于多视图共用一表时的查询
protected String getHeadCondition()
{
String whereSql = super.getHeadCondition();
if (whereSql == null)
whereSql = " pk_billtype = ‘" + this.getUIController().getBillType() + "’";
else
whereSql = whereSql + " and pk_billtype = ‘" + this.getUIController().getBillType() + "’";
return whereSql;
}
getHeadItem
String code = (String) this.getSelfUI().getBillCardPanel().getHeadItem(“code”).getValueObject(); //得到表头指定字段值
getBillCardPanel().setHeadItem(“chfl”, null); // 存货分类 UI端为表头界面赋值
getRowCount
this.getJScrollPane().getTableModel().getRowCount(); //得到表格行数
getSelectedRow
this.getBillCardPanel().getBillTable().getSelectedRow(); //得到表体选择行
getValueAt
this.getJScrollPane().getTableModel().getValueAt(row, col); //得到表体单元格值
clientUI.getVOFromUI() 取界面聚合VO
getUser
getClientEnvironment().getUser().getPrimaryKey();//得到操作员ID

GLorgbookpk 设置参照
refCorp = new UIRefPane();
refCorp.setPreferredSize(new java.awt.Dimension(200, 22));
refCorp.setRefNodeName(RefNodeNameConst.GLORGBOOK);//设置参照为【主体帐薄】
refCorp.setMultiSelectedEnabled(true);
String pk_corp = ClientEnvironment.getInstance().getCorporation().getPrimaryKey();//当前公司
CurrParamQuery.getInstance().getLocalCurrPK(_getCorp().getPk_corp());//当前公司默认币种
String pk_glorgbook = BDGLOrgBookAccessor.getDefaultPk_GLOrgBook(pk_corp);//主体帐薄主键
refCorp.setPK(pk_glorgbook);
客商管理档案–“是否客户”字段
每个客商其管理档案部分对应两条记录,
分别对应界面中的客户和供应商页签

  1. 为客户时 一条为’0’,一条为’4’(值为’4’的那条记录无用)
  2. 供应商 为’1’和’ '(一个空格)(值为空格的那条记录无用)
  3. 客商 为’2’和’3’(2表示客户,3表示供应商)
    供应商对应“1”、“3”
    客户对应“0”、“2”
    H

HashMap
HashMap<String,Emp> hm=new HashMap<String, Emp>();
hm.put(“001”, new Emp(“001”, “张三”, 2000));
hm.put(“002”, new Emp(“002”, “李四”, 2030));
//HashMap存储查询结果集例一
List list = (List)session.executeQuery(sql.toString(), new MapstProcessor());
bodyvos = new KcSpMxBodyVO[list.size()+1];
for(int i=0;i<list.size();i++){
bodyvos[i+1] = new KcSpMxBodyVO();
HashMap hash = (HashMap)list.get(i);
Iterator it = hash.keySet().iterator();
while(it.hasNext()){
String key = (String)it.next();
if(“forshort”.equals(key)||“voucherno”.equals(key)){
String forshort = hash.get(“forshort”).toString();
String voucherno = hash.get(“voucherno”).toString();
String vouchercode = forshort +"-"+ (“000”+voucherno).substring(voucherno.length()-1);
bodyvos[i+1].setAttributeValue(“vouchercode”,vouchercode);
}
else{
bodyvos[i+1].setAttributeValue(key, hash.get(key));
}}}
// HashMap存储查询结果集例二
sessionManager = PersistenceManager.getInstance();
session = sessionManager.getJdbcSession();
ArrayList rslist = (ArrayList) session.executeQuery(sql.toString(), new ArrayListProcessor());
HashMap hashmap = new HashMap();
if(rslist!=null && rslist.size()>0){
for(int i=0;i<rslist.size();i++){
Object[] rows = (Object[])rslist.get(i);
hashmap.put(rows[0], rows);
}
}
for(int i=0;i<billBVO.length;i++){
int flag = billBVO[i].getOperateflag();
if(flag == 0){
SrcBillSettle_BVO settleBVO = new SrcBillSettle_BVO();
String settlekey = billBVO[i].getSettlecode();
Object[] ncsettleinfo = (Object[])hashmap.get(settlekey);
settleBVO.setPk_ncsettletype(TJYCPubVO.getString_TrimZeroLenAsNull(ncsettleinfo[1]));// 外键:NC结算方式PK
settleBVO.setSettlemoney(billBVO[i].getSalesum());// 销售金额
settleBVO.setSettleaccount(TJYCPubVO.getString_TrimZeroLenAsNull(ncsettleinfo[2]));// 结算科目
settleBVO.setVdef1(TJYCPubVO.getString_TrimZeroLenAsNull(ncsettleinfo[3]));// NC结算名称
list.add(settleBVO);
}
}
SrcBillSettle_BVO[] settleBVOs = new SrcBillSettle_BVO[list.size()];
list.toArray(settleBVOs);
HashTable
// ArrayList除去重复数据
public static void main(String[] args){
ArrayList list = new ArrayList();
list.add(“1”); list.add(“2”); list.add(“2”);
Iterator it1 = list.iterator();
Hashtable hash = new Hashtable ();
while(it1.hasNext()){
Object obj = it1.next();
hash.put(obj, obj);
} //HashTable存储时自动去除了重复的数据
Iterator it2 = hash.keySet().iterator();
list = new ArrayList();
while(it2.hasNext()){
list.add(it2.next());
}
System.out.println(list.size());
}
Help
//修改帮助页面的标题
E:\ufsoft\nchome\resources\lang\simpchn\funcode 下配置文件
HYPubBO 更新VO到数据库(后台操作)
HYPubBO hb = new HYPubBO();
hb.update((SuperVO) getVos()[i].getParentVO()); //lzx
I
/**
* 关闭窗口操作 创建日期(2007-6-7 上午10:03:39)
* @return boolean
*/
public boolean onClosing() {
try {
// 如果在增加、修改状态,编辑人员状态(且mainPanel不是浏览状态)下
if (getDataModel().getCurrentState() == StateRegister.STATE_ADD
|| getDataModel().getCurrentState() == StateRegister.STATE_EDIT || ( ((TranslateRegularMainPan) getMainPanel())
.getCurMainPanelState() != StateRegister.STATE_NOTEDIT)
|| (((TranslateRegularMainPan) getMainPanel())
.getCurMainPanelState() != StateRegister.STATE_NOTEDIT)) {
// 得到是否关闭节点的提示对话框
int ret = MessageDialog.showYesNoCancelDlg(this,
nc.ui.hr.ml.HRPubRes.getMsgTip(), nc.ui.hr.ml.HRPubRes
.getMsgSaveOrNot());
// 如果选择是,且可以保存,则保存单据,否则返回
if (ret == MessageDialog.ID_YES || ret == MessageDialog.ID_OK) {
if (((TrnSaveAction) getBtnManager().getCmdByID(
AbstractBtnReg.SYSBTN_SAVE)).validBeforeSave()) {
getBtnManager().execCmd(AbstractBtnReg.SYSBTN_SAVE);
return true;
} else
return false;
// 如果选择否,执行取消操作
} else if (ret == MessageDialog.ID_NO
|| ret == MessageDialog.ID_NOTOALL) {
getBtnManager().execCmd(AbstractBtnReg.SYSBTN_CANCEL);
return true;
} else // 如果选择取消
return false;
}
return true;
} catch (Exception e) {
reportException(e);
}
return true;
}
UIRefPane中的设置:
setToolTipText(String);//设置参照控件的toolTip
setMaxLength(int);//设置输入字符的最大长度,默认20;
setEditable(boolean);//设置参照是否可编辑
setEnabled(boolean);//设置参照是否可以使用
setDelStr(String);//设置参照输入框不能输入的字符串。
setColor(Color);//设置参照输入框的背景色。
setCacheEnabled(boolean);// 是否使用缓存
setMultiSelectedEnabled(boolean);//是否允许多选择
setAutoCheck(boolean);//是否自动解析输入的参照数据
setButtonFireEvent(boolean);//按钮选择数据后是否触发ValueChanged事件
setNotLeafSelectedEnabled(Boolean);//非末级节点是否可选择(对树参照有效)
setIsCustomDefined(boolean);//是否为用户自定义参照模型
setIncludeSubShow(boolean);//树型参照是否包含下级复选框是否显示
setMultiCorpRef(boolean);//树表参照是否显示公司选项(在参照中动态切换公司)
setTreeGridNodeMultiSelected(boolean);//树表参照是否允许选择不同树节点下的数据。
refModle中的设置
setUseDataPower(boolean) ;//设置参数是否自动关联基本档案数据权限
setSealedDataShow(boolean);//设置封存数据是否显示
setRefQueryDlgClaseName(String);//设置参照查询类名称(参照的查询功能)
setLocQueryEnable(boolean);//树表参照,在启用查询功能后,是否启用定位查询功能
setDynamicColClassName(String);//是否为动态列参照。
setFormulas(String[][] formulas);//设置公,用于参照内容转换;
setDispConvertor(java.util.Hashtable newDispConvertor);//用于参照内容转换的影射表
setMatchField(String);//设置参照setpk时匹配的字段
getRefVO_mlang();//为多语言添加此方法, 请覆盖此方法返回要翻译字段数组。详见DefaultRefModel_multiLang
addWherePart(String);参照在运行中动态添加过滤条件,每次在原始的WherePart上添加

IDBCacheBS
//前后台查询,V55以后必须使用:利用IDBCacheBS进行一般的SQL查询
IDBCacheBS dbcf = (IDBCacheBS) NCLocator.getInstance().lookup(IDBCacheBS.class.getName());
ArrayList result = (ArrayList) dbcf.runSQLQuery(sql, new ArrayListProcessor());
if (result.size() > 0){
for (int i = 0; i < result.size(); i++){
Object[] values = (Object[]) result.get(i);
OPERATOR = (String) values[1];}}
//前台查询 返回VO
HYPubBO_Client.queryByCondition(voClass, strWhere);
HYPubBO_Client.queryBillVOByCondition(billUI.createController().getBillVoName(), queryNewBillvos.toString());//返回聚合VO
//billUI.createController().getBillVoName()=String[] { MyBillVO.class.getName(), CETCItemRationVO.class.getName(), CETCItemRationBVO.class.getName() }

//通过JDBC FrameWork访问数据库
PersistenceManager sessionManager=null;
try {
sessionManager =PersistenceManager. getInstance ();//构造参数可指定数据源
JdbcSession session = sessionManager. getJdbcSession ();//开始jdbc会话
String sql = "update bd_invmandoc set pk_invmandoc =‘0001AA10000000000DDD’ where pk_invmandoc=?”;
SQLParameter parameter = new SQLParameter(); 构造参数对象
parameter.addParam(“0001AA10000000000DDD”);添加参数,JdbcSession会将参数对象中的每个对象放入到预处理对象的相应位置
session.executeUpdate(sql,parameter);
} catch (DbException e) {
//根据数据库的不同统一异常处理
if(e.isBadSQLGrammar())//如果是语法错误
//to do 相关处理
if(e.isDataIntegrityViolation())//如果是数据一致性错误
//to do 相关处理
}
}
finally {
if(sessionManager!=null)
sessionManager. release ();//需要关闭会话
}

1.无参查询
String sql = “select * from bd_deptdoc”; //构造查询语句
List list = (List) session.executeQuery(sql, new ArrayListProcessor());
2.有参查询
String sql = “select * from bd_deptdoc where dept_code=?”;
SQLParameter param = new SQLParameter(); //构造参数对象
param.addParam(“aaa”); //添加参数
List list=(List) session.executeQuery(sql, param, new ArrayListProcessor());
3.有参更新
String sql = "update bd_deptdoc set dept_code =‘aaa’ where dept_code=?”;
SQLParameter param = new SQLParameter(); //构造参数对象param.addParam(“bbb”); //添加参数
session.executeUpdate(sql, param);
5.无参批量更新
String sql = “update bd_deptdoc set dept_code =‘aaa’ where dept_code=‘bbb’”;
session.addBatch(sql); //添加需要执行的同构SQL
int rows = session.executeBatch(); //执
6.特殊参数

  1. Null参数 param.addNullParam(java.sql.Types.INTEGER);
  2. Blob参数 param.addBlobParam (new Object());
  3. Clob参数 param.addClobParam (new String());

If
下面我重新对 null 与 “” 的区别 作一个详细的解释:
String str1 = null; str引用为空
String str2 = “”; str应用一个空串
也就是null没有分配空间,"“分配了空间,因此str1还不是一个实例化的对象,而str2已经实例化。
注意因为null不是对象,”“是对象。所以比较的时候必须是 if(str1null){…}和if(str2.equals("")){}
对象用equals比较,null用等号比较。因此,如果str1=null;下面的写法错误:
if(str1.equals("")||str1
null){//如果str1没有值,则…
}
正确的写法是
if(str1null||str1.equals("")){//先判断是不是对象,如果是,再判断是不是空字符串
}
isNull(String str)//判断str是否为空
Iif
公式iif函数
iif(condition,thenvalue,elsevalue)判断条件condition是否满足,如果满足返回第一个值thenvalue,如果不满足返回第二个值elsevalue,比如iif(var1
"Y”,“Open”,“Close”).iif函数支持嵌套比如:iif(var1==“Y”,iif(var2!=“C”,“Stop”,“Run”),“Close”)
例:
num->iif(num >0, num,"" )//如果num>0,则num==num,否num=””
insertContract()//信贷合同保存方法
IPfBackCheck2——NC502控制逐级弃审方法
聚合VO继承IPfBackCheck2借口即可
Public class BillVO() implements IPfBackCheck2
{
}
String Int 字符串转整型

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值