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);
     }
 }
Example #7
0
 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));
        }