[摘要]部署一个可以公布产品信息和价格的企业外部站点是实现这些需求的一个好方法。该站点很容易访问,它可以给用户立即提供产品定价信息。企业外部站点可以接触公司的内部信息系统,从而获得、计算或查找每个用户对每个产品的特殊价格。它可以用一个注册机制来帮助鉴定和授权用户,这就避免了用户相互看到他人的价格,而且它可...
部署一个可以公布产品信息和价格的企业外部站点是实现这些需求的一个好方法。该站点很容易访问,它可以给用户立即提供产品定价信息。企业外部站点可以接触公司的内部信息系统,从而获得、计算或查找每个用户对每个产品的特殊价格。它可以用一个注册机制来帮助鉴定和授权用户,这就避免了用户相互看到他人的价格,而且它可以公布由企业内部应用程序动态存储或计算的价格,这样价格就总是正确的、最新的。
虽然.NET没有提供一个现成的(off-the shelf)企业外部网站,但它的确提供了一套好的工具和模块来构建一个企业外部网站。ASP.NET就是一个很好的用于构建企业外部网的平台,它比以前的运用ASP和COM的Windows Distributed Internet Applications(DNA)平台要好很多。不同于ASP和COM,ASP.NET提供了一个真正的面向对象的开发平台,它使开发人员可以更容易地将显示同逻辑分离开,极大地简化了站点的开发和维护。开发人员也可以通过继承运用现有的ASP.NET对象的丰富的功能。
实现一个门户UI
门户用户界面(UI)可能是实现企业外部网的最好的方法。在艺术级的门户站点上,浏览器窗口中的“房地产”被分成包含特殊内容或功能的象限或区域。你可以在诸如My Yahoo!和My MSN的公有门户上看到这种类型的UI。
实现门户UI上的每个区域或象限的代码是从门户代码自身中分离出来的。换句话说,门户站点被建成一个框架,在这个框架中,这些一块块的UI代码被执行。这些代码块有许多不同的名字,包括portlets、gadgets、components、和modules。
在J2EE世界中,人们正努力将portlet代码标准化,使portlets可以互换,这样任何支持标准的供应商提供的portlets就可以在一个门户站点上运行了(见资源)。在.NET平台上,ASP.NET在用户控件中提供了类似于portlets或gadgets的功能。用户控件不支持portlet标准,但是它们的确将强大的面向对象的原则引入到Web页面的构建中。Microsoft在一个称为IbuySpy的基于ASP.NET的门户站点中提供了一个例子来阐明这一点,开发人员可以将这个站点作为如何构建门户站点的一个指南(见资源)。
为了公布价格,你需要实现为每个用户计算或查找正确价格的商业逻辑。你可以用VS.NET和你选择的.NET编程语言写代码来完成这一点。你将代码写到适当的用户控件中,这样信息就可以显示在你的门户UI中了。
你需要确定将哪些工具用于后端集成来得到你需要的价格数据。.NET提供了ActiveX Data Objects .NET(ADO.NET),它在关系数据库中或在OLE DB和ODBC数据源中。对于深层的集成,Microsoft提供了BizTalk Server,它运用XML提供了复杂的数据转换和应用程序集成工具。如果你可以从一个后端系统得到任何一种预期的输出内容,BizTalk Server可以让你很容易地将输出内容转换成你可以用于你的门户站点的信息。
ADO.NET和BizTalk Server可以让你从你的后端系统得到定价数据,你可以用ASP.NET用户控件和你喜欢的.NET编程语言将价格数据公布到一个门户网站上。现在你需要确定只有你认为恰当的人才能看到那个信息。
你必须扩展.NET的本地的基于角色的安全性,使其可以用于一个B2B 企业外部网环境。例如,如果一个用户是以“采购代理”的角色注册的,你就不能确定那个采购代理是为哪个公司工作的。在一个价格公布应用程序中,你只想将用户A的价格显示给来自A公司的采购代理,将用户B的价格只显示给B公司的采购代理。
为了看到用户A的价格,一个用户必须是A公司采购代理的角色,而且必须是A公司的雇员。这就需要将逻辑AND用于这些用户的特性。不幸的是,对于.NET Framework的基于角色的安全性,没有机制可以在角色上执行逻辑AND。给一个用户分配两个角色(“采购代理”和“A公司的雇员”)也不行,因为分配两个角色只能让用户有权访问采购代理或A公司雇员可以访问的任何资源。给一个用户分配多个角色,其效果同在那些角色之间运用逻辑OR是一样的。
运用基于概要(profile-based)的安全性
对于一个价格公布应用程序,你需要基于概要的安全性来确保价格只呈现给恰当的人。运用基于概要的安全性,每个用户的多个特性,如身份、雇主、角色、头发颜色、政党等等,就可以用逻辑AND和逻辑OR结合起来,这样你的企业外部站点上的每块内容和每个功能就可以得到恰当的安全性了。
.NET没有提供基于概要的安全性;你必须构建或购买。幸运的是,.NET Framework是可以高度扩展的,你不用费什么力气就可以将基于概要的安全性装到你的.NET 应用程序中。运用一个关系数据库服务器可以最好地实现该安全性,这个关系数据库服务器包含一个用户及其特性的数据库。该数据库也可以包含用来控制对企业外部站点的内容和功能进行访问的安全信息。
将所有这些信息存在一个关系数据库中,你就可以写SQL存储过程,确定一个特殊的用户是否有权访问一个特定的资源。数据库可以很容易地返回一个特定用户被授权的所有资源的清单。你可以用ASP.NET内在的User对象将这个资源清单缓存起来,使企业外部站点必须执行的频繁的授权检查的性能达到最佳。
将用户信息存在一个关系数据库服务器中也提供了另外一个好处。你可以扩展这个数据库用于XRM应用程序开发。数据库不仅可以跟踪用户的安全性,它也可以通过恰当的站点使用数据,记录用户的商业问题、管理联合项目和工作流、分析每个用户是如何运用你的企业外部站点的。
为了公布价格,你的企业外部站点也需要对产品信息进行内容管理和编目录。公司提供和出售的产品是由一长串部件组成的,这些部件以许多种方式进行配置和定制来满足用户的特殊需求。然而,如今的在线目录系统只用一个简单的价格清单出售完成的产品。
Microsoft Commerce Server主要针对小规模的零售B2C商务,你需要扩展它,使其可以用于更普遍的B2B环境,在这个环境中,产品更复杂,定价不统一,用户的支付方式是通过交换定购单和发票完成的,而不是用信用卡。
如今产品的复杂性也要求你将在线产品目录同一个文件管理系统结合起来。你在显示目录中的每个产品时,需要在它的旁边用超链接将其连接到相关的文件。这样,你就可以用复杂的信息来补充目录中的每个产品了,比如用白皮书、规范、使用指南、文件列表、产品文件等等。文件管理系统可以使公司的域专家很容易地管理那些文件。
构建文件库
从其名称上看,Microsoft Content Management Server(CMS)给人的印象是它在内容管理方面很有用。然而,CMS只能让你为一个网站创建一个设计模板,然后把内容插到那个模板中。例如,如果你在线发布一个报纸,那么CMS会很有用,因为格式是不变的,只需要经常改变内容就行了。但是它不适用于包含复杂产品的B2B目录。
Microsoft SharePoint Portal Server(SPS)是另一个产品,它的名字听起来很有希望,但是它不适用于B2B价格公布应用程序。SPS是一个用于Microsoft Office应用程序的服务器。Office 用户可以将他们的文件保存在SPS中,而不用保存在他们的本地硬盘上,这就使公司内部的其它Office用户可以很容易地访问这些文件。SPS不适用于价格公布应用程序,而且它也还没用于.NET。
因此,运用.NET,你必须为任何价格公布类型的应用程序构建目录和文件管理系统。对于产品目录来说,你也许可以扩展Commerce Server。对一个文件库来说,你可以用文件系统、Microsoft Exchange或Microsoft SQL Server。在这些选项中,我建议使用SQL Server,因为它是一个事务处理数据库,能够存储二进位的大的对象(blobs)以及元数据。很容易搜索基于SQL Server的内容库,用来存储和检索数据的编程接口很强大,有许多文件可以证明这一点。在SQL Server中实现一个文件库不是一项琐碎的工作,但它也不是一项很浩大的任务。
一旦你拥有了一个具有基于概要的安全性、后端系统集成、内容管理系统和目录系统的企业外部站点,你就可以实施你的价格公布应用程序了。我建议开始时,只实现一部分。这种想法是为了让应用程序的功能部分运转及实施起来,使你对.NET有一些体验。
最好开始时只实现具有基于概要的安全性和一些简单的后端集成的门户站点。例如,站点可以公布不包括产品信息的、个性化的、简单的价格清单。一旦你实现了这个功能,你将会得到一些经验,就可以做好准备继续开发文件管理和/或目录系统了。你也许也想在企业外部站点上实现Web services或电子邮件通知。对于这种复杂的应用程序部分,.NET可以让你每次呈现一点点,使你在严格控制时间和金钱的投资的前提下,能够逐步进入Web application servers的多方面领域。
关于作者:
Lyn Robison是Implementing B2B Commerce with .NET: A Guide for Programmers and Technical Managers (Addison Wesley Professional, 2001)一书的作者。他的第一本书是Teach Yourself Database Programming with Visual C++ 6 in 21 Days (Sams, 1998)。联系方式:Lyn@howtob2b.com。
……