/// <summary> /// Handle task completion notification. /// Override this method to implement external /// notification about task completion. /// </summary> /// <param name="tci"></param> protected virtual void OnTaskCompleted(TaskCompletionInfo tci) { }
/// <summary> /// Pass task completion information to active transition. /// As a result, task internal data is updated and /// OnTaskCompleted is invoked. Then the transition is marked /// as completed and TransitionCompleted callback is invoked. /// </summary> /// <param name="tci"></param> public void NotifyTaskCompleted(TaskCompletionInfo tci) { ActivationRequired(true); if (Status != TransitionStatus.STARTED && Status != TransitionStatus.COMPLETED) throw new ApplicationException("Invalid transition status"); if (tci.CorrelationId != this.CorrelationId) throw new ApplicationException("Invalid correlation id"); if (tci.ResultXml != null) { DataObject dob = DataObject.ParseXml(tci.ResultXml); this.UpdateTaskData(dob); } OnTaskCompleted(tci); this.Status = TransitionStatus.COMPLETED; _containerCallback.TransitionCompleted(CorrelationId); }
public void ProcessTaskCompleted(TaskCompletionInfo info) { log.Info("Task completed in process {0}. Id: {1}", info.ProcessInstance, info.CorrelationId); TaskCompletedNotification tcn = new TaskCompletedNotification(); tcn.CorrelationId = info.CorrelationId; tcn.ProcessInstanceId = info.ProcessInstance; XmlReader xr = XmlReader.Create(new StringReader(info.ResultXml)); xr.MoveToContent(); tcn.TaskData = DataObject.ParseXmlElement(xr); this.MessageBus.Notify("NGEnvironment", "NGinn.ProcessTaskCompleted", tcn, false); }
/// <summary> /// Report that a process task has completed /// </summary> /// <param name="tci"></param> public void NotifyTaskCompleted(TaskCompletionInfo tci) { throw new NotImplementedException(); if (tci.ProcessInstance != this.InstanceId) throw new Exception("Invalid instance id"); TaskShell at = GetActiveTransition(tci.CorrelationId); if (at == null) { MultiTaskShell mti = FindMultiInstanceTransitionWithSubtask(tci.CorrelationId); if (mti != null) at = mti.GetChildTransition(tci.CorrelationId); } if (at == null) throw new Exception("Invalid correlation id"); if (at.Status != TransitionStatus.ENABLED && at.Status != TransitionStatus.STARTED) throw new Exception("Invalid transition status"); //at will callback us when the task is completed at.NotifyTaskCompleted(tci); }
static void TestTaskCompleted(string processId, string taskCorrelationId) { INGEnvironmentProcessCommunication env = (INGEnvironmentProcessCommunication)_ctx.GetObject("NGEnvironment"); TaskCompletionInfo tci = new TaskCompletionInfo(); tci.ProcessInstance = processId; tci.CorrelationId = taskCorrelationId; tci.ResultXml = "<results><decision>Accept</decision><managerComment>I don't know why</managerComment><managerId>132</managerId></results>"; tci.CompletedBy = "me"; env.ProcessTaskCompleted(tci); }