您的位置:首页 > 编程语言 > ASP

使用soaoffice中间件+asp实例编写小型的企业管理程序(一)

2009-07-14 19:03 591 查看
以前在程序中需要显示office文件,通常都是使用Office Viewer OCX这个控件,这段时间接触到了soaoffice中间件,在一个项目中亲身体会了一下,觉得不错,所以就用一个实际的例子来说明一下。先声明一下,我并不是soaoffice中间的托,写这个主要目的因为接触时间短怕自己忘记,同时也想省去那些需要使用的人再化时间去摸索。
本例以一个简化了的实际业务描述如何通过asp+soaofiice中间件编写信息管理软件。

一.业务基本介绍:
公司需要一个批次管理系统,其功能相对来说比较简单,就是生成一个批次单,最后在完工关闭批次的时候,填写本批次完工后的质量信息.实现这个程序的方法有千万种,但是在企业中做过的人都知道excel的应用深度,所以系统的前提要照顾这些用户.最后选定的实现方式是asp+excel,省脑细胞也快捷。

二.系统的思路:
1.通过一个界面将产品的工艺流程录入,也可以导入;
2.系统生成批次时,根据产品代码从数据库中检索出对应产品的工序,填入到预先设计作为模板的excel文件中,生产新的批次文件。
3.制造结束后,将批次对应的质量情况,比如料费/工废等信息录入到excel中,保存的时候,同时将这些数据提取出来放到数据库中。
4.提供一个报表检索的页面,可以查看批次状态,并可以调出批次单.

在开始之前,我们需要安装soaoffice中间件,安装文件不大,安装包中带了三个月试用序列号。除了安装服务器端,还需要安装一下客户端,这个客户端倒不是他们自己设计的excel,只是实现了与office 的通讯,并暴露一些方法/属性供我们调用。安装完毕,可以开始自己的工作了。

三.系统的架构

在IIS中新建一个虚拟目录,指向自己建立的文件夹batch,在文件夹内再建立一个子文件夹 batchfiles用于存放生成的批次卡。同时在这个文件夹中增加如下几个asp文件:
opendb.asp--------------连接数据库的文件
workprocess.asp--------添加产品工序的地方;
batchcreate.asp---------生成批次的文件
batchedit.asp-------------编辑批次的文件
batchreport.asp----------检索批次及调取批次单的文件;
print.xls---------------------这个是我们要套打得模板,也是所有生成的批次文件的模版
.......其实我们最后应该不止这几个文件,但是这几个文件目前是我们现在能想到的框架文件.

对于整个程序的目标清晰后,我们还需要创建一下数据库结构,简化一下,我们只需要两个表:
create table workprocess (productid varchar(20),workprocess varchar(20),weight int default 0,id int identity(1,1))
--productid是产品编码,workprocess是加工工序,weight是工序顺序 ,id是流水号
create table batch (batch varchar(20),billdate smalldatetime default getdate(),productid varchar(20),filestr varchar(100),qty int,mwaster int default 0,wwaster int default,stateflag tinyint default 0,id int identity(1,1))
--batch是批次号,billdate是批次时间,productid是产品编码,filestr是生成的批次文件名,qty是批次数量,mwaster是料废数,wwaster是工废数,stateflag是一个标记(0表示未完工,1表示已经完工) id是流水号

接下来创建一下添加和删除数据的存储过程:
--添加工序
create procedure workprocessadd
@productid varchar(20),
@workprocess varchar(20),
@weight int
as
if not exists(select 1 from workprocess where workprocess=@workprocess and productid=@productid)
begin
return
end
insert into workprocess (productid,workprocess,weight) select @productid,@workprocess,@weight
go
--生成批次
create procedure batchcreate
@batch varchar(20),
@productid varchar(20),
@qty int,
@filestr varchar(150),
@batchid int output
as
insert into batch (productid,batch,qty,filestr) select @productid,@batch,@qty,@filestr
set @batchid=@@identity
go
--更新批次
create procedure batchupdate
@batchid int,
@mwaster int,
@wwaster int
as
if not exists(select 1 from batch where id=@batchid and stateflag=0)
begin
return
end
update batch set mwaster=@mwaster,wwaster=@wwaster,stateflag=1 where id=@batchid
go

