WF Persistense и доступ к базе данных

Я очень новичок в WF и пытаюсь его изучить. Я хорошо знаю основы WF. Надеюсь, я объясню свою проблему.

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

Теперь я знаю, как выгрузить рабочий процесс, а затем возобновить его с помощью закладок.

Сейчас я делаю приложение ASP.NET. Что он делает -

  1. Получите Empname и Age.
  2. Запустите рабочий процесс и передайте данные.
  3. Действие будет принимать эти данные и сохранять их в базе данных (базе данных сотрудников), например, строка в базе данных похожа на

[

Id      EmpName   Age   Status   WorkflowInstance

1         blah    24    False     {Guid of WorkflowInstanceId}

]

  1. Затем следующее последовательное действие создаст закладку и выгрузит рабочий процесс из памяти.
  2. Я сделал шаги с 1 по 4, чтобы добавить 10 сотрудников со статусом - «Ложь».
  3. Я вижу 10 экземпляров рабочего процесса, сохраненных в WorkflowInstanceSchema, и все они выгружены.
  4. Теперь перед возобновлением каждого рабочего процесса я хочу, чтобы кто-то вошел в систему. Он увидит список всех экземпляров рабочего процесса в GridView с флажком для выбора нескольких записей в сетке.

  5. В сетке пользователь будет выбирать строки, утверждать и передавать статус «Y» для выбранного рабочего процесса, снова загружать рабочий процесс обратно в память, передавать ввод и возобновлять работу с закладки. Затем рабочий процесс завершается.

[Теперь мой вопрос заключается в том, что в сетке я делаю запрос к базе данных сотрудников, используя EF, и получаю данные о сотрудниках в базе данных.]

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

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

Как мне решить эту проблему.

Любое руководство по тому же самому действительно ценится. Тем временем я постоянно учусь осознавать реальную мощь WF и пытаюсь понять, как правильно.


person Dinesh    schedule 29.03.2012    source источник


Ответы (2)


Хранилище экземпляров рабочего процесса — это не то место, где вы хотите хранить свои транзакционные или запрашиваемые данные. Мне нравится думать об этом как о месте для хранения данных, поддерживающих процесс. Если вам нужен доступ к этим данным извне рабочего процесса для отображения в одном представлении (например, в вашей сетке), вам действительно следует хранить их вне хранилища экземпляров рабочего процесса. Вы не хотите возобновлять все свои рабочие процессы только для того, чтобы получить данные от каждого, чтобы вы могли отобразить их все в одном представлении. Однако, если данные в вашем рабочем процессе предназначены только для этого процесса, не видны снаружи рабочего процесса и находятся в недопустимом состоянии до тех пор, пока процесс не достигнет заданной точки, я бы сохранил их в данных рабочего процесса, пока они не будут готовы для транзакционной системы. .

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

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

person Peter Goodman    schedule 29.03.2012
comment
Я думаю, что могу с вами согласиться, но я где-то слышал, что Biztalk также похож на систему рабочего процесса, и она делает то же самое, не требуя какой-либо пользовательской базы данных, и нам нужно только запросить процесс biztalk, а не какую-либо базу данных, чтобы показать детали данных на Пользовательский интерфейс. Можете ли вы пролить свет на это??? - person Dinesh; 31.03.2012
comment
Я не эксперт в BizTalk, поэтому я не могу комментировать его пригодность здесь. Однако я могу сказать вам, что, в отличие от WF4, он не бесплатный. - person Peter Goodman; 02.04.2012
comment
:) я надеялся на что-то более хорошее, в любом случае большое спасибо вам, вы меня на правильном пути. - person Dinesh; 02.04.2012

Вероятно, вам следует хранить WorkflowID в другом месте, будь то хранилище отслеживания, пользовательская таблица или даже файл cookie на компьютере пользователя.

Вот пример, показывающий, как сохранить идентификаторы рабочих процессов с помощью плоского файла (в WF 3.5):

http://msdn.microsoft.com/en-us/library/aa353572(VS.90).aspx

person Patrick Fletcher    schedule 29.03.2012