引擎在添加Tracking ,跟踪器的创建

 version = GetTrackingProfileVersion(new Version("3.0.0.0"));
                CreateAndInsertTrackingProfile();
                using (WorkflowRuntime runtime = new WorkflowRuntime())

                  .............................

        private static void CreateAndInsertTrackingProfile()
        {
            TrackingProfile profile = new TrackingProfile();
            ActivityTrackPoint activityTrack = new ActivityTrackPoint();
            ActivityTrackingLocation activityLocation = new ActivityTrackingLocation(typeof(Activity));
            activityLocation.MatchDerivedTypes = true;
            IEnumerable<ActivityExecutionStatus> statuses = Enum.GetValues(typeof(ActivityExecutionStatus)) as IEnumerable<ActivityExecutionStatus>;
            foreach (ActivityExecutionStatus status in statuses)
            {
                activityLocation.ExecutionStatusEvents.Add(status);
            }

            activityTrack.MatchingLocations.Add(activityLocation);
            profile.ActivityTrackPoints.Add(activityTrack);
            profile.Version = version;

            WorkflowTrackPoint workflowTrack = new WorkflowTrackPoint();
            WorkflowTrackingLocation workflowLocation = new WorkflowTrackingLocation();
            IEnumerable<TrackingWorkflowEvent> eventStatuses = Enum.GetValues(typeof(TrackingWorkflowEvent)) as IEnumerable<TrackingWorkflowEvent>;
            foreach (TrackingWorkflowEvent status in eventStatuses)
            {
                workflowLocation.Events.Add(status);
            }
           
            workflowTrack.MatchingLocation = workflowLocation;
            profile.WorkflowTrackPoints.Add(workflowTrack);

            TrackingProfileSerializer serializer = new TrackingProfileSerializer();
            StringWriter writer = new StringWriter(new StringBuilder(),CultureInfo.InvariantCulture);
            serializer.Serialize(writer, profile);
            String trackingprofile = writer.ToString();
            InsertTrackingProfile(trackingprofile);
        }

        private static void InsertTrackingProfile(string profile)
        {
            using (SqlCommand command = new SqlCommand())
            {

                command.CommandType = CommandType.StoredProcedure;
                command.CommandText = "dbo.UpdateTrackingProfile";
                command.Connection = new SqlConnection(connectionString);
                try
                {
                    SqlParameter typeFullName = new SqlParameter();
                    typeFullName.ParameterName = "@TypeFullName";
                    typeFullName.SqlDbType = SqlDbType.NVarChar;
                    typeFullName.SqlValue = typeof(SimpleWorkflow).ToString();
                    command.Parameters.Add(typeFullName);

                    SqlParameter assemblyFullName = new SqlParameter();
                    assemblyFullName.ParameterName = "@AssemblyFullName";
                    assemblyFullName.SqlDbType = SqlDbType.NVarChar;
                    assemblyFullName.SqlValue = typeof(SimpleWorkflow).Assembly.FullName;
                    command.Parameters.Add(assemblyFullName);

                    SqlParameter versionId = new SqlParameter();
                    versionId.ParameterName = "@Version";
                    versionId.SqlDbType = SqlDbType.VarChar;
                    versionId.SqlValue = version.ToString();
                    command.Parameters.Add(versionId);

                    SqlParameter trackingProfile = new SqlParameter();
                    trackingProfile.ParameterName = "@TrackingProfileXml";
                    trackingProfile.SqlDbType = SqlDbType.NVarChar;
                    trackingProfile.SqlValue = profile;
                    command.Parameters.Add(trackingProfile);

                    command.Connection.Open();
                    command.ExecuteNonQuery();
                }
                catch (SqlException e)
                {
                    Console.WriteLine(e.Message);
                    Console.WriteLine("The tracking profile was not inserted. If you wish to add a new tracking profile, please increase the tracking profile's version number.");
                }
            }
        }

        private static Version GetTrackingProfileVersion(Version version)
        {
            TrackingProfile profile = null;
            SqlDataReader reader = null;
            using (SqlCommand command = new SqlCommand())
            {
                command.CommandType = CommandType.StoredProcedure;
                command.CommandText = "dbo.GetTrackingProfile";
                command.Connection = new SqlConnection(connectionString);
                SqlParameter typeFullName = new SqlParameter();
                typeFullName.ParameterName = "@TypeFullName";
                typeFullName.SqlDbType = SqlDbType.NVarChar;
                typeFullName.SqlValue = typeof(SimpleWorkflow).FullName;
                command.Parameters.Add(typeFullName);

                SqlParameter assemblyFullName = new SqlParameter();
                assemblyFullName.ParameterName = "@AssemblyFullName";
                assemblyFullName.SqlDbType = SqlDbType.NVarChar;
                assemblyFullName.SqlValue = typeof(SimpleWorkflow).Assembly.FullName;
                command.Parameters.Add(assemblyFullName);

                SqlParameter versionId = new SqlParameter();
                versionId.ParameterName = "@Version";
                versionId.SqlDbType = SqlDbType.VarChar;
                command.Parameters.Add(versionId);

                SqlParameter createDefault = new SqlParameter();
                createDefault.ParameterName = "@CreateDefault";
                createDefault.SqlDbType = SqlDbType.Bit;
                createDefault.SqlValue = 0;
                command.Parameters.Add(createDefault);

                try
                {
                    command.Connection.Open();
                    reader = command.ExecuteReader();
                    if (reader.Read())
                    {
                        string profileXml = reader[0] as string;
                        if (null != profileXml)
                        {
                            TrackingProfileSerializer serializer = new TrackingProfileSerializer();
                            StringReader stringReader = null;
                            try
                            {
                                stringReader = new StringReader(profileXml);
                                profile = serializer.Deserialize(stringReader);
                            }
                            finally
                            {
                                if (stringReader != null)
                                    stringReader.Close();
                            }
                        }
                    }
                }
                finally
                {
                    if (reader != null && !reader.IsClosed)
                        reader.Close();
                }
            }

            if (profile != null)
                return new Version(profile.Version.Major, profile.Version.MajorRevision, profile.Version.Minor, profile.Version.MinorRevision + 1);
            else
                return new Version(version.Major, version.MajorRevision, version.Minor, version.MinorRevision + 1);
        }

posted @ 2007-12-04 17:15  光阴的故事-SKY  阅读(131)  评论(0编辑  收藏  举报