GIT
Source Control
SVN
TFS
Технические вопросы
7.x

Добрый день! Подскажите, был ли у кого опыт интеграции source control BPM Online с Microsoft Team Foundation Server (TFS Source Control или Git)?
Хранить исходники в SVN совсем не комильфо, когда в компании корпоративным стандартом является TFS. Поднимать рядом второе хранилище SVN тоже не хочу, но очень похоже, что без него никак.

Для TFS нашёл решение https://svnbridge.codeplex.com/ которое эмулирует SVN, но по кане проверял и сильно сомневаюсь, что поможет.

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

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

Заранее спасибо!

Нравится

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

Здравствуйте.
На текущий момент, нами, в качестве системы контроля версий используется SVN. Задачи, которые он призван решать - полностью им покрываются. Пока в планах - остаёмся на SVN.

С уважением, Terrasoft Support Team.

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

С уважением, Жаренко Дмитрий
Platform Product Owner
Группа компаний Terrasoft

Показать все комментарии
Технические вопросы
7.x

Доброго дня!
Я хочу зробити імпорт даних з excel файлу
Коли я вибрав файл у мене нема відповідностей полей фала, тобто bpm не знайшла поля у моєму файлі
І врезультаті я не можу зробити імпорт з файлу

Нравится

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

Добрый день!

Вопрос, скорее конкретно к Евгению Лемешу, но на всякий случай размещу на форуме:

Существует-ли перспектива применения модуля фильтрации для получения конструктора акций в маркетинге?

Аналогично битриксу, к примеру:
http://dev.1c-bitrix.ru/learning/course/?COURSE_ID=42&LESSON_ID=5355

Нравится

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

Дополню сам себя: механики акций можно ведь заводить в виде БП, а при создании акции, как один из атрибутов акции иметь справочник механик.

Добрый день!

Да, описанное Вами есть в RoadMap и планируется для реализации в следующих версиях.

Алекс,
У нас же для этого есть отдельная красивенная конфигурация продукта marketing - loyalty.
Но там акцент на бонусы, а не скидки.
Приходите в Сколково - покажу все детали, ну или на email давайте e.lemesh@tscrm.com

"Евгений Лемеш" написал:ну или на email давайте e.lemesh@tscrm.com

Спасибо, Евгений! Написал в почту.

Кстати, писал в форму обратной связи: https://www.terrasoft.ru/company/feedback/question?label=ru-loyalty , но ответ мне не пришел.

"Евгений Лемеш" написал:У нас же для этого есть отдельная красивенная конфигурация продукта marketing - loyalty.
Но там акцент на бонусы, а не скидки.

Евгений, с нетерпением продолжаю ожидать ссылку на конфигурацию, чтобы посмотреть функционал loyalty. Так же повторно отписал Вам письмом.

Спасибо!

"AlexLS" написал:Евгений, с нетерпением продолжаю ожидать

Говорили же - поезжай в Сколково, так не поехал :cool:

"Александр Кудряшов" написал:поезжай в Сколково, так не поехал

я там был... мёд с пивом пил... Всех повидал, но только в первый день :sad:
На работе чётко сказали "арбайтен" (или как-то так)!

Показать все комментарии
Технические вопросы
7.x

Доброго времени суток,
Появилась необходимость поместить 5-6 преднастроенных фильтров на страницу. Пролистал SDK, а там только фильтры с ответственным и датой. Есть ли примеры фильтров по названию и по справочным значениям (целочисленным, от и до)?

Нравится

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

И еще было бы интересно фильтр по номеру средства связи, чтобы ввести любое (телефон, e-mail, skype) и найти контрагента или контакта

"Владимир Соколов" написал:

И еще было бы интересно фильтр по номеру средства связи, чтобы ввести любое (телефон, e-mail, skype) и найти контрагента или контакта


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

"Мотков Илья" написал:Владимир, если Вы помните, то в целом фильтрация строится по колонкам объкта, деталь "Средства связи" это другой объект.

Да, поэтому пользователям очень сложно по одному из средств связи определить, что это за контакт (нужно строить довольно сложный для них фильтр). Хотелось бы упростить эту задачу

"Владимир Соколов" написал:
Мотков Илья пишет:

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

Да, поэтому пользователям очень сложно по одному из средств связи определить, что это за контакт (нужно строить довольно сложный для них фильтр). Хотелось бы упростить эту задачу

Вы можете добавить быстрый поиск в раздел "Контакты" (по аналогии с быстрым фильтром "Ответственный" в разделе "Активности").
Фильтрация будет осуществляться по полю Номер (Number) объекта Средство связи контакта (Contact communication).

"Демьяник Алексей" написал:Вы можете добавить быстрый поиск в раздел "Контакты" (по аналогии с быстрым фильтром "Ответственный" в разделе "Активности").

Попробовали, не получилось...

filter

Посмотрели внутри кода инициализации фильтров, создаётся впечатление, что фильтр можно построить только по Lookup или дате:

function prepareFilters() {
...
if (filterConfig.dataValueType === Terrasoft.DataValueType.DATE) {
...
} else {
      var entityColumn = this.entitySchema.getColumnByName(filterConfig.columnName);
      filterInfo.columnName = filterConfig.columnName;
      filterInfo.isLookup = entityColumn.isLookup;
      if (entityColumn) {
       if (entityColumn.isLookup) {
... }
...
}

Разработчики закрыли возможность создания других фильтров?

Вот пример нашего кода (не работающего):

initFixedFiltersConfig: function() {
	var fixedFilterConfig = {
		entitySchema: this.entitySchema,
		filters: [
	            {
			name: "Email",
			caption: this.get("Resources.Strings.UsrCommunicationFilterCaption"),
			columnName: "Email",
			defValue: "",
			dataValueType: this.Terrasoft.DataValueType.TEXT,
			filter: function(filterInfo) {
				 debugger;
				var filter;
				if (filterInfo.value && filterInfo.value.length > 0) {
					filter = Terrasoft.createColumnInFilterWithParameters(
						"[ContactCommunication:Contact].SearchNumber", filterInfo.value);
				}
				return filter;
			}
		}
	]
   };
   this.set("FixedFilterConfig", fixedFilterConfig);
}

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

В системе фильтр по полю с типом "Строка" Вы можете найти в схеме ProductSelectionModule.

*del*

"Владимир Соколов" написал:Разработчики закрыли возможность создания других фильтров?

"Варфоломеев Данила Викторович" написал:Есть ли примеры фильтров по названию и по справочным значениям (целочисленным, от и до)?

Воспользоваться “initFixedFiltersConfig” действительно не получится, их вью заточено под определенные типы, и их расширение на данный момент выглядит затруднительным.
Но вы можете переопределить “initQueryFilters” и добавлять или убирать фильтры на основании данных своих атрибутов. В одном атрибуте хранить “активность” фильтра, в другом “поисковую строку”. И по нажатию кнопки или галочки применения фильтрации, инициировать метод обновления списка “this.reloadGridData();”.
В этот момент сработает “initQueryFilters” анализируя ваши новые значения атрибутов.

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

define("ContactSectionV2", ["GridUtilitiesV2", "GoogleIntegrationUtilities", "RightUtilities",
		"ConfigurationConstants", "GoogleIntegrationUtilitiesV2"],
	function(gridUtilitiesV2, GoogleUtilities, RightUtilities, ConfigurationConstants) {
		return {
			entitySchemaName: "Contact",
			attributes: {
				"TestAttr": {
					dataValueType: Terrasoft.DataValueType.TEXT
				},
				"IsActiveTestAttr": {
					dataValueType: Terrasoft.DataValueType.TEXT
				}
			},
			messages: {
			},
			mixins: {
			},
			methods: {
				filterOn: function() {
					this.set("TestAttr", "123-123-123");
					this.set("IsActiveTestAttr", true);
					this.reloadGridData();
				},
				filterOff: function() {
					this.set("TestAttr", "");
					this.set("IsActiveTestAttr", false);
					this.reloadGridData();
				},
				initQueryFilters: function(esq) {
					this.callParent(arguments);
 
var testAttr = this.get("TestAttr");
var isActive = this.get("IsActiveTestAttr");
 
if (!isActive) {
   esq.filters.removeByKey("FilterContactCommunication");
} else {
   esq.filters.add("FilterContactCommunication", this.Terrasoft.createColumnFilterWithParameter(
   this.Terrasoft.ComparisonType.CONTAIN, "[ContactCommunication:Contact:Id].Number", testAttr));
 
					}
				}
			},
			diff: /**SCHEMA_DIFF*/ [
				{
					"operation": "insert",
					"parentName": "SeparateModeActionButtonsLeftContainer",
					"propertyName": "items",
					"name": "FilterOn",
					"values": {
						"itemType": Terrasoft.ViewItemType.BUTTON,
						"caption": "filter on",
						"click": {
							"bindTo": "filterOn"
						}
					}
				},
				{
					"operation": "insert",
					"parentName": "SeparateModeActionButtonsLeftContainer",
					"propertyName": "items",
					"name": "FilterOff",
					"values": {
						"itemType": Terrasoft.ViewItemType.BUTTON,
						"caption": "filter off",
						"click": {
							"bindTo": "filterOff"
						}
					}
				}
			] /**SCHEMA_DIFF*/
		};
	});

Останется только где-то разместить эдит, в который вы будете принимать от пользователя “поисковую строку”, будь то прямо на форме, или в модальном окне.

Подобным образом работает фильтрация в продукте ITIL, в секции обращений по закрытым и открытым обращениям.

Спасибо! Почти получилось.

Но есть вопрос - в чем смысл того, что в базе в поле ContactCommunication.SearchNumber строка записана в обратном порядке?
Например, если телефон +123 45678, то в SearchNumber будет 876543321

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

Это сделано специально, и часто используется в логике приложений, определяющих номер телефона абонента. Суть в том, что один и тот же телефонный номер может быть записан или определятся абсолютно по разному. Например в международном формате (+7 123 4567890, 007 123 4567890) или, если звонить внутри страны это 8 123 4567890. Если искать по первым цифрам это будут 2 разных номера, если взять первые N цифр начиная с последней, определение произойдет успешно.

Еще один вопрос - как не сделать свой новый блок фильтров (как это описано в SDK), а добавить к существующему блоку еще один фильтр?

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

Показать все комментарии
7.7
Технические вопросы
7.x

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

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

Сообщение нужно формировать на клиенте.

Версия BPM 7.7.0.2325

Нравится

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

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

Уведомления ленты приходят в трех случаях:
1) Пользователь был упомянут через @ (например, @Supervisor)
2) Комментарий пользователя был прокомментирован
3) Комментарий пользователя понравился другому пользователю.