完成了上面的这些,整个程序的架构就基本清楚了,下面就是到了写代码时候了。

四.代码编写
首先我们来创建连接数据库的opendb.asp,以供其他的页面引用.代码很简单:
<%
'连接数据库
set mycn=server.createobject("adodb.connection")
mycn.open"driver={sql server};server=127.0.0.1;datebase=batch;uid=sa;pwd=111111;"
'反正后面也要声明的,一并在这里声明了
set rs1=server.createobject("adodb.recordset")
%>

接下来开始真正的业务程序编写.我们来建立添加工序的页面workprocess.asp.这个也很简单:
<!--#include file=opendb.asp-->
<form action=workprocess.asp method=post>
产品编码<input type=text name=productid size=20>
工序名称<input type=text name=workprocess size=2=10>
weight<input type=text name=weight size=10><input type=submit name=ok value=添加><input type=submit name=ok value=检索><input type=button name=ok value=批量导入 onclick="window.open('workprocessload.asp','newwind',left=10,top=10,fullscreen=1,scrollbars=yes,resizable=yes')">
<%
condition=" 1<>1"
if request.servervariables("request_method")="Post" then
select case request("ok")
case "添加"
'验证是否为空这里就不写了,可以使用javascript在客户端验证
mycn.execute"workprocessadd '"&trim(request("productid"))&"','"&trim(request("workprocess"))&"',"&request("weight")&""
response.write"<script>alert('添加成功')</script>"
condition=" productid='"&request("productid")&"'"
case "检索"
condition=" productid='"&request("productid")&"'"
end select
end if
'显示已经录入的
sql="select * from workprocess where "&condition&" order by productid,weight"
rs1.oepn sql,mycn,1
do until rs1.eof
response.write"<tr><td>"&rs1("productid")&"<td>"&rs1("workprocess")&"<td>"&rs1("weight")&"<td><a href=workprocess.asp?delid="&rs1("id")&" onclick=""return confirm('真的要删除此工序吗?')</script>"
rs1.movenext
loop
end if
rs1.close
%>
程序写到这里还没有和soaoffice中间件沾上任何边,但是在上面的批量导入按钮已经预留好了.这个放到后面说.我们先继续批次生成文件batchcreate.asp.
<!--#include file=opendb.asp-->
<%
if request.servervariables("request_method")="post" then
'验证输入是否为空这里就不写了
'因为每一批次文件都要生成独立文件,所以需要我们起的文件名也要不一样,因为一个产品的一个批次号是唯一的,那我们就用产品代好+批次号作为excel的文件名
filenamestr=trim(request("productid"))&"-"&trim(request("batch"))
set mycm=server.createobject("adodb.command")
mycm.activeconnection=mycn
mycm.commandtext=" batchcreate"
mycn.commandtype=4
mycm.parameters.append mycm.createpararmter("@batch",130,1,20,trim(request("batch")))
mycm.parameters.append mycm.createparameter("@productid",130,1,20,trim(request("prodcutid")))
mycm.parameters.append mycm.createparameter("@qty",3,1,4,abs(request("qty")))
mycm.parameters.append mycm.createparameter("@filestr",130,1,150,filenamestr)
mycm.parameters.append mycm.createparameter("@batchid",3,2,4)
mycm.execute
response.redirect"batchprint.asp?batchid="&mycm.parameter("@batchid")&""
end if
%>
<form action=batchcreate.asp method=post>
批次号码<Input type=text name=batch产品代码<input type=text name=productid size=20>本批次数量<input type=text name=qty size=10><input type=submit name=ok value=创建批次>
</form>

在上面完成的这些程序中也没有用到soaoffice中间件,但是可以看到离他越来越近了.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: