コード例 #1
0
        public static AxBaseException ExecTask(ErpTaskStep taskStep)
        {
            Process         pr     = new Process();
            AxBaseException result = null;

            try
            {
                pr.StartInfo.FileName               = taskStep.ExternalProcess;
                pr.StartInfo.Arguments              = taskStep.ExternalProcessArgument ?? "";
                pr.StartInfo.UseShellExecute        = false;
                pr.StartInfo.RedirectStandardError  = true;
                pr.StartInfo.RedirectStandardOutput = true;
                //pr.StartInfo.Verb = "runas";
                bool success = pr.Start();
                pr.WaitForExit();
                string standardError = pr.StandardError.ReadToEnd();
                if (!string.IsNullOrEmpty(standardError))
                {
                    result = new AxBaseException {
                        ApplicationException = new ApplicationException(standardError)
                    };
                }
                return(result);
            }
            catch (Exception e)
            {
                return(new AxBaseException {
                    ApplicationException = e
                });
            }
        }
コード例 #2
0
        public int GetSingleTable(ErpTaskStep step, int actionId, DateTime date)
        {
            AxBaseException result = null;

            try
            {
                if (date == DateTime.MaxValue)
                {
                    DataWriter.TruncateSingleTable(step.DbTable);
                }
                result = TaskExecute.ExecuteTask(actionId, step, date);
            }
            catch (Exception e)
            {
                result = new AxBaseException {
                    ApplicationException = e
                };
            }
            finally
            {
                OnTaskCompleted(null, new ErpTaskCompletedArgs {
                    Exception = result, ActionId = actionId, Status = result == null ? 2 : 3
                });
            }
            return(actionId);
        }
