简介: 本文主要介绍了在 IBM Lotus Web Content Management 6.1.x 中所提供的针对内容录入人员的定制功能,利用该功能可以方便地创建和设置更为简洁的内容录入页面。
IBM 内容管理器 (WCM) 是用来创建和管理发布于互联网,企业内部互联网以及企业门户网站上的网页内容的管理系统。它提供了一系列的工具来管理网站内容的创建, 审批以及最终的发布。这一系列工具所组成的复杂而又精密的内容管理系统使网站的建设不再仅仅是专业技术人员的领域,使非技术人员也能参予其中。 内容录入是 IBM 内容管理器所提供最基本的功能,但是管理器本身所提供的缺省的内容录入页面的设计是相对复杂的,在实际工作用户更希望能使用自己定制的内容录入页面来取代和简化这种缺省的设计。 这篇文档主要描述如何在 WCM 中创建和设置客户化的内容录入页面。 文档面向的读者群应具备一定的 WCM 使用经验,对 WCM 应该已经有了最基本的了解,并且能在 WCM 中创建最基本的站点结构。 在 WCM 中,用户可以使用下面的方法来定制和简化 WCM 的内容录入界面: WCM 内容编写工具为用户提供了不同的视图来执行不同的任务。这些视图包括“我的项列表”、“内容”、“站点区域”、“类别”、“组件”、“编写模板”、“演示模板”、“工作流”以及“所有项”。 用户在 WCM 内容编写页面可以访问哪些视图的权限是由在 WCM 内容库对各类条目的权限级别所决定的。系统管理员可以只分配给内容录入人员对内容视图有编辑权限,对其他的不希望出现在内容编写页面的视图则不要分配任何权限,这样用户在进入编写页面的时候系统会将其他没有权限的视图全部隐藏,使用户页面更简洁。 内容视图的角色可以在 WebSphere 门户网站管理页面的门户网站内容管理处分配和定义,只有门户网站的系统管理员才能编辑和修改角色定义。 要使用户能够访问 WCM 内容编写页面首先必须分配对内容库的可视权限。 完成对内容库的授权后,用户缺省对所有视图有读的权限,如果只允许用户看到内容视图,我们可以取消其他视图的读权限。 通过以上操作,用户拥有了内容视图的只读权限,下面我们可以继续进行对内容视图的编辑授权。 完成上面所做设置后,内容作者就可以访问 WCM 的内容编写页面并且这能看到指定的内容视图以及“我的项列表”和“所有项”这两个公共视图。 如图 1 所示
;
;
;
;
;
;
;
图 1. 用户内容视图
在 WCM 6.1.x 中,用户还可以配置 WCM 使用自己的客户化启动页面来替换掉缺省的用户界面。
在定制启动页面中将应用 WCM 的远程操作接口来调用在 WCM 内容编写界面中的不同的视图和操作。
WCM 的远程操作通过在 URL 中调用参数“?wcmAuthoringAction=action”来触发,action 的值如下:
new
Action 为 new 时可以在打开一个新建条目页面,必须在“type”参数中指定要新建条目的类型。
如:?wcmAuthoringAction=new&type=com.ibm.workplace.wcm.api.WCM_Content
“type”可以用下列值 :
com.ibm.workplace.wcm.api.WCM_AuthoringTemplate
com.ibm.workplace.wcm.api.WCM_Category
com.ibm.workplace.wcm.api.WCM_Content
com.ibm.workplace.wcm.api.WCM_FileComponent
com.ibm.workplace.wcm.api.WCM_HTMLComponent
com.ibm.workplace.wcm.api.WCM_ImageComponent
com.ibm.workplace.wcm.api.WCM_NumericComponent
com.ibm.workplace.wcm.api.WCM_PresentationTemplate
com.ibm.workplace.wcm.api.WCM_RichTextComponent
com.ibm.workplace.wcm.api.WCM_Site
com.ibm.workplace.wcm.api.WCM_SiteArea
com.ibm.workplace.wcm.api.WCM_Taxonomy
com.ibm.workplace.wcm.api.WCM_TextComponent
com.ibm.workplace.wcm.api.WCM_Workflow
com.ibm.workplace.wcm.api.WCM_WorkflowStage
当创建一个新的内容条目时,可以通过添加参数“atid”来定义要创建内容所用的编辑模板,其中 atid 的值是编辑模板的编号,可以通过 WCM 公共 API 取得。
?wcmAuthoringAction=new&type=com.ibm.workplace.wcm.api.WCM_Content&atid=com.ibm.workplace.wcm.api.WCM_AuthoringTemplate/ID
当创建一个新的站点区域,内容以及类别条目时,可以通过添加参数“pid”来定义要创建内容的父节点,其中 pid 的值是父节点的编号,可以通过 WCM 公共 API 取得。
?wcmAuthoringAction=new&type=com.ibm.workplace.wcm.api.WCM_Content&pid=com.ibm.workplace.wcm.api.WCM_SiteArea/ID
?wcmAuthoringAction=new&type=com.ibm.workplace.wcm.api.WCM_SiteArea&pid= com.ibm.workplace.wcm.api.WCM_Site/ID
?wcmAuthoringAction=new&type=com.ibm.workplace.wcm.api.WCM_Category&pid=com.ibm.workplace.wcm.api.WCM_Taxonomy/ID
delete
Action 为 delete 时用来删除一个条目,必须在“docid”参数中指定要删除条目的编号。这个编号可以通过 WCM 的公共 API 取得。
如:?wcmAuthoringAction=delete&docid=com.ibm.workplace.wcm.api.WCM_Content/ID1
删除条目的时,下面的参数可以用来指定删除的是一个草稿条目
?isdraft=true
edit
Action 为 edit 时可以以编辑模式打开一个条目,必须在“docid”参数中指定要编辑的条目的编号。这个编号可以通过 WCM 的公共 API 取得。
如:?wcmAuthoringAction=edit&docid=com.ibm.workplace.wcm.api.WCM_Content/ID1
编辑条目的时,下面的参数可以用来指定编辑的是一个草稿条目
?isdraft=true
read
Action 为 read 时可以以只读模式打开一个条目,必须在“docid”参数中指定要读入的条目的编号。这个编号可以通过 WCM 的公共 API 取得。
如:?wcmAuthoringAction=read&docid=com.ibm.workplace.wcm.api.WCM_Content/ID1
读入条目的时,下面的参数可以用来指定只读的是一个草稿条目
?isdraft=true
openmainview
Action 为 openmainview 时可以在编写页面打开一个可视视图,必须在“view”参数中指定要打开的视图。
如:?wcmAuthoringAction=openmainview&view=contentbysitearea
“view”可以用下列值 :
contentbysitearea
contentbytitle
myrecent
mydrraft
mypendingapproval
mypublished
myexpired
mydeleted
alldraftitems
allexpireditems
allpublisheditems
alldeleteditems
componentsbytype
move
Action 为 move 时用来移动一个站点区域或者内容。
如:?wcmAuthoringAction=move&docid=com.ibm.workplace.wcm.api.WCM_Content/ID1
移动的方向“1”表示向上,“-1”表示向下。如将一条内容向上移动一个位置,
?wcmAuthoringAction=move&docid=com.ibm.workplace.wcm.api.WCM_Content/ID1&pid=com.ibm.workplace.wcm.api.WCM_SiteArea/ID&moveDirection=1
link
Action 为 link 时用来将内容链接到一个站点区域。
如:?wcmAuthoringAction=link&docid=com.ibm.workplace.wcm.api.WCM_Content/ID1&pid=com.ibm.workplace.wcm.api.WCM_SiteArea/ID2
Copy
Action 为 copy 时用来复制一个条目。
如复制内容到一个新的站点区域下:
?wcmAuthoringAction=copy&docid=com.ibm.workplace.wcm.api.WCM_Content/ID&pid=com.ibm.workplace.wcm.api.WCM_SiteArea/ID2
复制操作还可以使用下面的参数,
?copyAsDraft=true
重新启动复制内容的工作流,使复制后内容状态为草稿。
?wid=workflowname
重新定义复制内容的工作流,使复制后内容使用新的工作流。
?position=start
定位复制后内容在父节点的位置,缺省状态下为 last。
approve
Action 为 approve 时用来审批通过一个工作流条目,必须在“docid”参数中指定要审批条目的编号。
如:?wcmAuthoringAction=approve&docid=com.ibm.workplace.wcm.api.WCM_Content/ID
审批条目的时,下面的参数可以用来指定审批的是一个草稿条目
?isdraft=true
decline
Action 为 decline 时用来拒回一个工作流条目,必须在“docid”参数中指定要拒回条目的编号
如:?wcmAuthoringAction=decline&docid=com.ibm.workplace.wcm.api.WCM_Content/ID
viewversions
Action 为 viewversions 时用来打开条目的版本视图,必须在“docid”参数中指定条目的编号
如:?wcmAuthoringAction=viewversions&docid=com.ibm.workplace.wcm.api.WCM_Content/ID
viewhistory
Action 为 viewhistory 时用来打开条目的历史视图,必须在“docid”参数中指定条目的编号
如:?wcmAuthoringAction=viewhistory&docid=com.ibm.workplace.wcm.api.WCM_Content/ID
Populating fields when creating or editing content
当使用 "new"或者 "edit" 参数修改内容条目时,可以在 URL 中定义不同内容域的值 .
如使用下面的 URL 创建一个新的内容,命名为 "newcontent"
?wcmAuthoringAction=new&type=com.ibm.workplace.wcm.api.WCM_Content&wcmfield.content.name=newcontent
下面是在创建和修改内容时可使用的参数列表:
&wcmfield.content.name=
&wcmfield.content.title=
&wcmfield.content.description=
&wcmfield.content.authors=
&wcmfield.content.owners=
&wcmfield.content.publishDate=
&wcmfield.content.expiryDate=
&wcmfield.content.generalDateOne=
&wcmfield.content.generalDateTwo=
&wcmfield.content.workflow= (This can only be used when creating content.)
&wcmfield.content.categories=
&wcmfield.content.keywords=
&wcmfield.element.[elementname]= (You replace [elementname] with the name of the element you are populating.)
注意 : 参数 element 只能在下面类型的的内容元素中使用 :Text ,Html ,Rich text ,Option Selection ,User Selection ,Date and time ,Number ,JSP ,Link ,Component Reference
针对同一内容域可以定义多个值:
?wcmAuthoringAction=new&type=com.ibm.workplace.wcm.api.WCM_Content&wcmfield.content.keywords=keyword1&wcmfield.content.keywords=keyword2
定义用户类型的内容域时,必须使用下面格式:
?wcmAuthoringAction=new&type=com.ibm.workplace.wcm.api.WCM_Content&wcmfield.content.authors=uid=usera
定义日期类型的内容域时,必须使用 US English格式。并且或者输入日期和时间,或者只有日期输入,只有日期输入的情况下,缺省时间为 12:00:00 AM,而且使用的时区是服务器所定义的时区:
?wcmAuthoringAction=new&type=com.ibm.workplace.wcm.api.WCM_Content&wcmfield.content.generalDateOne=Feb 14, 2008 12:53:03 PM
?wcmAuthoringAction=new&type=com.ibm.workplace.wcm.api.WCM_Content&wcmfield.content.generalDateOne=Feb 14, 2008
定义 JSP 元素时,需要指定 JSP 文件所在路径:
?wcmAuthoringAction=new&type=com.ibm.workplace.wcm.api.WCM_Content&wcmfield.element.jspelementname=/wps/wcm/jsp/html/example.jsp
定义关联组件元素,需要指定要关联的组件:
&wcmfield.element.mycompref.type=com.aptrix.pluto.cmpnt.NavigatorCmpnt&wcmfield.element.mycompref.id=e4bdf10042d0769698ccbeb0e25cc973
定义选择组件元素,需要指定待选择的每一个选项:
&wcmfield.element.[elementname]=AA&wcmfield.element.[elementname]=BB
定义用户选择组件,需要指定待选择的每一个用户:
&wcmfield.element.[elementname]=uid=wpsadmin,o=default organization&wcmfield.element.[elementname]=uid=wpsadmin2,o=default organization
定义链接组件元素,需要定义的参数如下:
添加一个链接到内容 :
&wcmfield.element.[elementname].type=content&wcmfield.element.[elementname].id=contentID
添加链接到链接组件 :
&wcmfield.element.[elementname].type=link&wcmfield.element.[elementname].id=linkcomponentID
添加链接到图片或者文件资源组件 :
&wcmfield.element.[elementname].type=resource&wcmfield.element.[elementname].id=componentID
添加链接到外部 URL:
&wcmfield.element.[elementname].type=external&wcmfield.element.[elementname].externalReference=myurl
指定链接文本使用内容名字还是自定义文本 :
&wcmfield.element.[elementname].useReferenceLinkText=true
指定链接显示为图片 :
&wcmfield.element.[elementname].linkImage=imagecomponentID
指定链接显示的文本内容 :
&wcmfield.element.[elementname].linkText=text
指定链接的描述信息 :
&wcmfield.element.[elementname].linkDescription=text
指定链接的目标窗口 :
&wcmfield.element.[elementname].linkTarget=
_blank
_parent
_self
_top
targetname
Save
autoSave
使用此操作保存容器,后台执行,没有直观的视图,如:
&wcmfield.autosave=true
saveValidate
这个参数决定是否显示 autosave 执行中所产生的提醒和错误信息,如果设置为“true”,显示提醒和错误信息,否则不显示,缺省值为 true。
&wcmfield.saveValidate=false
Adding comments to the item history
在 URL 中使用 &comment=comment 在指定条目的历史中备注信息。
http://
一个定制启动页面可以是一个 JSP 文件也可以是 HTML 文件。它必须被放置在 WCM 编写页面应用程序的 WAR 目录下: portal_server_root/installedApps/WCM_Authoring_UI_PA_xxxxxxx.ear/PA_xxxxxxx.war/, xxxxxxx 是应用程序安装时生成的的唯一索引编号。
下面是一个“创建和查看网页内容”的定制启动页面的代码示例:
这是一个简单的应用远程操作创建并查看内容的定制启动页面,用户可以将代码加入一个 JSP 或者 HTML 文件。
|
创建好上面的定制启动页面后,用户就可以配置自己的编写页面使用创建好的定制启动页面来取代缺省的编号界面。
如何配置编写页面使用定制启动页面:
在 WCM 中,编写模板决定一个内容表单的布局以及设计,决定哪些字段,哪些元素组件可以出现在内容表单并且可以为组件和域定义缺省值。
当创建编写模板时,用户可以为将来以这个模板为基础创建的内容定义各个字段和元素组件的缺省值。正确定义的缺省值可以使内容的创建者更容易,更有效的创建新的内容,简化内容创建流程。
在 6.1.x,WCM 在编写模板中提供了下面的功能来简化内容创建表单的布局。
内容表单布局属性选项:
用户可以通过定义“内容表单布局”属性选项来更改内容表单的页面布局,根据用户所定义的表单布局选项,内容创建表单可以以不同的风格来显示各个区域以及组件。
共有一下四种布局选择:
隐藏字段:
除了为内容创建表单选择不同的布局来组织页面外,用户可以通过应用“隐藏字段”这个属性来限制页面字段的显示,从而为内容作者简化内容创建页面。在编写模板被标为隐藏的字段在内容创建表单将不会显示。
在编辑模板中,用户还可以为内容作者定制帮助文本。
缺省情况下,内容作者在保存内容时,所有该用户有读权限的站点区域都会以树形结构显示在站点选择页面。当用户可以读的站点区域比较多时,将会给站点区域的选择造成一定的负担。我们可以通过更改编写模板“内容表单属性”部分的“站点区域选择选项”来减少待选择的站点区域数量。
“站点区域选择选项”有以下两种主要选择:
同站点区域选择,用户也可以在编写模板预定义要创建内容可选的工作流范围以及缺省值,这个选项在编写模板的“缺省内容设置”标签页面的工作流部分定义。
“工作流程选择选项”有以下两种主要选择:
下面的示例将创建一个仅显示“标识”和“内容”部分给内容作者的编写模板。
创建编写模板 :
应用编写模板创建内容:
应用内容编写组件可以在网站页面上加入 WCM 的编写页面功能。
以下的功能可以通过内容编写组件添加在网站页面:
编写工具组件只能在库组件中创建和使用,不能在编写模板,站点,站点区域以及内容中通过添加元素组件创建。
在创建编写工具组件时,用户需要定义编写工具的布局以及需要添加的操作,并且为所添加的操作定义需要的参数。编写工具的显示格式可以定义为各种不同的方式,可以显示为文本链接,也可以显示为图片链接,这个是由用户自己的代码设计决定的。
以下操作可以被添加在编写工具组件:
这些操作通过 WCM 的 placeholder 标签来嵌入在编写工具中,只有下面的的属性可以在编写工具的 placeholder 标签中可用:
如何创建编写工具组件:
下面的示例创建了一个显示为文本链接的编写工具。每一个操作的设计区域都包含了以 placeholder 标签生成文本和链接的编写工具,每一个链接都使用了 target="_blank" 标签来使编写工具的操作在一个新的浏览器窗口中打开而不是在当前页面打开。
新建操作设计:
" target="_blank"> |
读操作设计:
" target="_blank"> |
编辑操作设计:
" target="_blank"> |
删除操作设计:
" target="_blank"> |
核准操作设计:
" target="_blank"> |
拒绝操作设计:
" target="_blank"> |
页眉:
分隔符:
|
页脚:
编写工具组件可以在显示模板,菜单组件以及导航器组件中调用,当在菜单和导航器组件中调用编写工具时,读,编写,删除以及审批操作将被应用在菜单和导航期的每一条结果所对应的内容条目上。
在编写模板调用编写工具:
和一般普通的组件一样,标签 component 被应用于编写模板和元素设计中调用编写工具组件。
在菜单和导航器元素中调用编写工具:
标签 authoringtool tag 被应用在菜单元素设计和导航器元素设计中调用编写工具。读,编写,删除以及审批操作将被应用在菜单和导航期的每一条结果所对应的内容条目上。
除了 WCM 所提供的现有的功能,用户还可以使用 WCM 的公共 API 来进行二次开发来扩展功能,用户可以使用这些 API 来创建自己的内容管理应用来创建和管理 WCM 页面。在上面我们已经介绍了 WCM 的定制启动页面,用户也可以在自己的定制启动页面使用 WCM 的公共 API 来为该页面添加更多的功能。
JavaDoc:
WCM 公共 API 的 JavaDoc 可以在门户网站服务器的下面路径找到:
|
验证 WCM JAR 文件路径包含在系统设置的 classpath 中:
在开始开发自己的应用程序前,用户必须保证下面的 WCM JAR 文件已经被添加在自己应用程序平台的 classpath 中。
|
Import WCM Packages:
com.ibm.workplace.wcm.api.* com.ibm.workplace.wcm.api.exceptions.* |
Workspace 接口 :
workspace 接口是 IBM Workplace Web Content Management API 的主要接口。WCM 内容的创建,保存,删除以及搜索都是通过 workspace 进行的 . Web Content Management 通过 workspace 和特定的用户相关联,通过 API 所执行的操作都将以 workspace 所指定的用户身份来完成。
要得到一个 workspace 对象,首先必须获取 WebContentService:
try
{
// Construct and inital Context
InitialContext ctx = new InitialContext();
// Retrieve WebContentService using JNDI name
WebContentService webContentService
= (WebContentService) ctx.lookup("portal:service/wcm/WebContentService");
}
catch (NamingException ne)
{
System.out.print("Naming Exception: " + ne);
}
|
如何初始化 workspace:
webContentService.getRepository().getWorkspace("my username", "my password");
|
还可以通过下面的方法来初始化 workspace
在 portlet 中 :
Workspace workspace = webContentService.getRepository()
.getWorkspace( (Principal) portletRequest.getUser() );
|
非 portlet:
Workspace workspace = webContentService.getRepository()
.getWorkspace((Principal) request.getUserPrincipal() );
|
在完成对 workspce 的操作时必须调用 endWorkspace():
webContentService.getRepository().endWorkspace(); |
注意:当使用 JSP 组件时不需要调用 endWorkspace(),因为当前的页面的加载和 session 的管理都是有 WCM 应用程序来处理的。
DocumentLibrary 接口:
DocumentLibrary 用来定义要使用的内容库。我们使用 setCurrentDocumentLibrary 方法来定义当前要使用的内容库。如果没有指定内容库,API 将使用在 WCMConfigService.properties 文件中定义的缺省库。
获取当前 DocumentLibrary:
DocumentLibrary lib = workspace.getCurrentDocumentLibrary(); |
设置当前 DocumentLibrary:
Workspace.setCurrentDocumentLibrary(library); |
Document, DocumentTypes 和 DocumentID 接口 :
在 WCM API 中 document 代表库中的一个对象和实体。它是大多数其他实体接口(如内容,类别和站点接口)的父接口对象。
文档类型表示 document 的类别 , 它可以是内容,类别,站点或者所有的组件类别。在 WCM API 中,DocumentTypes 接口维护了所有的文档类别列表,而 DocumentType 对象则是一个单独的文档类别。
在 WCM 的中,每一个实体对象都有一个唯一的编号标识,这个唯一的编号被称为文档编号,在 DocumentID 中定义,不同的实体文档编号不同。
ContentComponent, LibraryComponent, ContentComponentContainer 以及 Content 接口 :
ContentComponent 在 WCM 中代表内容元素,内容元素可以存在于 Content, Site 或 SiteArea 对象中。
WCM API 提供了 LibraryComponent 接口来代表所有的库组件。例如 LibraryFileComponent, LibraryHTMLComponent 和 LibraryImageComponent 接口分别代表文档组件,HTML 组件和图片组件。然而,并不是所有的库组件都有自己的接口定义,如导航器组件和菜单组件在 API 就没有相应的接口定义。
ContentComponentContainer 接口提供了在相应的容器中更新和取得内容元素组件的最基本功能。
Content 接口存储了 WCM 内容的相关信息,这些信息包括内容的标识信息,分类以及权限等。
Rendering Context 接口 :
在 WCM 中,在网站页面中展示内容和组件的内容是一个最基本的需求。RenderingContext 接口包含展示一个可展示对象所需要的所有信息,如当前的内容,显示模板以及站点信息,应用程序路径,展示的内容等等。
下面示例显示了如何创建 RenderingContext,如何添加上下文以及应用上下文展示一个内容:
// Create the rendering context
RenderingContext context = workspace.createRenderingContext(servletRequestObj,
servletResponseObj,
new HashMap(),
"http://[HOSTNAME]:[PORT]/[CONTEXT]",
"connect");
// Set the path to the content to be rendered
context.setRenderedContent("/Library1/SiteA/SiteArea1/SiteArea1-1/myContent");
// Get the rendered string
String renderedContent = workspace.render(context);
|
创建一个简单的使用 WCM API 创建内容的 JSP 示例
这个示例示范了如何使用 Web Content Management API 来创建一个简单的内容创建页面。
创建一个 JSP 文档并加入下面代码:
/** The WCM workspace user name */ String apiUser = "[USER_NAME]"; /** The WCM workspace password */ String apiUserPassword = "[PASSSWORD]"; /** The WCM Library to query against */ String libraryName = "[LIBRARY]"; /** The WCM Authoring Template Name for the new content*/ String contentAuthoringName = "[AuthoringTemplateName]"; /** The WCM Site Area Name for the new content*/ String contentSiteArea = "[SiteAreaName]"; |
|
String contentTitle = request.getParameter("contenttitle");
String contentBody = request.getParameter("body");
// Get the WCM workspace
Workspace workspace =
webContentService.getRepository().getWorkspace(apiUser, apiUserPassword);
workspace.setCurrentDocumentLibrary(workspace.getDocumentLibrary(libraryName));
// Retrieve the authoring template and site area
DocumentIdIterator authoringTemplates =
workspace.findByName(DocumentTypes.AuthoringTemplate, contentAuthoringName);
DocumentIdIterator siteAreas =
workspace.findByName(DocumentTypes.SiteArea, contentSiteArea);
DocumentId authoringTemplateId = (DocumentId) authoringTemplates.next();
DocumentId siteAreaId = (DocumentId) siteAreas.next();
// Create the content for the authoring template
Content content =
workspace.createContent(authoringTemplateId,siteAreaId,null,ChildPosition.START);
// Set the name of the content
content.setName(contentTitle);
// If you have a text component on the authoring template and you wish to populate it
TextComponent bodyComponent = (TextComponent) content.getComponent("Body");
bodyComponent.setText(contentBody);
content.setComponent("Body", bodyComponent);
String[] saveErrors = workspace.save(content);
if (saveErrors.length > 0) {
output.append("The following errors occurred on content save |

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/14751907/viewspace-668840/ ,如需转载,请注明出处,否则将追究法律责任。