2012-05-16 33 views
2

我發現舊的VBScript API和.NET API的以下區別:外表套上2011 - Engine.GetObject重載

在舊的VBScript API有可能援引「TDSE.getObject」檢索外表套上物體通過通過webdav路徑,選擇一個整數來選擇如何打開它(只讀,讀取和寫入等)以及出版物的ID,在那裏有我們想要的藍圖的確切元素。

在新的.Net API中,我發現了所有的「Engine.GetObject」,但它只接收元素的TCM ID或webdav路徑。

我們的場景如下:在舊的VBScript代碼中,getObject方法的這種重載用於避免在使用TCM ID而不是webdav路徑時檢測到某些權限問題,並且因爲當您需要在不同環境之間複製代碼時,它更加少量(請參閱DEV,PREPROD和PROD),避免更改TCM ID。

所以我的問題是:

  1. 有沒有和過載像舊的一個新的.NET API嗎?
  2. 如果不是,有沒有一種方法可以通過webdav檢索項目,記住它們中的一些可以被本地化並且可以從其父項更改? (舊的方式與此一起工作,如果發送根webdav路徑,它將檢索本地對象,即使它們的名稱與父母不完全相同)

謝謝!

+0

的問題是混亂的。您正在查找支持OpenMode參數的重載,而其餘討論關於您是否可以使用WebDAVURL。請你能讓這個更清楚一點嗎? –

回答

5

您是否希望能夠使用頂級項目的webdav url並指定從中獲取項目的發佈ID?

我會創造對發動機的擴展方法,這是否對你:

public static T GetObject<T>(this Engine engine, string webDavUrl, int publicationId) 
    where T : IdentifiableObject 
{ 
    [logic to retreive the item and then if needed 
    get the correct tcm uri and get the intended item] 

    return item as T; 
} 

然而,這是一個相當昂貴的操作,因爲你會得到兩個對象,而不是一個。所以我不知道我是否會經常使用這種方法。

+0

謝謝你Arjen!最後我們會採取這種方法,因爲這個「黑客」只在幾個地方使用,所以它夠好。 – glezalex

2

Engine.GetObject有4個重載方法。

GetObject的(會話,字符串)

GetObject的(串)

GetObject的(TcmUri)

GetObject的(項目)

您可以檢查Tom.Net的API的更多細節。

2

其實,使用Engine.GetObject Method (String)應該工作。

public virtual IdentifiableObject GetObject(
    string itemUriOrWebDavUrl 
) 

你可以做這樣的東西: -

  1. 獲得基於WebDAV的URL對象
  2. 從該對象
  3. 基於您的出版物獲取TCM ID,修改您的TCM ID相應地做你的東西

試一下這種方式過於: -

Repository testRepository = (Repository)session.GetObject("tcm:0-2-1"); 
Component testComponent = (Component)testRepository.GetObject(webdavURL); //Assuming actual TCM ID is "tcm:1-3" 
Console.WriteLine(testComponent.Id); // should show "tcm:2-3" 
// Do Your Other Stuff 
3

這裏一些樣品

IdentifiableObject item = engine.GetObject(new TcmUri("tcm:5-677")); 
//will give you the latest approved version in the publication 5. 

IdentifiableObject item = engine.GetObject(new TcmUri("tcm:5-677-v0")); 
//will give you the WF or Editable version. 

TcmUri uri = new TcmUri("tcm:5-677"); 
uri.PublicationId = 6; 
IdentifiableObject item = engine.GetObject(uri); 
//will give you the latest approved version in the publication 6.