TDSE.GetObject не разрешает URL WebDAV с точками в нем

Любое пережитое исключение с использованием функции ниже?

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" - работает

Exception

<?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>

Ответ 1

Как и в случае с пробелами, точки должны быть экранированы в URL-адресах webdav.

Таким образом, пространство становится "%20", точка становится "% 2E". Попробуйте сделать tmpFolderWebDavURL.Replace(".", "%2E").

Ответ 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

Быстрая копировальная вставка, и все готово!

Ответ 3

Вместо замены "." с "% 2E" лучше использовать кодировку Url. Tridion расшифровывает URL-адрес при разрешении элемента из URL-адреса webdav.

Его всегда безопасно использовать кодировку url перед отправкой в ​​Tridion.