NCAPI解读.docx
《NCAPI解读.docx》由会员分享,可在线阅读,更多相关《NCAPI解读.docx(98页珍藏版)》请在冰豆网上搜索。
NCAPI解读
NC开发帮助
作者:
jieely
✧A
ØAccsubjdoc
//通过系统提供的会计科目接口查询所有会计科目
Accsubjdocitf=
(Accsubjdoc)NCLocator.getInstance().lookup(Accsubjdoc.class.getName());
nc.vo.bd.b02.AccsubjVO[]targetSubjVos=itf.queryAccsubjVOs(pk_glorgbook,null,false);
AccperiodVO
//查询会计期间
AccperiodVO[]accperiodVOs=
(AccperiodVO[])HYPubBO_Client.queryByCondition(AccperiodVO.class,"nvl(dr,0)=0");
ØaddBetch
a.无参批量更新
Stringsql="updatebd_deptdocsetdept_code=‘aaa’wheredept_code=‘bbb’";
session.addBatch(sql);//添加需要执行的同构SQL
introws=session.executeBatch();//执行
b.有参批量更新
Stringsql="updatebd_deptdocsetdept_code=‘aaa’wheredept_code=?
”;
SQLParameterparam=newSQLParameter();//构造参数对象
param.addParam(“bbb”);//添加参数
session.addBatch(sql,param);//添加需要执行的同构SQL
introws=session.executeBatch();//执行
ØafterEdit
@Override//表的编辑后赋默认值方法(UI类重写方法)*先执行afterEdit,后执行公式*
publicvoidafterEdit(BillEditEventevent)
{
super.afterEdit(event);
if(event.getKey().equals("zd"))
{
this.getBillCardPanel().execHeadEditFormulas();
}
elseif(event.getTableCode().equals("st_xx_jyzy")&&event.getKey().equals("code"))
{
this.getBillCardPanel().setBodyValueAt(newUFBoolean('N'),event.getRow(),"jyzt");
this.getBillCardPanel().setBodyValueAt(newUFBoolean('Y'),event.getRow(),"zyzt");
}
}
ØALTER
//增加字段
ALTERTABLEtableaADDnewcolchar(20)
//更改字段名
ALTERTABLEtableaCHANGEnewcolnewrowchar(50)
//更改字段类型
ALTERTABLEtableaMODIFYnewrowchar(30)
//删除字段
ALTERTABLEtableaDROPnewrow
ØArrayList
ArrayListlist=newArrayList();
…..
list.add();
SettleVO[]vos=newSettleVO[list.size()];
vos=list.toArray(vos);//List与VO数组转换
✧B
ØBillCode
//得到单据号
BillcodeGeneraterbillNoGen=newBillcodeGenerater();
billno=billNoGen.getBillCode("TI55","0001",null,null);
ØBillData
BillDatabd=getBillCardPanel().getBillData();
ØBillItem
BillItemitem=bd.getBodyItem(NodeInfo.NAME_TABLECODE1,"ialloctype");
ØBillField
@Override//修改单据状态时需重写此方法
protectedIBillFieldcreateBillField()
{
returnBillField.getInstance();
}
ØButton
//自定义按钮
publicButtonVOgetFujian_btn()
{
ButtonVObtnVO=newButtonVO();
btnVO.setBtnNo(IprivateButton.Fujian_btn);
btnVO.setBtnName("附件管理");
btnVO.setHintStr("附件管理");
btnVO.setOperateStatus(newint[]{IBillOperate.OP_NOTEDIT});//在非新增和非编辑状态下可用
returnbtnVO;
}
//在UI中设置按钮状态
getButtonManager().getButton(nc.ui.trade.button.IBillButton.Add).setEnabled(false);
ØByte[]
publicstaticfinalbyte[]m_ENTER={0x0d,0x0a};//换行符ASCII码:
0x0d0x0a
✧C
ØCaseWhen
ORACLE:
Case…..When语句
SELECT
(CASEdrWHEN0THEN'有效'
WHEN1THEN'无效'
END)AS显示
FROMbd_corp
Øcatch
try{
}
catch(DbExceptione){
//如果是语法错误
if(e.isBadSQLGrammar()){
Logger.error("语法错误:
"+e.getMessage(),e);
}
//如果是数据一致性错误
if(e.isDataIntegrityViolation()){
Logger.error("数据一致性错误:
"+e.getMessage(),e);
}
}
ØCheckRule
<前台校验类>XXXUICheckRule
//校验数据是否重复
publicIUniqueRule[]getItemUniqueRules(Stringtablecode){
if("cl_gg_ytzwlb".equals(tablecode))
{
IUniqueRule[]unique=null;
unique=newIUniqueRule[]{
newUniqueRule("座类编码不能重复",newString[]{("zlbm")})
};
returnunique;
}
returnnull;
}
//校验是否为空
publicICheckRule[]getItemCheckRules(Stringtablecode){
CheckRule[]rules=newCheckRule[]{
newCheckRule("【NC结算方式编码】","ncsettlecode",false,null,null)
};
returnrules;
}
ØcheckPrerequisite
//对于控制集团不能打开节点,只有公司可以打开节点的处理
//在ClientUI中覆写Toftpanel的方法:
publicStringcheckPrerequisite()
{
Stringpk_corp=_getCorp().getPk_corp();
if(pk_corp.equals("0001")){
return"当前处于集团,此功能点无法进入";
}
returnnull;
}
ØClientEnvironment
Ø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
UIComboBoxtypeCom=(UIComboBox)this.getBillCardPanel().getBodyItem("x").getComponent();
typeCom.addItems(Object[]obj);
ØConnection
PersistenceManagersessionManager=PersistenceManager.getInstance();
JdbcSessionsession=sessionManager.getJdbcSession();
Connectioncon=session.getConnection();
PreparedStatementstmt=null;
stmt=con.prepareStatement(con,sql);
finally{
stmt.close();
con.close();
sessionManager.release();}
ØConnectException
//启动NC时抛异常
.ConnectException:
Connectionrefused:
connect
原因:
80端口被占用
ØConditionVO
//取查询对话框VO值
ConditionVO[]conVOs=getQueryDLG().getConditionVO();
for(inti=0;i{
if("billdate".equals(conVOs[i].getFieldCode()))
{
billdate=conVOs[i].getValue();
}
elseif()
{
……
}
}
ØCoperatorid
//操作员所对应业务员
cworkpsnid->getColValue(bd_psndoc,pk_psndoc,pk_psnbasdoc,getColValue(sm_userandclerk,pk_psndoc,userid,coperatorid))
ØcreateQueryDLG()
/**
*重写父类方法,取得查询对话框,如有动态显示下拉框和默认值需重写此方法
*/
protectedQueryDLGcreateQueryDLG(){
FundReportDLGdlg=newFundReportDLG();
dlg.setTempletID(
getUIControl()._getPk_corp(),
this.getModuleCode(),
getUIControl()._getOperator(),
null);
//设置默认日期
QueryConditionVO[]qryvos=dlg.getConditionDatas();
for(inti=0;iif(qryvos[i].getFieldCode().equals("billdate")){
qryvos[i].setValue(getClientEnvironment().getDate().toString());
break;
}
}
returndlg;
}
ØCARDPANEL
if(clientUI.isListPanelSelected())//如果是选取的列表界面
clientUI.setCurrentPanel(BillTemplateWrapper.CARDPANEL);
ØControl
controluserpasswords2//运行【用户帐户】
ØCustflag
说明:
0客户
1供应商
2既是客户又是供应商
3既是供应商又是客户
✧D
ØDapCall
nc.ui.pf.pub.DapCall
getPkcorp()//取公司
getOperator()//取操作员
ØdataNotNullValidate
//验证不能为空的字段
getBillCardPanelWrapper().getBillCardPanel().dataNotNullValidate();
ØdataSource
StringdataSource=DataSourceCenter.getInstance().getSourceName();//取当前数据源
ØDate
UFDatedate=ClientEnvironment.getInstance().getDate();//得到登陆日期
selectto_char(last_day(to_date('20100625','yyyymmdd')),'dd')fromdual;//得到每月多少天
ØDateFormat
publicclassDateTest{
publicstaticvoidmain(String[]args){
Stringdates="2007-8-14";//日期时间
DateFormatdf=newSimpleDateFormat("yy-MM-dd");//日期格式化辅助类
Dated;
try{
d=df.parse(dates);//格式化日期
if(d.getDay()==0||d.getDay()==6)//判断是不是双休日
System.out.println("日期:
["+dates+"]是双休日");
else
System.out.println("日期:
["+dates+"]不是双休日");
}catch(ParseExceptione){
e.printStackTrace();
}
}
}
ØdataNotNullValidate
publicvoidonBoSave()throwsException{
getBillCardPanelWrapper().getBillCardPanel().getBillData().dataNotNullValidate();//UAP模板设置必输项
booleanflag=true;
try
{
super.onBoSave();
}
catch(IllegalArgumentExceptione)
{
Logger.info(e);
flag=false;
}
catch(Exceptione)
{
if(flag)
this.getSelfUI().showErrorMessage("【资产名称】已存在,请检查");
return;
}
super.onBoRefresh();
}
ØDecode
DECODE的语法:
DECODE(value,if1,then1,if2,then2,if3,then3,...,else)
表示如果value等于if1时,DECODE函数的结果返回then1,...,如果不等于任何一个if值,则返回else。
通过一些函数或计算替代value,是可以使DECODE函数具备大于、小于或等于功能。
ØDelete
删除废数据的方法如下:
有个表有3个字段ID,PID,NAME;用父子结构来保存树的信息。
其中ID代表节点编号,PID是父节点编号;
由于删除的时候只删除了ID=id的记录,没有把所有PID指向id的数据删除,导致大量无用的数据滞留
DELETEFROMTEST1
WHEREIDIN(SELECTID
FROMTEST1
MINUS
SELECTID
FROMTEST1
STARTWITHPIDISNULL
CONNECTBYPRIORID=PID);
//删除表中重复记录:
DELETEFROMaa1
WHEREROWIDIN(SELECTrd
FROM(SELECTROWIDrd,
ROW_NUMBER()OVER(PARTITIONBYbm,mcORDERBYROWID)rn
FROMa)
WHERErn<>1);
ØdelLine
//表体增删行的操作,注意加上这一句代码
if(event.getKey().equals("vdef2"))
{
for(inti=0;i{
this.getBillCardPanel().getBodyPanel().getTable().selectAll();
this.getBillCardPanel().delLine();
}
for(intj=0;addnum.intValue()>0&&j{
this.getBillCardPanel().addLine();
this.getBillCardPanel().setBodyValueAt(""+(j+1),j,"code");
}
}
ØDesktopPanel
//nc.ui.sm.desktop.DesktopPanel
privatevoidinitialize(){
//============TODOmodifybyjtxr_jieely【环保部项目专用】登陆后自动隐藏左侧树状条
Stringpk_corp=nc.ui.pub.ClientEnvironment.getInstance().getCorporation().getPrimaryKey();
if("1002".equals(pk_corp))//只针对144001公司,主键为1002
{
setLayout(newBorderLayout());
setBackground(newColor(0xC1CCDB));
centerPanel=newJPanel(newBorderLayout());
centerPanel.setOpaque(false);
centerPanel.setBorder(BorderFactory.createEmptyBorder(5,3,3,5));
centerPanel.add(getTabbedPane(),BorderLayout.CENTER);
add(centerPanel,BorderLayout.CENTER);
add(getSysFuncBtnPanel(),BorderLayout.NORTH);
return;
}
//============END2010-08-25
setLayout(newBorderLayout());
setBackground(newColor(0xC1CCDB));
centerPanel=newJPanel(newBorderLayout());
centerPanel.setOpaque(false);
centerPanel.setBorder(BorderFactory.createEmptyBorder(0,3,2,3));
centerPanel.add(getSingleSidZoomPane(),BorderLayout.WEST);
centerPanel.add(getTabbedPane(),BorderLayout.CENTER);
add(centerPanel,BorderLayout.CENTER);
add(getSysFuncBtnPanel(),BorderLayout.NORTH);
}
ØDetailReportBaseEx
//报表UI类中的反注册按钮方法
protectedvoidsetPrivateButtons(){
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
/**
*启用系统运行提示框避免造成假死现象
*/
privatevoidonButton_import()
{
//该操作是耗时操作,所以启用系统运行提示框
RunnablerunImpDoc=newRu