На клиенте получить массив структур из сериализованных данных. Как?
Дано: некая обработка, использующая механизм "длительные операции" БСП, обработка умеет получать прогресс длительной операции.
Кто не в курсе, то типовой механизм умеет передавать отдельно числовое и строковое значения в качестве прогресса.
Вопрос: каким образом выполнить сериализацию массива структур, чтобы можно было без вызова сервера получить на клиенте?
В структурах содержатся исключительно сериализуемые типы данных: число и строка.
Навскидку приходит вариант с двоичными данными, но что-то я не могу придумать, как их изящно получить из массива структур на стороне сервера. Такое вообще возможно, не прибегая ко всяким хакам вида ЗначениеВФайл и последующего чтения этого файла в ДД?
Кто не в курсе, то типовой механизм умеет передавать отдельно числовое и строковое значения в качестве прогресса.
Вопрос: каким образом выполнить сериализацию массива структур, чтобы можно было без вызова сервера получить на клиенте?
В структурах содержатся исключительно сериализуемые типы данных: число и строка.
Навскидку приходит вариант с двоичными данными, но что-то я не могу придумать, как их изящно получить из массива структур на стороне сервера. Такое вообще возможно, не прибегая ко всяким хакам вида ЗначениеВФайл и последующего чтения этого файла в ДД?
По теме из базы знаний
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) 1.Хранилище значения не доступно на клиенте.
2. Если имеется в виду ВременноеХранилище, то данные, помещенный во временное хранилище внутри ФЗ будут не доступны в другом сеансе до завершения ФЗ.
Мне необходимо получать данные в процессе работы ФЗ, с этим проблем нет, проблемы исключительно в возможности сериализации данных.
2. Если имеется в виду ВременноеХранилище, то данные, помещенный во временное хранилище внутри ФЗ будут не доступны в другом сеансе до завершения ФЗ.
Мне необходимо получать данные в процессе работы ФЗ, с этим проблем нет, проблемы исключительно в возможности сериализации данных.
Я использую такой код. Разве тут есть проблема с получением данных (формированием структуры из полученной строки)?
&НаКлиенте
Процедура Подключаемый_ПроверитьВыполнениеЗадания_ЗагрузкаДанных()
Попытка
Если ЗаданиеВыполнено(ИдентификаторЗадания) Тогда
ЗагрузитьПодготовленныеДанныеЗагрузкаДанныхНаСервере();
ДлительныеОперацииКлиент.ЗакрытьФормуДлительнойОперации(ФормаДлительнойОперации);
СообщитьОбОкончанииЗагрузкиДанных();
Иначе
ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания);
ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания_ЗагрузкаДанных",
ПараметрыОбработчикаОжидания.ТекущийИнтервал,
Истина
);
// показать прогресс выполнения фонового задания
Прогресс = ПолучитьПрогрессВыполнения(УникальныйИдентификатор);
Если СтрЧислоСтрок(Прогресс) = 3 Тогда
Состояние(СтрПолучитьСтроку(Прогресс,1), Число("0"+СтрПолучитьСтроку(Прогресс,2)), СтрПолучитьСтроку(Прогресс,3));
КонецЕсли;
КонецЕсли;
Исключение
ДлительныеОперацииКлиент.ЗакрытьФормуДлительнойОперации(ФормаДлительнойОперации);
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаСервере
Функция ПолучитьПрогрессВыполнения(УникальныйИдентификатор)
Прогресс = "";
НайденныеЗадания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Новый Структура("Ключ", УникальныйИдентификатор));
Задание = НайденныеЗадания[0];
МассивСообщений = Задание.ПолучитьСообщенияПользователю(Истина);
Если МассивСообщений <> Неопределено Тогда
Для Каждого Сообщение Из МассивСообщений Цикл
Если Сообщение.ИдентификаторНазначения = УникальныйИдентификатор Тогда
Прогресс = Сообщение.Текст;
КонецЕсли;
КонецЦикла;
Конецесли;
Возврат Прогресс;
КонецФункции
Показать
(14) Получить строку прогресса из ФЗ проблем не вызывает, проблемы вызывает то, что внутри строки есть некие ключевые значения(не строкового типа), по которым необходимо выполнять обращение к строке дерева, устанавливать значения в колонки дерева, делать еще что-то....
Не хотелось бы это все парсить "вручную", хотелось бы просто получить массив структур и обработать уже его.
Не хотелось бы это все парсить "вручную", хотелось бы просто получить массив структур и обработать уже его.
(16) Да они не доступны на клиенте - в этом вся сложность.
На клиенте доступно только ДД в виде сериализованного значения и ЧтениеДанных(ДвоичныеДанные)
В ПолучитьПрогрессВыполнения() я вмешиваться не буду. Я могу внутри ФЗ установить нужные мне значения, выдаваемые в прогресс.
На клиенте доступно только ДД в виде сериализованного значения и ЧтениеДанных(ДвоичныеДанные)
В ПолучитьПрогрессВыполнения() я вмешиваться не буду. Я могу внутри ФЗ установить нужные мне значения, выдаваемые в прогресс.
(25) в 23 версии платформы появились эти новые методы, которые и в веб работают.
Глобальный контекст (Global context)
ПрочитатьЗначениеJSON (ReadJSONValue)
Синтаксис:
ПрочитатьЗначениеJSON(<Строка>)
...
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.3.23.
ПрочитатьЗначениеJSON (ReadJSONValue)
Синтаксис:
ПрочитатьЗначениеJSON(<Строка>)
...
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.3.23.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот