NC客户化开发手册(中级篇)
更新时间:2024-01-19 19:51:01 阅读量: 教育文库 文档下载
- nc客户是什么意思推荐度:
- 相关推荐
NC客户化开发手册
前言
目录
前言 ........................................................................................................................................................................... 1 第一章
1.1 1.2 1.3 1.4 第二章
2.1
规范篇 ................................................................................................................... 错误!未定义书签。 代码规范 .......................................................................................................... 错误!未定义书签。 注释规范 .......................................................................................................... 错误!未定义书签。 异常规范 .......................................................................................................... 错误!未定义书签。 其他规范 .......................................................................................................... 错误!未定义书签。 基础篇 ................................................................................................................... 错误!未定义书签。 单据信息 .......................................................................................................... 错误!未定义书签。 2.1.1获取卡片和列表容器(Panel) ......................................................................... 错误!未定义书签。 2.1.2当前界面卡片/列表状态 ................................................................................ 错误!未定义书签。 2.1.3获取/设置当前单据的操作状态: ................................................................ 错误!未定义书签。 2.1.4获取选择的树节点 ......................................................................................... 错误!未定义书签。 2.1.5是否单表体 ..................................................................................................... 错误!未定义书签。 2.1.6设置单据卡片表头区域比例 ......................................................................... 错误!未定义书签。 2.1.7设置表体页签状态 ......................................................................................... 错误!未定义书签。 2.1.8获取单据模板上定义的所有字段 ................................................................. 错误!未定义书签。 2.2
VO的获取和赋值及更新.................................................................................. 错误!未定义书签。 2.2.1 VO的获取 ...................................................................................................... 错误!未定义书签。 2.2.2 VO的操作 ...................................................................................................... 错误!未定义书签。 2.3
字段处理 .......................................................................................................... 错误!未定义书签。 2.3.1表头字段值 ..................................................................................................... 错误!未定义书签。 2.3.2表体字段值 ..................................................................................................... 错误!未定义书签。 2.3.3字段设置可编辑: ......................................................................................... 错误!未定义书签。 2.3.4隐藏字段 ......................................................................................................... 错误!未定义书签。 2.3.5设置数度 ......................................................................................................... 错误!未定义书签。 2.3.6设置字段焦点 ................................................................................................. 错误!未定义书签。 2.4
公式 .................................................................................................................. 错误!未定义书签。 2.4.1执行、设置公式: ......................................................................................... 错误!未定义书签。 2.4.2公式解析器: ................................................................................................. 错误!未定义书签。 2.5
单据行操作 ...................................................................................................... 错误!未定义书签。 2.5.1获取表体选择行 ............................................................................................. 错误!未定义书签。 2.5.2删除表体的自动排序 ..................................................................................... 错误!未定义书签。 2.5.3行编辑状态: ................................................................................................. 错误!未定义书签。 2.5.4选中表体所有行 ............................................................................................. 错误!未定义书签。 2.5.5列表下,表头行可多选的实现 ..................................................................... 错误!未定义书签。 2.5.6行操作(删除,增行等) .................................................................................. 错误!未定义书签。
第 1 页 / 共 19 页
2.6
获取系统相关 .................................................................................................. 错误!未定义书签。 2.6.1常量的获取(公司,操作员,时间) ......................................................... 错误!未定义书签。 2.6.2单据号的获取 ................................................................................................. 错误!未定义书签。 2.7
程序健壮性及易用性 ...................................................................................... 错误!未定义书签。 2.7.1单据保存时强制调用非空验证方法: ......................................................... 错误!未定义书签。 2.7.2弹出消息框代码: ......................................................................................... 错误!未定义书签。 2.7.3在编辑事件中常用的判断 ............................................................................. 错误!未定义书签。 2.7.4设置表体没有右键菜单方法 ......................................................................... 错误!未定义书签。
第三章
3.1 3.2 3.3 3.4 3.5
高级篇 ................................................................................................................... 错误!未定义书签。 审批流 .............................................................................................................. 错误!未定义书签。 后台预警 .......................................................................................................... 错误!未定义书签。 后台任务 .......................................................................................................... 错误!未定义书签。 消息 .................................................................................................................. 错误!未定义书签。 错误定位(日志分析)................................................................................... 错误!未定义书签。
第一章 个性化应用
1.1 单据常用设置 1.1.1 校验是否允许表体为空
修改校验类里的
public boolean isAllowEmptyBody(String tablecode) { }
return true;
1.1.2 显示单据中的行号
在client端的xxxxxxCtrl.java中的
public boolean isShowListRowNo() { // 显示列表的行号
} }
return true; return true;
public boolean isShowCardRowNo() { // 显示卡片的行号
1.1.3 对某个表里的某个字段进行汇总
? ?
public boolean isShowCardTotal() { }
return true;
在模板中给要汇总的字段的是否合计属性打上勾 然后再对应的Controller类中修改下面几个方法: }
return true;
public boolean isShowCardRowNo() {
第 2 页 / 共 19 页
public boolean isShowListRowNo() { ?
public boolean isShowListTotal() { }
再在对应的UI类中相应的方法中添加如下代码:
return true; }
return true;
//自动汇总 表体申请拨款金额 并给 表头的申请拨款金额 赋值
getBillCardPanel().setHeadItem(\napplytotal:指的是赋值的字段名;
0:指的是汇总表中的行;1:指的是汇总表中的列。
1.2 单据界面个性化
1.2.1 表体为零的,不显示为空,金额以千分位格式显示
列表下千分位显示
getBillListPanel().getParentListPanel().setShowThMark(true);
getBillCardPanel().getBodyPanel().getRendererVO().setShowZeroLikeNull(
false);
// resolved 金额以会计格式显示,如:123,456,789,12
getBillCardPanel().getBodyPanel().getRendererVO().setShowThMark(true);
nc.vo.pub.bill.BillTempletBodyVO[] tbodyvos = (nc.vo.pub.bill.BillTempletBodyVO[]) for (int j = 0; j < tbodyvos.length; j++) { }
if (tbodyvos[j].getPos() == 0 && tbodyvos[j].getShowflag() == true) { }
if (tbodyvos[j].getDatatype().toString().equals(\ }
((UIRefPane) getBillCardPanel().getHeadItem(
tbodyvos[j].getItemkey()).getComponent()) .getUITextField() .setNumShowType(
getBillCardPanel().getTempletData().getChildrenVO();
nc.ui.pub.beans.textfield.IUITextFieldNUMShowType.THOUSANDS_SEPARATORS);
1.2.2 设置字体颜色
getBillListPanel().getParentListPanel().setCellBackGround(i, key,new Color(252, 169, 175));
1.2.3 单据组合表头
/**
*设置组合表体表头 *@parambill */
publicstaticvoid groupableTableHeader(BillCardPanel bill) {
BillData billData = bill.getBillData();
第 3 页 / 共 19 页
/* wjh追加 组合表头 利用单据模板上的自定义1 开始 */
if (billData.getBodyItems() != null) {
nc.vo.pub.bill.BillTempletBodyVO[] tbodyvos =
.getTempletData().getChildrenVO();
(nc.vo.pub.bill.BillTempletBodyVO[]) bill
for (int j = 0; j < tbodyvos.length; j++) {// 根据模板上属性“自
定义项1”来组合表体的组合表头 if (tbodyvos[j].getUserdefine1() != null
&&
tbodyvos[j].getUserdefine1().trim().length() != 0) {
// 由于可能存在多叶签情况,所以要对叶签进行判断
String tablecode = tbodyvos[j].getTable_code();
BillScrollPane scrollpane = bill
{
.getBodyPanel(tablecode);
GroupableTableHeader tableheaer =
.getTable().getTableHeader();
(GroupableTableHeader) scrollpane
String colName = tbodyvos[j].getUserdefine1(); ColumnGroup cg1 = new ColumnGroup(colName); addColItem(scrollpane, cg1, int njs = 1;
for (int n = j + 1; n < tbodyvos.length; n++, j++) {
tbodyvos[j].getItemkey());
if (tbodyvos[n].getUserdefine1() != null
if }
&&
.trim().length() != 0 && n == j + 1)
tbodyvos[n].getUserdefine1().toString()
(tbodyvos[n].getUserdefine1().equals(colName)
&& tbodyvos[n].getTable_code().equals(
tablecode)) {
addColItem(scrollpane, cg1,
tbodyvos[n].getItemkey());
njs++; continue; if (njs > 1) { } break;
tableheaer.addColumnGroup(cg1);
} else {
} else {
if (njs > 1) {
第 4 页 / 共 19 页
}
}
}
}
}
}
}
tableheaer.addColumnGroup(cg1);
break;
/** *
*添加组合表头子项王韶勇追加 *
**@paramscrollpane *@paramcolGroup *@paramsColItem */
privatestaticvoid addColItem(BillScrollPane scrollpane, ColumnGroup
String sColItem) {
colGroup,
}
if (scrollpane.hasHideCol(sColItem))
return;
TableColumn col = scrollpane.getShowCol(sColItem); if (col != null)
colGroup.add(col);
1.2.4 多表头
ColumnGroup group = new ColumnGroup(“表头1”);
GroupableTableHeader gt = ((GroupableTableHeader) getBillCardPanel().getBillTable(\表体名\gt.addColumnGroup(group);
group.add(getBillCardPanel().getBodyPanel(\表体名\列名\ColumnGroup group1 = new ColumnGroup(\祖名\
GroupableTableHeader gt1 = ((GroupableTableHeader) getBillListPanel().getBodyTable().getTableHeader()); gt1.addColumnGroup(group1);
group1.add(getBillListPanel().getBodyTable().getColumnModel().getColumn(2)); group1.add(getBillListPanel().getBodyTable().getColumnModel().getColumn(3));
1.2.5 报表列分组
注释:详细解释请参看nc.vo.pub.cquery.FldgroupVO
第 5 页 / 共 19 页
FldgroupVO[] vos = new FldgroupVO[3]; FldgroupVO vo1 = new FldgroupVO(); // vo1.setPrimaryKey(\vo1.setGroupname(\机组\vo1.setGroupid(new Integer(0)); vo1.setGrouptype(\vo1.setItem1(\vo1.setItem2(\vo1.setToplevelflag(\
FldgroupVO vo2 = new FldgroupVO(); // vo2.setPrimaryKey(\vo2.setGroupname(\机组\vo2.setGroupid(new Integer(0)); vo2.setGrouptype(\vo2.setItem1(\vo2.setItem2(\vo2.setToplevelflag(\
FldgroupVO vo3 = new FldgroupVO(); // vo3.setPrimaryKey(\vo3.setGroupname(\机组\vo3.setGroupid(new Integer(0)); vo3.setGrouptype(\vo3.setItem1(\vo3.setItem2(\vo3.setToplevelflag(\vos[0] = vo1; vos[1] = vo2; vos[2] = vo3;
// 设置字段分组,在此不起作用,使用其下代码alterFieldGroup(vos) // getReportBaseClass().setFieldGroup(vos); // 修改表头列分组
getReportBaseClass().alterFieldGroup(vos);
1.2.6 单据联查
PfLinkData linkQuery = new PfLinkData();
linkQuery.setBillID(单据主键的值); //
SFClientUtil.openLinkedQueryDialog(\,
linkQuery);
this.getBillUI(),
第 6 页 / 共 19 页
1.3 系统信息获取 1.3.1 当前操作员的人员信息
}
publicstatic UserAndClerkVO[] getOpreatorsByClerkId(String ClerkId){
// 当前操作人关联业务员
UserAndClerkVO[] OpreatorVOs = null; try {
//根据人员档案主键查询出人员管理档案主键
IJHPubBill Qrypk = (IJHPubBill)NCLocator.getInstance().lookup(IJHPubBill.class); }
return psnmanvo;
PsnBasManUnionVO[] psnBasManUnionVOs = ((IPsnDocQueryService) NCLocator
.getInstance().lookup(IPsnDocQueryService.class.getName()))
.queryPsnUnionVosByUnionCondition(\
+ clerkVO.getPk_psndoc() + \);
/**
*根据当前操作员查询出人员信息 *
*@paramsOperator *@return */
publicstatic PsndocVO getPsndocByOpreator(String sOperator) {
PsndocVO psnmanvo = null; try {
// 当前操作人关联业务员
UserAndClerkVO clerkVO = ((IUserAndClerkQueryService) NCLocator }
.getInstance().lookup(
IUserAndClerkQueryService.class.getName()))
.findByUserID(sOperator);
|| clerkVO.getPk_psndoc().length() == 0) {
if (clerkVO == null || clerkVO.getPk_psndoc() == null
returnnull;
// 人员管理档案VO
psnmanvo = psnBasManUnionVOs[0].getPsnmanvo(); return psnmanvo; ex.printStackTrace();
} catch (Exception ex) {
第 7 页 / 共 19 页
通过查找业务关联的操作员
publicstatic UserAndClerkVO[] getOpreatorsByClerkId(String ClerkId){
}
// 当前操作人关联业务员
UserAndClerkVO[] OpreatorVOs = null; try { }
return OpreatorVOs;
//根据人员档案主键查询出人员管理档案主键
IJHPubBill Qrypk = (IJHPubBill)NCLocator.getInstance().lookup(IJHPubBill.class); String psndocpk = Qrypk.QryManPKByBasPK(ClerkId);
OpreatorVOs = ((IUserAndClerkQueryService) NCLocator
.getInstance().lookup(
IUserAndClerkQueryService.class.getName()))
.queryByClerkId(psndocpk);
}
}
return OpreatorVOs;
String psndocpk = Qrypk.QryManPKByBasPK(ClerkId);
OpreatorVOs = ((IUserAndClerkQueryService) NCLocator
.getInstance().lookup(
IUserAndClerkQueryService.class.getName()))
.queryByClerkId(psndocpk);
} catch (ComponentException e) {
e.printStackTrace(); e.printStackTrace(); } catch (BusinessException e) {
} catch (ComponentException e) {
e.printStackTrace(); e.printStackTrace(); } catch (BusinessException e) {
Qrypk.QryManPKByBasPK(ClerkId)实现方法为:
public String QryManPKByBasPK(String psnbasdocPK) throws BusinessException {
String sql = \; String pk_psndoc = null;
SQLParameter para = new SQLParameter(); para.addParam(psnbasdocPK);
List psndocPK = (List)this.executeQuery(sql, para, new ColumnListProcessor(
第 8 页 / 共 19 页
}
for (Iterator iter = psndocPK.iterator(); iter.hasNext();) { }
return pk_psndoc;
pk_psndoc = (String) iter.next();
1));
1.3.2 总帐的最小未结帐月份
ICreateCorpQueryService cc=
(ICreateCorpQueryService)getLocator().lookup(ICreateCorpQueryService.class.getName()); //查询总帐的最小未结帐月份
String[] sYearMonth = cc.querySettledPeriod(dwbm, \
1.3.3 IP地址
public static String getDefaultLoginIP() {
}
private static boolean isRunningServer() { }
return RuntimeEnv.getInstance().isRunningInServer(); if (isRunningServer()) }
return InvocationInfoProxy.getInstance().getRemoteHost(); String ip = null; try { } return ip;
ip = InetAddress.getLocalHost().getHostAddress(); Logger.error(e.getMessage(), e);
throw new BusinessRuntimeException(e.getMessage()); } catch (UnknownHostException e) { else {
1.3.4 用户信息查询
IUserManageQuery umq = (IUserManageQuery)
UserVO psnVO =
IUserManageQuery.class.getName());
NCLocator.getInstance().lookup(
umq.getUser(task.getSenderman());
userName = psnVO.getUserName();
第 9 页 / 共 19 页
1.3.5 客户端获取服务器段的nchome路径
ClientEnvironment.getInstance().getServerURL() String ncHome =
RuntimeEnv.getInstance().getProperty(RuntimeEnv.SERVER_LOCATION_PROPERTY);
1.4 系统消息 1.4.1 待办事务
可以参考下, 后台代码,就是往数据库插入一条记录 //////////////////////////////1
PFMessageBO pfm = new PFMessageBO();
CommonMessageVO comvo = new CommonMessageVO(); UserNameObject usvo = new UserNameObject(\ usvo.setUserPK(\ usvo.setUserCode(\ usvo.setUserName(\
comvo.setSender(\
comvo.setReceiver(new UserNameObject[]{usvo}); comvo.setMessageContent(\导入数据演示\ comvo.setTitle(\外部平台导入数据\
comvo.setType(MessageTypes.MSG_TYPE_INFO); pfm.insertCommonMessage(comvo); ///2
PFMessageBO pfm = new PFMessageBO();
CommonMessageVO comvo = new CommonMessageVO(); UserNameObject usvo = new UserNameObject("a"); usvo.setUserPK("0001ZZ100000000000VJ"); usvo.setUserCode("a"); usvo.setUserName("a"); comvo.setSender("a");
comvo.setReceiver(new UserNameObject[]{usvo}); comvo.setMessageContent("导入数据演示"); comvo.setTitle("外部平台导入数据"); comvo.setType(MessageTypes.MSG_TYPE_INFO); pfm.insertCommonMessage(comvo); ///////////////////////////////
发送待办消息 UAP发送待办消息方法
void nc.itf.uap.pf.IPFMessage.insertCommonMsg(CommonMessageVO cMsgVO) throws BusinessException
参数说明 cMsgVO 普通消息VO, 结构定义如下:
public class CommonMessageVO extends ValueObject {
第 10 页 / 共 19 页
/** 消息内容 */ private String m_message = null; /** 发送人PK */ private String m_sender = null;
/** 接收人pk */ private UserNameObject[] m_receiver = null; /** 发送时间 */ private UFDateTime m_sendDate = null; /** 标题 */ private String m_title = null;
/**消息优先级*/ private int priority = MessagePriority.PRI_NORMAL(另外两个常量是 PRI_LOW;PRI_HIGH); } 使用说明
该方法前后台均可使用,用于向指定的用户发送业务消息。执行效果为在消息中心的 待办事务中插入一条普通消息,双击时弹出消息内容对话框。 public class MessageTypes { /**
* 公告消息,可由任何人看到的消息 */
public final static int MSG_TYPE_PUBLIC = -1; /**
* 预警消息,预警平台产生的预警消息 */
public static final int MSG_TYPE_PA = 0; /**
* 对发消息,某人向另外一人直接发送的消息 */
public static final int MSG_TYPE_P2P = 1; /**
* 业务流消息,业务流平台产生的需要业务处理的推式消息 */
public final static int MSG_TYPE_BUSIFLOW_PUSH = 3; /**
* 业务流消息,业务流平台产生的需要业务处理的拉式消息 */
public final static int MSG_TYPE_BUSIFLOW_PULL = 4; /**
* 业务流消息 */
public final static int MSG_TYPE_BUSIFLOW = 5; /**
* 普通消息,一般的通知消息 */
public static final int MSG_TYPE_INFO = 6; /**
* 后台消息,类同于预警但又不同于预警 */
public static final int MSG_TYPE_BG = 10;
第 11 页 / 共 19 页
1.4.2 保存后推送审批流消息
//如果有审批流,则发消息
if(billstatus == IBillStatus.CHECKGOING){
PuTool.sendMessageToMen(voUI.getHeadVO().getCoperator(), //制单人 }
voUI.getHeadVO().getCapproverid(), voUI.getHeadVO().getPrimaryKey(), voUI.getVBillCode(),
ScmConst.PO_MaterialAppBill);
1.4.3 手工发送消息
String pk_wf_task = null;
// IPFMessage ipfmsg = (IPFMessage) NCLocator.getInstance() // .lookup(IPFMessage.class.getName());
// ipfmsg.insertBizMsgs(new WorkflownoteVO[] { noteVO }); UFDateTime now = new UFDateTime(new Date());
noteVO.setActiontype(WorkflownoteVO.WORKITEM_TYPE_APPROVE);
// 发送业务消息到待办事务 给制单人
WorkflownoteVO noteVO = new WorkflownoteVO(); noteVO.setBillid(parentVO.getPrimaryKey()); noteVO
.setBillno((String) parentVO
.getAttributeValue(\
String corp_user = (String) parentVO
.getAttributeValue(\
noteVO.setCheckman(corp_user.substring(5));
noteVO.setMessagenote(parentVO.getAttributeValue(\
+ \已补单。\
.getAttributeValue(\
noteVO.setPk_billtype((String) parentVO noteVO.setPk_corp(corp_user.substring(0, 4));
noteVO.setSenderman(ClientEnvironment.getInstance().getUser()
.getPrimaryKey());
+ (String) parentVO.getAttributeValue(\+ \
String sql = \
ResultSetProcessor rs = new ArrayListProcessor();
ArrayList al = (ArrayList) DBCacheFacade.runQuery(sql, rs); if (al != null && al.size() > 0) { }
Object[] ob = (Object[]) al.get(1); pk_wf_task = (String) ob[0];
第 12 页 / 共 19 页
String pk = billUpd.insertVO(noteVO);
noteVO.setIscheck(\
noteVO.setReceivedeleteflag(UFBoolean.FALSE); noteVO.setSenddate(now);
noteVO.setApprovestatus(WFTask.STATUS_Start); if (noteVO.getPk_businesstype() == null)
noteVO.setPk_businesstype(IPFConfigInfo.STATEBUSINESSTYPE);
1.5 文件操作 1.5.1 文件目录创建方法
//获得NC_HOME绝对路径
//目录如果不存在,则创建目录
java.io.File srcDir = new java.io.File(srcPath); java.io.File clsDir = new java.io.File(outPath); if (!srcDir.exists())
srcDir.mkdirs(); clsDir.mkdirs(); if (!clsDir.exists())
String nchome = RuntimeEnv.getInstance().getNCHome();
nchome = new File(nchome).getAbsoluteFile().getCanonicalFile().toString(); String moduleHome = nchome + \ + module; //System.out.println(\ //获得编译前后Java文件目录和Class文件目录 String outPath = \; if (isBSClass) else
outPath = moduleHome + \; String srcPath = moduleHome + \;
outPath = moduleHome + \;
1.5.2 单据导出
@Override
protected void onBoExport() throws Exception { ()
._getModuleCode(),((BillManageUI) getBillUI
()).getBillListPanel());
nc.ui.pub.print.PrintEntry print = new nc.ui.pub.print.PrintEntry print.setTemplateID(getBillUI()._getCorp().getPrimaryKey(),
._getModuleCode(), getBillUI()._getOperator(),
(null, dataSource); getBillUI()
nc.ui.pub.print.IDataSource dataSource = new ListPanelPRTS(getBillUI
第 13 页 / 共 19 页
getBillUI() }
.getBusinessType(), getBillUI().getNodeKey());
ScmPrintTool.exportExcelByPrintTemplet(print,null);
1.6 脚本 1.6.1 自定义脚本类
可以自定义自己的脚本类型及脚本类,只要在pub_busiclass表中将 actiontype(脚本类 型) 与 classname(脚本类) 对应上即可,然后再脚本类中通过执行脚本类将参数 传递进去即可,如下:
retObj = bsBusiAction.processAction(\自定义脚本类型\
\单据类型\dmakedate.toString(), null,
vo.m_preValueVo, null, null);
系统会根据【单据类型】和【自定义脚本类型】在pub_busiclass表中查找对应的脚 本类。
1.6.2 调用其他脚本
// 获取业务动作类
IPFBusiAction bsBusiAction = (IPFBusiAction)
NCLocator.getInstance().lookup(IPFBusiAction.class.getName());
// 调用其他单据类型的动作脚本(参数1:操作类型,比如;参数2:单据 类型;参数3:日期字符串;参数4:审批流、工作流执行过程中需要与用户 交互的上下文VO;参数5:聚合vo;参数6: 用户对象;参数7:环境参数) retObj = bsBusiAction.processAction(\RMBBillType.RMF_OUTBILL,
dmakedate.toString(),null,vo.m_preValueVo,null,
null);
1.7 事件监听
1.7.1 移除字段的参照监听添加新的监听类
示例代码如下:
BillItem headItem = billData.getHeadItem(“LOANBILLNO”);
if (headItem != null) {
UIRefPane loanRef = (UIRefPane) headItem.getComponent(); if (loanRef != null) { }
loanRef.getUIButton().removeActionListener(
loanRef.getUIButton().getListeners(
ActionListener.class)[0]);
loanRef.getUIButton().addActionListener(
new LoanBillListener(this));
loanRef.setAutoCheck(false);
第 14 页 / 共 19 页
}
1.7.2 页签转换事件监听
UI工厂生成的代码,如果是多页签(表头或表体),那么监听页签之间转换事件的方法如下: 在ClientUI类的initSelfData()中实现如下代码即可: //卡片表头增加页签转换事件监听
getBillCardWrapper().getBillCardPanel().getHeadTabbedPane().addChangeListener(new ChangeListener(){
public void stateChanged(ChangeEvent e) {
int index = getBillCardPanel().getHeadTabbedPane().getSelectedIndex(); String saleid = getBillCardPanel().getHeadItem(\getBillCardPanel().getHeadItem(\} });
//卡片表体增加页签转换事件监听
getBillCardWrapper().getBillCardPanel().getHeadTabbedPane().addChangeListener(new ChangeListener(){
public void stateChanged(ChangeEvent e) { } });
//列表表体增加页签转换事件监听
getBillListPanel().getBodyTabbedPane().addChangeListener(new ChangeListener(){ public void stateChanged(ChangeEvent e) { } });
1.8 NC常用开发技巧
1.8.1 得到表体某一列合计值
getBillListPanel().getBodyScrollPane(\getBillListPanel().getParentListPanel().setTotalRowShow(true); getBillCardPanel().setTatolRowShow(true); 然后获取获取合计行的值
getBillCardPanel().getTotalTableModel().getValueAt(\行号\列字段\
设置合计的模式
getHeadBillModel().setRowSelectMode(false);设置为false后,合计行为所有的的合计,默认的是合计选择行的合计
1.8.2 NC加锁
public void updateForEx(CubasdocVO cubasdoc) throws BusinessException,
DbException { // 获取锁
boolean islock = false;
islock = PKLock.getInstance().acquireBatchLock
第 15 页 / 共 19 页
(cubasdoc.getLockpks(),
}
cubasdoc.getUserid(), \
// 更新 if (islock) { } // 异常 else { }
throw new nc.vo.pub.BusinessException try { }
getCubasdocDMO().updateForEx(cubasdoc); // 释放锁
PKLock.getInstance().releaseBatchLock
cubasdoc.getUserid(), \
} finally {
(cubasdoc.getLockpks(),
(nc.vo.bd.BDMsg.MSG_LOCKED());
1.8.3 附件管理功能实现
import java.awt.Container; import java.awt.Frame; import java.io.File; import nc.ui.ml.NCLangRes;
import nc.ui.pub.beans.MessageDialog; import nc.ui.pub.beans.UIFileChooser; import nc.ui.pub.beans.util.NCOptionPane; import nc.ui.pub.filemanager.FileManagerDialog; import nc.ui.pub.filemanager.FileManagerUtil; @SuppressWarnings(\
public class MyFileManagerDialog extends FileManagerDialog {
private int iMaxAttachmentSize = 5 * 1024 * 1024;// 上传附件的大小限制在5M private int iMaxCount = 5; //上传附件的个数限制在5个 //构造函数
public MyFileManagerDialog() { super(); }
public MyFileManagerDialog(String[] dirs, String[] dirShowNames) {
super(dirs, dirShowNames); }
public MyFileManagerDialog(Container parent, String[] dirs, String[] dirShowNames)
第 16 页 / 共 19 页
{
super(parent, dirs, dirShowNames); }
public MyFileManagerDialog(Container parent, String title, String[] dirs, String[] dirShowNames) {
super(parent, title, dirs, dirShowNames); }
public MyFileManagerDialog(Frame owner, String[] dirs, String[] dirShowNames) {
super(owner, dirs, dirShowNames); }
public MyFileManagerDialog(Frame owner, String title, String[] dirs, String[] dirShowNames) {
super(owner, title, dirs, dirShowNames); }
protected void onFileUpload() {
String id = super.getDir(); if (id == null) {
NCOptionPane.showMessageDialog(this, NCLangRes.getInstance ().getStrByID(\return; }
UIFileChooser fileChooser = new UIFileChooser(); fileChooser.setFileSelectionMode(0); fileChooser.setMultiSelectionEnabled(false); int rs = fileChooser.showOpenDialog(this); if (rs != 0) return;
File file = fileChooser.getSelectedFile(); if (!(file.exists())) return;
String localFilePath = file.getAbsolutePath();
String fileName = fileChooser.getSelectedFile().getName(); if ((localFilePath == null) || (localFilePath.length() <= 0)) return;
if (FileManagerUtil.isFileExistedServer(getDir(), fileName)) { int result = NCOptionPane.showConfirmDialog(this, NCLangRes.getInstance().
getStrByID(\().
第 17 页 / 共 19 页
getStrByID(\if (result != 0) { return; } }
//add by yzk at 2010-06-22 start
int iFileLength = (int) fileChooser.getSelectedFile().length(); if (iFileLength > iMaxAttachmentSize) {
MessageDialog.showHintDlg(this.getParent(), \提示信息\附件大小不 能超过 \!\return; }
int res = this.getUITreeFile().getRowCount(); if(res >= iMaxCount){
MessageDialog.showHintDlg(this.getParent(), \提示信息\附件个数不能超 过5个!\return; }
//add by yzk at 2010-06-22 end
FileManagerUtil.saveFileToServer(id, localFilePath); updateTree(); } }
1.8.4 存储特殊字符
数据库用BLOB类型,模板上设置成大文本和字符都可以 这个一般都是用来存图片什么的
1.9 常用的算法 1.9.1 判断字符串是否为数字
1用JAVA自带的函数
public static boolean isNumeric(String str){
第 18 页 / 共 19 页
for (int i = str.length();--i>=0;){ if (!Character.isDigit(str.charAt(i))){ return false; } } return true; }
2用正则表达式
public static boolean isNumeric(String str){ Pattern pattern = Pattern.compile(\ return pattern.matcher(str).matches(); }
3用ascii码
public static boolean isNumeric(String str){ for(int i=str.length();--i>=0;){ int chr=str.charAt(i); if(chr<48 || chr>57) return false; }
第 19 页 / 共 19 页
正在阅读:
NC客户化开发手册(中级篇)01-19
l11-13渗透压教案10-11
古代感恩故事02-18
创建群众满意客运站申报材料02-22
11级《操作系统原理实验》试卷A及答案09-17
翻译作业.docx打印08-29
二年级数学《数据的收集整理》练习题(3)03-01
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 中级
- 客户
- 手册
- 开发
- 中学生如何面对灾难技能训练检测
- 小四综合实践活动《早餐的学问》教学设计
- office2010单项选择试题库(含答案)
- 大沟煤业监控调度室搬迁方案 - 图文
- 笔耕不辍 写奋进人生 - 图文
- 应用文写作测试题附答案
- 英国伦敦大学国王学院传媒专业详解 - 图文
- DLT645通信协议
- 核桃破壳机文献综述
- 《统计学原理》习题集(附答案)
- 教师“一帮一”结对子活动总结
- 第二部分 市政公用工程项目施工管理
- 成语包含哲理汇总(成语蕴含的哲学道理)
- 附录五:战略性新兴产业分类
- 四川省绵阳市三台县西平中学2015届高三地理3月月考试题
- 财税实务“僵尸企业”处置中的税务难题及解决路径
- 中国水利工程协会安全员 考试试题及答案A-E卷 自己考过的
- Peoplesoft模块介绍
- 基于河西五市通道经济战略的研究与构想
- 2013高考试题分类汇编地球上的水