2012-10-29 8 views
5

erhalten Nehmen wir die folgenden Veröffentlichungen für diese Frage an.Die Stammveröffentlichung der Komponente

20 Inhalt -> tcm: 0-20-1

...

...

...

70 Web -> tcm: 0-121-1

I habe eine Komponente erstellt unter (20 Inhalt) Veröffentlichung und ich veröffentliche diese Komponente aus einer der untergeordneten Publikationen (70 Web). Ich verwende die Dreamweaver-Vorlage, um die Benutzeroberfläche zu schreiben, und ich rufe benutzerdefinierte C# -Funktionen von DWT an. Während der Veröffentlichung wird diese Komponente in der Komponentenpräsentation als 121-432 bezeichnet. Gibt es eine Möglichkeit, die Stammveröffentlichung zu erhalten, wo die Komponente erstellt wird? Das sollte ich 20-432 bekommen, anstatt 121-432 zu bekommen.

Ich habe versucht, Component .GetBluePrintChain() und es gibt eine Liste, die die Blueprint-Hierarchie hat. Ich könnte 1. Element von dieser Liste erhalten, um diese Komponente mit der Veröffentlichung zu erhalten, wo sie tatsächlich erstellt wird.

Da ich diese Methode an vielen Stellen aufrufen muss, wollte ich nur überprüfen, ob es andere direkte/bessere Möglichkeiten gibt, dies zu tun.

Kann jemand vorschlagen?

Antwort

7

Sie werden auf die OwningRepository Eigenschaft der Komponente aussehen wollen, so:

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

dass setzen in einem benutzerdefinierten Dreamweaver-aufrufbare Funktion und Sie sollten gut zu gehen.

aktualisieren Es gibt auch eine Hilfsmethode CreateTcmUriForPublication genannt, die die Übersetzung der Fall ist. So könnte man auch, dass man wie folgt aufrufen:

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

Das Endergebnis der beiden Schnipsel ist die gleiche, obwohl: die TcmUri der Komponente im Rahmen ihrer Eigentümer Repository.

+2

Stimmen Sie mit der Überprüfung OwningRepository, aber ich denke, Sie haben die Reihenfolge der Argumente falsch. In TOM.NET ist die Signatur aus irgendeinem Grund 'public TcmUri (int itemId, ItemType itemType, int publicationId). –

+0

Danke Peter, ich habe meine Antwort aktualisiert. –

+0

@FrankvanPuffelen Ich habe das versucht, aber ich bekomme immer noch nicht die Veröffentlichungs-ID der Ebene der Komponentenerstellung. Ich habe eine Komponente in 020 publicaton & mit einem CT in 030 Design-Publikation und während Vorschau in 070 Web-Publikation, sehe ich immer noch tcm id 070 Veröffentlichung. – Balaji