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

本文详细介绍了如何解决AgilePLM从9.2版本升级到9.3.1版本后,用户在使用GanttChart打开Project时无法编辑栏位的问题。通过分析日志发现,某个子类的APIName丢失导致无法提供必要的信息给GanttChart客户端。通过检查数据库数据,发现确实存在某个SubClass的API属性在升级过程中丢失。最终通过修复数据库数据解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

某客户的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属性的确在升级的过程中丢失了。

解决方法

不言而喻。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值