MAXIMO拔高培训.doc_第1页
MAXIMO拔高培训.doc_第2页
MAXIMO拔高培训.doc_第3页
MAXIMO拔高培训.doc_第4页
MAXIMO拔高培训.doc_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MAXIMO拔高培训目录MAXIMO拔高培训11.Maximo逻辑简介32.几种典型DataBean4AppBean4ResultBean4LookupBean5QbeBean53.菜单的使用6主菜单6自定义菜单64.启动中心的使用7欢迎中心自定义7收件箱自定义7记录集自定义85.BUTTON的使用8新建行按钮的应用及修改8内部自定义按钮事件96.树形控件的使用107.自定义控件118.虚拟对象和虚拟字段的使用139.视图的使用1410.自定义系统服务1411.自定义工作流15角色自定义15操作自定义1612.数据库相关17MAXIMO中通过JDBC调用数据库17MAXIMO中调用存储过程18MAXIMO中密码加密解密1913.系统自定义权限实践20需求探讨2014.AppBean21addrow()22CLEAR ()22DELETE()22DUPLICATE()22canExit()23getMboSet()23initialize()23NEXT()23PREVIOUS()23RESULTS()24SAVE()24saveYesNoCheck()24ROUTEWF()24toBeSaved()2415.DataBean25addAttribute(attribute, flags)25addrow()25cancelDialog()25copytonewrow()25count()26delete()26execute()26getXXX(row,col)26getCurrentRow()26getMbo(row)26insert(row)27isEmpty()27save()27toBeSaved()27toggledeleterow()2716.MboConstants281. Maximo逻辑简介 使用Ajax技术: 基于Iframe的部分提交机制 局部刷新机制 使用Xml作为UI的描述 应用界面内容均由XML进行提供,XML文件由JSP的控制标签组件组成。其中components组件和Javascript中的脚本共同生成需要显示的页面。 使用封装的控件,控件逻辑封装在jsp中 Components中的控件在component-registry.xml和control-registry.xml进行定义,代码控制类在psdi.webclient.controls.*和ponents.*中 事件响应控件对应的databean的方法 或者lookups.xml和library.xml中的对应方法2. 几种典型DataBeanAppBean绑定在应用程序的最上层,用来处理基本的页面功能。定义了自己特有的一些方法:BOOKMARK()、DUPLICATE()、getResultsBean()、gotoTab()、saveYesNoCheck()、RUNREPORTS()等。ResultBean绑定在容器Table上,用来处理和显示table中的数据。定义了特有的一些方法selectrecord()、getMboSet() 、fetchTableData()等。LookupBean图中JobPlanBean继承自lookupbean绑定在选择值对话框上,用来返回两种类型的数据:设置值(setvalue)、查询值(setqbe)。覆写了selectrecord()、execute()、getMboSetRemote()等方法,使用的时候只需覆写LookupBean的getMboSetRemote()方法得到你需要的数据。QbeBean图中ClassificationBean继承自QbeBean绑定在高级查询对话框上,用来查询过滤数据,覆写了qbeclear()、qbecancel()、execute()。一般需要特殊的查询方式才需要自定义QbeBean。3. 菜单的使用主菜单通过下面语句查看系统菜单位置。select * from maxmenu where menutype=MODULE;elementtype = header 为标题elementtype = app 为应用菜单位置通过position和subposition确定,可以手动添加。新建应用程序时,会要求选择对应模块,那么如何新建模块?select * from maxmodules;查找现有模块,按照现有样式新增一条模块记录。select * from maxmenu where menutype=MODULE;然后按照现有样式,新增elementtype =MODULE和elementtype =HEADER的一条记录。自定义菜单自定义菜单需要对两个系统级的xml进行修改,library.xml和menus.xml。在library.xml中添加这一段:在menus.xml中添加这一段:添加完毕后重启服务器,即可看到该菜单。4. 启动中心的使用欢迎中心自定义通过maxadmin登录,点击创建新模板,然后在页面中添加相应选项,如图:每个页面就是一个portlet,定制化各个portlet点击即可进行配置。收件箱自定义系统自带收件箱,在系统中管理员能增加减少相关显示字段,但是该功能有很多局限性,如果想要定制化收件箱就需要修改收件箱底层的JSP。JSP位置:E:Maximoapplicationsmaximomaximouiwebwebmodulewebclientcomponentsinboxportlet.jsp控件控制类psdi.webclient.controls.InboxPortlet记录集自定义这些可用查询都在QUERY表中,根据选择这些不同的QUERY,选择不同的列,还可以定义图形以及颜色警报。建立查询在每个应用中5. BUTTON的使用新建行按钮的应用及修改系统自带新建行按钮,如图所示默认事件为addrow,想要重新复写此方法,需要在当前table绑定databean中复写此方法。内部自定义按钮事件新建按钮,如图所示:自定义事件selasparts1. 调用系统appbean中的selasparts()方法2. 调用主对象里的selasparts()方法3. 调用当前应用dialog id=selasparts的对话框4. 调用系统library.xml中dialog id=selasparts的对话框6. 树形控件的使用Mbo:需要实现HierarchicalMboRemote接口,实现isTop()、hasChildren ()、hasParents ()、init ()、add ()方法即可。Mboset:需要继承HierarchicalMboSet,覆写getChildren ()、getParent ()、getSiblings ()、getTop ()、getPathToTop ()方法即可。Databean:继承TreeControlBean,覆写需要的方法即可示例:public class LocTreeHBBean extends TreeControlBeanprotected void initialize() throws MXException, RemoteException super.initialize();public int selectrecord() throws RemoteException, MXExceptionWebClientEvent webclientevent = sessionContext.getCurrentEvent();String locationsid = webclientevent.getValueString();MboSetRemote msr_loc = MXServer.getMXServer().getMboSet(LOCATIONS, getMXSession().getUserInfo();locationsid = locationsid.replaceAll(, );msr_loc.setWhere( LOCATIONSID= + locationsid + );if(msr_loc.count()0)String location = msr_loc.getMbo(0).getString(location);appbean.fireDataChangedEvent();appbean.SAVE();msr_loc.close();return 1;7. 自定义控件在maximomaximouiwebwebclientcomponents中新建一个custauth.jsp在component-registry.xml和control-registry.xml进行定义,示例内容如下:true custauthtrue 代码示例如下public class custAuth extends ControlInstance public custAuth() public void initialize() super.initialize();public int render() throws NoSuchMethodException, IllegalAccessException,InvocationTargetException WebClientSession wcs = this.getWebClientSession();DataBean appbean = wcs.getCurrentApp().getAppBean();try MboRemote mbo = appbean.getMbo();String description = mbo.getString(ASSETTYPE);if (description.equalsIgnoreCase(IT) mbo.setFieldFlag(USAGE, MboConstants.READONLY, true);appbean.fireStructureChangedEvent(); catch (RemoteException e) e.printStackTrace(); catch (MXException e) e.printStackTrace();return super.render();然后在应用的XML中,加入一行页面加载时,initialize()和render()方法都会执行,具体要复写何方法参看父类8. 虚拟对象和虚拟字段的使用新建虚拟对象时,需要取消持久性?。如果对象是不持久的,则不会添加任何属性,但是如果一个对象属性都不创建,就不能配置数据库。 在编写mbo和mboset时,Mbo extends NonPersistentMbo implements NonPersistentMboRemoteMboSet extends NonPersistentMboSet implements NonPersistentMboSetRemote 9. 视图的使用视图使用例子TOOLINV对象在连接到的对象中选择关联对象,在where语句中写上查找的条件,本例子中toolinv的记录来自于inventory和item的一个集合。10. 自定义系统服务在Maxservice表中添加一行记录,DEMO服务,绑定类:maxdemo.lesson1.DemoService实现两个类DemoService和DemoServiceRemote,分别继承AppService和AppServiceRemote。服务类在程序启动时就会调用,相当于把功能类似的一系列的应用归为一个服务,并由统一的类来管理。11. 自定义工作流角色自定义工作流中的角色定义,很多时候需要动态判断条件然后决定发给什么人,此时需要用程序的方式来解决上述问题。package maxdemo.lesson1;import java.rmi.RemoteException;import mon.role.CustomRoleAdapter;import mon.role.CustomRoleInterface;import mon.role.MaxRole;import psdi.mbo.MboRemote;import psdi.util.MXException;public class RoleTest extends CustomRoleAdapter implements CustomRoleInterfacepublic MboRemote evaluateCustomRole(MaxRole arg0, MboRemote arg1)throws MXException, RemoteException MboSetRemotemboset = MXServer.getMXServer().getMboSet(PERSON, mboremote.getUserInfo();mboset.setUserWhere(personid=+maxadmin+);return mboset.getmbo(0);操作自定义在工作流的各种正向反向操作中,有些时候需要做一些额外的处理,此时需要用程序的方式定义操作。package maxdemo.lesson1;import java.rmi.RemoteException;import mon.action.ActionCustomClass;import psdi.mbo.MboRemote;import psdi.util.MXException;public class ActionTest implements ActionCustomClasspublic void applyCustomAction(MboRemote mboremote, Object aobj)throws MXException, RemoteException / mboremote相当于当前工作流所对应主对象12. 数据库相关MAXIMO中通过JDBC调用数据库public class CustAssetAppBean extends AssetAppBeanpublic int testbutton() throws RemoteException, MXException try Class.forName(org.gjt.mm.mysql.Driver).newInstance();String url =jdbc:mysql:/localhost/test?user=root&password=admin;Connection conn = DriverManager.getConnection(url); Statement stmt = conn.createStatement(); stmt.execute(select * from test); ResultSet rs = stmt.getResultSet(); while(rs.next() System.out.println(rs.getInt(test1); stmt.close(); conn.close(); catch (InstantiationException e) e.printStackTrace(); catch (IllegalAccessException e) e.printStackTrace(); catch (ClassNotFoundException e) e.printStackTrace(); catch (SQLException e) e.printStackTrace(); return 1;MAXIMO中调用存储过程public class CustAssetAppBean extends AssetAppBeanpublic int testbutton() throws RemoteException, MXException Connection connection = MXServer.getMXServer().getDBManager().getConnection(MXServer.getMXServer().getUserInfo(MAXADMIN).getConnectionKey();String sql = call testbutton(?, ?);try CallableStatement cst = connection.prepareCall(sql);cst.setInt(1, 0); cst.setInt(2, 0); cst.execute(); cst.close(); conn.close(); catch (SQLException e) e.printStackTrace();return 1;MAXIMO中密码加密解密MXCipher mxciper = MXServer.getMXServer().getMXCipher();MboSetRemote msr = MXServer.getMXServer().getMboSet(maxuser, MXServer.getMXServer().getSystemUserInfo();MboRemote mbo = (MboRemote)msr.moveFirst(); while (true) if (mbo = null) break; String username = mbo.getString(loginid); byte bytes = mbo.getBytes(password); String password = mxciper.decData(bytes); System.out.println(username + : + password); mbo = msr.moveNext(); 13. 系统自定义权限实践需求探讨系统能够根据配置文件自动设置,每个应用的只读,必填,同时也能根据条件的变换自动设置其他表和字段的只读,必填。在maximo6中,实现这种需求需要进行开发,但是在maximo7中可以不用开发的方式,具体操作模式如下:1. 在条件表达式管理应用中定义需要的条件2. 在权限组应用中,对不同的选项进行条件选择,具体选项的也能在应用设计器中进行定义3. 每个控件都能通过配置条件属性来进行权限的控制4. 如果要对每个人访问实体表进行控制,可以运用权限组应用中的数据限制14.AppBeanAppBean主要负责跟页面的交互。每一个应用程序都跟一个appBean相绑定,如果没有为一个应用程序指明它的AppBean,那就就是跟默认的psdi.webclient.system.beans.AppBean绑定。AppBean继承自psdi.webclient.system.beans.DataBean,DataBean的作用主要是代理了mbo的很多方法,设置whereClause,Qbe,save,delete等等),通过DataBean调用Mbo或者MboSet来完成对数据的访问。另外Mbo和MboSet写了很多的通用的方法来实现数据库的访问。对于向数据库查询的数据总会放在一个ResultBean中,resultbean在DataBean中存在一个实例,用于存放返回的数据。通过AppInstantce的getResultsBean()就可以得到该对象。addrow()说明:新建一行方法,该方法一般是在需要增加多行的地方会用到,它实际上是调用DataBean的addrow()方法。一般用一个按钮来调用,按钮上的事件写为addrow即可。使用方法:一般用一个按钮来调用,按钮上的事件写为addrow即可,它实际上是调用了DataBean的方法,只是在调用之前作了一点设置操作。CLEAR ()说明:该方法的作用是清除所改变的内容,然后跳转到list页面。使用方法:一般在工具栏上加按钮,按钮上的事件写为CLEAR即可,必要的时候可以复写此方法,完成不同的操作。DELETE()说明:该方法为删除,调用此方法的时候,系统先提示用户是否真要做删除操作,如果用户选择“是”的时候,系统删除此DataBean的一行,并保存,最后跳转到list。使用方法:一般在工具栏上加按钮,按钮上的事件写为DELETE即可,必要的时候可以复写此方法,完成不同的操作。DUPLICATE()说明:该方法为复制。使用方法:一般在工具栏上加按钮,按钮上的事件写为DUPLICATE即可,必要的时候可以复写此方法,完成不同的操作。canExit()说明:该方法为当用户要离开某个运用的时候调用的方法,如果记录已经修改过还未保存,则提示用户时候做修改,并根据用户的选择做相应的操作。使用方法:该方法一般不会直接用到,它是在用户点击离开某个运用的时候做检查,实际上它是调用了saveYesNoInteractionCheck()方法来做检查。getMboSet()说明:返回当前的MboSet。使用方法:得到当前的MboSet,例如:this.getMboSet()。initialize()说明:app初始化的时候调用的方法,可以复写这个方法来完成不同的操作,比如字段值初始化,属性只读性设置等。使用方法:实际使用中可以根据情况来复写此方法NEXT()说明:移动到MboSet的下一行,并显示下一行的记录,如果当前行已经是最后一行,则提示用户。使用方法:一般在工具栏上加按钮,按钮上的事件写为NEXT即可,必要的时候可以复写此方法,完成不同的操作。PREVIOUS()说明:移动到MboSet的前一行,并显示前一行的记录,如果当前行已经是第一行,则提示用户。使用方法:一般在工具栏上加按钮,按钮上的事件写为PREVIOUS即可,必要的时候可以复写此方法,完成不同的操作。RESULTS()说明:检查并提示用户做保存,然后跳转到list对应的tab。使用方法:一般在工具栏上加按钮,按钮上的事件写为RESULTS即可,必要的时候可以复写此方法,完成不同的操作。SAVE()说明:保存,它实际上调用的是save()方法,然后在工具栏的上方显示“保存成功”的信息。使用方法:实际中是在工具栏上加一个按钮,按钮的事件写为SAVE即可,实际中可以根据实际情况复写此方法saveYesNoCheck() 说明:该方法是检查appBean看是否更改过需要保存,如果是,则提示用户是否保存,如果用户选择“是”,则保存,返回true;如果用户选择“否”,则清空更改,返回true;如果用户选择“取消”,则返回false。使用方法:这个方法是在用户离开某个运用的时候又canExist()方法调用它,实际中也不太会直接使用。ROUTEWF()说明:发送工作流调用方法,需要在发送工作流处理逻辑复写该方法toBeSaved()说明:返回一个MboSet或者是它的子对象是否改动过需要保存,如果改动过,则返回true,否则返回false。使用方法:该方法实际上是调用DataBean的toBeSaved()方法,使用的时候直接调用此方法它就返回true或者false了,例如:this. toBeSaved()。15.DataBean dataBean主要是代理Mbo的方法,页面和Mbo的交互主要是通过它来交互。addAttribute(attribute, flags)说明:把属性加到它内部的属性list里,其中attribute(String)为所要加入的属性的值,而flags(BigFlag)是用来标识要把属性加到那个list的对象。当flags的flag标志为64L的是时候,把属性加到resetList里;当为128L的时候,加到refreshList里;当为32L的时候,加到tableAttributes里;当为16L的时候,加到requiredFields。使用方法:addrow()说明:新建一行方法,该方法一般是在需要增加多行的地方会用到。使用方法:一般用一个按钮来调用,按钮上的事件写为addrow即可。cancelDialog()说明:这个方法是在一个对话框关闭的时候调用到,如果需要在对话框关闭的时候做一些处理,则可以复写此方法来完成所需要的操作。使用方法:对话框关闭的时候调用此方法,可以根据需要复写此方法,默认的方法里面是什么事情都不做,只是返回1。copytonewrow()说明:在MbeSet中把当前的Mbo复制出来,作为一个新的行。此操作后,如果用户没有保存就离开,则系统自动清除所复制出来的Mbo。使用方法:使用的时候需要实现MboRemote接口的duplicate方法,在上面完成复制的操作。count()说明:得到当前MboSet中,可用的Mbo的行数。使用方法:int len = this.count();delete()说明:删除行,如果没有参数,则是删除当前的行,如果有参数,则删除参数(int)中指定的行。使用方法:这个方法一般情况下不会直接时候到,它主要是为AppBean的DELETE方法服务的。execute()说明:页面上的执行,如果此dataBean有parent,则调用此方法的时候先调用parent的execute,在实际中你可以复写此方法,来完成各种不同的操作。getXXX(row,col)说明:其中XXX为java的基本类型,此方法为等到row(int)行里的col(String)属性的值,如果不指定row参数,则取的是当前行。使用方法:如要得到一个boolean的值:this.getBoolean(isxuni);其中isxuni为字段属性名。其它类型与此类似。getCurrentRow()说明:得到当前行的序号,返回int。使用方法:下面是删除当前行的方法:delete(getCurrentRow(),它用getCurrentRow()得到当前行的行号。getMbo(row)说明:得到指定行row(int)的Mbo,如果为未指定row,则返回当前行的Mbo。使用方法:下面为用getMbo()方法得到当前对象的当前行Mbo:MboRemote mbo = this.getMbo();insert(row)说明:在MboSet的指定行row(int)插入一行,如果没有指定row,则在MboSet的第一行插入。使用方法:此方法直接使用的情况也不多,它也是为AppBean里的INSERT()方法服务。isEmpty()说明:判断此MboSet是否包含有成员,如果没有,返回true,否则返回false。使用方法:save()说明:保存MboSet的更改。使用方法:这个方法在实际中也不太会直接用到,它为AppBean里的SAVE()方法服务。toBeSaved()说明:返回此MboSet或者是它的子是否改过需要保存,如果更改过,则返回true,否则返回false。使用方法:该方法实际上是调用MboSetRemote的toBeSaved()方法,使用的时候直接调用此方法它就返回true或者false了,例如:this. toBeSaved()。toggledeleterow()说明:标记删除行,如果一行是新建的且它的状态是取消就删除的,那么,当调用此方法的时候就清空此行,否则只是取消或者标记删除,实际的删除要等用户点保存以后才删除。使用方法:一般在列表上的最后一行的事件设置为“toggledeleterow”即可,如果在删除的时候要做一些个性化的判断操作等,那么可以复写此方法。16.MboConstants我们在看代码时经常会遇到11L、7L、2L等,那么这些标识具体代表什么,其实这些标识用于对mbo的一些操作是否进行校验处理等,具体的内容都定义在MboConstants类中,内容如下: public static final long NOADD = 1L; public static final long NOUPDATE = 2L; public static final long NODELETE = 4L; public static final long N

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论