WebSphere Product Center:WebSphere Commerce 集成

版本 5.2

 

 

 

 

 

 

 


注意!在使用本资料及其支持的产品之前,请阅读本文档末尾处的『声明』中的信息。

 

2005 年 3 月 23 日

本文档的此版本适用于 WebSphere Product Center(5724-I68)V5.2 及所有后续发行版和修订版,直到在新版本中另有声明为止。

Copyright International Business Machines Corporations 2005. All rights reserved.
US Government Users Restricted Rights-Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.

目录

第 1 章 概述

第 2 章 体系结构

应用程序设计
Product Center 定制脚本

第 3 章 与 WebSphere Commerce 集成

Commerce 配置
导出 WC 数据以供 Commerce 使用

进行设置以便进行预览

Product Center 配置

第 4 章 业务流程

完全导出
更改部分导出删除

更改部分导出更新

附录 A - 数据模型参考

Commerce 对象
与 Commerce 相关的 Product Center 对象

声明

第 1 章 - 概述

Commerce 集成为客户提供了一个基础,从而使他们能够为商家到商家(B2B)和商家到消费者(B2C)电子商务 Web 站点建立全面而高效的产品信息创作环境。WebSphere Product Center(以下称为 Product Center)可以显著改进要发布的丰富而准确的产品信息的准备工作,从而大大提升电子商务实现的价值。 

与电子商务平台相结合,它提供了一些工具来对多个用户在各种 Commerce 过程中承担的各项任务进行协调。它还提供了一些功能部件和功能,从而大大简化大量复杂产品信息的聚集、增强、管理和核准工作。 

支持的业务流程包括:引入新产品;创建交叉销售、追加销售和促销;产品生命周期结束;使项信息同步;将项及其属性成批上载至 Web 站点;以及使产品信息除了与电子商务 Web 站点同步以外还与多个客户联络点同步。 

Commerce 服务器集成功能包括:

需求

局限性

在 Product Center 中定义并装入到 Commerce 中的产品数据包含一些缺省内容。用户需使用 Commerce Suite Accelerator 来更改该内容。

第 2 章 - 体系结构

Product Center 与 Commerce 之间的数据交换是通过 XML 文档进行的。Commerce 小组应该提供他们的最新成批上载工具的 DTD。使用 Product Center 脚本来创建 XML 文档,您可以针对 Commerce DTD 来验证这些 XML 文档并通过 FTP 将它们传送到一个预定义位置,Commerce 可以从该位置检取那些文档并处理它们。如果在处理 XML 文档期间遇到任何错误,就需要手工解决那些问题。 

对 Commerce 执行的第一次目录馈送被认为是完全导出,以后,Product Center 中只有已被更改或删除的对象才会在更改部分馈送期间被导出以供 Commerce 使用。

Product Center 生成的 XML 符合由 Commerce 定义的 DTD(WCS.dtd)。更改部分处理过程始终是先删除 XML 并接着进行更新,从而使对象状态保持一致。

 

WebSphere Product Center 与 WebSphere Commerce 的集成实现了下列目标:

注意:请参阅『附录 A』以了解有关数据模型引用的详细信息。

应用程序设计

Product Center 集成包中包含下列对象:

WCCatentryCtg - Product Center 中的主目录

WCSKUCtg - 属于产品的库存标识

WCSalesHr - 销售目录

ActivityLog - 活动日志目录

Product Center 定制脚本

许多 Product Center 脚本用来在 Product Center 中通过数据模型来表示 Commerce 对象。下表对这些脚本作了描述。

脚本名 脚本类型 描述/功能
WCCatentry 处理后脚本  目录脚本 - 处理后

执行基本数据模型验证,如验证部件号是否重复以及与定义属性相关的验证等等

CatentryCtg 保存后 WCSKUCtgPostSave

检查保存的项是否是产品,然后在库存标识目录中以类别形式创建产品并使定义属性作为辅助规范

WCSKUCtgPostSave  WCSKUCtgPostSave

在活动日志目录中创建条目

WCCatentryCtg 条目预览脚本  条目预览

为用户请求预览的项构建 XML 并将以 HTTP 传递的方式上载该 XML 数据,然后调用 Commerce 预览命令

WCSkuCtgEntryPreview 条目预览 

与上一个脚本相同,用于预览库存标识

DataExportToCommerceScript  报告脚本

这个报告使用户能够更方便地对 Commerce 执行完全目录馈送/更改部分目录馈送。此脚本与某些触发器脚本一起构建 XML,方法是计算要从活动日志目录中导出哪些项(如果有更改),通过 FTP 将 XML 传送至(查找表中描述的)预定义目录并调用 Commerce 命令。

WC-Export.Wc.XmlFormat 触发器脚本

和 ASP/JSP 一样,此脚本对于构建 XML 来说非常重要。此脚本将所有 Commerce XML 节点都描述成函数,触发器脚本将调用这些函数。

WC.Validation.Utility.Lib 触发器脚本

这是一个验证触发器脚本,此脚本对对象执行基本验证(如验证对象是否非空、过滤特殊字符以及进行唯一性验证等等)。

WCExportUtil.wpcs 触发器脚本 

这是主要的工作脚本,在执行完全/更改部分导出时以及在预览期间,将调用此脚本。此脚本处理所有业务逻辑并构建 XML。

activityLogger.wpcs 触发器脚本

此脚本处理所有与活动日志目录相关的条目。 

WC.utility.Lib 触发器脚本

提供实用程序功能,如更改项的多次出现值、创建辅助规范以及删除目录项的库存标识关系等等。

CopyItemsandCategory 触发器脚本 

此脚本用来将项或类别从主目录复制到销售目录。

库记录器  触发器脚本

开发者以前使用此记录器实用程序来记录事件。由于记录器不具有线程安全性,所以现在已经不使用了。 

 

第 3 章 - 与 WebSphere Commerce 集成

本章提供 Product Center 和 WebSphere Commerce 的配置。 


Commerce 配置

先决条件

Commerce 集成设置

配置集成命令

使用下列步骤来在 WebSphere Commerce 中配置集成命令。

1) 如上一节所述,在同一个窗口中先运行 idresolver(idresgent)并接着运行 massloader(massload)命令,从临时文件夹将文件 SQLLoad.xml 装入数据库,如下所示: 

