本教程对如何开发 Web、移动和">第三方应用程序使用的服务提供了指南。本教程还介绍了 WebSphereCommerce 基于 SOA 的编程模型,以及如何构建您可以跨不同渠道进行重用的业务逻辑。本教程主要针对于实现 WebSphere Commerce 解决方案的架构师、顾问和开发人员。
目标
在本教程中,您将定制 Catalog 服务,以支持扩展的目录项信息和使用来自多个渠道的服务。该定制包括:
更新 WebSphere Commerce 架构以存储新信息。 定制 Catalog 服务,将新信息包括为 Catalog
Entry 名词中的用户数据。 无论客户端来自哪个渠道,都会重用相同的服务代码。
先决条件
本教程是针对具有中等水平技能和经验的 WebSphere Commerce 开发人员而编写。除此之外,您还需要熟悉面向服务架构 (SOA) 概念。
系统要求
为了在这里创建一个示例,您需要安装和配置 WebSphere Commerce Developer V7。您还需要使用 Furniture catalog 发布的 Madison Extended 站点 Starter Store。
在您开始本教程之前:
下载并安装 soapUI 应用程序,以使用 Web 服务。 将本教程提供的 code sample.zip 文件
解压缩至一个临时位置,如 C:\Lab_Instructions。 <WCDev_Dir> 代表安装了 WebSphere Commerce 开发环境的目录,
例如,C:\WebSphere\WC
Toolkit.
定制 WebSphere Commerce 架构
在本节中,您将在 WebSphere Commerce 架构中添加新表,以存储其他产品信息。图 1 显示了架构中的变更。
图 1. 架构扩展
该架构显示了新表以及它们与现有表的关系。新表包括 XPRODUCT、XPRODUCT_KIOSK 和 XCAREINSTRUCTION:
XPRODUCT 表:该表对 CATENTRY 表有一个外键。出于演示目的,该表为一个给定的目录项保存有关导入信息的数据。这使
数据服务层 (DSL) 可以填充来自 CatalogEntry 名词的 USERDATA 元素中的 XPRODUCT 表的数据。
注:USERDATA 是一个开箱即用的扩展点,允许客户将简单的 “名称-值” 对添加到名词或服务响应。该数据来自对名词的基表有一个外键的自定义表。该关系必须是一对一的。不 支持用户数据的一对多关系。
XPRODUCT_KIOSK 表:该表对 CATENTRY 表也有一个外键。出于演示目的,该表保存特定于 Kiosk 渠道的数据。这使数据服务层 (DSL) 可以填充来自 CatalogEntry 名词的 USERDATA 元素中的 XPRODUCT_KIOSK 表的数据。 XCAREINSTRUCTION 表:该表对 CATENTDESC 表有一个外键,使 DSL 可以填充 CatalogEntryDescription 名词部分的 ATTRIBUTE 元素中的数据。
XCAREINSTRUCTION 表对 CATENTRY 表有一个外键,向 DSL 搜索函数提供支持。该表保存有关护理指示的信息,例如,对于一个给定目录项的 “易碎,小心处理”。
要添加新表:
连接到开发数据库并执行以下 SQL: 单击 Start > Run 并输入 db2cmd。 将目录更改至 C:\Lab_Instructions。 使用 db2 connect to <DB_Name> 连接到数据库。 运行 SQL 以创建表,如下所示: db2 -tvf CustomTablesDefinitions.sql CREATE TABLE XPRODUCT ( CATENTRY_ID BIGINT NOT NULL, IMPORTED VARCHAR(1), IMPORTED_COUNTRY VARCHAR(30), O
PTCOUNTER SMALLINT, CONSTRAINT XPRODUCT_PK PRIMARY KEY (CATENTRY_ID), CONSTRAINT XPRODUCT_FK FOREIGN KEY (CATENTRY_ID) REFERENCES CATENTRY (CATENTRY_ID) on delete cascade ); CREATE TABLE XPRODUCT_KIOSK ( CATENTRY_ID BIGINT NOT NULL, AISLE_NUMBER VARCHAR(5), AISLE_Information VARCHAR(100), OPTCOUNTER SMALLINT, CONSTRAINT XPRODUCT_KIOSK_PK PRIMARY KEY (CATENTRY_ID), CONSTRAINT XPRODUCT_KIOSK_FK FOREIGN KEY (CATENTRY_ID) REFERENCES CATENTRY (CATENTRY_ID) on delete cascade ); CREATE TABLE XCAREINSTRUCTION ( CATENTRY_ID BIGINT NOT NULL, LANGUAGE_ID INTEGER NOT NULL, CAREINSTRUCTION VARCHAR(254), OPTCOUNTER SMALLINT, CONSTRAINT XCAREINST_PK PRIMARY KEY (CATENTRY_ID, LANGUAGE_ID), CONSTRAINT XCAREINST_FK1 FOREIGN KEY (CATENTRY_ID,LANGUAGE_ID) REFERENCES CATENTDESC(CATENTRY_ID,LANGUAGE_ID) on delete cascade, CONSTRAINT XCAREINST_FK2 FOREIGN KEY (CATENTRY_ID)REFERENCES CATENTRY (CATENTRY_ID) on delete cascade ); 通过运行以下 SQL 语句,用一些样例数据填充自定义表。确保您在下面所示的 SQL 中替换了正确的 CatalogEntry_id。在上面步骤 1a 中所打开的 DB2® 命令提示符后,输入以下命令,将样例数据
插入自定义表: db2 -tvf SampleData.sqlINSERT INTO XPRODUCT (CATENTRY_ID, IMPORTED, IMPORTED_COUNTRY) VALUES (10001,'Y', 'Japan, The Land of Rising Sun');INSERT INTO XPRODUCT (CATENTRY_ID, IMPORTED, IMPORTED_COUNTRY) VALUES (10002,'Y', 'India, The subcontinent'); INSERT INTO XCAREINSTRUCTION (CATENTRY_ID, LANGUAGE_ID, CAREINSTRUCTION) VALUES (10001, -1, 'Never use an abrasive cleaner or material on any finished product');INSERT INTO XCAREINSTRUCTION (CATENTRY_ID, LANGUAGE_ID, CAREINSTRUCTION) VALUES (10002, -1, 'Never use an abrasive cleaner or material on any finished product'); INSERT INTO XPRODUCT_KIOSK (CATENTRY_ID, AISLE_NUMBER, AISLE_Information) VALUES (10001, '10', 'Available in aisle');INSERT INTO XPRODUCT_KIOSK (CATENTRY_ID, AISLE_NUMBER, AISLE_Information) VALUES (10002, '12', 'Available near checkout counter');