2012-04-27 28 views
5

Tôi đang tạo C# TBB. Tôi có mã XML như hình dưới đây.Làm thế nào để thêm dll bên thứ ba trong Tridion cho 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> 

C# mã 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()))); 
} 

Trong đoạn mã XML tag "cơ thể" đang xảy ra nhiều lần. Tôi cần trích xuất từng nội dung thẻ "nội dung". Vì mục đích đó, tôi đang sử dụng gói nhanh nhẹn HTML. Để làm cho nó hoạt động trong C# TBB, Làm thế nào để thêm gói HTML nhanh nhẹn DLL vào hệ thống Tridion? Và cũng vui lòng cung cấp đoạn mã mẫu trong tính linh hoạt html để lặp qua các thẻ body.

Nếu HTML Agility sẽ không hoạt động với C# TBB thì vui lòng đề xuất cho tôi cách tải nội dung thẻ "body"?

Cảm ơn trước.Kết quả phản hồi tích cực được đánh giá cao.

Trả lời

2

Hãy suy nghĩ bạn cũng có thể sử dụng ILMerge để hợp nhất với bên thứ ba của bạn DLL và lắp ráp TBB của bạn thành một duy nhất bạn có thể tải lên Tridion.

+2

Có thể, và tôi có kinh nghiệm tốt với điều đó.Lý do duy nhất tại sao tôi không đề cập đến nó, là việc sáp nhập DLL của riêng bạn với một DLL của bên thứ ba có thể dễ dàng dẫn đến vi phạm bản quyền. Miễn là bạn chắc chắn rằng đó không phải là vấn đề, bạn cũng có thể sử dụng phương pháp đó. Tôi sẽ cung cấp thêm chi tiết trong một câu trả lời riêng biệt. – Quirijn

+0

Tôi không nghĩ có vấn đề về bản quyền. Bản quyền là về mã nguồn. Nếu ai đó không muốn IL của họ được sử dụng, họ không nên gửi một DLL lắp ráp, bởi vì đó là hiệu quả vận chuyển IL. Tất nhiên, bạn có thể vi phạm các điều kiện cấp phép, nhưng đó là một vấn đề khác, và tôi chưa bao giờ thấy một điều kiện cấm kỹ thuật này. Về phía xuống, sử dụng ILMerge có thể gây ra một số tác dụng phụ khó chịu. Gần đây tôi đã gặp sự cố với hotfix Tridion mà AFAIK sẽ chỉ xuất hiện với phương pháp tiếp cận ILMerge –

7

Bạn sẽ cần phải đặt bên thứ ba DLL trong bộ đệm ẩn toàn cục (GAC). Đối với mẫu gói nhanh nhẹn mẫu, tôi đề nghị bạn đặt một câu hỏi riêng biệt cho câu hỏi đó với tiêu đề cụ thể hơn.

+3

Hãy nhớ đặt DLL trong GAC trên mọi trình quản lý nội dung và máy xuất bản. – Quirijn

4

Sử dụng ILMerge giúp bạn tránh phiền phức khi cài đặt các DLL bên ngoài trong GAC. Chỉ cần đảm bảo bạn không vi phạm bất kỳ luật bản quyền nào bằng cách hợp nhất mã của bạn với người khác. Về mặt kỹ thuật, nó đủ đơn giản để làm: sau khi mẫu DLL của bạn đã được xây dựng, một hành động hậu xây dựng kết hợp nó với các DLL bên ngoài mà bạn có thể cần, và tạo một DLL mới. Sau đó, bạn có thể tải lên DLL đã hợp nhất đó thành Tridion.

Ví dụ: giả sử dự án mẫu của bạn được gọi là 'MyTemplates' và nó có sự phụ thuộc vào ExternalLibraryOne.dll và ExternalLibraryTwo.dll. Dưới đây là những gì bạn làm:

  • Tải ILMerge từ http://www.microsoft.com/en-us/download/details.aspx?id=17630 (nó hoàn toàn miễn phí)
  • Bên trong giải pháp khuôn mẫu của bạn, tạo ra một thư mục có tên Giải pháp Items và sao chép ilmerge.exe đó.
  • mở các tính chất của dự án khuôn mẫu của bạn và thêm sau xây dựng sự kiện sau đây:

    "$ (SolutionDir) Giải pháp Items \ 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) "

  • Tạo mẫu của bạn dự án. Thư mục đầu ra (bin/Debug hoặc bin/Release) bây giờ sẽ chứa một tệp có tên MyTemplates.merged.dll. Bạn có thể tải nó lên Tridion bằng TcmUploadAssembly.

Giả sử bạn đang sử dụng .NET 4 tất nhiên.

Các vấn đề liên quan