Добрый день!

Необходимо отфильтровать из кода, по кастомному полю раздел. Нашел QuickFilterModuleV2, но не могу никак разобраться как его использовать. Во время дебага из браузера удалось при вызове метода showQuickFilter отобразилось поле редактирования фильтра. Но в QuickFilterModuleV2 все методы являются protected или private, и к ним нет доступа.

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

Нравится

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

Здравствуйте, есть две темы, фильтрация раздела из другого раздела:
http://www.community.terrasoft.ru/forum/topic/12640

Фильтрация текущего раздела из текущего раздела:
http://www.community.terrasoft.ua/forum/topic/15943

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

Здравствуйте, есть две темы, фильтрация раздела из другого раздела:

http://www.community.terrasoft.ru/forum/topic/12640

Фильтрация текущего раздела из текущего раздела:

http://www.community.terrasoft.ua/forum/topic/15943


Спасибо, обе темы видел.
Во вторую только сегодня добавили новый ответ, решение подходит, еще раз спасибо!

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

Здравствуйте.
Интересует вопрос как изменить обработку нажатия на иконку почты (или на сам адрес почты) в карточке контакт.
Сейчас при нажатии на иконку почты (или на сам адрес почты) вызывается программа Outlook. Мне это не нужно. Я хочу, чтобы при нажатии на эту иконку стартовал мой определенный бизнесс-процес. Это можна как-то реализовать? Подскажите пожалуйста. Спасибо!

Нравится

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

Добрый день!

Переопределите метод onTypeIconButtonClick схемы NUI.BaseCommunicationViewModel, реализовав в методе запуск бизнес процесса.

Алексей, а можете скинуть пример кода и последоватьльность действий, если допустим нужно чтобы эта иконка запускала процесс UsrSendEmail и чтобы в этот процесс заходил (как параметр) также Емайл на который мыкликали. (если не сложно, то сделайте скриншоты всех внесенных изменений)

Спасибо Вам большое за Ваши ответы!

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

Боюсь, что не смогу Вам помочь, т.к. я знаю где живет та или иная функциональность, но я не разработчик:smile:

Я понял. Спасибо! Ну хоть скажите мне нужно дописать переопределенную эту функцию onTypeIconButtonClick в Схема отображения карточки контакта (ContactPageV2)? Правильно?

Данная задача делится на несколько:
1) Создать поле, которое будет хранить информацию о email адресе
2) Создать кнопку
3) Создать обработчик события этой кнопки

Все должно быть решено на уровне страницы ContactPageV2.

Николай, приближенный алгоритм:

- создать свой модуль c методом onLinkClick, который будет обращаться от BaseCommunicationViewModel:

- заместить ContactCommunicationDetailV2 и поменять базовый модуль BaseCommunicationViewModel на новый (скриншот, где упоминается базовый модуль):

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

Коллеги. доброго вечера!
Каким образом можно изменить маску ввода 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)

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

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

Через Администрирование изменил Доступ с Х на галочку
и потом
вышло следующее

Date: 15.03.2016 17:37:44
Date (UTC): 15.03.2016 14:37:44

Exception Message: Строка не распознана как действительное логическое значение.
Exception Type: System.FormatException
Exception Source: mscorlib

Exception Stack Trace:
   в System.Boolean.Parse(String value)
   в System.ComponentModel.BooleanConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value)

SessionID: xv5awqtt5egrj15cfvs4dtfd
Request URL: /0/ViewPage.aspx?Id=5e5f9a9e-aa7d-407d-9e1e-1c24c3f9b59a
Request Path: /0/ViewPage.aspx
Request UrlReferrer: a href="http://localhost:7500/0/Nui/ViewModule.aspx

Request"
title="http://localhost:7500/0/Nui/ViewModule.aspx

Request"
>http://localhost:7500/0/Nui/ViewModule.aspx

Requesta> Type: GET
User Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0
User Host Address: ::1
User: Super
Is Authenticated: True
Authentication Type: Forms
Is Secure Connection: False

Application Version: 7.5.0.1122
Application Path: D:\WWW\Logistics75_Enterprise\Terrasoft.WebApp\
Application Virtual Path: /0
Application Trust Level: Full
Machine Name:
Is Local: True

Process ID: 544
Process Name: w3wp.exe
Process Account Name: NT AUTHORITY\СИСТЕМА
Thread Account Name: NT AUTHORITY\СИСТЕМА
OS Version: Microsoft Windows NT
Net Framework Version: 4
DBExecutor Type: MSSqlExecutor