idresgen -dbname <dbname> -dbuser <dbuser> -dbpwd <passwd> -infile C:\test\ SQLLoad.xml –outfile C:\test\ SQLLoadout.xml –method mixed

massload -dbname <dbname> -dbuser <dbuser> -dbpwd <passwd> -infile C:\test\ SQLLoadout.xml –method sqlimport 

注意:在 SQLLoad.dtd 文件中,确保正确地设置 wcs.dtd 的路径。

例如,如果 wcs.dtd 位于 D:\WebSphere\CommerceServer56\schema\xml 目录中,则应该按照以下方式指定路径: 

<!ENTITY % wcs.dtd SYSTEM "D:\WebSphere\CommerceServer56\schema\xml\wcs.dtd"> 

2) 装入已被复制到 <WC_installDir>\xml\policies\xml 目录中的 wpcwcUserGroup.xml 文件。要完成此任务,请打开命令提示符窗口,转到 <WC_installDir>\bin 目录并运行 acpload 命令,如下所示:

acugload <database name> <database user> <password> wpcwcUserGroup.xml <schema name>

其中 

d bname 是数据库名
dbuser 是连接至数据库时使用的用户名
dbpwd 是连接至数据库时使用的用户密码
schemaname 是目标数据库模式的名称

3) 装入已被复制到 <WC_installDir>\xml\policies\xml 目录中的 wpcwcpolicy.xml 文件。要完成此任务,请打开命令提示符窗口,转到 <WC_installDir>\bin 目录并运行 acpload 命令,如下所示:

acpload <dbname> <dbuser> <dbpwd> wpcwcpolicy.xml <schemaname>

其中 

dbname 是数据库名
dbuser 是连接至数据库时使用的用户名
dbpwd 是连接至数据库时使用的用户密码
schemaname 是目标数据库模式的名称

4) 打开 <WAS_installdir>\installedApps\<cell_name>\WC_<instance_name>.ear\Stores.war\META-INF 目录中的 MANIFEST.MF 文件,并将 JAR 文件 WPCWC.jar 添加到类路径末尾。 

5) 打开 <WAS_installdir>\installedApps\<cell_name>\WC_<instance_name>.ear\Stores.war\WEB-INF\classes 目录中的 WPCWCProperties.properties 文件,并适当地修改下列值 

dbname 是数据库名
dbuser 是连接至数据库时使用的用户名
dbpwd 是连接至数据库时使用的用户密码
idresinfiledir 是一个目录,Product Center 应该通过 FTP 将输入文件传送到该目录中

    例如:C:/WPC-WC/testing

massloadinfile 输出文件,这个输出文件由 IdResolver 进程生成,并且是 massloader 进程的输入

    例如:C:/WPC-WC/testing/idresout.xml

schemaname 是目标数据库模式的名称

customizer 是定制程序文件,对于诸如 Oracle 之类的其它数据库,必须提供此文件。
    例如:OracleConnectionCustomizer.properties

propfilename 是属性文件 IdResolveKeys.properties 的路径

    例如:C:/WebSphere/CommerceServer56/properties/IdResolveKeys.properties

注意: 

1. 在 <WC_installDir>\properties 目录中的 IdResolveKeys.properties 文件末尾添加以下条目。

    ATTRIBUTE=@LANGUAGE_ID@NAME@FIELD1:LANGUAGE_ID NAME FIELD1

2. 不要修改其它属性,包括 mixedmethod、sqlmethod、deletemethod 和 optimize。

3. 确保将 wcs.dtd 放在由 idresinfiledir 指定的目录中。


导出 WC 数据以供 Commerce 使用

本节描述如何将 WebSphere Commerce 中的信息抽取到 Commerce 存储库。

创建新用户

在 Commerce 中,通过组织管理控制台创建具有管理特权的新用户(此用户隶属于根组织)。对该用户指定 WPCAdministrator 角色。

抽取元数据

使用下列步骤来从 WebSphere Commerce 中抽取元数据信息:

1) 将 ZIP 文件解压缩到一个本地目录中

2) 将过滤器文件 Export_MetaData_Filter.xml 复制到一个临时目录(例如 C:\test)中。

3) 打开 Export_MetaData_Filter.xml 文件并进行下列更改,然后保存文件:

4) 打开命令提示符窗口并转到 <WC_installdir>\bin 目录

5) 从 <WC_installdir>\bin 中运行 massextract 工具,如下所示:

    massextract -dbname <dbname> -dbuser <username> -dbpwd <password> -filter 
    C:\test\Export_MetaData_Filter.xml -outfile <outfile> -schemaname <schemaname>

   其中 

    dbname:是数据库名
    username:是连接至数据库时使用的用户名
    password:是连接至数据库时使用的用户密码
    outfile:是输出 XML 文件的名称,所抽取的数据将存储在此文件中 
    schemaname:是目标数据库模式的名称

元数据信息将在以上 <outfile> 值定义的文件中生成。

对生成的输出文件进行编辑

对上一节生成的 <outfile> 进行编辑。转至文件末尾的以下元素并将 logonPwd 替换为您在『创建新用户』一节中创建的正确密码。

<userId
logonid = "<logonId of the user >"
logonpassword = "<logonPwd of the user>"/>

这个经过编辑的输出文件就是提供给 Product Center 的元数据信息。

进行配置以将映像文件从 Product Center 复制到 Commerce 

1. 打开 <WAS_installdir>\installedApps\<cell_name>\WC_<instance_name>.ear\Stores.war\WEB-INF\classes 目录中的 WPCWCProperties.properties 文件,然后转至属性名 ConsumerDirectImgDir

2. 必须根据已发布的存储库来更改此名称。在本例中,ConsumerDirect 是已发布的存储库的标识,因此名称是 ConsumerDirectImgDir

3. 如果已发布的存储库的标识是 ToolTech,则此属性名是 ToolTechImgDir 而不是 ConsumerDirectImgDir

4. 此属性名(ConsumerDirectImgDir)的值指定存储库映像的存储路径。此路径是相对于 StoreDirectory 的。例如,如果 Commerce 机器上存储库的路径是:

    <WAS_installdir>/installedApps/<cell_name>/WC_<instance_name>.ear/Stores.war/ConsumerDirect

 并且要将映像放在此路径中的 images 目录中,则应该将此属性指定为:

    ConsumerDirectImgDir = images


