Posted on 2007-03-08 16:40
帥子 閱讀(846)
評論(0) 編輯 收藏 所屬分類:
J2EE技術(shù)專區(qū)
ArcEngine中版本的使用
使用版本的過程分為以下幾個步驟
1.將Workspace或者數(shù)據(jù)集注冊為使用版本的Workspace或者數(shù)據(jù)集
IVersionedObject verObj= ds as IVersionedObject;//假設(shè)ds 是一個數(shù)據(jù)集
if(verObj!=null&&(!verObj.pVerdObj.IsRegisteredAsVersioned))
{
?//數(shù)據(jù)集可以被注冊而且還沒有被注冊為版本數(shù)據(jù)集
?//下面的方法 如果使用參數(shù) false 那么表示注冊為沒有版本的數(shù)據(jù)
?//也就是反注冊
?verObj.RegisterAsVersioned(true);
}
2.獲取版本數(shù)據(jù)
?獲取版本數(shù)據(jù)的過程比較簡單。在連接數(shù)據(jù)庫的時候 需要提供版本字符串。
?默認(rèn)是使用sde.Default這個版本。如果使用其他版本字符串就會獲得其他版本的數(shù)據(jù)。
3.建立新版本
?//假設(shè)space 是一個Workspace 而且是一個企業(yè)數(shù)據(jù)庫的Workspace。個人數(shù)據(jù)庫和文件工作空間是
?//沒有版本功能的。
?IVersionedWorkspace pVerWS=(IVersionedWorkspace)space;
?IVersion pV=pVerWS.DefaultVersion;//上一級版本 這里使用默認(rèn)版本作為上一級版本???
?IVersion pVC=pV.CreateVersion(verName);?//建立版本???
?pVC.Description=verDesc;//版本的描述
?pVC.Access=esriVersionAccess.esriVersionAccessPrivate;//版本的存取策略為私有
?pNewVerWS=(IVersionedWorkspace)pVC;//獲取使用新版本的Workspace的一種快捷方式
4.合并版本數(shù)據(jù)
?合并數(shù)據(jù)使用IVersionEdit接口
?這個接口有VersionedWorkspace 實(shí)現(xiàn)。
?下面介紹這個接口
?CanPost 當(dāng)前正在編輯的版本是否可以提交到目標(biāo)版本中去 。
??CommonAncestorVersion 當(dāng)前版本和目標(biāo)版本的共同祖先 。
??ConflictClasses 有沖突的Class。
??ModifiedClasses 在兩個版本中發(fā)生變化的Class 。
??Post 提交版本數(shù)據(jù)
??PreReconcileVersion? 目標(biāo)版本在檢測沖突之前的狀態(tài)(?)。
??Reconcile 測試數(shù)據(jù)是否沖突 如果返回true表示有沖突
??ReconcileVersion? 目標(biāo)版本在沖突檢測開始的時候的狀態(tài)(?)
??StartEditingVersion 目標(biāo)版本開始編輯的時候的狀態(tài) (?)
??在提交數(shù)據(jù)之前 一定要調(diào)用Reconcile 否則很有可能會返回錯誤。
5.瀏覽工作版本元數(shù)據(jù)
?瀏覽版本元數(shù)據(jù)是指統(tǒng)計(jì)工作空間中一共有哪些版本。某個指定的版本的父親或祖先是誰?
?他又有哪些派生的版本?
?IVersionInfo 接口提供了這些信息
?下面是IVersionInfo接口的詳細(xì)信息:
?Access 接口的訪問策略
?Ancestors 版本的所有祖先,按照由近到遠(yuǎn)的次序排列
?Children 該版本的直接派生版本。
?Created 創(chuàng)建的時間
?Description 版本的描述
?IsOwner 當(dāng)前用戶是不是擁有該版本
?Modified 最后修改時間
?Parent 版本的直接父親接電
?VersionName 版本的名稱
?
?注意VersionInfo 實(shí)現(xiàn)了上述接口 但是VersionInfo 不是一個可以用來創(chuàng)建對象的類。我們只能通過
?別的方式獲取他
?IVersionedWorkspace.FindVersion("目標(biāo)版本名稱");
?或者
?IVersionedWorkapce.Versions 獲取所有當(dāng)前用戶可以獲得的版本。包括自己建立 別人建立的public 和protected的版本
?但是如果別人建立的版本是protected 的那么 你就只能看到數(shù)據(jù)。不能編輯。