天天看点

Maximo开发实施经验

1、开发环境搭建:数据库字符集要求是utf8;

 每个开发人员用各自的开发库与中间件,项目组有一个公共的项目库;

 每个成员开发完成后,把个性化的内容迁移到项目库;

 项目测试人员则连接项目库测试;

 不允许每个开发人员自己开一个中间件,连接同一个数据库。

2、在个性化开发时,如果是新建的表就加上c_的前缀,如果是在原产品表中增加字段,也加c_的前缀。

3、“人员组”就是一群具有相似工作职责、权限等级和安全许可的个人。这一功能对于时效性很强的记录非常有用,

 因为 Maximo 能够根据日历和班次确定将记录发送给组内的哪个成员。主要用于工作分配,工作流人员分配。

 人员组与人员匹配,权限组与用户匹配,其实他们之间可以完全对应。在国内软件中基本上只有权限组与用户,

 因为给人员分配工作后,如果没有账户登录操作工作则意义不大了。在国外则不一样,他们重要的工作都是发送邮件,

 每个人员不一定需要有操作账户,能收到邮件就可以了,所以可以建立人员组与人。还有一点,权限组的复杂程度比

 人员组的复杂程度高很多,所以两者分离能降低工作流的复杂度。

4、中文翻译部分不全,大部分在这几个表中maxlabels\maxattribute\sigoption

5、如果数据处于配置状态,则中间件将无法连接数据库,不能启动系统。通过下面的语句:

 select * from MAXVARS where varname='CONFIGURING' for update

 修改VARVALUE字段的值为0。

6、创建DBLINK:create database link ora10g_lnk connect to maximo_zh identified by maxzh using 'ora10g';

 create database link "orcl57" connect to maximo identified by maximo using '10.100.2.57:1521/erppmdb';

7、检查语言翻译是否正确:

 --检查maxlabels表

 create table a_id as

 (select a.maxlabelsid, a.value, b.title from [email protected]_lnk a,

 (select m.app, m.id, m.value, lm.value as title from maxlabels m, l_maxlabels lm

 where m.maxlabelsid = lm.ownerid) b

 where a.app = b.app and a.id = b.id and a.value <> b.title and a.value <= 'z' )

 update [email protected]_lnk a set a.value =

 (select b.title from a_id b where a.maxlabelsid = b.maxlabelsid)

 where a.maxlabelsid in (select maxlabelsid from a_id)

 --检查maxattribute表

 create table a_attr as

 select a.maxattributeid, a.objectname, a.attributename, b.zh_title, b.zh_remarks from [email protected]_lnk a,

 (select m.objectname, m.attributename, m.title, lm.title as zh_title, lm.remarks as zh_remarks

 from maxattribute m, l_maxattribute lm

 where m.maxattributeid = lm.ownerid) b

 where a.objectname = b.objectname and a.attributename = b.attributename

 and a.title <> b.zh_title and a.title <= 'z'

 update [email protected]_lnk a set

 a.title = (select b.zh_title from a_attr b where b.maxattributeid = a.maxattributeid),

 a.remarks = (select b.zh_remarks from a_attr b where b.maxattributeid = a.maxattributeid)

 where a.maxattributeid in (select maxattributeid from a_attr)

 --检查sigoption表

 create table a_iid as

 (select a.sigoptionid, a.description, b.title from [email protected]_lnk a,

 (select m.app, m.optionname, m.description, lm.description as title from sigoption m, l_sigoption lm

 where m.sigoptionid = lm.ownerid) b

 where a.app = b.app and a.optionname = b.optionname and a.description <> b.title and a.description <= 'z' )

 update [email protected]_lnk a set a.description =

 (select b.title from a_iid b where a.sigoptionid = b.sigoptionid)

 where a.sigoptionid in (select sigoptionid from a_iid)

8、“计量器”设置中的“读数类型”字段值有:累计使用、增量使用,连续计量器类型,比如每次读数为100,当前值总值是1200,

 如果是累计使用,则下次读数是:1300,如果是增量使用,则下次读数是:100。

9、常用PORTLET程序有:快速插入、收藏的应用程序、收件箱/任务、公告牌、结果集,在给权限组授权启动中心时,

 同时要授予相应的应用程序权限。

11、上次LIBRARY中的标签都变成英文了,应该是因为导入LIBRARY.xml文件造成的,如果产品安装的基础语言版本是中文版,应该导入到

 系统后,maxlables表中library相关的标签不会变成英文了。

 如果产品安装时选择的基础语言版本是英文版,则那些产品的maxpresentation中的页面设计文件都是英文的,就算把语言包强制转换

 为中文,下次导入页面设计文件时,相关的标签还是英文的。

