2

古い VBScript API と .Net API の間に次の違いがあることがわかりました。

古い VBScript API では、「TDSE.getObject」を呼び出して、webdav パス、それを開く方法 (読み取り専用、読み取りと書き込みなど) を選択するための整数、および発行元の ID を渡す Tridion オブジェクトを取得することができます。私たちが望む青写真の正確な要素があります。

新しい .Net API で見つかったのは「Engine.GetObject」だけでしたが、TCM ID または要素の webdav パスしか受け取りません。

シナリオは次のとおりです。古い VBScript コードでは、この getObject メソッドのオーバーロードは、webdav パスの代わりに TCM ID を使用しているときに検出されるいくつかの権限の問題を回避するために使用されていました。これは、異なる環境間でコードをコピーする必要がある場合にはるかに手間がかかるためです (DEV、PREPROD を参照)。および PROD など)、TCM ID の変更を回避します。

だから私の質問は:

  1. 新しい .Net API に古いもののようなオーバーロードはありますか?
  2. そうでない場合、アイテムの一部がローカライズされて親から変更される可能性があることを念頭に置いて、webdav でアイテムを取得する方法はありますか? (古い方法はこれで動作します。ルート webdav パスを送信すると、名前が親とまったく同じでなくても、ローカル オブジェクトが取得されます)

ありがとうございました!

4

4 に答える 4

5

最上位アイテムの webdav url を使用して、アイテムを取得する出版物 ID を指定できるようにしますか?

これを行う拡張メソッドを Engine に作成します。

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;
}

ただし、1 つではなく 2 つのオブジェクトを取得するため、これは非常にコストのかかる操作です。したがって、この方法を頻繁に使用するかどうかはわかりません。

于 2012-05-16T08:52:09.937 に答える
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.
于 2012-06-25T18:22:35.560 に答える
2

実際、使用Engine.GetObject Method (String)するとうまくいくはずです。

public virtual IdentifiableObject GetObject(
    string itemUriOrWebDavUrl
)

この方法で何かを行うことができます:-

  1. WebDav URL に基づいてオブジェクトを取得する
  2. このオブジェクトから TCM ID を取得します
  3. あなたの出版物に基づいて、それに応じて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
于 2012-05-16T10:38:01.637 に答える
2

Engine.GetObject には 4 つのオーバーロードされたメソッドがあります。

GetObject(セッション、文字列)

GetObject(文字列)

GetObject(TcmUri)

GetObject(アイテム)

詳細については、Tom.Net Api を確認してください。

于 2012-05-16T08:12:52.447 に答える