3

「コンソール アプリケーションでエンジンを使用するにはどうすればよいですか」

ITemplate-interface と Transform-Method は使用しないでください。

Tridion 2011 を使用しています

誰でも私に提案してください。

4

2 に答える 2

8

できません。このEngineクラスは TOM.NET の一部であり、その API は以下で使用するために明示的に予約されています。

  1. テンプレートの構成要素
  2. イベント ハンドラ

他のすべてのケース (コンソール アプリケーションなど) では、コア サービスを使用する必要があります。

すでに多くの良い質問 (および他の Web サイトの記事) があります。

途中で行き詰まった場合は、関連するコードと構成、および表示されたエラー メッセージ (または行き詰まったステップ) を提示してください。そこから支援を試みます。

于 2012-07-13T15:45:54.343 に答える
6

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

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 への参照を Visual Studio プロジェクトに追加します。

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

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 メソッドを実装するコンポーネント ビルダ クラスを実装できます。

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-16T09:44:57.263 に答える