摘要:通过皖能集团的Internet/Intranet系统的实际案例,介绍了在基于Lotus               Notes/Domino系统中最为关键的几项技术:全流程定义技术、关系数据库的接口、Microsoft Word接口和电子刊物的完美显示。
              关键词:群件平台 流程定义 接口技术               
随着“政府上网”工程的全面启动、工业信息化的进一步发展和电子商务的需求增强,建立一整套计算机综合应用网络系统对企业集团是一种迫切需求。根据当前计算机技术发展趋势,我们采用Internet/Intranet体系模式构造皖能集团的计算机综合应用网络系统,实现对外信息发布和内部的全面办公和业务管理功能,这对实施有效监控、加强信息沟通、提高运行效率和优化产业、资本结构,发挥公司整体效益起到十分重要的作用。
一、网络系统结构
                根据皖能集团Internet/Intranet系统的应用需求,从网络系统应用和安全的角度出发,内网至少布置2台Windows                 NT服务器,作为应用服务器、邮件服务器和备份服务器,提供内部办公自动化和业务数据处理的应用。外网布置2台Windows NT服务器,其中一台
                
                图1 皖能集团Internet/Intranet网络体系结构
                配置Domino R5 服务器,作为外部Web服务器,建立皖能(集团)公司的站点,并借助内置的POP3服务器以实现Notes邮件系统和Internet邮件系统的无缝连接,提供信息发布、信息交换和电子邮件等服务;另外一台作为代理服务器,提供内部用户访问Internet服务和防火墙的安全措施。
                如图1所示,内部Web服务器接入到主干交换机上,外部服务器应放在代理服务器之外,在代理服务器上插入两块网卡,一块网卡和内部局域网相连,一块网卡和省经济信息网相连,它们之间通过代理服务器进行隔离。同时由路由器实现广域网与局域网的互联,实现通过互联网数据传输的路径选择及网络地址解析,并在路由器上构造外防火墙(IP包过滤)。
二、系统功能
                
                皖能集团Internet/Intranet系统构架于业界领先的群件系统Lotus Notes/Domino R5之上,充分利用了Notes/Domino的强大功能,集电子邮件、工作流处理、多媒体文档应用和Web信息发布为一体,开通了电子邮件、电子日历、个人资料、公文处理、档案管理、资料管理、领导活动、人事管理、项目管理、公司动态、组织机构、皖能视窗、政策法规、综合信息、工作探讨、电子公告板等二十多项应用模块。
                皖能集团Internet/Intranet系统功能分为两大部分:
                1. Internet Web站点(88wenergy8888) 和邮件系统(mail.wenergy88.                 cn),由于篇幅关系,在此不做详细介绍。
                2. 皖能集团办公自动化系统
                三、关键技术创新和实现
1. 全流程定义技术
                公文运转是工作流程最直接、最充分的体现,它贯穿收文处理、发文处理和签报处理的每个环节。虽然在发文处理过程中,一般都有拟稿、核稿、审核、会签、签发、登记、分发、归档等基本环节,实际上对每个部门、或每一类文件的流程都是不同的。所以在应用系统,应使其每个模块的流程是完全可以由用户根据实际情况灵活定义,流程的定义、跟踪是公文运转系统的关键技术,该系统实现了开放的全流程定义技术,可以适应实际应用过程中的各种需求。
                全流程定义技术包括标准流程的定义、引入、修改和控制等,在此主要介绍三个问题:
                1) 如何自动引入标准流程,通过Postopen事件调用引入标准流程的函数:
                Sub SetDefault(doc As NotesDocument)
                … …
                Set db = session.CurrentDatabase
                Set view = db.GetView( "FlowByNo" )
                Set Stepdoc = view.GetFirstDocument
                If Not Stepdoc Is Nothing Then
                Call Stepdoc.CopyAllItems(doc,True)
                Call doc.RemoveItem("ReadLists")
                Call doc.RemoveItem("ExplainV")
                Call doc.RemoveItem("FlowNo")
                Call doc.RemoveItem("flowName")
                doc.StepNumC=Stepdoc.StepNumC(0)
                doc.StepNum=Stepdoc.StepNum(0)
                
                doc.StepName_1=Stepdoc.StepName_1(0)
                doc.StepMan_1=Stepdoc.StepMan_1(0)
                doc.StepReturn_1=Stepdoc.StepReturn_1(0)
                doc.StepDay_1=Stepdoc.StepDay_1(0)
                … …
                End If
                End Sub
