public ActionResult ProductData(ProductDataModel model)
        {
            string val;
            var    fetchFrom = _connectorService.ConvertDateTime(model.FetchFromDate, false);

            var context = new ShopConnectorRequestContext
            {
                ActionMethod = "ProductData"
            };

            try
            {
                if (model.DataFileName.IsEmpty())
                {
                    var controllingData = ConnectionCache.ControllingData();
                    var connection      = controllingData.Connections.FirstOrDefault(x => x.Id == model.Id);

                    model.DataFileName = connection.Url.EmptyNull().Replace("https://", "").Replace("http://", "").Replace("/", "");
                }

                context.RequestContent.Add("FetchFrom", fetchFrom.HasValue ? fetchFrom.Value.ToString("o") : "");
                context.RequestContent.Add("FilterManufacturerIds", string.Join(",", model.FilterManufacturerIds ?? new int[0]));
                context.RequestContent.Add("FilterCategoryId", model.FilterCategoryId.EmptyNull());
                context.RequestContent.Add("DataFileName", model.DataFileName.EmptyNull());

                if (!_connectorService.SendRequest(context, model.Id))
                {
                    return(new ShopConnectorOperationResult(context));
                }

                var cStats = context.Headers.TryGetValue("Sm-ShopConnector-Category", out val)
                    ? val.ToIntArray()
                    : new int[] { 0, 0, 0 };

                var pStats = context.Headers.TryGetValue("Sm-ShopConnector-Product", out val)
                    ? val.ToIntArray()
                    : new int[] { 0, 0, 0 };

                string message = null;

                if ((cStats[0] == 0 && pStats[0] == 0) || ShopConnectorFileSystem.GetFileSize(context.ResponsePath) == 0)
                {
                    // Avoid empty files.
                    FileSystemHelper.DeleteFile(context.ResponsePath);

                    message = T("Plugins.SmartStore.ShopConnector.NoContent");
                }
                else
                {
                    message = T("Plugins.SmartStore.ShopConnector.ProcessingResult",
                                cStats[2].ToString("N0"), cStats[0].ToString("N0"), cStats[1].ToString("N0"),
                                pStats[2].ToString("N0"), pStats[0].ToString("N0"), pStats[1].ToString("N0"));

                    var stats = new ShopConnectorImportStats("Product");
                    stats.Add(new ImportStats.FileStats
                    {
                        Name          = Path.GetFileName(context.ResponsePath),
                        CategoryCount = cStats[0],
                        ProductCount  = pStats[0]
                    });
                }

                context.ResponseModel = new OperationResultModel(message, false);
            }
            catch (Exception ex)
            {
                context.ResponseModel = new OperationResultModel(ex);
            }

            return(new ShopConnectorOperationResult(context));
        }