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(); } } } }
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)); }
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); } }
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()); }
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); }
/// <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)); }