И сейчас я даже не могу зайти в Управление конфигурацией. Выводит сообщение выше.

Нравится

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

и теперь при изменении даже ФИО пользователя выводиться ошибка.
Строка не распознана как логическое значение

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

Для проведения анализа прошу направить описание ошибки и обезличенную копию БД+номер версии продукта на support@terrasoft.ru

При аналогичном действии была другая проблема, но решали её изменением администрирования в конфигурации объекта, а не на странице администрирования.

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

В ранее созданных отчетах вижу привязку:

А то у меня:

Как получить (List) вмеcто (Dataset) ?

Нравится

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

Татьяна,

опишите, пожалуйста, какую бизнес-задачу Вы хотите решить?

Хочу сделать отчет (наподобие Досье Контакта), чтобы:
в этом же отчете еще распечатывались по определенному Контакту и его Записи (с детали Записи карточки Контакта).

Сравните у готового и у Вашего отчётов наполнение вкладки «Данные» правой панельки в дизайнере.
«List» означает, что выбирается не из датасетов, а из параметров.

Не пойму, в чем отличие:

// Write - это моя новая деталь Записи в карточке Контакта.

К тому же, если я пытаюсь перевыбрать (List), то у меня предлагается DataSet:
Было:

Пытаюсь перевыбрать на то же самое:

List — это для параметров. У Вас на первом скриншоте параметров нет (см. внизу дерева справа).

а КАК сделать так, чтобы эти параметры были?

Добавить.

А как добавить?

Правой кнопкой.

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

Здравствуйте, проблема появилась. Пытаюсь сохранить email или компании и появляется сообщение, что недостаточно прав для добавления записи в объект. Ок, иду в права, нахожу в разделах кампанию или email, пытаюсь поставить галочку администрируется по операциям, а мне говорят: "Невозможно сохранить изменения элемента "Campaign", так как он создан сторонним издателем или установлен из файлового архива". Или хочу убрать галочку администрируется по записям, но система говорит что невозможно понизить права. В доступе к записям по умолчанию добавлено правило для всех сотрудников. Подскажите, где посмотреть и в чем причина. Раньше(недели 2 назад) все работало и вроде никаких изменений в правах я не делал.

Нравится

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

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

Подобная ситуация с возникающей при сохранении записи ошибкой может говорить о том, что для Вашего пользователя не установлена лицензия на продукт bpmonline marketing campaigns on-site.

Т.к. права на работу с тем или иным разделом завязаны на лицензиях, то при отсутствии у конкретного пользователя лицензии на продукт, подразумевающий использования того или иного раздела (например, для Marketing - раздел Email, Кампании и т.д.), у конечного пользователя может выдаваться сообщение об отсутствии прав на раздел при отсутствии необходимой для работы с ним лицензии.

Пожалуйста, проверьте, что для Вашего пользователя установлена галочка для продукта bpmonline marketing campaigns on-site. После выполненных изменений пользователю необходимо перезайти в систему.

Павел, необходимо создать замещающий объект для объекта, в котором требуется изменить права:
1) Зайдите в конфиграцию;
2) Выберите пакет Custom;
3) Нажмите Добавить → Замещающий объект;
4) В дереве объекта (слева) выберите корневое значение UsrEntity1;
5) Выберите в настройках свойств (справа) Родительский объект (т.е. объект в котором Вы собираетесь права изменять), подтвердите выбор;
6) Проставьте в свойствах признаки для администрирования по записям или операциям;
7) Опубликуйте объект.

Добрый день!

Пожалуйста, проверьте также наличие лицензий marketing active contacts у пользователя, под которым выполняются действия.

С лицензиями была и правда беда, у пользователя небыло bpmonline marketing campaigns on-site. Поставил, вышел, зашел и ничего не изменилось. Пикча

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

После изменения настроек лицензий - необходимо почистить REDIS.
Вы выполняли это действие?

"Липатов Юрий Сергеевич" написал:

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

После изменения настроек лицензий - необходимо почистить REDIS.

Вы выполняли это действие?


Почистил, ничего не изменилось.
upd Компании теперь сохраняют, а email все ещё пишет, что недостаточно прав. Права стоят идентичны компании.

Добрый день, Павел!

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

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

Які причини появи цієї помилки при створенні контрагента?

Нравится

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

Добрый день.

В данном сообщение говорится о нарушение целостности базы данных.
В момент вставки новой записи в таблицу Контрагент происходит заполнение поля Region идентификатором, которого нет в таблице Region.

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

