/// <summary> /// 侦听任务执行完成时接收通知处理 /// </summary> /// <param name="execution"></param> public void Notify(IExecutionEntity execution) { UserTask task = execution.CurrentFlowElement as UserTask; if (task.ExtensionElements.TryGetValue(BpmnXMLConstants.ELEMENT_EXTENSIONS_PROPERTY, out IList <ExtensionElement> exts)) { if (bool.TryParse(exts.GetAttributeValue(BpmnXMLConstants.ACTIITI_RUNTIME_ASSIGNEE), out bool result) == false || result == false) { return; } var variable = execution.GetVariableInstance(BpmnXMLConstants.RUNTIME_ASSIGNEE_USER_VARIABLE_NAME); RuntimeAssigneeUser user = JToken.FromObject(variable.Value).ToObject <RuntimeAssigneeUser>(); if ((user?.Users?.Count()).GetValueOrDefault() == 0) { return; } string collection = task.LoopCharacteristics.GetCollectionVarName(); string elemVariable = task.LoopCharacteristics.ElementVariable; execution.RemoveVariableLocal(collection); execution.RemoveVariableLocal(elemVariable); } }
/// <summary> /// 侦听接收通知处理 /// </summary> /// <param name="execution"></param> public void Notify(IExecutionEntity execution) { UserTask task = execution.CurrentFlowElement as UserTask; if (task.ExtensionElements.TryGetValue(BpmnXMLConstants.ELEMENT_EXTENSIONS_PROPERTY, out IList <ExtensionElement> exts)) { if (bool.TryParse(exts.GetAttributeValue(BpmnXMLConstants.ACTIITI_RUNTIME_ASSIGNEE), out bool result) == false || result == false) { return; } var variable = execution.GetVariableInstance(BpmnXMLConstants.RUNTIME_ASSIGNEE_USER_VARIABLE_NAME); RuntimeAssigneeUser user = JToken.FromObject(variable.Value).ToObject <RuntimeAssigneeUser>(); if ((user?.Users?.Count()).GetValueOrDefault() == 0) { throw new NotFoundAssigneeException(); } var varName = exts.GetAttributeValue(BpmnXMLConstants.ACTIITI_RUNTIME_ASSIGNEE_VARIABLE); if (string.IsNullOrWhiteSpace(varName)) { varName = user.Field; } execution.SetLoopVariable(varName, user.Users.Distinct().ToArray()); } }
/// <summary> /// 构造函数 /// </summary> /// <param name="taskId">任务id</param> /// <param name="outputVariables">提交的数据</param> /// <param name="runtimeAssignUser">如果下一步需要从当前任务中指定人员处理,则使用这个参数</param> ////[JsonConstructor] public CompleteTaskCmd([JsonProperty("TaskId")] string taskId, [JsonProperty("OutputVariables")] WorkflowVariable outputVariables, [JsonProperty("RuntimeAssignUsers")] RuntimeAssigneeUser runtimeAssignUser) { this.taskId = taskId; this.outputVariables = outputVariables; this.RuntimeAssigneeUser = runtimeAssignUser; }