private static void InvokeTransfers(IWorkItemBase item, IWorkSheetBase sheet) { TransferEventArgs args = new TransferEventArgs(); //todo: check changes TransferEventPublisher.Invoke(args); }
internal static WorkItem MapResponse(IWorkItemBase message, string responseBody) { var definition = new { Id = "", Title = "", Description = "", Value = "" }; var deserializedResponse = JsonConvert.DeserializeAnonymousType(responseBody, definition); try { return(new WorkItem() { Id = Guid.NewGuid(), EAId = message.Guid, ProjectId = message.Project.Id, WorkItemId = Convert.ToInt32(deserializedResponse.Id), WorkItemType = (short)message.WorkItemType, Name = deserializedResponse.Title, Description = deserializedResponse.Description, Value = null }); } catch (Exception e) { MessageBox.Show( "W aplikacji wystąpił błąd!\n" + e, "Błąd!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); throw; } }
private static IWorkItemBase Next(this IWorkItemBase context, IWorkSheetBase sheet) { var workNode = context.CurrentNode; var flow = workNode.Flow?.FirstOrDefault(p => p.From.Value == workNode.CurrentState.Value); var nextNode = flow?.To; if (nextNode != null && nextNode.Key != "end") { //节点流转 nextNode = sheet.WorkFlow.Nodes.First(node => node.Id == nextNode.Id); context.CurrentNode = nextNode; //修改下一个节点的初始化状态 context.CurrentNode.CurrentState = nextNode.BeginStatus; context.CurrentUser = DataProvider.GetCurrentUser(sheet, nextNode.Handler); } if (nextNode != null && nextNode.Key == "end") { context.CurrentNode = new WorkFlowNode { Label = "工作流完成", Key = "end", }; } return(context); }
public INodeHandler CreateInstance(IWorkItemBase item, IWorkSheetBase sheet) { var result = new T(); result.WorkItem = item; result.WorkSheet = sheet; return(result); }
internal async Task SendMessage(IWorkItemBase message) { using (var client = GetConnection(message.WorkItemType)) { var response = await client.PostAsync(message.ApiAddress, message.Content); if (response.IsSuccessStatusCode) { StoreResponse(message, response.Content.ReadAsStringAsync().Result); } else { MessageBox.Show( "Wystąpił bład podczas wysyłki danych do API DevOps!\n" + response.StatusCode + "\n" + response.Content.ReadAsStringAsync().Result, "Błąd!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } }
public static bool CheckRequire(IWorkSheetBase sheet, IWorkItemBase item) { try { var require = WorkFlowEngine.Container.RequireDetail.Find(p => p.Key == item.CurrentNode.Key); if (require.IsNotNull()) { var result = WorkFlowEngine.DataProvider.CheckRequire(sheet, item, require); return(result); } else { return(true); } } catch (Exception ex) { WorkFlowEngine.DataProvider.LogError($"CheckRequire异常", ex); return(true); } }
public static object Excete(WorkFlowNodeMethod nodeMethod, IWorkSheetBase sheet, IWorkItemBase item, params object[] parameters) { try { var handler = handlers.First(p => p.Key == nodeMethod.Key).Value; handler = handler.CreateInstance(item, sheet); var methods = handler.GetType().GetMethods(); foreach (var method in methods) { if (method.IsPublic && method.Name == nodeMethod.MethodName && method.GetParameters().Length == parameters.Length) { var result = method.Invoke(handler, parameters); return(result); } } } catch (Exception ex) { var message = $"执行工作流节点{nodeMethod.Key}异常,{sheet.Id}/{item.Id}/{nodeMethod.MethodLabel}/{nodeMethod.State}"; WorkFlowEngine.DataProvider.LogError(message, ex); return(new { Result = false, Message = message, Error = ex.Message }); } return(null); }
public static object Excete(this WorkFlowNodeMethod method, IWorkSheetBase sheet, IWorkItemBase item, out string message) { message = default(String); if (item.CurrentNode.Key != method.Key) { message = "子工单当前状态不适用此处理方法"; return(null); } try { return(NodeHandlerContainer.Excete(method, sheet, item, method.Parameters.Select(p => p.Value).ToArray())); } catch (System.Exception ex) { message = ex.Message; throw ex; } }
public static TItem To <TItem>(this IWorkItemBase item) where TItem : IWorkItemBase { var result = (TItem)item; return(result); }
private void StoreResponse(IWorkItemBase message, string responseBody) { var db = new DatabaseOperations(); db.Insert(DataMapper.MapResponse(message, responseBody)); }