Передача объекта из клиентской логики в бизнес-процесс, и наоборот
Добрый день! Передо мной стоит задача добавления идентификаторов выбранных в разделе записей в другую таблицу.
Я получаю список выделенных строк, но перед тем, как записать их в другую таблицу мне нужно дать пользователю выбрать некоторые параметры. И тут я вижу два пути:
1. Передать список нужных Id в бизнес-процесс, открыть из этого процесса преднастроенную страницу с выбором параметров, и произвести запись. Здесь проблема в том, как передать этот список Id в БП. Их можно сериализовать в строку, но строка большой длины не передастся в качестве параметра, во всяком случае вызов:
ProcessModuleUtilities.executeProcess(processArgs)
выдает ошибку при передаче длинной строки. А количество Id у меня может достигать нескольких тысяч.
2. Сделать insert нужных мне данных прямо из раздела. Но для этого мне всё равно нужно открыть преднастроенную страницу и получить от неё нужные параметры.
Подскажите, пожалуйста, есть ли какое-нибудь решение моей задачи?
Нравится
Добрый день Иван.
Я бы тогда создал Временную таблицу и туда бы с помощью Insert "Terrasoft.BatchQuery" поклал на стороне JavaScript все выбранные ID записи. И далее бы вызвал БП. Но скорее всего если записей много то это скорее приведет к долгому ожиданию
Второй способ по которому бы я пошел это перехватил бы и выгрузил в TXT SQL запрос что система генерирует, где результат запроса это выбранные ID записи. И данный запрос передал бы уже на C# сторону и там бы его уже выполнил и далее обработал бы. я бы пошел по 2 пути.
Вы можете получив список ID, вызвать мини-карточку(предварительно создав), там предоставьте выбор параметров, а при сохранении уже по данным параметрам делайте вставку в БД ранее полученных записей.
Добрый день Иван.
Я бы тогда создал Временную таблицу и туда бы с помощью Insert "Terrasoft.BatchQuery" поклал на стороне JavaScript все выбранные ID записи. И далее бы вызвал БП. Но скорее всего если записей много то это скорее приведет к долгому ожиданию
Второй способ по которому бы я пошел это перехватил бы и выгрузил в TXT SQL запрос что система генерирует, где результат запроса это выбранные ID записи. И данный запрос передал бы уже на C# сторону и там бы его уже выполнил и далее обработал бы. я бы пошел по 2 пути.
Власов Михаил Викторович,
Спасибо, Михаил! Я как раз пошел по первому из предложенных Вами вариантов, про второй я тоже думал, но не смог найти, как получить текст запроса из сформированного мной экземпляра esq. Если Вы знаете, и поделитесь этим знанием, я был бы очень признателен.
На сервере получить из ESQ запрос можно:
string esqSqlText = esqQuery.GetSelectQuery(UserConnection).GetSqlText();
По изначальному вопросу, можно ещё много разных подходов:
- Записывать все данные в хранилище и передавать ключ.
- Сделать не временную, а обычную таблицу и к ней схему в конфигурации. Писать в одно поле ключи интересующих записей, а в другое — одинаковый для всех Id, который и передать в процесс, а потом по нему фильтровать. Когда станут не нужны — по нему же фильтровать и в запросе удаления.