Рабочий поток можно считать программой, а одним из аспектов любого языка программирования является наличие возможности создавать переменные и передавать аргументы в и из программы. Разумеется, в Workflow 4 поддерживаются обе конструкции, и в настоящем разделе показано, как определять аргументы и переменные. Для начала давайте предположим, что требуется создать рабочий поток для работы со страховыми полисами и, следовательно, что передаваемым ему аргументом должен быть номер страхового полиса.
Для определения аргумента, передаваемого рабочему потоку, необходимо перейти в окно визуального конструктора и щелкнуть на кнопке ArgumentsАргументы) в его левой нижней части. Это приводит к отображению списка всех определенных для рабочего потока аргументов, в котором также можно создавать и собственные аргументы. Для определения собственного аргумента необходимо специфицировать его имя Name), направление Direction), которым может быть In, Out и InOut, и тип данных Argument type). При желании для аргумента можно указать значение по умолчанию, которое должно использоваться, если никакого значения не предоставляется.Направление аргумента служит для определения того, каким должен быть аргумент: входным, выходным либо тем и другим вместе InOut). У метода Invoke имеется несколько переопределенных версий, которые могут использоваться для передачи в рабочий поток различных аргументов. Передаются они в виде словаря пар “имязначение”, в которых имя должно в точности соответствовать имени аргумента, с учетом регистра.
В коде производится вызов рабочего потока с передачей именованному параметру значения PolicyId из словаря. Если в словаре предоставляется имя, для которого аргумента не существует, генерируется исключение ArgumentException. Если же значение для аргумента In не предоставлено, исключение генерироваться не будет. Такое поведение нас не устраивает, поскольку нужно, чтобы исключение выдавалось для любых аргументов In, которые не были определены, и чтобы оно не генерировалось в случае передачи слишком большого количества аргументов.После завершения рабочего потока может понадобиться извлечь какието выходные аргументы. Для решения этой задачи метод WorkflowInvoker.Invoke имеет специальную переопределенную версию, которая возвращает словарь. Этот словарь будет содержать только аргументы Out или InOut.
Внутри рабочего потока можно определять переменные. Делать подобное в рабочих потоках XAML из Workflow 3.x было нелегко, однако в Workflow 4 сложности были устранены и теперь параметры можно определять в XAML без особых проблем.Как и в любом языке программирования, с переменными в рабочих потоках связано понятие области действия. Переменные могут определяться как “глобальные” за счет их определения в корневом действии рабочего потока. Такие переменные доступны для всех действий внутри рабочего потока, и время их жизни зависит от времени жизни самого рабочего потока.Переменные также могут определяться и внутри отдельных действий. В этом случае они доступны только для действий, в которых определены, а также для их дочерних действий. По завершении действия его переменные покидают область видимости и перестают быть доступными. Кстати, если вам требуется создание программного обеспечения для заводов недорого, советую пройти по вышеуказанной ссылке.