powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Reporting Services: зависимые переменные
8 сообщений из 8, страница 1 из 1
Reporting Services: зависимые переменные
    #38552300
Demer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Продолжаю пилить по этой теме Reporting Services multi ParameterValue
Столкнулся с тем, что некоторые параметры отчета являются зависимыми от других параметров и берут свои значения из БД.
Т.е. есть Регион и есть Город, при выборе региона появляется список городов в этом регионе (загружается путем обращения к БД)

Регион прикрепляю так:
Код: c#
1.
ParameterValue[] paramValues = new[] {new ParameterValue {Name = "RegionID", Value = "78" }}


После этого рендерю отчет:
Код: c#
1.
2.
_rs.SetExecutionParameters(paramValues , "en-us");
result = _rs.Render(format, null, out extension, out encoding, out mimeType, out warnings, out streamIDs);



Но естественно возникает ошибка так как Город является обязательным параметром и он не задан.

Вопрос: как программно установить первое (или хотя бы просто любое) значение города из списка, предварительно получив этот список?
Или подскажите хотя бы как посмотреть возможные значения (ValidValues)

Я думал у параметра будет в свойствах указан DataSet по которому будет обращение к БД или хотя бы строка SQL, но ничего похожего. Единственное, что нашел это Dependencies = RegionID (указывает параметр от которого зависит) и State = HasOutstandingDependencies (говорит о том, что параметр является зависимым)...
...
Рейтинг: 0 / 0
Reporting Services: зависимые переменные
    #38552515
Andrews25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Demer,
ValidValues[] является свойством элемента массива Parameters[], который в свою очередь является свойством
переменной типа ExecutionInfo, которая устанавливается у Вас через _rs.LoadReport(reportPath, historyID);

http://stackoverflow.com/questions/7650879/get-value-of-default-report-parameters-after-running-reportexecutionservice-rend
...
Рейтинг: 0 / 0
Reporting Services: зависимые переменные
    #38552791
Demer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrews25,

Это я понимаю. Но как получить список значений у зависимого параметра?
...
Рейтинг: 0 / 0
Reporting Services: зависимые переменные
    #38552875
Andrews25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Demer,

идея описана здесь


http://stackoverflow.com/questions/17678435/how-can-i-pass-cascading-parameters-from-asp-net-to-ssrs

но там ошибки в методе setSingleValueParameter

я бы написала его так
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
public ExecutionInfo setSingleValueParameter(String name, String value, ReportExecutionProxy _rs )
        {
            ParameterValue[] parameter = new ParameterValue[1];
            parameter[0] = new ParameterValue();
            parameter[0].Name = name;
            parameter[0].Value = value;
           return _rs.SetExecutionParameters(parameter, "en-us");
            
        }



в возвращаемом ExecutionInfo потом уже содержатся availalues параметров, зависимых от того параметра, который мы только что установили
...
Рейтинг: 0 / 0
Reporting Services: зависимые переменные
    #38552961
Demer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrews25,

Идея хорошая, но у меня не заработала...
Вот так пытаюсь получить список всех параметров отчета со списком значений:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
public class Reports : IReports
{
    ReportExecutionService _rs;

    public Reports()
    {
         _rs = new ReportExecutionService();
        _rs.Credentials = System.Net.CredentialCache.DefaultCredentials;   

        param = GetReportParameters(reportName);     
    }

    private ParamValue[] GetReportParameters(string nameReport)
    {
        var report = GetReportInfo(nameReport);
        List<ParamValue> pv = new List<ParamValue>();
        if (report == null) return null;

        var param = report.Parameters;
        if (param != null)
        {
            foreach (ReportParameter p in param)
            {
                pv.Add(new ParamValue()
                {
                    Name = p.Name,
                    Label = p.Prompt,
                    Type = p.Type.ToString(),
                    Nullable = p.Nullable,
                    AllowBlank = p.AllowBlank,
                    MultiValue = p.MultiValue,
                    Required = (p.DefaultValues == null),
                    Values = GetValidValues(p),
                    Dependencies = p.Dependencies
                });
                SetDefaultValues(p.Name, GetValidValues(p), p.MultiValue);
            }
        }
        return pv.ToArray();
    }

    private void SetDefaultValues(string name, ParamValidValues[] values, bool multi)
    {
        if (values.Length > 0)
        {
            ParameterValue[] parameter = new ParameterValue[values.Length];
            for (int i = 0; i < values.Length; i++)
            {                    
                parameter[i] = new ParameterValue();
                parameter[i].Name = name;
                parameter[i].Value = values[i].Value;                    
            }
            _rs.SetExecutionParameters(parameter, "en-us");
        }
    }

}

public class Report
{
    public string Name { get; set; }
    public string Description { get; set; }
    public bool Rights { get; set; }
    public ParamValue[] Parameters { get; set; }
}
public class ParamValue
{
    public string Name { get; set; }
    public string Label { get; set; }
    public string Type { get; set; }
    public ParamValidValues[] Values { get; set; }
    public bool Nullable { get; set; }
    public bool MultiValue { get; set; }
    public bool AllowBlank { get; set; }
    public bool Required { get; set; }
    public bool Hide { get; set; }
    public string[] Dependencies { get; set; }
}
public class ParamValidValues
{
    public string Label { get; set; }
    public string Value { get; set; }
}
...
Рейтинг: 0 / 0
Reporting Services: зависимые переменные
    #38552983
Demer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё пару методов забыл написать:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
        private ExecutionInfo GetReportInfo(string nameReport)
        {
            try
            {
                var r = _rs.LoadReport(_reportPath + nameReport, null);
                return r;
            }
            catch { return null; }
        }

        private ParamValidValues[] GetValidValues(ReportParameter param)
        {
            List<ParamValidValues> values = new List<ParamValidValues>();
            ValidValue[] vals = param.ValidValues;
            if (vals != null)
            {
                foreach (ValidValue v in vals)
                    values.Add(new ParamValidValues() { Label = v.Label, Value = v.Value });
            }
            return values.ToArray();
        }
...
Рейтинг: 0 / 0
Reporting Services: зависимые переменные
    #38553006
Andrews25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Demer,

хм ...
и что Ваш код получает каскадные значения параметров??

у меня Ваш код работает после адаптации с помощью вышеуказанного метода setSingleValueParameter


вот измененный кусок (ID зависит от Type)

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
              ExecutionInfo _report = _rs.LoadReport(reportPath, historyID);
                ExecutionInfo _report1 = setSingleValueParameter("Type", "1", _rs);
                ValidValue[] avail1vals = _report1.Parameters[1].ValidValues;
                

                // Вот здесь я пытаюсь сделать множественный выбор для ID
                ParameterValue[] paramValues = new[] {
                        new ParameterValue {Name = "ID", Value = avail1vals[1].Value },
                        new ParameterValue {Name = "ID", Value = avail1vals[2].Value},
                        //new ParameterValue {Name = "Type", Value = "56" } 
                };
...
Рейтинг: 0 / 0
Reporting Services: зависимые переменные
    #38553028
Demer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrews25,

Действительно, этот код заработал
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Reporting Services: зависимые переменные
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]