Exemple #1
0
 public int RetryFailedSteps(int taskId, GenericConnector connector, int actionId, DateTime date, int?noParallelProcess, int?retryAttempts)
 {
     if (retryAttempts.HasValue && retryAttempts.Value > 0)
     {
         int counter = 1;
         var steps   = DataWriter.GetFailedSteps(taskId, actionId, 1);
         while (counter <= retryAttempts && steps.Count > 0)
         {
             var task = connector.RetryTaskSteps(actionId, steps, date, noParallelProcess);
             task.Start();
             task.Wait();
             counter++;
             steps = DataWriter.GetFailedSteps(taskId, actionId, counter);
         }
     }
     return(-1);
 }
Exemple #2
0
        public bool?Sync()
        {
            try
            {
                bool includeBAndM = false;
                Boolean.TryParse(ConfigurationManager.AppSettings["includeBAndM"], out includeBAndM);
                var actions = DataWriter.GetPendingActions(includeBAndM);
                foreach (var action in actions)
                {
                    if (action.status == 0)
                    {
                        // Run transfer
                        var erpType   = ConfigurationManager.AppSettings["erp_type"];
                        var connector = new GenericConnector(erpType, Factory_ErpTaskCompletedEvent);

                        switch (action.action_type)
                        {
                        case "create_po_to":
                            DataWriter.UpdateActionStatus(action.id, 1, null, null);
                            var orders        = DataWriter.GetPoToToCreate(action.reference_id);
                            var connectorTask = connector.CreatePoTo(orders, action.id);
                            writeTasks.Add(connectorTask);
                            //connectorTask.ContinueWith((mark) => DataWriter.UpdateActionStatus(action.id, 2, mark)).Wait();
                            DataWriter.UpdateOrderStatus(action.reference_id);
                            break;

                        case "create_item":
                            if (includeBAndM)
                            {
                                DataWriter.UpdateActionStatus(action.id, 1, null, null);
                                connectorTask = connector.CreateItem(action.reference_id, action.id);
                                writeTasks.Add(connectorTask);
                                //connectorTask.ContinueWith((mark) => DataWriter.UpdateActionStatus(action.id, 2, mark)).Wait();
                                //var options = itemsToCreate.Select(x => x.option_id).Distinct();
                                //foreach (int option in options)
                                //{
                                //    UpdateCreatedProductStatus(action.reference_id, option, connectorTask.Result);
                                //}
                            }
                            else
                            {
                                DataWriter.UpdateActionStatus(action.id, 2, null, null);
                            }
                            break;

                        case "action_task":
                            DataWriter.UpdateActionStatus(action.id, 1, null, null);
                            var      task      = DataWriter.GetTask(action.reference_id);
                            DateTime startDate = DataWriter.GetDateById(action.date_reference_id);
                            connectorTask = connector.ExecuteTask(task, action.id, startDate, action.no_parallel_process);
                            readTasks.Add(connectorTask);
                            var retryTask = connectorTask.ContinueWith((y) => RetryFailedSteps(action.reference_id, connector, action.id, startDate, action.no_parallel_process, action.on_failure_retry_attempts));
                            retryTask.ContinueWith((x) => EmailSender.SendEmail(action.id, action.created_at));
                            break;

                        case "single_table":
                            DataWriter.UpdateActionStatus(action.id, 1, null, null);
                            DateTime date = DateTime.MaxValue;
                            if (action.date_reference_id.HasValue)
                            {
                                date = DataWriter.GetDateById(action.date_reference_id);
                            }
                            var step = DataWriter.GetStep(action.reference_id);
                            var a    = connector.GetSingleTable(step, action.id, date);
                            readTasks.Add(a);
                            //DataWriter.UpdateActionStatus(action.id, 2, CreateBaseTaskException(a));
                            break;

                        case "update_plc":
                            DataWriter.UpdateActionStatus(action.id, 1, null, null);
                            connectorTask = connector.UpdateProductLifecycleStatus(action.id, action.reference_id);
                            writeTasks.Add(connectorTask);
                            break;

                        default:
                            DataWriter.UpdateActionStatus(action.id, 3, null, new AxBaseException {
                                ApplicationException = new Exception("Unknown action type =" + action.action_type)
                            });
                            break;
                        }
                    }
                }
            }
            catch (Exception e)
            {
                DataWriter.LogError(e.Message, e.StackTrace, this, e.HResult);
            }
            return(true);
        }