金蝶BOS企业版V632-开发指南-管理门户-Portlet开发_第1页
金蝶BOS企业版V632-开发指南-管理门户-Portlet开发_第2页
金蝶BOS企业版V632-开发指南-管理门户-Portlet开发_第3页
金蝶BOS企业版V632-开发指南-管理门户-Portlet开发_第4页
金蝶BOS企业版V632-开发指南-管理门户-Portlet开发_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

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

文档简介

1、.:.;EAS门户Portlet制造指南阐明本指南主要引见EAS门户Portlet的制造过程。简要论述了EAS门户的新特性,详细引见了制造Portlet的过程和步骤,对制造Portlet过程遇到的常见问题进展了阐明。本指南适用于EAS门户Portlet开发人员。目录 TOC o 1-3 h z u HYPERLINK l _Toc277854754 阐明 PAGEREF _Toc277854754 h 2 HYPERLINK l _Toc277854755 目录 PAGEREF _Toc277854755 h 3 HYPERLINK l _Toc277854756 第1章 EAS门户简介 PA

2、GEREF _Toc277854756 h 4 HYPERLINK l _Toc277854757 1.1 EAS门户新特性 PAGEREF _Toc277854757 h 4 HYPERLINK l _Toc277854758 第2章 Portlet制造 PAGEREF _Toc277854758 h 5 HYPERLINK l _Toc277854759 2.1 Portlet制造步骤 PAGEREF _Toc277854759 h 5 HYPERLINK l _Toc277854760 2.2 配置Portlet信息 PAGEREF _Toc277854760 h 5 HYPERLINK

3、 l _Toc277854761 2.2.1 配置Portlet定义信息 PAGEREF _Toc277854761 h 5 HYPERLINK l _Toc277854762 2.2.2 配置Portlet业务处置信息 PAGEREF _Toc277854762 h 6 HYPERLINK l _Toc277854763 2.3 向数据库插入相关数据 PAGEREF _Toc277854763 h 6 HYPERLINK l _Toc277854764 2.4 Portlet配置信息与数据库数据的对应关系 PAGEREF _Toc277854764 h 8 HYPERLINK l _Toc2

4、77854765 2.5 制造Portlet内容页面,实现业务需求 PAGEREF _Toc277854765 h 9 HYPERLINK l _Toc277854766 2.5.1 Portlet内容页面JSP接口 PAGEREF _Toc277854766 h 10 HYPERLINK l _Toc277854767 2.5.2 Portlet内容页面JS接口 PAGEREF _Toc277854767 h 13 HYPERLINK l _Toc277854768 2.5.3 Portlet内容页面制造规范与约束 PAGEREF _Toc277854768 h 16 HYPERLINK l

5、 _Toc277854769 2.5.4 Portlet内容页面制造常见问题 PAGEREF _Toc277854769 h 19 HYPERLINK l _Toc277854770 2.5.5 Portlet内容页面HTC控件的交换 PAGEREF _Toc277854770 h 23 HYPERLINK l _Toc277854771 2.5.6 门户优化合并且删除了部分js PAGEREF _Toc277854771 h 25 HYPERLINK l _Toc277854772 第3章 Portlet业务设置 PAGEREF _Toc277854772 h 27 HYPERLINK l

6、_Toc277854773 3.1 关联Portlet业务设置页面 PAGEREF _Toc277854773 h 28 HYPERLINK l _Toc277854774 3.2 Portlet业务设置页面JSP接口 PAGEREF _Toc277854774 h 29 HYPERLINK l _Toc277854775 3.3 Portlet业务设置页面JS接口 PAGEREF _Toc277854775 h 30 HYPERLINK l _Toc277854776 第4章 Portlet的运用 PAGEREF _Toc277854776 h 32 HYPERLINK l _Toc2778

7、54777 第5章 Portlet相关SQL脚本的导出和提交 PAGEREF _Toc277854777 h 35 HYPERLINK l _Toc277854778 5.1 例如SQL PAGEREF _Toc277854778 h 35 HYPERLINK l _Toc277854779 5.2 脚本提交位置 PAGEREF _Toc277854779 h 36 HYPERLINK l _Toc277854780 附录1 Portal配置文件拆分阐明 PAGEREF _Toc277854780 h 38 HYPERLINK l _Toc277854781 附录2 PortletUtil A

8、PI PAGEREF _Toc277854781 h 42 HYPERLINK l _Toc277854782 附录3 Ajax之Buffalo开发指南 PAGEREF _Toc277854782 h 54 HYPERLINK l _Toc277854783 附录4门户Portlet之间通讯 PAGEREF _Toc277854783 h 59第1章 EAS门户简介1.1 EAS门户新特性新的EAS门户在上一版本门户的根底上对整体框架进展了优化,实现了相关新特性,包含如下功能:1自定义规划:可自在规划,跨列规划;2页签配置完善:以拖拽方式把Portlet配置到页签上;3展现框架调整:可自在拖拽

9、规划显示,运转期用户可个性化配置界面展现款式;4提供容器Portlet:将多个单一Portlet组合成一个Portlet;5Portlet添加属性设置:支持系统级和业务级属性设置,且同时支持定义期和运转期属性设置;6Portlet异步加载:页签中每个Portlet异步加载,并发运转;7通知和待办可分类设置和授权:分类可由管理员一致建立和分配,同时允许用户自定义分类和管理管理员设置的分类。第2章 Portlet制造2.1 Portlet制造步骤Portlet制造过程包含以下几个步骤:1配置Portlet信息2向数据库插入相关数据3制造Portlet内容页面,实现业务需求4制造Portlet业务设

10、置页面可选最后一个步骤并不是必需的,在Portlet的业务需求需求业务设置时,才进展此步骤。下面将分小节详细引见Portlet制造的各个步骤,关于Portlet业务设置的内容将单独在第3章中引见。2.2 配置Portlet信息2.2.1 配置Portlet定义信息1配置文件途径EAS5.4版本:server/profiles/server1/config/portalConfig/portlets.xmlEAS6.0版本:server/deploy/eas.ear/cp_web.war/WEB-INF/portlets_xxx.xml其中,xxx表示详细的业务领域称号,如bos、eas等,详细

11、信息请参考“附录1 Portal配置文件拆分阐明2配置阐明1001testPortlet view portlet.test各配置参数值阐明如下:1001:Portlet定义ID,全局独一,不能反复。取值范围详细商定如下:BOS为 1-199 ,EAS为 200-999, 二次开发为 1000 以后;testPortlet:Portlet定义信息,无特别要求,普通运用英文字符标识。留意该标题信息仅用于在配置文件中区分不同的Portlet,与Portlet在运转时显示的标题无关,Portlet在运转时显示的标题信息由数据库中的内容决议,2.3小节有详细阐明;portlet.test:对应于“Po

12、rtlet业务处置信息的配置信息,详细见下一小节。2.2.2 配置Portlet业务处置信息1配置文件途径server/deploy/eas.ear/cp_web.war/WEB-INF/tiles-defs_xxx.xml其中,xxx表示详细的业务领域称号,如bos、eas等,详细信息请参考2.2.1节中的附件。2配置阐明各配置参数值阐明如下:portlet.test:tiles定义称号,和上一节Portlet定义信息的配置坚持一致;1001:对应的Portlet定义ID,和上一节Portlet定义信息的配置坚持一致;/html/custom/test.jsp:业务处置页面即2.5节将提到的

13、“Portlet内容页面地址,假设是Struts,那么还需求在struts-config.xml中进展配置,详细可以参考Struts官方文档。2.3 向数据库插入相关数据经过EAS管理控制台执行如下脚本,在数据库中插入一条记录,KSQL语句如下:INSERT INTO T_Portal_Portlet(FID,FCreatorID,FCreateTime,FLastUpdateUserID,FLastUpdateTime,FControlUnitID,FPortletDefineId,FPortletName_L1,FPortletName_L2,FPortletName_L3,FEnable

14、,FPortletNumber,FDescription_L1,FDescription_L2,FDescription_L3, FPortletCategoryID) VALUES(NEWBOSID(0B344890),00000000-0000-0000-0000-00000000000013B7DE7F,ts2021-10-01 12:13:14,00000000-0000-0000-0000-00000000000013B7DE7F,ts2021-10-01 12:13:14,00000000-0000-0000-0000-000000000000CCE7AED4,N104,NULL,

15、N周江测试1,N周江測試1,1,NPN-104,NULL, N周江测试1, N周江測試1, XkGI/dDGlkWJhX5ZEW9lOEPH2a4=);阐明与本卷须知:1插入字段FID的值请务必运用函数NEWBOSID,其中0B344890为Portlet实体元数据编码,该值不能更改为其他值,否那么程序获取Portlet信息时将出错。函数NEWBOSID(0B344890)每次执行会产生新的ID值,假设作为脚本提交,请留意修正为一个确定的ID值,且一定要支持可反复晋级。2字段FPortletDefineId的值一定要和Portlet定义信息配置文件2.2.1节中定义的值坚持一致。3繁体字段一定

16、要运用繁体文字,否那么和言语不匹配。4字段FPortletNumber的值为Portlet编码,其值不做硬性要求,但建议运用“PN-+Portlet定义ID的方式,如PN-1001。注:(2021-11-16) BOS SP3工程义务中参与Portlet分类管理,因此新增了字段FPortletCategoryID相关默许分类ID如下:根底系统:FZIyxl8gLUmP15IW8klEnUPH2a4=根底资料: VTh25HxPQEKvvaIWWecTGEPH2a4=财务会计: VFcHBNjYQ0qfzqDnSOOmMkPH2a4=资产管理: 90O4cecHikiMJoEHN5Pg8kPH2

17、a4=人力资源: 5ZE/Jdo9XkGqY38v30oQXkPH2a4=管理睬计: 4M141/5vlU6fPGEOu+pG7UPH2a4=资金管理: hLg/8i2uPkmQOAKsHt88f0PH2a4=商业分析:IbLhLRrJxUyZgDXwsRDKR0PH2a4=协同平台: m6AWen4UD0SBnZ2qs/Dn5kPH2a4=供应链管理:m6AWen4UD0SBnZ2qs/Dn5kPH2a4=本钱管理: R2IPXjFfWEKCFO8i99+bJEPH2a4=数据仓库: cXvgkmCk+0Wf9OTQKtkG3UPH2a4=房地产:kY+l8pEiI0mtkcUNsF/+uU

18、PH2a4=产业链协同: Q+Y2omUEm0ClpF1FbQAlEUPH2a4=其他:XkGI/dDGlkWJhX5ZEW9lOEPH2a4=因此新增Portlet时需求明确他的Portlet要放在哪个分类下,并将对应的分类id插入到Portlet表中。假设不插入该字段,Portlet会默许显示在根节点分类下Portlet类别可以在Portlet管理里面新增,因此他可以新建一个本人的类别,同时需求查询“t_portal_portletCategory表,获取到他新建类别的id,再来插入他的Portlet到刚刚新建的类别中2.4 Portlet配置信息与数据库数据的对应关系通常情况下,一条Po

19、rtlet配置信息portlets.xml以及tiles-defs.xml中各一个条目对应数据库表T_Portal_Portlet中的一条数据。假设多个Portlet运用一样的内容页面tiles-defs.xml中的,那么一条Portlet配置信息将对应数据库表T_Portal_Portlet中的多条数据。一条Portlet配置信息对应数据库表T_Portal_Portlet中的多条数据的运用场景:内容管理定义了一个Portlet内容页面,每个栏目可以分别对应一个Portlet定义,不同的Portlet定义经过参数进展区分,参数中记录栏目ID。可以经过程序动态创建,也可以采用实体提交的方式。对

20、应实体:com.kingdee.eas.portal.PortletInfo /Portlet定义com.kingdee.eas.portal.PortletParameterInfo /Portlet参数运用程序创建完后,需求刷新缓存才干起作用,相关API见2.5.1节第4点。2.5 制造Portlet内容页面,实现业务需求EAS门户中的Portlet能够具有多个页面,如用于展现业务逻辑的主页面、业务设置页面以及协助 阐明页面等。用于展现业务逻辑的主页面我们称之为“Portlet内容页面,它是一个JSP页面,但并不是完好的,其最终输出为HTML片段,不能包含、以及标签。以下是错误写法例如,P

21、ortlet内容页面不应该包含蓝色部分的标签:EAS.以下图展现了Portlet内容页面以及Portlet业务设置页面。图2-1 Portlet内容页面 图2-2 Portlet业务设置页面Portlet内容页面由相关的各业务部门根据各自的业务需求详细实现。EAS门户框架在Portlet内容页面上下文中提供了相应的接口以协助 开发人员完成详细业务逻辑的编写。2.5.1 Portlet内容页面JSP接口1获取EAS上下文Context运用工具类WebContextUtil的getEasContext()方法。例如:Context userCtx = WebContextUtil.getEasCo

