Доброго времени суток.

Версия 7.8 sales.

Задача такая: на детали Средства связи на странице Контакта есть поля "Мобильный телефон" и "Основной телефон". Также у контакта есть своё поле "Мобильный телефон".

При создании контакта значение из поля контакта "Мобильный телефон" автоматически добавляется в соответствующее поле детали Средства связи.

Возможно ли сделать так, чтобы это значение добавлялось также автоматически в поле "Основной телефон" вместо мобильного? (см. скриншот)

Спасибо.

Нравится

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

При сохранении контакта:
1й запрос на проверку, есть ли в contactcommunication этого контакта "Основной телефон"
2й запрос update если есть, insert если нет.

Просто так добавить, думаю, будет сложновато, ибо синхронизация вшита в БП, БП запускается при сохранении, он запускает функцию синхронизации, функция запускает хелпер, и уже в C# хелпере происходит синхронизация. Что-то неохота все это расковыривать ради доп. поля

Да, надо было бы вынести в настройки синхронизацию детали "Средста связи" с полями Контакта и Контрагента.

Как и поля детали "Адреса"

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

Добрый день.

Создали в "Средствах связи" в карточке контакта новый тип средства связи - "Доп.email".
В профиле карточки контакта создали поле "Доп. email" куда хотим выводить доп.email из средств связи.
Но, как видно из прикрепленного скриншота, в профиль контакта в поле "Доп. email" ничего не выводится, хотя в средствах связи указан "Доп.email" контакта.
Как подтягивать в профиль контакта "Доп.email" из средств связи, аналогично другим средствам связи?

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

Нравится

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

Здравствуйте,
Дело в том, что деталь, это отдельный объект в системе. В вашем случае объект детали "средства связи контакта": «ContactCommunication». А сама карточка контакта, другой объект (таблица в бд): "Contact", в которой самые основные средства связи продублированы, к примеру, как вы продублировали, создав поле "Доп. email". Но что бы оно заполнялось, необходимо написать соответствующую логику. К примеру, вы можете создать бизнес-процесс для этой цели, по событию создания экземпляра ContactCommunication, и в связанный контакт при этом, элементом «изменение данных», записывать сохраняемый дополнительный E-mail из детали в контакт. Подробнее про БП читайте в цикле статей на академии:
https://academy.terrasoft.ua/documents/technic-bpms/7-8/obzor-vozmozhno…

Максим Шевченко пишет:

Но что бы оно заполнялось, необходимо написать соответствующую логику

В объекте Contact уже существует подобная логика. Так зачем изобретать велосипед, который в будущем будет крутиться не так, как основная функциональность?

Как расширить базовую логику, чтобы синхронизировались доп. поля? 

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

Здравствуйте!
В продукте sales enterprice 7.8 в справочнике "Типы с средств связи" добавляю новое средство связи "Ссылка на VK" и выбираю тип коммуникации "Соц. сеть", но после добавления на странице контакта и контрагента запись в поле "Ссылка на VK"отображается в виде текста, даже если вводить через http.
Нужно реализовать обработку поля "Ссылка на VK" как ссылку без изменения типа коммуникации на "Web" и без реализации синхронизации с аккаунтом Вконтакте.
При этом стандартные средства связи Facebook и Twiter оставить рабочими (с реализацией синхронизации).

Нравится

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

В базовой версии приложения функционал средств связей, например, с типом «E-mail» и «Web» реализован только для базовых значений (реализовано на уровне конкретных ID). Реализацию данного функционала можете посмотреть в схеме «BaseCommunicationViewModel».

Если Вы хотите, чтобы пользовательские поля с типом «Web» имел такую же логику как и базовая, то есть работал как ссылка, то попробуйте пожалуйста, следующее:

- заместить полностью «CommunicationUtils»;
- переопределить метод isWebType, возвращая там true для не только базовых записей по Id, но и для Вашей.

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

Илья, спасибо! Разобрались:smile:

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

Добрый день.
На ContactPage есть деталь ContactCommunication.
Необходимо при удаления средства связи перемещать его в временную
таблицу, удалив из ContactCommunication

Подскажите как лучше это сделать.
p.s.Думали отловить удаленный элемент(ы) с детали.
Не получилось это сделать. Метод this.get("DeletedItems") в
методе save детали не возвращает values удаленных елементов.

Нравится

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

Вижу два пути
- тяжелый реализация на уровне субд - триггером;
- простой процесс со стартовым сигналом удаление записи

"Александр Кудряшов" написал:

Вижу два пути

- тяжелый реализация на уровне субд - триггером;

- простой процесс со стартовым сигналом удаление записи

- Вес запроса зависит от его реализации:smile:
- Не получится. Необходимо определить процесс на событие "Перед удалением записи" непосредственно в объекте ContactCommunication.

"Демьяник Алексей" написал:Не получится

