C# TBB (C# コード フラグメント) を作成しています。そのためには、ユーザー定義メソッドを作成する必要があります。<%!を使って作成してみました!%>. コード内のユーザー定義メソッドにアクセスする方法。前もって感謝します。この問題を解決する方法を教えてください。
3 に答える
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 アセンブリへの参照を挿入します。完全なアセンブリ名を使用します。
これは、 Nickolが指している例を含むドキュメント参照リンクです。
C# コード フラグメントで関数とクラスを作成する方法の詳細については、以下のリンクを確認してください。
関数: https://rcnitesh.wordpress.com/2015/04/23/functions-in-c-tbb/
[コード サンプルを含む詳細については、上記のリンクを確認してください]クラス: 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 と宣言されているためです。
[コード サンプルを含む詳細については、上記のリンクを確認してください]