protected override void OnInit() { Accounts = GetAccountsFromDB(Instance.AccountID); Channels = GetChannelsFromDB(); CurrencyRates = CurrencyRate.GetCurrencyRates(this.Delivery.TimePeriodDefinition.Start.ToDateTime()); // Load mapping configuration // ------------------------------------------ this.Mappings.ExternalMethods.Add("GetChannel", new Func <dynamic, Channel>(GetChannel)); this.Mappings.ExternalMethods.Add("GetCurrentChannel", new Func <Channel>(GetCurrentChannel)); this.Mappings.ExternalMethods.Add("GetAccount", new Func <dynamic, Account>(GetAccount)); this.Mappings.ExternalMethods.Add("GetCurrentAccount", new Func <Account>(GetCurrentAccount)); this.Mappings.ExternalMethods.Add("GetSegment", new Func <dynamic, Segment>(GetSegment)); this.Mappings.ExternalMethods.Add("GetMeasure", new Func <dynamic, Measure>(GetMeasure)); this.Mappings.ExternalMethods.Add("UrlEncode", new Func <dynamic, dynamic>(UrlEncode)); this.Mappings.ExternalMethods.Add("ConvertToUSD", new Func <dynamic, dynamic, double>(ConvertToUSD)); this.Mappings.ExternalMethods.Add("CreatePeriodStart", new Func <dynamic, dynamic, dynamic, DateTime>(CreatePeriodStart)); this.Mappings.ExternalMethods.Add("CreatePeriodEnd", new Func <dynamic, dynamic, dynamic, DateTime>(CreatePeriodEnd)); OnInitMappings(); this.Mappings.Compile(); }
protected override void OnBeginImport() { this._tablePrefix = string.Format("{0}_{1}_{2}_{3}", this.TablePrefixType, this.CurrentDelivery.Account.ID, DateTime.Now.ToString("yyyMMdd_HHmmss"), this.CurrentDelivery.DeliveryID.ToString("N").ToLower()); this.CurrentDelivery.Parameters[Consts.DeliveryOutputParameters.TablePerfix] = this._tablePrefix; int bufferSize = int.Parse(AppSettings.Get(this, Consts.AppSettings.BufferSize)); // Connect to database _sqlConnection = NewDeliveryDbConnection(); _sqlConnection.Open(); // Create bulk objects _bulks = new Dictionary <Type, BulkObjects>(); Type tableList = this.GetType().GetNestedType("Tables", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public); foreach (Type table in tableList.GetNestedTypes()) { _bulks[table] = new BulkObjects(this._tablePrefix, table, _sqlConnection, bufferSize); } // Get measures using (SqlConnection oltpConnection = new SqlConnection(this.Options.StagingConnectionString)) { oltpConnection.Open(); this.Measures = Measure.GetMeasures( this.CurrentDelivery.Account, this.CurrentDelivery.Channel, oltpConnection, this.Options.MeasureOptions, this.Options.MeasureOptionsOperator ); this.SegmentTypes = Segment.GetSegments( this.CurrentDelivery.Account, this.CurrentDelivery.Channel, oltpConnection, this.Options.SegmentOptions, this.Options.SegmentOptionsOperator ); this.CurrencyRates = CurrencyRate.GetCurrencyRates( this.CurrentDelivery.TimePeriodDefinition.Start.ToDateTime() ); } // Add measure columns to metrics StringBuilder measuresFieldNamesSQL = new StringBuilder(","); StringBuilder measuresNamesSQL = new StringBuilder(","); StringBuilder measuresValidationSQL = new StringBuilder(); int count = 0; BulkObjects bulkMetrics = _bulks[this.MetricsTableDefinition]; foreach (Measure measure in this.Measures.Values) { bulkMetrics.AddColumn(new ColumnDef( name: measure.Name, type: SqlDbType.Float, nullable: true )); measuresFieldNamesSQL.AppendFormat("[{0}]{1}", measure.OltpName, count < this.Measures.Values.Count - 1 ? "," : null); measuresNamesSQL.AppendFormat("[{0}]{1}", measure.Name, count < this.Measures.Values.Count - 1 ? "," : null); if (measure.Options.HasFlag(MeasureOptions.ValidationRequired)) { measuresValidationSQL.AppendFormat("{1}SUM([{0}]) as [{0}]", measure.Name, measuresValidationSQL.Length > 0 ? ", " : null); } count++; } this.CurrentDelivery.Parameters.Add(Consts.DeliveryOutputParameters.MeasureFieldsSql, measuresFieldNamesSQL.ToString()); this.CurrentDelivery.Parameters.Add(Consts.DeliveryOutputParameters.MeasureNamesSql, measuresNamesSQL.ToString()); if (string.IsNullOrEmpty(measuresValidationSQL.ToString())) { Log.Write("No measures marked for checksum validation; there will be no validation before the final commit.", LogMessageType.Warning); } else { this.CurrentDelivery.Parameters.Add(Consts.DeliveryOutputParameters.MeasureValidateSql, measuresValidationSQL.ToString()); } // Create the tables StringBuilder createTableCmdText = new StringBuilder(); foreach (BulkObjects bulk in _bulks.Values) { createTableCmdText.Append(bulk.GetCreateTableSql()); } SqlCommand cmd = new SqlCommand(createTableCmdText.ToString(), _sqlConnection); cmd.CommandTimeout = 80; //DEFAULT IS 30 AND SOMTIME NOT ENOUGH WHEN RUNING CUBE cmd.ExecuteNonQuery(); }