Обмен данными между операциями рабочего процесса
Я со списком пользовательских действий (написано в коде позади, C#), где каждое происходит от NativeActivity, теперь я добавляю все эти действия в последовательность с помощью цикла foreach. теперь вопрос в том, как мне поступить, если мне нужно получить какую-то ценность от деятельности и передать ее другой деятельности.
Скажем, activity1 устанавливает значение свойства строки в "какое-то имя файла"(разрешает путь к файлу изображения) и на основании того, что действие рядом с ним, которое всегда добавляется в последовательность с помощью цикла for, принимает его как входные данные для переверните это изображение.
Логика для получения файла есть в методе выполнения действия 1 и для переключения изображения в методе выполнения действия 2.
заранее спасибо
2 ответа
var workflow = new Sequence();
Variable<Dictionary<string,object>> variable = new Variable<Dictionary<string,object>>
{
Name = "SharedData"
};
workflow.Variables.Add(variable);
foreach (MyCustomActivity activity in mAddedActivities)
{
workflow.Activities.Add(activity);
}
WorkflowInvoker invoker = new WorkflowInvoker(workflow);
invoker.Invoke();
Это то, что я сделал для фактической реализации, нет необходимости в каком-либо аргументе / опровержении. Переменная "Shared Data" достаточно способна для хранения данных между действиями.
Теперь на каждом уровне активности в переопределенном коде активности метода "Выполнить" необходимо использовать этот фрагмент кода для извлечения ввода / извлечения значения этой переменной рабочего процесса, "SharedData".
WorkflowDataContext dataContext = context.DataContext;
PropertyDescriptorCollection propertyDescriptorCollection = dataContext.GetProperties();
foreach (PropertyDescriptor propertyDesc in propertyDescriptorCollection)
{
if (propertyDesc.Name == "SharedData")
{
myData = propertyDesc.GetValue(dataContext) as Dictionary<string, object>;
if (myData == null) //this to check if its the initial(1st) activity.
myData = new Dictionary<string, object>();
//I'm adding here an additional value into the workflow variable
//its having signature same as that of workflow variable
//dictionary's key as what it is and value as an object
//which user can cast to what actually one wants.
myData.Add("islogonrequired", Boolean.TrueString);
//here I'm fetching some value, as i entered it in my previous activity.
string filePath = myData["filepath"].ToString();
propertyDesc.SetValue(dataContext, myData);
break;
}
}
Надеюсь, что это может помочь другим. Спасибо всем за помощь и поддержку.
var workflow = new Sequence();
//Variable<string> v = new Variable<string>
//{
// Name = "str"
//};
//workflow.Variables.Add(v);
Dictionary<string, object> abc = new Dictionary<string, object>();
abc.Add("thedata", "myValue");
foreach (MyCustomActivity activity in mAddedActivities)
{
if (activity.ActivityResult == null)
activity.ActivityResult = new Dictionary<string, object>();
activity.ActivityResult = abc;
workflow.Activities.Add(activity);
//new Assign<string>
// {
// To = v,
// Value = activity.ActivityResult["thedata"].ToString()
// };
}
WorkflowInvoker invoker = new WorkflowInvoker(workflow);
invoker.Invoke();
это то, что я сделал, и как-то работает. Я не уверен, что это правильный подход, предложите мне что-нибудь Will!!, здесь ActivityResult - это свойство, которое разделяется между различными добавленными действиями через некоторый член интерфейса.