В иных случаях уведомления ленты не приходят.
Для того, чтобы сообщение появилось в ленте пользователей, которые подписаны на запись, Вам достаточно просто создать новую запись в объекте "Сообщение/Комментарий" (SocialMessage). Поля, которые необходимо заполнить:
1) Схема - Uid схемы контрагент
2) Экземпляр объекта - Id записи в объекте "Контрагент"
3) Сообщение/комментарий - само сообщение.

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

"Дашкевич К." написал:

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

Теоретически - это возможно. Практически - нужно пробовать и экспериментировать. Можно сделать процессом (предполагаю, что 3 настраиваемых элемента будет достаточно).

1) Стартовый сигнал по событию добавления записи в объект "Сообщение/комментарий"
Условие: Родительское сообщение - не заполнено

2) Чтение данных по объекту "Сообщение/комментарий" с фильтром Id = Идентификатор стартового сигнала

3) Добавление данных в объект "Уведомления ленты" в режиме выборки из объекта "Подписка"
Фильтр выборки: Экземпляр объекта == Экземпляр объекта из чтения данных
Добавляем:
Владелец - Из выборки Пользователь.Контакт (как вариант Пользователь.Контакт.Id)
Сообщение - идентификатор стартового сигнала
Тип - выберите нужный тип из справочника "Тип уведомления ESN" (или предварительно добавьте его)
Прочитанное - false.

4) Конец процесс

Идея такая. Прошу Вас по факту реализации отписаться, что было изменено и получилось ли осуществить данную задачку.:smile:

Алексей спасибо, Ваше решение работает но не совсем, в центре сообщений на вкладке ленты (вторая слева) уведомления есть, но не появляться красный круг с цифрой.
Не подскажите чего не хватает.

Всего хватает. Используйте существующий тип из справочника "Тип уведомления ESN" (например, Ваша запись была прокомментирована). В результате уведомление придет.

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

Посмотрите реализацию ESNNotificationProvider, как он отбирает уведомления, как реализован ESNNotificationProcess Алексей уже рассказал, но может посмотрев реализацию в системе удастся понять в чем проблема

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

Александр, спасибо.

Показать все комментарии
картинка кнопка
Технические вопросы
7.x

И вновь я за советом из мира клиентских модулей...
Есть преднастроенная страница, вызываемая в процессе.
На ней помимо контролов и штатных кнопок нужно разместить еще одну кнопку, квадратную и с картинкой (см аттач, как кнопка выбора периодов в активностях).
Меню есть, работает. Не получается картинка на кнопке, только "треугольник" меню виден на ней и Caption, если его задать.
Ошибки тоже не возникает.
Вытащил изображение, сохранил в Images модуля под именем PeriodSelectImage.
Добавляем кнопку (рядом с контролами):

// diff
{
"operation": "insert",
"parentName": "GeneralInfoBlock",
"propertyName": "items",
"name": "PeriodSelectButton",
"values": {
  "itemType": Terrasoft.ViewItemType.BUTTON,
  "caption": "",
  "imageConfig": {"bindTo": "resources.Images.PeriodSelectImage"},
  "controlConfig": {
    "menu": {
    // ...
  }
},
layout: {column: 0, row: 2, colSpan: 1}
}
}

Подскажите, что сделано неверно?

Нравится

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

Здравствуйте, resources пишите с большой буквы, этого должно быть достаточно ;)
Если не поможет, попробуйте подключить их на страницу, у меня получилось вывести кнопку с картинкой так:

define("UsrTestUploadPage2", ["BaseFiltersGenerateModule", "BusinessRuleModule", "ConfigurationConstants",
		"ConfigurationEnums", "UsrTestUploadPage2Resources"],
	function(BaseFiltersGenerateModule, BusinessRuleModule, ConfigurationConstants, Enums, Resources) {
		return {
			attributes: {
			},
			methods: {
			},
			diff: /**SCHEMA_DIFF*/[
				{
					"operation": "insert",
					"parentName": "GeneralInfoBlock",
					"propertyName": "items",
					"name": "PeriodSelectButton",
					"values": {
						"itemType": Terrasoft.ViewItemType.BUTTON,
						"caption": "test",
						"imageConfig": {"bindTo": "Resources.Images.PeriodSelectImage"},
						"controlConfig": {
						},
						"layout": {
							"column": 0,
							"row": 2,
							"colSpan": 1
						}
					}
				}
			]/**SCHEMA_DIFF*/
		};
	});

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

Илья, огромное спасибо!
Подключение у меня было, но resources - с маленькой буквы, вот и вызывал тоже с маленькой буквы. После переименования везде на Resources заработало.
Размер картинки среди контролов сделал поменьше, вместо штатных 20х20 подошло 16х16.

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

В БП есть элемент "Добавление данных", но создает он не одну запись, а несколько, на основании выборки.
Каким образом можно получить Id всех созданных в этом элементе записей?

Нравится

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

Здравствуйте, Наталья!

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

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

Алексей,
спасибо за информацию. Так и сделаю.

Показать все комментарии
Технические вопросы
7.x

Можна якось передати фільтри з реєстру в обєкт EntitySchemaQuery?
тобто таке:
var esq = new EntitySchemaQuery ...
esq.filters = this.getFilters() ???

this.getFilters() це фільтри з реєстру сторінки

Нравится

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

Роман, какая у Вас версия системы?

Версія BPM: 7.7.0.2773_BankCustomerJourney
Можливо ви дали мені посилання на старіші версії

Роман, 7.х принцип один и тот же

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

Рекомендации этой темы корректны для Вашей версии.

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

Здравствуйте.
система - bpmonline sales commerce 7.7

У меня вопросы по деталям, а именно по "деталь: Связи".
Вот в карточке "активности" в основной информации есть "деталь: Связи". Мне в этой детали не нужно чтобы показывалось поле Лид. Из мастера разделов это сделать не получается - если нажать настроить выдает сообщение - "вы не можете редактировать деталь родительской схемы". Как мне его убрать?

И второй вопрос. Что мне нужно сделать, чтобы в карточке "контакт" переместить группу полей "Примечания" из "Файлы и примечания" в "Основную информацию"?
Спасибо.

Нравится

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

Здравствуйте, Николай.

1) Для данной манипуляции необходимо создать замещающую схему для данной детали и в ней в секции diff указать:

{
     "operation": "remove",
     "name": "имя ненужного поля"
},

2) Через Мастер раздела удалить деталь из "Файлы и примечания" и добавить ее на вкладку "Примечания".

"Мартыненко Сергей" написал:1) Для данной манипуляции необходимо создать замещающую схему для данной детали и в ней в секции diff указать:

Там же как-то в базе надо было химичить с полями связи

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

А где можна узнать название нужной мне детали?
Это - Деталь взаимосвязи или может быть деталь связей объекта или может другая ибо конкретно такой деталь: Связи не могу найти? И у всех перечисленых мною вариантов нет внутри лида. Значит это не то.

А где можна узнать название нужной мне детали?
Это - Деталь взаимосвязи или может быть деталь связей объекта или может другая ибо конкретно такой деталь: Связи не могу найти? И у всех перечисленых мною вариантов нет внутри лида. Значит это не то.

"Мартыненко Сергей" написал:

Здравствуйте, Николай.

1) Для данной манипуляции необходимо создать замещающую схему для данной детали и в ней в секции diff указать:

{

     "operation": "remove",

     "name": "имя ненужного поля"

},

2) Через Мастер раздела удалить деталь из "Файлы и примечания" и добавить ее на вкладку "Примечания".


По второму ворпосу - группу полей "Примечания" не является деталью. Как же я ее добавлю в "Основную информацию" в этом случае?

В общем подходе вы можете воспользоваться инспектором элементов и найти среди загруженных js'ников нужный вам элемент или его родителя.
Будет 2 варианта:
1. Элемент добавляется в diff'е
2. Элемент добавляется динамически

Если происходит динамически, то вам нужно искать его наполнение

К примеру:

Чтобы переместить элементы из одного контейнера в другой, нужно воспользоваться операцией move (аналогично как и remove). Но здесь нужно понимать находятся ли они на одной странице

Чтобы переместить элементы из одного контейнера в другой, нужно воспользоваться операцией move (аналогично как и remove). Но здесь нужно понимать находятся ли они на одной странице

Вот сделал по рекомендации и к результату это не привело.

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

Добрый день!
Собственно если посмотреть в код наполнения детали, то можно увидеть, что все происходит динамически - метод loadContainerListData. Все колонки берутся из таблицы EntityConnection, поэтому вам достаточно найти вашу колонку в таблице и удалить эту запись.
SysEntitySchemaUId = 'C449D832-A4CC-4B01-B9D5-8A12C42A9F89' - это Activity
ColumnUId = 'd6e94162-4354-413a-bc84-e118df5e852e' - это Lead

Спасибо. Вон оно как все просто)

Артем Гура,

А если я хочу добавить свое поле-справочник (мой кастомный объект), что мене надо Insert в EntityConnection в эти поля?

Артем Гура,

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

Артем Гура пишет:

достаточно найти вашу колонку в таблице и удалить эту запись. SysEntitySchemaUId = 'C449D832-A4CC-4B01-B9D5-8A12C42A9F89' - это Activity ColumnUId = 'd6e94162-4354-413a-bc84-e118df5e852e' - это Lead

Надеюсь, когда-нибудь сделают так, чтобы для этого случая не надо было в базе искать ID-шники и вставлять/удалять записи 

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

Зверев Александр пишет:

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

Я про детали Connected To 

Можно попробовать зарегистрировать объект «EntityConnection» как справочник. Для удаления записей этого будет достаточно, а для вставки — сделать карточку с полями выбора схемы, колонки и числовым полем позиции.

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

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

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

Подскажите пожалуйста что имеется ввиду. Не нашел четкого определения корневого объекта и что конкретно значит сообщение в консоли.

Нравится

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

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

Для анализа данной ошибки необходимо проверить, как создан объект данной детали, а так же её схему.
Пожалуйста, обратитесь в техническую поддержку Террасофт.

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