12、ORA10g回闪操作查询:

 select * from c_inspectitem as of timestamp(to_timestamp('2010-07-11 13:55', 'yyyy-mm-dd hh24:mi'))

13、由于原项目集ID使用中文字符,所以需要修改项目集的ID值,通过下面的语句可以修改了,项目集的ID一定要是大写。

 select * from SETS for update

 select * from maxattribute where

 attributename like '%SETID%' and attributename not like '%ASSETID'

 and attributename = 'COMPANYSETID' 'ITEMSETID'

 select 'update '||objectname||' set '||attributename||' = ''defcom'';' from maxattribute

 where attributename like '%SETID%' and attributename not like '%ASSETID'

 and attributename = 'COMPANYSETID'

 select * from AUTOKEY for update

14、修改标签表中的英文标签,在本机的maximo_en/[email protected]库中

 drop table a_aaa;

 create table a_aaa as

 select * from [email protected]_lnk a

 where a.value < 'z' and a.value in (select b.value_en from view_aa_maxlabels b);

 drop table a_bbb;

 create table a_bbb as

 select distinct value_en, value from view_aa_maxlabels where value_en in

 (select value from a_aaa);

 select * from a_bbb order by value for update;

 update [email protected]_lnk a set a.value =

 (select b.value from a_bbb b where a.value = b.value_en)

 where a.value < 'z' and a.value in (select b.value_en from a_bbb b)

15、新增记录保存时,如果主键值为空、或者ROWSTAMP字段值为空,可能是该表对应的触发器没有执行或失效了,开启一下触发器就可以了;

 Maximo产品中每个表都有一个触发器,大多都是处理这两个字段的值。

16、把产品中的资产名称改名为设备,资产编号不用修改。

 select replace(value, '资产', '设备') from maxlabels where value like '%资产%' and value not like '%资产编号%'

 update maxlabels set value = replace(value, '资产', '设备')

 where value like '%资产%' and value not like '%资产编号%';

 update maxlabels set value = replace(value, '启动中心', '首页') where value like '%启动中心%';

 update maxlabels set value = '菜单' where value like '转到' and id like '%gotolink%';

 update maxlabels set value = '设置' where value like '%概要信息%' and id like '%profilelink%';

 select * from maxattribute where title like '%资产%' and title not like '%资产编号%'

 update maxattribute set title = replace(title, '资产', '设备')

 where title like '%资产%' and title not like '%资产编号%'

 select * from maxmessages where value like '%资产%' and value not like '%资产编号%'

 update maxmessages set value = replace(value, '资产', '设备')

 where value like '%资产%' and value not like '%资产编号%'

17、把两个域值表的长度改为30,控制字段的显示长度,涉及的表与字段是:alndomain.description\synonymdomain.description

 --把时间域值描述截断只留29个字符

 update synonymdomain set description = substr(description, 0, 29) where domainid = 'TIMEZONE'

 --查看下面两个域值的最长长度都小于30

 select max(length(description)) from alndomain

 select max(length(description)) from synonymdomain where domainid <> 'TIMEZONE'

 --下面相关的字段长度要调整

   select objectname, attributename, length from maxattribute where

   ((sameasobject in ('SYNONYMDOMAIN', 'ALNDOMAIN') and sameasattribute= 'DESCRIPTION') or

   (objectname in ('ALNDOMAIN', 'SYNONYMDOMAIN', 'L_ALNDOMAIN', 'L_SYNONYMDOMAIN') and attributename = 'DESCRIPTION'))

   select objectname, attributename, length from maxattributecfg where

   ((sameasobject in ('SYNONYMDOMAIN', 'ALNDOMAIN') and sameasattribute= 'DESCRIPTION') or

   (objectname in ('ALNDOMAIN', 'SYNONYMDOMAIN', 'L_ALNDOMAIN', 'L_SYNONYMDOMAIN') and attributename = 'DESCRIPTION'))

18、如果后台报java.lang.OutOfMemoryError: PermGen space错误,是因为PermSize内存溢出造成的,需要调整JVM虚拟机参数:

 -Xms512m -Xmx1024m -XX:MaxPermSize=512m

 Weblogic的虚拟机参数在startWebLogic.cmd文件中调整。

 JAVA_OPTS="-server -Xms800m -Xmx800m  -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "

19、MAXIMO 日期数据显示格式设置为yyyy-MM-dd HH:mm的步骤:

 Maximo V6修改方法:

  修改setting.properties文件,或setting_zh.properties,添加:

  DISPLAYDATE=yyyy-MM-dd

  DISPLAYTIME=HH:mm

  PARSETIME=HH:mm

 Maximo V7修改方法:

 1、在“系统属性”功能中查找:setting.DISPLAYTIME_ZH、setting.DISPLAYDATE_ZH两个参数,

  一般默认会有第一个参数,如果没有则需要新建参数,如新建setting.DISPLAYDATE_ZH参数填写值为:

  属性名:setting.DISPLAYDATE_ZH

  描述:显示日期格式(ZH)

  全局值:yyyy-MM-dd

  仅全局?:1

  允许的联机变更?:1

  实时刷新?:1

  安全性级别:PUBLIC

 2、修改为setting.DISPLAYTIME_ZH的全局值为:HH:mm,修改setting.DISPLAYDATE_ZH的全局值为:yyyy-MM-dd

 3、设置完后点击保存,然后勾选当前设置的参数,点击操作“实时刷新”,点击确定就行了,不用重启应用程序。

20、MAXIMO首页生成图形的功能相关脚本:

 <iframe scrolling="no" height="225" frame

  src="http://10.100.2.58:7001/maximo/servlet/chartservlet?chartname=portletchart_1666&amp;uisessionid=1279165635018" id="graphframe_1666">

 </iframe>

 <img usemap="#1602753024" src="http://10.100.2.58:7001/maximo/servlet/chartservlet?image=1602753024">

  <map name="1602753024">

 <area οnmοuseοut="return unDisplayActiveLabel()" οnmοuseοver="return displayActiveLabel('1602753024','\u8FD0\u884C\u72B6\u6001\: \u0057\u0048\u0059\u0058 \u0028\u0031\u0039\u0029 \u002D \u0031\u0030\u0030\u0025')" target="_top" href="http://10.100.2.58:7001/maximo/ui/?event=showrsdata&amp;targetid=scportlets_pane1_resultsetportlet_1666&amp;value=1&amp;loadonmainpage=true&amp;uisessionid=1279165635018" coords="147,83,168,137,181,134,193,131,204,127,214,122,223,116,230,110,236,103,240,95,242,88,242,80,240,73,237,65,232,58,225,51,216,45,207,40,196,36,184,32,172,30,159,28,145,28,132,29,119,30,107,33,95,37,85,41,75,47,67,53,61,60,56,67,53,74,52,82,53,90,55,97,60,104,66,111,73,118,82,123,93,128,104,132,116,135,129,137,142,138,155,138,168,137,147,83,147,83" shape="POLY"></map>     

 是使用NetCharts Pro工具包开发的KPI图形生成工具,请查看psdi.webclient.servlet.ChartServlet;类代码。

21、Maximo产品在中文Window2003操作系统中安装过程中,总是报连接服务器出错,没有授权类的错误。

 是因为机器名原因造成的,如果把机器名改名为server.machine.my类似域名的方式就可以安装了。

22、由粗放管理向精细化管理、由传统管理向信息化管理的转变,做好确保安全、推进发展、维护稳定的三篇文章

24、GL是 GENERAL Ledger 的简写 即总帐,GL科目指总账科目。

25、物资库存初始化功能:在”库存项目“功能中,选择操作”将项目添加到仓库“,就可以录入初始化库存了。

26、Maximo的文本搜索问题:如果设备描述用”污油“可用不能搜索到设备,但用”污油泵“却能准确搜索到设备,

 这是因为设备描述字段DESCRIPTION采用”TEXT“文本搜索方式,数据库中采用长文本,按”单词“的方式建立的索引,

 所以能查询到”污油泵“,不能查询到”污油“的设备,如果采用通配符的方式查询数据,则可以查询到”WILDCARD“。

 解决办法:

  1、在数据库配置中找到描述属性字段,把搜索类型改为”WILDCARD“,然后执行数据库配置;

  2、在数据库MAXATTRIBUTECFG中,直接修改searchtype字段值为”WILDCARD“,还有状态标志值要修改,然后执行数据库配置;

17、Maximo附件是通过一个应用程序打开的,在中间件控制台中有一个DOCLINKS应用程序需要启动,否则不能打开附件文件。

18、后台迁移数据属性配置信息,经常是自动编码列的标志“&AUTOKEY&”更新不了,可以采用下面的语句更新:

 select * from maxattribute where defaultvalue = '&' for update

 select * from maxattributecfg where defaultvalue = '&' for update

