Maximo经验分享

来源:互联网 发布:微信淘客防封软件 编辑:程序博客网 时间:2024/04/29 12:30

1.Maximo 相关对象

Maximo对象一般由MBO,MBORemote, MBOSet,MBOSetRemote组成。 Maximo表单级别的代码参考psdi.app.ticket.Incident

表单中的Field控制由单独的类来实现,可以参考psdi.app.ticket.FldTicketID

在对象代码扩展之后,需要在后台maxobject表单中调整该object对应的classname,调整为开发的MboSet。

对于appBean,扩展代码之后,需要导出该object的xml,并替换该对象相应的classname。

 

    在编译后如果是MBO对象需要调用RMI程序,rmic –d . psdi.app.test.Test

    生成stub 文件

 

2.关于SigOption

SigOption在ApplicatoinDesign工具中添加修改删除。如果需要扩展功能,那么需要在对象的Class中实现相应的功能,需要有对应的方法。

 

3.关于Edit Text中与字段的绑定

1)与本表单字段绑定

需要选择本表单的对象绑定,并选择相应的Database字段

2)与Dialog中的字段绑定

如果与Dialog中字段绑定,那么需要在DataSourceID 中设置MAINRECORD

 

 

4.Maximo安装

 

1) 机器名不能有下划线_,不然会影响WebSphere中Jms的使用。

2) 中文版选择字符集ALN32-Unicode

3) 把数据库的nsl_language那个参数由byte改为char

4) 调整open_cursor数量等Oracle参数,参见安装文档。

5) 调整WebSphere参数。

Add to the the Generic JVM Args field in:

Application Server-><ServerName>->Java and Process Management->Process

Definition->JVM:

 

-Dsun.rmi.dgc.ackTimeout=100000 -Djava.net.preferIPv4Stack=true

 

 

5.Maximo初始化配置

1)配置Currency Code (财务->货币代码)

2)配置 Exchange Rate (财务->汇率)

3)配置 GL Account (配置->数据库配置->总分类帐科目配置),写入GLConfigure对象

4)配置 Chart of Account (财务->科目表)

 

6.权限控制

1)Security Group

对应后台数据库表

a)MAXGROUP

b)SITEAUTH

c)APPLICATIONAUTH

d)GLAUTH

e)LABORAUTH

f)LOCAUTH

g)GROUPRESTRICTION

h)GROUPUSER

2)MAXUSER

对应后台数据库表

a)MAXUSER

b)PERSON

c)PHONE

d)EMAIL

e)GROUPUSER

f)USERPURGL

g)GRPREASSIGNAUTH

3)Start Center

a)用Maxadmin用户登录系统,建议不要为Maxadmin用户配置StartCenter

b)Maxadmin用户可以添加,修改,删除StartCenter模板

c)在KPI Manager中定义KPI条件

d)在WorkView里定义ResultSet的查询条件

 

7.MultiSite功能

1)创建一个Organization

2)然后选择这个Organization,并在Select Action中定义不同Option工单的类型,还有定义一些规则。各工单的单号规则。

 

8.对于权限组中加入用户的授权控制

1)需要在User中选中管理员,并在Select Action中选择“授权组重新分配”操作,并加入相关的组。

 

9.Database Configuration

1) 千万不要直接去删除View里面的字段,系统会崩溃。先把Table里的字段删除,config db,然后再加。关注以下表格:

Maxviewcolumncfg

Maxviewcolumn

Maxobject

Maxobjectcfg

Maxattribute

Maxattributecfg

 

2) 配置项自动编号

需要在Database Configuration中选择表单中需要自动编号的字段,选择自动编号选项,并选择一个自动编号名称。然后在默认值里填写“&AUTOKEY&”

 

10. 数据库导入导出问题

在数据库导入后,如果报RowStamp错误,需要检查数据库的Trigger是不是编译错误,如果错误需要重新编译Trigger,比如说TICKET_T。ConfigDB有时候也会报这个错误。

 

11. 关于DocLinks Application配置

 

1) 建立Doclink 文件路径:

D:/DOCLINKS

D:/DOCLINKS/attachments

D:/DOCLINKS/default

D:/DOCLINKS/diagrams

D:/DOCLINKS/images

D:/DOCLINKS/WEB-INF

