通过使用XML程序ExcelAccess以及ASP(Active Server Pages)我们能帮助企业客户订单登陆流程化节省客户重复输入数据的时间并避免订单登陆过程中发生错误真正吸引客户的是能够减少重复性工作节省时间和金钱的项目如果能满足上述三点要求就可以进一步拉近客户的关系
最近我受聘对一个现有的订单登陆系统进行升级下面我将介绍客户所面临的问题以及解决这些问题的方法
背景
客户使用第三方系统完成订单登陆库存维护和货品计价传统的工作流程是这样的
客户向销售员申报订单
销售员将订单输入系统产生订购单
准备好发货的时候会产生纪录并将订购货品的数量从库存目录中扣除
给客户产生一个发货单
这个系统还包含了一个电子商务组件为客户提供网上交易他们能通过公司的网站进行订购在这种情况下销售员不需要将订单输入系统订单将在网上商店里产生并在当天结束营业时上传到系统
我的客户还拥有两家出版物供应商他们也有自己的订单登陆系统订单最初要登陆到其他系统因此客户将收到两方的订单通知
客户通过Web浏览器登陆到第一家供应商的系统申报订购的项目第二家供应商的订单登陆系统则将向客户发送电子邮件在这两种情况下客户公司的售货员都必须重复地向订单登陆系统键入订单信息初步估计每个售货员每周有超过个小时在重复键入这些订单
而我的任务是将订单登陆流程自动化从而减少重复键入数据的时间并避免任何订单登陆失误
解决方案
将订单登陆到系统有两种方法第一种是打开桌面客户端并键入订单第二种则是在Web站点上登陆订单Web站点不直接连接到订单登陆系统
每天键入Web站点的订单被写成一个XML文件它随后又被拷贝到应用服务器上接着被系统导入并产生订单这是我的突破口我将从供应商的系统中获取数据产生一个和网站上相同schema的XML文件接着将其加载到应用服务器上
我将我的想法传递给厂商经核实这种方法是有效的在取得同意之后我获得了我需要的XML schema我的解决方案的体系结构是简单易行的
我将通过Microsoft Excel提供的功能打开第一家供应商网站的报告通过Excel Object Model 提取订单数据并将数据传递给产生XML文件的组件
针对第二家供应商的方法相当简单我将在Microsoft Outlook中获取其电子邮件通过Outlook Object Model提取订单数据并将数据传递给产生XML文件的组件
这给了我第三种选择销售员经可以在家中通过虚拟专用网(VPN)访问我的客户的系统或许是从应用服务器向桌面客户端传递的数据量过于庞大原因订单登陆程序并不能通过VPN连接运行销售员需要做的只是登陆订单
我开发出一套简单而高效的解决方案在公司内部网创建一个简单的表格可以在这里登陆订单数据Web服务器(运行ASP的Microsoft IIS)将从表格提取数据并传递到XML生成组件(VPN和内部网被认为是足够安全的以至于打开订单登陆程序不需要另外登陆)
现在我已经拥有三个相同的XML组件的前端它们能将数据上载到订单登陆系统计划的开始是建立XML组件因为它是公共元素能被Excel接口Outlook接口以及ASP表格处理
XML组件
XML生成器将包含一个ORDER对象来描述订单这个对象将负责从前端接收订单数据并输入XML文件出于简单考虑文件路径被复杂地编码但非常容易被配置文件读取ORDER对象将包含描绘上述每个元素的属性
它还将封装一个LINEITEM的集合描绘项目的细节LINEITEM对象将包含描绘XML schema中相应数据的属性ORDER对象将接受订单数据创建所需的LINEITEM对象通过订单数据创建XML文件结构并将此结构写入一个XML文件
文件将根据订单编号命名这个编号是唯一的它将由前端生成拥有独立的前缀和时间标记
XML组件编程
我在Visual Basic 编写了这个组件创建了一个ActiveX DLL工程并添加ORDER和LINEITEM对象的类我首先处理ORDER类为每个XML元素添加属性
XML schema中的第一个元素是ORDER ordernum=abcde这个ORDER 类将包含一个叫做ordernum的属性
在VB中定义属性需要个步骤首先需要创建一个私有变量来存储属性值接着将ordernum属性定义为长度为个字符的字符串
Private strOrderNum as String
这个属性对于所有Let属性和Get属性子程序类的用户都是可访问的这些子程序将私有变量约束为公共属性并同时实现必须的有效性检查在这个情况下保证订单号码是个字符
这个类的用户现在能通过下面的程序行来获得或设置ordernum属性
Dim objOrder as Order
Set objOrder = new Order
objOrderOrderNum = x
MsgBox objOrderOrderNum
ORDER类也包含下面XML元素的属性
clientNum: 对应CLIENT_NUM元素
orderDate: 对应DATE元素
clientCostCenter: 对应CLIENT_COST_CENTER元素
clientPurchaseOrder: 对应CLIENT_PURCHASE_ORDER元素
attn: 对应 ATTN 元素
shipTrackNo: 对应SHIPPING元素
shipCompany: 对应SHIPPING元素company属性
shipAddrLine: 对应SHIPPING_LOC 元素中的ADDR_LINE_元素
shipAddrLine: 对应SHIPPING_LOC 元素中的ADDR_LINE_元素
shipAddrCity: 对应SHIPPING_LOC 元素中的ADDR_CITY元素
shipAddrState: 对应SHIPPING_LOC 元素中的ADDR_STATE元素
shipAddrZipCode: 对应SHIPPING_LOC 元素中的ADDR_ZIP元素
comments: 对应COMMENTS元素
LINE_ITEMS属性的实现略微有些不同ORDER类将包含一个lineItems属性它搜集LINEITEMS对象
首先存储集合的私有变量声明如下
Private colLineItems as Collection
接着将创建一个添加项目的子程序它能将LINEITEM添加到colLineItems集合中去LINEITEM类本身和ORDER类的实现方法相同包含对应以下XML元素的属性
itemCatalog: 对应 ITEM 元素catalog属性
itemID: 对应ITEM元素
description: 对应DESCRIPTION元素
unitPrice: 对应UNIT_PRICE元素
quantity: 对应QUANTITY元素
接下来的一步
我已经定义了为完成描述订单的XML文件所需的所有组件的属性今后我将会把重点放到建立Excel 接口通过Excel Object Model 提取第一家供应商订单数据并将数据传递给XML文件