Добрый день!
Объясните поведение элемента бизнес-процесса "отправить email".
Этот элемент умеет работать с параметрами БП, а именно можно ли в макросе, когда редактируешь тело письма через дизайнер контента, как то вставить и получить корректное сообщение на почту?

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

В чем может заключаться данная проблема?

Нравится

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

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

У элемента “Отправить email” есть 2 режима: Письмо по шаблону/Произвольное письмо.
1. Письмо по шаблону.
В справочнике “ Шаблоны email сообщений” необходимо создать шаблон. В шаблоне заполнить поле [Источник макросов] – указать объект из которого будут заполняться макросы.
В элементе “Отправить email” указать созданный шаблон. Заполнить параметр [Запись для формирования макросов] – указать Id целевой записи, из которой будут подтягиваться значения для макросов.

2. Произвольное письмо.
В теле письма, в дизайнере контента, достаточно вставить параметр процесса (самая права иконка в виде молнии).

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

Михаил, здравствуйте!

Рекомендую обратиться в поддержку (support@terrasoft.ru), поскольку кейс нужно исследовать - общие рекомендации могут быть ошибочны.

Алексей, так и поступили. И ещё был замечен момент что если БП запускать из карточки и передавать в него строку, например, а потом этот параметр использовать в теле письма, то на почту приходит корректное письмо.

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

Доброго времени суток, форумчане.

Работаю в 7.9.
Возникла следующая проблема: не отображается напоминание в коммуникационной панели.
Задача состоит в том, чтобы напоминать пользователю о созданных по определенным условиям проектах. Создал ProjectNotificationProvider (за основу взял InvoiceNotificationProvider) для проекта и зарегистрировал в таблице NotificationProvider, установил в ней Type =1
Добавляю запись в таблицу Reminding, где заполняю следующие поля:

[AuthorId] - Id контакта пользователя системы
,[ContactId] - Id контакта пользователя системы
,[RemindTime] - текущая дата/время
,[Description] - какое-то описание
,[SubjectId] - Id проекта
,[SourceId] - Id автора из таблицы RemindingSource
,[SysEntitySchemaId] - uid проекта
,[ProcessListeners] - 0
,[SubjectCaption] - какой-то Caption
,[TypeCaption] - ''
,[Hash] - ''
,[IsRead] - 0
,[NotificationTypeId] - тип "Напоминание"

Напоминание на панели не отображается, только через определенное время появляется всплывающее окно с ссылкой на проект, если окно сайта bpm закрыто другим приложением. Оно отображается несколько секунд и исчезает.
Если я, например, в поле NotificationTypeId укажу тип "Уведомление", то уведомление отображается без проблем даже без регистрации провайдера. Если в поле SysEntitySchemaId указать uid Invoice, то напоминание появляется, но по ссылке, которая указана в нем, идет переход на новый заказ, а мне нужен переход на проект. Не до конца понятен механизм по отображению напоминаний.
Буду благодарен за помощь

Нравится

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

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

С подобными проблемами уже разобрались в схожих темах:
http://www.community.terrasoft.ua/forum/topic/24969
http://www.community.terrasoft.ua/forum/topic/25016
и многих других, которые можно найти здесь же при поиске по ключевым словам.

Ссылки битые. Как решить подобную же проблему в 2021 году?

Сергей Зеленский,

А на какой версии вы столкнулись с подобной проблемой? 

У вас возникают проблемы со всеми типами уведомлений или с какими-то определенными?

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

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

Нравится

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

Добрый день, Александр!

В системе есть 2 варианта открытия страницы - Separate и Combined. С Separate понятно, он открывается при переходе в карточку из другого раздела или по прямой ссылке, Combined же - при переходе из раздела(секции), это можно увидеть по наличию вертикального реестра в левой части. Дело в том, что Ваша логика находится на странице(page), а при открытии страницы в Combined режиме все еще отрабатывает логика раздела(section). Для того, чтобы кнопка работала корректно, Вам необходимо создать замещающую страницу для Section, и продублировать логику там.

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

Добрый день.
Я создал раздел Материалы, ко вкладке Основная информация добавил ещё одну История.
В Истории разместил детали:
Контрагент
Конечный пользователь (Контрагент)
Смета
Счета

Вопрос: Как реализовать историю движения текущего материала в других разделах на этих деталях?
Например если этот материал купили 10 раз
То на детали Счета должно появиться 10 записей, аналогично остальные.

Кто-нибудь такое уже реализовывал?
Желательно пример.

Заранее благодарю.

Нравится

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

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

Также необходимо соблюдать, что в объекте "Материалы", должны быть лукапы, которые ссылаются объекты других разделов.

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

Добрый день, необходимо переименовать, удалить некоторые поля из детали "Связи" на странице активности:

Но при редактировании этой детали в мастере деталей ничего не отображается:

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

Нравится

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

Данные связи можно удалить только разработчику запросом в бд вроде этого:

DELETE FROM EntityConnection WHERE SysEntitySchemaUId = 'c449d832-a4cc-4b01-b9d5-8a12c42a9f89'
AND (ColumnUId = 'd6e94162-4354-413a-bc84-e118df5e852e'
OR ColumnUId = 'f6137557-741e-42f8-8bf6-69b2524a83f7')

где SysEntitySchemaUId это UId из SysSchema схемы объекта активности, а d6e94162-4354-413a-bc84-e118df5e852e её колонки UId которых можно прочитать в метаданных того же самого объекта активности.

Спасибо за помощь, подскажите, пожалуйста, где хранятся названия колонок, чтобы их переименовать по ColumnUId ? :smile:

Определить UID колонки можно в метаданных объекта Activity. Альтернатива - запрос к таблице SysEntitySchemaReference.

Спасибо, колонки успешно удалились, ColumnCaption изменили в SysEntitySchemaReference, но на странице активности название колонки отображается старое, кэш чистили, в чем может быть проблема?

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

Колонки в деталь "Связи" загружаются методом generateEntityConnectionButtonConfig() (схема EntityConnectionLinksUtilities).

Можно провести отладку этого метода, чтобы определить откуда ноги растут:smile:

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

Если в некоем БП, создавать запись, и использовать действие "Открыть страницу редактирования"

то при выполнении этого этапа - обязательно создается активность, с сопутствующим уведомлением

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

в частности "Выполнить позже" и т.д.

Если же открывать созданную сущность из раздела - то таких действий уже нет.

Вообщем этот кейс иногда нужен и полезен, а иногда очень мешает и вводит путаницу для пользователя,
Можно ли вообще избежать создания активности в таком случае, или как минимум избежать уведомления ?

Нравится

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

"Севостьянов Илья Сергеевич" написал:Если же открывать созданную сущность из раздела - то таких действий уже нет.

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

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

При выполнении интерактивных элементов [Открыть страницу редактирования/Вопрос пользователю] создаются служебные активности. Это базовая логика выполнения, изменить ее не получится.

Жаль. Это доставляет неудобства пользователю и вносит неувязки в бизнес-логику.
Если в данной теме можно озвучить пожелание, то было бы логичным, ИМХО, предоставить пользователю возможность выбрать в элементе БП - необходимо ли создавать активность, например добавив чекбокс

установленный по умолчанию.
А кому активности связанные ни к чему могли бы спокойно от этой функциональности отказаться.

Спасибо за обратную связь.
Зарегистрировали задачу на проработку.

Зарицкий Олег пишет:

Изменений по всей видимости не было за этот период? 

Здравствуйте, Александр!

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

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

Добрый день.

Настроил Visual Studio согласно инструкции https://academy.terrasoft.ru/documents/technic-sdk/7-10/rabota-s-servern...

При запуске утилиты WorkSpaceConsole получаю следующую ошибку:
Compilation started
Error: Dependency 'AnchorSchema' of package 'Core' was not found. Search path: C:\Project\7010\Terrasoft.WebApp\Terrasoft.Configuration\Autogenerated\Src\AnchorSchemaSchema.Core_Entity.cs

Параметры запуска:
C:\Project\7010\Terrasoft.WebApp\DesktopBin\WorkspaceConsole\Terrasoft.Tools.WorkspaceConsole.exe --operation=RebuildWorkspace --workspaceName=Default --webApplicationPath="C:\Project\7010\Terrasoft.WebApp\"

Нравится

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

Добрый день, Алексей.

Значения флага CompileByManagerDependencies в файле Web.config папки Terrasoft.WebApp и консоли должны совпадать:

Проверьте данную информацию.

Мария, спасибо.

Действительно значение настройки отличалось.

В указанной документации об этом ничего не сказано.

Выравнивание значений решило проблему.

Спасибо.

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

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

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

С уважением,
Дмитрий

Нравится

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

Здравствуйте, Дмитрий!

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

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



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

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

Добрый день!

Не получается запустить процесс при получении письма по существующему инциденту.

При получении письма по инциденту запускается процесс «Incoming email registration process».
Если создается новый инцидент, то срабатывает сигнал на добавление активности с заполненным полем Case.
Однако если письмо привязывается к существующему инциденту, то сигнал на изменение поля Case в активности не срабатывает.
В самом процессе происходит вызов функции:

        var helper = ClassFactory.GetIncidentRegistrationFromEmailHelper>(
                new ConstructorArgument("userConnection", userConnection));
        helper.RegisterIncident(activityId);

В классе IncidentRegistrationFromEmailHelper одинаковое действие для новых и существующих инцидентов:

public virtual void RegisterCase(Entity emailEntity) {
var email = new Email(this, emailEntity);
        if (email.IsJunk && !CreateCasesFromJunkEmails) {
                return;
        }
        Entity caseEntity = GetCase(email);
        if (caseEntity == null) {
                caseEntity = CreateNewCaseByEmail(email);
                var copyEntityRightsParams = new SysEntityRightsHelper.CopyEntityRightsParams(emailEntity.SchemaName,
                emailEntity.PrimaryColumnValue, caseEntity.SchemaName, caseEntity.PrimaryColumnValue);
SysEntityRightsHelper.CopyEntityAdministrateByRecordsRights(UserConnection, copyEntityRightsParams);
        }
        emailEntity.SetColumnValue("CaseId", caseEntity.GetTypedColumnValueGuid>("Id"));
        emailEntity.SetColumnValue("IsNeedProcess", false);
        emailEntity.Save();
}

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

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

test process

Нравится

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

Добрый день, Владимир!
Вы можете выполнить настройку стартовых сигналов процесса, как это сделано в базовом процессе "Запуск процесса Переоткрытие обращения и отправка email сообщения ответственному о новом комментарии" в версии продукта 7.10.1

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

Вот пример, как можно поступить (Во вложении).

Оптимальный Вариант - это просмотреть вживую, для этого Вы можете очень быстро получить триал для тестирования https://www.terrasoft.ru/trial/bpmonline

Добрый день, Михаил!

"Михайленко Михаил" написал:Причина указанного Вами поведения в том, что в новых версиях продукта могут уже создаваться активности со связкой с обращением, то есть "Изменение записи" не произойдет.

Да, в моем рабочем процессе есть обработка обоих сигналов. И на добавление записи срабатывает, а на изменение - нет.
А в случае связи письма с существующим обращением не приходит сигнал о добавлении записи с заполненным Case, но и не приходит сигнал о заполнении поля Case.

Кстати, проверил - процесс Run process: Reopen case and notify assignee on receiving an answer regarding the case тоже иногда (пока не обнаружили системности) не запускается в этих случаях.
Я проверю еще на чистой триальной версии, но есть подозрение, что AutoEmailRelation может заполнять поле Case "по-тихому"

Пока выглядит так, что когда срабатывает правило связывания, то происходит установка поля Case и при этом сохранении события отключаются, потому и не стартует процесс.
Как это обойти?

public void ProceedRelation(Entity entity) {
			IEnumerable<IRuleRelationModel> rulesForEntity = GetRulesForEntity(entity.Schema.UId);
			bool isContactSearchSuccessfull = false;
			bool isOtherRelation = false;
			foreach (IRuleRelationModel rule in rulesForEntity) {
				if (GetCanRunRule(rule, isContactSearchSuccessfull)) {
					Guid columnUId = rule.EntitySchemaColumnUId;
					string columnName = entity.Schema.Columns.GetByUId(columnUId).Name;
					string columnValue = entity.GetTypedColumnValue<string>(columnName);
					MatchCollection matches = rule.GetMatches(columnValue);
					if (matches.Count > 0) {
						IEnumerable<Pair> extendedRelations = rule.GetEntityExtendedRelations(matches, _userConnection);
						if(extendedRelations.Count() > 0) {
							foreach(Pair relationValue in extendedRelations) {
								var relationColumn = entity.Schema.Columns.GetByUId((Guid)relationValue.First);
								Guid relationColumnValue = entity.GetTypedColumnValue<Guid>(relationColumn);
								if (relationColumnValue == Guid.Empty) {
									entity.SetColumnValue(relationColumn, (Guid)relationValue.Second);
									TryAutoCompleteContactOrAccount(entity, relationColumn, (Guid)relationValue.Second);
									if (rule.EntitySchemaSearchUId == AutoEmailRelationConst.ContactCommunicationSchemaUId) {
										isContactSearchSuccessfull = true;
									}
									if (rule.EntitySchemaSearchUId != AutoEmailRelationConst.AccountCommunicationSchemaUId &&
											rule.EntitySchemaSearchUId != AutoEmailRelationConst.ContactCommunicationSchemaUId) {
										isOtherRelation = true;
									}
								}
							}
							entity.Save(false);
						}
					}
				}
			}
			SetEntityProcessed(entity, isOtherRelation);
 
		}

Так же протестировали на другой сущности Problems (на которой не было доработок) – аналогичная ситуация. Когда происходит автоматическое связывание, не стартует процесс на добавление/изменение записи.

Добрый день, Владимир!
На сколько я понял симптомы описанной Вами проблемы, то данное исправление мы делали в версии продукта 7.10.1.

На процессе "Регистрация обращения по входящему письму" в методах данного процесса необходимо изменить код на указанный во вложении (можно выполнить изменение в замещенном процессе, базовый исправиться во время обновления). Это должно решить проблему срабатывания привязки по сигналам.

Спасибо, Михаил.

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

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

Добрый день, коллеги. Возникла необходимость писать "адрес сайта/CasePage/SB011849" вместо "адрес сайта/0/Nui/ViewModule.aspx#SectionModuleV2/CaseSection/CasePage/edit/e182e07b-cf59-40ee-ba7c-3cbf9b369f49" и так для всех разделов. Подскажите, пожалуйста, возможно ли это как то реализовать стандартными средствами или может у вас уже есть опыт реализации такой доработки? Можно ли создать RoutingMap или как-то зацепиться за обработчик запросов? Спасибо.

Нравится

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

Здравствуйте, Роман.

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

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