Программирование >>  Программирование с использованием ajax 

1 ... 391 392 393 [ 394 ] 395 396


3. Поскольку свойство зависимостей используется для привязки данных одного элемента в рабочем потоке к другому, выполнение проверки на предмет того, не содержится ли в свойстве Message значение null, более не является достаточно мерой. Вместо этого теперь сначала должна выполняться проверка на предмет того, не привязано ли свойство к какому-то другому свойству в рабочем потоке, и только в том случае, если это так - проверка его текстового значения. Чтобы обеспечить такое поведение, удалите ту логику, которая сейчас содержится в разделе if (null ! = act. Parent), и замените ее следующим кодом:

public class DebugActivityValidator : ActivityValidator {

public override ValidationErrorCollection Validate (ValidationManager manager, object obj)

if (null != act.Parent) {

OK - проверка свойства Message

if (!act.IsBindingSet(DebugActivity.MessageProperty)) {

if (string.IsNullOrEmpty(act.Message)) errors.Add(

ValidationError.GetNotSetValidationError( Message ));

return errors;

Здесь перед выполнением проверки на предмет того, не является ли значение свойства Message пустым или нулевым (null), вызывается метод IsBindingSet. Если привязка была установлена, тогда генерировать ошибку верификации нет никакой необходимости.

Определив все это, вы теперь можете подключать свойство Message действия DebugActivity к любому другому строковому свойству в рабочем потоке. В случае, когда свойство определяется как свойство зависимостей, в представляющей его ячейке это отражается с помощью соответствующего небольшого значка, как показано на рис. 36.21.

debugActlvltyl .g.DataBinding.DebugActrv -

(Name)

debu9Activityl

Description

Enabled

True

n a

Puc. 36.21. Значок в ячейке свойства, указывающий на то, что оно является свойством зависимостей

4. После компиляции решения и добавления действия DebugActivity в свой рабочий поток щелкните на этом действии, чтобы отобразить его свойства, и выберите свойство Message. Помимо пиктограммы рядом с именем этого свойства еще также будет отображаться кнопка с изображением символа троеточия.



Введите какое-нибудь значение для этого свойства или щелкните на кнопке с изображением троеточия (или же дважды щелкните на значке привязки), чтобы отобразить диалогового окно, показанное на рис. 36.22.

Bind Меалдс to en activ tys property

Bind to an wistmg member [K>dto<r>

a I WorWlcl

Ф -Jj debugActivrtyl

ti; O-.namicUpdateCondition Name Description

The selected property of type System.Strir\9 can be assigned to the target property of type System String

Puc. 36.22. Диалоговое окно для привяжи свойства

В этом окне вы можете выбрать свойство с таким же типом данных, как и у того, привязку которого выполняете: например, в данном примере значение свойства Message было привязано к определенному в рабочем потоке свойству Pol icy Id. Во время выполнения эти два свойства будут соединяться, благодаря чему на этапе использования действием DebugActivity свойства Message его значение будет совпадать со значением свойства Policyld в рабочем потоке. Никакого копирования данных происходить не будет - свойство Message будет, по сути, представлять собой то же свойство Policyld.

На рис. 36.23 показано, что будет отображаться в ячейке связанного свойства. На нем видно, что в ячейке такого свойства будет отображаться имя того объекта, в котором содержится определение связанного свойства и путь к нему, в роли которого в данном случае выступает имя свойства Policyld.

Propcfftics

debugActrvHyl

9 DataBinding DebugActiv -

[ (Name)

debogActMtyl

Description

Enabled

True

В Message

, Activity.Workffewl P.

Name

Workflowl

Path

Polkyld

Puc. 36.23. Внешний вид ячейки привязанного свойства



5. Теперь осталось только передать свойство Policyld рабочему потоку. Чтобы сделать это, необходимо создать словарную коллекцию пар типа имя-значение и передать ее вызову CreateWorkf low в WorkflowRuntime. Поэтому для создания такой словарной коллекции и запуска рабочего потока введите следующий код:

Dictionary<string, object> parms = new Dictionary<string, object>();

parms.AddCPolicyld , xx-99-2293382 ) ;

Workflowlnstance instance = workflowRuntime.CreateWorkflow (typeof( 9 DataBinding.Workflowl), parms);

instance.Start ();

В этом коде сначала определяется словарная коллекция params, в которую добавляется значение Policyld. Далее создается сам рабочий поток, методу CreateWorkf low которого эта коллекция params и передается в качестве второго параметра. Это дает возможность передавать в рабочий поток различные параметры и использовать их внутри него.

Резюме

В этой главе было рассказано о Windows Workflow Foundation и показано, как создавать рабочие потоки и выполнять их с помощью WorkflowRuntime. Рабочие потоки могут служить способом расширения приложения и упрощать конечным пользователям работу с ним, позволяя добавлять действия в рабочие потоки путем перетаскивания.

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

В WF имеется множество точек расширения: например, она позволяет создавать специальную службу обеспечения постоянства, способную сохранять данные о состоянии выполняющихся рабочих потоков в базе данных SQL Server, а не на диске. WF уже является центральным компонентом в SharePoint Server 2007 и продолжает встраиваться во многие продукты как от Microsoft, так и от других производителей, так что наверняка очень скоро будет адаптирована в большинстве, если не во всех, серверных продуктах Microsoft.

Более подробную информацию о Windows Workflow Foundation можно найти на сайте http: wf. netf хе. com. Там доступно несколько полезных ресурсов, в том числе и замечательная подборка экранных снимков, иллюстрирующих различные сценарии работы в WF, а также сведения о специальных действиях, которые предлагаются для загрузки.

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



1 ... 391 392 393 [ 394 ] 395 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика