обмен данными между операциями рабочего процесса - PullRequest
1 голос
/ 10 сентября 2011

Я со списком пользовательских действий (написано в коде позади, C #), где каждое происходит из NativeActivity, теперь я добавляю все эти действия в последовательность с помощью цикла foreach. теперь вопрос в том, как мне поступить, если мне нужно получить какое-то значение из действия и передать его другому занятию.

Скажем, Activity1 устанавливает значение свойства строки как «какое-то имя файла» (разрешает путь к файлу изображения) и на основании того, что действие рядом с ним, которое всегда добавляется в последовательность с помощью цикла for, принимает в качестве входа, чтобы перевернуть это изображение.

Логика получения файла указана в методе выполнения действия 1 и для переключения образа в методе выполнения действия 2.

заранее спасибо

Ответы [ 2 ]

2 голосов
/ 16 сентября 2011
        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;
            }
        }

Надеюсь, это может помочь другим.Спасибо всем остальным за помощь и поддержку.

0 голосов
/ 14 сентября 2011
        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 - это свойство, которое совместно используется различными добавленными действиями через некоторый член интерфейса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...