7

C# TBB (C# コード フラグメント) を作成しています。そのためには、ユーザー定義メソッドを作成する必要があります。<%!を使って作成してみました!%>. コード内のユーザー定義メソッドにアクセスする方法。前もって感謝します。この問題を解決する方法を教えてください。

4

3 に答える 3

11

TOM.NET API リファレンスには、次の例が記載されています。

<%@ Import Namespace="Tridion.ContentManager.Publishing"%>
<%!
private string ExtraString()
{
    return "Something added by the C# template";
}
%>
log.Debug("Executing C# template");
if (engine.RenderMode == RenderMode.Publish)
{
    package.GetByName(Package.OutputName).AppendToStringValue(ExtraString());
}

上記に加えて、次の構文がサポートされています。

<%@Import Namespace="..." %> 

引用符で囲まれた名前空間をコード フラグメントにインポートします。インポートするすべてのクラスは、グローバル アセンブリ キャッシュに存在する必要があります。

<%! ... %> 

残りのコード フラグメントで使用するメソッド、定数、およびクラスを宣言します。宣言に文字列 '%>' を含めることはできません。作成したクラスは、コード フラグメント内でのみ参照できることに注意してください。

<%RunTemplate Template="tcm:1-184-2048" Class="Tridion.Templating.Examples.ExampleTemplateClass"%> 

Template 属性の URI で識別される特定の .NET Assembly Template Building Block を実行します。このステートメントは通常、.NET アセンブリをアップロードするときに SDL Tridion 2009 自体によって生成され、.NET アセンブリ内の特定のクラスへのアクセスを提供します。

<%@Assembly Name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"%> 

グローバル アセンブリ キャッシュに存在する必要がある非標準の .NET アセンブリへの参照を挿入します。完全なアセンブリ名を使用します。

于 2012-05-07T06:34:38.953 に答える
3

これは、 Nickolが指している例を含むドキュメント参照リンクです。

于 2012-05-08T12:34:59.867 に答える
1

C# コード フラグメントで関数とクラスを作成する方法の詳細については、以下のリンクを確認してください。

  1. 関数: https://rcnitesh.wordpress.com/2015/04/23/functions-in-c-tbb/
    [コード サンプルを含む詳細については、上記のリンクを確認してください]

  2. クラス: https://rcnitesh.wordpress.com/2015/04/24/creating-user-defined-classes-in-c-code-fragment/ 以下は、上記のブログからの抜粋です。

クラスは、次の構文を使用して C# コード フラグメント内で定義されます<%! %>

この USER 定義クラスは、C# コード フラグメントのコンパイル時に Tridion によって作成された PREDEFINED CLASS の NESTED CLASS として配置されます。C# コード フラグメントのコンパイルと定義済みクラス、tridion によって生成されたメソッドの詳細については、このブログ投稿を確認し、C# コード フラグメント内のユーザー定義クラスと Tridion の定義済みクラスの関係を理解し​​てください。

前述のとおり、理解する必要があるのは、C# コード フラグメント内のユーザー定義クラスは、 log 、 engine 、および package などの定義済み変数にアクセスできないということです。これらの変数は、コンパイル中に生成される Predefined クラスで実際には Private と宣言されているためです。

[コード サンプルを含む詳細については、上記のリンクを確認してください]

于 2015-04-24T09:54:10.150 に答える