书签 分享 收藏 举报 版权申诉 / 52

类型金蝶BOS企业版V开发指南管理门户Portlet开发.docx

  • 文档编号:16564220
  • 上传时间:2023-07-14
  • 格式:DOCX
  • 页数:52
  • 大小:65.61KB

下图展示了Portlet内容页面以及Portlet业务设置页面。

图2-1Portlet内容页面

图2-2Portlet业务设置页面

Portlet内容页面由相关的各业务部门根据各自的业务需求具体实现。

EAS门户框架在Portlet内容页面上下文中提供了相应的接口以帮助开发人员完成具体业务逻辑的编写。

2.5.1Portlet内容页面JSP接口

(1)获取EAS上下文(Context)

使用工具类WebContextUtil的getEasContext()方法。

示例:

<%@pageimport=""%>

ContextuserCtx=(request);

(2)获取上下文中的用户、组织、职员等信息

使用工具类ContextUtil,示例:

<%@pageimport=""%>

...

Stringname=null;

PersonInfopersonInfo=(ctx).getPerson();

if(personInfo!

=null){

name=();

}

(3)调用服务器端方法

打补丁PTM035205之前:

与ControlBean中调用本地方法一样,示例:

Contextctx=(request);

IMessageCenteriMessageCenter=(ctx);

IRowSetrowset=();

打补丁PTM035205之后:

IMessageCenteriMessageCenter=();

IRowSetrowset=();

(4)Portlet操作

使用接口,该接口提供以下方法:

·禁用Portlet(含批量处理):

disablePortlet

·启用Portlet(含批量处理):

enablePortlet

·作废Portlet:

deletePortlet

·新增Portlet(无返回值):

addPortlet

·新增Portlet(返回新建ID):

addPortletReturnId

·更新Portlet:

update

·刷新Portlet缓存:

refreshPortletCache

·获取Portlet:

getPortlet

注意:

·所有与Portlet相关的操作,如添加、删除、更新等,都必须使用该接口,不要直接调用IPortlet接口对Portlet进行操作;

·进行Portlet操作(获取Portlet除外)后,在最后务必使用refreshPortletCache来刷新Portlet缓存数据。

示例:

IPortalServiceFacadeservice=(ctx);

(portletID);

();

对PortletExtInfo的操作,由于PortletInfo包含PortletExtInfo,因此同样通过接口进行,举例如下:

(其中,portletInfo为PortletInfo的实例)

·添加PortletExtInfo

PortletExtInfoportletExtInfo=newPortletExtInfo();

("自定义Portlet标题");

("/html/portlet/example/");

("/html/portlet/example/");

(portletExtInfo);

IPortalServiceFacadepsf=(ctx);

2.5.2P.

}

在Portlet内容页面中使用Buffalo时请直接使用以上两个对象,不必重新创建Buffalo对象。

在上一版本中,框架提供的Buffalo对象名称分别为:

buffalo:

异步方式

buffalo1:

同步方式

这两个对象在门户框架新版本中仍然保留,但不建议使用。

请使用buffaloAsync和buffaloSync。

注意,如果需要创建新的Buffalo对象,请避免使用buffaloAsync、buffaloSync、buffalo、buffalo1这4个变量命名,否则将会覆盖这些框架提供的Buffalo对象。

(2)打开客户端GUI界面

invokeFunction(uiClass,uiClassParam,uiOprt,openMethod);

createModelUI(uiClass);

createNewWinUI(uiClass);

createNewTabUI(uiClass);

openEasMainMenu();

其中uiOprt可设置为字符串:

ADDNEW、VIEW、EDIT

ADDNEW:

新增

VIEW:

查看

EDIT:

编辑

openMethod可设置为数字:

50、80、及其他数字

50:

模态窗口

80:

新开窗口

其他值:

新开页签

单据查看GUI界面接口:

viewBill(billId);

参数为单据ID(单据的UUID,非单据编号),EAS门户页面在不同帧下调用方式略有不用,门户各页签Portlet(比如我的日历,我的工作台等)标准调用方式为直接调用:

viewBill('63fYLq2CTOCwsBgFdet+6Qneydw=');

而各自页签加入了帧(frame)的情况下(如流程中心加入了newMessage

Frame),需要如下调用:

('63fYLq2CTOCwsBgFdet+6Qneydw=');

其他多层帧的情况以此类推,需要通过parent或者top等方式获取上层的JS函数来调用。

更多关于打开GUI界面的函数请参考以下文件:

server/deploy/common/js/

(3)拖动Portlet后刷新Portlet内容

该功能常用于Portlet宽度需要自适应的场景,如“通知Portlet”和“待办事项Portlet”,由于这两个Portlet的宽度由JS动态计算而得,所以当他们移动到其他不同宽度的区域时,需要重新计算宽度,这时候就需要刷新Portlet内容以触发宽度的重新计算。

在Portlet内容页面中实现以下函数,并返回true值:

functionafterPortletDrop<%=fp%>(toWidth){

returntrue;

}

其中,<%=fp%>是用于避免JS变量或函数命名冲突的标识(关于JS脚本变量和函数命名约束以及该标识如何获得等问题请参考2.5.3节),该标识必须加上,否则框架无法判断需要刷新哪个Portlet。

参数toWidth为目标区域的宽度值,由框架传递,在该函数内可用该参数值进行一些必要的处理。

不实现该函数或者函数返回true以外的值,则拖动Portlet后,Portlet内容不刷新。

(4)其他

·Portal路径:

其值如:

当前色彩方案皮肤路径:

其值如:

添加CSS样式文件到门户的head区域

其中cssFilePath为CSS文件的路径,用法示例:

'<%=(request,"/html/portlet/example/")%>');

注,并不一定要使用方法来获得CSS文件的路径,可以直接如下使用:

'/html/portlet/example/');

但是,使用方法获取文件可获得压缩特性,建议使用该方法。

·最大化Portlet

servletUrl,params);

其中,windowTitile为最大化Portlet时,窗口的标题,servletUrl为最大化Portlet所使用的url地址,params为需要传递的参数

2.5.3Portlet内容页面制作规范与约束

(1)业务JSP代码文件放置规范

·二次开发的业务JSP代码

受保护的需要放到server/deploy/html/custom目录下。

非受保护的需要放到server/deploy/custom目录下。

·EAS标准产品的业务JSP代码

受保护的需在server/deploy/html/portlet目录下建立对应的业务系统子目录,并放置对应的业务JSP代码。

非受保护的在server/deploy/biz目录下建立对应子目录,并放置对应业务JSP代码。

·受保护和非受保护的区别

受保护的JSP页面必须要通过EASPortal登录后才能访问,非受保护是指不需要EASPortal登录就可以访问。

(2)JS代码文件放置规范

JS文件放置到以下目录:

server/deploy/common/js/

各业务部门请自行在js目录下建立子文件夹,以区分框架和其他部门的JS代码。

该目录下(包括子目录)的所有JS文件在构建时都会自动进行压缩,将JS文件放置在其他目录将不会获得压缩特性。

(3)Portlet内容页面中,JS脚本变量和函数命名约束(重要)

在一个HTML文档内,JavaScript全局变量和函数命名必须唯一,否则会被后定义的覆盖。

由于EAS门户中,不同页签,不同Portlet的内容最终将输出到一个HTML文档中,为了避免不同的Portlet内定义相同名称的JS变量或者在不同的页签内包含相同的Portlet定义,必须保证Portlet之间全局JS变量名和函数名唯一。

提示:

只有Portlet内容页面(JSP片段)需要考虑命名问题,保证全局变量和函数命名唯一,其他独立的页面(包含完整的HTML标签的页面,如使用iframe方式嵌入的页面、Portlet业务设置页面等)则不需要考虑该问题。

