5

私はここでこのトピックに関連するいくつかの質問/回答を見てきましたが、それでも私は私が望む提案を得ていません。ですので、ここでまた質問を投稿します。貴重な時間と回答をいただければ幸いです。

SDL Tridion Content Managerでプログラムによって「コンポーネント、ページ、SG、パブリケーション、フォルダー」を作成し、後でプログラムで作成したコンポーネントをページに追加して、そのページにCT、PTを添付し、最後にプログラムでページを公開するのが好きです。

TOM API(Interop DLL)を使用してSDL Tridion 2009でこれらすべてのアクティビティを実行し、TOM.NetAPIを使用してSDLTridion2011でこれらのアクティビティを試しました。それは機能していませんでしたが、後で、TOM.Net APIはこれらの種類の作業をサポートせず、特にテンプレートとイベントシステム専用であることがわかりました。そしてついに、私はこれらの種類のことをするためにコアサービスに行かなければならないことを知りました。

私の質問:

  1. コアサービスを使用してプログラムでコンポーネントを作成するコンソールアプリケーションを作成する場合、参照として追加する必要のあるDLLは何ですか?
  2. 以前、exeを作成してTCMサーバーで実行しましたが、exeはすべてのものを作成しましたが、コアサービスを使用して同じアプローチを使用できますか?それは機能しますか?
  3. BCはまだ利用可能ですか、それともコアサービスがBCに取って代わりましたか?(BC-ビジネスコネクタ)
  4. 誰でもコードスニペットを送信してコンポーネント/ページを作成できますか(完全なクラスファイルは理解を深めるのに役立ちます)
4

3 に答える 3

6
  1. Tridion.ContentManager.CoreService.Client.dllのみを参照する必要があります。Tridion.Common.dll参照して、などの便利なクラスにアクセスすることもできますが、必須TcmUriではありません。
  2. クライアントプログラムは、指定したマシン上のコアサービスと明示的に接続します。適切に実行された場合、TridionContentManagerと同じマシンまたは別のマシンの両方でクライアントを実行できます。
  3. ビジネスコネクタは引き続き使用できますが、コアサービスに置き換えられました。
  4. これらのリンクを見てください:

SDLTridion2011のコアサービスを使用したコンポーネントの更新

SDL Tridion 2011で、コアサービスを使用してアイテムのメタデータを処理するにはどうすればよいですか?

また、 .NETからコアサービスに接続するトピックに関する標準のドキュメント。

コードについてさらにサポートが必要な場合は、すでに作成したコードを表示し、機能していないものを説明することをお勧めします。

于 2012-05-31T10:38:14.997 に答える
4

私はあなたの質問に答えようとします:

  1. Tridion.ContentManager.CoreService.Clientを参照し、app.configにいくつかのものを追加する必要があります。ここで説明します

  2. CoreServiceにアクセスできる場合は、CMサーバーだけでなく、他のマシンからも機能します。

  3. CoreServiceはBCの代替品です。BCは廃止され、まもなく削除されます
  4. ここからすべての基本情報を取得します。

これはあなたが始めるのに十分なはずです。特定の問題が発生する場合は、別の質問として投稿してください。

于 2012-05-31T10:36:58.037 に答える
1

コンソールアプリケーションでエンジンオブジェクトを使用するにはどうすればよいですか?

コンソールアプリケーションからは、コアサービスを使用する必要があります。コアサービスを使用してコンテンツマネージャーでアイテムを検索する小さな例を作成しました。

Console.WriteLine("FullTextQuery:");

var fullTextQuery = Console.ReadLine();

if (String.IsNullOrWhiteSpace(fullTextQuery) || fullTextQuery.Equals(":q", StringComparison.OrdinalIgnoreCase))
{
    break;
}

Console.WriteLine("SearchIn IdRef:");

var searchInIdRef = Console.ReadLine();

var queryData = new SearchQueryData
                    {
                        FullTextQuery = fullTextQuery,
                        SearchIn = new LinkToIdentifiableObjectData
                                        {
                                            IdRef = searchInIdRef
                                        }
                    };

var results = coreServiceClient.GetSearchResults(queryData);
results.ToList().ForEach(result => Console.WriteLine("{0} ({1})", result.Title, result.Id));

Tridion.ContentManager.CoreService.Clientへの参照をVisualStudioプロジェクトに追加します。

コアサービスクライアントプロバイダーのコード:

public interface ICoreServiceProvider
{
    CoreServiceClient GetCoreServiceClient();
}

public class CoreServiceDefaultProvider : ICoreServiceProvider
{
    private CoreServiceClient _client;

    public CoreServiceClient GetCoreServiceClient()
    {
        return _client ?? (_client = new CoreServiceClient());
    }
}

そしてクライアント自体:

public class CoreServiceClient : IDisposable
{
    public SessionAwareCoreServiceClient ProxyClient;

    private const string DefaultEndpointName = "netTcp_2011";

    public CoreServiceClient(string endPointName)
    {
        if(string.IsNullOrWhiteSpace(endPointName))
        {
            throw new ArgumentNullException("endPointName", "EndPointName is not specified.");
        }

        ProxyClient = new SessionAwareCoreServiceClient(endPointName);
    }

    public CoreServiceClient() : this(DefaultEndpointName) { }

    public string GetApiVersionNumber()
    {
        return ProxyClient.GetApiVersion();
    }

    public IdentifiableObjectData[] GetSearchResults(SearchQueryData filter)
    {
        return ProxyClient.GetSearchResults(filter);
    }

    public IdentifiableObjectData Read(string id)
    {
        return ProxyClient.Read(id, new ReadOptions());
    }

    public ApplicationData ReadApplicationData(string subjectId, string applicationId)
    {
        return ProxyClient.ReadApplicationData(subjectId, applicationId);
    }

    public void Dispose()
    {
        if (ProxyClient.State == CommunicationState.Faulted)
        {
            ProxyClient.Abort();
        }
        else
        {
            ProxyClient.Close();
        } 
    }
}

コアサービスを介してCRUDアクションを実行する場合は、クライアントに次のメソッドを実装できます。

public IdentifiableObjectData CreateItem(IdentifiableObjectData data)
{
    data = ProxyClient.Create(data, new ReadOptions());
    return data;
}

public IdentifiableObjectData UpdateItem(IdentifiableObjectData data)
{
    data = ProxyClient.Update(data, new ReadOptions());
    return data;
}

public IdentifiableObjectData ReadItem(string id)
{
    return ProxyClient.Read(id, new ReadOptions());
}

コンポーネントなどのデータオブジェクトを構築するには、これを行うcreateメソッドを実装するComponentBuilderクラスを実装します。

public ComponentData Create(string folderUri, string title, string content)
{
    var data = new ComponentData()
                    {
                        Id = "tcm:0-0-0",
                        Title = title,
                        Content = content,
                        LocationInfo = new LocationInfo()
                    };

    data.LocationInfo.OrganizationalItem = new LinkToOrganizationalItemData
    {
        IdRef = folderUri
    };

using (CoreServiceClient client = provider.GetCoreServiceClient())
{
    data = (ComponentData)client.CreateItem(data);
}

    return data;
}

これで始められることを願っています。

于 2012-07-16T10:03:59.703 に答える