Страница 1 из 1

Инициализация переменной типа список из адресной строки

Добавлено: 14 мар 2024, 18:21
volokitindv
Добрый день!

Ориентируюсь на ваш пример передачи значений переменных из URL в отчет:

Код: Выделить всё

function getUrlVars() {
    var vars = {};
    var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi,
        function (m, key, value) {
            vars[key] = value;
    });
    return vars;
}

var vars = getUrlVars();
report.dictionary.variables.list.forEach(function(item, i, arr) {
    if (typeof vars[item.name] != "undefined") item.valueObject = vars[item.name];
});
Этот код работает хорошо до тех пор, пока переменная не является списком (в моем случае, списком строк).

Подскажите, пожалуйста, как присвоить несколько значений переменной. Я пробовал "в лоб", типа

Код: Выделить всё

item.valueObject = ["aaa", "bbb"];
, но не получилось - переменная не инициализируется.

Re: Инициализация переменной типа список из адресной строки

Добавлено: 15 мар 2024, 02:50
Aleksey
Здравствуйте,

Попробуйте следующий код

Код: Выделить всё

var newVariable = new Stimulsoft.Report.Dictionary.StiVariable();
newVariable.name = "Variable";
newVariable.alias = "Variable";
newVariable.type = Stimulsoft.System.StimulsoftStringList;
newVariable.requestFromUser = true;
var di = new Stimulsoft.Report.Dictionary.StiDialogInfo();
di.allowUserValues = false;
di.keys = ["1", "2", "3", "4"];
di.values = ["1", "2", "3", "4"];
newVariable.dialogInfo = di;
report.dictionary.variables.add(newVariable);
designer.onPreviewReport = function (args) {
  args.report.setVariable("Variable", ["1", "4"]);}
Спасибо.

Re: Инициализация переменной типа список из адресной строки

Добавлено: 15 мар 2024, 07:47
volokitindv
Я объявляю переменную в шаблоне отчета, а источником являются колонки данных. При этом для переменной установлен признак "Запросить у пользователя".

Вот так выглядит диалог настройки переменной: https://disk.yandex.ru/i/AiRhG-pb7nMEzQ.

Следуя вашему совету, использую такой код:

Код: Выделить всё

viewer.onBeginProcessData = (args, _callback) => {
    args.report.setVariable('reflist', ['0bb1cb7d-4f44-4492-8391-525ad1e66d64']);
};
И код даже работает: видно, что на сервер улетает запрос за данными с указанной мною переменной в параметрах запроса. Но следом летит запрос, где в параметрах указаны все возможные значения переменой, т.е. как-будто юзер выбрал все значения в выпадающем списке на панели параметров отчета во вьювере.

Как-нибудь можно отменить второй запрос?

Re: Инициализация переменной типа список из адресной строки

Добавлено: 19 мар 2024, 21:15
Aleksey
Здравствуйте,

Попробуйте задать опцию RequestParameters для отчета. В этом случае, отчет будет строиться только после подтверждения выбранных значений.

Спасибо.