2012-05-31 10 views
5

Qui ho visto alcune domande/risposte relative a questo argomento, tuttavia ancora non ho ricevuto il suggerimento che desidero. Quindi sto postando nuovamente la mia domanda qui, e sarei grato per il vostro prezioso tempo e le vostre risposte.Utilizzo del servizio principale SDL Tridion 2011 per creare componenti in modo programmatico

Vorrei creare "Componente, Pagina, SG, Pubblicazione, Cartelle" tramite programmazione in SDL Tridion Content Manager, e in seguito, vorrei aggiungere componenti creati a livello di codice in Pagina e collegare CT, PT per quella pagina e, infine, vorrebbe pubblicare la pagina a livello di programmazione.

Ho eseguito tutte queste attività in SDL Tridion 2009 utilizzando l'API TOM (DLL di interoperabilità) e ho provato queste attività in SDL Tridion 2011 utilizzando l'API TOM.Net. Non funzionava e in seguito sono venuto a sapere che, l'API TOM.Net non supporta questo tipo di lavori ed è specificamente solo per Templates ed Event System. E alla fine sono venuto a sapere che devo andare per i servizi di base per fare questo genere di cose.

Le mie domande:

  1. Quando creo applicazione console per creare componenti di programmazione utilizzando il servizio di base, quali sono del devo aggiungere come riferimento DLL?
  2. In precedenza, ho creato l'exe ed eseguito nel server TCM, l'exe ha creato tutti gli elementi, posso utilizzare lo stesso approccio anche utilizzando i servizi di base? Funzionerà?
  3. BC è ancora disponibile o il servizio di base è sostituito BC? (BC-Business Connector)
  4. Qualcuno può mandare qualche frammento di codice per creare Component/Pagina (file di classe completo sarà utile per capire meglio)
+0

Il servizio principale è Business Connector 2.0. Quindi, quando ci riferiamo al Business Connector deprecato, è specificamente il BC originale e l'API, pre-SDL Tridion 2011. Vedi il [materiale SDL] (http://www.sdl.com/products/tridion/business- connector.html) e una bella [panoramica di Bart Koopman sui punti di integrazione di SDL Tridion 2011] (http://sdltridionworld.com/articles/sdltridion2011/tutorials/tackleintegrations.aspx). –

risposta

1

Da How can i use engine object in my console application

Da un'applicazione console è necessario utilizzare il servizio principale. Ho scritto un piccolo esempio utilizzando il servizio principale per cercare elementi nel gestore di contenuti.

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

Aggiungere un riferimento alla Tridion.ContentManager.CoreService.Client al tuo progetto di Visual Studio.

Codice del fornitore Cliente Servizio principale:

public interface ICoreServiceProvider 
{ 
    CoreServiceClient GetCoreServiceClient(); 
} 

public class CoreServiceDefaultProvider : ICoreServiceProvider 
{ 
    private CoreServiceClient _client; 

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

E il client stesso:

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

Quando si desidera eseguire azioni CRUD attraverso il servizio principale è possibile implementare i metodi illustrati di seguito 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()); 
} 

Per costruire un oggetto dati di es. un componente è possibile implementare una classe Builder componente che implementa un metodo create che fa per voi:

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

Spero che questo è una buona partenza.

+0

L'utilizzo del nome CoreServiceClient per il client causerebbe un errore di denominazione ambiguo durante il tentativo (utilizzando (client CoreServiceClient = provider.GetCoreServiceClient())) qualche suggerimento su questo? –

4

cercherò di rispondere alle vostre domande:

  1. È necessario fare riferimento a Tridion.ContentManager.CoreService.Client e aggiungere alcune cose a app.config. E 'descritto here

  2. Funzionerà dal server di CM, così come da qualsiasi altra macchina, a condizione che può accedere CoreService

  3. CoreService è la sostituzione per BC. BC è deprecato e sarà presto eliminato
  4. Otterrete tutte le informazioni di base da here.

Questo dovrebbe essere sufficiente per iniziare. Se avrai problemi specifici, pubblicali come domande separate.

6
  1. Sarà sufficiente fare riferimento a Tridion.ContentManager.CoreService.Client.dll. È possibile che si voglia fare riferimento a Tridion.Common.dll per ottenere l'accesso ad alcune classi utili come TcmUri, ma non è necessario.
  2. Il programma client eseguirà una connessione esplicita con il servizio di base su un computer specificato. Se eseguito correttamente, è possibile eseguire il client sullo stesso computer di Tridion Content Manager o su un altro computer.
  3. Business Connector è ancora disponibile, ma è stato sostituito dal Servizio principale.
  4. Date un'occhiata a questi link:

Updating Components using the Core Service in SDL Tridion 2011

In SDL Tridion 2011, how can I process metadata on an item using the Core Service?

E la documentazione standard sul tema connecting to the Core Service from .NET.

Se hai bisogno di ulteriore aiuto con il codice, ti suggerisco di mostrarci il codice che hai già scritto e di spiegare cosa non funziona.

+0

Ciao Frank, ho passato attraverso l'API coreservice, e vedo tutte le classi relative ai building block sono disponibili in (Tridion.contentmanager.data.dll) e non sono riuscito a trovare questa dll nel server Tridion. anche io non potrei trovare Tridion.contentmanger.coreservice.client dll anche. ma potrei trovare Tridion.cotentmanager.coreservice.dll. E come ottenere la sessione di coreservice per procedere con la creazione di componenti e così via? – user1428019

+0

Tridion.ContentManager.CoreService.Client.dll è stato aggiunto in Tridion 2011 SP1. Se sei ancora su Tridion 2011 GA, dovrai aggiungere un riferimento al servizio in Visual Studio e lasciare che generi il codice lato client necessario per te. Dovresti ** non ** aggiungere altre DLL rispetto a quelle che ho menzionato (o meglio ancora: quelle citate nella documentazione) al tuo cliente. Ci sono già un sacco di esempi su come creare un CoreServiceSession; Ti suggerisco di google e leggi alcuni articoli di Ryan Durkin, Robert Curlette o uno degli altri esperti. –

+0

Ciao Frank, grazie mille, sono stato in grado di creare una cartella usando coreservice. Sto utilizzando Tridion 2011 GA, sono in grado di aggiungere riferimento al servizio (http: //servername/webservice/coreservice.svc) nella mia applicazione console dal server Tridion. E ho provato ad aggiungere lo stesso riferimento dal mio desktop client locale, non sono in grado di aggiungere. E quando eseguo l'exe dal server, ha creato la cartella, come eseguire lo stesso file exe dal computer client? – user1428019

Problemi correlati