IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope:Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
skip to main content

developerWorks 中国  >  Lotus  >

如何个性化 Workplace Managed Client 应用程序

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

样例代码


级别: 中级

杨智 , 软件开发工程师, IBM

2006 年 1 月 12 日

本文将介绍在 Workplace Managed Client 中,如何通过 Personality 来对应用程序的视窗布局进行设置。

在 Eclipse 中, Perspective 定义了应用程序的视窗布局。而在 WMC 中, 您可以通过 Personality 来对应用程序的视窗布局进行设置;Personality 通过 Eclipse 的 Perspective 或者 RCPML 可以配置视窗的主要数据区。对于一个应用程序,Personality 为开发人员提供了控制视窗布局的最佳手段。

学习完本文后,您将能够为自己的WMC应用程序创建个性化的视窗布局。我没有在本文中详细记录开发应用程序所需的每一步具体操作,这是假定您对 eclipse 插件开发有一定的经验,对 WMC 产品以及应用程序的开发也有一定的了解,同时您在您的机器上已经安装好了一个 WMC。

IBM Workplace Collaboration Services API Toolkit

在介绍 WMC(IBM Workplace Managed Client,以前称为 IBM Workplace Client Technology,Rich Edition,为用户的桌面提供了一种服务器托管协作)的 Personality 之前,我们一起来先了解一下 IBM Workplace Collaboration Services API Toolkit。这个工具包既包含了服务器端的 API 也包含了客户机端的 API,为开发人员提供了应用程序接口(Application Program Interface, API)和服务提供者接口(Service Provider Interfaces,SPI)以及相关编程指南与示例程序。有关客户机 API(IBM Workplace Client Technology API)的具体介绍,请参照 developerWorks 上 Jennifer Bloom 的文章:“IBM Workplace Client Technology API 简介”。

Personality 作为客户机端API的一部分,是本文重点介绍的部分。我们在下面将对它进行说明。





回页首


WMC 的界面布局

让我们一起先来看看 WMC 的界面布局。

WMC 2.6 提供了一个非常清新的用户界面,主视窗可以分为 6 个部分,分别是菜单栏、商标栏、状态栏、切换器栏以及边栏,见下图:


图1:WMC 的视窗布局

通过切换器栏里的应用程序图标,用户可以在不同应用程序中切换,主数据区可以按不同的应用程序显示出不同的界面风格。





回页首


Personality 是干什么的?

通过 Personality,开发人员可以对 WMC 视窗进行配置;其中,通过“服务器托管”方式下的 RCPML, Personality 能够设置主数据区的布局以及切换器栏的应用程序图标等等;而通过在 Standalone 方式下的“静态”Perspective, Personality 也能够设置主数据区的布局;Personality 还提供了对于菜单栏、商标栏、状态栏、切换器栏以及边栏的控制方法。

对于如何通过 RCPML 来设置应用程序的界面布局,请参照 Brian O’Gorman 撰写的“IBM Workplace Managed Client 中使用应用程序布局”;您还可以参考 Katherine Sewell 撰写的“IBM Workplace Managed Client Developer Toolkit 简介”,这篇文章介绍了如何使用 IBM Workplace Managed Client Developer Toolkit 来创建 WMC 应用程序,里面有很大篇幅涉及到了如何创建 RCPML。

本文将通过一个示例程序来说明如何具体的使用 Personality,这个示例程序主要通过“静态”的 Perspective 来配置主数据区的布局;这样这个示例程序就可以以 Standalone 的方式运行而不需要在服务器方进行配置。如果您了解 RCPML 的知识,或者您读过了上述两篇文章,您应该能够容易的为本文附带的示例程序添加上带有 RCPML 的“服务器托管”版本。读完本文就试试吧?您会更加了解 Personality。





回页首


WMC Personality V.S. Eclipse WorkbenchAdvisor

如前所述,Personality 用来对 WMC 视窗进行配置;而在 Eclipse 中,通过 WorkbenchAdvisor,开发人员可以对要启动的视窗进行配置。这很相似,不是么?如果你对于 WorkbenchAdvisor 不是很熟悉,可以参照 Eclipse 的联机帮助文档

先来看看 Personality,WMC 的客户机 API 为开发人员提供了关于 Peronality 的基类——Platform Personality(com.ibm.rcp.platform.personality.PlatformPersonality),下图是 Platform Personality 所提供的公共方法:


图2:PlatformPersonality 的公共方法

图中红色的部分的方法继承自抽象基类 com.ibm.rcp.platform.api.Personality, 这部分的方法实际上是 RCPWorkbenchAdvisor 的代理方法。对此您或许会感到疑惑,没关系,下面会接着说明。

由于 RCPWorkbenchAdvisor 是 RCP 平台的内部类,你可能无法获取。在这里,我对它作个简单的介绍以使您能更深入的了解 WMC 的 Personality。事实上,RCPWorkbenchAdvisor 就是 Eclipse WorkbenchAdvisor 的一个子类,它对启动的 RCP 视窗进行了配置。RCPWorkbenchAdvisor 重载了 WorkbenchAdvisor 的方法;下图中红色部分是被 RCPWorkbenchAdvisor 重载了的 WorkbenchAdvisor 方法。


图3: RCPWorkbenchAdvisor 的公共方法

比较图2与图3的红色部分,您可以发现 Personality 中的每一个方法名都可以在 WorkbenchAdvisor 中找到类似的方法名:比如 Personality 中的 getWindowPerspectiveId 与 WorkbenchAdvisor 中的 getInitialWindowPerspectiveId 等等。

事实上 RCPWorkbenchAdvisor 就是将大部分重载的方法交由 Personality 的代理方法来的处置,这样就使得开发人员可以通过使用 Personality 就能够对 RCP 视窗进行配置。从这个意义上来时讲,你可以把 Personality 看着是 Eclipse 中 WorkbenchAdvisor 在 WMC 中的等价物。通过下图您可以看出 Personality 与 WorkbenchAdvisor 之间的这种关系。


图4:一个局部的 UML 类图

再来看看图2中的蓝色部分,这些方法提供了对一些特定于 WMC 平台的视窗控件进行控制的方法。从方法名我们也可以容易的看出,这些可被操纵控件包括:商标栏、状态栏、切换器栏以及边栏。

好了,你应该对 WMC 的 Personality 有了一定的认识了吧?下面来看一个“真实”程序吧。





回页首


Personality 的示例程序

为了演示 Personality,我构建了一个简单的示例程序——职员管理系统。这是一个尽量简化的管理系统:假设您的部门需要一个系统来对部门人员信息进行管理,这样你就不必再花脑筋来记那些让人头疼的电话号码了。通过该系统你可以查看部门职员的信息(当然包括电话号码了)以及更改职员的信息。下图显示了这个管理系统的一个屏幕快照:


图5:职员管理系统

Managed Client 的界面顶端是商标条,为这个应用程序提供了一个醒目的标题;最底端的状态栏可以为用户提供一些及时的消息;我们隐藏了左侧的切换器栏,因为这个示例程序没有配置 RCPML,我们的应用程序图标也无法在切换器栏中显示;右侧的边栏也被隐去,我们不需要它。界面的中心主数据区就是开放给应用程序进行布局设计的地方,通过精心设计属于您自己的个性化界面,用户可以更好的使用您的应用程序。

职员管理系统对 Managed Client 界面的主数据区进行了个性化的布局设计。我们可以看到上端是一个职员列表,列出了所以的职员以及其相关信息。而下端则是一个信息编辑/查看器,通过它,我们可查看以及编辑职员的信息。对于在 Managed Client 界面下端的状态栏,我们在最右端添加了一个用于切换信息编辑/查看器的状态的按钮。通过这个按钮,您可以将这个视窗在信息查看与信息编辑状态间进行切换。下图显示了处于编辑状态的职员管理系统:


图6:编辑状态下的职员管理系统

在下一节中将为您如何为职员管理系统添加属于自己的 Personality。





回页首


如何添加 Personality?

为您的应用程序定制一个 Personality,您需要在应用程序插件的 plugin.xml 中定义关于 Personality 的说明。下面是职员管理系统插件中 plugin.xml 关于 Personality 说明的片断:


表1:Personality 的说明片断

<!-- Define personality -->
  <extension
         point="com.ibm.rcp.platform.personalities">
          <personality
             class="demo.personality.DemoPersonality"
             name="DemoPersonality"
             id="demo.personality"/>
   </extension>

com.ibm.rcp.platform.personalities 是 WMC 客户机 API 定义的关于 Personality 的扩展点,您需要说明您的 Personality 的name 以及 id;这个 id 将作为 Personaltiy 的唯一标志,一旦您在 WMC 启动时将这个 id 值作为 personality 的输入参数值进行输入,那么 WMC 就将以您的 Personality 进行启动。此外,您还需要定义您的 Personality 类,使其继承来自 WMC 客户机 API 的 Personality 或是 PlatformPersonality。

恭喜您,您完成了定义 Personality 的重要一步。现在,一旦您将你的应用程序部署到 Managed Client 中,您的 Personality 就会在 Managed Client 中得到注册。你就可以通过你自己的 Personality 来启动应用程序而无需使用 Managed Client 为你提供的 Personality。





回页首


布局控制

在上一步中,我们仅仅是为我们的程序“注册”了一个 Personality。这一节中,我们一起来看看如何对 Managed Client 界面的主数据区进行个性化的设计。

如前所述 Personality 通过“服务器托管”方式下的 RCPML 或者 Standalone 方式下的“静态”Perspecitve 来对主数据区进行配置。职员管理系统被假定为一个 Standalone 的程序,我们通过 Perspective 来进行布局设计。

您需要在应用程序插件的 plugin.xml 中定义关于 Perspective 的说明。下面是职员管理系统插件中 plugin.xml 关于 Perspective 说明的片断:


表2:Perspective 的说明片断

   <!-- Define perspective -->
   <extension
		point="org.eclipse.ui.perspectives">         
		<perspective
			name="Employee Perspective"
			class="demo.personality.DemoPerspective"
			id="demo.personality.DemoPerspective">
		</perspective>         
	</extension>

同时您需要定义相应的 Perspective 类来实现 IPerspectiveFactory 接口,在职员管理系统中,我们定义了一个名为 DemoPerspective 的类,它实现了 IPerspectiveFactory 接口并在初始化布局的方法(createInitialLayout)中加入了两个 View:EmployeeListView 与 EmployeeFormView,分别对应图4中上方的 Employee Information 视图以及下方的 Add Employee 视图。同时还给出了这两个 View 的位置。


表3:DemoPerspective 代码片断

public class DemoPerspective implements IPerspectiveFactory{	
	public void createInitialLayout(IPageLayout layout) {
		layout.addStandaloneView("demo.personality.views.EmployeeListView",……);
		layout.addStandaloneView("demo.personality.views.EmployeeFormView",….);
		}
…
}

为了使您的 Personality 子类能够使用这个定义的 Perspective, 需要在 Personality 子类的 getWindowPerspectiveId() 方法中返回这个定义好的 Perspective 的 ID; 在职员管理系统插件中这个 ID 便是 demo.personality.DemoPerspective。


表4:getWindowPerspectiveId() 代码片断

public String getWindowPerspectiveId() {
…
        return "demo.personality.DemoPerspective";
    }





回页首


视窗生命周期

您的应用程序可能需要在视窗的各个生命周期阶段进行特殊的处理,Personality 为您提供了相应的方法。您的 Personality 子类可以重载这些方法,从而能够应用程序能在视窗的不同生命阶段能够做出恰当的处理。图6给出了这几个方法的名称以及其调用顺序;


图7:Personality 方法在 Workbench 生命周期中的调用顺序

在职员管理系统中为了监控这些函数的调用顺序,DemoPersonality 类重载了这些函数。每个函数将打开一个消息框,消息包含了函数的名称以及调用的序号。表5列出了 postWindowOpen() 的代码片断:


表5:postWindowOpen() 代码片断

public void postWindowOpen(IWorkbenchWindowConfigurer configurer) {
		showInfo("postWindowOpen. We will hide Banner/Switcher/Shelf here.");
		super.postWindowOpen(configurer);
		this.setShowBanner(false);
		this.setShowSwitcher(false);
		this.setShowShelf(false);
	}

下图是当 postWindowOpen() 被调用时的局部截图,可以看到 postWindowOpen() 被调用的是时机是在整个 WMC 视窗打开之后:


图8:postWindowCreate() 被调用的消息框





回页首


状态栏

在职员管理系统中,我们在状态栏上添加了一个查看/编辑切换钮。这样的按钮是通过使用扩展点 com.ibm.rcp.platform.controlSets 来实现的,下表是关于这个按钮在 plugin.xml 中的说明片断。


表6:controlSets 的说明片断

	<!-- Define controlSets -->
	<extension
		point="com.ibm.rcp.platform.controlSets">
		<controlSet
			id="demo.personality.controlset"
			visible="false">
			<statusLine
				path="MIDDLE_GROUP"
				id="statusline">
				<groupMarker name="additions"/>
			</statusLine>
			<control
				statusLinePath="statusline/additions"
				class="demo.personality.actions.ControlSetContribution"
				id="demo.personality.actions.ControlSetContribution"/>
		</controlSet>
	</extension>

其中属性 groupMarker 定义了 statusLine 一个子组的名字,可以在子组中加入您的控件;属性 path 分别可以是“BEGIN_GROUP”、“MIDDLE_GROUP”与“END_GROUP”,定义了控件在状态栏上的显示位置。同时您的控件必须实现 IContributionItem 接口。

为了使得控件只在这个示例程序中定义的 Personality 中出现,需要在 plugin.xml 中将其与 Personality 关联起来,下表是这个关联的片断:


表7:关联控件与 Personality

	<extension
		point="com.ibm.rcp.platform.personalityExtensions">
		<!-- associate control set with the demo personality in this plugin. -->
		<personalityExtension
			targetID="demo.personality">
			<controlSet
				id="demo.personality.controlset"/>
		</personalityExtension>
	</extension>

关于具体的编程指南,请参照 WMC 2.6 的编程手册。





回页首


结束语

恭喜您!您现在已经知道如何使用 Personality 了。打开您的 IDE,为您的应用程序也定义一个 Personality 吧!您也可以尝试为职员管理系统添加一个 RCPML 的版本。






回页首


下载

描述名字大小下载方法
Sample codeSample.zip37 KBHTTP
关于下载方法的信息Get Adobe® Reader®




回页首


参考资料





回页首


关于作者

杨智是 IBM Workplace Managed Client Platform Team 的软件开发工程师。他于 2005 年 7 月加入 IBM,任职于中国软件开发中心。他拥有北京大学的计算机软件与理论硕士学位。






回页首


对本文的评价

太差! (1)
需提高 (2)
一般;尚可 (3)
好文章 (4)
真棒!(5)

建议?




回页首


其他公司、产品或服务的名称可能是其他公司的商标或服务标志。


    关于 IBM隐私条约联系 IBM