22、ntext(request);2获取上下文中的用户、组织、职员等信息运用工具类ContextUtil,例如:.String name = null;PersonInfo personInfo = ContextUtil.getCurrentUserInfo(ctx).getPerson();if (personInfo != null) name = personInfo.getName();3调用效力器端方法EAS6.0打补丁PTM035205之前:与ControlBean中调用本地方法一样,例如:Context ctx = WebContextUtil.getEasContext(requ

23、est);IMessageCenter iMessageCenter = MessageCenterFactory.getLocalInstance(ctx);IRowSet rowset = iMessageCenter.getAcceptedTask();EAS6.0打补丁PTM035205之后:IMessageCenter iMessageCenter = MessageCenterFactory.getRemoteInstance();IRowSet rowset = iMessageCenter.getAcceptedTask();4Portlet操作运用接口com.kingdee.

24、eas.portal.IPortalServiceFacade,该接口提供以下方法:禁用Portlet含批量处置:disablePortlet 启用Portlet含批量处置:enablePortlet作废Portlet:deletePortlet新增Portlet无前往值:addPortlet新增Portlet前往新建ID:addPortletReturnId更新Portlet:update刷新Portlet缓存:refreshPortletCache获取Portlet:getPortlet留意:一切与Portlet相关的操作,如添加、删除、更新等,都必需运用该接口,不要直接调用IPortle

25、t接口对Portlet进展操作;进展Portlet操作获取Portlet除外后,在最后务必运用refreshPortletCache来刷新Portlet缓存数据。例如:IPortalServiceFacade service = PortalServiceFacadeFactory.getLocalInstance(ctx);service.enablePortlet(portletID);service.refreshPortletCache();对PortletExtInfo的操作,由于PortletInfo包含PortletExtInfo,因此同样经过接口com.kingdee.eas.

26、portal.IPortalServiceFacade进展,举例如下:其中,portletInfo为PortletInfo的实例添加PortletExtInfoPortletExtInfo portletExtInfo = new PortletExtInfo();portletExtInfo.setTitle(自定义Portlet标题);portletExtInfo.setBizDefUrl(/html/portlet/example/demoPortletDefSetting.jsp);portletExtInfo.setBizInsUrl(/html/portlet/example/de

27、moPortletInsSetting.jsp);portletInfo.setPortletExt(portletExtInfo);IPortalServiceFacade psf = PortalServiceFacadeFactory.getLocalInstance(ctx);/ 假设portletInfo是新增,那么psf.addPortlet(portletInfo);/ 假设portletInfo是修正,那么/psf.update(portletInfo.getId(), portletInfo);修正PortletExtInfoPortletExtInfo portletExt

28、Info = portletInfo.getPortletExt();portletExtInfo.setTitle(修正自定义Portlet标题);IPortalServiceFacade psf = PortalServiceFacadeFactory.getLocalInstance(ctx);psf.update(portletInfo.getId(), portletInfo);删除PortletExtInfoportletInfo.setPortletExt(null);IPortalServiceFacade psf = PortalServiceFacadeFactory.ge

29、tLocalInstance(ctx);psf.update(portletInfo.getId(), portletInfo);5获取Portlet相关信息包括Portlet定义和实例信息,如Portlet在配置文件中的定义ID,在数据库中的定义ID、实例ID以及Portlet的个性化信息自定义标题、高度、颜色配置等等。运用工具类com.kingdee.eas.portal.web.util.PortletUtil可以在Portlet内容页面以及业务设置页面后续将提及上获取Portlet的相关信息,包括Portlet的个性化信息假设存在的话。以Portlet内容页面为例,假设需求在此页面获得

30、Portlet的自定义显示称号以及Portlet实例的高度。首先引入PortletUtil:获取Portlet自定义显示称号:String customizedName = PortletUtil.getCustomizedName(request);获取Portlet实例高度:int insHeight = PortletUtil.getInsHeight(request);高度值单位为像素,假设高度值为0,那么表示实例的高度自顺应。关于PortletUtil的接口请参考“附录2 PortletUtil API。代码参考:server/deploy/eas.ear/cp_web.war/ht

