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"
- работает
исключение
<?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 ответа
Как и в случае с пробелами, точки должны быть экранированы в URL-адресах webdav.
Таким образом, пробел становится "%20", точка становится "%2E". Попробуй сделать tmpFolderWebDavURL.Replace(".", "%2E")
,
Это еще одна причина, почему 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
Быстрая копия-паста, и все готово!
Вместо замены "." с "%2E" лучше использовать Url Encoding. Tridion будет декодировать URL при разрешении элемента из URL веб-сайта.
Всегда безопасно использовать URL-кодировку перед отправкой в Tridion.