2012-10-29 12 views
5

Supponiamo che le seguenti pubblicazioni per questa domanda.Ottenere la pubblicazione radice del componente

20 Contenuto -> TCM: 0-20-1

...

...

...

70 Web -> TCM: 0-121-1

I un componente creato sotto la pubblicazione (20 Contenuto) e sto pubblicando questo componente da una delle pubblicazioni secondarie (70 Web). Sto usando il modello di Dreamweaver per scrivere l'interfaccia utente e sto chiamando le funzioni personalizzate di C# da DWT. Durante la pubblicazione, questo componente verrà indicato come 121-432 nella presentazione del componente. C'è un modo per ottenere la pubblicazione radice di dove viene creato il componente? Dovrei ottenere 20-432, invece di ottenere 121-432.

Ho provato Component .GetBluePrintChain() e restituisce un elenco che contiene tutta la gerarchia blueprint. Potrei ottenere il 1 ° elemento da questo elenco per ottenere questo componente con la pubblicazione in cui è stato effettivamente creato.

Dato che dovrò chiamare questo metodo in molti punti, volevo solo verificare se esiste un altro modo diretto/migliore per farlo.

Qualcuno può suggerire?

risposta

7

Ti consigliamo di guardare il OwningRepository proprietà del componente, in modo da:

var componentIdInOwningPublication = new TcmUri(
    component.Id.ItemId, 
    ItemType.Component, 
    component.OwningRepository.Id.ItemId 
); 

Metti che in una funzione di Dreamweaver-callable personalizzato e si dovrebbe essere pronti per partire.

Aggiornamento V'è anche un metodo di supporto chiamato CreateTcmUriForPublication che fa la traduzione. Così si potrebbe anche invocare che uno come questo:

var componentIdInOwningPublication = TemplateUtilities.CreateTcmUriForPublication(
    component.OwningRepository.Id.ItemId, 
    component.Id 
); 

Il risultato finale dei due frammenti è lo stesso però: la TcmUri del componente nel contesto della sua repository possedere.

+2

D'accordo con il controllo OwningRepository, ma penso che tu abbia sbagliato l'ordine degli argomenti. In TOM.NET la firma è 'pubblica TcmUri (int itemId, ItemType itemType, int publicationId)' per qualche motivo. –

+0

Grazie Peter, ho aggiornato la mia risposta. –

+0

@FrankvanPuffelen Ho provato questo, ma non riesco ancora a ottenere l'ID della pubblicazione del livello di creazione del componente. Sto avendo un componente in pubblico 020 e avendo una CT nella pubblicazione 030 Design e mentre faccio l'anteprima nella pubblicazione Web 070, sto ancora vedendo tcm id della pubblicazione 070. – Balaji