您的位置:首页 > 其它

NC开发笔记——NC63开发方法总结

2017-10-03 11:09 363 查看
   

1、提示信息输出
 

方法一:写在ToPanel里面的publicvoid
valueChanged(ValueChangedEvent event) {方法中添加如下代码   

ShowStatusBarMsgUtil.showStatusBarMsg("—→ 
★正在使用综合评定登记,祝您使用愉快★",getModel().getContext());

方法二:

//定义提示信息变量

        intsuccess = 0, fail = 0;

        success = success + 1;

        fail = fail + 1;

StringBuffermessage=new StringBuffer();

        message.append("当前选中的数据中\r\n");

        if(success != 0) {

            message.append(" 
有"+success+"条数据转入下一阶段成功\r\n");

        }

 

        if(fail != 0) {

            message.append(" 
有"+fail+"条数据转入下一阶段失败,原因:当前阶段为最后阶段\r\n");

        }

 

        if(success!=0){

            MessageDialog.showHintDlg(null, "提示",message.toString());

        }else{

            MessageDialog.showErrorDlg(null, "提示",message.toString());

        }

    }

 

 

2、Uap63出现的错误

没有授权破解,放入破解包重启。

3、发生两个不同VO对象转换的错误

@Override
    protectedboolean isActionEnable() {
        Object obj =
this.model.getSelectedData();//获取选择数据
        if (!MMValueCheck.isEmpty(obj)) {
            if(obj
instanceof EmployStageVO){ 
//判断选择的obj数据是否属于EmployStageVO对象的数据
                EmployStageVO
vo
=(EmployStageVO)obj;
            }else{
                FlightfiltrateVO
vo = (FlightfiltrateVO)obj;
            }
            returntrue;
        }
        returnfalse;
    }

4、该错误是产品未授权

第一步启动sysconfig
 

把生成的hardkey.req文件考出来登录http://udn.yyuap.com找到产品授权页

把文件上传等待审核,文件发送回来后替换对应的文件

 

5、单据模版、查询模版sql脚本的导出

              单据模版sql脚本的导出

--查询单据模版出对应模块的pk_billtemplet

select* from pub_billtemplet where pk_billtypecode='60Hflight';

--查询出该pk_billtemplet模块下对应的字段

select* from pub_billtemplet_b where pk_billtemplet ='0001ZZ10000000005DOC' anditemkey in ('psnname','pk_post')

--1方法手动改成更新语句

updatepub_billtemplet_b set 
REFTYPE='发布职位,code=N' where pk_billtemplet ='0001ZZ10000000005DOC' anditemkey='pk_post';

updatepub_billtemplet_b set 
REFTYPE=''                where pk_billtemplet='0001ZZ10000000005DOC' and itemkey='psnname';

--2方法先删除对应模块的对应字段之后在插入该字段

deletefrom pub_billtemplet_b where 
pk_billtemplet='0001ZZ10000000005DOC' and itemkey in ('psnname','pk_post');

insertinto pub_billtemplet_b ()values ();

                查询模版sql脚本的导出

6、登陆的时候no token seed  错误

要加入
如果ncsysconfig.bat启动不起来,请直接修改home\ierp\bin\prop.xml配置文件,添加如下内容:

<fdbPath>fdb</fdbbPath>

<tokenSeed>3120edfa482109ea52613b25ca330d66</tokenSeed>

<priviledgedToken>25318f1adafaaabef2ec3e430fe198a3</priviledgedToken>

1,将附件替换uaphome\ant\lib下的同名文件. 

  2,执行ncsysconfig.bat

  3,在系统配置--安全--令牌种子,点重置,保存

    在调试状态下再次重起中间件,登陆成功.
7、发布元数据增加一个页签后报没有定义查询根据pk查找的接口或者接口定义不规范,请检查

有可能是元数据一系列的VO类中有错误,或者该节点的表中缺少对应字段
8、数据会回写后台操作

Voupdate



PersistenceManager



管理连接会话的生命周期,并提供了对单表VO操作的常用实现



可以传递构造参数选择不同的数据源



JdbcSession



对JDBC的API封装和简化



SQLParameter



封装执行SQL的参数



ResultSetProcessor



结果集处理回调接口,封装结果集处理



DbException



封装不同数据库的异常,和统一处理不同数据库的Error Code



BaseDAO / IUAPQueryBS / IVOPersistence



管理连接会话的生命周期,提供了对单表VO操作的常用实现

 
8、java.lang.ClassNotFoundException: nc.md.model.MetaDataException
    atjava.net.URLClassLoader$1.run(URLClassLoader.java:200)
    atjava.security.AccessController.doPrivileged(Native Method)
    atjava.net.URLClassLoader.findClass(URLClassLoader.java:188)
    atjava.lang.ClassLoader.loadClass(ClassLoader.java:307)
    atjava.lang.ClassLoader.loadClass(ClassLoader.java:252)
    atjava.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
    atjava.lang.Class.getDeclaredMethods0(Native Method)
    atjava.lang.Class.privateGetDeclaredMethods(Class.java:2427)
    atjava.lang.Class.getMethod0(Class.java:2670)
    atjava.lang.Class.getMethod(Class.java:1603)
    atncmdp.project.MDPComponentsFactory.initProps(MDPComponentsFactory.java:159)
    atncmdp.project.MDPComponentsFactory.createCompProjects(MDPComponentsFactory.java:144)
    atncmdp.project.MDPComponentsFactory.getProjectData(MDPComponentsFactory.java:62)
    atncmdp.util.ProjectUtil.initTreeViewer(ProjectUtil.java:426)
    atncmdp.project.MDPExplorerTreeView.createPartControl(MDPExplorerTreeView.java:297)
    atorg.eclipse.ui.internal.ViewReference.createPartHelper(ViewReference.java:375)
    atorg.eclipse.ui.internal.ViewReference.createPart(ViewReference.java:229)
    atorg.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595)
    atorg.eclipse.ui.internal.WorkbenchPage$ActivationList.setActive(WorkbenchPage.java:4317)
    atorg.eclipse.ui.internal.WorkbenchPage$18.runWithException(WorkbenchPage.java:3359)
    atorg.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31)
    atorg.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
    atorg.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
    atorg.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4140)
    atorg.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3757)
    atorg.eclipse.ui.application.WorkbenchAdvisor.openWindows(WorkbenchAdvisor.java:803)
    atorg.eclipse.ui.internal.Workbench$33.runWithException(Workbench.java:1600)
    atorg.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31)
    atorg.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
    atorg.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
    atorg.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4140)
    atorg.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3757)
    atorg.eclipse.ui.internal.Workbench.runUI(Workbench.java:2609)
    atorg.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499)
    atorg.eclipse.ui.internal.Workbench$7.run(Workbench.java:679)
    atorg.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
    atorg.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668)
    atorg.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
    atorg.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123)
    atorg.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
    atorg.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
    atorg.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
    atorg.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
    atorg.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
    atsun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 

 

 

 

 

 

9、从网页端登入NC系统选项为空

地址改成:
 
 

 

10java.lang.UnsupportedClassVersionError:nc/vo/pmpub/project/ProjectHeadVO

在对应的代码地方加上版本号

 

 

NC二开经验总结

公式相关

1.显示公式没执行

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

 

Handler的onBoCard执行:getBillCardPanel().execHeadLoadFormulas();

 

Controller的isLoadCardFormula返回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.xml,Sysconfig下才能找到该模块
 
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.下拉字段
数据库里保存的是 0、1、2、3.。。。所以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里找到相应的模块,将public、private、client下的代码导出的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)
 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: