2016-07-19 6 views
0

Мы пишем пользовательскую деятельность. В этом действии можно установить строку подключения к базе данных и имя хранимой процедуры. Во время выполнения хранится процедура. Теперь у нас есть несколько хранимых процедур, которые имеют входные параметры.WF 4.5: Можно ли динамически добавлять переменные во время выполнения?

Можно ли динамически генерировать переменные в WF 4.5 для каждого входного параметра в хранимой процедуре? Чтение параметров из хранимой процедуры не является проблемой, но я не знаю, как сгенерировать переменные.

Пример: Пользователь вводит имя для хранимой процедуры, которая должна быть выполнена (2 входных параметра @ Variable1 и @ Variable2). Теперь на вкладке переменных должны быть две переменные: @ Variable1 и @ Variable2. Если пользователь изменяет имя в хранимой процедуре, то на вкладке переменных должны быть новые параметры (например, только @ Variable2) ...

Мы потратили много времени на эту проблему. Но единственное, что мы узнали, это то, что активность должна быть NativeActivity, а переменные должны быть добавлены в методе CacheMetadata. Но если я добавлю переменную с методом AddVariable(), ничего не произойдет :(

ответ

0

Если вы открыты для включения сторонних библиотек, вы можете попробовать использовать инструмент ORM, такой как Dapper, чтобы выполнить это. Запрос Dapper обычно принимает анонимный типа, чтобы поставить его параметры Типичный код для создания пользовательского объекта из полей в базе данных будет выглядеть примерно так:.

IDbConnection db = New IDbConnection(...); 
int id = 527; // normally passed in - using a hard coded value would defeat the purpose... 
string myQuery = "SELECT Engine, Transmission, Make, Model, BodyStyle FROM Table WHERE ID = @ID"; 
Car result = db.Query<Car>(myQuery, new { ID = id }).First(); 

Так что я считаю, что вы могли бы использовать отражение пройти в типе («Car») с использованием отражать и создавать анонимный объект или передавать фактический объект со свойством «ID» во время выполнения. Он автоматически создаст пользовательский объект Car с результирующими данными, предполагая, что объект Car имеет свойства Engine, T ransmission, Make, Model, BodyStyle и т. д.

Обратите внимание, что если вы не предоставите тип, который вы ожидаете получить, вы получите ExpandoObject: Creating an anonymous type dynamically? - вы также можете передать один из них для своего входные параметры, что означало бы, что вы могли бы создать его во время выполнения.

Этот парень придумал общий метод для Dapper, которые могут помочь вам: http://www.bradoncode.com/blog/2012/12/creating-data-repository-using-dapper.html

То, что он придумал что-то вроде этого:

IEnumerable<T> items = null; 

// extract the dynamic sql query and parameters from predicate 
QueryResult result = DynamicQuery.GetDynamicQuery(_tableName, predicate); 

using (IDbConnection cn = Connection) 
{ 
    cn.Open(); 
    items = cn.Query<T>(result.Sql, (object)result.Param); 
} 

return items; 
+0

Спасибо за ответ! Но моя проблема только в фундаменте рабочего процесса. Я хочу динамически добавлять переменные, которые пользователь может заполнить значениями. Эти значения используются в качестве входных параметров хранимой процедуры. – MartinH