private static string GetFeedFilePath(FeedGenerationFileItemRange fileItemRange, FeedGenerationFileLineItem feedGenerationFileLineItem,
                                       string languageString, string pathBase)
 {
     return(string.Format("{0}/{1}/{2}-{3}-{4}.txt", pathBase, languageString, feedGenerationFileLineItem.Catalog,
                          fileItemRange.Begin, fileItemRange.End));
 }
Exemple #2
0
        private void WriteRangeFile(FeedGenerationFileLineItem fileComponent, FeedGenerationFileItemRange range,
                                    IEnumerable <AbstractFileFeedWriter> feedWriters)
        {
            using (var sqlConnection = new SqlConnection(OdysseyCommerceConnectionString))
            {
                sqlConnection.Open();

                var catalog       = fileComponent.Catalog;
                var sqlParameters = new SqlParameter[2];
                if (!fileComponent.IsIncluded)
                {
                    Log.InfoFormat("FeedGenerationFileLineItem [{0}-{1}] was excluded from feed generation.", catalog,
                                   fileComponent.RangeDatas);
                    return;
                }

                var identifier = string.Format("{0}_{1}", catalog, fileComponent.RangeDatas);
                try
                {
                    sqlParameters[0] = new SqlParameter("@PIDRangeStart", range.Begin);
                    sqlParameters[1] = new SqlParameter("@PIDRangeEnd ", range.End);
                    identifier       = string.Format("{0}_{1}_{2}", catalog, range.Begin, range.End);

                    var startDt = DateTime.Now;
                    Log.DebugFormat("[{0}] start", identifier);
                    using (var sqlCommand = new SqlCommand(fileComponent.StoredProcedureName, sqlConnection)
                    {
                        CommandType = CommandType.StoredProcedure,
                        CommandTimeout = SearchDataCommandTimeout
                    })
                    {
                        if (!(sqlParameters[0].Value.ToString() == "0" && sqlParameters[1].Value.ToString() == "99"))
                        {
                            sqlCommand.Parameters.AddRange(sqlParameters);
                        }

                        if (LimitTo100Products)
                        {
                            sqlCommand.Parameters.AddWithValue("@GetTop100", 1);
                        }

                        if (_isIncrementalRun)
                        {
                            sqlCommand.Parameters.AddWithValue("@IsIncremental", 1);
                            sqlCommand.Parameters.AddWithValue("@DateChanged", _effectiveFromTime);
                        }

                        using (var sqlDataReader = sqlCommand.ExecuteReader())
                        {
                            if (!sqlDataReader.HasRows)
                            {
                                Log.InfoFormat("Runner.WriteRangeFile. sqlDataReader has no rows. catalog: {0}", catalog);
                            }

                            while (sqlDataReader.Read())
                            {
                                foreach (var writer in feedWriters)
                                {
                                    try
                                    {
                                        writer.Write(sqlDataReader, identifier);
                                    }
                                    catch (Exception ex)
                                    {
                                        if (_isIncrementalRun || !AllowItemErrorsInFiles)
                                        {
                                            throw;
                                        }

                                        Log.Error(string.Format("[Feed] {0} errored out.", identifier), ex);
                                        _hasError = true;
                                    }
                                }
                            }
                        } //using sqldatareader
                    }     //using sqlCommand
                    var endDt    = DateTime.Now;
                    var execTime = endDt - startDt;
                    Log.InfoFormat("[{0}] completed. Execution time in seconds: {1}", identifier, execTime.TotalSeconds);
                }
                catch (Exception ex)
                {
                    Log.Error(string.Format("Runner.WriteRangeFile(). [Feed] {0} errored out.", identifier), ex);
                    _hasError = true;

                    if (_isIncrementalRun || !AllowItemErrorsInFiles)
                    {
                        throw;
                    }
                }
            }
        }