进行设置以便进行预览

1. 从 WPC_WC_Version_X.zip 文件中,将 ZIP 文件 PreviewUtils.zip 解压缩到一个临时文件夹中。

2. 将 PreviewUtils.zip 的内容解压缩到 WAS_HOME\installedApps\<node_name>\<cellname.ear>\Stores.war。

可以通过两种方法来进行预览:

          方法 A:使用 ConsumerDirect 存储库的现有样本 JSP

1. 使用 Commerce 中的管理控制台界面来发布 ConsumerDirect 存储库。

2. 将 samples.zip 中的 JSP 解压缩到 WAS_HOME\installedApps\<node_name>\<cellname.ear>\Stores.war\ConsumerDirect。 

例如,C:\WebSphere\AppServer\installedApps\vdev\WC_demo.ear\Stores.war\ConsumerDirect。

3. 重新启动 Commerce 服务器

方法 B(需要进行 JSP 开发):修改用于任何其它存储库的存储库 JSP 

假定:JSP 中的数据 bean 是使用它们的键标识填充的。

使预览正常工作的逻辑:

a) 在 Commerce 服务器端,从 Product Center 接收到的数据所对应的数据 bean 在一个数据结构中高速缓存。此数据结构存储在 HashMap 中。可以使用会话中传递的 PreviewBeanId 值来从 HashMap 中检索此数据结构。可以使用请求中传递的数据 bean 主键值来从此数据结构中检索数据 bean。JSP 使用这些数据 bean(它们包含合并在一起的信息),而不是构造自己的数据 bean。 

b) 在一个 JSP 中包含另一个执行将数据 bean 装入页面作用域的操作的 JSP,可以让前者能够使用这些数据 bean。应该在所有需要预览功能的 JSP 中静态地包括这个可以将数据 bean 装入页面作用域的 JSP。用来将变量装入页面作用域的变量/键的名称最好与 JSP 中数据 bean 将要使用的变量名相同。(这是为了便于使用 JSTL 进行开发。)

c) 对于预览期间不启用的某些功能(如订购商品等),应根据情况取消或替换为适当的消息。 

方法描述以及代码段:

从 Commerce 服务器检索数据 Bean 

请参阅 PreviewHelper 目录中的 PreviewDatabeanEnvironmentSetup.jsp 以了解实现方法。

检索数据结构

1) 从 HashMap 中获取预览 Bean 标识 

HttpSession session1 = requst.getSession();
String prvw_Bean_Id = (String)
session1.getAttribute(MappingConstants.PRVW_DATA_BEAN_ID); 

2) 使用此标识来获取数据结构:

if (prvw_Bean_Id != null) { 
CommDataHashBucket wpcComMapDataBucket = CommDataHashBucket.getCommDataHashBucket();
WPCCommerceMapDataStructure wpcComDataStructure = 
wpcComMapDataBucket.getComDataStructure(prvw_Bean_Id);
HashMap catlgObjMap = 
wpcComDataStructure.getCatalogObjectsMap();

检索数据 Bean

1) 目录数据 Bean:

String catlgId = request.getParameter("catalogId");
if (catlgId != null) { 
CatalogPreviewDatabean cPrvwDb = null; 
HashMap catlgDBMap = (HashMap) 
catlgObjMap.get(MappingConstants.CATALOG_BEAN);
cPrvwDb = (CatalogPreviewDatabean) catlgDBMap.get(new Integer(catlgId));

2) 类别数据 Bean:

String catgryId = request.getParameter("categoryId"); 
if (catgryId != null) { 
CategoryPreviewDataBean catgryPrvwDB = null;
HashMap catlgDBMap = (HashMap) 
catlgObjMap.get(MappingConstants.CATEGORY_BEAN);
catgryPrvwDB = (CategoryPreviewDataBean) 
catlgDBMap.get(catgryId);

3) 任何其它与产品相关的数据 Bean

String prodId = request.getParameter("productId"); 
if (prodId != null) { 
    HashMap catlgDBMap = (HashMap) catlgObjMap.get(MappingConstants.PRODUCT_BEAN);

    Object prodLvLObj = catlgDBMap.get(prodId);

    if (prodLvLObj != null) {
    if (prodLvLObj instanceof ProductPreviewDataBean) {
        ProductPreviewDataBean prodPrvwDB = 
        (ProductPreviewDataBean) prodLvLObj;
                                                                            ; 
    }
    else if (prodLvLObj instanceof ItemPreviewDataBean) {
        ItemPreviewDataBean itemPrvwDB = (ItemPreviewDataBean) prodLvLObj;
    
    }
    else if(prodLvLObj instanceof PackagePreviewDataBean) 
    {
        PackagePreviewDataBean itemPrvwDB = 
        (PackagePreviewDataBean) prodLvLObj;

}
else if(prodLvLObj instanceof BundlePreviewDataBean){
    BundlePreviewDataBean itemPrvwDB = (BundlePreviewDataBean) prodLvLObj;

}else if(prodLvLObj instanceof DynamicKitPreviewDataBean){
DynamicKitPreviewDataBean itemPrvwDB = (DynamicKitPreviewDataBean) prodLvLObj;

}

将这些数据 Bean 装入页面作用域 

if (cPrvwDb != null) {
pageContext.setAttribute("catalog",cPrvwDb,1); 

用来将数据 Bean 装入页面作业域的变量应该与存储库 JSP 中用来将该数据 Bean 实例化的变量同名。对于所有类型的目录对象都必须如此。

以静态方式将此 JSP 包括在用于显示目录对象的现有 JSP 中。

例如:<%@ include file="../../PreviewHelper/PreviewDatabeanEnvironmentSetup.jsp" %> 

确保在 JSP 中使用了这个数据 Bean

1) 如果正在使用 JSTL:不需要进行更改。

2) 如果正在使用常规 JSP 编码,则执行与以下代码段执行的操作类似的操作:

DynamicKitDataBean DynamicKitDataBean = null;
String storeId = ((TypedProperty)request.getAttribute(ECConstants.EC_REQUESTPROPERTIES)).getString(ECConstants.EC_STORE_ID); 

if (pageContext.getAttribute("DynamicKitDataBean") == null) {
DynamicKitDataBean = new DynamicKitDataBean ();
com.ibm.commerce.beans.DataBeanManager.activate (DynamicKitDataBean, request);
} else {
DynamicKitDataBean = (DynamicKitDataBean) pageContext.getAttribute("DynamicKitDataBean");
}

在预览方式下,根据情况取消某些操作

为了处理这些情况,请检查 PreviewBeanId 值,如果已设置此值,则执行适当的操作,例如显示一条消息来指示操作已被禁用,如以下代码段所示:

<c:when test="${!empty PreviewBeanId}">
<span class="text"><fmt:message key="SKU_NOT_BUYABLE" bundle="${storeText}" /></span><br /><br /> 
</c:when>

预览配置步骤:

填写 WPCWCproperties.properties 文件中的下列相应条目。这些条目指定用于预览 Product Center 中创建的各种目录对象的页面。键名是存储库标识、目录对象以及 Display 的组合。(在以下示例中,存储库标识是 ConsumerDirect)

######### CATALOG DISPLAY JSP's ###############
ConsumerDirectCategoryDisplay = ShoppingArea/CatalogSection/CategorySubsection/CategoriesDisplay.jsp
ConsumerDirectProductDisplay = ShoppingArea/CatalogSection/CatalogEntrySubsection/ProductDisplay.jsp
ConsumerDirectItemDisplay = ShoppingArea/CatalogSection/CatalogEntrySubsection/ItemDisplay.jsp
ConsumerDirectDynamicKitDisplay = ShoppingArea/CatalogSection/CatalogEntrySubsection/DynamicKitDisplay.jsp
ConsumerDirectPackageDisplay = ShoppingArea/CatalogSection/CatalogEntrySubsection/PackageDisplay.jsp
ConsumerDirectBundleDisplay = ShoppingArea/CatalogSection/CatalogEntrySubsection/BundleDisplay.jsp


Product Center 配置

使用下列步骤来配置 Product Center 以便进行 WebSphere Commerce 集成。

1. 在 WPC 环境中,通过运行命令 src/db/schema/cmp/create_cmp.sh --code=carmel 来创建名为 carmel 的公司。

2. 现在,使用 FTP 从以下位置获取 .zip 文件 commerce_carmelV1.0.zip。

服务器:<请参阅附带说明>
用户名:<请参阅附带说明>
密码:<请参阅附带说明>
位置:<请参阅附带说明>

3. 将该 zip 文件解压缩到一个本地目录中。这个 .zip 文件包含以下内容。

4. 为了解决导入/导出工具中的错误,首先创建一个未包含任何内容的属性集合 WCSKUAttrValColl。

5. 使用 WPC 的“导入环境”功能,首先将 COMMERCE_CARMELLKP.ZIP 导入到您在步骤 1 中创建的 carmel 公司中,然后导入 COMMERCE_CARMELNONLKP.ZIP。

6. 向 Commerce 小组寻求帮助以填写查找表 WCConfigLkpTbl 的下列查找表字段详细信息,保留此查找表中的其它值不变:

a. WC1_STORE_ID 

所发布的存储库的标识

b. WC1_MEMBER_ID 

Commerce 成员标识

c. WC1_MASTER_CATALOG_ID 

所发布的存储库的主目录的标识

d. WC1_LANGUAGE_ID 

始终是 1,请勿更改此值

e. WC1_ITEM_TYPE_ID 

请勿更改此值

f. WC1_ITEM_SPC_ID 

请勿更改此值 

g. WC1_BASE_ITEM_ID 

请勿更改此值 

h. WC1_FFMCENTER_ID 

向 Commerce 小组寻求帮助以填写此值

i. WC1_QUANTITY_ID 

请勿更改此值 

j. WC1_TRADE_POSCN_ID 

向 Commerce 小组寻求帮助以填写此值

k. WC1_SALES_CATALOG_ID 

必须在 Commerce 实例中创建一个销售目录,必须在这里指定该目录的标识,请向 Commerce 小组寻求帮助以完成此任务

l. WC1_FTP_HOST_NAME 

运行 Commerce 服务器的主机的标识

m. WC1_FTP_PORT 

FTP 端口,通常不需要更改此端口,此端口依赖于 Commerce 服务器主机上的 FTP 服务器配置

n. WC1_FTP_USER_ID 

Commerce 服务器主机的 FTP 服务器的 FTP 用户名,请向 Commerce 小组寻求帮助以填写此值

o. WC1_FTP_PASSWORD 

Commerce 服务器主机的 FTP 服务器的 FTP 密码,请向 Commerce 小组寻求帮助以填写此值

p. WC1_FTP_PATH 

成批装入工具从此路径中检取通过 FTP 传送的文件,请向 Commerce 小组寻求帮助以填写此值

q. WC1_SALES_HIERARCHY_NAME 

您不应该更改此值,这是您执行步骤 k 时在 Commerce 中创建的销售/导航目录的预定义销售层次结构

r. WC1_SERVER_NAME 

运行 Commerce 服务器的服务器的名称

s. WC1_LAST_UPLOAD_TIME 

最初请保留此键值为空白以便初始装入能够启动,此后,此键包含报告的上次运行时间戳记值,如果此键包含空值,则将执行初始装入

t. DEFAULT_LOCALE 

此属性必须包含集成部件的缺省语言环境值。必须在进行部署时设置此语言环境,之后不应该进行更改,并且,此语言环境必须是公司属性一部分并作为 WCCatentryCtg 和 WCSKUCtg 规范的一部分

u. WC1_LOGON_CMD 

此值必须是新的 Commerce 登录命令的标准 URL

http://<serverName_where_Commerce_installed>/webapp/wcs/stores/servlet/WPCWCLogOn?

v. WC1_LOGON_CMD_USER 

为了确保安全而创建的用户(请咨询 Commerce 小组)  

w. WC1_LOGON_CMD_USER_PASSWORD 

步骤 v 中创建的用户的密码 

7. 必须使用 Commerce 所支持的货币来填写查找表“WCCurrencyLkpTbl”,键和值都需填写每种货币的刚好三个字符的值。例如,同时将 USD 用作键和值。请向 Commerce 小组寻求帮助以获取相关 Commerce 版本所支持的货币列表。   

8. 要运行初始装入/更改部分装入,请执行 Product Center 报告 DataExportToCommerce。执行的是初始装入还是更改部分装入取决于上述字段的值。

9. 在安装 Product Center 的主机上,确保 /etc/hosts 文件包含 Commerce 服务器 IP。

10. 由于导入/导出工具存在错误,所以您需要为层次结构 WCPdtHier 手工设置属性集合 WCPdtHierAttrColl。

11. 确保将“主页”>“我的设置”中的“用于显示项和类别数据的语言环境”值设置为正确的语言环境,以使用户能够使用期望的语言环境来通过预览功能查看内容。

12. 确保将属性页面中 WCCatentryCtg 的链接属性 catentry 正确链接至 WCSKUCtg 属性 catentry_id,这是因为导入/导出工具的错误导致不会设置这个链接属性。

13. 挂装 public_html 目录。

14. 确保目录属性的标识条目值和名称条目值分别为 Master 和 MyMasterCatalog。

用于添加销售层次结构的步骤

1. 在 Commerce 中创建销售目录

2. 创建具有 WCCgrySalesHSpec 规范的类别树

3. 将此类别树作为目录 WCCatentryCtg 的辅助层次结构

4. 在查找表 SalesLookupTable 中创建一个新条目

5. 在查找表 LastSequenceRegister 中创建一个新条目

6. 从数据模型管理器 -> 脚本编制 -> 脚本控制台 -> 条目预览脚本中复制“Copy Items or Category”的内容,然后创建一个新的条目预览脚本,此脚本使用当前销售类别树的名称并追加“Copy Items or Category”以使名称唯一。

7. 从 WCSalesHr 的保存后事件和处理后事件复制脚本内容并且为新创建的销售层次结构粘贴同一内容。

 

第 4 章 业务流程

对 Commerce 执行的第一次目录馈送被认为是完全导出,以后,Product Center 中只有已被更改或已被删除的对象才会在更改部分馈送期间被导出以供 Commerce 使用。

Product Center 生成的 XML 符合由 Commerce 定义的 DTD(WCS.dtd)。更改部分处理过程始终是先删除 XML 并接着进行更新,从而使对象状态保持一致。

完全导出 

更改部分导出 - 删除

更改部分导出 - 更新

附录 A - 数据模型参考

Commerce 对象

由于首要的集成目标是共享 Product Center 中的数据,并且,由于为实现此目的而从 Product Center 中生成的 XML 数据模型是一个成批上载文档(此文档直接表示 Commerce 中不同的表),所以了解 Commerce 内部对象、对象存储在哪个表中以及不同 Commerce 对象之间的关系会对您很有帮助。

 

存储库 

我们可以将存储库看作一个主容器,所有数据都存储在此容器中并相互关联。在同一个 Commerce 应用程序中可以有多个存储库,并且同一信息可以存储在多个存储库中。所有存储库信息都将存储在 Commerce 表库和 storeent 中。

目录 

这些目录与 Product Center 目录类似。这些目录将被指定到至少一个存储库。与目录相关的信息存储在 2 个不同的表(catalog 和 catalogddsc)中。目录与存储库之间的关系存储在 storecat 中。 

类别 

这些类别与 Product Center 中的类别类似。这些类别将位于目录下方。与类别相关的信息存储在 2 个表(catgroup 和 catgrpdesc)中。不同类别之间的关系存储在 catgrprel 表中。类别与目录之间的关系存储在 cattogrp 表中,类别与存储库之间的关系存储在 storecgrp 表中。

产品 

这些产品将位于类别下方。所有与产品相关的信息都将存储在 3 个不同的表(baseitem、catentry 和 catentdesc)中。产品、束、静态工具箱、动态工具箱以及项等全部这些对象都将存储在同一组表(catentry 和 catentdesc)中,如果 catentry 的 catenttype_id 字段值为 productBean,则当前对象是产品。并且,与产品、静态工具箱和动态工具箱相关的信息将存储在另一个名为 baseitem 的表中,在该表中,如果 itemtype_id 字段值为 ITEM,则当前对象是产品。Storecent 表存储产品与存储库之间的关系。类别与产品之间的关系将存储在 catgpenrel 表中。

属性 

这些属性将被指定给产品,与属性相关的信息(包括属性与产品之间的关系)将存储在 attribute 表中。  

项 

这些项与 Product Center 中的项类似。项将位于产品下方。与项相关的信息存储在 2 个表(catentry 和 catentdesc)中。项和产品存储在同一个表中。catenttype_id 用于区分产品和项。对于项来说,catenttype_id 值将是 itemBean。与产品类似,项也将与特定的存储库相关,并且信息将存储在产品 storecent 表的所在位置。Catentrel 表存储产品与项之间的关系。 

属性值 

这些属性值将被指定给项,并且这些值是产品的各属性的值,而这些项是属于该产品的。与属性值相关的信息(包括项与属性值之间的关系)将存储在属性表中。

束 

束是一个分组对象,一个束可以由一组不同的项/产品/静态工具箱/动态工具箱构成。这个束将存储在 2 个表 catentry 和 catentdesc 中。此对象的 catenttype _id 是 BundleBean。

静态工具箱 

静态工具箱与束类似,不同点在于束可以断开关联而静态工具箱不能,并且静态工具箱只能包含库存标识。静态工具箱的 catenttype_id 是 StaticBean。除了 catentry 和 catentdesc 表以外,与静态工具箱相关的部分信息还将存储在 baseitem 表中,在此表中,如果 itemtype_id 字段值是 STKT,则表示当前对象是静态工具箱。

动态工具箱 

动态工具箱与静态工具箱类似,主要的差别在于动态工具箱可以存储产品配置程序 URL,此时,虽然项信息存储在本地,但将由位于指定 URL 的产品配置程序解析。除了 catentry 和 catentdesc 表以外,与静态工具箱相关的部分信息还将存储在 baseitem 表中,在此表中,如果 itemtype_id 字段值是 DNKT,则表示当前对象是动态工具箱。在 catentry 表中,此对象的 catentrytype_id 是 DynamicKitBean。

与 Commerce 相关的 Product Center 对象

所有与 Commerce 相关的 Product Center 对象都带有 WC 前缀,因此不会与任何其它对象产生冲突。

下表对上一个表进行总结。请参阅下表后面的验证部分以了解适用的验证集。

对象/功能

Product Center 表示法 Commerce 表示法

存储库

下列各值将作为键/值对存储在 Product Center 查找表中
  • store_id
  • member_id
  • ffmcenter_id
  • allocationgoodfor - 如果启用了 1 ATP,则对于 ATP,Product Center 需要装入另外一些静态值,否则不需要。
  • identifier
  • tradeposcn_id
与存储库相关的信息存储在 STORE 和 STOREENT 表中。每个存储库都与一个主目录和多个销售目录相关联。

目录

在 Product Center 中,主目录表示成 2 个目录和 2 个层次结构。

1. Catentry 目录
2. 库存标识目录
3. 产品层次结构
4. 产品库存标识层次结构

在 Product Center 中,任何特定于目录的属性都是作为目录属性的一部分存储的。对于特定于 Commerce 的属性来说,我们将使用定制目录属性定义功能,借助此功能,我们可以指定键和相关的值来作为目录属性。与层次结构相关的属性也将以相同的方式存储。Catentry目录将包含 WC 对象(产品、束、静态工具箱和动态工具箱)。

所有特定于目录的数据都存储在 catalog、catalogdsc 和 storecat 表中。可以与主目录相关联的不同对象包括类别、产品、项、束、静态工具箱和动态工具箱。这些信息存储在下列各表中:

1. catgroup

2. catgrpdesc

3. cattogrp

4. storecgrp

5. catgrprel

6. baseitem

7. catentry

8. catentdesc

9. catgpenrel

10. catentrel

11. attribute

12. attrvalue

类别

与 Product Center 类别类似。将使用产品层次结构来存储与类别相关的详细信息。在产品库存标识层次结构中,我们将确保用户无法在产品类别下创建任何类别,并且不能在除叶类别(这是产品)以外的任何其它类别下创建任何项。 所有与类别相关的信息都存储在下列表中:

1. catgroup

2. catgrpdesc

3. cattogrp

4. storecgrp

5. catgrprel

产品

产品将有自己的属性,并且将针对不同产品定义不同的属性集,这些属性的值是在项级别指定的。由于在 Product Center 中无法直接表示产品,所以产品是在 catentry 目录中定义的,其中,对于 catentrytype_id 字段,用户将选择 Product 值。保存该目录后,将在产品库存标识层次结构中创建一个类别,并且 catenetry 目录中对此产品指定的已定义属性将被创建成辅助规范并作为项类别规范被指定到产品库存标识层次结构中新创建的类别。此外,在此层次结构规范中还将有一个关系属性与 catentry 目录中对应的项相关。用户不需要单独地添加此产品类别。当用户在 catenetry 目录中创建产品时,就会自动地创建此类别并准备好添加项。产品不能具有关系属性值,如果用户输入了这些值,就会发生验证错误。
产品信息存储在 baseitem、catentry 和 cateentrydesc 表中。产品的基本项标识包含一个 itemtype_id 字段,此字段的值为 ITEM,在 catentry 表中,catenttype_id 字段的值为 ProductBean。

库存标识

所有与库存标识相关的详细信息都存储在库存标识目录中。此目录与产品库存标识层次结构的联系如下:在该层次结构中,所有产品都是叶类别,这些叶类别的属性是在保存 catenetry 目录后作为项类别规范指定的。添加库存标识时,它将预先填充所链接的产品的相应属性值,用户可以根据需要进行更改并保存。 所有与库存标识相关的详细信息都将存储在 catentry 和 cateentrydesc 表中。如果 catentry 表中的 catenttype_id 字段值为 ItemBean,则表示当前条目是库存标识。

在 catenetry 目录中,catenttype_id 字段值 Bundle 表示 Commerce 的束对象。此规范将具有一个 link 属性,此属性是一个多次出现属性,它被指定给库存标识目录。此属性将用来对库存标识目录中的不同库存标识进行分组。这些束可以具有描述性属性,但不能具有已定义的属性。 所有与束相关的详细信息都将存储在 catentry 和 cateentrydesc 表中。如果 catentry 表中的 catenttype_id 字段值为 BundleBean,则表示当前条目是束。

静态工具箱

Catentry 目录可以表示 Commerce 的静态工具箱对象,此时,catentrytype_id 值必须是 StaticKit。此目录将被指定给产品层次结构。当前规范将具有一个 link 属性,此属性是一个多次出现属性,它链接到库存标识目录。 
所有与静态工具箱相关的详细信息都将存储在 baseitem、catentry 和 cateentrydesc 表中。如果 catentry 表中的 catenttype_id 字段值为 StaticBean,则表示当前条目是束。如果 baseitem 表中的 itemtype_id 字段值为 STKT,则当前对象表示静态工具箱。

动态工具箱

Catentry 目录可以表示 Commerce 的动态工具箱对象,此时,catentrytype_id 字段值必须是 DynamicKit。此目录将被指定给产品层次结构。当前目录规范将具有一个 link 属性,此属性是一个多次出现属性,它被指定给库存标识目录。除此以外,还有一个 URL 类型的多次出现属性,该属性用来表示产品配置程序 URL。 所有与动态工具箱相关的详细信息都将存储在 baseitem、catentry 和 cateentrydesc 表中。如果 catentry 表中的 catenttype_id 字段值为 DynamicKitBean,则表示当前条目是束。如果 baseitem 表中的 itemtype_id 字段值为 DNKT,则当前对象表示动态工具箱。

ATP

如果 store 表中的 ALLOCATIONGOODFOR 字段值为 1,则表示启用此功能。在 Product Center 中,不需要进行任何计算也不需要用户输入任何内容来表示此功能。而是,使用 Commerce 小组提供的预定义静态值来创建 XML 片段以填充 Commerce 中相应的表。 
在 Commerce 中,下列各表用来表示 ATP:feature1、itemversn2、distarrang3、storeitem4、storeitmffc5、inventory6、itemspc7、versionspc8 和 itemffmctr

营销

此功能是使用一组特定于营销的属性实现的,这些属性是在 catentry 目录的当前规范中定义的。有 2 个重要的属性,其一是营销类型属性,此属性的值可以是 X-SELL、UPSELL、ACCESSORY 或 REPLACEMENT,另一属性是一个关系属性,用户可以通过该属性选择 cantentry 目录或库存标识目录并与相应的 WC 对象相关。  下面这一组表与营销相关:commerce1、massoctype2、massoc3 和 massoccece。

销售

此功能是通过一个包含不同类别的层次结构表示的,此层次结构可以是由用户直接创建的,用户也可以选择让此层次结构与产品层次结构包含同一组类别及其子代。此层次结构只能包含有关类别的信息。为了将销售层次结构与其它层次结构加以区分,我们添加了一个层次结构属性 HIERARCHY_TYPE,它的值为 SALES。

产品、库存标识、束、静态工具箱和动态工具箱信息不能作为销售层次结构的一部分表示。根据用户的需要,销售层次结构的数目可以不限。用户除了可以创建自己的类别以外,还可以选择从主目录或者从其它销售目录复制结构。为此,我们将对任何销售层次结构添加条目预览脚本,用户可以通过选择此脚本来从当前类别下的其它销售目录或主目录复制结构。

创建一个正常的目录,storecat 中的 mastercatalog 字段设置为 0。

项预览

将使用条目预览脚本来执行此功能,选择此功能时,将调用 Commerce 中的一个 URL 并指定必需的项信息。此项信息同样是当前条目的成批上载 XML,该条目可以是类别、产品、束、静态工具箱或动态工具箱。在调用 WC 的 URL 时,我们还将传递 WC 对象类型。  

添加

任何添加操作都包括添加图像以及属性,在导出期间,属性信息将作为成批上载 XML 结构的一部分传送,图像将被压缩并随成批装入 XML 文档一起发送。  

修改

与添加类似。对任何属性进行的任何更改都将导致发送所有属性,而不是只发送部分信息。  

删除

在 Product Center 中执行删除操作时,将设置 Commerce 表中的 markfordelete 字段,这会对相应的 Commerce 表执行更新操作,还会调用 WebSphere Commerce 中的一个命令 URL,该命令可以执行任何进一步的操作,例如:为了完成此操作而需执行的 SQL。  

本地化

在 Product Center 中,所有具有 language_id 的属性都将被定义为本地化属性。用户可以根据需要来通过 Product Center 设置启用所有语言环境。 语言环境支持是使用不同的表中的 language_id 字段实现的。目前,Commerce 支持的语言环境包括 en_US、ja_JP、fr_FR、de_DE、it_IT、es_ES、pt_BR、zh_CN、zh_TW 或 ko_KR。

货币

用户可以根据需要来通过 Product Center 设置配置所有货币。 目前,Commerce 支持的货币包括 BRL、CNY、EUR、JPY、KRW、TWD 和 USD。

当用户在处理后脚本中保存 catentry 目录中的项时,将执行下面这一组基本验证。 

Commerce 表定义被直接转换为 XML 标记,那些标记将表名用作元素名,并且将不同的表字段定义为元素属性。属性值就是需要在那些表字段中填写的实际值。(仅限于主键)主键带有 @ 符号前缀,因此将使用 Commerce 的主键生成规则来重新创建主键,然后再将这些值存储到 Commerce 表中。 

在实现期间,可以根据需要添加对此表的一个或多个扩展以及再添加几个字段。在此类情况下,扩展表将以外键形式链接到被扩展表中的相应记录。 

Product Center 与 Commerce 之间的数据传输是通过 XML 文档进行的。这些生成的文档将被放到 Product Center 和 Commerce 都了解的公共位置中,Commerce 将从该位置检取那些文档并处理它们。 

注意:在此数据交换期间进行的错误处理是手工进行的。不会执行任何从 Commerce 到 Product Center 的通信;通信方向始终是从 Product Center 到 Commerce。

Product Center 生成的 XML 文档必须与此 DTD 兼容。按照此 DTD 生成的 XML 文档是 Commerce 数据模型在模式级别的直接表示法。 

要在 Commerce 中对 Product Center 使用项预览功能,在 Product Center 中将添加一个菜单以允许使用定制工具来预览项,用户可以根据需要在选择项之后选择该预览菜单项。现在,Commerce 为实现这种项预览功能而提供的静态页面所能够显示的项详细信息将使用 HTTP 传递的方法进行传递。现在,同一信息将在 Commerce 端被解析并显示在 Commerce 静态页面上的适当位置中。静态页面的外观、用户可以从该页面浏览到哪些其它位置以及如何在该静态页面中对用户进行控制由 Commerce 小组确定。

Product Center 小组需要一个 URL 来执行 HTTP 传递调用并在静态页面中显示的必需数据。

声明

IBM 可能不在所有国家或地区提供本文档中讨论的产品、服务或功能特性。有关您当前所在区域的产品和服务的信息,请向您当地的 IBM 代表咨询。任何对 IBM 产品、程序或服务的引用并非意在明示或暗示只能使用 IBM 的产品、程序或服务。只要不侵犯 IBM 的知识产权,任何同等功能的产品、程序或服务,都可以代替 IBM 产品、程序或服务。但是,评估和验证任何非 IBM 产品、程序或服务,则由用户自行负责。

IBM 公司可能已拥有或正在申请与本文档内容有关的各项专利。提供本文档并未授予用户使用这些专利的任何许可。您可以用书面方式将许可查询寄往:

IBM Director of Licensing
IBM Corporation
North Castle Drive
Armonk, NY 10504-1785
U.S.A.

本条款不适用英国或任何这样的条款与当地法律不一致的国家或地区:

International Business Machines Corporation“按现状”提供本出版物,不附有任何种类的(无论是明示的还是暗含的)保证,包括但不限于暗含的有关非侵权、适销和适用于某种特定用途的保证。某些国家或地区在某些交易中不允许免除明示或暗含的保证。因此本条款可能不适用于您。

本信息中可能包含技术方面不够准确的地方或印刷错误。此处的信息将定期更改;这些更改将编入本资料的新版本中。IBM 可以随时对本资料中描述的产品和/或程序进行改进和/或更改,而不另行通知。

本信息中对非 IBM Web 站点的任何引用都只是为了方便起见才提供的,不以任何方式充当对那些 Web 站点的保证。那些 Web 站点中的资料不是 IBM 产品资料的一部分,使用那些 Web 站点带来的风险将由您自行承担。

IBM 可以按它认为适当的任何方式使用或分发您所提供的任何信息而无须对您承担任何责任。

本程序的被许可方如果要了解有关程序的信息以达到如下目的:(i)允许在独立创建的程序和其他程序(包括本程序)之间进行信息交换,以及(ii)允许对已经交换的信息进行相互使用,请与下列地址联系:

IBM Burlingame Laboratory
Director IBM Burlingame Laboratory
577 Airport Blvd., Suite 800
Burlingame, CA 94010
U.S.A

只要遵守适当的条件和条款,包括某些情形下的一定数量的付费,都可获得这方面的信息。

本资料中描述的许可程序及其所有可用的许可资料均由 IBM 依据 IBM 客户协议、IBM 国际软件许可协议或任何同等协议中的条款提供。

此处包含的任何性能数据都是在受控环境中测得的。因此,在其他操作环境中获得的数据可能会有明显的不同。有些测量可能是在开发级的系统上进行的,因此不保证与一般可用系统上进行的测量结果相同。此外,有些测量是通过推算而估计的,实际结果可能会有差异。本文档的用户应当验证其特定环境的适用数据。

涉及非 IBM 产品的信息可从这些产品的供应商、其出版说明或其他可公开获得的资料中获取。IBM 没有对这些产品进行测试,也无法确认其性能的精确性、兼容性或任何其他关于非 IBM 产品的声明。有关非 IBM 产品性能的问题应当向这些产品的供应商提出。

本信息可能包含日常业务经营中使用的数据和报告的示例。为了尽可能完整地说明这些示例,这些示例中包括个人、公司、品牌和产品的名称。所有这些人名或名称均系虚构,如有实际的企业名称和地址与此雷同,纯属巧合。

所有关于 IBM 未来方向或意向的声明都可随时更改或收回,而不另行通知,它们仅仅表示了目标和意愿而已。

编程接口信息

如果提供了编程接口信息,它用来帮助您使用此程序来创建应用软件。

通用编程接口允许您编写获取此程序工具的服务的应用软件。

但是,此信息也可能包含诊断、修改和调整信息。这些诊断、修改和调整信息用于帮助您调试应用软件。

警告:不要将此诊断、修改和调整信息用作编程接口,因为它是会更改的。

商标和服务标记

下列各项是 International Business Machines Corporation 在美国和/或其他国家或地区的商标或注册商标:

IBM
IBM logo
AIX
CrossWorlds
DB2
DB2 Universal Database
Domino
Lotus
Lotus Notes
MQIntegrator
MQSeries
Tivoli
WebSphere

Microsoft、Windows、Windows NT 和 Windows 徽标是 Microsoft Corporation 在美国和/或其他国家或地区的商标。

MMX、Pentium 和 ProShare 是 Intel Corporation 在美国和/或其他国家或地区的商标或注册商标。

Java 和所有基于 Java 的商标是 Sun Microsystems, Inc. 在美国和/或其他国家或地区的商标。

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


IBM WebSphere Product Center contains certain Excluded Components (as defined in the relevant License Information document), to which the following additional terms apply. This software is licensed to you under the terms and conditions of the International Program License Agreement, subject to its Excluded Components provisions. IBM is required to provide the following notices to you in connection with this softwatre:

i.) IBM WebSphere Product Center includes the following software that was licensed by IBM from the Apache Software Foundation under the terms and conditions of the Apache 2.0 license:

- Apache Regular Expression v1.2
- Apache Axis v1.1
- Apache XML4J v3.0.1
- Apache Log4j v1.1.1
- Apache Jakarta Commons DBCP Package v1.1
- Apache Jakarta Commons Pool Package v1.1
- Apache Jakarta Commons Collections Package v3.0

Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.

"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.

"Legal Entity" shall mean the union of the acting entity and all ther entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.

"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.

"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.

"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation, and conversions to other media types.

"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).

"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.

"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."

"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:

(a) You must give any other recipients of the Work or Derivative Works a copy of this License; and

(b) You must cause any modified files to carry prominent notices stating that You changed the files; and

(c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and

(d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.

You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work.

To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.

Copyright [yyyy] [name of copyright owner]

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

ii.) IBM WebSphere Product Center includes the following software that was licensed by IBM from Scott Hudson, Frank Flannery and C. Scott Ananian under the following terms and conditions:

- Cup Parser Generator v0.10k

CUP Parser Generator Copyright Notice, License, and Disclaimer
Copyright 1996-1999 by Scott Hudson, Frank Flannery, C. Scott Ananian 
Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both the copyright notice and this permission notice and warranty disclaimer appear in supporting documentation, and that the names of the authors or their employers not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. The authors and their employers disclaim all warranties with regard to this software, including all implied warranties of merchantability and fitness. In no event shall the authors or their employers be liable for any special, indirect or consequential damages or any damages whatsoever resulting from loss of use, data or profits, whether in an action of contract, negligence or other tortious action, arising out of or in connection with the use or performance of this software. 

iii.) IBM WebSphere Product Center includes the following software that was licensed by IBM from Elliot Joel Berk and C. Scott Ananian under the following terms and conditions:

- JLex v1.2.6

JLEX COPYRIGHT NOTICE, LICENSE AND DISCLAIMER.
Copyright 1996-2003 by Elliot Joel Berk and C. Scott Ananian 
Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both the copyright notice and this permission notice and warranty disclaimer appear in supporting documentation, and that the name of the authors or their employers not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. The authors and their employers disclaim all warranties with regard to this software, including all implied warranties of merchantability and fitness. In no event shall the authors or their employers be liable for any special, indirect or consequential damages or any damages whatsoever resulting from loss of use, data or profits, whether in an action of contract, negligence or other tortious action, arising out of or in connection with the use or performance of this software. Java is a trademark of Sun Microsystems, Inc. References to the Java programming language in relation to JLex are not meant to imply that Sun endorses this product. 

iv.) IBM WebSphere Product Center includes the following software that was licensed by IBM from International Business Machines Corporation and others under the following terms and conditions:

- ICU4J v2.8

ICU License - ICU 1.8.1 and later
COPYRIGHT AND PERMISSION NOTICE

Copyright (c) 1995-2003 International Business Machines Corporation and others
All rights reserved.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, provided that the above copyright notice(s) and this permission notice appear in all copies of the Software and that both the above copyright notice(s) and this permission notice appear in supporting documentation.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization of the copyright holder.

-----------------------------------------------------------------------------
All trademarks and registered trademarks mentioned herein are the property of their respective owners.