Пример #1
0
        private void Run()
        {
            PendingActServiceConfigurationElement pendingActServiceParam = PendingActServiceSettings.GetConfig().PendingActServices[this.Params.Name];

            pendingActServiceParam.NullCheck(string.Format("pendingActServiceConfig配置节错误,没有找到线程{0}对应的节点.", this.Params.Name));

            WfPendingActivityInfoCollection pendingActs = LoadPendingActs(pendingActServiceParam.ApplicationName, pendingActServiceParam.ProgramName);

            if (pendingActs.Count > 0)
            {
                Thread.CurrentPrincipal = new DeluxePrincipal(new DeluxeIdentity(pendingActServiceParam.Operator));

                //WfActivity中CanMoveTo没有判断StartTime。我希望在workflowSettings加开关,是否使用它。
                foreach (var pendingAct in pendingActs)
                {
                    try
                    {
                        WfRuntime.ProcessPendingActivity(pendingAct);
                    }
                    catch (System.Exception ex)
                    {
                        this.Params.Log.Write(ex);
                    }
                    finally
                    {
                        WfRuntime.ClearCache();
                    }
                }
            }
        }
Пример #2
0
        public void ActivityConditionTest()
        {
            TestContext.Properties["Amount"] = 2500;    //不满足条件
            WfRuntime.ProcessContext.EvaluateActivityCondition += new Expression.CalculateUserFunction(ProcessContext_EvaluateTransition);

            IWfProcess process = WfProcessTestCommon.StartupSimpleProcessDescriptorWithActivityCondition();

            Assert.AreEqual(WfActivityStatus.Running, process.InitialActivity.Status);

            IWfActivityDescriptor nextActivityDesp = process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity;
            WfTransferParams      transferParams   = ProcessTestHelper.GetInstanceOfWfTransferParams(nextActivityDesp, OguObject.requestor);

            process.MoveTo(transferParams);

            Assert.AreEqual(WfActivityStatus.Completed, process.InitialActivity.Status);

            Assert.AreEqual(WfActivityStatus.Pending, process.CurrentActivity.Status);

            IWfActivity activity = WfRuntime.ProcessContext.OriginalActivity;

            WfRuntime.PersistWorkflows();

            TestContext.Properties["Amount"] = 7500;

            WfPendingActivityInfoCollection pendingActivities = WfPendingActivityInfoAdapter.Instance.Load(builder => builder.AppendItem("ACTIVITY_ID", process.CurrentActivity.ID));

            pendingActivities.ForEach(pai => WfRuntime.ProcessPendingActivity(pai));
        }
Пример #3
0
        private void button1_Click(object sender, EventArgs e)
        {
            var pendingActList = WfPendingActivityInfoAdapter.Instance.Load(this.txtAppName.Text.Trim(), this.txtProgramName.Text.Trim());

            foreach (var item in pendingActList)
            {
                WfRuntime.ProcessPendingActivity(item);
            }
        }
Пример #4
0
        private void btnSingleActivity_Click(object sender, EventArgs e)
        {
            var pendingActList = WfPendingActivityInfoAdapter.Instance.Load(p => p.AppendItem("ACTIVITY_ID", this.txtActID.Text.Trim()));

            if (pendingActList.Count == 0)
            {
                MessageBox.Show("没找到相应的数据");
                return;
            }

            WfRuntime.ProcessPendingActivity(pendingActList.First());
        }
Пример #5
0
        public void ActivityConditionTest()
        {
            WfPendingActivityInfoAdapter.Instance.ClearAll();

            TestContext.Properties["Amount"] = 1000;

            IWfProcessDescriptor processDesp = ProcessHelper.CreateSimpleProcessDescriptor();

            processDesp.Activities["NormalActivity"].Condition.Expression = "Amount > 5000";

            WfRuntime.ProcessContext.EvaluateActivityCondition += new Expression.CalculateUserFunction(ProcessContext_EvaluateTransition);

            IWfProcess process = processDesp.StartupProcess();

            IWfActivity normalActivity = process.MoveToNextDefaultActivity();

            Console.WriteLine(normalActivity.Status);

            Assert.AreEqual(WfActivityStatus.Pending, normalActivity.Status);

            WfRuntime.PersistWorkflows();

            string activityID = process.CurrentActivity.ID;

            WfPendingActivityInfoCollection pendingActivities = WfPendingActivityInfoAdapter.Instance.Load(builder => builder.AppendItem("ACTIVITY_ID", process.CurrentActivity.ID));

            Assert.IsTrue(pendingActivities.Count > 0);

            TestContext.Properties["Amount"] = 8000;

            pendingActivities.ForEach(pa => WfRuntime.ProcessPendingActivity(pa));

            process = WfRuntime.GetProcessByProcessID(process.ID);

            Assert.AreEqual(WfActivityStatus.Completed, process.Activities[activityID].Status);
        }
Пример #6
0
        /// <summary>
        /// 设置被挂起节点的状态为Running
        /// </summary>
        /// <param name="activityID"></param>
        public static void ProcessPendingActivity(string activityID)
        {
            WfPendingActivityInfoCollection pendingActivities = WfPendingActivityInfoAdapter.Instance.Load(builder => builder.AppendItem("ACTIVITY_ID", activityID));

            pendingActivities.ForEach(pai => WfRuntime.ProcessPendingActivity(pai));
        }