2012-08-04 55 views
3

我循環組件的文件夾中,尋找其類型的一個字段的DateTime在於範圍當前日期未來7天的其公佈的地位的基礎上的組件。|評論方法拋出InvalidUriException當組件被檢出

但是,如果任一組件被檢出然後|評論方法拋出一個異常InvalidUriException。如果我不想通過捕獲異常並繼續循環來跳過此檢出組件,我該如何處理這種情況?

編輯: 第三行爲檢出組件輸出InvalidUriException

componentUri = new TcmUri(node.Attributes[CommonConstants.Id].Value).GetVersionlessUri(); 
dummyComponent = engine.GetObject(componentUri) as Component; 
bool isPublished = PublishEngine.IsPublished(dummyComponent , publicationTarget); 
+0

PublishEngine的'IsPublished'是否會拋出異常?請重新說明你的要求,我不太瞭解情況。 – 2012-08-04 09:20:35

+2

componentUri = new TcmUri(node.Attributes [CommonConstants.Id] .Value).GetVersionlessUri(); dummyComponent = engine.GetObject(componentUri)作爲組件; bool isPublished = PublishEngine.IsPublished(matchComponent,publicationTarget);第三個語句在檢出組件時引發異常。 – AlokBhatt 2012-08-04 11:32:15

+1

代碼示例沒有解釋您的問題。 dummyComponent似乎與代碼的其餘部分沒有關係(並且這是錯誤的強制類型)。我們無法看到matchComponent的來源。你確定這不僅僅是你的代碼中的邏輯問題嗎?你可以放置一個斷點並獲得導致問題的Uri的值,然後查看該物品是否存在? – 2012-08-05 17:03:28

回答

4

無效的uri異常意味着tcm id(item)不存在。當一個組件被簽出時,它可能會附加一個次要的版本號,例如uri。中醫認爲:XX-YY-YY-V1。所以你需要抓住它。

試試這個:打開檢查了組件的版本歷史,看到了最新版本的ID是什麼。在你的代碼

2

尋找你的組件本身傳遞,它不應該是一個TcmUri? 甚至當您對URI進行硬編碼時會引發異常?如果方法不支持版本的URI或編輯URI

2

無效的URI拋出異常。使用無版本的uri,那麼它應該工作得很好,我認爲。 U可以使用TcmUri.GetVersionLess uri方法。

+0

你已經看到了我附加的代碼片段。當我得到tcm uri作爲無版本並且使用這個語句dummyComponent = engine.GetObject(componentUri)作爲Component;然後再次在組件末尾附加v0。 – AlokBhatt 2012-08-06 06:10:25

+0

PublishEngine.IsPublished不添加v0。可能是engine.GetObject返回項目的結帳版本。你能調試並看到dummyComponent的TcmUri嗎? – Bappi 2012-08-06 07:05:15

+0

你說得對。 GetObject正在添加v0。 – AlokBhatt 2012-08-06 07:29:17