Добрый день! Возможно ли в BPM'Online Team (OnDemand) реализовать публичный веб-сервис доступный из Интернет без авторизации, который будет принимать и обрабатывать WebHook запросы?

Нравится

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

Такой же вопрос обсуждался тут. Там есть готовый пример настройки сайта для работы такого сервиса. Но, поскольку в нём меняют config-файлы на сайте, для on demand без обращений в поддержку не обойтись.

Показать все комментарии

Добрый день!

Подскажите, как сделать вычисляемое поле в редактируемом реестре по аналогии данным руководством: https://academy.terrasoft.ru/documents/technic-sdk/7-12/dobavlenie-vych…

Нравится

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

На странице детали MyDetailPage, добавляете:

attributes: {
			"OpTotalPrice": {
				dependencies: [
					{
						"columns": ["OpCoefficient"],
						"methodName": "calcTotal"
					}
				]
			}
		},
 
 
 
Затем в методы добавляете кастомный метод, в данном случае calcTotal
 
calcTotal: function() {
	var price = this.get("OpPrice");
	var coef = this.get("OpCoefficient");
	var period = this.get("OpPeriod");
	var count = this.get("OpCount");
	this.set("OpTotalPrice", price * coef * period * count);
}

Таким образом, после изменения колонки OpCoeefficient, пересчитается поле OpTotalPrice.

Это то, что вам нужно было?

Добрый день!

Литвинко Павел дал хороший ответ.

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

Подробнее почитать про то, каким образом добавляется пересчет можно в академии по ссылке: https://academy.terrasoft.ua/documents/technic-sdk/7-12/atributy-svoystvo-attributes в разделе "Дополнительные свойства атрибутов"

Литвинко Павел,

Золотарев Артем Андреевич,

Добрый день!

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

Все получилось! 

 

Показать все комментарии

Добрый день!

Есть варианты, как подставить в деталь значение справочного поля в зависимости от другого справочного поля?

В разделе "Продажи" добавил справочное поле созданного раздела "Проект". Необходимо подставить его значение в соответствующее добавленное поле в деталь, при добавлении продукта

Изображение удалено.

Изображение удалено.

Изображение удалено.

 

Нравится

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

Поскольку поле «Проект» в продаже может быть заполнено как пользовательскими средствами, так и, в теории, программно или по интеграции, то нужно реализовать серверную логику, которая при сохранении на объекте «Продажа» модифицирует все привязанные к ней продукты, если в них указан неверный проект.

Это может быть отдельный бизнес-процесс, стартующий по сигналу измнения продажи, встроенный процесс на объекте «Продажа» или даже триггер на уровне SQL-сервера. Первый и последний варианты рассматриваются тут.

на коллбэке в методе onLookupResult открывать (делать переход на) карточку со скрина 3

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

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

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

Илья, в таком случае лучше завязать логику БП на создание нового продукта, прописывать там проект из продажи, если ещё не указан. Опять же, либо отдельным БП по сигналу, либо встроенным на объекте «Продукт», либо, в крайнем случае, триггером.

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

Александр, спасибо! Согласен, БП это будет проще всего сделать.

Добрый день.

В Вашем случае можно просто при объявлении детали на странице в атрибуте "defaultValues" указать нужное значение.

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

Вот пример:

            details: /**SCHEMA_DETAILS*/{

                "PatientCardBlock": {

                    "schemaName": "PatientCardBlockSchemaDetail",

                    "entitySchemaName": "PatientCardBlock",

                    "defaultValues": {

                        "Contact": {

                            "masterColumn": "Id"

                        },

                        "DiseaseType": {

                            "masterColumn": "Disease"

                        },

                        "TherapeuticArea": {

                            "masterColumn": "TherapeuticArea"

                        },

                        "BlockType": {

                            "value": "5b64fd0b-20af-4ce6-8c46-b39de8629f13",

                            "displayValue": "Demographics"

                        }

                    },

                    "filterMethod": "demographicsFilter"

                },

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

Алла, спасибо! То что надо)

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

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

Показать все комментарии

Есть 2 процесса, которые запускаются по сигналу изменения некоторого поля в 2х разных сущностях, например, Account и Contact.

В одном процессе при изменении поля A в таблице Account вызывается изменение поля Б в Contact, а в другом при изменении поля Б таблицы Contact вызывается изменение поля A в Account.

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

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

Меня интересует, какие ещё есть 'более правильные' с точки зрения производительности варианты решения такой задачи?

 

Нравится

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

Добрый день!



А можете уточнить в какой лог не попадают данные, а так же показать Ваш ScriptTask?

Евгений Манько,

Не попадают в Change log в Администрировании

В одном процессе код приблизительно такой:

var update = new Update(UserConnection, "Contact")

            .Set("TypeId", Column.Parameter(ContactType))

            .Where("Account").IsEqual(Column.Const(AccountType)).Execute();

А в другом наоборот.

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



Добрый день! 

Данный скриптаск тяжелый так как он меняет все записи. Как обходное решение, в разделы можно добавить поля куда будет записываться временный признак (достаточно будет текстового поля которое доступного «только для чтения» которое будет меняться процессом). А в рамках процесса реализовать примерно такую схему – скриншот. Если добавить в стартовый сигнал условие что запрещающий временный признак не установлен, то процессы не будут запускать друг друга.

Евгений,

спасибо за совет, как вариант, может быть.

Есть также мысль реализовать вызов процесса не по сигналу, а при сохранении изменений в карточке конкретного объекта.

В любом случае, от существующего варианта нужно отказываться))))

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



Элемент начальный сигнал несет в себе  несколько вариантов запуска. Можно настроить его на изминение/добавление/удаление записи. С возможностью указать условия запуска по событию с опеределенным полем в карточке. При необходимости можно добавить дополнительные фильтры. Подробнее про этот эллемент можно прочитать тут.

Показать все комментарии

Коллеги, здравствуйте! 

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

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

С чем это может быть связано?

Спасибо!

Нравится

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

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

Добрый день!



Скорее всего это связано с тем что у команды нету прав на чтение связанных записей. Команда без выдачи прав на работу с контрагентом может видеть эти записи? 

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

Роман Никулин,

Добрый день!



Вы проверяли права команды на эти записи? Если у них не будет прав на эти записи, то команда не увидит записи несмотря на права на контрагента. Для раздачи прав на старые связанные записи можно создать бизнес с элементом «изменить права доступа». А фильтрации можно указать например поле контрагент заполнено.

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

Показать все комментарии

Как настроить права на удаление заявки, заведенная на портале, для которой есть Кейс раздела?

т.е. удаляются все связанные записи(активности, процессы и т.д.), но не удаляется именно этот Кейс. 

где и на что надо дать права? под. сис. админом удаляется.

Нравится

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

Для того, чтобы пользователь портала мог удалять обращения, которые были заведены через Портал Самообслуживания, нужно раздать права на удаление пользователям портала через "Права доступа на объекты" на объект Обращения.

Показать все комментарии

Здравствуйте! Подскажите, как в коде замещающей схемы раздела получить список всех записей раздела, согласно текущему установленному фильтру? Требуется список всех ID передать во внешний сервис.

Нравится

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

Добрый день! 

Посмотрите, как реализовано удаление записей. Там похожий функционал. В нем передается не список всех ID, а серриализованные фильтры и дополнительный фильтр, исключающий записи, с которых сняли выделение в реестре при действии "Выбрать все".

Пащенко Александр Сергеевич,

Спасибо, разобрался!

Показать все комментарии

Добрый день.

При попытке отправки письма из кастомного раздела http://prntscr.com/ihb4m0 возникает ошибка: "Не удалось отправить письмо. Значение с именем "UsrSectionTitleId" не найдено", где UsrSectionTitle - название раздела.

Id в разделе естественно присутствует, но называется не "UsrSectionTitleId" а просто "Id".

Подскажите, пожалуйста, в чем может быть проблема.

Нравится

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

Здравствуйте Станислав,

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

Спасибо!

Показать все комментарии

Каким образом нужно изменить caption детали на странице редактирования в том случае, если одна и та же деталь используется в одной вкладке, но данные в этих деталях фильтруются по разным условиям (скриншот во вложении)?

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

Нравится

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

Можно изменить метод формирования Caption на каждой схеме детали.

Описание здесь: https://community.terrasoft.ru/questions/razlicnoe-otobrazenie-detali-v…

 

Алла, здравствуйте!

Вашу задачу можно решить только с помощью разработки, в предоставленной выше ссылке есть полезные рекомендации. Подробная инструкция также была описана здесь: https://community.terrasoft.ru/questions/zagolovki-detali

Но также хотим заметить другой момент. К сожалению, сейчас в системе не предусмотрена возможность вывода одной и той же детали на одну вкладку, даже с разными связями с объектом (деталь может вести себя некорректно). Мы рекомендуем создавать новую деталь на основе того же объекта, с новым названием и аналогичным наполнением страницы редактирования, и добавлять новую деталь на вкладку вместо дубля существующей детали.

Показать все комментарии

Есть sql-запрос вида:

select *

from Table T

where T.ProjectId = @ProjectId

    and not exists (select * from Table T1

                    where T1.ContactId = @ContactId

                        and T1.ParameterId = T.ParameterId)

Использование метода CreateFilterWithParameters() позволяет построить параметризированный запрос, но только exists:

var esqCardBlock = new EntitySchemaQuery(userConnection.EntitySchemaManager, "Table");

esqCardBlock.AddAllSchemaColumns();

var CardBlockFilters = esqCardBlock.Filters;                  CardBlockFilters.Add(esqCardBlock.CreateFilterWithParameters(FilterComparisonType.Equal,

                        "Project", projectId));                CardBlockFilters.Add(esqCardBlock.CreateFilterWithParameters(FilterComparisonType.Equal,

                        "[Table:Parameter:Parameter].Contact", contact));

Если же использовать CreateNotExistsFilter(), то не понятно, куда добавлять значение параметра @ContactId.

Какой всё-таки метод использовать для построения параметризированного запроса Not Exists?

Нравится

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

Алла, возможно, такое получится при помощи выставления группе фильтров свойства .IsNot = true;

Как тут:

			var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Activity");
			esq.AddAllSchemaColumns();
			esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "Owner", currentUserId));
			esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Greater, "ModifiedOn", LastSyncDate));
			if (IsFirstSync) {
				esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Greater, "DueDate", Today));
			}
			esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "ShowInScheduler", true));
			var filtersByExisting = new EntitySchemaQueryFilterCollection(esq);
			filtersByExisting.IsNot = true;
			var notExFilter = esq.CreateFilterWithParameters(
				FilterComparisonType.IsNotNull,
				"[ActivityCorrespondence:Activity].SourceActivityId");
			filtersByExisting.Add(notExFilter);
			filtersByExisting.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal,
				"[ActivityCorrespondence:Activity].SourceAccount.Id", SourceAccountId));
			esq.Filters.Add(filtersByExisting);
			esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.LessOrEqual, "CreatedOn", CurrentSyncDateTime));
			var entityCollection = esq.GetEntityCollection(UserConnection);

 

Саша,

спасибо за ответ. Я тоже уже думала так сделать, попробую и напишу о результате smiley

Саша,

таким способом, как ты предложил, получилось построить нужный фильтр.

Ещё вопрос: почему в документации на академии написано, что метод CreateFilterWithParameters перегруженный https://academy.terrasoft.ru/documents/technic-sdk/7-11/dobavlenie-vych…;Что имеется ввиду?

Алла, у меня по этой ссылке нет слов «перегруженный»  и «CreateFilterWithParameters».

Ошибка, речь идет об этой ссылке: https://academy.terrasoft.ru/documents/technic-sdk/7-11/ispolzovanie-en…

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

А подскажите, пожалуйста, есть ли аналог ".IsNot = true" в entitySchemaQuery на стороне клиента?

И если нет, то как по другому в js можно построить подобный фильтр?

См. верхний ответ тут.

Показать все комментарии