Tridion 如何在控制台应用程序中使用engine对象
“如何在控制台应用程序中使用引擎” 我不应该使用ITemplate接口和转换方法 我正在使用Tridion 2011Tridion 如何在控制台应用程序中使用engine对象,tridion,tridion-2011,Tridion,Tridion 2011,“如何在控制台应用程序中使用引擎” 我不应该使用ITemplate接口和转换方法 我正在使用Tridion 2011 谁能给我推荐一下吗。你不能。引擎类是TOM.NET的一部分,该API明确保留用于: 模板构建块 事件处理程序 对于所有其他情况(如控制台应用程序),您应该使用核心服务 已经有很多好问题(以及其他网站上的文章): 如果您在执行过程中遇到困难,请向我们展示您的相关代码+配置以及您收到的错误消息(或您在哪一步遇到困难),我们将尽力提供帮助。在控制台应用程序中,您应该使用核心服务
谁能给我推荐一下吗。你不能。
引擎
类是TOM.NET的一部分,该API明确保留用于:
如果您在执行过程中遇到困难,请向我们展示您的相关代码+配置以及您收到的错误消息(或您在哪一步遇到困难),我们将尽力提供帮助。在控制台应用程序中,您应该使用核心服务。我编写了一个使用核心服务在content manager中搜索项目的小示例
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;
}
希望这能让您开始。您能解释一下您的用例和您正在做什么吗?友好的建议,你在问题中提供的信息越多,你得到的答案就越好。对于您的用例,可能是引擎不是正确的设计方法,我不知道,除非您解释您正在尝试实现什么以及您已经做了什么。+1表示通过空合并运算符和传递赋值的延迟加载。我会偷的。