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)