「コンソール アプリケーションでエンジンを使用するにはどうすればよいですか」
ITemplate-interface と Transform-Method は使用しないでください。
Tridion 2011 を使用しています
誰でも私に提案してください。
「コンソール アプリケーションでエンジンを使用するにはどうすればよいですか」
ITemplate-interface と Transform-Method は使用しないでください。
Tridion 2011 を使用しています
誰でも私に提案してください。
できません。このEngine
クラスは TOM.NET の一部であり、その API は以下で使用するために明示的に予約されています。
他のすべてのケース (コンソール アプリケーションなど) では、コア サービスを使用する必要があります。
すでに多くの良い質問 (および他の Web サイトの記事) があります。
途中で行き詰まった場合は、関連するコードと構成、および表示されたエラー メッセージ (または行き詰まったステップ) を提示してください。そこから支援を試みます。
コンソール アプリケーションからコア サービスを使用する必要があります。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;
}
これで始められることを願っています。