2012-04-10 25 views
10

任何使用下面的函數都會遇到異常?TDSE.GetObject不能解析帶點的WebDAV URL

tdse.GetObject(tmpFolderWebDavURL, EnumOpenMode.OpenModeView, null, 
              XMLReadFilter.XMLReadAll) as Folder; 

似乎如果webdav的最後一段包含一個點,然後方法拋出和異常。

例如

tmpFolderWebDavURL = "/webdav/test_publication/2.2 folder name" - 失敗拋出異常

tmpFolderWebDavURL = "/webdav/test_publication/22 folder name" - 工作

tmpFolderWebDavURL = "/webdav/test_publication/2.2 folder name/sub_folder" - 工作

異常

<?xml version="1.0"?> 
<tcm:Error xmlns:tcm="http://www.tridion.com/ContentManager/5.0" ErrorCode="80040200" Category="4" Source="Kernel" Severity="2"> 
    <tcm:Line ErrorCode="80040200" Cause="false" MessageID="15301"> 
     <![CDATA[Unable to get TOM object for URI: /webdav/TPMG Medical Library Content/Building Blocks/Content Live/2.2 People Lists]]> 
     <tcm:Token>/webdav/TPMG Medical Library Content/Building Blocks/Content Live/2.2 People Lists</tcm:Token> 
    </tcm:Line> 
    <tcm:Line ErrorCode="80040200" Cause="true" MessageID="15748"> 
     <![CDATA[Unable to map all paths to URIs.]]> 
    </tcm:Line> 
    <tcm:Details> 
     <tcm:CallStack> 
      <tcm:Location>SystemDAL.GetURIsFromPaths</tcm:Location> 
      <tcm:Location>SystemDAL.GetURIsFromPaths</tcm:Location> 
      <tcm:Location>URLConversion.ConvertURLToURI</tcm:Location> 
      <tcm:Location>SystemBLST.IBLSystemST_ConvertURLToURI</tcm:Location> 
      <tcm:Location>TDSE.GetObject</tcm:Location> 
     </tcm:CallStack> 
    </tcm:Details> 
</tcm:Error> 

回答

8

就像使用空格一樣,點必須在webdav URL中轉義。

所以一個空格變成了「%20」,一個點變成了「%2E」。試着做tmpFolderWebDavURL.Replace(".", "%2E")

+0

謝謝Nuno!作品一種享受!奇怪的作品沒有編碼,只要小數點不是網址的最後一部分。 – 2012-04-10 21:16:22

+0

是的,我也覺得很奇怪...我會指望它總是失敗,無論在哪裏。正在路上。 – 2012-04-10 21:45:01

+4

我相信正確解釋斜槓前的點。那些沒有斜線的地方被認爲是文件擴展的開始。所以,如果它實際上是一個有效的文件擴展指示符,則更換該點時會很有用。多媒體組件或模式等 – 2012-04-11 01:06:23

2

這是另一個讓PowerShell在你進行這種開發時打開的理由。

假設你知道該項目的TCM URI,就可以得到正確的WebDAVURL很容易:

> $tdse = new-object -com TDS.TDSE 
> $sch = $tdse.GetObject("tcm:3-92723-8",1) 
> $sch.info.WebDAVURL 
/webdav/00_Schemas_003/Building%20Blocks/Schemas/Component/ComponentStaffItem.xsd 

快速複製粘貼就大功告成了!

1

而不是替換「。」使用「%2E」更好地使用Url編碼。 Tridion將解析網址,同時解析webdav網址中的項目。

在將其發送給Tridion之前,始終可以使用url編碼。