并将 maximo/deployment/web.xml copy到D:/DOCLINKS/WEB-INF下

在weblogic下发布 doclinks ,详情请参照文档。

 

注意:DOCLINKS 及下面的自文件夹 全设成共享,把读写权限放开。

 

2) 修改doclink.properties

 

包括以下内容:

mxe.doclink.maxfilesize = 10

mxe.doclink.doctypes.defpath = D://DOCLINKS//default

D://DOCLINKS = http://134.127.17.155:7001/doclinks

 

3) 登陆到maximo,在事件应用的 selectaction menu 中选择 附件库/文件夹->管理文件夹,配置文件夹路径

 

例如:

文档文件夹描述默认文件路径

Attachments附件/DOCLINKS/attachments

注意:大小写要与实际文件夹一致。

 

12. 关于Table Domain CrossOver Domain

1) 在数据库对应字段里面绑Table Domain 

2) 新建一个Table Domain里面对应你要去查找的对象的字段 

3) 写一段xml并放到lookup.xml中 

4) 在application designer里面吧这个对应的lookup的名字填到lookup那里

5) 往maxlookupmap那个表里面添加一条记录

insert into maxlookupmap(source,target,lookupattr,targetattr,sourcekey,seqnum,allownull,maxlookupmapid) 

values ('MEP_COMP','ASSET','VENDOR_MEP','VENDOR_MEP','COMPNAME_MEP',2,1,maxlookupmapseq.nextval)

 

source:源表

target:目标表

lookupattr: lookup绑的字段

targetattr: 目标字段

sourcekey: 源表单字段

insert into maxlookupmap()

13.Java开发

 

1)权限控制。

一般对于Mbo在Init()方法中加入权限控制代码。框架参考巨人项目的事件类MEPIncident

对于AppBean在ROUTEWF()方法加入权限控制代码。框架参考巨人项目的AppBean类TicketAppBean。

 

2)关于在其他表单查找信息

两种方式,一种方式是通过MXSERVER提供的函数进行查找。另一种方式是通过本表的Relationship来向其他表单查找信息。

比方说在Email表单查找当前人员的Email地址。

 

String owner = getString("owner");

        //方式一,通过查找PERSON表,找到某条person的记录

MboSetRemote mboPersonSet = MXServer.getMXServer().getMboSet(

"PERSON", getUserInfo());

mboPersonSet.setWhere("PERSONID = '" + owner + "'");

MboRemote person = mboPersonSet.getMbo(0);

mboPersonSet.close();

//方式二,通过查找person对象关联的Relationship“EMAIL”查找

MboSetRemote emailSet = person.getMboSet("EMAIL");

MboRemote email = emailSet.getMbo(0);

emailSet.close();

String emailAddress = email.getString("EMAILADDRESS");

 

3)关于workflow的Custom Class

需要新建Class,并实现ActionCustomClass接口,然后把类路径配置到Action中

 

public class MEPCloseAction implements ActionCustomClass

{

 

public MEPCloseAction()

{

super();

}

 

 

public void applyCustomAction(MboRemote mbo, Object[] params)

throws MXException, RemoteException

{

mbo.setValue("CLOSEDATE_MEP",new Date(),MboConstants.NOACCESSCHECK | MboConstants.NOVALIDATION_AND_NOACTION);

}

}

 

4)关于对于外部表单字段的权限控制

比方说在事件表单中分类是引用外部表单的字段,对于分类操作参考下列代码:

if (getString("classstructureid").equals("")|| (getString("classstructureid") == null)) {

 

}else{

 

String classstructureid = getString("CLASSSTRUCTUREID");

MboSetRemote mboSet = this.getMboSet("CLASSSTRUCTURE");

mboSet.setWhere("CLASSSTRUCTUREID = '"+classstructureid+"'");

MboRemote mbo = mboSet.getMbo(0);

mbo.setFieldFlag("HIERARCHYPATH", READONLY, true);

mboSet.close();

}

 

5)关于邮件发送

如果邮件发送通过Workflow来实现的话,那么用户需要点击两次Workflow按钮,才能发送邮件,这样操作不便。

需要通过Maximo自带的API发送邮件,解决这个问题。

MXServer.sendEMail(emailAddress, "MaxAdmin@nipponpaint.com.cn",subject, message);

 

