Добрый день,

У меня такой вопрос, как сделать элемент календарь(по аналогии с таковым в разделе Активностей). В разделе Активности имеется календарь, однако никак не могу понять, какие методы отвечают за реализацию данной возможности.

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

Нравится

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

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

Календарь - это представление раздела "Активности". Функционал добавления нового представления (SchedulerDataView) реализован в схеме ActivitySectionV2 (пакет NUI).

За отображение данных отвечает элемент "Schedule".

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

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

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

Календарь - это представление раздела "Активности". Функционал добавления нового представления (SchedulerDataView) реализован в схеме ActivitySectionV2 (пакет NUI).

За отображение данных отвечает элемент "Schedule".

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

Добрый день, нельзя ли поподробнее, какие методы отвечают за "календарь"?

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

При добавлении любого поля через дизайнер появляется ошибка в консоли "Элемент со значением "Requests" параметра "name" уже существует " и изменения не сохраняются, в чем может быть причина?

Нравится

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

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

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

Добрый день! Помогите, пожалуйста, разобраться с такой проблемой. Необходимо сделать фильтрацию поля (UsrJob), чтобы в зависимости от введённых в него данных менялся список возможных данных для поля PEKAdressIspolnitel. Пользовался статьёй на сайте Академии Террасофта по созданию фильтрации, сделал по аналогии вот такой код:

rules: {
"UsrJob": {
FiltrationUsrJobByPekAdressIspolnitel: {
ryleType: resources.Enums.ryleType.Filtration,
autocomplete: true,
autoClean: true,
baseAttributePatch: "PEKAdressIspolnitel",
comparisonType: Terrasoft.ComparisonType.EQUAL,
Type: BusinessRuleModule.enums.RuleType.attribute,
attribute: "PEKAdressIspolnitel"
}
}
}

При этом мне не зайти в раздел с этими полями после сохранения этого кода. Как мне подсказали, ошибка заключается в следующем: “В переменной rules отсутствует свойство Enums”. Подскажите, пожалуйста, какие свойства и где нужно добавить?

Нравится

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

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

Из того, что явно бросается в глаза:

"Семёнов Дмитрий Александрович" написал:

Type: BusinessRuleModule.enums.RuleType.attribute

Там должно быть:

type: BusinessRuleModule.enums.ValueType.ATTRIBUTE,

Также нужно смотреть на консольную ошибку. Возможно Вы не подключили BusinessRuleModule.

"Семёнов Дмитрий Александрович" написал:ryleType: resources.Enums.ryleType.Filtration,

Должно быть так

BusinessRuleModule.enums.RuleType.FILTRATION

и в функцию в самом начале модуля BusinessRuleModule не забудьте

Спасибо, код подправил немного.
define("SfRepairPage", ["BusinessRuleModule", "SfRepairPageResources", "GeneralDetails"],
function(BusinessRuleModule, resources, GeneralDetails) - добавил BusinessRuleModule.

Исправил rules:

rules: {
"UsrJob": {
FiltrationUsrJobByPekAdressIspolnitel: {
ryleType: BusinessRuleModule.enums.RuleType.FILTRATION,
autocomplete: true,
autoClean: true,
baseAttributePatch: "PEKAdressIspolnitel",
comparisonType: Terrasoft.ComparisonType.EQUAL,
type: BusinessRuleModule.enums.ValueType.ATTRIBUTE,
attribute: "PEKAdressIspolnitel"
}
}
}

Но всё равно раздел зависает при попытке его открыть.

"Семёнов Дмитрий Александрович" написал:Но всё равно раздел зависает при попытке его открыть

F12 и Консоль с ошибками поможет вам :) смотрите в чем проблема в ней

Пишет, что: Uncaught Terrasoft.InvalidFormatException: Неверный формат правила FiltrationUsrJobByPEKAdressIspolnitel

не вижу ничего ошибочного в коде...
разве что вот сюда добавить:

define("SfRepairPage", ["terrasoft", "BusinessRuleModule", "SfRepairPageResources", "GeneralDetails"],
function(Terrasoft, BusinessRuleModule, resources, GeneralDetails)

Добавил, но не помогло( Прикрепил ошибку в консоли.

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

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

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

Нравится

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

В самом простом случае, Вы скорее всего хотите бизнес правило блокировки:
https://academy.terrasoft.ru/documents/technic-sdk/7-8/pravilo-bindpara…
Если хочется именно по коду, в методах, то привяжите данное свойство контрола к атрибуту:
В секции атрибутов:

"SynchronizeWithLDAP": {
   dataValueType: this.Terrasoft.DataValueType.BOOLEAN,
   value: true
},

В дифе:

{
	"operation": "insert",
	"name": "foo",
	"values": {
		"layout": {
			"column": 0,
			"row": 1,
			"colSpan": 14
		},
		"bindTo": "foo",
		"enabled": {"bindTo": "SynchronizeWithLDAP"}
	},
	"parentName": "bar",
	"propertyName": "items",
	"index": 1
},

А потом по коду:
Доступно:

this.set("SynchronizeWithLDAP", true);

Недоступно:

this.set("SynchronizeWithLDAP", false);

Подобных примеров в базовой конфигурации очень много.

Спасибо, Илья! Очень выручили

Мотков Илья,

Здравствуйте, хотел бы узнать, как вначале поле сделать доступным, а потом через dependencies, при изменении другого поля, сделать его недоступным?

Артём, это довольно старая переписка. С тех пор уже можно пользовательскими средствами настроить видимость/доступность/обязательность поля при помощи бизнес-правил.

gif_chapter_business_rules_if_condition_setup.gif

gif_chapter_business_rules_then_condition_setup.gif

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

Уважаемые форумчане.
Есть задача: по определенному условию сделать редактируемое поле нередактируемым и наоборот. Проще говоря, чтобы замок появился на нем. Знаю, что есть свойство "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.

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

Добрый день
Сделала изменение в процессе отправки ответа по отмене Инцидента, а именно: создана новый параметр (строка), далее, ч/з формулу определила ее значение как "тело шаблона" + "заметки в инциденте", после чего в новой активности с типом е-мейл в колонке html указала значение этого нового параметра.
В итоге - все получилось, в окне е-мейл активности на отправку ответа об отмене Инцидента вижу нужные данные. НО: если заметки в инциденте содержали какую-либо картинку, то при сохранении этой е-мейл-активности картинка не подтягивается на вкладку "Файлы" (как, напр., при копировании е-мейл активности). Думаю, что в связи с этим в письме, полученном Заявителем, эта картинка не будет открываться. Помогите, пожалуйста, как исправить этот момент. Заранее спасибо

Нравится

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

Думаю, что причина в том, что Вы забыли реализовать логику копирования картинок из детали заметок в качестве файлов-вложений к письму и соответствующей корректировки HTML-кода письма с подменой путей к файлу. Соответственно, надо её разработать, предварительно разобравшись, как оно устроено.

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

Приятной работы!

Мария, я уже ценю Ваш юмор!

Спасибо!

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