NC二开经验总结

公式相关

1.显示公式没执行

列表界面显示,卡片界面不显示:

 

HandleronBoCard执行:getBillCardPanel().execHeadLoadFormulas();

 

ControllerisLoadCardFormula返回true

 

另外,字段录入长度不够时,列表显示,卡片不显示

 

2.带出数据执行公式

表头显示公式,执行getBillCardPanel().execHeadLoadFormulas();

 

表体显示公式,执行getBillCardPanel().getBillModel().execLoadFormula();

 

补充:上面是最简单的方法,其它自己测试。比如,指定表体行执行公式:

 

// 下面的方法必须设置编辑公式– for循环效果等于上面的方法

 

    getBillCardPanel().execBodyFormula(i,”pk_supdoc”);

 

UI

1.列表界面设置可多选

public ClientUI(){

 

         super();

 

        getBillListPanel().setMultiSelect(true);

 

}

 

2.查询条件

UIDialog dlg = getQueryUI();

 

if(dlg.showModal() != 1)return;

 

INormalQuery query =(INormalQuery)dlg;

 

String sql =query.getWhereSql();

 

3.隐藏表体字段

BillData bs =getBillCardPanel().getBillData();

 

BillItem[] items =bs.getBillModel().getBodyItems();

 

for (int i = 0; i <items.length; i++) {

 

    items[i].setShow(false);

 

}

 

getBillCardPanel().setBillData(bs);// 必须有这一行

 

4.隐藏表头字段

方法一:

 

billCardPanel.getHeadItem(“hzdy42”).getComponent().setVisible(false);

 

billCardPanel.getHeadItem(“hzdy42”).getCaptionLabel().setText(“”);

 

方法二:

 

billCardPanel.hideHeadItem(newString[]{“hzdy38″,”hzdy39″,”hzdy40″,”hzdy41″,”hzdy42”});

 

5.AggVO显示到单据界面上

billCardPanel.setBillValueVO(aggvo);

 

系统变量相关

1.单据号

前置任务:配置单据号规则

 

创建单据号:new HYPubBO().getBillNo(单据类型组织, null, null);

 

或者:getVbillCode(单据类型,组织);

 

new BillcodeGenerater().getBillCode (单据类型组织,null,null);

 

2.主键

KeyGenerator.getInstance().getKey(20);

 

3.获取nchome路径

RuntimeEnv.getInstance().getNCHome();

 

4.系统变量

InvocationInfoProxy

 

WorkbenchEnvironment

 

ClientEnvironment

 

5.设置客户端背景色

F:\NC63\AceHome\ierp\sf\themeconf.xml

 

模块相关

1.添加模块

META-INF里面必须有module.xmlSysconfig下才能找到该模块

 

2.单据类型没有定义所属模块

产生这个异常的原因是:单据类型没在添加在项目模块里,而是在自己的模块里,在单据类型表里:bd_billtype,把单据的systemcode改为项目模块即可

 

单据动作相关

1.动作注册

pub_billaction表里复制其它单据的动作,修改单据类型、ID即可

 

2.动作代码路径

modules -> 单据类型所在模块 -> META-INF -> var -> source

 

3.按钮显示

只显示isEnabled()==true的按钮:

 

int[] btnAry = ((LController)getUIManageController()).getCardButtonAry();

 

for (int i = 0; i <btnAry.length; i++) {        getBillUI().getButtonManager().getButton(btnAry[i]).setVisible(getBillUI().getButtonManager().getButton(btnAry[i]).isEnabled());

 

}

 

单据模版相关

1.下拉字段

数据库里保存的是 0123.。。。所以vo里对应Integer

 

getBillCardWrapper().initHeadComboBox(“vname”,new String[]{“A”,”B”,”C”}, true);

 

2.日期型字段

单据模板是日期型时,vo要为UFDate

 

3.日期型默认取值

                      

 

4.查询所有的默认查询条件

 

 

5.调用模板

 

 

数据库操作相关

1. HYPubBO_Client

findColValue方法只能查询字符型字段(因为这个方法内嵌了String强转)

 

2.JdbcSession

JdbcSession session = null;

 

session = PersistenceManager.getInstance().getJdbcSession();

 

session =JdbcSessionUtil.createJdbcSession();

 

密码相关

1.root密码修改

 

 

补丁相关

1.如何打补丁

modules里找到相应的模块,将publicprivateclient下的代码导出的jar包放到模块的lib文件夹下,开发工具重新加载下即可(怎么重新加载?重启,再重启,直到开发工具能加载到刚导入的jar包里的类)

 

运行相关

1.启动中间件报错

 

 

2.startup.bat启动服务卡着不动

 

 

元数据相关

1.单据日期

 

 

配置文件相关

1.配置文件变量名写错

 

 

节点相关

1.打开其它节点

直接点开指定的节点,没有数据:SFClientUtil.openFrame(“ZZ0102”);// 下面的还没测试

 

 

 

参照相关

1.表头参照多选取值

((UIRefPane)billCardPanel.getHeadItem(“hzdy41”).getComponent()).getRefModel().getPkValues();

 

2.动态指定参照类

((UIRefPane)(getBillCardPanelWrapper().getBillCardPanel().getHeadItem(“字段“).getComponent())).setRefModel(参照类.class);

 

3.设置参照是否支持多选

((UIRefPane)editor.getBillCardPanel().getHeadItem(“vpsn”).getComponent()).setMultiSelectedEnabled(true);

 

4. 设置参照只显示一级

 

 

5.参照字段实现手输

 

 

6.如何知道一个字段的参照类型:

Object obj =((UIRefPane)getBillCardPanel().getHeadItem(“”).getComponent()).getRefModel();

 

Syttem.out.println(obj);

 

下拉相关

1. 下拉去掉空白选项

 

 

预警

1.配置

 

 

其它

1.命名规则

 

 

2.表空间的概念

 

 

3.获取用户有权限的组织

 

 

实用方法

1.获取表体所有页签名

getBillCardPanel().getBillData().getBodyTableCodes();

 

2.获取表体指定行的vo

getBillModel(“页签名“).getBodyValueRowVO(rownum, className);

 

3.单据状态栏打印消息

ShowStatusBarMsgUtil.showStatusBarMsg

 

4.获取ts

CurTime.getCurrentTimeStampString();

 

5.创建主键

newSequenceGenerator().generate(pk_corp,num);

 

6. 保留小数点后2位,并“四舍五入”

new UFDouble().setScale(2,UFDouble.ROUND_HALF_UP);

 

自定义查询方法

public voidqueryBodyData(String strWhere) throws Exception {

  doBodyQuery(strWhere != null ? strWhere :””);

 }

自定义查询方法的填充

protected voiddoBodyQuery(String strWhere) throws Exception,

   ClassNotFoundException,InstantiationException,

   IllegalAccessException {

  SuperVO queryVos[] =getBusiDelegator().queryByCondition(

   Class.forName(getUIController().getBillVoName()[2]),

    strWhere != null ? strWhere :””);

  getBufferData().clear();

  AggregatedValueObject vo =(AggregatedValueObject) Class.forName(

   getUIController().getBillVoName()[0]).newInstance();

  vo.setChildrenVO(queryVos);

  getBufferData().addVOToBuffer(vo);

  updateBuffer();

 }

自定义刷新方法¨

 @Override

 protected void onBoRefresh() throws Exception{

  queryBodyData(null);

 }

自定义删除方法

@Override

 protected void onBoDelete() throws Exception {

  //获得的选中的行数

  introw=getBillCardPanelWrapper().getBillCardPanel().getBillTable().getSelectedRow();

  System.out.println(“选中的行数:“+row);

  if(row==-1){//判断是否选中行数

   MessageDialog.showErrorDlg(null, “错误“, “必须选中一行信息,才能进行删除操作“);

   return;

  }

 if(MessageDialog.showYesNoDlg(getBillUI(),”是否删除“,”确定要删除!”)!=UIDialog.ID_YES){//是否确认删除

   return;

  }else{

   System.out.println(“主键ID“+getBillCardPanelWrapper().getBillCardPanel().getBillModel().getValueAt(row,”pk_cpkcquzd”));

   //获得自定义的接口

   McKcQd_ManageItfmcKcQd_ManageItf=NCLocator.getInstance().lookup(McKcQd_ManageItf.class);

   StringBuffer sql=newStringBuffer(“”);

   sql.append(“update cp_kcquzd set dr=1wherepk_cpkcquzd='”+getBillCardPanelWrapper().getBillCardPanel().getBillModel().getValueAt(row,”pk_cpkcquzd”)+”‘”);

  mcKcQd_ManageItf.executeUpdateBySql(sql.toString());

   //执行删除后刷新

   queryBodyData(null);

  }

 }

 

7、插入数据

new HYPubBO().insertAry

 

8、生成编码的方法

getbillcode(billtype,pk_group,pk_org,null)

未经允许不得转载:淘淘源码吧 » NC二开经验总结