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();
        }
Beispiel #2
0
        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();
        }