<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>知识库 &#187; 图文档管理系统</title>
	<atom:link href="http://www.wezu.net/blog/archives/tag/%e5%9b%be%e6%96%87%e6%a1%a3%e7%ae%a1%e7%90%86%e7%b3%bb%e7%bb%9f/feed" rel="self" type="application/rss+xml" />
	<link>http://www.wezu.net/blog</link>
	<description>知识就是力量，知识就是财富！</description>
	<lastBuildDate>Fri, 06 Feb 2009 03:15:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>基于产品结构树的图文档管理系统的设计与实现</title>
		<link>http://www.wezu.net/blog/archives/53</link>
		<comments>http://www.wezu.net/blog/archives/53#comments</comments>
		<pubDate>Mon, 12 Jan 2009 02:16:26 +0000</pubDate>
		<dc:creator>snox</dc:creator>
				<category><![CDATA[默认分类]]></category>
		<category><![CDATA[图文档管理系统]]></category>

		<guid isPermaLink="false">http://www.wezu.net/blog/?p=53</guid>
		<description><![CDATA[    O 引言         近年来在机械制造加工行业，随着&#8221;甩图板&#8221;工程的迅猛发展， CAD 应用及企业信息化建设方面已取得了巨大成效，企业逐渐积累了大量的图纸、文档等技术资料。这些电子图档是企业产品设计的主要信息资源，为企业今后进一步实现信息化集成打下了良好的基础。但目前国内绝大部分企业还只停留在单纯使用CAD 进行产品设计的初期阶段，也没考虑到如何对大量的设计技术图档进行合理、有效、安全的管理，设计资料的重用率低;设计人员仍各自为政，难以避免图档的重复设计;设计数据的传递只能通过最传统的文件传递方式来完成，因此数据安全性无法保证，实对交流不便，对图文档的分类管理也无从谈起，图档版本混乱，更无法实时监控图档的整个设计流程;当然还有很多其它弊端。内地的中小型企业此类现象尤为突出。         1 系统设计目标         1.1 提高图文档的管理水平         对图文档及用户进行分级管理，有效控制未授权人员的非法使用;建立与图文档相对应的产品结构树，使产品零件与图文裆进行关联，有利于对各类产品及相关数据信息的集中管理。         1.2 提高工作效率         对各类图文档进行综合管理，便于设计图挡的适时更新和共享，加快技术文挡的查询速度;对同一产品零件图挡的不同版本进行管理，从前提高设计部门的运作效率;通过权限设置实现图文挡的安全共享。         1.3 确保技术文档安全性         建立两种数据库的备份机制，一种是利用DBMS 系统提供的维护计划自动定时备份数据库，另一种通过客户端操作实现备份或恢复。另外，如果在硬件条件允许的情况下可增加一台数据库备份服务器。在客户端，连接数据库服务器设置参数经过加密后以二进制方式存入配置文件，并将此配置文件属性设置为系统、隐藏，以防数据库账号外泄。要对用户进行身份验证，并对用户密码进行双重加密后保存到数据库内，避免用户通过读取数据库获取用户密码。另外，用户要经过授权后方可访问其图文档数据信息。所有用户操作内容都记入日志，以备后查。         1 .4提供数据集中、管理分散的操作模式         本软件采用C/S 构架;通过企业局域网，客户端可以分布在网络的任何节点上;最终的操作结果均存储在数据库服务器上，通过网络实现多个用户之间的协同工作。         2 系统解决方案         系统设计采用基于.Net 技术的Visual C# 为前台开发语言和ADO.NET 数据库访问接口技术，并以SQL Server2000 [...]]]></description>
			<content:encoded><![CDATA[<p><strong>    O 引言<br />
</strong>   <br />
    近年来在机械制造加工行业，随着&#8221;甩图板&#8221;工程的迅猛发展， CAD 应用及企业信息化建设方面已取得了巨大成效，企业逐渐积累了大量的图纸、文档等技术资料。这些电子图档是企业产品设计的主要信息资源，为企业今后进一步实现信息化集成打下了良好的基础。但目前国内绝大部分企业还只停留在单纯使用CAD 进行产品设计的初期阶段，也没考虑到如何对大量的设计技术图档进行合理、有效、安全的管理，设计资料的重用率低;设计人员仍各自为政，难以避免图档的重复设计;设计数据的传递只能通过最传统的文件传递方式来完成，因此数据安全性无法保证，实对交流不便，对图文档的分类管理也无从谈起，图档版本混乱，更无法实时监控图档的整个设计流程;当然还有很多其它弊端。内地的中小型企业此类现象尤为突出。<br />
   <br />
<strong>    1 系统设计目标<br />
   <br />
    1.1 提高图文档的管理水平<br />
</strong>   <br />
    对图文档及用户进行分级管理，有效控制未授权人员的非法使用;建立与图文档相对应的产品结构树，使产品零件与图文裆进行关联，有利于对各类产品及相关数据信息的集中管理。<br />
   <br />
<strong>    1.2 提高工作效率<br />
</strong>   <br />
    对各类图文档进行综合管理，便于设计图挡的适时更新和共享，加快技术文挡的查询速度;对同一产品零件图挡的不同版本进行管理，从前提高设计部门的运作效率;通过权限设置实现图文挡的安全共享。<br />
   <br />
<strong>    1.3 确保技术文档安全性</strong><br />
   <br />
    建立两种数据库的备份机制，一种是利用DBMS 系统提供的维护计划自动定时备份数据库，另一种通过客户端操作实现备份或恢复。另外，如果在硬件条件允许的情况下可增加一台数据库备份服务器。在客户端，连接数据库服务器设置参数经过加密后以二进制方式存入配置文件，并将此配置文件属性设置为系统、隐藏，以防数据库账号外泄。要对用户进行身份验证，并对用户密码进行双重加密后保存到数据库内，避免用户通过读取数据库获取用户密码。另外，用户要经过授权后方可访问其图文档数据信息。所有用户操作内容都记入日志，以备后查。<br />
   <br />
  <strong>  1 .4提供数据集中、管理分散的操作模式</strong><br />
   <br />
    本软件采用C/S 构架;通过企业局域网，客户端可以分布在网络的任何节点上;最终的操作结果均存储在数据库服务器上，通过网络实现多个用户之间的协同工作。<br />
<strong>   <br />
    2 系统解决方案</strong><br />
   <br />
    系统设计采用基于.Net 技术的Visual C# 为前台开发语言和ADO.NET 数据库访问接口技术，并以SQL Server2000 作为网络数据库系统平台，充分发挥C# 真正面向对象(OOP) 的编程优点，系统采用N 层结构模式，在系统的实现过程中，分别将相对独立的功能模块及代码封装在不同的类中，通过创建类的实例可方便调用各功能函数。<br />
    系统采用一级身份验证和二级权限分配机制。用户登录后首先从用户权限表获取该用户的权限。在产品结构树中只显示该用户有预览权的项目目录。<br />
    用户(或部门)对产品结构树中某一项(或组)的权限级别有:入库、预览、修改、删除、出库及批量出库六种。系统管理员具有所有权限，并能对各部门负责人进行委托授权，有权查看及管理所有日志，并对系统参数进行设置，如设置图档的保留版本数，图档归档流程及再修改授权流程等。系统操作流程及功能模块如图l 所示。<br />
   </p>
<p align="center"><img src="http://www.e-works.net.cn/fileupload/images/128370752991406250_new.bmp" alt="" width="414" height="279" align="center" /></p>
<p><strong>    3 系统的实现</strong><br />
   <br />
    本系统主要完成企业设计技术文挡的分类管理，实现对各类技术文档的预览、版本管理、入库、出库、批量出库、图纸与产品结构树的动态关联等。具有用户权限的动态设置及自顶向下的委托授权机制，同时强调系统的安全性和稳定性;数据库结构的设计符合2NF 范式;在代码编写过程中，将可能产生错误的程序代码加入异常处理机制，捕捉错误并加以适当解决，尽量避免异常现象的发生。以下对主要的几个核心功能的实现方法加以阐述。<br />
<strong>   <br />
    3.1 产品结构树设计</strong><br />
   </p>
<p align="center"><img src="http://www.e-works.net.cn/fileupload/images/128370753314843750_new.bmp" alt="" width="272" height="268" align="center" /></p>
<p>    具有的基本功能:通过右键菜单可动态设计产品结构树项目。操作界面如图2 所示。<br />
    此功能的实现主要是基于数据库的树状结构的实时显示，经分析采用递归算法来实现，并充分利用C# 语言的OOP 程序开发优点，添加基于数据库的树状目录结构动态构建函数及公用类。代码如下:<br />
   <br />
    public class GenTree<br />
    { public void genTreeNode(TreeNodeCollection nodes,<br />
    DataRowColleclion data, string parentld)<br />
    { foreach (DataRow dr in data)<br />
    {if(dr["parentld"[.ToString() == parentld)<br />
    { TreeNode newNode = new TreeNode(dn"name"].<br />
    ToString()};<br />
    newNode.Name =dr["id"].ToString();<br />
    newNode.Tag =drrisChild1;<br />
    if(bool)dr["isChild"]<br />
    { newNode.lmagelndex =3; nodes. Add(newNode);}<br />
    else<br />
    { newNode.lmagelndex =0; nodes.Add(newNode);<br />
    genTreeNode(newNode.Nodes ， data,<br />
    dr["id"].ToString()}<br />
    }<br />
               }<br />
            }<br />
         }<br />
    }</p>
<p>    在需要显示产品结构树窗体的Load 事件内，置入下面的代码:<br />
   <br />
    private void inputDocFrm_Load(object sender, EventArgs e)<br />
    { SqlDataAdapter cmd =new SqlDataAdapter (&#8220;select* from<br />
    M_ProductorTree &#8220;sqlConnection1 );<br />
    cmd.Fill(ds，&#8221;treeInfo&#8221;); GenTree myTree =new GenTree();<br />
    myTree.genTreeNode (ProTree.Nodes [O].Nodes,ds.Tables<br />
    ["treelnfo"].Rows，<br />
    ProTree.Nodes[O].Name};<br />
    }// ProTree 是TreeView 控件实例<br />
   <br />
    以上公用类也可在人员部门结构树及其它结构树的实现时直接调用。<br />
   <br />
 <strong>   3.2 图文档文件的版本管理</strong><br />
   </p>
<p align="center"><img src="http://www.e-works.net.cn/fileupload/images/128370753776718750_new.bmp" alt="" width="404" height="288" align="center" /></p>
<p>    假设系统参数设置图文档需保留五个版本，最新版本保留在M_Doc 数据表内，其它版本保存到M_DocBak.数据表内。图文档存储麦、产品结构树表和图档关联表结构关系如图3 所示。<br />
    M_DocBak 表和M_Doc 表内的Doc 字段为Image 类型，用于存放文件。设计更新版本的存储过程UpdateDoc ，最后在业务逻辑层直接调用此存储过程并指定参数完成版本的更新，此模块采用分层设计模式来实现。创建对数据表M_DocFile 的更新图文档存储过程，代码如下:<br />
   <br />
    CREATE PROCEDURE UpdateDoc(@DclD int,@Doc image,<br />
    @Modifier nvarchar(10),@Demo nvarchar(30),@Vercount int,<br />
    @Newver int output)<br />
    AS declare @baksum int;<br />
    begin transaction<br />
    select @baksum=count(*) from M_DocBak;<br />
    // 存储现有版本数<br />
    if(@baksum&lt;@Vercount)<br />
    begin<br />
    Insert into dbo.M_DocBak(DocID, Ver, Doc, DocType,<br />
    Modifier， Demo)<br />
    <a href="mailto:select@D00ID"><span style="color: #1b60ad;">select@D00ID</span></a> ， @baksum+1 ，Doc ， docType ， inputName ，<br />
    Demo from dbo.M Doc<br />
    where <a href="mailto:docld=@DoclD"><span style="color: #1b60ad;">docld=@DoclD</span></a>;<br />
    update dbo.M_Doc set <a href="mailto:Doc=@Doc,inputName=@Modifier"><span style="color: #1b60ad;">Doc=@Doc,inputName=@Modifier</span></a>,<br />
    inputDate=getdate() ，authorized =false<br />
    where <a href="mailto:docId=@DocID"><span style="color: #1b60ad;">docId=@DocID</span></a>;<br />
    select @Newver=@baksum+1;<br />
    return;<br />
    end //设置返回版本号<br />
    else<br />
    begin // 如果版本已满<br />
    update dbo.M_DocBak set Ver=Ver-1<br />
    where <a href="mailto:DocID=@DoclD"><span style="color: #1b60ad;">DocID=@DoclD</span></a>; // 版本号均减1<br />
    declare @Tinyver nehar(6):<br />
    select @Tinyver=min(Ver) from dbo.M_DocBak<br />
    where <a href="mailto:DocID=@DoclD"><span style="color: #1b60ad;">DocID=@DoclD</span></a>;<br />
    delete from dbo.M_DocBak where <a href="mailto:Ver-@Tinyver"><span style="color: #1b60ad;">Ver-@Tinyver</span></a>;<br />
    Insert into dbo.M_DocBak(DocID, Ver, Doc, DocType,<br />
    Modifier， Demo)<br />
    select @DocID ， @baksum ， Doc ，也cType.inputName ，@Demo<br />
    from dbo.M_Doc where <a href="mailto:docld=@DocID"><span style="color: #1b60ad;">docld=@DocID</span></a>;<br />
    update dbo.M_Doc set <a href="mailto:Doc=@Doc.inputName=@Modifier"><span style="color: #1b60ad;">Doc=@Doc.inputName=@Modifier</span></a>,<br />
    inputDate=getdate(). authorized=false<br />
    where <a href="mailto:docld=@DoclD"><span style="color: #1b60ad;">docld=@DoclD</span></a>;<br />
    select @Newver=@baksum;<br />
    return:<br />
    end commit GO// 提交事务<br />
   <br />
    在其它模块中可调用以上存储过程实现图档版本的更新。<br />
<strong>   <br />
    3.3 图文挡的实时预览</strong><br />
   <br />
    传统的文档预览及修改功能一般是通过OLE 技术来实现的。OLE 即对象连接与嵌入，是应用程序共享对象的一种工业标准，为程序协同工作提供了一种方式。但利用OLE 技术首先需要客户方计算机已安装有此应用程序，且占用内存多，预览速度慢，不利于软件的后期部署。另外也可调用AutoCAD 自带的Vola View Express 来预览dwg 、dwf 及dxf 等常用格式的图档文件，但也需要客户端先安装有此类应用程序。<br />
    综合以上考虑，本系统采用由AutoDesk 公司提供的一个ActiveX 控件来实现对dwg 文件的预览功能。此ActiveX 控件以ocx 格式提供.对应AutoCAD 安装盘内MIGRATE\AMA\Ocx 目录下的DwgThumbnail. ocx 文件。操作步骤如下:<br />
    首先将DwgThumbnail. ocx 文件从安装光盘考入Winodws系统目录下的System32 目录内，然后在Windows 的开始→运行中输入regsvr32 DwgThumbnail.00x 并确定，注册此控件。<br />
    打开C# 开发环境，通过菜单P叫eet→Add Reference&#8230; 调出刚拷入系统目录下的DwgThumbnaiL.ocx 文件，此时在C# 的解决方案管理器的References 目录下自动添加了DWGTHUMBNAILL 、stdole 和StdType 三个ActiveX 引用。<br />
<strong>   <br />
    4 系统的安装部署<br />
</strong>   <br />
    本系统是基于N盯架构和SQL Server2，创始后台DBMS的一个应用软件，必须首先安装.NET FrameWork 框架，然后再安装SQL Server2则客户端连接(数据库连接驱动程序) ，系统方能正常运行。<br />
<strong>   <br />
    5 结束语</strong><br />
   <br />
    本系统实现了企业对大量图纸、文件、技术资料的规范管理，可以将企业的所有设计文档全部按产品结构树进行分类管理，并且提供了完善的版本及权限管理机制，确保技术文档管理的安全性和有效性;另外，系统提供的图档关联功能可以将同一图档关联到其它多个产品结构树分支上，实现→图多用，保证了图档的一致性。<br />
    本系统能改善企业现有的图文档管理现状，提高管理规范性、安全保密性、操作可控性和版本一致性，从而提高产品数据信息的利用率，改善电子设计资料管理混乱的局面，为提高企业的技术创新能力和产品设计及研发效率起到非常重要的作用，同时也为后期的PDM 系统集成奠定良好的基础。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wezu.net/blog/archives/53/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
