2012-07-13 3 views
3

"Comment utiliser le moteur dans mon application console"Comment puis-je utiliser l'objet moteur dans mon application console

Je ne dois pas utiliser l'interface ITemplate et la méthode Transform.

J'utilise Tridion 2011

Quelqu'un pourrait-il s'il vous plaît me suggérer.

+3

Pourriez-vous expliquer quel est votre cas d'utilisation et ce que vous faites? Un conseil amical, le plus d'informations que vous fournissez en vous questionne les meilleures réponses que vous recevrez. Pour votre cas d'utilisation, peut-être le moteur n'est pas la bonne approche de conception, je ne sais pas, sauf si vous expliquez ce que vous essayez d'atteindre et que avez-vous déjà fait. –

Répondre

8

Vous ne pouvez pas. La classe Engine fait partie de la TOM.NET et que l'API est explicitement réservée à une utilisation dans:

  1. Modèle de construction Blocs
  2. Event Handlers

Pour tous les autres cas (telles que les applications de la console) vous devriez utiliser le service principal.

Il y a beaucoup de bonnes questions (et des articles sur d'autres sites web) déjà:

Si vous êtes coincé le long du chemin, nous montrent le code correspondant + configuration que vous avez et quel message d'erreur vous obtenez (ou à quelle étape vous êtes coincé) et nous allons essayer d'aider à partir de là.

6

À partir d'une application console, vous devez utiliser le service principal. J'ai écrit un petit exemple en utilisant le service de base pour rechercher des éléments dans le gestionnaire de contenu.

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)); 

Ajoutez une référence à Tridion.ContentManager.CoreService.Client à votre projet Visual Studio.

code du service de base fournisseur client:

public interface ICoreServiceProvider 
{ 
    CoreServiceClient GetCoreServiceClient(); 
} 

public class CoreServiceDefaultProvider : ICoreServiceProvider 
{ 
    private CoreServiceClient _client; 

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

Et le client lui-même:

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(); 
     } 
    } 
} 

Lorsque vous souhaitez effectuer des actions CRUD par le service de base, vous pouvez mettre en œuvre les méthodes suivantes dans la client:

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()); 
} 

Pour construire un objet de données de par exemple un composant peut implémenter une classe Builder composant qui implémente une méthode de création qui fait cela pour vous:

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; 
} 

Hope this vous permet de démarrer.

+0

+1 pour le chargement paresseux via l'opérateur de coalescence nulle et l'affectation transitive. Je vais voler ça. –

Questions connexes