コード例 #3
0
        //public static async Task<T> CreateEntity<T>(string oDataEndpoint, string filters, T postDataObject, List<string> errorMessage)
        //{
        //    string baseUrl = System.Configuration.ConfigurationManager.AppSettings["base_url"];
        //    string endpoint = baseUrl + "/data/" + oDataEndpoint + filters ?? "";

        //    var request = HttpWebRequest.Create(endpoint);
        //    request.Headers["Authorization"] = Authenticator.GetAdalToken();
        //    //request.Headers["Content-Type"] = "application/json";

        //    request.Method = "POST";
        //    var postData = JsonConvert.SerializeObject(postDataObject, new EnumConverter());
        //    request.ContentLength = postData != null ? postData.Length : 0;
        //    request.ContentType = "application/json";

        //    using (var requestStream = request.GetRequestStream())
        //    {
        //        using (var writer = new StreamWriter(requestStream))
        //        {
        //            writer.Write(postData);
        //            writer.Flush();
        //        }
        //    }

        //    try
        //    {
        //        using (var response = (HttpWebResponse)request.GetResponse())
        //        {
        //            using (var responseStream = response.GetResponseStream())
        //            {
        //                using (var streamReader = new StreamReader(responseStream))
        //                {
        //                    var responseString = streamReader.ReadToEnd();
        //                    //string sanitized = SanitizeJsonString(responseString);

        //                    return JsonConvert.DeserializeObject<T>(responseString);
        //                    //return responseString;
        //                }
        //            }
        //        }
        //    }
        //    catch (WebException e)
        //    {
        //        using (var rStream = e.Response.GetResponseStream())
        //        {
        //            using (var reader = new StreamReader(rStream))
        //            {
        //                var r = reader.ReadToEnd();

        //                // TODO: Need to log error;
        //                errorMessage.Add(r);
        //                return default(T);
        //            }
        //        }
        //    }
        //}

        //public static async Task<AxBaseException> CallOdataEndpointTask<T>
        //public static async Task<AxBaseException> CallOdataEndpointArray<T>(string oDataEndpoint, string filters, string dbTable, int actionId, ServiceData authData)
        //{
        //    DateTime startTime = DateTime.Now;
        //    try
        //    {
        //        var baseUrl = authData.BaseUrl;
        //        var endpoint = baseUrl + authData.OdataUrlPostFix + oDataEndpoint + ApplyCrossCompanyFilter(filters) ?? "";

        //        var returnODataObject = await CallOdataEndpoint<T, Y>(endpoint, authData);
        //        DataWriter.WriteToTable<Y>(returnODataObject.value.GetDataReader<Y>(), dbTable);

        //        if (returnODataObject.Exception != null)
        //        {
        //            DataWriter.LogErpActionStep(actionId, dbTable, startTime, false, returnODataObject.Exception.ErrorMessage, returnODataObject.Exception.StackTrace);
        //        }
        //        else
        //        {
        //            DataWriter.LogErpActionStep(actionId, dbTable, startTime, true, null, null);
        //        }
        //        return returnODataObject.Exception;
        //    }
        //    catch (Exception e)
        //    {
        //        DataWriter.LogErpActionStep(actionId, dbTable, startTime, false, e.Message, e.StackTrace);
        //        return new AxBaseException { ApplicationException = e };
        //    }

        //}

        public static async Task <AxBaseException> CallOdataEndpoint <T, Y>(ErpTaskStep step, int actionId, ServiceData authData) where T : GenericJsonOdata <Y>
        {
            DateTime startTime = DateTime.Now;

            try
            {
                var baseUrl  = authData.BaseUrl;
                var endpoint = baseUrl + authData.OdataUrlPostFix + step.EndPoint + ApplyCrossCompanyFilter(step.EndpointFilter) ?? "";

                var returnODataObject = await CallOdataEndpointAsync <Y>(endpoint, authData);

                if (returnODataObject.value.Any())
                {
                    DataWriter.TruncateSingleTable(step.DbTable);
                }
                DataWriter.WriteToTable <Y>(returnODataObject.value.GetDataReader <Y>(), step.DbTable, authData.InjectionPropertyValue, authData.InjectionPropertyName);
                string nextLinkEndpoint = null;
                while (!string.IsNullOrEmpty(returnODataObject.NextLink))
                {
                    if (returnODataObject.appendNextLink)
                    {
                        nextLinkEndpoint = endpoint + returnODataObject.NextLink;
                    }
                    else
                    {
                        nextLinkEndpoint = returnODataObject.NextLink;
                    }
                    returnODataObject = await CallOdataEndpointAsync <Y>(nextLinkEndpoint, authData);

                    DataWriter.WriteToTable <Y>(returnODataObject.value.GetDataReader <Y>(), step.DbTable, authData.InjectionPropertyValue, authData.InjectionPropertyName);
                    if (returnODataObject.Exception != null)
                    {
                        break;
                    }
                }
                if (returnODataObject.Exception != null)
                {
                    DataWriter.LogErpActionStep(actionId, step.DbTable, startTime, false, returnODataObject.Exception.ErrorMessage, returnODataObject.Exception.StackTrace, step.Id);
                }
                else
                {
                    DataWriter.LogErpActionStep(actionId, step.DbTable, startTime, true, null, null, step.Id);
                }
                return(returnODataObject.Exception);
            }
            catch (Exception e)
            {
                DataWriter.LogErpActionStep(actionId, step.DbTable, startTime, false, e.Message, e.StackTrace, step.Id);
                return(new AxBaseException {
                    ApplicationException = e
                });
            }
        }
コード例 #4
0
        public static async Task <AxBaseException> CallOdataEndpointWithPageSize <T>(ErpTaskStep step, int actionId, ServiceData authData)
        {
            DateTime startTime = DateTime.Now;

            try
            {
                var filter   = "?$top=" + step.MaxPageSize;// 1000 &$top = 1000
                var baseUrl  = authData.BaseUrl;
                var endpoint = baseUrl + "/data/" + step.EndPoint + ApplyCrossCompanyFilter(filter);

                var returnODataObject = await CallOdataEndpointAsync <T>(endpoint, authData);

                if (returnODataObject.value.Any())
                {
                    DataWriter.TruncateSingleTable(step.DbTable);
                }
                DataWriter.WriteToTable <T>(returnODataObject.value.GetDataReader <T>(), step.DbTable);
                for (int i = 1; returnODataObject.value.Count > 0; i++)
                {
                    filter            = "?$skip=" + i * step.MaxPageSize + "&$top=" + step.MaxPageSize;
                    endpoint          = baseUrl + "/data/" + step.EndPoint + ApplyCrossCompanyFilter(filter);
                    returnODataObject = await CallOdataEndpointAsync <T>(endpoint, authData);

                    DataWriter.WriteToTable <T>(returnODataObject.value.GetDataReader <T>(), step.DbTable, authData.InjectionPropertyValue, authData.InjectionPropertyName);
                    if (returnODataObject.Exception != null)
                    {
                        break;
                    }
                }
                if (returnODataObject.Exception != null)
                {
                    DataWriter.LogErpActionStep(actionId, step.DbTable, startTime, false, returnODataObject.Exception.ErrorMessage, returnODataObject.Exception.StackTrace, step.Id);
                }
                else
                {
                    DataWriter.LogErpActionStep(actionId, step.DbTable, startTime, true, null, null, step.Id);
                }
                return(returnODataObject.Exception);
            }
            catch (Exception e)
            {
                DataWriter.LogErpActionStep(actionId, step.DbTable, startTime, false, e.Message, e.StackTrace, step.Id);
                return(new AxBaseException {
                    ApplicationException = e
                });
            }
        }
コード例 #5
0
        public static async Task <AxBaseException> CallService <T>(int actionId, ErpTaskStep step, ServiceData authData)
        {
            DateTime startTime = DateTime.Now;

            try
            {
                long recId = 0;
                GenericJsonOdata <T> result = new GenericJsonOdata <T>();
                result = await WriteFromService <T>(0, 500, step.ServiceMethod, step.ServiceName, step.DbTable, DateTime.MinValue, DateTime.MinValue, authData, false);

                if (result.value.Any())
                {
                    DataWriter.TruncateSingleTable(step.DbTable);
                }
                while (result.value.Any() && result.Exception == null)
                {
                    result = await WriteFromService <T>(recId, step.MaxPageSize.Value, step.ServiceMethod, step.ServiceName, step.DbTable, DateTime.MinValue, DateTime.MinValue, authData, false);

                    DataWriter.WriteToTable <T>(result.value.GetDataReader(), step.DbTable);
                    recId = DataWriter.GetMaxRecId(step.DbTable);
                }

                if (result.Exception == null)
                {
                    DataWriter.LogErpActionStep(actionId, step.DbTable, startTime, true, null, null, step.Id);
                }
                else
                {
                    DataWriter.LogErpActionStep(actionId, step.DbTable, startTime, false, result.Exception.ErrorMessage, result.Exception.StackTrace, step.Id);
                }
                return(result.Exception);
            }
            catch (Exception e)
            {
                DataWriter.LogErpActionStep(actionId, step.DbTable, startTime, false, e.Message, e.StackTrace, step.Id);
                return(new AxBaseException {
                    ApplicationException = e
                });
            }
        }
コード例 #6
0
ファイル: TaskExecute.cs プロジェクト: tociga/ErpConnector
        public static AxBaseException ExecuteTask(int actionId, ErpTaskStep erpStep, DateTime date)
        {
            if (!string.IsNullOrEmpty(erpStep.ExternalProcess))
            {
                DateTime start  = DateTime.Now;
                var      baseEx = ExternalTaskExec.ExecTask(erpStep);
                DataWriter.LogErpActionStep(actionId, erpStep.StepName, start, baseEx == null, baseEx == null ? null : baseEx.ApplicationException.InnerException.Message,
                                            baseEx == null ? null : baseEx.ApplicationException.InnerException.StackTrace, erpStep.Id);
                return(baseEx);
            }
            else
            {
                AxBaseException result = null;
                if (erpStep.TaskType == ErpTaskStep.ErpTaskType.ODATA_ENDPOINT)
                {
                    if (erpStep.MaxPageSize.HasValue)
                    {
                        MethodInfo method  = typeof(ServiceConnector).GetMethod("CallOdataEndpointWithPageSize");
                        MethodInfo generic = method.MakeGenericMethod(erpStep.ReturnType);

                        Object[] parameters = new Object[3];
                        parameters = new object[] { erpStep, actionId, Authenticator.GetAuthData(erpStep.AuthenitcationType) };
                        result     = ((Task <AxBaseException>)generic.Invoke(null, parameters)).Result;
                    }
                    else
                    {
                        Type       genericType = erpStep.GenericObjectType.MakeGenericType(erpStep.ReturnType);
                        MethodInfo method      = typeof(ServiceConnector).GetMethod("CallOdataEndpoint");
                        MethodInfo generic     = method.MakeGenericMethod(genericType, erpStep.ReturnType);

                        Object[] parameters = new Object[3];
                        parameters = new object[] { erpStep, actionId, Authenticator.GetAuthData(erpStep.AuthenitcationType) };
                        result     = ((Task <AxBaseException>)generic.Invoke(null, parameters)).Result;
                    }
                }
                else if (erpStep.TaskType == ErpTaskStep.ErpTaskType.CUSTOM_SERVICE)
                {
                    MethodInfo method  = typeof(ServiceConnector).GetMethod("CallService");
                    MethodInfo generic = method.MakeGenericMethod(erpStep.ReturnType);
                    result = ((Task <AxBaseException>)generic.Invoke(null, new Object[3] {
                        actionId, erpStep, Authenticator.GetAuthData(erpStep.AuthenitcationType)
                    })).Result;
                }
                else if (erpStep.TaskType == ErpTaskStep.ErpTaskType.CUSTOM_SERVICE_BY_DATE)
                {
                    MethodInfo method  = typeof(ServiceConnector).GetMethod("CallServiceByDate");
                    MethodInfo generic = method.MakeGenericMethod(erpStep.ReturnType);
                    Func <DateTime, DateTime> action = null;
                    switch (erpStep.PeriodIncrement)
                    {
                    case ErpTaskStep.PeriodIncrementType.HOURS:
                    {
                        action = delegate(DateTime d) { return(d.AddHours(1)); };
                        break;
                    }

                    case ErpTaskStep.PeriodIncrementType.DAYS:
                    {
                        action = delegate(DateTime d) { return(d.AddDays(1)); };
                        break;
                    }

                    case ErpTaskStep.PeriodIncrementType.MONTHS:
                    {
                        action = delegate(DateTime d) { return(d.AddMonths(1)); };
                        break;
                    }

                    default:
                    {
                        action = null;
                        break;
                    }
                    }
                    Object[] parameters = new Object[5] {
                        date, actionId, erpStep, Authenticator.GetAuthData(erpStep.AuthenitcationType), action
                    };
                    result = ((Task <AxBaseException>)generic.Invoke(null, parameters)).Result;
                }
                else if (erpStep.TaskType == ErpTaskStep.ErpTaskType.ITERATIVE_ENDPOINT)
                {
                    var list             = DataWriter.GetIdsFromEntities(erpStep.BaseTypeProcedure);
                    var endPointTemplate = erpStep.EndPoint;
                    foreach (var id in list)
                    {
                        erpStep.EndPoint = endPointTemplate.Replace("{key}", id);
                        Type       genericType = erpStep.GenericObjectType.MakeGenericType(erpStep.ReturnType);
                        MethodInfo method      = typeof(ServiceConnector).GetMethod("CallOdataEndpoint");
                        MethodInfo generic     = method.MakeGenericMethod(genericType, erpStep.ReturnType);

                        Object[] parameters = new Object[3];
                        var      authData   = Authenticator.GetAuthData(erpStep.AuthenitcationType);
                        authData.InjectionPropertyName  = erpStep.InjectionPropertyName;
                        authData.InjectionPropertyValue = id;
                        parameters = new object[] { erpStep, actionId, authData };
                        result     = ((Task <AxBaseException>)generic.Invoke(null, parameters)).Result;
                    }
                }
                else if (erpStep.TaskType == ErpTaskStep.ErpTaskType.COMPLEX_RETURN_TYPE)
                {
                    Type       genericType = erpStep.GenericObjectType.MakeGenericType(erpStep.ReturnType);
                    MethodInfo method      = typeof(ServiceConnector).GetMethod("CallOdataEndpointComplex");
                    MethodInfo generic     = method.MakeGenericMethod(genericType, erpStep.ReturnType);

                    Object[] parameters = new Object[3];
                    parameters = new object[] { erpStep, actionId, Authenticator.GetAuthData(erpStep.AuthenitcationType) };
                    result     = ((Task <AxBaseException>)generic.Invoke(null, parameters)).Result;
                }
                else if (erpStep.TaskType == ErpTaskStep.ErpTaskType.COMPLEX_RETURN_TYPE_BY_DATE)
                {
                    //Hard code start date to be 2019-01-01
                    if (date == DateTime.MaxValue)
                    {
                        date = new DateTime(2019, 1, 1);
                    }
                    Type       genericType = erpStep.GenericObjectType.MakeGenericType(erpStep.ReturnType);
                    MethodInfo method      = typeof(ServiceConnector).GetMethod("CallOdataEndpointComplexByDate");
                    MethodInfo generic     = method.MakeGenericMethod(genericType, erpStep.ReturnType);

                    Object[] parameters = new Object[7];
                    parameters = new object[] { erpStep.EndPoint, erpStep.EndpointFilter, erpStep.Details, actionId, Authenticator.GetAuthData(erpStep.AuthenitcationType), erpStep.StepName,
                                                date };
                    result = ((Task <AxBaseException>)generic.Invoke(null, parameters)).Result;
                }
                return(null);
            }
        }