31、ml/portlet/example/demoPortlet.jsp2.5.2 Portlet内容页面JS接口这些JS接口变量或者函数在Portlet内容页面中可直接运用。1Buffalo Ajax框架定义了两个Buffalo对象:buffaloAsync:异步方式buffaloSync:同步方式运用例如:buffaloAsync.remoteCall(messageService.getMsgCount, true, function(reply) var arr = reply.getResult(); .在Portlet内容页面中运用Buffalo时请直接运用以上两个对象,不用重新创建B

32、uffalo对象。在上一版本中,框架提供的Buffalo对象称号分别为:buffalo:异步方式buffalo1:同步方式这两个对象在门户框架新版本中依然保管,但不建议运用。请运用buffaloAsync和buffaloSync。留意,假设需求创建新的Buffalo对象,请防止运用buffaloAsync、buffaloSync、buffalo、buffalo1这4个变量命名,否那么将会覆盖这些框架提供的Buffalo对象。2翻开客户端GUI界面invokeFunction(uiClass, uiClassParam, uiOprt, openMethod);createModelUI(uiC

33、lass);createNewWinUI(uiClass);createNewTabUI(uiClass);openEasMainMenu();其中uiOprt可设置为字符串: ADDNEW、VIEW、EDITADDNEW:新增VIEW:查看EDIT:编辑openMethod可设置为数字:50、80、及其他数字50:模态窗口80:新开窗口其他值:新开页签单据查看GUI界面接口:viewBill(billId);参数为单据ID单据的UUID,非单据编号,EAS门户页面在不同帧下调用方式略有不用,门户各页签Portlet比如我的日历,我的任务台等规范调用方式为直接调用: viewBill(63fY

34、Lq2CTOCwsBgFdet+6Qneydw=);而各自页签参与了帧frame的情况下如流程中心参与了newMessageFrame,需求如下调用: parent.viewBill(63fYLq2CTOCwsBgFdet+6Qneydw=); 其他多层帧的情况以此类推,需求经过parent或者top等方式获取上层的JS函数来调用。更多关于翻开GUI界面的函数请参考以下文件:server/deploy/eas.ear/cp_web.war/common/js/easHandler.js3拖动Portlet后刷新Portlet内容该功能常用于Portlet宽度需求自顺应的场景,如“通知Portl

35、et和“待办事项Portlet,由于这两个Portlet的宽度由JS动态计算而得,所以当他们挪动到其他不同宽度的区域时,需求重新计算宽度,这时候就需求刷新Portlet内容以触发宽度的重新计算。在Portlet内容页面中实现以下函数,并前往true值:function afterPortletDrop(toWidth) return true;其中,是用于防止JS变量或函数命名冲突的标识关于JS脚本变量和函数命名约束以及该标识如何获得等问题请参考2.5.3节,该标识必需加上,否那么框架无法判别需求刷新哪个Portlet。参数toWidth为目的区域的宽度值,由框架传送,在该函数内可用该参数值进

36、展一些必要的处置。不实现该函数或者函数前往true以外的值,那么拖动Portlet后,Portlet内容不刷新。4其他Portal途径:kingdee.portalmon.portalContextPath;其值如::6888/easportalPortal当前颜色方案皮肤途径:kingdee.portalmon.portalSkinPath;其值如::6888/easportal/skin/01添加CSS款式文件到门户的head区域kingdee.portalmon.addStyleSheet(cssFilePath);其中cssFilePath为CSS文件的途径,用法例如:kingdee.

37、portalmon.addStyleSheet();注,并不一定要运用WebContextUtil.render方法来获得CSS文件的途径,可以直接如下运用:kingdee.portalmon.addStyleSheet(/html/portlet/example/demoPortlet.css);但是,运用WebContextUtil.render方法获取文件可获得紧缩特性,建议运用该方法。最大化Portletkingdee.portalmon.maxizePortlet(windowTitle, servletUrl, params);其中,windowTitile为最大化Portlet时

38、,窗口的标题,servletUrl为最大化Portlet所运用的url地址,params为需求传送的参数2.5.3 Portlet内容页面制造规范与约束1业务JSP代码文件放置规范二次开发的业务JSP代码受维护的需求放到server/deploy/eas.ear/cp_web.war/html/custom目录下。非受维护的需求放到server/deploy/eas.ear/cp_web.war/custom目录下。EAS规范产品的业务JSP代码受维护的需在server/deploy/eas.ear/cp_web.war/html/portlet目录下建立对应的业务系统子目录,并放置对应的业务

39、JSP代码。非受维护的在server/deploy/eas.ear/cp_web.war/biz目录下建立对应子目录,并放置对应业务JSP代码。受维护和非受维护的区别受维护的JSP页面必需求经过EAS Portal登录后才干访问,非受维护是指不需求EAS Portal登录就可以访问。2JS代码文件放置规范JS文件放置到以下目录:server/deploy/eas.ear/cp_web.war/common/js/各业务部门请自行在js目录下建立子文件夹,以区分框架和其他部门的JS代码。该目录下包括子目录的一切JS文件在构建时都会自动进展紧缩,将JS文件放置在其他目录将不会获得紧缩特性。3Por

40、tlet内容页面中,JS脚本变量和函数命名约束重要在一个HTML文档内,JavaScript全局变量和函数命名必需独一,否那么会被后定义的覆盖。由于EAS门户中,不同页签,不同Portlet的内容最终将输出到一个HTML文档中,为了防止不同的Portlet内定义一样称号的JS变量或者在不同的页签内包含一样的Portlet定义,必需保证Portlet之间全局JS变量名和函数名独一。提示:只需Portlet内容页面JSP片段需求思索命名问题,保证全局变量和函数命名独一,其他独立的页面包含完好的HTML标签的页面,如运用iframe方式嵌入的页面、Portlet业务设置页面等那么不需求思索该问题。最

41、正确实际:尽量少运用全局变量。大量地运用全局变量将添加变量命名冲突的几率,应该谨慎运用全局变量。关于如何减少JS全局变量和函数数量的方法请见2.5.4节。补充知识:在JS函数内,运用var关键字定义变量,变量的作用域为部分作用域,假设不运用var关键字,那么为全局作用域。JS函数内的部分变量定义时都应该加上var关键字。运用以下两种接口之一,均可获得与当前Portlet实例相关的全局独一标识“指纹信息。为Portlet内容页面中JS脚本的每个全局变量和函数加上该标识,那么可保证该Portlet实例的JS全局变量和函数在EAS门户中全局独一,防止不同Portlet之间以及不同页签一样Portle

42、t不同实例之间的JS变量和函数命名冲突。接口1:运用com.kingdee.eas.portal.web.util.PortletUtil例如:/ fp is short for fingerprintString fp = PortletUtil.getFingerprint(request);接口2:运用com.kingdee.eas.portal.web.util.PortletIndexGenerator例如:/ fp is short for fingerprintString fp = PortletIndexGenerator.nextPortletIndex(request);

43、两种接口的区别:接口1既可以在Portlet内容页面中运用,也可以在Portlet业务设置页面中运用见第3章;而接口2只能在Portlet内容页面中运用。获得“指纹信息后例如中为Java变量fp,为每个全局变量和函数加上该标识,代码例如如下:var a = 1;var b = 2;function fnOne() function fnTwo() a href=# onclick=fnTwo()My Link上面的例子中,一共定义了4个全局变量包括函数,通常情况下,应尽量控制全局变量的数量,关于如何减少JS全局变量和函数数量的方法请见2.5.4节。留意:该约束必需严厉执行,以防止影响框架和Po

44、rtlet的功能。4Portlet内容页面中,CSS款式命名规范重要和JS脚本变量和函数命名需求全局独一一样,CSS中的class和id命名也需求思索到全局影响的情况。提示:只需Portlet内容页面JSP片段需求思索命名问题,保证class和id命名独一,其他独立的页面包含完好的HTML标签的页面,如运用iframe方式嵌入的页面、Portlet业务设置页面等那么不需求思索该问题。页面中的元素id属性值需求保证全局独一,这就需求进展类似JS脚本中变量命名约束的操作,如:div id=test-div-假设id值不添加独一标识,那么在页面中存在一样Portlet的多个实例能够位于不同页签内时,

45、页面中将出现多个id一样的元素,这将对款式或脚本产生影响。在Portlet内容页面中书写CSS款式有两种方式:在标签中加上style属性这种方法最直接,而且由于优先级最高,可以防止Portlet内容的款式遭到Portal全局款式的影响,但维护起来比较费事。引入外部CSS文件这种方法可以对Portlet内容的款式进展一致管理,方便维护。运用JS脚本引入外部CSS文件的方法如下:kingdee.portalmon.addStyleSheet();红色部分交换成实践的CSS文件地址。关于该JS接口在2.5.2 节Portlet内容页面JS接口已有详细论述。留意:不要在Portlet内容页面中直接运用

46、标签引入款式,框架目前不支持这种方式。可以运用标签来书写款式,但并不引荐,由于页面中存在一样Portlet的多个实例时,这些款式将被包含多次,当然,这通常不会是什么大问题。运用函数kingdee.portalmon.addStyleSheet添加款式文件时,即时页面中存在一样Portlet的多个实例,款式文件也只会在页面头部加载一次。运用引入外部CSS文件的方式时,CSS款式的命名需遵照以下规范:kpp-xxx-yyykpp前缀代表Kingdee Portal Portletxxx为模块称号,如mycalendar以“例如Portlet为例,其CSS款式的命名如下所示:.kpp-demopor

47、tlet-table .kpp-demoportlet-class-selector-name 2.5.4 Portlet内容页面制造常见问题1如何嵌入一个完好JSP页面?可以在JSP页面中嵌入iframe帧构造,场景:EAS Portal中嵌入的OA页面,详细可参考以下文件:server/deploy/eas.ear/cp_web.war/custom/yiruan_oa.jsp 2如何提交页面数据?翻开新窗口进展处置运用最大化Portlet进展处置运用Ajax技术来提交。目前成熟的Ajax框架很多,EAS门户中采用的是Buffalo框架,相关开发指南见“附录3 Ajax之Buffalo开发

48、指南。3如何直接执行SQL语句?import com.kingdee.eas.util.app.DbUtil;import com.kingdee.jdbc.rowset.IRowSet;Context userCtx = WebContextUtil.getEasContext(request);/执行查询IRowSet rowSet = DbUtil.executeQuery(ctx, select * from t_pm_user);if (rowSet != null) while (rowSet.next() String user = rowSet.getString(fnumbe

49、r);/执行更新DbUtil.execute(ctx, update t_pm_user set fname_l2=zhangsan where fnumber=00201);4我觉得我的JS脚本中全局变量和函数的命名曾经很规范了,比如都加了前缀xxx_yyy_zzz,是不是就可以不运用框架提供的方法进展变量和函数命名的修正呢?恐怕不行。由于即使命名曾经做了规范,还是有能够与其他Portlet或框架的JS变量和函数产生冲突。即使可以保证和其他Portlet或框架不产生冲突,不同页签下一样Portlet不同实例的代码一定也会产生冲突。比如页签1下有Portlet1的实例PortletIns1,其

50、中运用了全局JS变量a,页签2下有Portlet1的实例PortletIns2,必定也运用了一样的全局JS变量a,由于不同页签之间的Portlet的代码都在同一个EAS门户的HTML中,所以JS变量产生了冲突。所以,请务必按照2.5.3节第2点的方法进展JS脚本全局变量和函数的命名规范。5如何尽量少地定义JS脚本中的全局变量函数?可参考以下风格:var mycalendar = a: 1, b: 2, fnOne: function() , fnTwo: function() a href=# onclick=mycalendar.fnTwo()My Link运用该方式,只需定义1个全局变量m

51、ycalendar,其他变量或函数都是部分变量,不会呵斥命名冲突。6原有的Portlet中的代码主要是JS代码需求按照JS变量和函数命名规范进展修正吗?假设运用的是新的门户框架,那么必需进展代码重构。需求进展JS代码重构的页面仅仅是那些对门户全局JS变量和函数有影响的页面,如Portlet内容页面,而对于其他完好的页面包含完好的HTML,如、等标签,如Portlet业务设置页面,以iframe方式嵌入到Portlet内容页面的页面,那么不需求进展JS代码重构,由于他们对门户全局JS变量和函数不会产生影响。7旧Portlet的JS代码中包含了很多全局变量和函数,一个个修正似乎比较费事,有更快的方

52、法吗?假设他的JS脚本中存在大量的全局变量,逐个交换比较费事,那么可运用以下的方法,运用1个全局变量来“包装他的旧代码:假设他的旧代码如下:var var1 = 1;var var2 = 2;var var3 = 3;var var4 = 4;function fn1() function fn2() function fn3() 其中在HTML中运用了fn1和fn2两个函数重构过程如下:定义1个全局变量,并运用某个方法例如中为init方法来初始化包装他的旧代码块:var myapp = init: function() / 旧代码块 / var var1 = 1; var var2 = 2;

53、 function fn1() / 旧代码块 / myapp.init();检查原有代码中,在HTML里运用了哪些函数,这里只运用了fn1和fn2两个函数。在新代码的init方法中为这两个函数提供对外的“接口:var myapp = init: function() / 旧代码块 / var var1 = 1; var var2 = 2; function fn1() / 旧代码块 / / 提供对外的“接口 this.fn1 = fn1; this.fn2 = fn2; myapp.init();如今在HTML中这样运用函数:a href=# onclick=myapp.fn1()a href

54、=# onclick=myapp.fn2()以下图展现了该重构的过程:图2-3 重构过程例如这种方法适用于存在大量全局变量的页面,可减少交换全局变量的数量。2.5.5 Portlet内容页面HTC控件的交换在前面的一段时间,门户控件根本已由HTC交换为EXT控件,因此为提高门户性能,本次优化去除了门户在TOP页面中的HTC控件引入。修正能够呵斥相关业务Portlet或业务页面的原有的HTC控件不可用。处理方案:将HTC控件交换为EXT控件建议EXT控件的根本文件门户曾经在TOP中进展引入。因此业务portlet页面或其他内置页面可直接运用。门户运用的EXT版本为2.0 RC 1留意:单独翻开的

55、页面以及业务portlet中嵌入的iframe等,需求重新自行引入ext的类库。引入文件参见cp_web.warhtmlcommontop.jsp自行引入HTC控件不引荐假设还是想运用原有的HTC或暂时不想交换,需在本人的页面自行引入HTC控件如下两个文件引入了一切原有的HTC控件,假设他只是想运用其中一两种,请在top_htc_js.jsp文件中找到本人的HTC控件作单独引入交换为EXTJS控件方式:用EXT控件交换HTC直接运用EXT的规范控件即可。以下以button控件交换为例在原有的标签中如然后写一个JavaScript函数创建一个EXT控件即可function initButton(

56、)new Ext.Button(renderTo: myBtn,text: 更多,handler: btnClick);这样在运转时直接渲染一个Ext的按钮到标签中详细EXT控件运用可参考EXTJS开源类库2.5.6 门户优化合并且删除了部分js此处优化门户对各种KD扩展ext的js文件进展了合并。为了不维护两份代码添加任务量。对被合并的js进展了删除。/common/js/extsp/js/compenent/KDMultiLangBox.js/common/js/extsp/js/compenent/KDLabel.js/common/js/extsp/js/compenent/KDPor

57、tlet.js/common/js/extsp/js/compenent/KDPagingToolBar.js/common/js/extsp/js/compenent/KDTabPanel.js/common/js/extsp/js/compenent/KDYStyleTabPanel.js/common/js/extsp/js/compenent/KDTabPanelMenu.js/common/js/extsp/js/compenent/KDTabPanelForColumn.js/common/js/extsp/js/compenent/KDTabPanelLoadScript.js合

58、并为:/common/js/extsp/KDUxCompenent.js/common/js/extsp/js/menu/KDMenu.js/common/js/extsp/js/menu/KDDateMenu.js/common/js/extsp/js/menu/KDDateItem.js/common/js/extsp/js/menu/KDDatePicker.js合并为:/common/js/extsp/KDUxMenu.js/common/js/extsp/js/layout/KDCardLayout.js/common/js/extsp/js/layout/KDTableLayout

59、2.0.js/common/js/extsp/js/layout/KDDivTableLayout2.0.js合并为:/common/js/extsp/KDUxLayout.js合并js都是纯粹的将js文件内容拷贝到一个大的js文件中。假设业务portlet如流程中心单独引入了这些js,请修正引入文件,否那么能够会出现脚本错误。目前有两种方式处置:一是引入合并后的js文件。例如之前引入了KDTabPanelForColumn.js.请修正为引入KDUxCompenent.js。这样的一点影响是他只运用其中一个js内容,但是必需把整个大文件的内容引入。二是在KDUxCompenent.js中拷贝

60、出对应组件的js代码,本人新建一个js文件自行引入。第3章 Portlet业务设置Portlet业务设置页面为独立的JSP页面,Portlet开发者可在Portlet业务设置页面进展相关业务逻辑的编写如保管用户的设置信息等。Portlet业务设置页面分为两种类型:1定义期的Portlet业务设置页面在此进展的设置对全部Portlet实例有效。该设置位于:门户-配置管理-Portlet管理-设置-业务设置图3-1 Portlet定义期业务设置页面2运转期的Portlet业务设置页面在此进展的设置只对当前Portlet实例有效。该设置位于:详细的某个Portlet实例-右上角设置按钮-业务设置 图

温馨提示

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

最新文档

评论

0/150

提交评论