public static ActionTaskResult Error(ActionTaskResultMessage message, int[] failedIds = null)
        {
            var result = new ActionTaskResult {
                IsSuccess = false, FailedIds = failedIds
            };

            result.Messages.Add(message);
            return(result);
        }
        public static ActionTaskResult Success(ActionTaskResultMessage message)
        {
            var result = new ActionTaskResult {
                IsSuccess = true
            };

            result.Messages.Add(message);
            return(result);
        }
        public static ActionTaskResult PartialSuccess(ActionTaskResultMessage message, int[] failedIds)
        {
            var result = new ActionTaskResult {
                IsSuccess = true, FailedIds = failedIds
            };

            result.Messages.Add(message);
            return(result);
        }
        public static ActionTaskResult FromRulesException(RulesException ex, int id)
        {
            var result = new ActionTaskResult()
            {
                IsSuccess = true
            };

            if (!ex.IsEmpty)
            {
                result.IsSuccess = false;
                var messages = ex.Errors
                               .Select(s => ActionTaskResultMessage.FromString(s.Message)).ToArray();

                foreach (var message in messages)
                {
                    message.Extra = id.ToString();
                    result.Messages.Add(message);
                }
            }
            return(result);
        }
        public ActionTaskResult GetMergedResult()
        {
            var dict   = new Dictionary <string, ActionTaskResultMessage>();
            var result = new ActionTaskResult()
            {
                IsSuccess = IsSuccess, FailedIds = FailedIds.ToArray()
            };

            foreach (var message in Messages)
            {
                if (message.ResourceName != null || message.Message != null)
                {
                    var key = message.ResourceName ?? message.Message;
                    if (message.Parameters != null && message.Parameters.Any())
                    {
                        key += "=" + string.Join(",", message.Parameters);
                    }

                    if (!string.IsNullOrEmpty(message.Extra) && dict.TryGetValue(key, out var value))
                    {
                        value.Extra += ", " + message.Extra;
                    }
                    else
                    {
                        dict.Add(key, message);
                    }
                }
                else
                {
                    result.Messages.Add(message);
                }
            }

            result.Messages.AddRange(dict.Values);

            return(result);
        }