⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 document.cs

📁 DocFlow展示了使用.NET开发平台结合Microsoft SQL Server数据库和Microsoft Indexing Service索引服务同样也能创建功能强大的文档管理门户。 Do
💻 CS
📖 第 1 页 / 共 2 页
字号:
/* 
*  Copyright (c) 2002 FulcrumWeb. All rights reserved.
*/

using System;
using System.Configuration;
using System.Collections;
using System.Data;
using System.Data.OleDb;
using System.IO;

namespace Bip.Components
{



	public class FileStorage
	{
		public static string OriginalDir
		{
			get	{ return ConfigurationSettings.AppSettings["OriginalStorageDir"];	}
		}
		public static string IndexingServiceDir
		{
			get	{ return ConfigurationSettings.AppSettings["IndexingServiceStorageDir"];	}
		}
	}


	public class DocumentEnt : BipEntity
	{
		// Document Attributes
		int m_Id = 0;
		DateTime	m_CreationTime = DateTime.MinValue;

		int m_SavedFileTypeId = -1;
		string m_SavedStorageFileName = null;
		
		TempFile m_UploadedFile = null;

		public DateTime	m_DateReceived= DateTime.MinValue,
			m_DocumentDate= DateTime.MinValue;
		public string	
			m_IncomingNumber = null,
			m_OutgoingNumber = null,
			m_Subject,
			m_Header,
			m_FileName,
			m_ArchiveFileNames;
		public int
			m_FileTypeId,
			m_DocTypeId,
			m_DocSourceId,
			m_DocCategoryId,
			m_ParentId,
			m_PreviousVersionId,
			m_OwnerUserId;
		public bool	
			m_IsPublic = true,
			m_IsRead = false, 
			m_IsFavorite = false;

		public IEnumerable m_Groups = null;
		public IEnumerable m_RefDocuments = null;

		// Document Attribute Accessors
		public int Id
		{
			get{ return m_Id; }
		}

		protected string StorageFileName
		{
			get	
			{
				if(m_FileTypeId == m_SavedFileTypeId)
					return m_SavedStorageFileName;

				DocFileType ftype = new DocFileType(m_FileTypeId);
				string fileExt = ftype.FileExtension;
				if(fileExt.Length > 0)
					fileExt = "." + fileExt;
				return m_Id.ToString() + fileExt;
			}
		}

		public DateTime CreationTime
		{
			get{ return m_CreationTime; }
		}

		public DateTime DateReceived
		{
			get{ return m_DateReceived;}
			set{ m_DateReceived = value;}
		}
		
		public DateTime DocumentDate
		{
			get{return m_DocumentDate;}
			set{m_DocumentDate = value;}
		}

		public string IncomingNumber
		{
			get{return m_IncomingNumber;}
			set{m_IncomingNumber = value;}
		}

		public string OutgoingNumber 
		{
			get{ return m_OutgoingNumber;}
			set{ m_OutgoingNumber = value;}
		}

		public string Subject
		{
			get{ return m_Subject;}
			set{ m_Subject = value;}
		}

		public string Header
		{
			get{ return m_Header;}
			set{ m_Header = value;}
		}

		public string FileName
		{
			get{ return m_FileName;}
			set{ m_FileName = value;}
		}

		public string ArchiveFileNames
		{ 
			get{ return m_ArchiveFileNames;}
			set{ m_ArchiveFileNames = value;}
		}

		public int FileTypeId
		{
			get{ return m_FileTypeId;}
		}

		public int DocTypeId
		{
			get{ return m_DocTypeId;}
			set{ m_DocTypeId = value;}
		}
		
		public int DocSourceId
		{ 
			get{ return m_DocSourceId;}
			set{ m_DocSourceId = value;}
		}

		public int DocCategoryId
		{
			get{ return m_DocCategoryId;}
			set{ m_DocCategoryId = value;}
		}
		
		public int ParentId
		{
			get{ return m_ParentId;}
			set{ m_ParentId = value;}
		}

		public int	PreviousVersionId
		{
			get{ return m_PreviousVersionId;}
			set{ m_PreviousVersionId = value;}
		}

		public int OwnerUserId
		{
			get{ return m_OwnerUserId;}
			set{ m_OwnerUserId = value;}
		}

		public bool IsPublic
		{
			get{ return m_IsPublic;}
			set{ m_IsPublic = value;}
		}

		public bool	IsRead
		{
			get{ return m_IsRead; }
			set{ m_IsRead = value;}
		}

		public bool IsFavorite
		{
			get{return m_IsFavorite;}
			set{m_IsFavorite = value;}
		}

		public IEnumerable Groups
		{
			get
			{ 
				if(m_Groups == null)
					return new ArrayList();
				 return m_Groups;
			}
			set{ m_Groups = value;}
		}

		public IEnumerable RefDocuments
		{
			get{return m_RefDocuments;}
			set{m_RefDocuments = value;}
		}

		public bool CanEdit
		{
			get
			{
				UserIdentity user = UserIdentity.Current;
				if(user.UserRole == UserRoles.Administrator ||
					user.UserRole == UserRoles.SystemOperator ||
					user.UserRole == UserRoles.Operator && user.UserId == this.OwnerUserId)
					return true;
				return false;
			}
		}
		

		// -------------------------------------
		public DocumentEnt()
		{
		}


		public  int  DbCreate(out OleDbTransaction trans)
		{
			Validate();
			System.Data.OleDb.OleDbConnection con = Db.Connection;
		
			trans = con.BeginTransaction();			
			OleDbCommand cmd = con.CreateCommand();
			cmd.Transaction = trans;
			try
			{
				CmdParams cp = new CmdParams(cmd);
				m_CreationTime = DateTime.Now;
				cmd.CommandText =   @"
				insert into documents
				(
					CreationTime,
					FileType, 
					[FileName],
					DateReceived, 
					DocumentDate, 
					IncomingNumber, 
					OutgoingNumber,
					Subject, 
					Header, 
					ArchiveFileNames, 
					DocTypeId, 
					DocSourceId, 
					DocCategoryId, 
					ParentId, 
					PreviousVersionId, 
					OwnerUserId, 
					IsPublic
				)values ( "	+ 
					cp.Add(m_CreationTime) + 
					cp.Add(m_FileTypeId) + 
					cp.Add(m_FileName) +
					cp.Add(m_DateReceived) +
					cp.Add(m_DocumentDate) +
					cp.Add(m_IncomingNumber) +
					cp.Add(m_OutgoingNumber) +
					cp.Add(m_Subject) + 
					cp.Add(m_Header) + 
					cp.Add(m_ArchiveFileNames) + 
					cp.Add(m_DocTypeId) + 
					cp.Add(m_DocSourceId) + 
					cp.Add(m_DocCategoryId) + 
					cp.Add(m_ParentId) +
					cp.Add(m_PreviousVersionId) + 
					cp.Add(m_OwnerUserId) +
					cp.Add(m_IsPublic) + " ) ";


				cmd.ExecuteNonQuery();
				cmd.CommandText="select @@identity";
				Decimal oid =  (Decimal) cmd.ExecuteScalar();
				m_Id = Convert.ToInt32(oid);

				StoreDocRefs(trans, "DocGroups", "GroupId", Groups);
				StoreDocRefs(trans, "DocRefRelated", "RelatedDocId", RefDocuments);
				cmd.Parameters.Clear();
				cmd.CommandText = "update Documents set StorageFileName = '" + StorageFileName + "' where Id = " + m_Id.ToString();
				cmd.ExecuteNonQuery();
				//trans.Commit();

				//.DEV. isRead
			}
			catch(Exception ex)
			{
				trans.Rollback();
				trans = null;
				throw ex;
			}
			
			MarkAsRead();
			
			return m_Id;
		}

		public  void  DbUpdate()
		{
			UserIdentity user = UserIdentity.Current;

			Validate();
			System.Data.OleDb.OleDbConnection con = Db.Connection;
		
			OleDbTransaction trans = con.BeginTransaction();			
			OleDbCommand cmd = con.CreateCommand();
			cmd.Transaction = trans;
			try
			{
				CmdParams cp = new CmdParams(cmd, false);
				m_CreationTime = DateTime.Now;
				cmd.CommandText =   @"
				update documents
				set	FileType = " + cp.Add(m_FileTypeId) + 
					", [FileName] = " + cp.Add(m_FileName) +
					", DateReceived = " + cp.Add(m_DateReceived) +
					", DocumentDate = " + cp.Add(m_DocumentDate) +
					", IncomingNumber = " +cp.Add(m_IncomingNumber) +
					", OutgoingNumber = " +cp.Add(m_OutgoingNumber) +
					", Subject = " +cp.Add(m_Subject) + 
					", Header = " + cp.Add(m_Header) + 
					", ArchiveFileNames = " + cp.Add(m_ArchiveFileNames) + 
					", DocTypeId = " + cp.Add(m_DocTypeId) + 
					", DocSourceId = " + cp.Add(m_DocSourceId) + 
					", DocCategoryId = " + cp.Add(m_DocCategoryId) + 
					", ParentId = " + cp.Add(m_ParentId) +
					", PreviousVersionId = " + cp.Add(m_PreviousVersionId) + 
					", IsPublic = " + cp.Add(m_IsPublic) +
					", StorageFileName = '" + StorageFileName + "' " + 
					" where id = " + m_Id.ToString();
				cmd.ExecuteNonQuery();

				StoreDocRefs(trans, "DocGroups", "GroupId", Groups);
				StoreDocRefs(trans, "DocRefRelated", "RelatedDocId", RefDocuments);

				cmd.Parameters.Clear();
				cmd.CommandText = "delete from UserReadDocs where DocId=" + m_Id.ToString() + " and UserId=" + user.UserId.ToString();
				cmd.ExecuteNonQuery();
				cmd.CommandText = "delete from UserFavoriteDocs where DocId=" + m_Id.ToString() + " and UserId=" + user.UserId.ToString();
				cmd.ExecuteNonQuery();
				if(IsRead)
				{
					cmd.CommandText = "insert into UserReadDocs (DocId, UserId) values (" + m_Id.ToString() + ", " + user.UserId.ToString() + " ) ";
					cmd.ExecuteNonQuery();
				}

				if(IsFavorite)
				{
					cmd.CommandText = "insert into UserFavoriteDocs (DocId, UserId) values (" + m_Id.ToString() + ", " + user.UserId.ToString() +" ) ";
					cmd.ExecuteNonQuery();
				}

				trans.Commit();
			}
			catch(Exception ex)
			{
				trans.Rollback();
				throw ex;
			}
		}



		public  void  DbDelete()
		{
			if(m_Id < 1)
				throw new BipFatalException("Internal Error");

			System.Data.OleDb.OleDbConnection con = Db.Connection;
			OleDbTransaction trans = con.BeginTransaction();			
			OleDbCommand cmd = con.CreateCommand();
			cmd.Transaction = trans;
			try
			{
				cmd.CommandText =   @"delete from DocGroups where DocId = " + m_Id.ToString();
				cmd.ExecuteNonQuery();
				cmd.CommandText =   @"delete from DocRefRelated where DocId = " + m_Id.ToString();
				cmd.ExecuteNonQuery();
				cmd.CommandText =   @"delete from UserFavoriteDocs where DocId = " + m_Id.ToString();
				cmd.ExecuteNonQuery();
				cmd.CommandText =   @"delete from UserReadDocs where DocId = " + m_Id.ToString();
				cmd.ExecuteNonQuery();
				cmd.CommandText =   @"update documents set ParentId = null where ParentId =" +  m_Id.ToString();
				cmd.ExecuteNonQuery();
				cmd.CommandText =   @"update documents set PreviousVersionId = null where PreviousVersionId =" +  m_Id.ToString();
				cmd.ExecuteNonQuery();
				cmd.CommandText =   @"delete from Documents where Id = " + m_Id.ToString();
				cmd.ExecuteNonQuery();
				trans.Commit();
			}
			catch(Exception ex)
			{
				trans.Rollback();
				throw ex;
			}
		}



		public void StoreDocRefs(OleDbTransaction trans, string tableName, string refFieldName, IEnumerable refs)
		{
			System.Data.OleDb.OleDbConnection con = Db.Connection;
			OleDbCommand cmd = con.CreateCommand();
			if(trans != null)
				cmd.Transaction = trans;
			cmd.CommandText = "delete from " + tableName + " where DocId=" + m_Id.ToString();
			cmd.ExecuteNonQuery();

			if(refs !=  null)
			{
				cmd.CommandText = "insert into " + tableName + " (DocId, " + refFieldName + " ) values ( "+ m_Id.ToString() + ", ?)";
				foreach(int ref_id in refs)
				{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -