WF Доступ к переменным экземпляра рабочего процесса из загрузки и выгрузки - PullRequest
0 голосов
/ 14 января 2009

В workflowRuntime_WorkflowUnloaded, Loaded и т. Д. Единственное, что я могу получить, что довольно бесполезно, это workflowinstanceId. Я хочу иметь доступ к некоторым DP, которые находятся в корневом действии, всякий раз, когда я выполняю GetWorkFlowDefintion () и приводим к корневому действию, все переданные мне свойства имеют нулевое значение

Ответы [ 2 ]

1 голос
/ 14 января 2009

Вы должны использовать TrackingServices, чтобы получить больше, чем просто основную информацию. Смотри http://msdn.microsoft.com/en-us/library/ms735887(VS.85).aspx

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

Вот как мы использовали его в одном случае:

SqlTrackingWorkflowInstance instance = null;
//wfServiceHost is an instance of WorkflowServiceHost
WorkflowRuntimeBehavior workflowRuntimeBehaviour = wfServiceHost.Description.Behaviors.Find<WorkflowRuntimeBehavior>();
WorkflowRuntime wfRuntime = workflowRuntimeBehaviour.WorkflowRuntime;

if (wfRuntime != null)
{
        SqlTrackingService trackingService = (SqlTrackingService)wfRuntime.GetService(typeof(SqlTrackingService));
        SqlTrackingQuery sqlTrackingQuery = new SqlTrackingQuery(trackingService.ConnectionString);

         sqlTrackingQuery.TryGetWorkflow(instanceId, out instance);
}
0 голосов
/ 31 июля 2009

ОК, мне удалось использовать вышеизложенное для извлечения бизнес-данных (т. Е. Идентификатора), которые находятся внутри рабочего процесса, но мне пришлось добавить

this.TrackData("name", myObject)

в мою начальную деятельность внутри рабочего процесса.

В тот момент я смог получить идентификатор из myObject (Job) по следующему коду. Yippee!

foreach (UserTrackingRecord userTrackingRecord in
    sqlTrackingWorkflowInstance.UserEvents)
{
    Console.WriteLine("Key : {0}  Data : {1}",
        userTrackingRecord.UserDataKey,
        userTrackingRecord.UserData.ToString());
    if (userTrackingRecord.UserDataKey == "Job")
    {
        OrderRequest request = userTrackingRecord.UserData as OrderRequest;
        if (request != null)
        {
            Console.WriteLine("\nJob ID: {0}", request.JobID);
        }
    }
}
...