コード例 #7
0
        public Task <int> GetSingleTable(ErpTaskStep step, int actionId, DateTime date)
        {
            Task <int> task = new Task <int>(() => factory.GetSingleTable(step, actionId, date));

            return(task);
        }
コード例 #8
0
        public static async Task <AxBaseException> CallOdataEndpointComplexByDate <T, Y>(ErpTaskStep step, string filters, List <ErpTaskStepDetails> resultProperties, int actionId, ServiceData authData,
                                                                                         DateTime startDate) where T : GenericJsonOdata <Y>
        {
            DateTime startTime = DateTime.Now;

            try
            {
                var      baseUrl           = authData.BaseUrl;
                var      endpoint          = baseUrl + authData.OdataUrlPostFix + step.EndPoint;
                DateTime firstDayOfMonth   = new DateTime(startDate.Year, startDate.Month, 1);
                var      returnODataObject = new GenericWriteObject <Y>();
                bool     isFirstIteration  = true;
                for (DateTime d = firstDayOfMonth; d <= DateTime.Now.Date; d = d.AddMonths(1))
                {
                    returnODataObject = await CallOdataEndpointAsyncComplexByDate <Y>(endpoint, authData, d, d.AddMonths(1).AddDays(-1));

                    var results = returnODataObject.WriteObject;
                    foreach (var stepDetail in resultProperties)
                    {
                        if (results != null && results.GetType().GetProperty(stepDetail.nested_property_name) != null)
                        {
                            if (isFirstIteration)
                            {
                                DataWriter.TruncateSingleTable(stepDetail.db_table);
                                isFirstIteration = false;
                            }
                            Type       genericType = typeof(List <>).MakeGenericType(stepDetail.GetReturnType());
                            MethodInfo method      = typeof(DataWriter).GetMethod("WriteToTable", new Type[] { typeof(IList), typeof(string), typeof(object), typeof(string) });
                            MethodInfo generic     = method.MakeGenericMethod(stepDetail.GetReturnType());

                            Object[] parameters = new Object[5];
                            IList    list       = (IList)results.GetType().GetProperty(stepDetail.nested_property_name).GetValue(results);
                            if (list != null)
                            {
                                //var list = Convert.ChangeType(results[stepDetail.PropertyName], genericType);
                                parameters = new object[] { list, stepDetail.db_table, authData.InjectionPropertyValue, authData.InjectionPropertyName };
                                generic.Invoke(null, parameters);
                            }

                            //DataWriter.WriteToTable(((List<dynamic>)results[stepDetail.PropertyName]).GetDataReader(), stepDetail.DbTable,
                            //    authData.InjectionPropertyValue, authData.InjectionPropertyName);
                        }
                    }
                }
                if (returnODataObject.Exception != null)
                {
                    DataWriter.LogErpActionStep(actionId, step.StepName, startTime, false, returnODataObject.Exception.ErrorMessage, returnODataObject.Exception.StackTrace, step.Id);
                }
                else
                {
                    DataWriter.LogErpActionStep(actionId, step.StepName, startTime, true, null, null, step.Id);
                }
                return(returnODataObject.Exception);
            }
            catch (Exception e)
            {
                DataWriter.LogErpActionStep(actionId, step.StepName, startTime, false, e.Message, e.StackTrace, step.Id);
                return(new AxBaseException {
                    ApplicationException = e
                });
            }
        }