2) 标准流程的修改,将分解为插入步骤、删除步骤。如果理解了插入步骤,就容易实现删除步骤。插入步骤的函数是:
                Sub Click(Source As Button)
                … …
                Set uidoc = workspace.CurrentDocument
                Set doc=uidoc.Document
                LastNo=uidoc.document.StepNum(0) + 1
                doc.StepNum=LastNo
                doc.StepNumC= Cstr(LastNo)
                Call uidoc.Refreshhideformulas()
                If nFieldNo=0 Then Exit Sub
                For %i=LastNo To nFieldNo+1 Step -1
                Call ReplaceItemsValue(doc, %i, %i-1)
                Next
                Call uidoc.FieldClear( "StepName_"+Cstr(nFieldNo))
                Call uidoc.FieldClear( "StepMan_"+Cstr(nFieldNo))
                Call uidoc.FieldClear( "StepDay_"+Cstr(nFieldNo))
                nFieldNo=nFieldNo+1
                End Sub
3) 流程的控制是最复杂的,通过一系列函数实现,在这里介绍其主函数,让读者可以了解其实现的思路。
                Sub Click(Source As Button) 
                … …
                Set uidoc = workspace.CurrentDocument
                Set doc=uidoc.Document
                '取流程信息
                Call InitializeStepInfo(doc )
                If gbIsFinished=False Then '如果当前不是最后一步 
                If gstrNextMan="" Then 
                Msgbox Err_No_Transactor,,"无办理人"
                Exit Sub
                End If
                If gstrIsSponsor="否" And gstrIsCurrentReturn="是"                 Then
                If Messagebox( "文件返回给"+gstrNextMan+"?" ,1,"完成")                 =2 Then Exit Sub
                Else 
                If Messagebox(gstrNextMan+"进行"+gstrNextStep+"?"                 ,1,"完成") =2 Then Exit Sub
                End If
                Call DeleteMailDoc(gstrCurrentMan,doc.MailID(0)) '删除通知邮件 
                Call AdjustWorkFlow(doc) '调整办理人、办理步骤等
                Call SendDocLink(doc,doc.CurrentTransactor(0),"待办:")                 '给下一办理人发送通知邮件
                Call doc88puteWithForm( False, False ) '备份批示意见
                doc.NotionBak=doc.GetItemValue(doc.NotionName(0))(0)
                doc.Notion="" 
                Call uidoc.Save()
                '如果当前是签发状态,修改文件的表单,使文件的大部分域变成不可编辑
                If (gstrCurrentRole="签发" And gstrIsSponsor="否")                 Then
                doc.Form="Subscribe" 
                End If
                Call doc.Save(True,True)
                Else '如果当前是最后一步
                If Messagebox( "确定要将此文件办结?" ,1,"完成") =2 Then                 Exit Sub
                Call DeleteMailDoc(gstrCurrentMan,doc.MailID(0))
                Call AdjustWorkFlow(doc)
                doc.CurrentTransactor="" '清除读者域
                Call doc.Save(True,True)
                Call CopyDocToFileDB(doc) '在文件库中创建该文件的拷贝
                End If
                doc.SaveOptions = "0"
                Call uidoc.Close()
                Call workspace.ViewRefresh
                End Sub
