Уважаемые форумчане.
Есть задача: по определенному условию сделать редактируемое поле нередактируемым и наоборот. Проще говоря, чтобы замок появился на нем. Знаю, что есть свойство "enabled", ему нужно присвоить true. Как это сделать программно?

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

Нравится

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

Здравствуйте.
В разделе лидов пока решили не использовать базовый функционал, так как у нас используются другие стадии. Но и базовый функционал бесповоротно ломать не хотим, поэтому решили дополнить справочник своими стадиями, а в карточке показывать только те стадии, которые используем. Этого добились с помощью бизнес-правила и ввода в справочнике Стадия лида логического поля ShowInCard по которому и осуществляем фильтрацию.

                                "QualifyStatus": {
                                        FiltrationQualifyStatus: {
                                                ruleType: BusinessRuleModule.enums.RuleType.FILTRATION,
                                                baseAttributePatch: "ShowInCard",
                                                comparisonType: Terrasoft.ComparisonType.EQUAL,
                                                type: BusinessRuleModule.enums.ValueType.CONSTANT,
                                                value: true
                                        }
                                },

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

Нравится

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

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

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

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

А может все же существует вариант с переопределением какого-либо метода родительской схемы? Если мы будем использовать механизм прав, то, как я понимаю, чтобы перенести потом нужные настройки с тестового сервера на рабочий с помощью WorkspaceConsole, необходимо во-первых, будет дополнительно переносить пакет Custom, поскольку мы ведем разработку в другом пакете, а при включении администрируемости автоматически создается замещающий объект в пакете Custom, а во-вторых, необходимо будет через вкладку Данные раздела Конфигурация сохранить наполнение объекта SysQualifyStatusRight, верно?. Опять же, сохранять данные также в пакете Custom, а не в нашем основном пакет разработки?

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

Данные действительно сохраняются в таблице SysQualifyStatusRight. Что касается замещения, то Вы можете сделать его в Вашем пакете и установить свойство "Администрируется по записям". В результате объект начнет администрироваться по записям. Права можно установить только SQL запросом на боевой среде после переноса пакета. К сожалению, на вкладке "Данные" можно осуществить перенос данных таблиц, у которых есть объекты. Для таблиц, которые хранят права, объектов в системе нет.

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

Посмотрите на два места:
1. getLookupFilterValue: function(filter) - в клиентском модуле провайдера фильтрации схем объектов (EntitySchemaFilterProviderModule). Метод получает значение для справочной колонки.
2. pushSelectFilters: function(select) - в клиентском модуле представления страницы выбора значения из справочника (LookupPageViewModelGenerator). Добавляет фильтры в select.

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

Пример для случая:
При выборе контактов по полю Ответственный в окне выбора выводить толькло контакты, которые являтся пользователями системы.
Реализовать для двух разделов: Контрагенты и Контакты

Шаги:
1. Создать Замещающий клиентский модуль для EntitySchemaFilterProviderModule (провайдер фильтрации схем объектов).
Переопределить метод getLookupFilterValue и в объект config добавить дополнительное свойство addContactUserFilter, по которому дальше в методе pushSelectFilters клиентского модуля LookupPageViewModelGenerator будет выполняться наложение фильтрации по контактам, которые являются пользователями системы (есть в таблице SysAdminUnit, связка по полю ContactId).

2. Создать замещающий клиентский модуль LookupPageViewModelGenerator и переопределить метод pushSelectFilters, в котором по переданному конфигу (lookupInfo) мы определяем, что нужно наложить фильтр по контактам-пользвоателям системы. Для использования стандартного фильтра OwnerFilter подключить модуль BaseFiltersGenerateModule.

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

Добрый день! Вопрос по продукту sales enterprice 7.8.
Есть 2 сайта приложения. На одном - продакшен-версия, на втором - девелоперская. На продакшен версии клиент создал новую функциональную роль и настроил права доступа в разделе [Доступ к объектам] к созданной роли, а также к роли [Все сотрудники компании].
Как правильно подготовить девелоперскую версию к деплою, чтобы не "затереть" настроенные на продакшен права?

Нравится

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

Анастасия, если правильно Вас поняла, то речь идет о переносе доработок через SVN, а не полная подмена БД? Если да, то права и так не должны перезатиреться. Ну а в принципе, как на счет того, чтоб не переносить таблицы с правами? Или сделать бекап таблицы в базе данных и в случае чего просто через update вернуть как было.

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

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

Возникла потребность поменять логику привязки входящих Email сообщений к контактам (или контрагентам). Существующая логика, когда привязка зависит от типа контакта, по многим причинам не устраивает. Хочется реализовать альтернативный вариант:

  1. Привязывать по совпадению Email отправителя и Email контакта
  2. Если найдено несколько контактов с таким Email - привязывать к первому по алфавиту
  3. Если контакт не найден - повторить поиск по контрагентам
  4. Если контрагент не найден - не привязываем

Как можно такое реализовать. Нужно редактировать бизнес-процесс? Какой? Или это вообще в другом месте?

Bpm'online 7.8

Заранее благодарен за ответы!

Нравится

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

"Байбородин Николай" написал:Существующая логика, когда привязка зависит от типа контакта

А как она зависит от типа контакта?

Цитата из переписки с саппортом: "Привязка контакта к Email сообщению происходит следующим образом: фильтруются все записи у кого на детали «Средства связи» в поле «Email» указан адрес из поля «От кого», затем происходит фильтрация по полю «Тип» не равно «Сотрудник», после этого происходит привязка первой записи из результирующего списка."
Я, честно говоря, не понял, зачем это делалось, теперь ищу, где исправить и сделать как надо.

В документации в разделе "КАК ЗАПОЛНЯЮТСЯ ПОЛЯ EMAIL-СООБЩЕНИЙ, ЗАГРУЖЕННЫХ В
BPM’ONLINE" читаю:

При загрузке почты в bpm’online автоматически производится первичная обработка
полученных email-сообщений:
1. Значение поля [От кого] сопоставляется со средствами связи зарегистрированных в
bpm’online контрагентов и контактов. Если в системе будут найдены совпадения, то на
странице такого email-сообщения будут автоматически заполнены поля [Контрагент],
[Контакт].
2. Если по значению поля [От кого] в системе не найдено совпадений, анализируются
значения полей [Кому], [Копия], [Скрытая копия]. Если по этим полям в системе
будут найдены совпадения, то на странице такого email-сообщения также будут
заполнены поля [Контрагент], [Контакт].

К «Сотрудникам» письма тоже привязываются, только на странице контакта не отображается деталь, если тип контакта = «Сотрудник»

Чтобы отображать, надо заместить один метод на ContactPageV2

	methods: {
			setIsEmailDetailVisible: function() {
				this.set("IsEmailDetailVisible", true);
			}
		},
Показать все комментарии

Добрый день! Подскажите, пожалуйста, каким образом можно убрать отображение кнопки "Квалифицировать" в карточке лида, да и вообще, как администрируются эти кнопки?

Нравится

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

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

			initLeadManagementButtonVisibility: function(entity) {
/*				entity = entity || this.getEntity();
				if (Ext.isEmpty(entity)) {
					return;
				}
 				var isNewMode = ((this.isNewMode && this.isNewMode()) === true);
				var visible = false;
				if (isNewMode === false) {
					var primaryColumnValue = entity.get(entity.primaryColumnName);
					var qualifyStatusId = this.getQualifyStatus(primaryColumnValue);
					var qualifyStatus = LeadConfigurationConst.LeadConst.QualifyStatus;
					visible = (qualifyStatusId === qualifyStatus.Qualification ||
						qualifyStatusId === qualifyStatus.Distribution ||
						qualifyStatusId === qualifyStatus.TransferForSale);
				}
				this.set("LeadManagementButtonVisible", visible); */
				this.set("LeadManagementButtonVisible", false);
			},

Причем сделать это и в LeadPageV2, и в LeadSectionV2. Также не забыть деактивировать процесс Управление лидом в библиотеке процессов.

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

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

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

Здравствуйте, пытаюсь написать приложение с использованием Веб-службы DataService, проблема в следующем при добавлении записей где указываю поля с датами возвращается ответ "Удаленный сервер возвратил ошибку: (500) Внутренняя ошибка сервера." если убираю поля с датами запись добавляется, если кто то сталкивался подобным отпишитесь.

Нравится

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

Сталкивались, но в другом сервисе, конфигурационном PurchaseService.
Тогда оказалось, что:

Похоже, дело в формате даты. Вы передаёте:
<ns1:Date>2013-08-20T00:00:00+04:00</ns1:Date>
А надо:
<ns1:Date>2013-08-20T00:00:00</ns1:Date>
Если написать в этом формате, веб-сервис отрабатывает без ошибки.

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

Сталкивались, но в другом сервисе, конфигурационном PurchaseService.

Тогда оказалось, что:

Похоже, дело в формате даты. Вы передаёте:

<ns1:Date>2013-08-20T00:00:00+04:00</ns1:Date>

А надо:

<ns1:Date>2013-08-20T00:00:00</ns1:Date>

Если написать в этом формате, веб-сервис отрабатывает без ошибки.


Пробовал в разных форматах
20-09-2016 13:55:00
20.09.2016 13:55:00
9/20/2016 13:55:00
все ровно ошибка 500

А если так, как в моём примере, первом и втором?

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

Здравствуйте! В sales enterprice 7.8 в карточке лида мы отключили стандартные бизнес-процессы и, чтобы не зависал прогресс-бар, заменили LeadSectionActionsDashboard на SectionActionsDashboard:

"ActionsDashboardModule": {
"config": {
"isSchemaConfigInitialized": true,
"schemaName": "SectionActionsDashboard",
"useHistoryState": false,
"parameters": {
"viewModelConfig": {
"entitySchemaName": "Lead",
"actionsConfig": {
"schemaName": "QualifyStatus",
"columnName": "QualifyStatus",
"colorColumnName": "Color",
"filterColumnName": "IsDisplayed",
"orderColumnName": "StageOrder",
"innerOrderColumnName": "StageInnerOrder",
"decouplingConfig": {
"name": "QualifyStatusDecoupling",
"masterColumnName": "CurrentStatus",
"referenceColumnName": "AvailableStatus"
}
},
"dashboardConfig": {
"Activity": {
"masterColumnName": "Id",
"referenceColumnName": "Lead"
}
}
}
}
}
}

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

Нравится

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

Здравствуйте, Анастасия!

Описанное поведение не воспроизвел. Возможно у Вас не настроены вебсоккеты (не открываются автогенерируемые страницы).

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

"Демьяник Алексей" написал:

Здравствуйте, Анастасия!

Описанное поведение не воспроизвел. Возможно у Вас не настроены вебсоккеты (не открываются автогенерируемые страницы).

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

Спасибо, Алексей. С автогенерируемыми страницами вопрос решился! Но осталась проблема:
при создании активностей через бизнес-процессы активности появляются в дашборде только после сброса кеша

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

Коллеги, хочется услышать ваше мнение и опыт.

В какой сущности лучше всего регистрировать заявки клиента на отключение от услуги, на отказ от дальнейшего сотрудничества и т.п.?

В лидах как-то, наоборот, регистрируется интерес к продукту/услуге.
И в обращениях не хотелось бы account manager'у придется обучаться специфике работы сервисного отдела, чтобы разобраться в процессе обработке обращения.
Или ради этого создавать отдельный раздел? Тоже не очень логично.

Благодарен за ваши советы.

Нравится

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

Из уже существующих для этой цели больше всего подходит раздел "Обращения". Но, если нужно было был для себя, то сделала бы отдельный раздел "Заявки" специально для отдельной группы пользователей.

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

Возникает ошибка "all-combined.js:228 Uncaught Terrasoft.UnsupportedTypeException: null is unsupported type" при попытке добавить левый грид с заказами в раздел "Заказы", по аналогии с "Активностями"

Возникает ошибка на строке "gridData.insert(0, key, item);"

addItemsToGridData: function(dataCollection, options) {
var gridData = this.getGridData();
debugger;
dataCollection = this.clearLoadedRecords(dataCollection);
dataCollection.eachKey(function(key, item) {
gridData.insert(0, key, item);
});
}

Я новичек в данной теме, помогите разобраться

код модуля и детали в приложении.

Нравится

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

Здравствуйте,
Что вы подразумеваете под сделать «левый грид», желательно со скриншотами, а также зачем Вам это нужно (бизнес задача), т.к. в силу того, что Вы новичок, возможно есть более простые способы реализации того что Вам необходимо либо обходные пути.

"Мотков Илья" написал:

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

Что вы подразумеваете под сделать «левый грид», желательно со скриншотами, а также зачем Вам это нужно (бизнес задача), т.к. в силу того, что Вы новичок, возможно есть более простые способы реализации того что Вам необходимо либо обходные пути.

Здравствуйте,
Изначально бизнес задача звучала как Воссоздание представления раздела планирование ( по аналогии с разделом Активности, вкладка планирование ) в другом разделе.

В этом представлении 3 контейнера: грид(список) слева, календарь (шедулер) и карты гугла. Элементы грида можно перетаскивать на календарь.
Все попытки воссоздать это представление для другого раздела (для Заказов) не увенчались успехом.
В связи с этим пытаюсь сначала реализовать хотя бы грид, потом, когда получится, буду дальше воссоздавать раздел по частям.
Не ясно как загружать данные в грид, можете подсказать как это реализовать?
Было бы замечательно если бы стало ясно как полностью решить поставленную бизнес задачу, воссоздав представление планирования для другого раздела.

P.S: раньше задавал этот вопрос, ответ был один: смотреть в сторону реализации этого представление из пакета FieldForce, но из-за того, что реализация данного представления очень жёстко завязана на объекте активности и модулях раздела активности, не удалось даже воссоздать грид.

Удалось только создать представление:

Был бы весьма признателен за информацию по данному вопросу.

Спасибо.

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

Добрый день, возникла ошибка при попытке добавить левый грид с заказами в раздел "Заказы", по аналогии с "Активностями"

Возникает ошибка на строке "gridData.insert(0, key, item);"

addItemsToGridData: function(dataCollection, options) {
var gridData = this.getGridData();
debugger;
dataCollection = this.clearLoadedRecords(dataCollection);
dataCollection.eachKey(function(key, item) {
gridData.insert(0, key, item);
});
}

"all-combined.js:228 Uncaught Terrasoft.UnsupportedTypeException: null is unsupported type"

код модуля и детали в приложении.

Нравится

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