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

Обсуждение Stimulsoft Reports.JS
Ответить
volokitindv
Сообщения: 4
Зарегистрирован: 11 фев 2020, 00:07

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

Сообщение 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"];
, но не получилось - переменная не инициализируется.
Aleksey
Сообщения: 2793
Зарегистрирован: 22 апр 2010, 06:57

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

Сообщение 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"]);}
Спасибо.
volokitindv
Сообщения: 4
Зарегистрирован: 11 фев 2020, 00:07

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

Сообщение volokitindv »

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

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

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

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

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

Как-нибудь можно отменить второй запрос?
Aleksey
Сообщения: 2793
Зарегистрирован: 22 апр 2010, 06:57

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

Сообщение Aleksey »

Здравствуйте,

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

Спасибо.
Ответить