2012-04-27 17 views
5

Tworzę C# TBB. Mam kod XML, jak pokazano poniżej.Jak dodać dll strony trzeciej w Tridion dla C# TBB?

<content> 
    <ah>123</ah> 
    <ph>456</ph> 
    <body> 
    <sc>hi</sc> 
    <value>aa</value> 
    <value>bb</value> 
    <value>cc</value> 
    <value>dd</value> 
    <value>dd</value> 
    </body> 
    <body> 
    <sc>hello</sc> 
    <value>ee</value> 
    <value>ddff</value> 
    </body> 
</content> 

kod C# TBB:

using (MemoryStream ms = new MemoryStream()) 
{ 
XmlTextWriter securboxXmlWriter = new XmlTextWriter(ms, new System.Text.UTF8Encoding(false)); 
securboxXmlWriter.Indentation = 4; 
securboxXmlWriter.Formatting = Formatting.Indented; 
securboxXmlWriter.WriteStartDocument(); 


securboxXmlWriter.WriteStartElement("component"); 

securboxXmlWriter.WriteAttributeString("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); 
securboxXmlWriter.WriteAttributeString("xmlns", "http://www.w3.org/1999/xhtml"); 


securboxXmlWriter.WriteStartElement("content"); 
securboxXmlWriter.WriteStartElement("wire:wire"); 
securboxXmlWriter.WriteStartElement("wire:si"); 

securboxXmlWriter.WriteStartElement("wg:ah"); 
securboxXmlWriter.WriteElementString("text", package.GetValue("Component.ah")); 
securboxXmlWriter.WriteEndElement(); 

securboxXmlWriter.WriteStartElement("wg:ph"); 
securboxXmlWriter.WriteElementString("nlt", package.GetValue("Component.ph")); 
securboxXmlWriter.WriteEndElement(); 

securboxXmlWriter.WriteEndElement(); 
securboxXmlWriter.WriteEndElement(); 
securboxXmlWriter.WriteEndElement(); 
securboxXmlWriter.WriteEndElement(); 
securboxXmlWriter.WriteEndDocument(); 
securboxXmlWriter.Flush(); 
securboxXmlWriter.Close(); 



Item output = package.GetByName("Output"); 

if (output != null) 
{ 
package.Remove(output); 
} 

package.PushItem("Output", package.CreateStringItem(ContentType.Xml, Encoding.UTF8.GetString(ms.ToArray()))); 
} 

w kodzie XML tagu "body" jest wystąpił wielokrotnie. Muszę wyodrębnić treść każdego tagu "body". W tym celu używam pakietu agility HTML. Aby działał w C# TBB, Jak dodać DLL pakietu agility HTML do systemu Tridion? A także proszę podać przykładowy fragment kodu w zwinności html, aby przeglądać tagi treści.

Jeśli agencja HTML nie będzie działać z C# TBB, to proszę zasugerować mi, jak uzyskać treść tagu "body"?

Z góry dzięki. Wczesna reakcja jest doceniana.

Odpowiedz

2

Pomyśl, możesz także użyć ILMerge, aby połączyć ze sobą trzecią bibliotekę DLL i zestaw TBB w jeden plik, który możesz następnie przesłać do Tridion.

+2

Tak, można i mam z tym dobre doświadczenia.Jedynym powodem, dla którego o tym nie wspomniałem, jest to, że połączenie własnej biblioteki DLL z biblioteką DLL innej firmy może łatwo doprowadzić do naruszenia praw autorskich. Tak długo, jak jesteś pewien, że to nie będzie problem, możesz również użyć tego podejścia. Przekażę więcej szczegółów w osobnej odpowiedzi. – Quirijn

+0

Nie sądzę, że istnieje problem praw autorskich. Prawa autorskie dotyczą kodu źródłowego. Jeśli ktoś nie chce, aby ich IL było używane, nie powinni wysyłać biblioteki DLL zespołu, ponieważ to faktycznie wysyła IL. Oczywiście, możesz naruszyć warunki licencji, ale to jest inna kwestia, i nigdy nie widziałem warunku, który zakazuje tej techniki. Z drugiej strony, użycie ILMerge może powodować nieprzyjemne efekty uboczne. Ostatnio miałem problem z poprawką Tridiona, którą AFAIK pojawiłby się tylko przy użyciu podejścia ILMerge –

7

Będziesz musiał umieścić trzecią bibliotekę DLL w pamięci podręcznej Global Assembly Cache (GAC). Dla przykładowego kodu pakietu agility sugeruję, abyś zadał osobne pytanie na ten temat z bardziej szczegółowym tytułem.

+3

Pamiętaj, aby umieścić bibliotekę DLL w GAC na każdym menedżerze treści i na maszynie wydawcy. – Quirijn

4

Korzystanie z ILMerge pozwala zaoszczędzić kłopotów z instalowaniem zewnętrznych bibliotek DLL w GAC. Upewnij się tylko, że nie łamiesz żadnych praw autorskich, łącząc swój kod z cudzymi. Z technicznego punktu widzenia jest to dość proste: po utworzeniu biblioteki DLL szablonu działanie po wybudowaniu łączy ją z zewnętrznymi bibliotekami DLL, które mogą być potrzebne, i tworzy nową bibliotekę DLL. Następnie możesz przesłać tę połączoną bibliotekę DLL do Tridion.

Przykład: załóżmy, że twój projekt szablonu nazywa się "MyTemplates" i ma zależność od ExternalLibraryOne.dll i ExternalLibraryTwo.dll. Oto co trzeba zrobić:

  • Pobierz ILMerge od http://www.microsoft.com/en-us/download/details.aspx?id=17630 (za darmo)
  • Wewnątrz rozwiązania szablonów, utwórz folder o nazwie przedmioty rozwiązanie i skopiować ilmerge.exe tam.
  • Otwórz właściwości projektu szablonów i dodać następujące zdarzenie post-produkcji:

    "$ (SolutionDir) Pozycje Rozwiązanie \ ILMerge"
    /lib:"C:\Windows\Microsoft.NET\Framework \ v4.0.30319 " /t: dll /targetplatform:v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319 /out:"$(TargetDir)$(ProjectName).merged.dll" "$ (TARGETDIR) ExternalLibraryOne.dll” "$ (TARGETDIR) ExternalLibraryTwo.dll" "$ (TargetPath)"

  • Zbuduj swój szablon projekt. Folder wyjściowy (bin/Debug lub bin/Release) będzie teraz zawierał plik o nazwie MyTemplates.merged.dll. Możesz przesłać to do Tridion za pomocą TcmUploadAssembly.

Zakłada to, że używasz oczywiście platformy .NET 4.

Powiązane problemy