TDSE.GetObject无法解析其中包含点的WebDAV URL

时间:2012-04-10 20:43:32

标签: tridion tridion2009

使用以下功能的任何人都遇到异常吗?

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>

3 个答案:

答案 0 :(得分:8)

就像空格一样,必须在webdav网址中转义点。

因此空格变为“%20”,点变为“%2E”。尝试tmpFolderWebDavURL.Replace(".", "%2E")

答案 1 :(得分: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

快速复制粘贴,你就完成了!

答案 2 :(得分:1)

而不是替换“。”使用“%2E”最好使用Url编码。 Tridion将在解析webdav网址中的项目时对网址进行解码。

在将其发送到Tridion之前使用url编码总是安全的。