0

workflowRuntime_WorkflowUnloaded や Loaded などで取得できるのは、かなり役に立たない唯一のものは、workflowinstanceId です。GetWorkFlowDefintion() を実行してルート アクティビティにキャストするたびに、ルート アクティビティにあるいくつかの DP にアクセスできるようにしたいのですが、渡したすべてのプロパティはすべて null です。

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

OK、上記を使用して、ワークフロー内に存在するビジネスデータ (つまり 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 に答える