protected void AllocateReport(MeasuredParameters mps, string measure, MeasureDiff diff)
        {
            if (ParentWorkflow.InternalParameters.ContainsKey("Reports"))
            {
                Hashtable currentReports = (Hashtable)ParentWorkflow.InternalParameters["Reports"];
                if (currentReports.ContainsKey(_entityType))
                {
                    Reports entReports = (Reports)currentReports[_entityType];
                    if (entReports.ContainsDifference(diff))
                    {
                        //We have a report which contains this type of difference.
                        Report curReport = (Report)entReports[diff];
                        curReport.MeasuredParameters.Append(mps);
                        curReport.Processed      = false;
                        curReport.DifferenceType = diff;

                        if (!curReport.Measures.Contains(MeasuredParameter.FromString(measure)))
                        {
                            curReport.Measures.Add(MeasuredParameter.FromString(measure));
                        }

                        entReports[diff] = curReport;
                    }
                    else
                    {
                        //We do not have a report which contains this type of difference.
                        Report r = new Report();
                        r.MeasuredParameters.Append(mps);
                        r.Processed      = false;
                        r.Name           = this.Name;
                        r.DifferenceType = diff;
                        r.Measures.Add(MeasuredParameter.FromString(measure));
                        entReports.Add(diff, r);
                    }

                    currentReports[_entityType] = entReports;
                }
                else
                {
                    //We do not have a report for this entity type.
                    Report r = new Report();
                    r.MeasuredParameters.Append(mps);
                    r.Processed      = false;
                    r.Name           = this.Name;
                    r.DifferenceType = diff;
                    r.Measures.Add(MeasuredParameter.FromString(measure));

                    if (ParentWorkflow.InternalParameters.ContainsKey("AccountFilters"))
                    {
                        r.Filters = (AccountAlertFilters)ParentWorkflow.InternalParameters["AccountFilters"];
                    }

                    r.Account = Convert.ToInt32(ParentWorkflow.Parameters["AccountID"]);

                    Reports ht = new Reports();
                    ht.Add(diff, r);

                    currentReports.Add(_entityType, ht);
                    ParentWorkflow.InternalParameters["Reports"] = currentReports;
                }
            }
            else
            {
                Report r = new Report();
                r.MeasuredParameters.Append(mps);
                r.Processed      = false;
                r.Name           = this.Name;
                r.DifferenceType = diff;
                r.Measures.Add(MeasuredParameter.FromString(measure));

                if (ParentWorkflow.InternalParameters.ContainsKey("AccountFilters"))
                {
                    r.Filters = (AccountAlertFilters)ParentWorkflow.InternalParameters["AccountFilters"];
                }

                r.Account = Convert.ToInt32(ParentWorkflow.Parameters["AccountID"]);

                Reports ht = new Reports();
                ht.Add(diff, r);

                Hashtable reports = new Hashtable();
                reports.Add(_entityType, ht);
                ParentWorkflow.InternalParameters.Add("Reports", reports);
            }
        }