在workflowRuntime_WorkflowUnloaded和Loaded等中。我唯一能得到的东西就是workflowinstanceId。我希望能够访问根活动上的一些DP,每当我执行GetWorkFlowDefintion()并转换为root活动时,我传入的所有属性都为null ..
答案 0 :(得分: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);
}
答案 1 :(得分:0)
好的,我已设法使用上述内容来检索工作流程中的业务数据(即ID),但我不得不添加
this.TrackData("name", myObject)
进入我工作流程内的初始活动。
此时,我可以通过以下代码从myObject
(Job
)获取ID。 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);
}
}
}