2012-05-31 8 views
5

He visto algunas de las preguntas/respuestas relacionadas con este tema aquí, sin embargo, todavía no recibo la sugerencia que deseo. Así que vuelvo a publicar mi pregunta aquí, y agradecería su valioso tiempo y sus respuestas.Uso de SDL Tridion 2011 Core Service para crear componentes programáticamente

Me gustaría crear "Componente, Página, SG, Publicación, Carpetas" mediante programación en SDL Tridion Content Manager, y más adelante, me gustaría agregar componentes creados por programación en Página y adjuntar CT, PT para esa página y, finalmente, desea publicar la página mediante programación.

He hecho todas estas actividades en SDL Tridion 2009 usando TOM API (Interop DLL), y probé estas actividades en SDL Tridion 2011 usando TOM.Net API. No funcionaba y luego supe que la API de TOM.Net no admitiría este tipo de trabajos y es específicamente solo para Plantillas y Sistema de Eventos. Y finalmente llegué a saber que tengo que ir a los servicios básicos para hacer este tipo de cosas.

Mis preguntas:

  1. Cuando creo aplicación de consola para crear el componente mediante programación utilizando el servicio de núcleo, lo son de Tengo que añadir como referencia la DLL?
  2. Anteriormente, he creado el exe y ejecuté en el servidor de TCM, el exe creó todas las cosas, ¿puedo usar el mismo enfoque usando servicios básicos también? ¿Funcionará?
  3. ¿Está BC todavía disponible o Core Service reemplazado BC? (Conector AC-Business)
  4. ¿Alguien puede enviar algo de fragmento de código para crear Componente/Página (archivo de clase completa será útil para entender mejor)
+0

El servicio principal es Business Connector 2.0. Entonces, cuando nos referimos a que Business Connector está en desuso, es específicamente el BC y API originales, anteriores a SDL Tridion 2011. Consulte el [SDL material] (http://www.sdl.com/products/tridion/business- connector.html) y una buena [descripción general de Bart Koopman sobre los puntos de integración de SDL Tridion 2011] (http://sdltridionworld.com/articles/sdltridion2011/tutorials/tackleintegrations.aspx). –

Respuesta

1

De How can i use engine object in my console application

Desde una aplicación de consola se debe utilizar el Servicio básico. Escribí un pequeño ejemplo usando el Servicio central para buscar elementos en el administrador de contenido.

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

Agregue una referencia a Tridion.ContentManager.CoreService.Client a su proyecto de Visual Studio.

Código del Proveedor Cliente Servicio básico:

public interface ICoreServiceProvider 
{ 
    CoreServiceClient GetCoreServiceClient(); 
} 

public class CoreServiceDefaultProvider : ICoreServiceProvider 
{ 
    private CoreServiceClient _client; 

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

Y el propio cliente:

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

Cuando se desea llevar a cabo las acciones CRUD a través del servicio de núcleo puede implementar los métodos siguientes en el cliente:

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

Para construir un objeto de datos de, por ejemplo, un componente que puede implementar una clase de generador de componentes que implementa un método de creación que hace esto para usted:

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

Esperanza este le ayudará a comenzar.

+0

El uso del nombre CoreServiceClient para el cliente causaría un error de nomenclatura ambiguo, al intentar (utilizando (Cliente CoreServiceClient = provider.GetCoreServiceClient())) alguna sugerencia sobre esto? –

4

voy a tratar de responder a sus preguntas:

  1. Tiene que hacer referencia a Tridion.ContentManager.CoreService.Client y agregar algunas cosas a app.config. Es descrito here

  2. Se trabajará desde un servidor CM, así como de cualquier otra máquina, siempre que se pueda acceder CoreService

  3. CoreService es el reemplazo para BC. BC está en desuso y se cancelará pronto.
  4. Obtendrás toda la información básica del here.

Esto debería ser suficiente para que pueda comenzar. Si tiene problemas específicos, publíquelos como preguntas separadas.

6
  1. Solo necesitará hacer referencia a Tridion.ContentManager.CoreService.Client.dll. Usted puede querer hacer referencia a Tridion.Common.dll para obtener acceso a algunas clases útiles, como TcmUri, pero no es necesario.
  2. Su programa de cliente hará una conexión explícita con el servicio central en una máquina que usted especifique. Si se hace correctamente, puede ejecutar el cliente en la misma máquina que Tridion Content Manager o en una máquina diferente.
  3. Business Connector todavía está disponible, pero ha sido reemplazado por el Core Service.
  4. Tener un vistazo a estos enlaces:

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?

Y la documentación estándar sobre el tema connecting to the Core Service from .NET.

Si necesita más ayuda con el código, le sugiero que nos muestre el código que ya ha escrito y explique lo que no funciona.

+0

Hola, Frank, he pasado por la API de servicio compartido, y veo que todas las clases relacionadas están disponibles en (Tridion.contentmanager.data.dll) y no pude encontrar esta dll en el servidor de Tridion. también no pude encontrar Tridion.contentmanger.coreservice.client dll también. pero podría ubicar Tridion.cotentmanager.coreservice.dll. ¿Y cómo hacer para que la sesión de servicio en equipo continúe con la creación de componentes, etc.? – user1428019

+0

Tridion.ContentManager.CoreService.Client.dll se agregó en Tridion 2011 SP1. Si todavía está en Tridion 2011 GA, deberá agregar una referencia de servicio en Visual Studio y dejar que genere el código necesario del lado del cliente para usted. Debería ** no ** agregar a su cliente otras DLL que las que mencioné (o mejor aún: que se mencionan en la documentación). Ya hay muchos ejemplos sobre cómo crear una CoreServiceSession; Le sugiero que busque en Google y lea algunos artículos de Ryan Durkin, Robert Curlette o uno de los otros expertos. –

+0

Hola Frank, muchas gracias, pude crear una carpeta usando servicio en servidor. Estoy utilizando Tridion 2011 GA, puedo agregar la referencia de servicio (http: //servername/webservice/coreservice.svc) en la aplicación de mi consola desde el servidor de Tridion. Y traté de agregar la misma referencia desde el escritorio de mi cliente local, no puedo agregarla. Y cuando ejecuto el exe desde el servidor, creé la carpeta, ¿cómo ejecutar el mismo exe desde la máquina cliente? – user1428019

Cuestiones relacionadas