получится
ставите сигнал, получаете идентификатор, затем чтение данных из СредствСвязиКонтакта с id= идентификатору из первого элемента. А потом делайте с результатом чтения данных что хотите. Проверил на 7.7.0 - создал по факту удаления активность с заголовком = удаленному номеру :)
Для удаления номера использовал действие "удалить" в детали (см скрин)
Просто доверьтесь bpmonline :)

"Демьяник Алексей" написал:Необходимо определить процесс на событие "Перед удалением записи" непосредственно в объекте ContactCommunication.

это кстати тоже отличный вариант, но мозг измученный клиентским кодом его сразу не рассмотрел

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

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

Коллеги. доброго вечера!
Каким образом можно изменить маску ввода E-mail в детали "Средства связи контрагента"? Проблема в том, что она сейчас не принимает адрес в домене *.company - в маске стоит ограничение на 4 символа в строке после точки (а нужно 7)

Нравится

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

В общем и целом расписано здесь (см. пример 2)

Но нужно сказать, что у нас на версии 7.5 этот пример оказался некорректен в плане переопределения метода addItem, так как он не возвращает никаких item. Поэтому пришлось его полностью скопипастить из родительской BaseCommunicationDetail и заменить строчку

this.addColumnValidator("Number", newItem.validateField, newItem);

на

this.addColumnValidator("Number", this.validateCommunicationFormat, newItem);

Ну и, конечно, определить метод validateCommunicationFormat, в котором проверять в зависимости от типа средства связи по регэкспу формат и возвращать объект с invalidMessage и fullInvalidMessage.

Андрей, большое спасибо, всё получилось!

{
                validateEmailFormat: function (value) {
                    var invalidMessage = "";
                    var isValid = true;
                    var communicationType = this.get("CommunicationType");
                    var number = value || this.get("Number");
                    // Проверка введенного E-mail на соответствие маске ввода.
                    if (communicationType.value == "ee1c85c3-cfcb-df11-9b2a-001d60e938c6") {	// E-mail
                        isValid = (Ext.isEmpty(number) || new RegExp("^[0-9a-z_]+@[0-9a-z_]+\.[a-z]{2,10}$").test(number));
                        if (!isValid) {
                            invalidMessage = "Укажите E-mail по формату";
                        }
                    }
                    return {
                        fullInvalidMessage: invalidMessage,
                        invalidMessage: invalidMessage
                    };
}

Замечательно. Наверное стоит еще добавить дефис в список символов допустимых в E-mail. Только нужно добавлять его либо самым последним перед ], либо первым - сразу после [

ещё вопрос возник - как заставить код принимать русские символы в e-mail? Например, для info@сайт.рф. Вариант ^[0-9a-z_-\.]+@[0-9a-zа-яё_-\.]+\.[a-zа-яё]{2,10}$ почему-то не срабатывает

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

Ваш вариант не будет работать.
Корректной маской будет:

var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA--ЯА-Я0-9.-]+\.[a-zA--яА-Я]{2,10}$/;

Алексей, предложенный Вами вариант тоже не сработал. Может быть, для работы с кириллицей что-то дополнительно подключить нужно?

Несколько уточняющих уточняющих вопросов:
1) Вы замещали EmailHelper?
2) После замещения EmailHelper Вы скопировали весь код из материнской схемы и заменили одну строку определения параметра emailPattern?
3) После сохранения схемы необходимо очистить кэш браузера. Вы это сделали?

1. Замещал BaseCommunicationDetail
2. -
3. -

Тогда:
1) Заместите EmailHelper. В замещающую схему вставьте следующий код:

define('EmailHelper', ['ext-base', 'terrasoft', 'EmailHelperResources', 'ConfigurationConstants', 'MaskHelper'],
	function(Ext, Terrasoft, resources, ConfigurationConstants, MaskHelper) {
 
		function isEmailAddress(emailAddress) {
			var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA--яА-Я0-9.-]+\.[a-zA--яА-Я]{2,9}$/;
			return emailPattern.test(emailAddress);
		}
 
		function getEmailUrl(emailAddress) {
			if (isEmailAddress(emailAddress)) {
				return 'mailto:' + emailAddress;
			}
			return '';
		}
 
		function onEmailUrlClick(emailAddress) {
			var url = getEmailUrl(emailAddress);
			if (!Ext.isEmpty(url)) {
				var win = window.open(url, '', 'height=1,width=1');
				setTimeout(function() {
					win.close();
				}, 1000);
			}
		}
 
		return {
			isEmailAddress: isEmailAddress,
			getEmailUrl: getEmailUrl,
			onEmailUrlClick: onEmailUrlClick
		};
	});

2) Очистите кэш.

В результате Вы сможете создавать средства связи с типом Email с кириллическими символами в домене (например *.почта.рф) , а также с длиной домена в 9 символов (например, *.travel)

Алексей, работает, спасибо!

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