NCV6开发平台技术红皮书文档格式.docx
《NCV6开发平台技术红皮书文档格式.docx》由会员分享,可在线阅读,更多相关《NCV6开发平台技术红皮书文档格式.docx(53页珍藏版)》请在冰豆网上搜索。
5.6.1创建Portlet事件28
5.6.2触发Portlet事件28
5.6.3响应Portlet事件29
5.6.4Portlet事件输出29
5.7Portlet参数30
5.8Portlet参数编辑器30
5.9Portlet发布31
5.10.1发布portlet31
5.10.2更新发布的portlet32
第六章主题开发34
6.1概述35
6.2页面样式35
6.3布局样式35
6.4Portlet样式36
6.5皮肤37
第七章门户高级功能38
7.1登录前后处理,指定登录后页面39
7.2登录链39
7.3CA登录41
7.4域认证42
7.5第三方登录42
7.6门户扩展点43
7.7门户设置45
7.8门户FreeMarker扩展46
7.9门户模块配置47
7.10门户统一身份认证49
第一章Portal简介
UAPPortal是基于JSR286规范而实现的一套J2EE技术体系架构的Portal。
它构建于UAP平台之上,提供了灵活而丰富的个性化和管理定制功能。
UAPPortal允许多种安全认证方式和自选第三方系统用户来源,采取了基于角色访问控制(RBAC)的权限模型。
并提供了完善和通用的第三方系统集成框架和单点登录框架,UAPPortal发版默认集成NC、IUFO、BO、自定义查询报表应用,实施SSO比商业Portal简单易用。
它提供的Portal管理功能,允许管理员在运行态对Portal进行定制,而无需重启甚至编码。
同时,内建的换肤机制使得实现自定义皮肤非常简单。
UAPPortal提供了引入了一套开发工具,,使得Portal开发非常简单。
Portal页面元素截图介绍如下:
上图即是门户的一个布局页面,页面中红色方框区域就是组成该布局的各个portlet,每个portlet可以自由定制自己的皮肤、样式和内容。
蓝色框区域是其他布局页面。
第二章Portal架构图
第三章预制Portlet
本章内容概要:
●框架Portlet
●TriggerIframePortlet与MonitorIframePortlet
●FreeMarkerPortlet
●任务Portlet
●菜单Portlet
3.1框架Portlet
框架Portlet是一通用简单集成Portlet,可用于管理员为所有用户定制内容。
管理员可定制此Portlet完成对一现存站点的引入,可以定义任意数量。
比如:
将常用站点http:
//ufpark/PortalDefault.aspx引入Portal的一个页签中,只需要做下面几步:
1)系统管理>
应用平台管理>
门户配置>
布局管理中选择新建系统布局,选择框架Portlet并拖入,点击保存。
示意图如下:
2)在布局管理中刷新并展开刚创建的布局,找到刚刚加入的框架portlet,设置其链接地址属性,指明url地址。
对于一个布局中只有一个框架portlet的情况,设置高度为0,这样IFramePortlet的高度会自动调整来适应页面的高度,设置完成后保存。
3)需浏览此布局的用户注销重新登陆,即可看到此布局。
该Portlet可以配置的个性化信息如下:
3.1.1if_height
说明
设置ifreame的高度
可选值
0:
适应页面大小,撑满页面
-1:
适应内容高度
其它:
指定像素的高度
举例
<
preference>
name>
if_height<
/name>
<
value>
-1<
/value>
read-only>
false<
/read-only>
/preference>
3.1.2if_src
指定ifreame内容的url
取值方式
方式1:
从公共参数里取(如Url传参的形式);
方式2:
从属性里取;
注:
公共参数优先级较高
if_src<
description>
链接地址<
/description>
!
[CDATA[/portal/pages/view.jsp]]>
使用Url传参的形式,举例截图如下:
3.1.3if_width
指定iframe的宽度
百分比:
如100%
if_width<
100%<
开发过程:
在Portlet上点击右键,从模板新建Portlet,选择IframePortlet,输入id,名称及嵌入的URL即可。
在编辑器右边属性栏中可修改portlet对应的类、描述等信息。
在下方模型视图中配置此portlet的具体属性。
3.2TriggerIframePortlet与MonitorIframePortlet
TriggerIframePortlet是可以触发switchIframeContentEvent事件的框架Portlet,它继承自框架Portlet。
该portlet会触发switchIframeContentEvent事件,监听switchIframeContentEvent的portlet会响应该事件。
常见的监听Portlet有MonitorIFramePortlet及其子类。
使用举例:
通过该portlet可以设置响应switchIframeContentEvent事件的url。
示例代码如下:
document.getContainer().doAction(url)
MonitorIframePortlet是监听switchIframeContentEvent事件的IframePortlet,常与TriggerIframePortlet共同使用。
当是自定义触发的Portlet时应将switchIframeContentEvent加入support-publish-event,不建议在一个Page中引用两个MonitorIframePortlet。
3.3FreeMarkerPortlet
套用FreeMarker模板的Portlet,该portlet主要用于解析FTL文件路径并把ftl文件内容渲染成Html。
3.3.1继承Portlet
(1)创建一个类继承自FreeMarkerPortlet,代码示例如:
(2)在该类所在包(nc.test)下创建一个同名的ftl文件FreeMarkerPortlet.ftl
3.3.2编辑Portlet
(1)在Portlets节点上点击鼠标右键,可新建portlet分类或直接新建portlet。
(2)输入Portlet的id及name,点击OK按钮。
新建并打开portlet编辑器。
(3)在编辑器右边属性栏中可修改portlet对应的类设置为刚才新建的类nc.test.FreeMarkerPortlet即可。
3.4任务Portlet
任务portlet主要包括任务列表的查询、单据类型、任务处理的URL、显示字段的获取、和指令的执行。
3.4.1查询任务列表
查询任务列表:
/**
*查询任务列表.
*/
WfmTaskVO[]qryTaskList(TaskQryParamparam,PaginationInfopinfo);
参数说明:
param任务查询参数,包括状态、系统、单据类型、关键字、当前用户等。
Pinfo:
分页信息
返回:
任务列表
3.4.2获取单据类型
获得单据类型:
*获得单据类型
WfmFlwTypeVO[]getBillTypes();
3.4.3获取任务处理URL
获得任务处理的URL:
*获得任务处理URL
TaskProcessUIgetTaskProcessUrl(Stringpk_task);
pk_task任务的主键
任务UI界面
3.4.4批量任务更新
批量任务更新:
*批量任务执行
StringdoMutiTaskProcess(String[]pk_task);
通过多个任务的id进行多个任务更新操作。
3.4.5显示获取字段
显示字段的获取:
*获取显示的字段
Map<
String,String>
getVisableColumn(Stringbilltype);
通过单据类型查询需要显示的字段。
3.4.6执行命令
执行命令:
*执行命令
voiddoCmd(Stringcmd,Stringpk);
根据不同的指令走相应的url,如根据是“便签”或是“催办”,分别执行“/portal/pt/task/scratchpad”和“/portal/app/mockapp/urgencyView”的链接。
3.5菜单Portlet
3.5.1我的功能Portlet
该portlet主要功能是显示菜单组,分为绑定菜单和动态集成菜单。
3.5.1.1绑定菜单
绑定菜单即为布局绑定一个菜单,有“系统管理”权限的用户登录,在“门户配置”的“布局管理”模块,选择一个布局,点击“高级设置”即可打开布局菜单绑定页面,选择一个“绑定连接组”即可完成菜单绑定,示意图如下:
3.5.1.2动态集成菜单
动态集成菜单主要是通过虚菜单接口在页面的绑定,具体实现类去完成菜单的动态的生成。
如NC系统的消息通过虚菜单的实现进行动态抓取,并在我的功能区进行显示。
虚菜单接口IVirtualMenuProvider说明如下:
//获取菜单项
List<
MenuItemAdapterVO>
getMenuItems();
//消息状态数目
IntegergetStat();
3.5.2浮动菜单
浮动菜单Portlet主要是显示界面上Portal页面绑定的菜单。
开发方式:
(1)系统管理>
应用平台管理>
布局管理中打开布局设计器。
拖放一个浮动菜单Portlet.选中该Portlet.设置样式为浮动。
(2)选中步骤1创建的布局.点高级设置.选择一个绑定菜单。
3.5.3页签Portlet
页签Portlet是门户提供的一种菜单展现样式.以Tab页的形式来展示菜单的内容。
布局管理中打开布局设计器.拖放一个页签Portlet。
(2)展开步骤1创建的布局,选择页签Portlet,点高级设置.选择一个菜单。
页签Portlet可以设置高度宽度。
3.5.4OutLook导航Portlet
Outlook导航Portlet是门户提供的一种菜单展现样式。
以OutLook导航的形式来展示菜单的内容。
拖放一个OutLook导航Portlet。
(2)拖入一个布局,选中;
点击样式下拉框,选择”框架布局”并保存。
(3)展开步骤1创建的布局,选择页签Portlet,点高级设置.选择一个菜单;
也可以在此设置OutLook导航Portlet的高度与宽度。
注意:
为了实现在页签内打开OutLook导航Portlet选中的菜单项,需要在当前页面中的一个布局样式设置为框架布局。
该布局与正常布局一样,可以容纳Portlet。
但是在收到OutLook的请求时会将布局内容切换到菜单项界面。
第四章Portal界面
●概念
●创建Portal界面
●布局设计
●布局分配
●多级布局
●绑定菜单
4.1概念
UAPPortal使用Pml界面组件结构标记语言对页面进行描述。
Pml包括布局(Layout)对象及Portlet对象。
布局可嵌套布局和Portlet,从而组成相对复杂的界面。
一个页面中的portlet不能重复。
4.2创建Portal界面
在“Portal页面”节点上点击鼠标右键新建page页面。
输入id及tilte,点击ok按钮,新建Page完成,并打开page编辑器。
在page编辑器中进行page布局配置。
4.3布局设计
1
2
3
4.3.1布局排序
布局排序是指在布局列表中“是否主页”的那一列,是主页的分组会按照优先级排序,不是主页的分组也会按照优先级进行排序。
4.3.2布局Icon
4.3.2.1设置布局Icon
布局Icon是为已创建的布局设置绑定的图标,示意图如下:
4.3.2.2获取图标
通过步骤1设定好布局的菜单和图标后,可以通过导航栏菜单项获取其图标。
示意代码如下:
获取页签
Page[]myPages=PortalPageDataWrap.getUserPages();
PageMenumenu=PortalPageDataWrap.getUserMenu(myPages);
String,Object>
root=newHashMap<
();
Root.put(“USER_MENU”,MENU);
Ftl文件
#assignmenuitems=USER_MENU.items>
获取图标
imgsrc="
${menuitem.icon}"
/>
4.3.3布局禁用
布局禁用是停止用户使用该布局,通过“布局管理”的“高级设置”,把“是否启用”开关关闭即可。
4.3.4布局复制粘贴
布局的复制和粘贴是方便布局快速高效的重用,通过选中要重用的布局点击“复制”按钮即可获得该布局的一份拷贝,选择要放入的组织后点击“粘贴”按钮即可把拷贝的布局复制到目标组织下。
4.4绑定菜单
绑定菜单是为布局设置菜单,设置菜单后可以直接通过菜单使用该布局,绑定示意图如下:
第五章Portlet开发
●Portlet容器
●Portlet分类
●Portlet视图
●Portlet资源
●Portlet动作
●Portlet事件
●Portlet参数
●Portlet参数编辑器
●Portlet权限分配
●Portlet发布
5.1Portlet容器
5.1.1获得Portlet容器
场景1:
JSP页面中
script>
getContainer(‘#<
%=indowed%>
’);
/script>
场景2:
IframePortlet页面中
document.getContainer();
注意:
(1)在Iframe中获得容器,必须保证iframe页面与Portal在同一个域下。
(2)要判断Iframe中是否已经注入了此函数。
5.1.2使用Portlet容器
Portlet容器提供的函数:
方法
名称
必须
参数作用
返回值
备注
createPart*
title
是
标题
新创建的链接块
在Portlet窗口上创建一个链接块
href
链接
createSep*
segment
否
分隔符
新创建的块
在Portlet窗口上创建一个分割块
createBlankPart*
-
在Portlet窗口上创建一个空白块
setTitle*
标题对象
设置标题
setContent*
content
内容
内容对象
设置内容
setExposed*
当前容器
隐藏外框
setUnExposed*
恢复外框
doMax*
窗口最大化
doReSize*
窗口复原
showTips*
显示提示框
hideTips*
隐藏提示框
doView
切换到查看模式
doEdit
切换到编辑模式
doHelp
切换到帮助模式
doRefresh
timesamp
时间间隔
设置刷Portlet新周期
doAction
调用Portlet默认事件ProcessAction
frameUrl
链接地址
调用Portlet默认的事件,并传递一个frameUrl参数
name
事件名称
调用指定的Portlet动作
param
参数列表
getOuter
最外层的布局
获得最外层的布局
getRow
所在列
获得所在的列
标有*号的方法可以重载。
5.2Portlet分类
Portlet分类是为了让Portlet更容易查找,在Portlets节点上点击鼠标右键选择“新建Portlet分类”,弹出新建Portlet分类对话框。
输入ID、text、i18nName后点击OK按钮,Portlet分类创建成功。
在建好的Portlet分类上点击鼠标右键。
可以在分类中新建Portlet,或编辑、删除当前分类。
5.3Portlet视图
UAPPortal6.0支持“查看”、“编辑”、“帮助”三种标准视图,有关视图的信息,请参考JSR286规范。
UAPPortal6.0支持“最大化”、“正常”、“最小化”三种模式,有关模式的信息,请参考JSR286规范。
5.4Portlet资源
UAPPortal6.0支持Portlet资源请求,详细信息请参考JSR286规范。
示例代码:
//使用Tag获取资源
portlet:
resourceURLid="
/images/blackpoint.gif"
"
>
5.5Portlet动作
Portlet动作是Portlet前后台交互的一种方式。
可以通过Tag、JavaScript来调用。
示例代码:
//使用ProcessActionAnnotation定义一个动作,名称是“myaction1”
@ProcessAction(name="
myaction1"
)
publicvoidmyaction1(ActionRequestrequest,ActionResponseresponse){
….
}
//Tag调用动作
actionURLname=”myaction1”var="
url"
/portlet:
actionURL>
ahref="
%=url%>
Help<
/a>
//JavaScript调用动作
getContainer('
#<
%=windowId%>
'
).doAction(”myaction1”,{});
5.6Portlet事件
4
5
6
5.6.1创建Portlet事件
Portlet事件是JSR286中新引入的一个特性,规范了Portlet间的交互。
Portlet事件是松耦合的,在一个页面中可以没有接收者或者多个接收者。
通过Portal定义中的“事件”节点对portlet相关的事件进行定义。
事件编辑器如下:
值类型必须是可被JAXB序列化的对象
5.6.2触发Portlet事件
a)在Portlet编辑器模型视图中选择SupportedPublishingEvent选项卡,选中要触发的事件。
b)在Portlet类中触发事件
myaction2"
publicvoidmyaction2(ActionRequestrequest,ActionResponseresponse){
//触发事件.
response.setEvent("
myevent1"
"
helloportal!
);
5.6.3响应Portlet事件
a)在Portlet编辑器模型视图中选择SupportedProcessingEvent选项卡,选中要响应的事件。
b)在Portlet类中响应事件
*处理事件
@ProcessEvent(name="
publicvoidmyevent1(EventRequestrequest,EventResponseresponse){
Stringval