Maximo启动中心通常是我们登陆系统后通常看到的第一个界面
用户进入系统就可以看到感兴趣的消息,关心的指标,快速打开常用的程序等。这非常像操作系统的桌面环境,当我们登陆操作系统后,图形化桌面展示在眼前,有开始菜单、快速启动、任务栏、系统托盘、小窗口部件等,当然,这些都是可以根据用户需求进行灵活配置的。
同时,启动中心配置的功能就是固定的几种,扩展性差。随着业务和技术的发展,我们需要在启动中心展示更多信息,比如说图形化BI指标等,这些都不在Maximo的默认配置中,我们需要研究Maximo的技术实现,对启动中心进行改造以满足更加灵活的展示需求。
经过对代码的追踪,发现就像其他的Maximo应用一样,启动中心也可以看作是一个Maximo应用,是登陆Maximo后系统首先加载的特殊应用;由于启动中心的显示内容和用户、用户组相关的,因此启动中心会获取相关用户信息并加载该用户所属的布局模版;此时加载的布局模版是xml格式的,这时通过启动中心管理服务将xml转换为对象,实例化小窗口部件;最后,小窗口部件读取配置数据,渲染jsp页面,将内容显示到启动中心页面。
改造的基本内容如下:
创建一个自定义的PortletBean和展示页面,如下所示:
try { if(sessionContext.getCurrentApp().get(portletId) == null) { portletBean = new DBCntCfgPortletBean(); portletBean.setId(portletId); portletBean.setupBean(sessionContext,"DBCNTCFG"); portletBean.setPortletInfo(currentPortlet); sessionContext.getCurrentApp().put(portletId,portletBean); } else { portletBean = (DBCntCfgPortletBean)sessionContext.getCurrentApp().get(portletId); } dbContent = portletBean.getDBContent(); }catch(Throwable e ) { System.out.println("Error in the Favorite Applications Portlet Display"); e.printStackTrace(); }
从数据库加载数据
if (((String)localObject3).equalsIgnoreCase("dbcntcfg")) { localElement1 = localDocument.createElement("dbcnt"); setAttributes(portletAttributes, localLayoutRemote, localElement1); localMboSetRemote1 = localLayoutRemote.getMboSet("DBCNTCFG"); addChildren(localMboSetRemote1, localElement2, localElement1, "attr", new String[] { "miscid" }); }
从数据库加载数据
localNodeList2 = localElement1.getElementsByTagName("dbcnt"); for (int j = 0; j < localNodeList2.getLength(); ++j) { localElement2 = (Element)localNodeList2.item(j); localLayoutRemote = (LayoutRemote)localLayoutSetRemote.add(); setValues(localLayoutRemote, localElement2); localNodeList1 = localElement2.getElementsByTagName("attr"); for (int f = 0; f < localNodeList1.getLength(); ++f) { localElement3 = (Element)localNodeList1.item(f); localObject1 = (DBCntCfgMboSetRemote)localLayoutRemote.getMboSet("DBCNTCFG"); localObject2 = (DBCntCfgMboRemote)((DBCntCfgMboSetRemote)localObject1).add(); setValues((MboRemote)localObject2, localElement3); ((MboRemote)localObject2).getLong("miscid"); } }