用ActiveX控件和JavaScript脚本实现基于Web的票据套打(源码下载)
本文所描述的是在某大型国企中发票打印的设计与实现。由于本系统是作为一个项目的组成部分而不是一个独立的项目存在,所以用户很自然的提出了发票打印的操作要以WEB形式进行操作。这一个看似简单的需求导致了无数的后话,说实话:感谢客户给我一个锻炼的机会。现在项目已经到了验收阶段,这让我有机会从这个项目中把收获到的东西好好总结一下,有一些东西可能出了这个公司的门就再也不会遇见了,于是本文诞生了!
先说明一下该系统的过程吧.
首先就认为是一个简单的本地(网络)打印机的调用过程罢了(一个南京的朋友有类似的DEMO,还提供了源码DOWNLOAD),没想到项目中有一个信息发布平台的子系统,结果用户就强烈的,非常强烈的要求要将打印在WEB上实现,也罢也罢,那就得要做一个内嵌WEB的控件来调用打印机了,想了想用DELPHI来开发算了,它的ACTIVEX FORM真不错.好不容易把控件搞定了,下面就是数据源的问题了.
图1 - DELPHI ACTIVEX FORM INTERFACE LIST
也是因为自己经验不足,没有充分意识到数据源在本系统里面的重要性(其实已经早就意识到了,只不过....).下面介绍下票据数据源的信息:在该企业里有已上马的SAP系统,当然要我通过SAP写AB语言来进行访问,那就要了我的命算了.好在SAP数据库本身就是一个及其复杂的ORACLE而已(在SAP这层上进行的关联还是牛B的),而已也有对应字段的含义,于是建立一个ORACLE数据库连接不就了了么?众所周知,SAP数据库可不是想让你连过久连多久的,而已其服务器的资源是非常宝贵的,最可恶的是这其中涉及很多的非技术因素,如果每个企业应用都直连SAP,它就离死不远了.所以就有一个本地ORACLE数据库的存在,想想做个DTS就KO了吧,非也非也.SAP的数据库字符集和我们通常所有的ORACLE不同,SAP为德文字符集,而我们的是中文的,在做数据DTS时无法进行字符集的转换,造成应用时的展示为乱码,由于两个字符集在数据存储时的空间就不同(中文16位,德文8位),所以就要在其中做字符集的转换,但是又不能在ORACLE上创建第二个实例,郁闷啊郁闷啊,也不是SHUT DOWN,因为在本地ORACLE上还有其他的应用数据库,只好做了一个BUFFER SERVER结合UDP通讯进行数据库的操作.该操作的步骤如下:
下面是系统架构图,涉及到的东西比较多,针对这个图说明两点:
图2 - 系统整体架构图
先说明一下该系统的过程吧.
首先就认为是一个简单的本地(网络)打印机的调用过程罢了(一个南京的朋友有类似的DEMO,还提供了源码DOWNLOAD),没想到项目中有一个信息发布平台的子系统,结果用户就强烈的,非常强烈的要求要将打印在WEB上实现,也罢也罢,那就得要做一个内嵌WEB的控件来调用打印机了,想了想用DELPHI来开发算了,它的ACTIVEX FORM真不错.好不容易把控件搞定了,下面就是数据源的问题了.
图1 - DELPHI ACTIVEX FORM INTERFACE LIST
也是因为自己经验不足,没有充分意识到数据源在本系统里面的重要性(其实已经早就意识到了,只不过....).下面介绍下票据数据源的信息:在该企业里有已上马的SAP系统,当然要我通过SAP写AB语言来进行访问,那就要了我的命算了.好在SAP数据库本身就是一个及其复杂的ORACLE而已(在SAP这层上进行的关联还是牛B的),而已也有对应字段的含义,于是建立一个ORACLE数据库连接不就了了么?众所周知,SAP数据库可不是想让你连过久连多久的,而已其服务器的资源是非常宝贵的,最可恶的是这其中涉及很多的非技术因素,如果每个企业应用都直连SAP,它就离死不远了.所以就有一个本地ORACLE数据库的存在,想想做个DTS就KO了吧,非也非也.SAP的数据库字符集和我们通常所有的ORACLE不同,SAP为德文字符集,而我们的是中文的,在做数据DTS时无法进行字符集的转换,造成应用时的展示为乱码,由于两个字符集在数据存储时的空间就不同(中文16位,德文8位),所以就要在其中做字符集的转换,但是又不能在ORACLE上创建第二个实例,郁闷啊郁闷啊,也不是SHUT DOWN,因为在本地ORACLE上还有其他的应用数据库,只好做了一个BUFFER SERVER结合UDP通讯进行数据库的操作.该操作的步骤如下:
- 1.BUFFER与SAP数据库建立DB LINK
2.BUFFER字符集转换为SAP字符集
3.清空BUFFER
4.利用DB LINK,用SAP数据填充BUFFER
5.改变BUFFER为中文字符集
6.清空LOCAL
7.用BUFFER填充LOCAL
下面是系统架构图,涉及到的东西比较多,针对这个图说明两点:
- 1.Application Database采用的是ACCESS数据库
2.WEBDEC / ZHS16GBK为ORACLE字符集的名称
图2 - 系统整体架构图
由于过程中并非都由我进行编码,本着互相交流的愿望,所有源码提供下载(已经过初步测试).
向我的同事们鼓掌!同时也希望大家多提意见,共同进步.
Web Site
UDP SERVER
ACTIVEX控件