6)关于邮件中的需要含带工单的链接,客户直接在邮件里点击链接,就可以访问某张工单。

比方说事件单的链接。

"http://134.127.17.157/maximo/ui/maximo.jsp?event=loadapp&value=incident&uniqueid="+getInt("ticketuid");

Event参数loadapp,value参数incident表单,uniqueid参数通过getInt("ticketuid")方法获得本表单的uniqueid。

 

7)关于LongDescription字段

Maximo表单的Long description类型字段都不存放在该表单对应的后台数据库表中,统一存放在后台数据库的longdescription表单中。

但是在Database Configuration配置中可以看到Maximo表单中的Long Description类型字段都一个对应的虚拟字段存放相关信息。

 

8)关于Mbo的Save()方法

一般的业务逻辑可以写在该方法中。

 

9)关于如何在Maximo的对象中新增一条记录。

先获得MboSet,再执行MboSet的add()方法获得对应的Mbo,再对Mbo设置,最后保存MboSet。

 

参考以下代码:

MboSetRemote worklogSet = mbo.getMboSet("WORKLOG");

 

MboRemote worklog = worklogSet.add();

worklog.setValue("recordkey", mbo.getString("ticketid"),MboConstants.NOACCESSCHECK | MboConstants.NOVALIDATION_AND_NOACTION);

worklog.setValue("logtype", "CLIENTNOTE",MboConstants.NOACCESSCHECK | MboConstants.NOVALIDATION_AND_NOACTION);

worklog.setValue("createby", userName,MboConstants.NOACCESSCHECK | MboConstants.NOVALIDATION_AND_NOACTION);

worklog.setValue("createdate", new Date(),MboConstants.NOACCESSCHECK | MboConstants.NOVALIDATION_AND_NOACTION);

worklog.setValue("clientviewable", 1,MboConstants.NOACCESSCHECK | MboConstants.NOVALIDATION_AND_NOACTION);

worklog.setValue("siteid",mbo.getString("siteid"),MboConstants.NOACCESSCHECK | MboConstants.NOVALIDATION_AND_NOACTION);

worklog.setValue("orgid", mbo.getString("ORGID"),MboConstants.NOACCESSCHECK | MboConstants.NOVALIDATION_AND_NOACTION);

worklog.setValue("modifyby", userName,MboConstants.NOACCESSCHECK | MboConstants.NOVALIDATION_AND_NOACTION);

worklog.setValue("modifydate", new Date(),MboConstants.NOACCESSCHECK | MboConstants.NOVALIDATION_AND_NOACTION);

worklog.setValue("class",mbo.getString("CLASS"),MboConstants.NOACCESSCHECK | MboConstants.NOVALIDATION_AND_NOACTION);

worklog.setValue("langcode", "ZH",MboConstants.NOACCESSCHECK | MboConstants.NOVALIDATION_AND_NOACTION);

worklog.setValue("hasld", 1,MboConstants.NOACCESSCHECK | MboConstants.NOVALIDATION_AND_NOACTION);

worklog.setValue("DESCRIPTION_LONGDESCRIPTION", mbo.getString("FR2CODE_LONGDESCRIPTION"),MboConstants.NOACCESSCHECK | MboConstants.NOVALIDATION_AND_NOACTION);

worklog.setValue("description","解决方案记录",MboConstants.NOACCESSCHECK | MboConstants.NOVALIDATION_AND_NOACTION);

worklogSet.save();

 

10)AppBean里的一些方法调用

在AppBean里,如果AppBean关联的对象是某个Application的内嵌对象,那么使用以下代码来获得相关对象。(比方说当前AppBean绑定在WorkLog上,但WorkLog是内嵌在Incident中)

        //获得worklog对象

DataBean appBean = app.getDataBean("worklog");

MboRemote worklogMbo = appBean.getMbo();

 

        //获得ticket对象

MboRemote ticketMbo = worklogMbo.getOwner();

 

 

在AppBean里获得当前对象

DataBean databean = Utility.getDataSource(sessionContext, app

.getAppHandler());

MEPIncident mboIncident = (MEPIncident) databean.getMbo();

 

11) 关于AppBean里的方法