コード例 #9
0
        public static async Task <AxBaseException> CallOdataEndpointComplex <T, Y>(ErpTaskStep step, int actionId, ServiceData authData) where T : GenericJsonOdata <Y>
        {
            DateTime startTime = DateTime.Now;

            try
            {
                var baseUrl  = authData.BaseUrl;
                var endpoint = baseUrl + authData.OdataUrlPostFix + step.EndPoint;

                var returnODataObject = await CallOdataEndpointAsyncComplex <Y>(endpoint, authData);

                var results = returnODataObject.WriteObject;
                foreach (var stepDetail in step.Details)
                {
                    if (results != null && results.GetType().GetProperty(stepDetail.nested_property_name) != null)
                    {
                        DataWriter.TruncateSingleTable(stepDetail.db_table);
                        Type       genericType = typeof(List <>).MakeGenericType(stepDetail.GetReturnType());
                        MethodInfo method      = typeof(DataWriter).GetMethod("WriteToTable", new Type[] { typeof(IList), typeof(string), typeof(object), typeof(string) });
                        MethodInfo generic     = method.MakeGenericMethod(stepDetail.GetReturnType());

                        Object[] parameters = new Object[5];
                        IList    list       = (IList)results.GetType().GetProperty(stepDetail.nested_property_name).GetValue(results);
                        if (list != null)
                        {
                            //var list = Convert.ChangeType(results[stepDetail.PropertyName], genericType);
                            parameters = new object[] { list, stepDetail.db_table, authData.InjectionPropertyValue, authData.InjectionPropertyName };
                            generic.Invoke(null, parameters);
                        }


                        //DataWriter.WriteToTable(((List<dynamic>)results[stepDetail.PropertyName]).GetDataReader(), stepDetail.DbTable,
                        //    authData.InjectionPropertyValue, authData.InjectionPropertyName);
                    }
                }

                //string nextLinkEndpoint = null;
                //while (!string.IsNullOrEmpty(returnODataObject.NextLink))
                //{
                //    if (returnODataObject.appendNextLink)
                //    {
                //        nextLinkEndpoint = endpoint + returnODataObject.NextLink;
                //    }
                //    else
                //    {
                //        nextLinkEndpoint = returnODataObject.NextLink + ApplyCrossCompanyFilter(filters);
                //    }
                //    returnODataObject = await CallOdataEndpointAsyncDynamic(nextLinkEndpoint, authData);
                //    DataWriter.WriteToTable(returnODataObject.value.GetDataReader(), dbTable, authData.InjectionPropertyValue, authData.InjectionPropertyName);
                //    if (returnODataObject.Exception != null)
                //    {
                //        break;
                //    }
                //}
                if (returnODataObject.Exception != null)
                {
                    DataWriter.LogErpActionStep(actionId, step.StepName, startTime, false, returnODataObject.Exception.ErrorMessage, returnODataObject.Exception.StackTrace, step.Id);
                }
                else
                {
                    DataWriter.LogErpActionStep(actionId, step.StepName, startTime, true, null, null, step.Id);
                }
                return(returnODataObject.Exception);
            }
            catch (Exception e)
            {
                DataWriter.LogErpActionStep(actionId, step.StepName, startTime, false, e.Message, e.StackTrace, step.Id);
                return(new AxBaseException {
                    ApplicationException = e
                });
            }
        }
コード例 #10
0
        public static async Task <AxBaseException> CallServiceByDate <T>(DateTime date, int actionId, ErpTaskStep step, ServiceData authData, Func <DateTime, DateTime> nextPeriod = null)
        {
            if (nextPeriod == null)
            {
                nextPeriod = AddDay;
            }
            DateTime startTime = DateTime.Now;

            try
            {
                GenericJsonOdata <T> result = new GenericJsonOdata <T>();
                bool firstResult            = false;
                for (DateTime d = date.Date; d < DateTime.Now.Date && result.Exception == null; d = nextPeriod(d))
                {
                    result = await WriteFromService <T>(0, 10000, step.ServiceMethod, step.ServiceName, step.DbTable, d, nextPeriod(d), authData, true);

                    if (!firstResult && result.value.Any())
                    {
                        DataWriter.TruncateSingleTable(step.DbTable);
                        firstResult = true;
                    }
                    DataWriter.WriteToTable <T>(result.value.GetDataReader(), step.DbTable);
                }
                if (result.Exception == null)
                {
                    DataWriter.LogErpActionStep(actionId, step.DbTable, startTime, true, null, null, step.Id);
                }
                else
                {
                    DataWriter.LogErpActionStep(actionId, step.DbTable, startTime, false, result.Exception.ErrorMessage, result.Exception.StackTrace, step.Id);
                }
                return(result.Exception);
            }
            catch (Exception e)
            {
                DataWriter.LogErpActionStep(actionId, step.DbTable, startTime, false, e.Message, e.StackTrace, step.Id);
                return(new AxBaseException {
                    ApplicationException = e
                });
            }
        }
コード例 #11
0
        public static AxBaseException ExecuteTask(int actionId, ErpTaskStep erpStep, DateTime date)
        {
            AxBaseException result = null;

            if (erpStep.TaskType == ErpTaskStep.ErpTaskType.ODATA_ENDPOINT)
            {
                if (erpStep.MaxPageSize.HasValue)
                {
                    MethodInfo method  = typeof(ServiceConnector).GetMethod("CallOdataEndpointWithPageSize");
                    MethodInfo generic = method.MakeGenericMethod(erpStep.ReturnType);

                    Object[] parameters = new Object[4];
                    parameters = new object[] { erpStep.EndPoint, erpStep.MaxPageSize.Value, erpStep.DbTable, actionId };
                    result     = ((Task <AxBaseException>)generic.Invoke(null, parameters)).Result;
                }
                else
                {
                    MethodInfo method  = typeof(ServiceConnector).GetMethod("CallOdataEndpoint");
                    MethodInfo generic = method.MakeGenericMethod(erpStep.ReturnType);

                    Object[] parameters = new Object[4];
                    parameters = new object[] { erpStep.EndPoint, erpStep.EndpointFilter, erpStep.DbTable, actionId };
                    result     = ((Task <AxBaseException>)generic.Invoke(null, parameters)).Result;
                }
            }
            else if (erpStep.TaskType == ErpTaskStep.ErpTaskType.CUSTOM_SERVICE)
            {
                MethodInfo method  = typeof(ServiceConnector).GetMethod("CallService");
                MethodInfo generic = method.MakeGenericMethod(erpStep.ReturnType);
                result = ((Task <AxBaseException>)generic.Invoke(null, new Object[5] {
                    actionId, erpStep.ServiceMethod, erpStep.ServiceName,
                    erpStep.DbTable, erpStep.MaxPageSize
                })).Result;
            }
            else if (erpStep.TaskType == ErpTaskStep.ErpTaskType.CUSTOM_SERVICE_BY_DATE)
            {
                MethodInfo method  = typeof(ServiceConnector).GetMethod("CallServiceByDate");
                MethodInfo generic = method.MakeGenericMethod(erpStep.ReturnType);
                Func <DateTime, DateTime> action = null;
                switch (erpStep.PeriodIncrement)
                {
                case ErpTaskStep.PeriodIncrementType.HOURS:
                {
                    action = delegate(DateTime d) { return(d.AddHours(1)); };
                    break;
                }

                case ErpTaskStep.PeriodIncrementType.DAYS:
                {
                    action = delegate(DateTime d) { return(d.AddDays(1)); };
                    break;
                }

                case ErpTaskStep.PeriodIncrementType.MONTHS:
                {
                    action = delegate(DateTime d) { return(d.AddMonths(1)); };
                    break;
                }

                default:
                {
                    action = null;
                    break;
                }
                }
                Object[] parameters = new Object[6] {
                    date, actionId, erpStep.ServiceMethod, erpStep.ServiceName, erpStep.DbTable, action
                };
                result = ((Task <AxBaseException>)generic.Invoke(null, parameters)).Result;
            }
            return(result);
        }