Happy3w

NCV65开发成长记1

2016.04.29
环境:UAP Studio V65开发+NCHome6.5 语言:Java 开发第一个月遇到的各种问题,全实战,所有问题亲身经历。谨以此献给奋斗中的小鲜肉。 1、元数据设计时,要填写扩展标签smart(且必须为全小写)才能生成元数据动态属性的java代码字段。(2016/3/18) 堵塞:半天 解决:元数据文件设置“扩展标签”为smart(一定全小写) 过程:没人说扩展标识smart是做什么用的,凭借以前经验觉得好像做这个的,跟同事确认也没有明确答案,看了看同类元数据,来回试了试开始用的大写始终不管用,后来对比发现改成小写就行了。 2、功能节点默认模板,分配模板时节点标识字段不能填写值,否则无法加载默认模板。(2016/3/18) 堵塞:大半天 解决:默认模板分配时,节点标识保持系统默认值,什么也别写。 过程:看见节点标识字段根据个人习惯觉得应该要填写个值,于是写上"default",打开节点时单据模板没问题,但是查询模板始终加载不错来,看debug信息提示“当前登录用户没有分配查询模板”,于是一直以为是不是要特别分配模板给这个用户,但是在集团模板、业务单元模板分配后,发现还是一样的问题。于是就跟踪了sql语句,发现了查询过程中使用的条件节点标识列用"~"作为条件,顿时无语。 3、新增按钮无法打开卡片态界面报“未知错误”(2016/3/18) 原因:AddHandler事件配置项注释掉了,加载界面时必须用它,因此加上就好了。同时卡片态没有问题,其它几个表体表尾handler也需加上。 解决:添加handler,即便实现方法啥也没写. 4、修改了billFormEditor后,context is not defined错误(2016/3/18) 原因:因为billFormEditor属性名配置错误,没有加载成功导致。 解决:打开billFormEditor的Java类看看属性名复制过来。 5、快速查询区没有值(2016/3/18) 解决:在查询模板中勾选默认显示 6、添加自定义按钮导致界面无法加载工具栏 原因:自定义按钮有问题 解决:自定义按钮要集成NCAction,同时要实现doAction(),isActionEnable(),getModel()三个方法。 7、查询时报错java.lang.reflect.InvocationTargetException SecurityConfiguration 描述: 报错位:ESAPI.encoder().encodeForSQL(UAPESAPI.NC_DB_CODEC, inputString); 错误提示:java.lang.reflect.InvocationTargetException SecurityConfiguration class (org.owasp.esapi.reference.DefaultSecurityConfiguration) CTOR threw exception. 解决方案:加入vm参数jre“-Dorg.owasp.esapi.resources=${FIELD_NC_HOME}/ierp/bin/esapi” 具体位置:eclipse->references->installed jre->选中运行jre编辑vm 8、点击自定义按钮(发布按钮)没有数据 答: BizObjPublishBP中增加代码 for (AggBizObjVO vo : vos) { vo.getParentVO().setStatus(VOStatus.UPDATED); } 当前界面发布后没有数据,是因为BizObjMaintainImpl.publish方法中 retBills=transTool.getBillForToClient(retBills); 这个方法将数据过滤了,因此需要设置状态updated以免被过滤。 9、做编码字段编辑态不可改,新增态可改。 答:在EditAction中重载doAction方法中加入如下代码 BillItem txtCode = cardPanel.getHeadItem(CODE);(获取字段控件) txtCode.setEdit(true);(设置编辑态可见,这个不影响控件可编辑性。这名字容易误导,被它还惨了。) txtCode.setEnabled(false);(设置可编辑,是否可编辑要设置这个。) 10、如何开发自定义参照,为什么元数据引用时出不来参照名。 答: 1)自定义一个RefModel继承自AbstractRefModel。 2)手动在bd_refinfo中插入一条数据refclass对应自定义的refmodel全路径。 3)在refmodel的vo元数据bmf参照中设置参照。(一般文档里都不说这一步,导致元数据引用时出不来参照。) 4)其他元数据ref时就可以出来来参照了。 10、元数据类访问类型用“AggVO”还是“POJO”还是其他的 答:建议AggVO,因为前后台有很多工具都是针对AggVO的,比如差异VO,还有一些校验工具,用其他的得自己写。 11、元数据设置了扩展标识“URC”为什么编码唯一性校验不管用。 答:光设置“URC”不行,得有以下几步: 1)元数据类扩展标识、字段扩展标识都设置“URC” 2)发布元数据后设置管理员身份登录Home到“基本档案管控模式注册” 3)到“基础数据管控模式”添加唯一性规则 4)后台代码调用BDUniqueRuleValidate执行验证,可以用ValidationFrameworkUtil创建多个服务。 12、如何在自己界面上选择数据源? 答:参照riaorg下面的“数据源” 13、更新档案状态并新建实体表,发现建表出错档案却更新成功了,事务没有回滚。 答:Session或者Dao执行时,抛出了异常,但却没有导致事务回滚。后来改用了DDLExecutorUtil.ddlExecute执行能正常回滚事务。至于为什么,还不知道? 14、异常消息被自动清除了 答:SinglePublishAction.showFailedInfo方法中的ShowStatusBarMsgUtil.showErrorMsgWithClear自动清理了消息。 15、如何开发弹出对话框 16、spring注入时对boolean属性要特别注意,其property name不能带is。 答:字段protected boolean isShowBottomPanel ,对应的set方法为setShowBottomPanel(boolean isShowBottomPanel)注入spring时不能<property name="isShowBottomPanel" value="true"/> 而应该写成<property name="ShowBottomPanel" value="true"/>