-4

Tridion Core Serviceを使用して、特定のパブリケーションの既存のフォルダーを取得するにはどうすればよいですか。SessionAwareCoreService2010Clientクラスを使用してフォルダーを作成していますが、上記のクラスで、既存のすべてのフォルダーのリストをフェッチするためのコアサービスの適切なメソッドを見つけることができませんでした。サンプルコードでお答えください。

どんな助けでもいただければ幸いです。

4

2 に答える 2

16

私はあなたの仕事を成し遂げるいくつかのサンプルコードよりもあなたに考えるべき何かを与えたいと思います(人に魚などを与える)。

最初SessionAwareCoreService2010Clientに-SP1ではなくTridion2011GAを使用しているため、うまくいけば使用しているとのことです。それ以外の場合は、コンパイル済みのクライアントとを使用することをお勧めしますSessionAwareCoreServiceClient

ここで、すべてのフォルダーが必要だと言います。パブリケーション内のすべてのフォルダーを1回の呼び出しで実行しますか、それとも階層を再帰的に「ウォーク」しますか?

すべての組織アイテムは、GetList呼び出しをサポートしています。CoreServiceでは、これはclient.GetListXml(subjectId, subjectRelatedFilter)呼び出しを使用して実現されます。フォルダのみが必要な場合は、オブジェクトを作成し、配列内OrganizationalItemItemsFilterDataのタイプのオブジェクトのみが必要であることを指定することから始めます(Folderfilter.ItemTypesfilter.ItemTypes = new[]{ItemType.Folder};

これで、client.GetList呼び出しによって返されるすべてのオブジェクトに対して再帰的に自分自身を呼び出すメソッドを実装し、オブジェクトから必要なプロパティを読み取ることができます。

サンプルコードが本当に必要な場合は、グーグルで検索することをお勧めします。

于 2012-08-18T12:02:41.663 に答える
10

現時点ではテストできませんが、次のようになります。

var rootFolderUri = "tcm:1-1-2";
var filter = new OrganizationalItemItemsFilterData();
filter.ItemTypes = new[] { ItemType.Folder };
filter.Recursive = true;

var listXml = client.GetListXml(rootFolderUri, filter);

foreach (var itemElement in listXml.Descendants())
{
    ...
}
于 2012-08-18T14:07:17.373 に答える