Подскажите, как правильно сделать поиск в детали "Продукт в заказе" по добавленному полю "Код" ("как в 1С") прямо в реестре.
Есть ли фэншуйное решение?

Нравится

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

Добрый день!

Не совсем понятно, что Вы спрашиваете.

1) Если имеется ввиду поиск по детали в реестре раздела, то рекомендую Вам воспользоваться агрегирующим фильтром. Пример прикреплен.

2) Если имеется ввиду поиск внутри реестра детали, то начиная с версии 7.6 там уже присутствует фильтр. Пример 2 прикреплен.

Спасибо!

Было бы все так просто :) Во вложении пример того, как работает система по названию продукта - начинаем вводить название, она предлагает нам выбор. Нужно аналогичный лукап по коду сделать.

А какая версия продукта?

В 770 есть поле Client в OpportunityPageV2, которое смотрит на два справочника.
Также есть схема ProductSelectionModule - поиск по двум строковым полям объекта "Продукт".

Угу, 7.7, спасибо, буду поглядеть!

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

Добрый день, коллеги! Подскажите, пожалуйста, реально ли и каким образом можно реализовать возможность очистки кеша и папки профиля у пользователя через интерфейс (кнопкой, или любой другой вариант). Проблемы с кешем были еще на момент внедрения, решили путем создания отдельного ехе файла у каждого пользователя, при запуски которого и происходит очитка. Сейчас столкнулись с такой проблемой: больше половины пользователей перешли на терминальный доступ, соответственно чистка кеша старым методом невозможна.

Нравится

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

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

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

Запись кеша осуществляется на уровне ядра.
Реализовать чистку кеша из системы возможно одним из следующих способов:
1) создать bat-файл, в котором будет выполняться чистка кеша, и при нажатии на кнопку вызывать выполнение этого файла;
2) при нажатии на кнопку реализовать удаление файлов, которые находятся в папке Cache.

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

Добрый день!

Столкнулся со следующей проблемой. На гриде детали добавил поле числового типа с названием "MinPurchaseAmountEdit". Мне необходимо при переходе на эту страницу детали этому полю задавать некоторое значение. Делаю я это в событии "PageLoadComplete" (пробовал также в "Init"):

0

Код следующий:

Page.MinPurchaseAmountEdit.Value = 10m;

Компилируется всё отлично. Дебажится тоже. Присваиваемое значение "10" в формате "decimal" присваивается! Но, на самой странице в консоли возникает странное уведомление:

Uncaught ReferenceError: PageContainer_DetailGridContainer8021c0aacccf410e8f1da5c600f5d6ad_MinPurchaseAmountEdit is not defined

Насколько я понял, то система не видит это поле. Собственно, по этой причине карточка моей детали не открывается, т.е. она пустая:

2

Я так ранее делал - всё получалось без проблем. Сейчас - не понятно поведение системы. Прошу помощи!

Нравится

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

Можно ещё попробовать присваивать значение контролу при помощи метода:

Page.MinPurchaseAmountEdit.SetValue(10m);

Или же писать в поле источника данных:

Page.DataSource.ActiveRow.SetColumnValue("MinPurchaseAmount", 10m);

Спасибо, Александр, что подсказали, но:
- в первом варианте ошибка та же: система не видит контрола на странице (та же ошибка в консоли браузера);
- во втором случае даже страница не открылась, а система выдала ошибку:

Exception Message: Ссылка на объект не указывает на экземпляр объекта.
Exception Type: System.NullReferenceException
Exception Source: TSBpm

Думаю, тут дело не в присваивании значения полю контрола, а в том, что его надо как-то объявить, чтоб система увидела, что такой контрол есть на моей странице. Но это уже получается "масло масляное", т.к. специальных действий после добавления контрола на страницу вроде не надо проводить и система сама должна его видеть. Тем более в исходном коде страницы есть объявление и создание моего контрола:

3

Возможно, дело в том, что это деталь с гридом, а не карточка.
И на момент PageLoadComplete её источник данных ещё не привязан к конкретной записи. А поле привязано к источнику.

Не знаю, что именно хотите сделать, но, может, надо было вязать к событию смены записи на самом гриде (детали) DataSourceActiveRowChanged или событию смены записи в основном реестре (разделе) GridPageRefreshRow.

У меня задача в том, чтобы заполнять это поле "MinPurchaseAmountEdit" данными из БД, и заполняться она должна в момент первого обращения к странице детали, а именно в момент перехода на неё после открытия карточки, к которой привязана деталь. Здесь событие смены записи на самом гриде или в основном реестре точно не подойдут.

