0

在 workflowRuntime_WorkflowUnloaded 和 Loaded 等中。我能得到的唯一没用的是 workflowinstanceId。我希望能够访问根活动上的一些 DP,每当我执行 GetWorkFlowDefintion() 并转换为根活动时,我传入的所有属性都是空的。

4

2 回答 2

1

您必须使用 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);
}
于 2009-01-14T11:45:29.613 回答
0

好的,我已经设法使用上面的方法来检索工作流中的业务数据(即 ID),但我必须添加一个

this.TrackData("name", myObject)

进入我在工作流程中的初始活动。

那时,我可以通过以下代码从myObject( ) 中获取 ID。Job伊皮!

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);
        }
    }
}
于 2009-07-30T22:46:43.933 回答