Ejemplo n.º 1
0
        private async Task <SoapGetProductsResponse> GetProductsAsync(int limit)
        {
            try
            {
                const int maxCheckCount    = 2;
                const int delayBeforeCheck = 1800000;

                var res           = new List <CatalogDataProductInterface>();
                var privateClient = this.CreateMagentoCatalogProductRepositoryServiceClient(this.BaseMagentoUrl);
                catalogProductRepositoryV1GetListResponse1 catalogProductRepositoryV1GetListResponse = null;
                var currentPage = 0;

                do
                {
                    await ActionPolicies.GetAsync.Do(async() =>
                    {
                        var statusChecker = new StatusChecker(maxCheckCount);
                        TimerCallback tcb = statusChecker.CheckStatus;

                        if (privateClient.State != CommunicationState.Opened &&
                            privateClient.State != CommunicationState.Created &&
                            privateClient.State != CommunicationState.Opening)
                        {
                            privateClient = this.CreateMagentoCatalogProductRepositoryServiceClient(this.BaseMagentoUrl);
                        }

                        using (var stateTimer = new Timer(tcb, privateClient, 1000, delayBeforeCheck))
                        {
                            //var frameworkSearchFilterGroup1 = new FrameworkSearchFilterGroup() { filters = new[] { new FrameworkFilter() { conditionType = "gt", field = "created_at", value = "2000-01-01 01:01:01" } } };
                            //var frameworkSearchFilterGroup2 = new FrameworkSearchFilterGroup() { filters = new[] { new FrameworkFilter() { conditionType = "lt", field = "created_at", value = "2100-01-01 01:01:01" } } };
                            //var frameworkSearchFilterGroups = new[] { frameworkSearchFilterGroup1, frameworkSearchFilterGroup2 };

                            var frameworkSearchCriteriaInterface = new FrameworkSearchCriteriaInterface()
                            {
                                currentPage          = currentPage,
                                currentPageSpecified = true,
                                pageSize             = 100,
                                pageSizeSpecified    = true,
                                //filterGroups = frameworkSearchFilterGroups
                            };

                            var catalogProductRepositoryV1GetListRequest = new CatalogProductRepositoryV1GetListRequest()
                            {
                                searchCriteria = frameworkSearchCriteriaInterface
                            };
                            catalogProductRepositoryV1GetListResponse = await privateClient.catalogProductRepositoryV1GetListAsync(catalogProductRepositoryV1GetListRequest).ConfigureAwait(false);
                            var catalogDataProductInterfaces          = catalogProductRepositoryV1GetListResponse == null ? new List <CatalogDataProductInterface>() : catalogProductRepositoryV1GetListResponse.catalogProductRepositoryV1GetListResponse.result.items.ToList();
                            res.AddRange(catalogDataProductInterfaces);
                            currentPage++;
                        }
                    }).ConfigureAwait(false);
                } while(catalogProductRepositoryV1GetListResponse != null && res.Count < limit && res.Count < catalogProductRepositoryV1GetListResponse.catalogProductRepositoryV1GetListResponse.result.totalCount);

                return(new SoapGetProductsResponse(res.TakeWhile((x, i) => i < limit).ToList()));
            }
            catch (Exception exc)
            {
                throw new MagentoSoapException(string.Format("An error occured during GetProductsAsync()"), exc);
            }
        }
        private async Task <SoapGetProductsResponse> GetProductsOldAsync(int limit, string productType, bool productTypeShouldBeExcluded, DateTime?updatedFrom)
        {
            try
            {
                const int maxCheckCount    = 2;
                const int delayBeforeCheck = 1800000;

                var res           = new List <CatalogDataProductInterface>();
                var privateClient = this._clientFactory.CreateMagentoCatalogProductRepositoryServiceClient();
                catalogProductRepositoryV1GetListResponse1 catalogProductRepositoryV1GetListResponse = null;
                var currentPage = 0;

                do
                {
                    await ActionPolicies.GetAsync.Do(async() =>
                    {
                        var statusChecker = new StatusChecker(maxCheckCount);
                        TimerCallback tcb = statusChecker.CheckStatus;

                        privateClient = this._clientFactory.RefreshMagentoCatalogProductRepositoryServiceClient(privateClient);

                        using (var stateTimer = new Timer(tcb, privateClient, 1000, delayBeforeCheck))
                        {
                            //var frameworkSearchFilterGroup1 = new FrameworkSearchFilterGroup() { filters = new[] { new FrameworkFilter() { conditionType = "gt", field = "created_at", value = "2000-01-01 01:01:01" } } };
                            //var frameworkSearchFilterGroup2 = new FrameworkSearchFilterGroup() { filters = new[] { new FrameworkFilter() { conditionType = "lt", field = "created_at", value = "2100-01-01 01:01:01" } } };
                            //var frameworkSearchFilterGroups = new[] { frameworkSearchFilterGroup1, frameworkSearchFilterGroup2 };

                            var frameworkSearchFilterGroups = new List <FrameworkSearchFilterGroup>();

                            var frameworkSearchCriteriaInterface = new FrameworkSearchCriteriaInterface()
                            {
                                currentPage          = currentPage,
                                currentPageSpecified = true,
                                pageSize             = 100,
                                pageSizeSpecified    = true,
                                //filterGroups = frameworkSearchFilterGroups
                            };

                            if (updatedFrom.HasValue)
                            {
                                var filter = new FrameworkSearchFilterGroup()
                                {
                                    filters = new[] { new FrameworkFilter()
                                                      {
                                                          conditionType = "gt", field = "updated_at", value = updatedFrom.Value.ToSoapParameterString()
                                                      } }
                                };
                                frameworkSearchFilterGroups.Add(filter);
                            }

                            // filtering by typeId doesn't works for magento2.0.2
                            //if( productType != null )
                            //{
                            //	if( frameworkSearchCriteriaInterface.filterGroups == null )
                            //		frameworkSearchCriteriaInterface.filterGroups = new FrameworkSearchFilterGroup[] { };

                            //	var temp = frameworkSearchCriteriaInterface.filterGroups.ToList();
                            //	temp.Add( new FrameworkSearchFilterGroup() { filters = new[] { new FrameworkFilter() { conditionType = "like", field = "type", value = productType } } } );
                            //	frameworkSearchCriteriaInterface.filterGroups = temp.ToArray();
                            //}

                            if (frameworkSearchFilterGroups.Any())
                            {
                                frameworkSearchCriteriaInterface.filterGroups = frameworkSearchFilterGroups.ToArray();
                            }

                            var catalogProductRepositoryV1GetListRequest = new CatalogProductRepositoryV1GetListRequest()
                            {
                                searchCriteria = frameworkSearchCriteriaInterface
                            };
                            catalogProductRepositoryV1GetListResponse = await privateClient.catalogProductRepositoryV1GetListAsync(catalogProductRepositoryV1GetListRequest).ConfigureAwait(false);
                            var catalogDataProductInterfaces          = catalogProductRepositoryV1GetListResponse == null ? new List <CatalogDataProductInterface>() : catalogProductRepositoryV1GetListResponse.catalogProductRepositoryV1GetListResponse.result.items.ToList();

                            res.AddRange(catalogDataProductInterfaces);
                            currentPage++;
                        }
                    }).ConfigureAwait(false);
                } while(catalogProductRepositoryV1GetListResponse != null && res.Count < limit && res.Count < catalogProductRepositoryV1GetListResponse.catalogProductRepositoryV1GetListResponse.result.totalCount);

                if (!string.IsNullOrWhiteSpace(productType))
                {
                    res = productTypeShouldBeExcluded
                                                ? res.Where(x => !string.Equals(x.typeId, productType, StringComparison.InvariantCultureIgnoreCase)).ToList()
                                                : res.Where(x => string.Equals(x.typeId, productType, StringComparison.InvariantCultureIgnoreCase)).ToList();
                }

                return(new SoapGetProductsResponse(res.TakeWhile((x, i) => i < limit).ToList()));
            }
            catch (Exception exc)
            {
                throw new MagentoSoapException(string.Format("An error occured during GetProductsAsync()"), exc);
            }
        }