WF Persistense и доступ к базе данных - PullRequest
0 голосов
/ 29 марта 2012

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

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

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

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

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

[

Id      EmpName   Age   Status   WorkflowInstance

1         blah    24    False     {Guid of WorkflowInstanceId}

]

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

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

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 30 марта 2012

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

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

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

0 голосов
/ 29 марта 2012

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

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

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

...