亚洲一区亚洲二区亚洲三区,国产成人高清在线,久久久精品成人免费看,999久久久免费精品国产牛牛,青草视频在线观看完整版,狠狠夜色午夜久久综合热91,日韩精品视频在线免费观看

知識管理系統(tǒng)Data Solution研發(fā)日記之三 文檔解決方案

時間:2023-04-28 07:06:44 規(guī)劃方案 我要投稿
  • 相關(guān)推薦

知識管理系統(tǒng)Data Solution研發(fā)日記之三 文檔解決方案

前面兩篇文章已經(jīng)展示了Data Solution的設(shè)計目標(biāo)和為達(dá)到此目標(biāo)而設(shè)計的應(yīng)用程序,這一篇繼續(xù)細(xì)化對它的介紹,講解Data Solution如何對文件進(jìn)行掃描,轉(zhuǎn)換,存儲,檢索。

  本機(jī)磁盤的文件格式通常是doc/docx,pdf,pst/ost/eml,htm/mht,txt/rtf,這幾種格式是電腦中常用的格式。要達(dá)到在同一個編輯器Editor中可以對它們進(jìn)行編輯,再整理,需要選擇一種通用的格式,把其它的格式轉(zhuǎn)化為這種通用格式,對這種格式進(jìn)行編輯。DOC/DOCX格式功能強(qiáng)大,有很多開源類型庫對它進(jìn)行讀寫,RTF格式也包含了豐富數(shù)據(jù)資料,重要的一點是RTF格式,是一種開放的格式?梢缘轿④浀木W(wǎng)站上下載《Microsoft Office Word 2003 Rich Text Format (RTF) Specification》,以熟悉這種文件格式。開放格式的好處之一是,在后續(xù)的進(jìn)一步開發(fā)中,可以找到很多現(xiàn)有的功能和代碼,包括開放的源碼。所以,Data Solution選擇RTF格式作為文件存儲的標(biāo)準(zhǔn)格式。

