Вопрос

Можно ли как-то прочитать название если в объекте в колонке указан справочник, так как там указан Guid?

Пример:

[#Читать данные контакта.Первый элемент результирующей коллекции.Страна#] узнать название страны при чтении из "Читать данные"

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

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

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

Можно получить нужное вам значение 2 вариантами.

1. Первый способ - 2-мя элементами 'Чтение данных'. Одним вычитываете Id города из Вашего объекта, а вторым название города по его Id из предыдущего элемента.

2. Второй способ сразу вычитать данные в элементе скрипт таск с помощью EntitySchemaQuery.

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

Можно получить нужное вам значение 2 вариантами.

1. Первый способ - 2-мя элементами 'Чтение данных'. Одним вычитываете Id города из Вашего объекта, а вторым название города по его Id из предыдущего элемента.

2. Второй способ сразу вычитать данные в элементе скрипт таск с помощью EntitySchemaQuery.

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

Первый способ не подходит, там 18 справочником, выйдет многовато читать. Второй способ я использовал, но руководство не совсем приветствует использование C# скриптов

Придётся делать подряд 2 элемента чтения данных: в первом читать из контакта Id страны, во втором — из справочника стран, отфильтрованного по этому Id, получать название.

Зверев Александр у меня 6 таблиц которые нужно заполнить данными. Для каждой таблицы порядка 20 справочников читать. Выйдет адский труд

Если таких слишком много и писать скрипты не хотите, можно ещё сделать view с текстовыми колонками, потом создать по нему объект и работать с ним.

Prime Source,

Prime Source пишет:
руководство не совсем приветствует использование C# скриптов

Главное с этим не злоупотреблять, в данном случае это оптимальный вариант.

К сожалению, пока вычитать данные из связанных таблиц в элементе 'Чтение данных' невозможно.

Как вариант, можно реализовать представление, которое содержит все нужные данные и обращаться к нему из элемента 'Чтение данных', но это такой вариант костыля и потом, так как мне не до конца известна Ваша задача, то не факт, что представление будет лучше, чем C# код.

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

Спасибо, мне нужно было что бы люди тоже подтвердили мое мнение начальству. Скрипт я написал, он сам чиатет и сам пишет все в таблице трансферную которую мне нужно

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

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

Добрый день!

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

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

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

нет, точнее так:

1. Если запускаете из пользовательского интерфейса - там только на запуск, нельзя отследить окончание выполнения.

2. Если есть преднастроенные страницы (кастомные), то можно в них последовательно включать и выключать маску.

3. Никто не помешает пользователю нажать рефреш :)

нет, точнее так:

1. Если запускаете из пользовательского интерфейса - там только на запуск, нельзя отследить окончание выполнения.

2. Если есть преднастроенные страницы (кастомные), то можно в них последовательно включать и выключать маску.

3. Никто не помешает пользователю нажать рефреш :)

Дмитрий Степанов,

Дмитрий, добрый день!
Спасибо за предложенные варианты.
Мне не совсем они подходят, возможно я не совсем точно описал кейс.
Кейс состоит в том, что:
последовательно выполняются три подпроцесса:
1) Первый заканчивается

преднастроенной страницей, далее идет переход во 2-й подпроцесс

2) Второй подпроцесс без страниц, и он выполняется достаточно долго(порядка 10 сек). В это время отображается единое окно и пользователь может быть сбит с толку.

3) После выполнения 2-го процесса запускается 3-й процесс с преднастроенной страницей. 

Вопрос в том, чтобы как-то залочить экран пользователя, чтобы перед поднятием страницы в 3-м процессе он во время временного окна никуда не перешел из единого окна.

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

В описанном примере можно попробовать так: одновременно с запуском длительного фонового процесса показать ещё одну преднастроенную страницу без всяких элементов управления, но с поясняющей надписью или картинкой, а логику её закрытия реализовать путём отправки из процесса сообщения по Websocket.

 

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

Александр, спасибо за идею. Похоже на самый реалистичный вариант.

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

Добрый день! 

Возникла проблема с обработкой ответа в массиве, при вызове веб-сервиса через стандартный элемент в бизнес-процессе.

В настройках раздела "Веб-сервисы" есть деталь "Методы сервиса", при настройке обработки ответа, есть поле "Является массивом", при его активации, в бизнес-процессе возможность записать данный ответ в параметр БП для дальнейшей обработки представляет возможным только с типом данных "Коллекция значений с атрибутами", и соответственно разобрать это можно только с помощью "Задания-сценарий"

Пример настройки ответа:
 

Вопрос, как разобрать обработанный ответ?

Как я понял, нужно обращаться к ICompositeObjectList, но совсем не понятно, как это работает...

Пример ответа (Для каждого контакта поля в выборке id, name, phone):

 

 

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

7 комментариев

Вам нужен пример, как эти данные в коде обработать?

Если бы результат всегда возвращал одну запись в массиве, парсинг  можно было бы организовать при настройке параметров. Плюс у Вас ещё и элементы массива тоже, по сути, являются записями с 4 полями. Можно ещё попробовать считать всё внутри квадратных скобок в одну большую текстовую переменную, а потом разбирать программно в скрипте, наполняя массив или список объектов с полями. В 7.13 обещают изменения в движке веб-сервисов, возможно, стоит чуть подождать и он сможет и такое автоматически разобрать, как минимум, до массива строк.

Литвинко Павел,
Да. А если ещё конкретнее, то пример, как разобрать массив уже "обработанный" стандартными возможностями обработки ответа (первый скрин).

Попытки посмотреть, что возвращает данная обработка не увенчались успехом

По скольку в академии этот вопрос "опущен", но такая необходимость возникает. Сейчас в стандартном поле "Ответ сервиса" непонятный html документ вываливается, даже без данного массива, но HTTP ответ 200

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

если бы одну, то проблем бы конечно было меньше, но интересует выборка большого кол-ва данных

да, тоже такого варианта придерживаюсь "Можно ещё попробовать считать всё внутри квадратных скобок в одну большую текстовую переменную, а потом разбирать программно в скрипте"

Но, сейчас в ответе сервиса html документ без данного ответа но с кодом 200, и также интересно, что же все таки возвращает эта настройка обработки ответа, та, что на первом скрине

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

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

Действительно, пересобрал сейчас - заработало, видимо что-то пропустил)
То есть Fiddler должен вернуть обработанный ответ? 

Плясать от ответа сервиса(как на втором скрине) - в принципе не самое худшее, но для чего тогда сделали "Является массивом", при том, что ответ сервера пересобирается в таком случае в неведомый интерфейс IObjectList который можно записать в параметр "Коллекция значений" и уже исходя из него что-то делать...

https://academy.terrasoft.ru/api/netcoreapi/7.12.0/Terrasoft.Common~Ter…

 

Fiddler позволяет посмотреть, какие запросы и ответы ходили по HTTP.

В 7.13 эту коллекцию можно будет обработать в интерфейсе, там доработали возможность для ответов-массивов. Документация должна появиться после релиза. В 7.12, где эта галочка впервые появилась, — только кодом, но готовых примеров тоже нет. Также, сомневаюсь, что любая автоматизация сумеет разобрать строку на 4 поля по разделителям вроде «Phone: » (разве что делать элементами-формулами), так что перебирать в скрипте всё равно потребуется.

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

Добрый день, Коллеги!

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

Реальный, частый кейс:

Пользователю открывается задача по БП с текстом: "Оформите счет и договор по заказу", в системе есть 2 стандартных бп, которые это делают, но, когда пользователь прямо из задачи по ссылке переходит к заказу и через действия пытается это сделать, ничего не происходит (он так думает), но на самом деле процессы то запускаются, просто в фоне...

Очень хотелось бы иметь возможность в конструкторе бп установить признак для процесса "Запускать поверх других процессов". В данном случае у пользователя запускался процесс создание счета и договора.

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

9 комментариев

А если и у второго процесса галка стоит, что делать? Ещё одну настройку добавлять, «Запускать поверх вообще всех процессов»?

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

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

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

П.С. Я не говорю про вариант подвязывания скрипта для кнопки создания продажи или счета.

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

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

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

Уважаемый Александр!
Вы написали очень много и все не по теме. Прочитайте, пожалуйста, суть вопроса и потом, если вы его, наконец, поймете, дайте реальный совет, а не история про космические корабли, которые бороздят...

Простейший кейс: У вас в бп 2 задачи, всего 2 задачи. Выполнятся бп начал при изменении статуса продажи, соответственно перед Вами открылась карточка задачи. В задаче написано: "Александр, дорогой, пожалуйста, создай счет к заказу, который связан с продажей". В задаче, естественно, есть связь с заказом.
Внимание, Александр, вопрос: как так переделать и оптимизировать наш с вами бп из двух задач, чтобы мы могли перейти сразу из этой задачи в заказ и нажать кнопку "Создать счет", чтобы у нас открылась картчочка счета и перенеслись туда продукты ? Вы там про автогенерируемые и преднастроенные страницы говорили, как там они перед нами появятся, если можно скриншотик.

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

Добрый день, Д. В таком случае попробуйте прямо в этом БП сделать не 2 блока, а 6, при этом вторые 2 будут связаны с заказом, а третьи 2 — со счётом. Если пользователь будет идти по процессу, ему не нужно будет ни вручную создавать счёт, ни нажимать дополнительные кнопки в карточках, а карточка нового счёта  с уже заполненными полями связи с продажей и заказом автоматически появится при сохранении заказа в соответствии с логикой процесса. Дополнительную информацию пользователю, что от него хочет в этот момент система, можно показывать как раз в автогенерируемых страницах.

Коллеги, если есть возможность создать такой признак (стартовать бп поверх запущенного), это будет супер.
Спасибо.

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

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

У меня запускается некоторый БП, в котором почти на старте открывается страница на редактирование, соответственно там создается задача с заголовком, который я прописываю.

Необходимо отлавливать момент, когда пользователь, не сохранив страницу пытается еще раз запустить этот же БП.

Я пытался сделать это по задаче, но она никак не ссылается на страницу/объект редактирования. 

Как быть?

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

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

БП запускается как по сигналу по какому то действию оператора?

Самое простое решение перед открытием окна менять статус задачи (как вариант добавить в объект какой то признак Передан в работу) И не запускать (или завершать) БП у которых этот признак установлен.

Те

старовый сигнал

проверка что признак не установен

и либо выход

либо установка признака и затем открытие  странички редактирования!

БП запускается как по сигналу по какому то действию оператора?

Самое простое решение перед открытием окна менять статус задачи (как вариант добавить в объект какой то признак Передан в работу) И не запускать (или завершать) БП у которых этот признак установлен.

Те

старовый сигнал

проверка что признак не установен

и либо выход

либо установка признака и затем открытие  странички редактирования!

Григорий Чех,

по меню Действия. Хотелось как проще, ведь система как-то видит какая задача связана с этой страницей и завершает ее после сохранения? Почему мы не можем это увидеть?

Можно, но очень не советую вам на них завязыватся. Они активно изменяются от версии к версии.

Добрый день, как отметил Григорий лучше иметь признак запуска процесса, но вы можете просматривать текущие задачи по процессам они отображаются у клиента из таблицы  SysProcessElementToDo или через js найти и распарсить элемент(если он есть) такого типа там вшит id записи к которой относится страница редактирования id="ProcessDashboardSchemaNotificationContainer-cce9076d-fa47-49a3-bec5-e53450fc421b-ViewModule_RightSideBarModule_ProcessDashboardModule"

В начале БП свяжите процесс с записью. И затем можно искать такие связи

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

Добрый день!

Создаю процесс, который в деталь добавляет Результат выборки по объекту. 

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

Можно ли как-то ограничить количество добавляемых записей при добавлении результата выборки (например, свойство, где указывается количество добавляемых записей - 10, 20 и т.д.)?

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

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

В элементе БП 'Добавить данные' такая возможность отсутствует.

Выбрать точное количество записей запроса можно в элементе БП 'Читать данные'. Для этого нужно перейти в расширенный режим параметров элемента бизнес-процесса и найти параметр 'Количество записей для чтения':

Вы можете решить Вашу задачу таким образом.

1. С помощью элемента 'Читать данные' вычитать нужное количество записей.

2. В параметры бизнес-процесса добавить параметр с типом "Коллекция объектов'  и там же указать, что в него должен поместиться результат выборки из элемента 'Читать данные'.

3. После элемента 'Читать данные' добавить элемент 'Задание-сценарий' и уже в нём скриптом вставить нужные данные коллекции из параметра бизнес-процесса.

Или же просто реализовать всю логику в элементе 'Задание-сценарий'.

В элементе БП 'Добавить данные' такая возможность отсутствует.

Выбрать точное количество записей запроса можно в элементе БП 'Читать данные'. Для этого нужно перейти в расширенный режим параметров элемента бизнес-процесса и найти параметр 'Количество записей для чтения':

Вы можете решить Вашу задачу таким образом.

1. С помощью элемента 'Читать данные' вычитать нужное количество записей.

2. В параметры бизнес-процесса добавить параметр с типом "Коллекция объектов'  и там же указать, что в него должен поместиться результат выборки из элемента 'Читать данные'.

3. После элемента 'Читать данные' добавить элемент 'Задание-сценарий' и уже в нём скриптом вставить нужные данные коллекции из параметра бизнес-процесса.

Или же просто реализовать всю логику в элементе 'Задание-сценарий'.

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

Доброе время суток !

Вопрос:
у меня такой вопрос, можно ли добавить событие в Автогенерируемую страницу ?

Задача:
Мне нужно сделать событие которое генерировалось при выборе значения из справочника.
Это нужно сделать в бизнес-процессе, т.е отобразить пользователю страницу для ввода.

Клиентской схемы я так понимаю нет у Автогенерируемой страницы, да ?

Примечание:
(использовать Автогенерируемую страницу не обязательно)

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

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

Ну не используй автогенерируемую страничку используй стандартный элемент БП "Открыть страницу редактирования".

Ну не используй автогенерируемую страничку используй стандартный элемент БП "Открыть страницу редактирования".

Григорий Чех,

использовал элемент [Преднастроенная страница], там так можно

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

Задача - на островах Контакт и Контрагент в Лиде сделать функционал, аналогичный Квалификации (ну не устраивает кнопка Квалификация((...)

Т.е. при нажатии на кнопку Добавить должен создаться Контрагент с данными из группы полей Регистрационные данные.

Подскажите как  привязать  процесс к кнопке Добавить? Что то не можем до нее добраться).

спасибо!

 

 

Прикрепленные файлы

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

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

Смотри BaseProfileSchema  метод addRecord

Смотри BaseProfileSchema  метод addRecord

Григорий, спасибо! попробуем)

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

Сделать секции в Дизайнере Бизцесс Процессов как в Cisco Packet Tracer. Что бы лучше разбирать отдельный блоки логики и быстро находить то что нужно. Так же можно сделать туда комментарии и заголовки и ...

 

 

Одобрена
2 комментария

Да! И перетаскивать блоки удобнее целиком!

В BPMN это называется «пулы» и «дорожки». В старом дизайнере они были, а в новом — вероятно, появятся вместе с аннотациями.

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

Два вопроса по версионности процессов:

1. Перенос. Достаточно ли просто перенести с дева новые версии через импорт-экспорт, сгенерировать исходные коды и сделать "компилировать всё"? И всё заработает.

2. Когда у меня завершатся старые версии БП-ов (я буду точно об этом знать), могу я их просто удалить из пакета (не хочется держать весь этот зоопарк версий) или новые версии как-то унаследованы от старых?

3. Интересная штука. Когда я "сохранил как новую версию" у меня у старого процесса осталась галочка "актуальная версия", а у нового не проставилась. Как это все будет происходить при переносе?

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

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

О версионности есть статья.

1. Да.

2. Попробуйте. По идее, версии между собой не связаны, но лучше протестировать.

3. Видимо, выбрали не тот ответ на вопрос «Установить текущую версию процесса актуальной?» при сохранении. В любом случае, актуальную версию можно выбрать в интерфейсе карточки свойств процесса.

Статью читал, но внутренний параноик параноид :)

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

Не спрашивает, если предыдущая версия ни разу не запускалась.

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