Сделал следующие методы для валидации.

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

maxEverydayActive: function() {

                var invalidMessage = "";

                var activeEverydayConcertCount = 0;

                var maxActiveEverydayConcertCount = 0;

                Terrasoft.SysSettings.querySysSettingsItem("UsrMaxEverydayActiveProgram", function(value) {

                    maxActiveEverydayConcertCount = value;

                }, this);

                var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {

                    rootSchemaName: "UsrConcertProgram"

                });

                esq.addAggregationSchemaColumn("Id", Terrasoft.AggregationType.COUNT, "CountEntities",

                Terrasoft.AggregationEvalType.ALL);

                

                var filterGroup = this.Terrasoft.createFilterGroup();

                

                filterGroup.add("concertsIsActive",

                this.Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "UsrIsActive", "1"));

                filterGroup.add("performancePeriodEveryday",

                this.Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,

                "UsrPerformancePeriod", "85A8C133-FF83-4290-9F69-B34EAF627F8C"));

                

                esq.filters.addItem(filterGroup);

                

                esq.getEntity(function(result) {

                        if (result.success){

                            activeEverydayConcertCount = result.entity.get("CountEntities"); - здесь не присваивается значение. Должно быть 4. По БД проверил

                        }

                }, this);

                

                if (activeEverydayConcertCount >= maxActiveEverydayConcertCount) {

                    invalidMessage = this.get("Resources.Strings.MaximumActiveEverydayConcerts");

                }

                

                return {

                    invalidMessage: invalidMessage

                };

            },

            setValidationConfig: function() {

                this.callParent(arguments);

                this.addColumnValidator("UsrIsActive", this.maxEverydayActive);

                this.addColumnValidator("UsrPerformancePeriod", this.maxEverydayActive);

            }

Нравится

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

Пробовал различные операции без группы фильтров, а с обычными, без условия и тд. Ничего...

 

Paul_lgb,

Добрый день. Все дело в том, что у вас даже не вызывается callback вызова getEntity (если вызывается, то это странно, возможно в вашей версии еще есть такое поведение).

Функция getEntity имеет 3 параметра:

1. primaryColumnValue

2. callback

3. scope

Функция getEntity будет возвращать вам все колонки, относящиеся к этой entity.

Пример:

getEntity("<здесь Id контакта>", function(resullt) {}) //т.е. будет фильтрация по Id контакта

Для получения количества записей, без "фильтрации" нужно использовать функцию getEntityCollection(callback), но она асинхронна, поэтому это нужно учесть.

 

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

Коллеги всем доброго времени суток!

Подскажите кто нибудь сталкивался с такой реализацией, в модальном окне есть справочное поле с типом Terrasoft.ContentType.LOOKUP?

Если задаю данный тип то не работает, при нажатии на лупу открывается модуль справочника но в нем пусто: http://prntscr.com/m0klnc http://prntscr.com/m0kmde

если делать через Terrasoft.ContentType.ENUM то все работает.

 

{
					"operation": "insert",
					"name": "Contact",
					"parentName": "WaChangeResponsibleModulePageSelectionEditContainer",
					"propertyName": "items",
					"values": {
						"layout": {
							"colSpan": 23,
							"rowSpan": 1,
							"column": 0,
							"row": 0,
							"layoutName": "WaChangeResponsibleModulePageSelectionEditContainer"
						},
						"bindTo": "Contact",
						"contentType": Terrasoft.ContentType.ENUM,
						"labelConfig": {"visible": false},
						"hasClearIcon": false,
						"enableRightIcon": true,
						"controlConfig": {
							"placeholder": "$Resources.Strings.WaContactPlaceholderText",
							"classes": ["placeholderOpacity"],
						},
						"minSearchCharsCount": 1,
						"searchDelay": 50
					}
				},

 

Нравится

2 комментария
Лучший ответ

Все всплывающие окна реализованы через ModalBox и, грубо говоря, нельзя ими спамить. Активно всегда только 1 окно. Именно поэтому в миникарточках одни ENUM-ы)

Все всплывающие окна реализованы через ModalBox и, грубо говоря, нельзя ими спамить. Активно всегда только 1 окно. Именно поэтому в миникарточках одни ENUM-ы)

Варфоломеев Данила,

понял, благодарю

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

Добрый день!



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

Нравится

5 комментариев
Лучший ответ

На маркетплейсе есть настраиваемый полнотекстовый поиск, но это решение для пользовательского поиска, что для Вашей задачи, вероятнее всего, не подойдет.

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

На маркетплейсе есть настраиваемый полнотекстовый поиск, но это решение для пользовательского поиска, что для Вашей задачи, вероятнее всего, не подойдет.

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

Если входящее письмо создаётся по шаблону, то это не такая сложная задача. Например, мы читаем из письма в поддержку некоторые параметры (из тела письма ищем номер после текста "Serial number:"):

string description = Get<string>("UsrDescription");
string usrSerialNumber = "";
Regex RegexHtml = new Regex("<[^>]+>", RegexOptions.IgnoreCase);
 
Regex firstRegex = new Regex(@"(?<=Serial number:)(.*?)(?=<o:p>)");
 
Match firstMatch = firstRegex.Match(description);
if (firstMatch.Success)
{
    usrSerialNumber = firstMatch.Value;
    usrSerialNumber = RegexHtml.Replace(usrSerialNumber, " ");
    usrSerialNumber= usrSerialNumber.Replace(" ", " ");
    usrSerialNumber = usrSerialNumber.Trim();
}
 
Set("UsrSerialNumber", usrSerialNumber);
return true;



Если же письмо абсолютно произвольное, то это уже задача для AI

Алла Савельева,

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

Владимир Соколов,

Спасибо за ответ. Вы уточнили, что если письмо произвольное, то это задача для AI. Т.е. вы уже пытались такое реализовать или просто предполагаете?

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

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

Коллеги всем доброго времени суток!

Стоит задача создавать новый заказ по нажатию кнопки из другого раздела.

Реализовал следующим образом

loadOrderPage: function(contact) {
				debugger;
				var requestUrl = "CardModuleV2/OrderPageV2/edit/" + Terrasoft.generateGUID();
				var params = this.sandbox.publish("GetHistoryState");
					var parameters = {
						viewModelConfig: {
							Contact: contact
						}
					};
					var stateObj = {
						operation: enums.CardStateV2.ADD,
						parameters: parameters
					};
 
					this.sandbox.publish("PushHistoryState", {
						hash: requestUrl,
						stateObj: stateObj
					});
			}

Но параметры не передаются. и не заполняются поля. Подскажите как реализовать данный кейс?

Благодарю!

Нравится

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

Алексей,

Если нужно создать сущность из карточки другой сущности, почему нельзя просто сделать esq-запрос в БД или дернуть БП/Сервис, который это сделает на бэке? Наверное, у Вас есть какие-то особые условия созданий этой сущности? 

Возможно, ему надо именно визуальное открытие карточки для ввода данных. В таком случае лучше реализовать БП c шагом открытия нужной карточки и в настройках элемента преднастроить заполнение полей.

Коллеги благодарю за помощь. Задача была без использования БП. Реализовал следующим образом. 

loadOrderPage: function(contact) {
				var openCardConfig = {
					hash: this.sandbox.id,
					id: "Id",
					operation: enums.CardStateV2.ADD,
					schemaName:"OrderPageV2",
					moduleId: this.sandbox.id + "_AddOrderSuccessAction",
					defaultValues: [
						{ name: "Contact", value: contact.value },
						{ name: "uphType", value: "1AC347DB-DC55-4BA9-AC59-EF23041E891B" }, //"B2B"
						{ name: "WaOrderType", value: "79BF282E-87CC-42CD-8A2A-E1147ECC4CB8" }, //"Физю лицо"
						{ name: "Owner", value: Terrasoft.core.enums.SysValue.CURRENT_USER_CONTACT.value },
						{ name: "CreatedOn", value: new Date() }
					]
				};
				this.sandbox.publish("OpenCard", openCardConfig, [this.sandbox.id]);
			}

 

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

Здравствуйте! Ребята, кто сталкивался, подскажите, как в коннекторе Софтекса к Октелл передать значение набранного номера при входящем звонке?

Суть задачи, в зависимости от того на какой номер-телефонную линию(например 0445556667) позвонил клиент,  дальше запускать определенные процессы. Но к сожалению, в коннекторе выведены поля "Номер от" и "Номер кому", которые при входящем звонке показывают |Номер От - номер клиента, который позвонил|, а /Номер Кому - внутренний номер сотрудника, который поднял, например 110. Как нам получить номер линии, на которую позвонил клиент к нам в офис, например 044-555-666-7 при входящем звонке. Спасибо!

РS.Переписывались с разработчиком, компанией СОФТЕКС, они сами не знают, как я предполагаю, привлекали программистов к разработке, поэтому сами в этом продукте ничего не понимают!

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

 

Нравится

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

Дмитрий, для выяснения логики работы интеграции нужно посмотреть, какие данные передаёт Oktell. Если только два этих номера, то получить третий неоткуда.

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

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

Кто стыкался с настройкой выпадающего списка. того что выпадает когда вводишь значение и БПМ подбирает возможные варианты? Нужно настроить кнопку энтер(если один вариант 0 подставить его. Если множество - открыть окно выбора с этим набором предлагаемых вариантов)

Нравится

1 комментарий
Лучший ответ

Хм... как вариант:

TextEdit с выпадающим списком (как в карточке email). у TextEdit есть 2 события enterkeypressed/editenterkeypressed. Посмотреть какое устроит и доработать логику. Ну а реальное значение хранить в справочной колонке, которая будет скрыта от пользователя.

Хм... как вариант:

TextEdit с выпадающим списком (как в карточке email). у TextEdit есть 2 события enterkeypressed/editenterkeypressed. Посмотреть какое устроит и доработать логику. Ну а реальное значение хранить в справочной колонке, которая будет скрыта от пользователя.

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

Хочу создать карточку редактирования для справочника.

Создаю новый модуль, в качестве родителя указываю Базовая страница справочника

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

Нравится

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

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

Можно ли как-то унаследовать правила? Ибо, копи-паста - это как-то не хорошо...

Нравится

3 комментария
Лучший ответ

Насколько мне известно, унаследовать правила нельзя.

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

Но, как показывает практика, правила обязательности всегда работают корректно, а вот с собственной реализацией могут возникнут нюансы laugh

Насколько мне известно, унаследовать правила нельзя.

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

Но, как показывает практика, правила обязательности всегда работают корректно, а вот с собственной реализацией могут возникнут нюансы laugh

Алла Савельева,

вот, да, но копипастить не хочется. Может кто из разрабов ответит?

Если стандартными средствами настроить правила не получится, можно делать кодом, привязав им всем «isRequired» к логике какой-либо функции. Например, такой код есть в EmailTemplateUserTaskPropertiesPage.

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

Добрый день!

Воспользовались дополнением из MP - Формирование печатной формы счета и отправка клиенту (https://marketplace.terrasoft.ru/template/formirovanie-pechatnoy-formy-…), данный процесс открывает страницу редактирования email, на которой мы и отправляем письмо (через нажатие кнопки Отправить).

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

Нравится

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

Ещё есть дополнение «Отправка письма по шаблону с вложением». Там должно отправлять фоном. Можно поставить оба и сравнить, как там реализован именно блок отправки, доработать первый подобно второму.

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

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

Нравится

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

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

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