Maxio71应用二次开发指南.docx
《Maxio71应用二次开发指南.docx》由会员分享,可在线阅读,更多相关《Maxio71应用二次开发指南.docx(51页珍藏版)》请在冰豆网上搜索。
Maxio71应用二次开发指南
Maxio7.1应用二次开发指南
1、文档描述
本文档是根据我个人的经验和网上收索的资料整理出来,哈哈~~
2、命名规则
2.1基本准则
(1)总体说来,按照Maximo的包结构,存放相应的类,将psid改为power即可。
(2)公司开发的类,统一放在power包中。
(3)应用程序业务逻辑类,请放在power.app包中。
(4)应用程序的页面操作类,请放在power.webclient.beans.包中。
(5)工作流过程名,一般为应用程序的名字。
(6)主表与子表之间的联系名,请直接使用子表的名称。
2.2类名的命名规则
以下的规则,按优先级,从高到低排列,如果有冲突,请按优先级高的方式命名。
(1)关于类名的命名规则,请多多熟悉Maximo本身源码类名的命名规则。
(2)扩展原有的类,请不要使用相同的名字,最好加上“CU”关键字。
(3)直接从Mbo或StatefulMbo继承的类,最好使用表名作为类名。
(4)直接从MboSet继承的类,最好使用表名加上“Set”作为类名。
(5)远程接口的名称,最好都加上Remote。
(6)字段的类名,最好以Fld开头。
3、开发说明
3.1搭建开发环境
········
3.2配置Eclipse集成开发环境
········
4第一个应用程序
4.1业务描述
做一个单表的增、删、改、查业务,以下业务为开封电厂实际程序。
4.2应用设计
应用程序名:
CUTASK(点检任务)
应用程序模块名:
CUTASK
应用程序表:
CUROUTES_TASK(主对象)
应用程序关联表:
4.3数据表设计
主列:
CUROUTES_TASKID
4.4开发步骤
4.4.1第一步建立数据表
(1)启动Maximo,转到配置,数据库配置。
(2)点击新建对象。
(3)输入相关信息,如下图:
注意这里对象即是表名CUROUTES_TASK、服务输入CUSTAPP、级别选择SITE,如果不是工作流表,请不要选中主对象,存储分区,是你的分区表空间。
注意:
我们一般是先创建数据库对象,类名,先用系统默认的,等建立应用程序后再加上去。
selectt.classname,t.*frommaxobjecttwheret.objectname='CUROUTES_TASK';
selectt.classname,t.*frommaxobjectcfgtwhereobjectname='CUROUTES_TASK';
将写的类(包括完整包名)写到classname字段。
(4)添加字段信息,注意,新建表之后,系统会自动生成一些字段(如:
SITEID和ORGID),并未在表设计中,写出来,默认即可。
注意:
添加对象属性的时候,可能会涉及到域、类、等同对象等。
关联域、关联字段类请参见以前的另一篇文档。
(5)建立关系
根据PDM和需要用到的业务规则建立相应的关系。
4.4.2第二步建立应用程序
见劳如力写的文档。
4.5创建域
4.5.1域的分类
域即是值列表,是用于对象属性值的选择列表(相当于基础数据类似)。
Maximo6中域分ALN域、同义词域(Synonym)、数字域(Numeric)、数字范围域(NumericRange)、表域(Table)、交叉域(CrossOver)。
域的主要信息保存在MAXDOMAIN表里,字段值保存在相应的表中,其中的对应关系如下图所示:
MAXDOMAIN表:
(类似于基础数据中的基础大类)
ALNDOMAIN表:
(类似于基础数据中的基础细类)
例如:
对于一个字符域,可以看到在MAXDOMAIN表中有一条记录对应和在ALNMDOMAIN表中的若干条记录。
(见上图)
他们之间的关系:
与ALNValue相关联(alndomainvalue.domainid=maxdomain.domainidandmaxdomain.domaintypein(selectvaluelist.valuefromvaluelistwherevaluelist.listname='DOMTYPE'andvaluelist.maxvalue='ALN'))。
如果这是ALN域,则结果集将包含一个或多个对象。
4.5.2创建域
点击转到—>配置—>域,进入如下图所示域的操作页面。
注意:
同义词域在页面无法添加,只能直接在数据库中添加。
同义词域对应工作流中对象的状态;
创建状态同义词域的sql语句
(1)在MAXDOMAIN表中添加记录:
insertintoMAXDOMAIN(DOMAINID,DESCRIPTION,DOMAINTYPE,MAXTYPE,LENGTH,SCALE,MAXDOMAINID)
values('STDSTATUS','标准工作流状态','SYNONYM','UPPER',10,0,maxdomainseq.nextval);
(2)在SYNONYMDOMAIN表中添加记录:
同义词域的每一个状态在SYNONYMDOMAIN表中对应一条记录。
insertintoSYNONYMDOMAIN(DOMAINID,MAXVALUE,VALUE,DESCRIPTION,DEFAULTS,SITEID,ORGID,SYNONYMDOMAINID)
values('STDSTATUS','APPR','APPR','已批准',1,null,null,synonymdomainseq.nextval);
insertintoSYNONYMDOMAIN(DOMAINID,MAXVALUE,VALUE,DESCRIPTION,DEFAULTS,SITEID,ORGID,SYNONYMDOMAINID)
values('STDSTATUS','CAN','CAN','已取消',1,null,null,synonymdomainseq.nextval);
创建后使用存储过程为主对象的STATUS字段配置域
4.6开发自定义应用程序
4.6.1创建模块
模块指的是点击“转到”弹出的下拉列表中的各个应用模块。
Maximo没有提供创建模块的页面,必须在数据库中利用sql语句在MAXMODULES表中添加。
添加模块后还必须MAXMENU中添加菜单。
在MAXMENU和maxmodules表中。
MAXMENU中elementtype='MODULE'的为主菜单,maxmodules表中为所有的主菜单列表。
elementtype='HEADER'为二级菜单,elementtype='APP'的为应用程序菜单。
MAXMENU和maxmodules表的关系:
MAXMENU.keyvalue=maxmodules.module。
例如:
insertintomaxmodules(MODULE,DESCRIPTION,MAXMODULESID,ROWSTAMP)
values('PTR','点检定修',234,maxmodulesseq.nextval);
insertintomaxmenu(MENUTYPE,MODULEAPP,POSITION,SUBPOSITION,ELEMENTTYPE,KEYVALUE,HEADERDESCRIPTION,URL,VISIBLE,IMAGE,ACCESSKEY,TABDISPLAY,MAXMENUID,ROWSTAMP)
values('MODULE','PTR',900000,0,'MODULE','PTR','点检定修管理','',1,'nav_icon_usercust.gif','','',19528,maxmenuseq.nextval);
commit;
4.7配置数据库
4.7.1新建对象
新建对象存储在maximo数据库的MAXOBJECT、MAXOBJECTCFG、MAXTABLE、MAXTABLECFG表中。
注意:
服务名、绑定的类名及路径是一一对应的,建议新建的主对象最好都创建自己单独的服务,服务名跟主对象名一样,这样方便每个应用的业务逻辑代码都发布在自己的服务目录下,不是主对象的对象引用现有的服务名,而不重新创建服务。
开发出服务类后在maximo数据库的MAXSERVICE表中配置相应服务,可以使用如下的sql语句:
insertintoMAXSERVICE
(servicename,description,classname,maxserviceid)values
('TPRSERVICE','工程项目申请,'com.jxkj.app.tpr.TprService',maxserviceseq.nextval);
服务类(MAXSERVICE)的表结构如下:
新建数据库对象页面、配置数据库页面的主界面如下图:
4.7.2创建对象属性、索引和关系
点击“新建行”添加一个新的属性,默认会有***ID(***表示新建的对象名)、description属性(该属性具有长描述,所以还有DESCRIPTION_LONGDESCRIPTION属性);
(0)是否主对象(有工流需要钩上)、服务名、表所属级别、主列等。
(0)在界面上创建好对象还没执行cofigdb之前,maximo会往maxtablecfg、maxobjectcfg、maxattributecfg这些表插入记录,还没生成往oracle生成相应的物理表,执行完configdb后,会在数据库中生成相应的物理表,并往maxtable、maxobject、maxattribute这些maximo系统表插入记录,如果configdb时出现问题,可以查看这些maximo系统表
(0)创建虚拟的状态表时,级别为SYSTEM,固定和添加Rowstamp不用√,唯一列跟语言列都不用添,因为虚拟表在数据库中不存在相应的物理表,设计界面如下
(1)对象属性信息存储maxattribute、maxattributecfg表中;
(2)长描述是对某一属性的描述,存储在maximo数据库的maximo.LONGDESCRIPTION表中。
当对象的任何一个属性有长描述时,对象具有一个HASLD属性;
(3)对于有状态的mbo必须包括了status和statusdate两个属性;
(4)当对象的级别为Site时,需要两个属性ORGID、SITEID;
(5)需要设置某一属性为自动编号时,勾选“是否能自动编号?
”,填写一个自动编号,当填写的自动编号不存在时,会弹出对话框询问是否创建新的自动编号,点击“是”创建,同时默认值填写&AUTOKEY&;自动增长值存储在AUTOKEY表中;
添加属性页面如下图:
注意:
添加对象属性的时候,可能会涉及到域、类、等同对象等。
关联域、关联字段类请参见以前的另一篇文档。
对象关系属性存储在maximo数据库的MAXRELATIONSHIP表中,注意添加关系时里面条件的写法,比如:
tprnum=:
tprnum,前者指的是子对象中的属性,后者指的是当前对象的属性。
添加关系信息输入框如下图:
4.7.3通过CONFIGDB配置数据库
保存上述所建的对象以及属性、索引、关系,然后关闭weblogic服务器,进入maximo安装目录下的tools/maximo目录,双击configdb.bat,配置数据库,这时maximo程序将在数据库中创建相关的表和关系。
创建完数据库表关闭weblogic,等待大概1分钟,转到\maximo\tools\maximo目录中,执行configdb.bat命令,命令的默认参数将以,\Maximo\applications\maximo\properties\maximo.properties中的参数为准。
注意:
每次修改对象的相关信息或添加、修改属性后都要运行configdb.bat文件配置数据库,添加或修改关系后不用运行configdb.bat。
4.8页面定制
点击转到—>配置—>应用程序设计器,进入如下图所示应用程序设计器的页面,在该页面中进行页面的设计定制;应用程序设计器页面如下:
新建应用程序必须指定模块名,指定模块名以及授权后可以在“转到“菜单中链接到自定义的应用程序。
创建新应用程序如下图:
开发人员通过‘转到→配置→应用程序设计器’创建应用,在无特别说明的前提下,默认创建为高级应用程序(电源应用程序)。
在应用程序设计器页面中,可以定制页面。
页面定制可以采取两种方式:
一是在应用程序设计器里画,通过“控制调色板”、“控制属性”、“编辑对话框”三个功能菜单来组装页面;
二是先通过应用程序设计器把该APP的XML文件导出来,再在这上面改,改完后再通过应用程序设计器导入数据库。
(对系统熟练后,再使用这种方法)
(该节的详细步骤参考劳如力写的文档)
4.8.1配置菜单和权限
‘转到→权限组→查找并点击“MAXADMIN”组→应用程序→查找到相应的应用程序并为该权限组赋予相应的权限,一般是所有都打上钩,即赋予所有权限。
配置完权限,退出maximo重新登录即可
如上图所示,在选择操作栏选择添加签名选项、操作菜单、工具栏菜单,添加完成后需要授权后用户才能使用指定功能。
签名选项存储在maximo数据库的SIGOPTION表中,操作菜单和工具栏菜单存储在maximo数据库的MAXMENU表中,菜单权限存储在maximo数据库的APPLICATIONAUTH表中。
APPLICATIONAUTH的表结构如下:
可以使用sql语句创建签名选项、菜单和授权。
签名选项(sigoption),MAXIMO中所有的应用程序的所有操作都保存在签名选项这张表中。
以点检任务为例,查看该程序所具有的操作:
签名选项的表结构如下:
select*fromsigoptiontwheret.app='CUTASK';
菜单权限(APPLICATIONAUTH),上述点检任务的权限分配(由权限组和签名选项确定的权限)如下:
添加签名选项和权限分配时如何进行的?
有两种方式创建应用程序菜单和签名选项:
(1)在‘转到→配置→应用程序设计器→选择操作’中可以进行添加/修改签名选项、添加/修改选择操作菜单、添加/修改工具栏菜单、添加/修改搜索菜单
(2)直接通过sql语句,如下所示创建(程序不是自己的,主要看懂业务逻辑)
----应用程序消息
insertintoMaxmessages(msgkey,msggroup,value,title,displaymethod,options,buttontext,maxmessagesid)Values('StatusChangeSuccess','receiption','接待方案{0}状态被更改为{1}。
',null,'STATUS',2,null,MaxmessagesSEQ.nextval);
insertintoMaxmessages(msgkey,msggroup,value,title,displaymethod,options,buttontext,maxmessagesid)Values('StatusChangeFailure','receiption','无法将采购申请{0}状态更改为{1}。
',null,'MSGBOX',2,null,MaxmessagesSEQ.nextval);
insertintoMaxmessages(msgkey,msggroup,value,title,displaymethod,options,buttontext,maxmessagesid)Values('editHistErr','receiption','仅当处于“关闭”状态时,才能执行“编辑历史”操作。
。
',null,'MSGBOX',2,null,MaxmessagesSEQ.nextval);
insertintoMaxmessages(msgkey,msggroup,value,title,displaymethod,options,buttontext,maxmessagesid)Values('cannotdeletereceiption','receiption','状态改变后不能删除',null,'MSGBOX',2,null,MaxmessagesSEQ.nextval);
insertintoMaxmessages(msgkey,msggroup,value,title,displaymethod,options,buttontext,maxmessagesid)Values('cannotdeleteline','receiption','如果处于“等待批准”状态,则只能删除行',null,'MSGBOX',2,null,MaxmessagesSEQ.nextval);
----创建签名选项
insertintoSIGOPTION(APP,OPTIONNAME,DESCRIPTION,ESIGENABLED,VISIBLE,ALSOGRANTS,ALSOREVOKES,PREREQUISITE,SIGOPTIONID,LANGCODE,HASLD)values('RECEIPTION','BOOKMARK','添加到书签','0','0','','','READ',SIGOPTIONSEQ.NEXTVAL,'ZH','0');
insertintoSIGOPTION(APP,OPTIONNAME,DESCRIPTION,ESIGENABLED,VISIBLE,ALSOGRANTS,ALSOREVOKES,PREREQUISITE,SIGOPTIONID,LANGCODE,HASLD)values('RECEIPTION','INSERT','新建接待方案记录','0','1','SAVE','DUPLICATE','READ',SIGOPTIONSEQ.NEXTVAL,'ZH','0');
insertintoSIGOPTION(APP,OPTIONNAME,DESCRIPTION,ESIGENABLED,VISIBLE,ALSOGRANTS,ALSOREVOKES,PREREQUISITE,SIGOPTIONID,LANGCODE,HASLD)values('RECEIPTION','NEXT','下一个接待方案','0','1','','','READ',SIGOPTIONSEQ.NEXTVAL,'ZH','0');
insertintoSIGOPTION(APP,OPTIONNAME,DESCRIPTION,ESIGENABLED,VISIBLE,ALSOGRANTS,ALSOREVOKES,PREREQUISITE,SIGOPTIONID,LANGCODE,HASLD)values('RECEIPTION','PREVIOUS','上一个接待方案','0','1','','','READ',SIGOPTIONSEQ.NEXTVAL,'ZH','0');
insertintoSIGOPTION(APP,OPTIONNAME,DESCRIPTION,ESIGENABLED,VISIBLE,ALSOGRANTS,ALSOREVOKES,PREREQUISITE,SIGOPTIONID,LANGCODE,HASLD)values('RECEIPTION','SAVE','保存记录','0','1','','INSERT,DUPLICATE,FIELDDEFS','READ',SIGOPTIONSEQ.NEXTVAL,'ZH','0');
----创建应用程序菜单
insertintoMAXMENU(MENUTYPE,MODULEAPP,POSITION,SUBPOSITION,ELEMENTTYPE,KEYVALUE,HEADERDESCRIPTION,URL,VISIBLE,IMAGE,ACCESSKEY,TABDISPLAY,MAXMENUID)values('APPMENU','RECEIPTION','85','0','HEADER','AM85','附件库/文件夹','','1','','','ALL',MAXMENUSEQ.NEXTVAL);
insertintoMAXMENU(MENUTYPE,MODULEAPP,POSITION,SUBPOSITION,ELEMENTTYPE,KEYVALUE,HEADERDESCRIPTION,URL,VISIBLE,IMAGE,ACCESSKEY,TABDISPLAY,MAXMENUID)values('APPMENU','RECEIPTION','85','10','OPTION','MANAGELIB','','','1','','','ALL',MAXMENUSEQ.NEXTVAL);
4.9开发工作流
4.9.1创建状态表对象
用于记录状态的信息的表,是实际存在于maximo数据库中的表。
例如TPRSTATUS。
在主对象中创建与状态对象的关系。
callPAK_TOOL.createRelation('TPRSTATUS','TPR','TPRSTATUS','tprnum=:
tprnumandsiteid=:
siteid','与工程项目申请状态表相关联,用于查找指定工程项目申请的状态记录。
结果集将包含一个或多个对象。
');
4.9.2创建虚拟表对象
虚拟表对象是maximo中的一个对象,但在数据库中不存在相应的物理表。
虚拟表对象必须包含属性STATUS、STATDATE、MEMO。
可以使用存储过程较方便地创建虚拟表对象。
callPAK_TOOL.createCSVirtual('TPRCHANGESTATUS','工程项目申请状态更改虚拟表','TPR','TPR','com.jxkj.app.tpr.virtual.TprChangeStatusMboSet',1);
4.9.3创建工作流状态同义词域
同义词域对应工作流中对象的状态;
创建后使用存储过程为主对象的STATUS字段配置域:
callPAK_TOOL.ConfigDomain('TPR','STATUS','STDSTATUS');
4.9.4创建操作
操作是工作流程中的辅助选项,通过设置操作可以使流程在运行的过程中完成一些指定的操作,如:
设置值、改变状态、操作组、可执行的命令行、定制类、应用程序操作。
设置好后的操作由系统自动执行。
操作“设置值”和“改变状态”必须指定对象,而且操作“改变状态”的对象要求是继承stateful的对象即有状态的对象。
在绘制工作流程时可以为流程的每一步指定需要的操作。
点击转到—>配置—>工作流—>操作,进入配置操作的页面。
4.9.5绘制工作流程
图例描述:
开始节点一个流程只能有一个开始节点。
停止节点一个流程至少有一个停止节