本段文章节选自铁道出版社新出的《用BackOffice建立Intranet/Extranet应用》一书(现已在海淀图书城有售)。本书详尽地讲述了如何使用微软BackOffice系列产品来组建Intranet/Extranet应用。通过它您将掌握NT的安装和设置、使用IIS建立Web站点、通过ILS建立网络会议系统、用Exchange建立企业的邮件和协作系统、用SQL Server建立Web数据库应用、用Proxy Server建立同Internet安全可靠的连接、用Media Server建立网络电视台/广播站、用Chart server建立功能强大的聊天室、用Site Server建立个性化的邮件列表和分析网站的访问情况、用Commerce Server建立B2B或B2C的电子商务网站。此外本书还对网络的安全性进行了讨论,从而指导您建立一个更为健壮和安全的网络应用。阅读本书之后,您将发现实现丰富多彩的网络应用原来这样简单……
绝对原创,欢迎转载。但请务必保留以上文字。
静态页面导出实例分析:
下面讨论如何使用静态页面导出技术来实现我们在前面要求的各种功能。
首先,我们来看看要导出的页面文件的结构:
所有导出的页面都将被放在一个目录名为当日期的目录下。其中有两个非导出文件index.htm和show.htm文件。其作用同cbbinput目录中的default.htm和show.htm文件相类似。都是为了满足使页面能够正常显示的需要。之所以使用index.htm而不用default.htm为文件名,是因为大多数ISP提供的主页空间的目录省缺文件的名字都是index.htm。
当日的各个版面则导出为一个名为list.htm的文件。每个版面的文章题目列表则分别按顺序导出为1~n(n为当日的版面总数)个页面文件。其文件名也为1.htm~n.htm。当日所刊载的各个文章则以其id为文件名分别进行导出。在list.htm文件中,包含到各个版面页面文件的超链接。在各个版面的页面文件中,又包含到各个文章页面文件的超连接。
在出版报的主页上,还应该有一个用来显示日期的页面文件。每个日期的超链接都将与其页面文件所在的目录中的index.htm文件相对应。点击日期后,将弹出一个新的浏览器窗口。其中显示的是相应日期的报纸内容。
此外,还应当将此日各篇文章的配图文件也拷贝到此目录之下。
我们为此建立一个任务,它会在每天下午的六点执行,将当天报纸的内容导出为静态的HTML页面文件。此任务的代码如下(可以在本书配套光盘的SQLServer目录的子目录test下找到此段代码的文件,其文件名为webout.sql。它使用的模板文件也可以在此目录下找到):
use test
go
declare
@riqi varchar(20),
@filepath varchar(255),
@listfile varchar(255),
@command varchar(255)
set @riqi=left(convert(varchar(40),getdate(),20),10)
set @filepath=d:\webout\+@riqi+\
set @command=md +@filepath
execute master.dbo.Xp_cmdshell @command
set @command=md +@filepath+images
execute master.dbo.Xp_cmdshell @command
set @command =copy d:\test\files\*.* d:\webout\+@riqi+\
execute master.dbo.Xp_cmdshell @command
set @command =copy d:\test\files\images\*.* d:\webout\+@riqi+\images\
execute master.dbo.Xp_cmdshell @command
set @command =copy d:\test\+@riqi+\*.* d:\webout\+@riqi+\
execute master.dbo.Xp_cmdshell @command
set @listfile=@filepath+list.htm
execute sp_makewebtask
@outputfile=@listfile,
@query=select distinct banmian
from gaojian
where kanwu=出版报 and datepart(yy,riqi)=datepart(yy,getdate()) and datepart(dy,riqi)=datepart(dy,getdate()),
@templatefile=d:\test\list.tml,
@codepage=936
declare
@lists int,
@banmian varchar(64),
@filename varchar(64),
@search varchar(2000)
set @lists=0
declare point cursor for
select distinct banmian
from gaojian
where kanwu=出版报 and datepart(yy,riqi)=datepart(yy,getdate()) and datepart(dy,riqi)=datepart(dy,getdate())
for read only
open point
fetch point into
@banmian
while (@@fetch_status=0)
begin
set @lists=@lists+1
set @filename=@filepath+convert(varchar(64),@lists)+.htm
set @search=SELECT id,timu,laiyuan
FROM gaojian
WHERE datepart(yy,riqi)=datepart(yy,convert(datetime,+@riqi+))
and datepart(dy,riqi)=datepart(dy,convert(datetime,+@riqi+))+
and banmian =+@banmian+and kanwu=出版报order by timu
execute sp_makewebtask
@outputfile=@filename,
@query=@search,
@templatefile=d:\test\list2.tml,
@codepage=936
fetch point into
@banmian
end
close point
deallocate point
declare @gaojianid int
declare point2 cursor for
select gaojian.id
from gaojian
where kanwu=出版报 and datepart(yy,riqi)=datepart(yy,getdate()) and
datepart(dy,riqi)=datepart(dy,getdate())
for read only
open point2
fetch point2 into
@gaojianid
while (@@fetch_status=0)
begin
set @filename=@filepath+convert(varchar(64),@gaojianid)+.htm
set @search=SELECT timu,laiyuan,neirong,left(pics,10)+ STUFF(pics,1,21,),yuanwen
FROM gaojian
WHERE id=+convert(varchar(64),@gaojianid)
execute sp_makewebtask
@outputfile=@filename,
@query=@search,
@templatefile=d:\test\outfile.tml,
@codepage=936
fetch point2 into
@gaojianid
end
close point2
deallocate point2
declare
@dy int,
@date varchar(20),
@yue varchar(2),
@yue2 varchar(2),
@ri int,
@xingqi int,
@year int,
@outchar varchar(1600),
@tt int
create table ##daylist
(out varchar(1600))
set @yue2=00
set @tt=0
declare point3 cursor for
SELECT distinct
dy=datepart(dy,riqi),date=left(convert(varchar(40),riqi,20),10),
yue=convert(varchar(2),datepart(mm,riqi)),ri=datepart(dd,riqi),xingqi=datepart(dw,riqi),year=datepart(yy,riqi)
FROM gaojian
where kanwu = 出版报
order by year,dy
for read only
open point3
fetch point3 into
@dy,@date,@yue,@ri,@xingqi,@year
while (@@fetch_status=0)
begin
if @yue<>@yue2
begin
set @tt=0
if @yue2=0
insert into ##daylist
values(<TABLE BORDER="BORDER" ALIGN="CENTER"><th><tr><h2>+convert(varchar(4),@year)+
年+@yue+月份</h2></tr></th><tr><td>星期日</td><td>星期一</td><td>星期二</td><td>星期三</td><td>星期四</td><td>星期五</td><td>星期六</td></tr>)
else
insert into ##daylist
values(</tr></table><TABLE BORDER="BORDER" ALIGN="CENTER"><th><tr><h2>+
convert(varchar(4),@year)+年+@yue+月份</h2></tr></th><tr><td>星期日</td><td>星期一</td><td>星期二</td><td>星期三</td><td>星期四</td><td>星期五</td><td>星期六</td></tr>)
end
if @tt<>0
if @xingqi < 7
set @outchar=@outchar+<td><a href="+@date+/index.htm" TARGET="new">+convert(varchar(2), @ri)+</a></td>
else
set @outchar=@outchar+<td><a href="+@date+/index.htm" TARGET="new">+convert(varchar(2), @ri)+</a></td></tr><tr>
else
begin
set @tt=1
set @outchar=
case
when @xingqi=1 then
when @xingqi=2 then <td></td>
when @xingqi=3 then <td></td><td></td>
when @xingqi=4 then <td></td><td></td><td></td>
when @xingqi=5 then <td></td><td></td><td></td><td></td>
when @xingqi=6 then <td></td><td></td><td></td><td></td><td></td>
when @xingqi=7 then <td></td><td></td><td></td><td></td><td></td><td></td>
end
if @xingqi < 7
set @outchar=@outchar+<td><a href="+@date+/index.htm" TARGET="new">+convert(varchar(2), @ri)+</a></td>
else
set @outchar=@outchar+<td><a href="+@date+/index.htm" TARGET="new">+convert(varchar(2), @ri)+</a></td></tr><tr>
end
insert into ##daylist values(@outchar)
set @yue2=@yue
set @outchar=
fetch point3 into
@dy,@date,@yue,@ri,@xingqi,@year
end
close point3
deallocate point3
execute sp_makewebtask
@outputfile=d:\test\daylist.htm,
@query=select * from ##daylist,
@templatefile=d:\test\rili.tml,
@codepage=936
drop table ##daylist
首先请读者通读上面的代码,以便对它有一个大概的了解。下面我们将对代码进行逐段的分析和讲解:
