Вопрос

Всем доброго времени суток. Версия 7.12.

Был создан раздел при помощи мастера. В процессе разработки возникла необходимость разделить пакет, в котором ведётся разработка.

Можно ли как-нибудь перенести раздел целиком, не нарушая связи между отдельными объектами (схемами и т.д.)?

У меня такой же вопрос

1 комментарий

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

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Всем доброго времени суток. Версия 7.12.

Есть в системе раздел "Журнал процессов", есть на странице запущенного процесса деталь "Элементы процесса". По сути можно с их помощью получить данные о текущих бизнес-процессах и отследить, на какой стадии (элементе) выполнения находится в данный момент процесс.

А можно ли как-нибудь по guid запущенного процесса найти значения параметров процесса на момент запроса? Может быть есть какой-нибудь объект, где хранятся значения параметров?

У меня такой же вопрос

2 комментария

Добрый день, может SysProcessElementData?
Не пробовали?

Или SysProcessData, нужно смотреть. В обеих значение поля PropertiesData можно вывести в SQL-запросе читаемым так:

cast(PropertiesData as varchar(max))

 

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Здравствуйте, возникла необходимость выводить из bpmonline в word иерархию объектов, то-есть записи раздела с связанными записями другого объекта(те что в детали).  Например, есть Объект "Торговый центр" в его карточке есть деталь "магазины" в каждом магазине есть деталь "оборудование". Необходимо выводить в печатную форму Объект "Торговый центр" со всеми связанными "магазинами" и выводить все "оборудование" в этом магазине.

В поддержке террасофта сказали что такое можно только в devExpress и разработкой вроде как. Кто сталкивался с таким, подскажите пожалуйста как такое можно реализовать, если это делается только с помощью devExpress, то как это в нем сделать и если можно ссылку на какие нибудь инструкции.Заранее спасибо

У меня такой же вопрос

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

Такое можно попробовать реализовать и с помощью печатных форм Word.

Основная задача будет в реализации view (представления), которое будет содержать подготовленный набор данных.

То есть в вашем случае Вам нужно реализовать такое представление, в котором бы записи шли в таком порядке:

родительская запись 1,

дочерняя запись 1,

дочерняя запись 2 и т. д.,

родительская запись 2 и т.д.

Для того, чтобы Ваши записи шли в строго нужном Вам порядке нужно добавить служебное поле 'Номер', по которому Вы будете сортировать записи.

Такое можно попробовать реализовать и с помощью печатных форм Word.

Основная задача будет в реализации view (представления), которое будет содержать подготовленный набор данных.

То есть в вашем случае Вам нужно реализовать такое представление, в котором бы записи шли в таком порядке:

родительская запись 1,

дочерняя запись 1,

дочерняя запись 2 и т. д.,

родительская запись 2 и т.д.

Для того, чтобы Ваши записи шли в строго нужном Вам порядке нужно добавить служебное поле 'Номер', по которому Вы будете сортировать записи.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Всем доброго времени суток. Версия 7.12.

Есть стандартный фильтр в ESQ-запросе, например, такой:

esq.filters.add("Filter", Terrasoft.createColumnInFilterWithParameters("Number", ["79219259027"]));

Есть получение колонок в данных фильтра, в том числе получение отображаемой колонки, не зная её названия:

esq.addMacrosColumn(Terrasoft.QueryMacrosType.PRIMARY_DISPLAY_COLUMN, "PrimaryDisplayColumnValue");

А можно ли организовать поиск по значению отображаемой колонки? Такой вариант:

esq.filters.add("Filter", Terrasoft.createColumnInFilterWithParameters("PrimaryDisplayColumnValue", ["79219259027"]));

выдаёт ошибку о том, что такой колонки не существует.

У меня такой же вопрос

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

Варфоломеев Данила,

Насколько я поняла вопрос, то речь о том, чтобы взять primaryDisplayColumn корневой схемы, которая указана в  EntitySchemaQuery.

Такой реализации я нигде не встречала, потому могу предположить, что такого нет(

 

можно взять отображаемую колонку из this.entitySchema.primaryDisplayColumn.name

Варфоломеев Данила,

Насколько я поняла вопрос, то речь о том, чтобы взять primaryDisplayColumn корневой схемы, которая указана в  EntitySchemaQuery.

Такой реализации я нигде не встречала, потому могу предположить, что такого нет(

 

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Здравствуйте! Не нашел в академии, что означают события на объекте "Перед загрузкой данных" и "После загрузки данных". В каких случаях они применяются?

У меня такой же вопрос

2 комментария

Это события Loading и Loaded. Первое срабатывает до загрузки значений полей в цикле, второе —после.

Посмотреть, в каких схемах объектов они применяются, можно запросом в базу:

select *
from SysSchemaSource
where (source like '%loading +=%' or source like '%loaded +=%')
and  not (name  like '%page.cs')

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

Зверев Александр,

спасибо за ответ!

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Всем доброго времени суток. Версия 7.12.

В работе бизнес-процесса используется элемент Задание-сценарий. Сам процесс запускается с клиентского модуля при помощи вызова с параметрами.

 

Вопрос 1. Существуют параметры, которые используются внутри процесса первый раз внутри сценария. Для этого требуется получить значение параметра, примерно таким образом:

var Number = Get<String>("Number");

Заметил, что если параметр Number до этого вызова не использовался процессе, то при подобном вызове из сценария значение переменной Number оказывается пустым, либо, если задано значение по умолчанию - равно значению по умолчанию.

В то же время, параметр заполняется при вызове процесса внутри клиентского модуля в соответствии с инструкцией https://academy.terrasoft.ua/documents/technic-sdk/7-13/zapusk-processa… Однако чтобы правильное значение оказалось внутри script task'а, приходится использовать вот такой костыль:

То есть подставлять внутрь параметра его собственно значение! Что это - "баг, или фича?"(с)

 

Вопрос 2. Можно ли каким-то образом обработать ситуацию, когда параметра Number в процессе не существует? То есть не задан вообще (даже не то, что не заполнен, а просто не создан как параметр процесса), но вызывается при помощи указанного выше кода. Или в этом случае просто переменная Number останется undefined?

У меня такой же вопрос

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

1) "фича". фиксилась простановкой галки "компилируемый процесс", но теперь видимо всё. именно по этой причине у меня все подпроцессы компилируемые.

2) вроде как null будет 

