2010-12-29 4 views
1

特に、列挙型はC#アセンブリのパラメータであり、BizTalkマップのスクリプトファンクションから外部アセンブリのメソッドを呼び出す必要があります。これも可能ですか?私は文字列や整数を渡していますが、問題なく何度も外部アセンブリを呼び出しています。BizTalkスクリプトファンクションのオブジェクトパラメータを持つメソッドを呼び出す

+0

これは確かに完全に可能です。メソッドが静的宣言されておらず、クラスにデフォルトのコンストラクタがあることを確認してください。これらはスクリプトのFunctoidの要件です。 –

+0

実際、私は間違っています。残念ながら、これは可能ではないようです。スクリプティングFunctoidは、外部アセンブリで宣言されたメソッドの通常のスカラパラメータと戻り値の型のみを許可します。誤ったコメントをおかけして申し訳ありません。 –

答えて

1

残念ながら、スクリプトFunctoidから呼び出されるように設計されたメソッドで列挙型を使用することはできません。しかし、外部メソッドのラッパーを作成することで、ほぼ達成することができます。

例えば、次のメソッドはスクリプトFunctoidから直接呼び出すことはできません。ラッパーはその

public string DoSomething(string option) 
    { 
     return Helper.DoSomething(
       (Options) Enum.Parse(typeof(Options), option) 
      ); 
    } 

注意:あなたが、もし作品を以下のラッパー・メソッドを記述する場合、

Function 'ScriptNS0:DoSomething()' has failed. Value was either too large or too small for an Int32.

しかし:

using System; 

namespace ExternalAssembly 
{ 
    public enum Options 
    { 
     OptionNumberOne, 
     OptionNumberTwo, 
    } 

    public class Helper 
    { 
     public string DoSomething(Options option) 
     { 
      // really do something useful here 
      return String.Empty; 
     } 
    } 
} 

は、次のエラーになります。このメソッドを使用しようとすると、メソッドは、元のオプション列挙型ではなく、通常のStringパラメータを使用しています。呼び出したいメソッドのソースコードがある場合は、この余分なラッパーを追加してオーバーロードすれば完了です。

+0

ありがとう、それは唯一の解決策であるようです。そのような種類の列挙を使用する目的を破る。 – aceinthehole

関連する問題