Нужно найти, в каких БП/сервисах/запросах с клиента изменяется определенное поле в схеме Contact.

Поиск по исходникам на C#, выгруженным на диск, ни по имени поля, ни по UId из метаданных Contact ничего не дает.

Есть ли какой-то способ?

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

Нравится

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

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



Чтобы определить логику именения поля Вы можете использовать SQL Profiler, т.е. Вам необходимо будет запустить профайлер, выполнить запрос и потом открыть этот запрос.

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

После этого, Вы сможете узнать в какой именно схеме происходит изменение по запросу UpdateQuery. Пример: http://prntscr.com/jycc17



Советую так же Вам провести отладку кода. Информацию об этом подробно описана на Академии

https://academy.terrasoft.ru/documents/technic-sdk/7-12/otladka-klients…

https://academy.terrasoft.ru/documents/technic-sdk/7-12/otladka-servern…

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

Алексей-Карягин пишет:

Я вообще не догадываюсь где может меняться поле

 Тоже сталкивался. Я имитировал ситуацию, когда менялось поле, потом смотрел:

- какие бп запускаются 

- все бп с сигналом от измененного объекта

- все вшитые в объект событийные процессы

- страницу объекта + детали

В моём случае оказалось всё неочевидно: при сохранении карточки в какой-то из деталей стоял апдейт/set поля

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

Товарищи подскажите как решить проблему. 

При вставке в в тело письма значения процесса получаю следующую ошибку:

System.InvalidCastException: Не удалось привести тип объекта "System.String" к типу "Terrasoft.Core.Entities.Entity".

   в Terrasoft.Core.Process.Configuration.ProcessEmailUserTaskMacrosWorker.GetMacrosColumnValue(Object macrosValue, String columnUId)

   в Terrasoft.Core.Process.Configuration.ProcessEmailUserTaskMacrosWorker.<>c__DisplayClass17_0.b__2(MacrosInfo macrosInfo)

   в System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()

   в System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)

   в Terrasoft.Core.Process.Configuration.ProcessEmailUserTaskMacrosWorker.Proceed(IEnumerable`1 macrosInfoCollection, Object arguments)

   в Terrasoft.Configuration.Utils.MacrosHelperV2.GetMacrosValues(List`1 macrosCollection, Dictionary`2 arguments)

   в Terrasoft.Configuration.Utils.MacrosHelperV2.GetPlainTextTemplate(String textTemplate, String requestedEntityName, Guid requestedEntityId)

   в Terrasoft.Core.Process.Configuration.BaseEmailUserTaskMacrosHelper.GetPlainTextTemplate(String textTemplate)

   в Terrasoft.Core.Process.Configuration.BaseEmailUserTaskMacrosHelper.ReplaceMacroses(EmailMessage emailMessage)

   в Terrasoft.Core.Process.Configuration.BaseProcessEmailMessageProvider.GetEmailMessage()

   в Terrasoft.Core.Process.Configuration.AutoEmailUserTaskSender.Execute(IEmailUserTaskMessageProvider messageProvider, ProcessExecutingContext context)

   в Terrasoft.Core.Process.ProcessActivity.Execute(ProcessExecutingContext context)

Если туже переменную указывать в названии письма все нормально

В других бизнес процессах все нормально

Вот тело письма: 

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

Нравится

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

Добрый день, Роман!

Такая ошибка возникает на версии 7.11.1, в более новой версии ошибка исправлена. 

Для того что бы решить проблему на текущей версии вы можете обратиться в службу технической поддержки support@terrasoft.ru.

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

Товарищи помогите.

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

Как добавить пакет Diagnostics? Я так понимаю его вообще нет?

 

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

 

Вот что получаю

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

 

Сгенерированный исходный код:

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

Нравится

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

Подскажите, пожалуйста, что у Вас располагается на 49 строчке в сгенерированном исходном коде?

И не пробовали Вашу 11 строчку в методе заменить на 

System.Diagnostics.ProcessStartInfo p = new System.Diagnostics.ProcessStartInfo();

?

Спасибо, если прописать полный путь:  new System.Diagnostics.ProcessStartInfo()  то все нормально, не удобно, но сойдет

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

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

Нравится

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

Здравствуйте! Попробуйте передавать по каналу web-socket

Код на стороне БП

var userConnection = Get&lt;UserConnection&gt;("UserConnection");
var messageToUser = Get&lt;string&gt;("AbMessageToUser");
Terrasoft.Configuration.MsgChannelUtilities.PostMessage(userConnection, "AbCreatingSmsAudienceProcess", messageToUser);
return true;

На клиенте следующий код

 

define("ContactSectionV2", [], function() {
	return {
		entitySchemaName: "Contact",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
		methods: {
			init: function () {
				this.callParent(arguments);
				this.subscriptionFunction();
			},
			subscriptionFunction: function() {
				Terrasoft.ServerChannel.on(Terrasoft.EventName.ON_MESSAGE,
				this.onAbCreatingSmsAudienceProcessMessage, this);
			},
			onAbCreatingSmsAudienceProcessMessage: function(scope, message) {
				if (!message || message.Header.Sender !== "AbCreatingSmsAudienceProcess") {
					return;
				}
				var message2 = message.Body;
				if (!this.Ext.isEmpty(message2)) {
					this.Terrasoft.showInformation(message2);
				}
			}
		},
		messages: {}
	};
});

 

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

 

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

В обзоре пакета обновление https://academy.terrasoft.ru/documents/obzor-paketa-obnovleniy-bpmonlin… написано что есть появилась возможность как-то настроить выполнение бизнес-процесса в фоновом режиме, но на академии не нашла описание того, как это сделать.

Каким же образом все-таки это сделать?

Нравится

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

Ксения, видимо, речь об этом:

[Выполнять следующие элементы в фоновом режиме] — признак определяет, как будут выполняться все следующие за текущим элементом шаги процесса — автоматически в фоновом режиме или с участием пользователя.

  • Если для элемента процесса снят признак [Выполнять следующие элементы в фоновом режиме], то при переходе процесса на следующие шаги, предполагающие участие пользователя (например, заполнение страницы записи), будут открыты соответствующие страницы редактирования. Например, если элемент [Открыть страницу редактирования] расположен на диаграмме процесса после элемента, для которого снят признак [Выполнять следующие элементы в фоновом режиме], то для пользователя сразу же откроется соответствующая страница редактирования.

  • Если для элемента процесса установлен признак [Выполнять следующие элементы в фоновом режиме], то все следующие шаги, требующие участия пользователя, отобразятся на вкладке [Задачи по бизнес-процессам] коммуникационной панели. Такие задачи (например, открытие страниц) не начнут выполняться, пока пользователь не кликнет по ним на вкладке [Задачи по бизнес-процессам]. При этом все действия системы будут выполнены в фоновом режиме без отображения маски загрузки, чтобы пользователь не ожидал завершения процесса. Например, если элемент [Открыть страницу редактирования] расположен на диаграмме процесса после элемента, для которого установлен признак [Выполнять следующие элементы в фоновом режиме], то новая задача по бизнес-процессам отобразится на коммуникационной панели пользователя. Если на диаграмме процесса после такого элемента следуют требующие сложных и длительных расчетов элементы из группы [Действия системы], то такие расчеты будут выполнены в фоновом режиме, а маска загрузки отображаться не будет. Такой вариант может вызвать задержку выполнения процесса, если пользователь, ответственный за выполнение действия по процессу, в момент создания задач по бизнес-процессу не вошел в систему.

Признак [Выполнять следующие элементы в фоновом режиме] может быть установлен:

  • Для всех элементов из группы [Действия пользователя].

  • Для всех элементов из группы [Начальные события], кроме элемента [Стартовый таймер]. По умолчанию признак установлен для начального события [Сигнал].

  • Признак установлен и недоступен для редактирования для элементов [Обработка сигнала] и [Обработка таймера] группы [Промежуточные события].

 

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

Всем привет, подскажите как сделать цикл в бизнес процессе?

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

Нравится

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

Ну, не знаю что конкретно Вы хотите сделать, но можно создать булевое поле, Читать количество записей, где это поле = false, если такие записи найдены, то выполняете свою логику и ставите в это поле true. Опять идет читка данных из лидов, если опять найдены такие лиды где false - отрабатывает та же логика. Если записей не найдено. завершаете процесс. Надеюсь чем-то помог.

 

Можно сделать блок БП «скрипт» и в С#-коде написать GetEntityCollection, а затем по результату foreach-циклом, как в примере №4 тут.

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

Товарищи спасибо

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

Здравствуйте! Такой вопрос, возможно ли получить Id записи добавленной в бизнесс-процессе с помощью элемента [Открыть страницу редактирования] или как получить Id добавленной записи, когда делаешь добавление через класс insert?

Нравится

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

Добрый день.

Вы можете сначала добавить новую запись с помощью действия [Добавить данные], который вернет Id добавленной записи, в потом в элементе [Открыть страницу редактирования] в параметре 'Идентификатор записи' указать этот Id как параметр процесса.

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

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

Было бы не плохо реализовать настройку локализации элементов БП взаимодействующих с пользователем непосредственно в дизайнере БП. 

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

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

Просьба описать более подробно идею и какую бизнес-задачу Вы хотите с помощью такой настройкой?

Здравствуйте! Идея заключается в том что бы реализовать внесение локализируемых значений - http://prntscr.com/jk6wc3, http://prntscr.com/jk6ynv

так как для примера это реализовано: либо в объектах - http://prntscr.com/jk6wne

либо как это реализовано в клиентских модулях, добавлять локализированные переменные - http://prntscr.com/jk6x2i.

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

На данный момент у меня в системе не всегда в переводах находит нужный БП. 

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

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

Подскажите, вы пишете, что не всегда система находит нужный БП в переводах. Как именно вы выполняете поиск? Не находятся отдельные строки для перевода или весь процесс?

Марина Бельмега пишет:

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

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

Подскажите, вы пишете, что не всегда система находит нужный БП в переводах. Как именно вы выполняете поиск? Не находятся отдельные строки для перевода или весь процесс?

Здравствуйте! Не находит процесс целиком

Обращение оставлял на портале поддержки. 

Алексей,

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

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

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

 

Марина Бельмега,

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

 

Алексей,

Полностью согласна, перевод процесса по ходу настройки - самый удобный вариант. 

Марина Бельмега пишет:

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

а что делать,если в раздел Переводы не записываются данные? сегодня создала БП, но в разделе Переводы последняя запись от 2017 года. раздел актуализировала. 

Zaitova Liubov пишет:

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

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

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

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

Нравится

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

Добрый день, Павел!



Для создания нового сообщения в ленту необходимо добавлять запись в объект “Сообщение/комментарий”. Для указания объекта, в ленте которого необходимо создать запись, необходимо заполнить колонку “Экземпляр объекта”.

Пример элемента: http://prntscr.com/jhbo18

Анна Журавель,

Спасибо, Анна! А в поле "Экземпляр объекта" что указывается? 

Коробов Павел Анатольевич,

Добрый день!



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

Анна Журавель,

Подскажите, нужно ли заполнять поле "Схема" (если да, объясните откуда брать данные и что это за объект)? Если заполнить поля "Экземпляр объекта", "Сообщение/комментарий" и "Контакт" - запись не создается. 

http://prntscr.com/nogym3&nbsp; - ошибка

http://prntscr.com/nogz4d - как заполнен БП

Туда нужно записывать Id той схемы (объекта в конфигурации, например «Лид»), к которой идёт комментарий. Посмотреть можно в адресной строке, открыв объект в дизайнере.

Evgenyi, данные берутся там из объекта, который так и называется "Схема", внутри которого есть Uid - именно он и требуется для заполнения поля "Схема".

 

Другими словами, например:

1. добавляете действие "Читать данные" и выбираете объект Схема, далее внутри указываете в фильтр по названию, например, название = "Канал" (тот в котором будет запись вашего сообщения ленты).

2. при добавлении записи в объект “Сообщение/комментарий” поле "Схема" заполняете из созданной вами в первом пункте объекта "Схема" и в параметре находите Uid

 

ps: сам проморочил голову, нигде никто не пишет подробно как вставить uid в поле схема.

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

Всем доброго времени суток!

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

Вот код вызывающий мой БП и туда передаю 2 параметра, названия совпадают:

 

runProcessFormingAudience: function () {
				debugger;
				var folderFilters = this.get("SectionFiltersValue").collection.get("FolderFilters");
				var customFilters = this.get("SectionFiltersValue").collection.get("CustomFilters");
				if(folderFilters || (customFilters && customFilters.null != undefined)){
					var filters = (folderFilters != undefined && folderFilters.length > 0) ? folderFilters[0].filter : customFilters.null.filter;
				}
				var args = {
					sysProcessName: "AbCreatingSmsAudienceProcess",
					parameters: {
						EntitySchemaName: this.entitySchemaName,
						Filters: filters
					}
				};
				ProcessModuleUtilities.executeProcess(args);
			}

Принимаемые параметры - http://prntscr.com/j8wmeg

Далее смотрю что передалось в эти параметры и логирую:

 

var userConnection = Get<UserConnection>("UserConnection");
var log = new LogService(userConnection);
var filters = Get<string>("Filters");
var entitySchemaName = Get<string>("EntitySchemaName");
var smsServiceId = Get<Guid>("SmsServiceId");
var smsName = Get<string>("SmsName");
 
log.RecInfo(string.Format("smsName = {0}", smsName));
log.RecInfo(string.Format("smsServiceId = {0}", smsServiceId));
log.RecInfo(string.Format("entitySchemaName = {0}", entitySchemaName));
log.RecInfo(string.Format("filters = {0}", filters));
 
return true;

И в итоге данные не занеслись - http://prntscr.com/j8wnau

Подскажите из-за чего может вести себя так система? Вроде делаю все правильно.

Нравится

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

немного не понял смысла

customFilters.null

ну да и ладно...

Код актулен, если вы планируете поместить filters в string(по коду var filters = Get<string>("Filters"), я понимаю в этом план).

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

Благодарю, уже разобрался))

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