1) "фича". фиксилась простановкой галки "компилируемый процесс", но теперь видимо всё. именно по этой причине у меня все подпроцессы компилируемые.

2) вроде как null будет 

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Всем доброго времени суток. Версия 7.12.

Есть бизнес-процесс с параметрами, вызывается из клиентской схемы.

Среди параметров есть параметр типа "Дата/Время". Попробовал передать туда обычную дату this.get("WSStartDate"), в результате при запуске процесс выдаёт ошибку: "Строка не распознана как действительное значение DateTime".

Как правильно передавать такие параметры в бизнес-процессы?

У меня такой же вопрос

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

Это ошибка ядра.

Обойти её можно таким образом. На входе в БП или перед тем, как Вы собираетесь работать с этим параметром нужно добавить элемент скрипт-таск и прописать приблизительно такой код:

var shipmentDateString = Get<string>("ShipmentDateString");
if (!string.IsNullOrEmpty(shipmentDateString)) {
    var shipmentDate = DateTime.ParseExact(shipmentDateString.Substring(0, 24), "ddd MMM d yyyy HH:mm:ss",
        CultureInfo.InvariantCulture);
    Set("ShipmentDate", shipmentDate);
}

и в БП использовать уже другой параметр с установленным значением.

В моем примере на входе у нас параметр "ShipmentDateString", который мы передаем в процесс с клиента, а на выходе параметр "ShipmentDate", с которым мы работаем уже в самом БП.

Это ошибка ядра.

Обойти её можно таким образом. На входе в БП или перед тем, как Вы собираетесь работать с этим параметром нужно добавить элемент скрипт-таск и прописать приблизительно такой код:

var shipmentDateString = Get<string>("ShipmentDateString");
if (!string.IsNullOrEmpty(shipmentDateString)) {
    var shipmentDate = DateTime.ParseExact(shipmentDateString.Substring(0, 24), "ddd MMM d yyyy HH:mm:ss",
        CultureInfo.InvariantCulture);
    Set("ShipmentDate", shipmentDate);
}

и в БП использовать уже другой параметр с установленным значением.

В моем примере на входе у нас параметр "ShipmentDateString", который мы передаем в процесс с клиента, а на выходе параметр "ShipmentDate", с которым мы работаем уже в самом БП.

Алла Савельева,

Спасибо за ответ. Я правильно понимаю, что параметр ShipmentDateString - строковый? И как всё-таки в него дата передаётся? В виде строки формата "dd MM yyyy HH:mm:ss"? Или просто можно значение колонки туда из клиентской схемы передать как есть?

Смородинов Денис,

Да, передаете, как есть:

this.get("ShipmentDate")

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день.

 

При автоматическом создании контакта, через настроенный через лендинг Лид, не запускается бизнес-процесс “Идентификация лида”. 

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

Т.е Клиент зарегистрировался на форме сайта, в разделе [Лиды] создался Лид, в разделе [Контакты] создался контакт. Но процесс  “Идентификация лида” не стартовал. 

Вроде это стандартный функционал...

Спасибо.

У меня такой же вопрос

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

Марина Федоровна день добрый

вам требуется заместить схему Таблицы "Lead" из пакета "WebLeadForm", и далее в Замещенной схеме таблицы Переопределить метод "LeadInserted" и там в зависимости от ваших Кейсов и логики реализовать Новые правила для запуска бизнес процесса "LeadManagementIdentification" ("Идентификация лида") именно отсюда идет вызов данного Бизнес-процесса

Марина Федоровна день добрый

вам требуется заместить схему Таблицы "Lead" из пакета "WebLeadForm", и далее в Замещенной схеме таблицы Переопределить метод "LeadInserted" и там в зависимости от ваших Кейсов и логики реализовать Новые правила для запуска бизнес процесса "LeadManagementIdentification" ("Идентификация лида") именно отсюда идет вызов данного Бизнес-процесса

Власов Михаил Викторович,

Михаил, день добрый. Спасибо.

Вообщем-то для клиента - это получается доработка.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Попытался вставить  console.log("test") в текст модуля замещающего  FileDetailV2

получил ошибку 'console' is not defined

почему? как исправить?

У меня такой же вопрос

4 комментария

показалось что нашел решение в примерах сообщества = есть вариант (правда непонятно почему не работает классика - она в примерах так же присутствует) :


 
window.console.log("test")

однако он позволяет обойтись без ругани BPM на ошибки не работая фактически - в консоль ничего не выводится все равно

Это зависит от браузера. Например, в IE они доступны только если открыта панель разработчика. См. обсуждения.

Зверев Александр, прошу прощения , я видимо неточно выразился. НЕРАБОТАЕТ имеется ввиду что BPM отказывается вообще его воспринимать в коде - выдает ошибку 'console' is not defined при попытке сохранить модуль. Вариант window.console.log такой ошибки не выдает - хотя и не выводит ничего в консоль. Естественно - я пользуюсь панелью разработчика.

Значит, в Вашем браузере такого объекта не предусмотрено.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

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

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

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