tridion - C# 代码片段和程序集 TBB 有什么区别?

标签 tridion

我了解 C# 代码片段和 .NET 程序集为模块化模板开发提供相同的功能。我们管理 CME 中的代码片段和 Visual Studio 中的汇编代码,但在模板生成器中使用相同的方式。

在代码方面,我可以创建一个 C# Code Fragment Template Building Block (TBB),例如:

var timeStamp = DateTime.Now.ToString("d MMM yyyy");
package.PushItem("timeStamp from fragment", package.CreateHtmlItem(timeStamp));

我还可以通过如下实现 ITemplate 来使用相同的代码创建一个 .NET 程序集模板构建 block 。

using System;
using Tridion.ContentManager.Templating;
using Tridion.ContentManager.Templating.Assembly;

namespace CreateAndBreakTemplates
{
  [TcmTemplateTitle("Add Date to Package")]
  public class AddDateToPackage : ITemplate
  {
    public void Transform(Engine engine, Package package)
    {
      var timeStamp = DateTime.Now.ToString("d MMM yyyy");
      package.PushItem("timeStamp from assembly", 
                       package.CreateHtmlItem(timeStamp));
    }
  }
}

docs解释“SDL Tridion 将代码片段插入到预定义类的预定义方法中”。 看起来这个类实现了 ITemplate 并在下面添加了一些引用(我错过了什么吗?)。

assembly setup instructions至少提到这些dll。
  • Tridion.Common.dll
  • Tridion.ContentManager.dll
  • Tridion.ContentManager.Templating.dll
  • Tridion.ContentManager.Publishing.dll

  • 片段和程序集之间还有其他区别吗?您将如何在两者之间进行选择?

    最佳答案

    当模板第一次被调用和修改后,C# 片段由 Tridion 编译成程序集。为了编译该片段,Tridion 将其包装在一些“地牢敷料”(那些知道该术语来自何处的人的奖励积分)中:

  • 使用 Tridion.ContentManager , Tridion.ContentManager.CommunicationManagement , Tridion.ContentManager.ContentManagementTridion.ContentManager.Templating命名空间
  • 使PackageEngine在名为 package 的字段中可用和 engine分别
  • 为 C# 片段创建一个记录器,该记录器可通过名为 log 的字段获得
  • 添加对一些常用程序集的引用(但尚未为其命名空间添加 using)


  • 编辑:鉴于其他答案,似乎很多人不知道如何在 C# 片段 TBB 中完成某些任务,所以我将在下面记录它们:

    导入其他命名空间

    要将其他命名空间导入/使用到您的 C# 片段中,您需要使用以下语法:



    <%@ Import Namespace="Tridion.ContentManager.ContentManagement.Fields" %>
    

    请注意,这只会从 Tridion 已引用的程序集中导入命名空间。没有机制让您显式添加对其他程序集的引用;因此,如果您需要第三方 DLL,则需要将其添加到 GAC。

    定义自定义函数

    您可以使用以下语法在 C# 片段中定义自定义字段和函数:

    <%!
    
    public static string GetDate()
    {
        return new DateTime().ToString("u").Replace(" ", "T");
    }
    
    %>
    

    定义成员字段和(嵌套)类

    定义自定义函数的语法还允许您定义嵌套类和/或成员字段:

    <%!
    
    public class MyLittleHelper
    {
        public MyLittleHelper(string param1)
        {
        }
    }
    
    %>
    

    关于tridion - C# 代码片段和程序集 TBB 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11812553/

    相关文章:

    tridion - 如何使用 Anguilla JavaScript 设置 Tridion ApplicationData?

    Tridion ComponentLink 无法解析

    Tridion 2011 SP1 HR1 - 使用哪个扩展?

    tridion - SDL Tridion UI 2012 抛出错误 'GetSiteEditItemConfiguration' 无法激活

    Tridion 2011 - 在向用户添加组时如何取消选择所有默认选定的出版物?

    internet-explorer-8 - Tridion 预览和 HTML5 元素

    Tridion 查询 : filter/exclude components based on a list of keywords

    wcf-data-services - 如何使 WCF Dataservice 停止跟踪实体更改?

    tridion - 如何在 SDL Tridion 消息栏中显示自定义消息?