知識管理系統(tǒng)Data Solution研發(fā)日記之三 文檔解決方案

  下一個目標(biāo)就是要找到RTF格式的編輯工具,通過Google可以找到很多RTF格式的編輯器,對RTF格式進(jìn)行直接編輯,存儲和轉(zhuǎn)換。因為是開放格式,微軟的.NET Framework自帶了RichTextBox,可用于RTF格式的編輯。不過,這個控件還需要強(qiáng)化,可以到CodeProject.com上找到一些工具和文章。

  

  這兩個關(guān)鍵的步驟解決了,下面就是設(shè)計數(shù)據(jù)庫和設(shè)計數(shù)據(jù)讀寫代碼。創(chuàng)建Document數(shù)據(jù)庫,文檔表的腳本如下 CREATETABLE [dbo].[DOCUMENT]( [RECNUM] [int] IDENTITY(1,1) NOTNULL, [SUBJECT] [nvarchar](2000) NULL, [BODY_TYPE] [nvarchar](50) NULL, [BODY] [nvarchar](max) NULL, [CREATE_DATE] [datetime] NULL, [CREATE_BY] [nvarchar](50) NULL, [REVISED_Date] [datetime] NULL, [REVISED_BY] [nvarchar](50) NULL, [CATEGORY] [int] NULL, [COMPUTER] [nvarchar](200) NULL, [PATH] [nvarchar](2000) NULL, CONSTRAINT [PK_DOCUMENT] PRIMARYKEYCLUSTERED ( [RECNUM] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]

  Body就是存儲文檔的表字段,設(shè)計它為NVARCHAR(MAX)類型,CATEGORY用于文檔的分類查找,SUBJECT可存放關(guān)鍵字或是標(biāo)題,BODY_TYPE用于全文搜索,存儲文檔類型擴(kuò)展名。COMPUTER和PATH用于在本機(jī)掃描中,指定原始文檔的路徑,可用于追蹤。

  Data Solution系統(tǒng)選擇LLBL Gen Framework作為數(shù)據(jù)庫訪問層的代碼生成器,生成解決方案的代碼如下圖

  

  來看一下,對文檔進(jìn)行保存的一段代碼,它是標(biāo)準(zhǔn)的LLBL Gen Framework的routine代碼 public DocumentEntity SaveDocument(DocumentEntity doc) { using (DataAccessAdapter adapter = GetDataAccessAdapter()) { try { adapter.StartTransaction(IsolationLevel.ReadCommit ted, "SaveDocument"); adapter.SaveEntity(doc, true, false); adapter.Commit(); } catch { adapter.Rollback(); throw; } } return doc; }

  所謂routine代碼,就是代碼可以由模板生成的,就好比上下班打卡一樣,是很平常的簡單的行為。

  注意這里的throw代碼,它沒有寫成這樣 catch(Exception ex) { adapter.Rollback(); throw ex; }

  在《.NET框架程序設(shè)計》一書中,解釋了這兩個throw的區(qū)別,它們會產(chǎn)生不同的stack trace,異常的起始點不同。

  基礎(chǔ)層面的問題解決了,下面的應(yīng)用程序就水到渠成,以不同的方式導(dǎo)入文檔到數(shù)據(jù)庫中。

  Batch Import 批次導(dǎo)入指定目錄的文件到數(shù)據(jù)庫中

  

  Doc Scanner 批次導(dǎo)入指定格式的文件到數(shù)據(jù)庫中

  

  PDF Watcher 專用于PDF文件格式的轉(zhuǎn)換,導(dǎo)入,因為是Watcher,所以你肯定會想到是個FileSystemWatcher

  

  Doc Loader 適用于單個文檔的轉(zhuǎn)換,導(dǎo)入,一次只處理一個文檔

  

  再來看數(shù)據(jù)庫中的文檔的展示,Document Explorer會展現(xiàn)導(dǎo)入進(jìn)數(shù)據(jù)庫的原始文件,在這里可以進(jìn)行預(yù)覽,刪除,分類。分類之后,這個文檔就好比打上了合格的標(biāo)簽一樣,可以在以后的程序中進(jìn)一步使用。否則,不分類的文件都會只停留在這里,后繼的步驟無法處理。這是個文檔流程上的的Policy,如果不喜歡這個步驟,可以去掉。

  

  Document Browser 分類查看文檔

  

  左邊是樹型結(jié)構(gòu),右邊是從屬于這個分類的文檔。如果要對掃描進(jìn)數(shù)據(jù)庫中的文件進(jìn)行分類,可以這樣操作

  在Document Explorer中選中一個或多個文件,點擊右鍵Category Document

  

  在Document Browser的左邊的樹中,右鍵Paste Document

  

  之后就看到了效果,在.NET結(jié)點下面,展示了所Paste的文檔及其屬性

  

  Document Browser左邊的樹是文檔的分類,可對它對進(jìn)新增子節(jié)點,新增加一個分類的效果如下圖

  

  Category是取自數(shù)據(jù)庫中的類別表,它的腳本定義如下 CREATETABLE [dbo].[CATEGORY]( [RECNUM] [int] IDENTITY(1,1) NOTNULL, [NAME] [nvarchar](200) NULL, CONSTRAINT [PK_CATEGORY] PRIMARYKEYCLUSTERED ( [RECNUM] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]

  這顆文檔分類樹,它的結(jié)構(gòu)定義是放到本地的XML文件中,上圖中所看到的樹的格式定義如下

  

  如上圖所示,tag就是從數(shù)據(jù)庫中獲取的分類定義,依據(jù)這個標(biāo)識,以檢索分類的文檔。在Document Browser窗體的打開與關(guān)閉時,它會持久化樹的結(jié)構(gòu)定義,代碼如下 protectedoverridevoid OnClosed(EventArgs e) { base.OnClosed(e); TreeViewSerializer serializer = new TreeViewSerializer(); serializer.SerializeTreeView(this.treeView, treeFile); } protectedoverridevoid OnLoad(EventArgs e) { treeView.ImageList = this.imageList; TreeNode root=treeView.Nodes[0]; if (File.Exists(treeFile)) { treeView.Nodes.Clear(); TreeViewSerializer serializer = new TreeViewSerializer(); serializer.DeserializeTreeView(this.treeView, treeFile); treeView.ExpandAll(); } }

  如果你對如何把樹節(jié)點定義保存到文件系統(tǒng)中感興趣,可以用關(guān)鍵字TreeViewSerializer在CodeProject中查找,這里的代碼就是取自其中一篇文章的代碼。

  還有另一個地方,會用到樹型結(jié)構(gòu)分類,在Editor編輯器的打開文件對話框中,如下圖所示

  

  這里的效果,與Document Browser的效果是完全一樣的。原來以為是可以用Custom Open File Dialog來解決Open File對話框的Place Bar的問題,也就是上圖中看到的左邊的樹的分類,也是如下圖中紅色邊框包圍的地方

  

  要達(dá)到重寫紅色區(qū)域,Windows有規(guī)定的路徑,并且會驗證這個路徑,這個辦法沒有通過,無奈之下才用的自定義對話框。之前見到過的軟件,SharePoint Designer重寫過這個Place Bar區(qū)域,可惜沒有領(lǐng)悟它的實現(xiàn)原理。

  寫到這里,還沒有完成,這里還需要一點OFFICE 二次開發(fā)的知識,在OFFICE軟件中,寫入一個插件,可以把正在瀏覽的文檔,直接導(dǎo)入到我的文檔數(shù)據(jù)庫中,如下圖所示

  

  這里已經(jīng)安裝了兩個插件,Nitro PDF Professional和Acrobat,用于把當(dāng)前DOC/DOCX文檔轉(zhuǎn)換為PDF文件。所以,還需要寫一個把當(dāng)前的DOC/DOCX文檔轉(zhuǎn)存到文檔數(shù)據(jù)庫中的插件。

  在把PDF轉(zhuǎn)化為可以編輯的RTF格式過程中,遇到了不少的麻煩。把DOC/DOCX轉(zhuǎn)換成PDF,這個行為,有很多開源代碼可以借用,但是,倒過來,把PDF轉(zhuǎn)換成DOC/DOCX,這個組件卻不好找。有一種方案是把PDF轉(zhuǎn)化為TIFF,然后再用OCR軟件系統(tǒng)(ABBYY FineReader 9)來轉(zhuǎn)成DOC/DOCX文件。我們做程序員的窮,沒有那么多銀子買昂貴的SDK License,轉(zhuǎn)向?qū)ふ褻rack或是Patch之類的,也沒有結(jié)果。這些業(yè)界領(lǐng)先的技術(shù),連Trial版本都不會出現(xiàn)在網(wǎng)上,根本沒有機(jī)會Trial一把,或是把它放到虛擬機(jī)里面,永遠(yuǎn)以Trial的方式來使用。有的組件,比如PDF Focus.NET,可以試用一把,可是轉(zhuǎn)換出來的文件,要么加上了Trial的水印,要么只能轉(zhuǎn)換前三頁,后面的都不能轉(zhuǎn)換;蛘哂械氖茿ctiveX版本的控件,OCX方式注冊到系統(tǒng)中,總有這樣那樣的問題。杯具,想想以后要離開對Microsoft .NET Framework的依賴,離開對SQL Server的依賴,以這次的經(jīng)驗來看,這日子是沒法過了。盡管我已經(jīng)解決了這里的所有問題,仍然不愿意面對,在非數(shù)據(jù)庫開發(fā)的領(lǐng)域,技術(shù)和知識是很值錢的。因為我們已經(jīng)習(xí)慣了在數(shù)據(jù)庫領(lǐng)域的開發(fā),技術(shù)和知識是一文不值的,只有做出的產(chǎn)品才值錢,悲劇。

【知識管理系統(tǒng)Data Solution研發(fā)日記之三 文檔解決方案】相關(guān)文章:

備件管理系統(tǒng)的解決方案范文(精選5篇)12-29

備品備件管理系統(tǒng)解決方案(通用11篇)12-30

Jordan offers new hosting solution05-04

異地財務(wù)管理系統(tǒng)解決方案08-20

文檔管理實訓(xùn)報告07-06

項目文檔管理辦法06-08

文檔管理制度03-23

電信機(jī)房環(huán)境視頻監(jiān)控系統(tǒng)解決方案03-15

網(wǎng)吧管理系統(tǒng)03-12

研發(fā)管理制度04-25