Вызов метода с объектными параметрами из функтоида сценариев BizTalk.

Мне нужно вызвать метод во внешней сборке из функтоида сценариев в карте BizTalk, в частности, тип Enumerated является параметром в сборке C#. Это вообще возможно? Я без проблем передал строки или целые числа при вызове внешних сборок много раз.


person aceinthehole    schedule 29.12.2010    source источник
comment
Это действительно вполне возможно. Просто убедитесь, что метод не объявлен статическим и что у класса есть конструктор по умолчанию. Таковы требования для скриптового функтоида.   -  person Maxime Labelle    schedule 31.12.2010
comment
На самом деле я ошибаюсь. К сожалению, это не представляется возможным. Функтоид сценариев допускает только обычные скалярные параметры и возвращаемые типы для методов, объявленных во внешних сборках. Извините за вводящий в заблуждение комментарий.   -  person Maxime Labelle    schedule 03.01.2011


Ответы (1)


К сожалению, вы не можете использовать перечисляемые типы в методах, предназначенных для вызова из скриптового функтоида. Однако вы почти можете добиться того, чего хотите, создав оболочку вокруг внешнего метода.

Например, следующий метод нельзя вызвать непосредственно из функтоида сценария.

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;
        }
    }
}

Попытка использовать этот метод приведет к следующей ошибке:

Функция «ScriptNS0:DoSomething()» не удалась. Значение было либо слишком большим, либо слишком маленьким для Int32.

Однако, если вы напишите следующий метод-оболочку, если он работает:

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

Обратите внимание, что метод-оболочка использует обычный параметр String вместо исходного перечисляемого типа Options. Если у вас есть исходный код метода, который вы хотите вызвать, просто добавьте эту дополнительную оболочку как и перегрузите, и все готово.

person Maxime Labelle    schedule 31.12.2010
comment
Спасибо, похоже это единственное решение. Однако такой вид побеждает цель использования перечислений. - person aceinthehole; 11.01.2011