最佳实践:

尽量少使用全局变量。

大量地使用全局变量将增加变量命名冲突的几率,应该谨慎使用全局变量。

关于如何减少JS全局变量和函数数量的方法请见2.5.4节。

补充知识:

在JS函数内,使用var关键字定义变量,变量的作用域为局部作用域,如果不使用var关键字,则为全局作用域。

JS函数内的局部变量定义时都应该加上var关键字。

使用以下两种接口之一,均可获得与当前Portlet实例相关的全局唯一标识(“指纹”信息)。

为Portlet内容页面中JS脚本的每个全局变量和函数加上该标识,则可保证该Portlet实例的JS全局变量和函数在EAS门户中全局唯一,避免不同Portlet之间以及不同页签相同Portlet不同实例之间的JS变量和函数命名冲突。

接口1:

使用示例:

2.5.42.5.2pp-demoportlet-table{}

.kpp-demoportlet-class-selector-name{}

……

2.5.4Portlet内容页面制作常见问题

(1)如何嵌入一个完整JSP页面?

可以在JSP页面中嵌入iframe帧结构,场景:

EASPortal中嵌入的OA页面,具体可参考以下文件:

server/deploy/custom/

(2)如何提交页面数据?

·打开新窗口进行处理

·使用最大化Portlet进行处理

·使用Ajax技术来提交。

目前成熟的Ajax框架很多,EAS门户中采用的是Buffalo框架,相关开发指南见“附录3Ajax之Buffalo开发指南”。

(3)如何直接执行SQL语句?

importuserCtx=(request);

2.5.3nTwo()">MyLink

使用该方式,只需定义1个全局变量mycalendar<%=fp%>,其他变量或函数都是局部变量,不会造成命名冲突。

(6)原有的Portlet中的代码(主要是JS代码)需要按照JS变量和函数命名规范进行修改吗?

如果使用的是新的门户框架,那么必须进行代码重构。

需要进行JS代码重构的页面仅仅是那些对门户全局JS变量和函数有影响的页面,如Portlet内容页面,而对于其他完整的页面(包含完整的HTML,如、、等标签),如Portlet业务设置页面,以iframe方式嵌入到Portlet内容页面的页面,则不需要进行JS代码重构,因为他们对门户全局JS变量和函数不会产生影响。

(7)旧Portlet的JS代码中包含了很多全局变量和函数,一个个修改似乎比较麻烦,有更快的方法吗?

如果你的JS脚本中存在大量的全局变量,逐个替换比较麻烦,则可使用以下的方法,使用1个全局变量来“包装”你的旧代码:

假设你的旧代码如下:

varvar1=1;

varvar2=2;

varvar3=3;

varvar4=4;

......

functionfn1(){

}

functionfn2(){

}

functionfn3(){

}

……

其中在HTML中使用了fn1和fn2两个函数

重构过程如下:

定义1个全局变量,并使用某个方法(示例中为init方法)来初始化(包装)你的旧代码块:

varmyapp<%=fp%>={

init:

function(){

nit();

检查原有代码中,在HTML里使用了哪些函数,这里只使用了fn1和fn2两个函数。

在新代码的init方法中为这两个函数提供对外的“接口":

varmyapp<%=fp%>={

init:

function(){

nit();

现在在HTML中这样使用函数:

.fn1()">

.fn2()">

下图展示了该重构的过程:

图2-3重构过程示例

这种方法适用于存在大量全局变量的页面,可减少替换全局变量的数量。

2.5.5Portlet内容页面HTC控件

配套讲稿:

如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

特殊限制:

部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

关 键  词:
金蝶 BOS 企业版 开发 指南 管理 门户 Portlet
提示  冰点文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:金蝶BOS企业版V开发指南管理门户Portlet开发.docx
链接地址:https://www.bingdoc.com/p-16564220.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2


收起
展开