AppBean里的方法其实对应到系统的一个Event。可以在控件的Event属性里设置该方法的名称,就可以在某个控件被点击时调用AppBean里的方法。

 

12)关于Fld类

字段上可以绑定相关的类,主要有两个方法,一个Validate()方法,对于字段里填写的值做验证合法性。另一个是action()方法,当焦点离开时触发,参考以下代码:

 

public class MEPFldPmphase extends MboValueAdapter{

public MEPFldPmphase(MboValue mbv) throws RemoteException, MXException

{

super(mbv);

}

public void validate() throws psdi.util.MXException,

java.rmi.RemoteException 

{

}

public void action() throws MXException, RemoteException{

String pmphase = getMboValue().getString();

MboRemote ticketMbo = getMboValue().getMbo();

if(pmphase.equals("分析根源")){

 

ticketMbo.setValue("ISKNOWNERROR", false, NOACCESSCHECK);

}else if (pmphase.equals("已知错误")){

ticketMbo.setValue("ISKNOWNERROR", true, NOACCESSCHECK);

 

}else if (pmphase.equals("提出方案")){

ticketMbo.setValue("ISKNOWNERROR", true, NOACCESSCHECK);

 

}

 

}

 

}

 

13)关于扩展Table Domain的Fld类

这种类不需要绑定Table Domain也可以实现Table Domain或Crossover Domain的功能,也不需要在MaxlookupMap表里加入记录,只需要在构造函数里实现setRelationship()和SetListCreteia方法即可。另外在GetList()方法里可以设置筛选条件。参考以下代码:

 

public class MEPFldSelectContact extends MAXTableDomain

{

public MEPFldSelectContact(MboValue mbv) throws MXException

{

super(mbv);

String thisAttr = getMboValue().getAttributeName() ;

setRelationship("PERSON", "personid=:" + thisAttr );

setListCriteria("status in (select value from synonymdomain where maxvalue='ACTIVE' and domainid='PERSONSTATUS')");

setErrorMessage("person", "InvalidPerson");

}

public void action() throws MXException, RemoteException

{

MboRemote ticketMbo = getMboValue().getMbo();

ticketMbo.setValue("SP_ASSIGNDATE_MEP", new Date(),MboConstants.NOACCESSCHECK);

ticketMbo.setValue("NOTIFYACTION_MEP", "服务供应商分派通知",MboConstants.NOACCESSCHECK);

}

}

 

14)关于Mbo的SetValue方法

对于第三个参数可以控制跳过在这个字段上相关的程序校验

setValue("CLASSIFICATION_MEP",owner.getString("CLASSIFICATION_MEP"),NOACCESSCHECK | NOVALIDATION_AND_NOACTION);

 

 

14.LDAP集成问题

1)在配置好了LDAP认证后,需要先把LDAP里的帐号信息同步到Maximo中,相关的用户才能登陆。

2)在建立映射安全角色到用户/组时,需要选择映射到组,如果选择映射到用户,应用服务器有限制,只能同步部分用户到AD。

3)如果Maximo与LDAP同步过程中,需要同步的字段没有在ldapsync.xml里定义过,那么需要在LDAP中定义将该字段属性设置到Global Catalog。

To Mark an attribute to be replicated to the Global Catalog in Active Directory, 

· Run the Active Directory Schema program.

· In the schema editor, select the attribute employeeID (or other appropriate attribute).

· Right click to select 'properties'.

· Check the option called 'replicate this attribute to the Global Catalog'.

 

15.Workflow问题

1)如果ActionGroup里有多个Action,其中有个Action中包含了邮件通知功能,请把该Action放到最后执行。如果放在前面执行,后续的Action将不会执行。

 

16.Relationship中的权限控制问题

当工单中包含Table时,需要对于Table中的字段进行权限控制。这时需要对Table相关的对象进行权限控制。

 

17.创建DatabaseLinks

 

create public database link sap

connect to webapp identified by want2go

using '(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = ORAPRDDB.NIPPONPAINT.COM.CN)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = ORA)

)

)';

 

18.关于域索引的报错

系统报错域索引标记为 LOADING/FAILED/UNUSABLE

需要检查数据库的Tirgger,一般是Trigger损坏,需要重新编译即可。

 

 

19.密码类

psdi.util.MXCipher

 

原创粉丝点击