private static void LoadParameters(object sender, PX.Reports.Controls.Report report, object passed) { var pars = passed as Dictionary<string, string>; if (pars != null) foreach (PX.Reports.ReportParameter p in report.Parameters) { string val; if (pars.TryGetValue(p.Name, out val)) { p.Value = val; pars.Remove(p.Name); } } SoapNavigator nav = (SoapNavigator)((PXReportViewer)sender).GetNavigator(); foreach (PX.Reports.ViewerField f in report.ViewerFields) { if (String.IsNullOrEmpty(f.Description) && !String.IsNullOrEmpty(f.Name)) { string name = null; string alias = null; int idx = f.Name.IndexOf('.'); if (idx <= 1) { if (report.Tables.Count > 1) { continue; } name = report.Tables[0].Name + "." + f.Name; } else { alias = f.Name.Substring(0, idx); foreach (PX.Reports.ReportRelation rel in report.Relations) { if (rel.ParentTable != null && String.Compare(rel.ParentAlias, alias, StringComparison.OrdinalIgnoreCase) == 0) { name = rel.ParentTable.Name + "." + f.Name.Substring(idx + 1); break; } if (rel.ChildTable != null && String.Compare(rel.ChildAlias, alias, StringComparison.OrdinalIgnoreCase) == 0) { name = rel.ChildTable.Name + "." + f.Name.Substring(idx + 1); break; } } } if (name != null) { name = nav.GetDisplayName(name) as string; if (name != null && alias != null) { idx = name.IndexOf('.'); if (idx > 1) { name = alias + name.Substring(idx); } } } else { name = nav.GetDisplayName(f.Name) as string; } if (name != null) { f.Description = name; } } } if (pars != null && pars.Count > 0) { int DesignFilterCount = report.Filters.Count; if (DesignFilterCount > 0) { report.Filters[0].OpenBraces++; report.Filters[DesignFilterCount - 1].CloseBraces++; report.Filters[DesignFilterCount - 1].Operator = PX.Reports.FilterOperator.And; } int DynamicFilterCount = report.DynamicFilters.Count; if (DynamicFilterCount > 0) { report.DynamicFilters[0].OpenBraces++; report.DynamicFilters[DynamicFilterCount - 1].CloseBraces++; report.DynamicFilters[DynamicFilterCount - 1].Operator = PX.Reports.FilterOperator.And; } foreach (PX.Reports.ViewerField f in report.ViewerFields) { string val; if (!String.IsNullOrEmpty(f.Description) && pars.TryGetValue(f.Description, out val) || pars.TryGetValue(f.Name, out val)) { PX.Reports.FilterExp exp = new PX.Reports.FilterExp(f.Name, PX.Reports.FilterCondition.Equal); exp.Value = val; report.DynamicFilters.Add(exp); pars.Remove(f.Description); pars.Remove(f.Name); } } int oldCount = report.DynamicFilters.Count - 1; for (int i = 0; oldCount < report.DynamicFilters.Count; i++) { bool skipDeactiv = false; oldCount = report.DynamicFilters.Count; foreach (PX.Reports.ViewerField f in report.ViewerFields) { string val; string fieldName = f.Name.StartsWith("Row") ? f.Name.Substring(3) : f.Name; StringBuilder sbName = new StringBuilder(fieldName); sbName.Append(Convert.ToString(i)); StringBuilder sbDescr = new StringBuilder((f.Description == null) ? fieldName : f.Description); sbDescr.Append(Convert.ToString(i)); #region deactivate some Filters //deactivate some Filters conditions that are passed in the session(or other). //Because new conditions will be added in DynamicFilters conditions. if (!skipDeactiv) { foreach (PX.Reports.FilterExp exp in report.Filters) { if (exp.DataField == fieldName) { if ((pars.TryGetValue(sbDescr.ToString(), out val) || pars.TryGetValue(sbName.ToString(), out val)) && (exp.Condition == PX.Reports.FilterCondition.Equal)) { exp.Condition = PX.Reports.FilterCondition.IsNotNull; exp.Value = exp.Value2 = ""; } } } } #endregion if (pars.TryGetValue(sbDescr.ToString(), out val) || pars.TryGetValue(sbName.ToString(), out val)) { PX.Reports.FilterExp exp = new PX.Reports.FilterExp(f.Name, PX.Reports.FilterCondition.Equal); exp.Value = val; exp.Operator = PX.Reports.FilterOperator.And; report.DynamicFilters.Add(exp); pars.Remove(sbDescr.ToString()); pars.Remove(sbName.ToString()); } } skipDeactiv = true; if (oldCount < report.DynamicFilters.Count) { report.DynamicFilters[report.DynamicFilters.Count - 1].Operator = PX.Reports.FilterOperator.Or; } } if (DesignFilterCount > 0 && report.DynamicFilters.Count > DynamicFilterCount) { report.DynamicFilters[0].OpenBraces++; report.DynamicFilters[report.DynamicFilters.Count - 1].CloseBraces++; } } //find invalid parameters if (pars != null && pars.Count > 0) { string stpars = string.Empty; foreach (KeyValuePair<string, string> pair in pars) { if (!string.Equals(pair.Key, PXUrl.PopupParameter, StringComparison.OrdinalIgnoreCase) && !string.Equals(pair.Key, PXUrl.PopupParameter, StringComparison.OrdinalIgnoreCase) && !string.Equals(pair.Key, PXUrl.HideScriptParameter, StringComparison.OrdinalIgnoreCase) && !string.Equals(pair.Key, PXUrl.TimeStamp, StringComparison.OrdinalIgnoreCase) && !string.Equals(pair.Key, PX.Reports.Messages.Action, StringComparison.OrdinalIgnoreCase) && !string.Equals(pair.Key, PX.Reports.Messages.Max, StringComparison.OrdinalIgnoreCase) && !string.Equals(pair.Key, PX.Reports.Messages.Unum, StringComparison.OrdinalIgnoreCase) && !string.Equals(pair.Key, _REPORTID_PARAM_KEY, StringComparison.OrdinalIgnoreCase)) { stpars += pair.Key + ", "; } } if (!string.IsNullOrEmpty(stpars)) { stpars = stpars.Trim(); if (stpars.EndsWith(",")) stpars = stpars.Substring(0, stpars.Length - 1); } if (!string.IsNullOrEmpty(stpars)) { throw new PXException(string.Format(ErrorMessages.ReportDoesNotContainParameters, stpars)); } } }
private static void LoadParameters(object sender, PX.Reports.Controls.Report report, object passed) { var pars = passed as Dictionary <string, string>; if (pars != null) { foreach (PX.Reports.ReportParameter p in report.Parameters) { string val; if (pars.TryGetValue(p.Name, out val)) { p.Value = val; pars.Remove(p.Name); } } } SoapNavigator nav = (SoapNavigator)((PXReportViewer)sender).GetNavigator(); foreach (PX.Reports.ViewerField f in report.ViewerFields) { if (String.IsNullOrEmpty(f.Description) && !String.IsNullOrEmpty(f.Name)) { string name = null; string alias = null; int idx = f.Name.IndexOf('.'); if (idx <= 1) { if (report.Tables.Count > 1) { continue; } name = report.Tables[0].Name + "." + f.Name; } else { alias = f.Name.Substring(0, idx); foreach (PX.Reports.ReportRelation rel in report.Relations) { if (rel.ParentTable != null && String.Compare(rel.ParentAlias, alias, StringComparison.OrdinalIgnoreCase) == 0) { name = rel.ParentTable.Name + "." + f.Name.Substring(idx + 1); break; } if (rel.ChildTable != null && String.Compare(rel.ChildAlias, alias, StringComparison.OrdinalIgnoreCase) == 0) { name = rel.ChildTable.Name + "." + f.Name.Substring(idx + 1); break; } } } if (name != null) { name = nav.GetDisplayName(name) as string; if (name != null && alias != null) { idx = name.IndexOf('.'); if (idx > 1) { name = alias + name.Substring(idx); } } } else { name = nav.GetDisplayName(f.Name) as string; } if (name != null) { f.Description = name; } } } if (pars != null && pars.Count > 0) { int DesignFilterCount = report.Filters.Count; if (DesignFilterCount > 0) { report.Filters[0].OpenBraces++; report.Filters[DesignFilterCount - 1].CloseBraces++; report.Filters[DesignFilterCount - 1].Operator = PX.Reports.FilterOperator.And; } int DynamicFilterCount = report.DynamicFilters.Count; if (DynamicFilterCount > 0) { report.DynamicFilters[0].OpenBraces++; report.DynamicFilters[DynamicFilterCount - 1].CloseBraces++; report.DynamicFilters[DynamicFilterCount - 1].Operator = PX.Reports.FilterOperator.And; } foreach (PX.Reports.ViewerField f in report.ViewerFields) { string val; if (!String.IsNullOrEmpty(f.Description) && pars.TryGetValue(f.Description, out val) || pars.TryGetValue(f.Name, out val)) { PX.Reports.FilterExp exp = new PX.Reports.FilterExp(f.Name, PX.Reports.FilterCondition.Equal); exp.Value = val; report.DynamicFilters.Add(exp); pars.Remove(f.Description); pars.Remove(f.Name); } } int oldCount = report.DynamicFilters.Count - 1; for (int i = 0; oldCount < report.DynamicFilters.Count; i++) { bool skipDeactiv = false; oldCount = report.DynamicFilters.Count; foreach (PX.Reports.ViewerField f in report.ViewerFields) { string val; string fieldName = f.Name.StartsWith("Row") ? f.Name.Substring(3) : f.Name; StringBuilder sbName = new StringBuilder(fieldName); sbName.Append(Convert.ToString(i)); StringBuilder sbDescr = new StringBuilder((f.Description == null) ? fieldName : f.Description); sbDescr.Append(Convert.ToString(i)); #region deactivate some Filters //deactivate some Filters conditions that are passed in the session(or other). //Because new conditions will be added in DynamicFilters conditions. if (!skipDeactiv) { foreach (PX.Reports.FilterExp exp in report.Filters) { if (exp.DataField == fieldName) { if ((pars.TryGetValue(sbDescr.ToString(), out val) || pars.TryGetValue(sbName.ToString(), out val)) && (exp.Condition == PX.Reports.FilterCondition.Equal)) { exp.Condition = PX.Reports.FilterCondition.IsNotNull; exp.Value = exp.Value2 = ""; } } } } #endregion if (pars.TryGetValue(sbDescr.ToString(), out val) || pars.TryGetValue(sbName.ToString(), out val)) { PX.Reports.FilterExp exp = new PX.Reports.FilterExp(f.Name, PX.Reports.FilterCondition.Equal); exp.Value = val; exp.Operator = PX.Reports.FilterOperator.And; report.DynamicFilters.Add(exp); pars.Remove(sbDescr.ToString()); pars.Remove(sbName.ToString()); } } skipDeactiv = true; if (oldCount < report.DynamicFilters.Count) { report.DynamicFilters[report.DynamicFilters.Count - 1].Operator = PX.Reports.FilterOperator.Or; } } if (DesignFilterCount > 0 && report.DynamicFilters.Count > DynamicFilterCount) { report.DynamicFilters[0].OpenBraces++; report.DynamicFilters[report.DynamicFilters.Count - 1].CloseBraces++; } } //find invalid parameters if (pars != null && pars.Count > 0) { string stpars = string.Empty; foreach (KeyValuePair <string, string> pair in pars) { if (!string.Equals(pair.Key, PXUrl.PopupParameter, StringComparison.OrdinalIgnoreCase) && !string.Equals(pair.Key, PXUrl.PopupParameter, StringComparison.OrdinalIgnoreCase) && !string.Equals(pair.Key, PXUrl.HideScriptParameter, StringComparison.OrdinalIgnoreCase) && !string.Equals(pair.Key, PXUrl.TimeStamp, StringComparison.OrdinalIgnoreCase) && !string.Equals(pair.Key, PX.Reports.Messages.Action, StringComparison.OrdinalIgnoreCase) && !string.Equals(pair.Key, PX.Reports.Messages.Max, StringComparison.OrdinalIgnoreCase) && !string.Equals(pair.Key, PX.Reports.Messages.Unum, StringComparison.OrdinalIgnoreCase) && !string.Equals(pair.Key, _REPORTID_PARAM_KEY, StringComparison.OrdinalIgnoreCase)) { stpars += pair.Key + ", "; } } if (!string.IsNullOrEmpty(stpars)) { stpars = stpars.Trim(); if (stpars.EndsWith(",")) { stpars = stpars.Substring(0, stpars.Length - 1); } } if (!string.IsNullOrEmpty(stpars)) { throw new PXException(string.Format(ErrorMessages.ReportDoesNotContainParameters, stpars)); } } }