19、后台迁移应用程序配置信息经常出现没有迁移autokey表中的数据,需要把它们的数据也迁移过去。

 后台迁移应用程序配置信息后相关系统参数也要迁移过去,可以通过下面的语句查看有哪些参数不一致:

 select a.* from maxvars a, [email protected] b where a.varname = b.varname and a.siteid = b.siteid and

 nvl(a.varvalue, ' ') <> nvl(b.varvalue, ' ')

20、maxlabels表经常出现一些英文标签,使用下面的语句更新:

 update maxlabels set value = '转到 %1' where value = 'Go To %1';

 update maxlabels set value = '标记要删除的行' where value = 'Mark Row for Delete';

 update maxlabels set value = '详细信息' where value = 'Show Detail';

 update maxlabels c set c.value = (select d.value from a_maxlabels d

 where c.app = d.app and c.id = d.id and c.property = d.property)

 where c.maxlabelsid in (

 select a.maxlabelsid

 from maxlabels a, a_maxlabels b where a.app = b.app and a.id = b.id and a.property = b.property

 and a.value <> b.value and a.value < 'z' and a.value is not null)

21、修改标签名称中的英文程序名:

 update sigoption a set a.description = replace(a.description, a.app,

 '记录') where

 a.description like '%'||a.app||'%' and a.optionname in ('SAVE', 'READ', 'DUPLICATE', 'DELETE', 'PREVIOUS', 'NEXT', 'INSERT')

22、删除一周前的巡检审批记录:

 delete from wfinstance where processname = 'INSPECT' and starttime < (sysdate-7);

 delete from wfassignment where wfid in

 (select wfid from wfinstance where processname = 'INSPECT' and starttime < (sysdate-7));

 delete from wftransaction where wfid in

 (select wfid from wfinstance where processname = 'INSPECT' and starttime < (sysdate-7));

 delete from wfcallstack where wfid in

 (select wfid from wfinstance where processname = 'INSPECT' and starttime < (sysdate-7));

23、修改首页内容

 update maxmessages set value = replace(value, '启动中心', '首页') where value like '%启动中心%';

 update rsconfig set display = 0 where description in ('泵型号','压缩机型号') and display = 1;

 update inbxconfig set display = 0 where description in ('到期日','优先级') and display = 1;

 update layout set description = '新建工作' where description = '快速新增栏';

 commit;

 update maxmenu set headerdescription = replace(headerdescription, '搜索', '查询') where headerdescription like '%搜索%'

 update sigoption set description = replace(description, '过滤器', '查询器') where description like '%过滤器%'

 update sigoption set description = replace(description, '搜索', '查询') where description like '%搜索%'

 update maxmessages set value = replace(value, '过滤器', '查询器') where value like '%过滤器%'

24、查询在数据库中直接创建的数据表

 select * from  all_tables where owner = 'MAXIMO' and table_name not in

 (select objectname from maxobject)

25、在应用程序设计时,缺省第一次生成页面后,在MAIN标签页面上不能直接拖放"部分列",需要先拖放“部分行”之后才能把“部分列”放在行上。

26、自定义操作类需要实现psdi.common.action.ActionCustomClass.applyCustomAction()方法,该方法是由

 psdi.common.action.Action.executeAction()方法调用,执行完后会自动执行参数MboRemote target.save()方法。

27、自定义角色类需要实现psdi.common.role.CustomRoleAdapter.evaluateCustomRole方法,该方法由

 psdi.common.role.MaxRole.resolveRole方法调用,自定义方法将返回PersonRemote、或人员组对应的PersonSetRemote对象,

 不能返回自定义的PersonSetRemote对象.

28、在编码字段添加"转到XX应用程序"的菜单时,要在下表中注册两个表的对应关系字段:

 insert into maxlookupmap (TARGET, LOOKUPATTR, TARGETATTR, SOURCEKEY, SEQNUM, ALLOWNULL, MAXLOOKUPMAPID, SOURCE)

 values ('C_ERPPWDCHG', 'ERP_USERCODE', 'ERP_USERCODE', 'ERP_USERCODE', 1, 1, maxlookupmapseq.nextval, 'C_ERPUSER', '3681177');

29、持久层设计思想及跨数据库处理方法:

 SqlFormat sqf = new SqlFormat(this, "location=:location and siteid=:siteid");

 MboSetRemote storeroomSet = ((MboSet)getThisMboSet()).getSharedMboSet("LOCATIONS", sqf.format());

30、Maximo事件执行后的会刷新一次网页,可以设置需要返回的参数值,而后处理一些事后脚本,可以参考下面的做法:

 maximouiweb\webmodule\webclient\common\reportrunner.jsp