/// <summary>
        /// 添加实例活动的秘书环节
        /// </summary>
        /// <param name="operation"></param>
        /// <param name="generatedActivities"></param>
        private static AddSecretaryResult AddInstanceSecretaryActivities(WfSecretaryOperation operation, List <IWfActivity> generatedActivities)
        {
            AddSecretaryResult result = new AddSecretaryResult();

            //保留住原来领导活动的出线
            List <IWfTransitionDescriptor> templateToTransitions = new List <IWfTransitionDescriptor>(operation.ActivityDescriptor.ToTransitions);

            IWfActivityDescriptor prevSecretaryActDesp = CreateSecretaryActivityDescriptor(operation.ActivityDescriptor, operation.Secretaries);

            SetActivityPropertiesBooleanValue(prevSecretaryActDesp, false, WfSecretaryDecorator._PrevActForbidProperties);
            SetActivityPropertiesBooleanValue(prevSecretaryActDesp, true, WfSecretaryDecorator._PrevActAllowProperties);

            //在领导活动之前插入秘书活动
            result.PrevActivity = operation.ActivityDescriptor.Instance.InsertBefore(prevSecretaryActDesp);

            generatedActivities.Add(result.PrevActivity);

            DecroateTemplateActivity(operation.ActivityDescriptor, operation.Secretaries);

            IWfActivityDescriptor succeedSecretaryActDesp = CreateSecretaryActivityDescriptor(operation.ActivityDescriptor, operation.Secretaries);

            SetActivityPropertiesBooleanValue(succeedSecretaryActDesp, false, WfSecretaryDecorator._SucceedActForbidProperties);

            result.SucceedActivity = operation.ActivityDescriptor.Instance.Append(succeedSecretaryActDesp, true);

            generatedActivities.Add(result.SucceedActivity);

            AdjustTemplateActivityToTransitions(operation.ActivityDescriptor, succeedSecretaryActDesp, templateToTransitions);

            return(result);
        }
        /// <summary>
        /// 添加主线活动的秘书环节
        /// </summary>
        /// <param name="operation"></param>
        /// <param name="msOperationActDesp"></param>
        private static void AddMainStreamSecretaryActivities(WfSecretaryOperation operation, IWfActivityDescriptor msOperationActDesp, AddSecretaryResult instanceResult)
        {
            AddSecretaryResult result = new AddSecretaryResult();

            //保留住原来领导活动的出线
            List <IWfTransitionDescriptor> templateToTransitions = new List <IWfTransitionDescriptor>(msOperationActDesp.ToTransitions);

            IWfActivityDescriptor prevSecretaryActDesp = CreateSecretaryActivityDescriptor(msOperationActDesp, operation.Secretaries);

            SetActivityPropertiesBooleanValue(prevSecretaryActDesp, false, WfSecretaryDecorator._PrevActForbidProperties);
            SetActivityPropertiesBooleanValue(prevSecretaryActDesp, true, WfSecretaryDecorator._PrevActAllowProperties);
            msOperationActDesp.InsertBefore(prevSecretaryActDesp);

            DecroateTemplateActivity(msOperationActDesp, operation.Secretaries);

            IWfActivityDescriptor succeedSecretaryActDesp = CreateSecretaryActivityDescriptor(msOperationActDesp, operation.Secretaries);

            SetActivityPropertiesBooleanValue(succeedSecretaryActDesp, false, WfSecretaryDecorator._SucceedActForbidProperties);
            msOperationActDesp.Append(succeedSecretaryActDesp, true);

            AdjustTemplateActivityToTransitions(msOperationActDesp, succeedSecretaryActDesp, templateToTransitions);

            ((WfActivityBase)instanceResult.PrevActivity).MainStreamActivityKey    = prevSecretaryActDesp.Key;
            ((WfActivityBase)instanceResult.SucceedActivity).MainStreamActivityKey = succeedSecretaryActDesp.Key;
        }
        private static void AddSecretaryActivities(WfSecretaryOperation operation, List <IWfActivity> generatedActivities)
        {
            AddSecretaryResult instanceResult = AddInstanceSecretaryActivities(operation, generatedActivities);

            if (operation.ActivityDescriptor.Instance.MainStreamActivityKey.IsNotEmpty())
            {
                AddMainStreamSecretaryActivities(operation, operation.ActivityDescriptor.Instance.GetMainStreamActivityDescriptor(), instanceResult);
            }
        }