Дело в том, что для всех записей этого грида значение "MinPurchaseAmountEdit" одинаково и мне нужно выводить это значение (если оно отлично от нуля!) и присваивать это значение контролу. Это всё при первом переходе на грид детали. Непонятно, почему кнопки, которые на этой детали находятся ("Добавить", "Изменить" и др.) обнаруживаются и на них система не ругается, а при добавлении контрола в этот же контейнер к кнопкам BPM его (контрол) не видит...

Кроме того, "на момент PageLoadComplete её источник данных ещё не привязан к конкретной записи" - тут дело даже не в источнике данных, т.к. я просто работаю с элементами на странице:

Page.MinPurchaseAmountEdit.SetValue(10m);

Здесь событие смены записи на самом гриде или в основном реестре точно не подойдут.

Всё же лучше и их попробовать, они могут вызываться и при первом выборе записи.

Ещё непонятно, зачем Вы привязываете поле ввода к полю датасорса (вероятно, датасорса детали), если оно никак не связано с выбранной записью. На скриншоте свойств это видно. Если это просто программно наполняемый элемент, то этой связи и не нужно.

"они могут вызываться и при первом выборе записи." - но ведь поле должно обновляться при первичном открытии страницы этой детали. Неужели такой возможности нет в функционале BPM?

Сделал поле без привязки к БД:

4

Ошибка та же самая - система не видит моего контрола. Куда ещё "копать"?

P.S.: Значение "UId" на скринах разное, т.к. я удалял элемент, компилировал и добавлял новый такой же, чтобы убрать его привязку к БД, иначе система ругается - NullReferenceException...

Попробуйте найти в других разделах такую же логику — поле ввода на странице реестра.
Если такое не встречается, то, вероятно, и не предусматривалось. Деталь служит для вывода информации в табличном виде, а не ввода. Можете добавить кнопку и по ней открывать окно с этим полем или что-то подобное.

Странно... Просто возникает тогда другой вопрос: если после события завершения загрузки страницы (см. скрин бизнес-процесса) система не видит все контролы на этой странице, то...... когда же они там инициализируются? Вопрос, видимо, философский((

Всё равно спасибо, Александр, что поучаствовали в обсуждении. Хорошего Вам дня!

Да, действительно странно. А Вы пробовали именно с полем ввода, если выводить в название кнопки или простой надписи, то отрабатывает нормально?

Попробовал добавить надпись с названием "Label1" и заголовком "Надпись 1", предварительно удалив поле ввода дробного числа и скомпилировав модуль. После этого в то же событие "PageLoadComplete" добавил код:

Page.Label1.Caption = "etqtert";

Когда скомпилировал модуль и открыл страницу детали, она открылась!!!! Но:

5

Вопрос: откуда там взялся контрол, который я до этого удалил - непонятно... И в структуре он тоже был. Но самое приятное то, что "Caption" у надписи поменялся (заметить по картинке трудно, но возможно)! При этом код:

Page.MinPurchaseAmountEdit.SetValue(10m);

был закомментирован.

Я удалил поле ввода дробного числа снова, удалил надпись, закомментировал код по переприсвоению "Caption" в надписи и раскомментировал код по установке значения в "MinPurchaseAmountEdit". Скомпилировал. Страница детали не открылась... :cry: Ошибка та же.

ВЫВОД: Изменение поля ввода дробного числа нельзя изменять ни в одном событии страницы до того пока она хотя бы один раз не прорисуется (ну или лыжи не едут...). Но это не применимо к остальным контролам. К сожалению(

А для поля ввода строки такое же самое поведение, что и для поля ввода числа?

Да, эти контролы ведут себя одинаково: поле ввода строки тоже не определено в событии "MinPurchaseAmountEdit". Ошибка та же.

Судя по сообщению:

Uncaught ReferenceError: PageContainer_DetailGridContainer8021c0aacccf410e8f1da5c600f5d6ad_MinPurchaseAmountEdit is not defined

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

Контрол идентифицируется браузером как:
http://i.piccy.info/i9/d0f1d2f7db16bc88df4890afcb8e71e5/1458115070/2764…

ПРИ ЭТОМ! Если никаких обращений к этому контролу ни в каком событии не писать, типа:

Page.MinPurchaseAmountEdit.SetValue(10m);

то, контрол система обнаруживает НОРМАЛЬНО! А если написать к нему обращение в виде предыдущего кода, то система разводит руками и говорит, что не знает, чего я от неё хочу. Похоже, она женского пола...

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

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