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));
			}
		}
	}
示例#2
0
    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));
            }
        }
    }