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

Нравится

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

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

Есть несколько вариантов решения этой задачи:

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

2. Править в конфигурации, данная логика описана в LookupQuickAddMixin, метод onLookupDataLoaded, вызывается в basepage.

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

Добрый день! Подскажите, был ли у кого опыт интеграции 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

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

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

Нравится

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

Доброго времени суток,
Появилась необходимость поместить 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), а добавить к существующему блоку еще один фильтр?

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

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

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

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

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

Версия 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 Алексей уже рассказал, но может посмотрев реализацию в системе удастся понять в чем проблема

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

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

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

И вновь я за советом из мира клиентских модулей...
Есть преднастроенная страница, вызываемая в процессе.
На ней помимо контролов и штатных кнопок нужно разместить еще одну кнопку, квадратную и с картинкой (см аттач, как кнопка выбора периодов в активностях).
Меню есть, работает. Не получается картинка на кнопке, только "треугольник" меню виден на ней и 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 созданной записи. В результате добавления нескольких записей, будет запущено несколько экземпляров процесса.

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

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

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

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

Нравится

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

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

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

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

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

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

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

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

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

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

Нравится

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

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

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

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

Возник вот такой вопрос: есть ли возможность пользователям ondemand продуктов получить копию своего продукта onsite (пусть, даже с какими-то ограничениями - по количеству записей, по количеству пользователей и т.д.) для локальной разработки и дальнейшего переноса изменений на ondemand?

Согласитесь, вести разработку на onsite, мягко говоря, не совсем удобно. Один кэш Redis чего стоит! - раз в 10-15 минут в CSP писать запрос на очистку кэша, согласитесь, не реально... да, и реакция техподдержки не мгновенная. Опять же, с отладкой решения на ondemand все плохо.

Нравится

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

"Байбородин Николай" написал:раз в 10-15 минут

Быстро вы пишете, да много всякого, что сессии чистите :cool:

А я вот не знаю, что в 7.7 поменялось. Вносишь элементарное изменение (поле добавить), а протестировать его - целая проблема: В пользовательском интерфейсе изменений не видно, сколько кэш браузера не сбрасывай. Помогает только заход с другого браузера. Три браузера + режим Инкогнито. Шесть раз я могу протестировать сделанные изменения. А потом - всё. Только Redis.
Ну, и опять же, не в кэше одном дело... ведь есть же еще скорость сохранения изменений (которая ниже плинтуса), невозможность отладки, невозможность использовать нормальный редактор кода.
Все это в комплексе - то еще удовольствие.

"Байбородин Николай" написал:В пользовательском интерфейсе изменений не видно

Вроде хватает рефреша страницы... правда иногда клиентские схемы приходится по два раза сохранять - не применяется :)
в 7.7 главное избавились от сильверлайта

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

"Байбородин Николай" написал:

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


А я не спорю. Просто клиентскую часть правлю и не видел таких эффектов, но верю что бывает :) И стабильности тоже не ощущаю от так сказать среды разработки. А видео в суппорт, они оценят

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

Кстати, про клиентские схемы...
Замечал и такое. Через мастер вносишь изменение. Сохраняешь. Проверяешь - ничего в UI не поменялось. Обновляешь страницу раз, два, три раза обновляешь. Нет результата. Чистишь кэш браузера - нет результата. Открываешь снова в мастере, а изменений то и нет (как я понимаю, то что вы описываете). НО! Если открыть схему через управление конфигурацией, а вот они изменения - живы здоровы. Запускаешь второй браузер - все видно, все ОК. В общем, Ад и Израиль.

"Байбородин Николай" написал:Открываешь снова в мастере, а изменений то и нет

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

"Байбородин Николай" написал: ведь есть же еще скорость сохранения изменений (которая ниже плинтуса)

а в on-site не намного лучше

Здравствуйте.
В On-Site у Вас, просто, больше рычагов влияния на ситуацию. Можно управлять ресурсами сервера БД, приложения сессий. Нивелируется такая составляющая, как канал связи и т. д..

Мда. Как оказалось, это - привилегия за отдельные деньги. Было бы справедливо, если бы были нормальные условия для разработки на ondemand. А так, подъем бабла на пустом месте, так же как и в случае с ежегодной оплатой "техподдержки" для onsite.

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

Для ведения разработки и переноса изменений на On-Demand необязательно иметь доступ к серверам. Вы можете вести разработку локально у себя, при этом Ваш локальный сайт должен быть настроен для работы с SVN. По результату выполненных изменений с помощью SVN Вы можете перенести доработки на сайт On-Demand.

Непосредственно предоставление доступа к серверам On-Demand конкретного сайта подразумевает выделение дополнительной изолированной среды и за исключением выполнения отладки серверного кода и профайлинга SQL-запросов уже выполненных залитых доработок не требуется для разработки.
Всю необходимую отладку корректности работы проводите на локальной среде и после того, как убедитесь в корректности работы - переносите на On-Demand.

О процессе разработки и нюансах настройки есть статья в Academy, блок "С чего начать разработку":
http://academy.terrasoft.ru/documents/?product=SDK&ver=7.7.0

"Безродный Андрей" написал:Вы можете вести разработку локально у себя

Андрей, вот этот пункт и вызывает вопрос. Клиент купил On-Demand продукт. Где он возьмет бандл, аналогичный тому, который у него развернут On-Demand для локальной разработки?

Николай,

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

Вот об этом я и говорю. За то, что для On-Demand продуктов у вендора нет адекватных инструментов разработки (это при том, что Terrasoft активно пропагандирует именно On-Demand), в конечном счете платит клиент.

Николай,

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

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