Agile PLM: PPM的甘特图无法编辑Project属性

问题描述

某客户的Agile PLM从早期的9.2版本升级到9.3.1版本之后,发现即使给用户分配了足够的权限,在Project用Gantt Chart打开后,无法编辑任何栏位。

分析

从现象上来看,属于权限分配问题,但即使重新分配权限,问题依旧。因此我们打开Java控制台,重新加载一次甘特图,获取错误如下。

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at com.agile.ui.gantt.activity.table.editor.NameEditor.getTableCellEditorComponent(NameEditor.java:87)
	at javax.swing.JTable.prepareEditor(Unknown Source)
	at javax.swing.JTable.editCellAt(Unknown Source)
	at ilog.views.gantt.swing.IlvJTable.editCellAt(Unknown Source)
	at com.agile.ui.gantt.table.TableAction$MouseInputHandler.adjustFocusAndSelection(TableAction.java:390)
	at com.agile.ui.gantt.table.TableAction$MouseInputHandler.mousePressed(TableAction.java:374)
	at java.awt.AWTEventMulticaster.mousePressed(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)

从表像上来看,NameEditor编辑栏位某个table属性为空,只有一个可能就是Editor的tableInfo无法提供必须的信息给Gantt Chart客户端。因此很有必要检查服务器的日志。

11/03/17 12:14:11 java.lang.NullPointerException
11/03/17 12:14:11  at com.agile.program.service.ActivityService.loadSubclassMap(ActivityService.java:12883)
11/03/17 12:14:11  at com.agile.program.facade.ActivityBean.getSubclassMap(ActivityBean.java:3609)
11/03/17 12:14:11  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
11/03/17 12:14:11  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
11/03/17 12:14:11  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
11/03/17 12:14:11  at java.lang.reflect.Method.invoke(Method.java:585)
11/03/17 12:14:11  at com.evermind.server.ejb.interceptor.joinpoint.EJBJoinPointImpl.invoke(EJBJoinPointImpl.java:35)
11/03/17 12:14:11  at com.evermind.server.ejb.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:119)
11/03/17 12:14:11  at com.evermind.server.ejb.interceptor.system.DMSInterceptor.invoke(DMSInterceptor.java:52)
11/03/17 12:14:11  at com.evermind.server.ejb.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:119)
11/03/17 12:14:11  at com.evermind.server.ejb.interceptor.system.TxRequiredInterceptor.invoke(TxRequiredInterceptor.java:50)
11/03/17 12:14:11  at com.evermind.server.ejb.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:119)
11/03/17 12:14:11  at com.evermind.server.ejb.interceptor.system.DMSInterceptor.invoke(DMSInterceptor.java:52)
11/03/17 12:14:11  at com.evermind.server.ejb.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:119)
11/03/17 12:14:11  at com.evermind.server.ejb.InvocationContextPool.invoke(InvocationContextPool.java:55)
11/03/17 12:14:11  at com.evermind.server.ejb.StatelessSessionEJBObject.OC4J_invokeMethod(StatelessSessionEJBObject.java:87)
11/03/17 12:14:11  at com_agile_program_facade_ActivityBean_RemoteProxy_57b.getSubclassMap(Unknown Source)
11/03/17 12:14:11  at com.agile.program.ipa.CMActivity.getSubclassMap(CMActivity.java:3079)
11/03/17 12:14:11  at com.agile.ui.gantt.session.GanttSessionHandler.getSubclassMap(GanttSessionHandler.java:774)
当服务器日志显示空指针错误,唯一的原因就是数据的问题了。反编译ActivityService类,查看loadSubclassMap的方法体

subclassObj.setSubclassAPIName((String)subclassNode.getProperty(AdminType.ID_APINAME).getData());
很明显,某个subclass的APIName丢失了。由于Service的数据的缓存都来自于数据库的加载,因此我们直接查看数据库数据,检查propertytable即可。很容易就找到了某个SubClass的API属性的确在升级的过程中丢失了。

解决方法

不言而喻。

你可能感兴趣的:(Agile,PLM,Oracle,Agile,PLM)