Tridion 如何在控制台应用程序中使用engine对象

Tridion 如何在控制台应用程序中使用engine对象,tridion,tridion-2011,Tridion,Tridion 2011,“如何在控制台应用程序中使用引擎” 我不应该使用ITemplate接口和转换方法 我正在使用Tridion 2011 谁能给我推荐一下吗。你不能。引擎类是TOM.NET的一部分,该API明确保留用于: 模板构建块 事件处理程序 对于所有其他情况(如控制台应用程序),您应该使用核心服务 已经有很多好问题(以及其他网站上的文章): 如果您在执行过程中遇到困难,请向我们展示您的相关代码+配置以及您收到的错误消息(或您在哪一步遇到困难),我们将尽力提供帮助。在控制台应用程序中,您应该使用核心服务

“如何在控制台应用程序中使用引擎”

我不应该使用ITemplate接口和转换方法

我正在使用Tridion 2011


谁能给我推荐一下吗。

你不能。
引擎
类是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表示通过空合并运算符和传递赋值的延迟加载。我会偷的。