2012-04-10 20 views
10

Bất cứ ai ngoại lệ có kinh nghiệm sử dụng bên dưới chức năng?TDSE.GetObject không giải quyết được một URL WebDAV với dấu chấm trong nó

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

Dường như phân đoạn cuối cùng của webdav có dấu chấm thì phương thức sẽ ném và ngoại lệ.

ví dụ

tmpFolderWebDavURL = "/webdav/test_publication/2.2 folder name" - không ngoại lệ ném

tmpFolderWebDavURL = "/webdav/test_publication/22 folder name" - làm việc

tmpFolderWebDavURL = "/webdav/test_publication/2.2 folder name/sub_folder" - làm việc

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> 

Trả lời

8

Giống như không gian, dấu chấm phải được thoát trong URL webdav.

Vì vậy, một không gian trở thành "% 20", một dấu chấm trở thành "% 2E". Hãy thử làm tmpFolderWebDavURL.Replace(".", "%2E").

+0

Cảm ơn Nuno! Làm việc một điều trị! Weird hoạt động mà không cần mã hóa miễn là dấu thập phân không phải là phân đoạn cuối cùng của URL. –

+0

Vâng, tôi cũng thấy điều kỳ quặc đó ... Tôi hy vọng nó sẽ thất bại, bất cứ nơi đâu. đang ở trong đường dẫn. –

+4

Tôi tin rằng các dấu chấm trước dấu gạch chéo được diễn giải chính xác. Những người không có dấu gạch chéo ở đâu đó sau khi họ được coi là bắt đầu của một phần mở rộng tập tin. Vì vậy, hãy cẩn thận khi thay thế dấu chấm nếu nó thực sự là chỉ báo tiện ích mở rộng tệp hợp lệ, ví dụ: Đối với các thành phần đa phương tiện hoặc lược đồ, v.v. –

2

Đây cũng là một lý do để có mở PowerShell bất cứ khi nào bạn đang làm loại này phát triển.

Giả sử bạn biết uri tcm của mặt hàng đó, bạn có thể lấy WebDAVURL đúng rất dễ dàng:

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

Một copy-paste nhanh chóng và bạn đã hoàn tất!

1

Thay vì thay thế "" với "% 2E" thì tốt hơn nên sử dụng Mã hóa Url. Tridion sẽ giải mã url trong khi giải quyết mục từ url webdav.

của nó luôn luôn an toàn để sử dụng mã hóa url trước khi gửi đến Tridion.

Các vấn đề liên quan