2. 关系数据库的接口
                我们在人事系统中,将考勤机的数据自动读入内Notes应用系统,进行员工考勤的有效管理。通过ODBC实现,首先在客户端控制面板正确设置ODBC的连接,然后在操作的(Options)声明                 Uselsx "*LSXODBC" , 然后实现其具体的数据转换。
                例如: 
                Sub Click(Source As Button)
                Dim con As New ODBCConnection
                Dim qry As New ODBCQuery
                Dim result As New ODBCResultset
                … …
                Dim dataSource, datatab, deptstr As String
                Set db=session.currentdatabase
                Dim n As New notesname(session.username)
 dataSource = "delphi"
                DepartNo= Inputbox$("请输入部门编码, 如01", "DepartNo?")
                timeV = Inputbox$("请输入年月, 如200001", "timeV?")
                datatab= "c:\lhkq\kqtz"+timeV+".db"
                If con.ConnectTo(dataSource) Then
                i=1
                Set qry.Connection = con
                datatab="SELECT * FROM "+datatab++" where Bmbh                 = '"+DepartNo+"'"
                Messagebox "Connect to " & dataSource + " ->                 " & datatab
                qry.SQL = datatab
                Set result.Query = qry
                Call result.Execute
                Call Result.FirstRow
                Do 
                flagV= result.getvalue(21)
                DeptV= result.getvalue(5)
                If result.getvalue("Kqjg")<>"Rest" And                 result.getvalue(5)= DepartNo Then 
                Set newdoc=New NotesDocument(db) 
                newdoc.form="WorkRecorder"
                Call newdoc88puteWithForm( False, False )
                newdoc.Day=result.getvalue(2)
                newdoc.DeptNum= DeptV
                newdoc.JobName=result.getvalue(6)
                newdoc.Read1= result.getvalue(8)
                … …
                lable1:
                Set view1=db.getview("BMAP")
                BM=newdoc.DeptNum(0)
                Set doc1=view1.getdocumentbykey(BM)
                If Not(doc1 Is Nothing) Then
                Set item=newdoc.GetFirstItem("reader")
                newdoc.department=doc1.department(0)
                deptstr=Cstr(newdoc.department(0))
                Call item.AppendToTextList(deptstr)
                Call item.CopyItemToDocument(newdoc, "reader")
                Else
                Goto lable2
                End If
                … …
                Call newdoc.save(True,True) 
                End If
                Call result.NextRow()
                Loop Until result.IsEndOfData
                End If
                Call workspace.ViewRefresh
                End Sub
3. Microsoft Word的接口
                Microsoft Word是常用的字处理工具,而且它具有批注、修改留痕等非常有用的功能,所以在发文、签报两个系统中我们解决了和Microsoft                 Word接口问题,使系统的实用性有了进一步提高。
                首先在发文、签报中创建Word的OLE对象,然后进行处理。
                1) 由Entering事件激发创建一个OLE的Word文档:
                Set WordDoc=uidoc.GetObject("wdTextDoc")
                Call uidoc.GotoField( "Text" )
                Set WordDoc=uidoc.CreateObject("wdTextDoc", "Word.Document")
                2)在创建Word文档时,要隐藏Word界面中的工具栏和标尺、设置标志和复制用户已建立的模板文件。
                '隐藏Word界面中的工具栏和标尺
                Set wdCommandBars=WordDoc88mandBars
                For i%=1 To 10
                wdCommandBars(i%).Visible=False
                Next 
                WordDoc.ActiveWindow.DisplayRulers=False
                WordDoc.ActiveWindow.DisplayVerticalScrollBar =True
                WordDoc.ActiveWindow.DisplayHorizontalScrollBar =True 
                '设置标志
                Set doc=uidoc.Document
                Call doc.ReplaceItemValue("IsWordText",1)
                Call uidoc.Refreshhideformulas()
                '复制模板文件
                Dim sWordDotFile As String
                sWordDotFile=uidoc.Document.DotFile(0)
                If sWordDotFile<>"" Then 
                Call CopyWordDot(sWordDotFile,WordDoc )
                End If 
                2) 增加批注、修订功能
                ’批注
                Call WordDoc88ments.Add (WordDoc.Application.Selection.Range)
                ’修订功能
                Set WordDoc=uidoc.GetObject("wdTextDoc")
                With WordDoc
                .TrackRevisions = True
                .PrintRevisions = False
                .ShowRevisions = True
                End With 
4. 电子刊物的完美显示
                电子刊物是办公系统中常见的模块,如何使用户查阅方便、显示美观是实现该模块的要点。简单的办法是一个页面(窗口)完整显示目录,然后点击某篇文章,在新的页面(窗口)显示。但这种界面不直观、不够友好。在《皖能视窗》系统中,我们采用两帧结构先分别显示杂志封面和期号;当用户点击某期号时,再用两帧结构分别显示目录和文章内容。后者的处理是有一定的难度。
                先建立一个页面,这个页面包含显示期号目录的视图。必须通过目标框架的设定,才能将它引导到显示目录和文章内容的帧结构集。从一个视图跳到另外一个视图的关键,是建立一个过渡的表单,这个表单通过所嵌入视图设置“显示单个分类”属性,以起着链接的作用。通过下面结构图来描述更为清楚些:
四、结束语
                该系统除了上述特点之外,系统具有标准、规范和完整的文书、科技和项目档案功能,具有良好的界面,将Notes客户端的功能和浏览器Web功能有机结合成一个整体,                 同时提供适时的帮助功能。
朱少民: 1964年生,高级工程师,硕士生导师,从事信息系统、网络和电子商务的研究与开发 (smzhu@mail.hf.ah88) .

| 
							高中各年级课程推荐 | ||||
| 
							年级 | 
							学期 | 
							课程名称 | 
							课程试听 | |
| 高一 | 
							高一(上)、(下)同步复习 | 语文 | ||
| 英语 | ||||
| 数学 | ||||
| 数学(期中串讲) | ||||
| 数学(期末串讲) | ||||
| 数学拔高 | ||||
| 物理 | ||||
| 化学 | ||||
| 生物(一) | ||||
| 地理 | ||||
| 历史 | ||||
| 政治 | ||||
| 
							高中专项突破课 | 语文写作 | |||
| 英语阅读理解 | ||||
| 英语写作 | ||||
| 英语完形填空 | ||||
| 物理功和能量 | ||||
| 高二 | 
							高二(上)、(下)同步复习 | 语文 | ||
| 英语 | ||||
| 数学(理) | ||||
| 数学拔高(理) | ||||
| 数学(文) | ||||
| 数学拔高(文) | ||||
| 物理 | ||||
| 数学(期中串讲) | ||||
| 数学(期末串讲)(理) | ||||
| 数学(期末串讲)(文) | ||||
| 化学 | ||||
| 生物(一) | ||||
| 生物(二) | ||||
| 生物(三) | ||||
| 地理 | ||||
| 历史 | ||||
| 政治 | ||||
| 高三 | 
							高考第一轮复习 | 语文 | ||
| 英语 | ||||
| 数学(理) | ||||
| 数学拔高(理) | ||||
| 数学(文) | ||||
| 数学拔高(文) | ||||
| 物理 | ||||
| 物理拔高 | ||||
| 化学 | ||||
| 生物 | ||||
| 地理 | ||||
| 政治 | ||||
| 历史(韩校版) | ||||
| 历史(李晓风版) | ||||
| 
							高考第二轮复习 | 数学(理) | |||
| 数学(文) | ||||
| 英语 | ||||
| 物理 | ||||
| 化学 | ||||
| 地理 | ||||
| 
							高考第三轮冲刺串讲 | 语数英串讲(理) | |||
| 语数英串讲(文) | ||||
| 物化生串讲 | ||||
| 史地政串讲 | ||||
| 
							高考试题精讲 | 数学(理) | |||
| 英语 | ||||
| 化学 | ||||
| 物理 | ||||
| 2021高考研究2021高考策略(理) | ||||
| 2021高考研究2021高考策略(文) | ||||
Copyright © 2005-2020 Ttshopping.Net. All Rights Reserved .         |
云南省公安厅:53010303502006 滇ICP备16003680号-9
本网大部分资源来源于会员上传,除本网组织的资源外,版权归原作者所有,如有侵犯版权,请立刻和本网联系并提供证据,本网将在三个工作日内改正。

