Вопрос

Передача объекта из клиентской логики в бизнес-процесс, и наоборот

Добрый день! Передо мной стоит задача добавления идентификаторов выбранных в разделе записей в другую таблицу.

Я получаю список выделенных строк, но перед тем, как записать их в другую таблицу мне нужно дать пользователю выбрать некоторые параметры. И тут я вижу два пути:

1. Передать список нужных Id в бизнес-процесс, открыть из этого процесса преднастроенную страницу с выбором параметров, и произвести запись. Здесь проблема в том, как передать этот список Id в БП. Их можно сериализовать в строку, но строка большой длины не передастся в качестве параметра, во всяком случае вызов:

ProcessModuleUtilities.executeProcess(processArgs)

выдает ошибку при передаче длинной строки. А количество Id у меня может достигать нескольких тысяч.

2. Сделать insert нужных мне данных прямо из раздела. Но для этого мне всё равно нужно открыть преднастроенную страницу и получить от неё нужные параметры.

Подскажите, пожалуйста, есть ли какое-нибудь решение моей задачи?

Нравится

4 комментария
Лучший ответ

Добрый день Иван.



Я бы тогда создал Временную таблицу и туда бы с помощью 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, который и передать в процесс, а потом по нему фильтровать. Когда станут не нужны — по нему же фильтровать и в запросе удаления.
Показать все комментарии