Добрый день.
Добавил в мини-карточку активности два поля:
1. справочник "Контрагент" ("contentType": 5)
Проблема: после выбора значения справочника не закрывается пустое модальное окно LookupPage
2. Дата/время
Проблема: После выбора даты из календаря мини-карточка активности закрывается без сохранения.
Данное поведение наблюдается в мини-карточке вызываемой в LeadSectionActionsDashboard по нажатию на "Завершить" во "View" Mode. В "Edit" Mode всё в порядке.

Как альтернатива хотел отключить "View" Mode и загружать сразу "Edit" Mode. Переопределил атрибут

"Mode": {
                dataValueType: this.Terrasoft.DataValueType.TEXT,
                type: this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
                value: this.Terrasoft.ConfigurationEnums.CardOperation.EDIT
            },
            "MiniPageModes": {
                    dataValueType: this.Terrasoft.DataValueType.COLLECTION,
                    type: this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
                    value: [this.Terrasoft.ConfigurationEnums.CardOperation.VIEW, this.Terrasoft.ConfigurationEnums.CardOperation.EDIT]
                },

Но так и загружается мини-карточка в "View" Mode.
Версия 7.8.0.1681

Нравится

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

Ещё один нюанс:
Добавил в мини-карточку активности поле список "Стадии продажи"
Добавляю сортировку поля в массив attributes:

"UsrOpportunityStage": {
   dataValueType: Terrasoft.DataValueType.LOOKUP,
   columns: ["Number"],
   lookupListConfig: {
     orders: [{
       columnPath: "Number",
       direction: Terrasoft.OrderDirection.ASC,
      }]
   }
}

В итоге сортировка не отрабатывает.
Аналогичные настройки в стандартной PageV2 отрабатывают корректно.

Для переключения режимов посмотрите в сторону функции базовой мини-карточки «switchMiniPageMode», которая в свою очередь вызывает changeMiniPageMode с нужным параметром. И делайте переключение в нужный вам режим в нужный вам момент.

Добрый день, Илья!
А что вы можете порекомендовать по поводу решения проблем, описанных в пунктах 1 и 2 и проблемой с сортировкой справочных полях?

"Мотков Илья" написал:Для переключения режимов посмотрите в сторону функции базовой мини-карточки «switchMiniPageMode», которая в свою очередь вызывает changeMiniPageMode с нужным параметром. И делайте переключение в нужный вам режим в нужный вам момент.

Сделал по Вашему совету. Вызываю switchMiniPageMode() в onRender.
По итогу мини-карточка открывается в edit Mode. Казалось бы "Ура!!!" Но нет:smile:
Т.к. у меня есть поля, которые отображаются по условию, то после выполнения условия поля появляются, высота самой мини-карточки увеличивается, а её положение не меняется.
И в итоге я получаю кнопку "Сохранить" за пределами экрана и без возможности скроллинга (http://joxi.ru/RmzbjObHllMlmO).
Положение, мини-карточки определяется стилями, применёнными к тэгу div с id = AlignableMiniPageContainer, но где расчитываются top и left не нашёл.

"Коновалов Игорь" написал:Ещё один нюанс:
Добавил в мини-карточку активности поле список "Стадии продажи"
Добавляю сортировку поля в массив attributes:
"UsrOpportunityStage": {
   dataValueType: Terrasoft.DataValueType.LOOKUP,
   columns: ["Number"],
   lookupListConfig: {
     orders: [{
       columnPath: "Number",
       direction: Terrasoft.OrderDirection.ASC,
      }]
   }
}

В итоге сортировка не отрабатывает.
Аналогичные настройки в стандартной PageV2 отрабатывают корректно.

Оказалось, что сортировка в мини-карточках не реализована.
Решение:
1. Замещаем BaseMiniPage.
2. В блок methods переносим код из BasePageV2

 applyColumnsOrderToLookupQuery: function(esq, columnName) {
                var lookupColumn = this.getColumnByName(columnName);
                var lookupListConfig = lookupColumn.lookupListConfig;
                if (!lookupListConfig || !lookupListConfig.orders) {
                    return;
                }
                var columns = esq.columns;
                this.Terrasoft.each(lookupListConfig.orders, function(order) {
                    var orderColumnPath = order.columnPath;
                    if (!columns.contains(orderColumnPath)) {
                        esq.addColumn(orderColumnPath);
                    }
                    var sortedColumn = columns.get(orderColumnPath);
                    var direction = order.direction;
                    sortedColumn.orderDirection = direction ? direction : Terrasoft.OrderDirection.ASC;
                    var position = order.position;
                    sortedColumn.orderPosition = position ? position : 1;
                    this.shiftColumnsOrderPosition(columns, sortedColumn);
                }, this);
            },
 
            shiftColumnsOrderPosition: function(columns, sortedColumn) {
                 var sortedColumnOrderPosition = sortedColumn.orderPosition;
                if (Ext.isNumber(sortedColumnOrderPosition)) {
                    columns.each(function(column) {
                        if (column !== sortedColumn && Ext.isNumber(column.orderPosition) && column.orderPosition >= sortedColumnOrderPosition) {
                            column.orderPosition += 1;
                        }
                    });
                }
            },

3. И переопределяем метод getLookupQuery

 getLookupQuery: function(filterValue, columnName) {
                var esq = this.callParent(arguments);
                this.applyColumnsOrderToLookupQuery(esq, columnName);
                return esq;
            },

4. Чистим кэш и наслаждаемся работой сортировки справочных полей в мини-карточке :smile:

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

Коллеги, добрый день.

Интересует следующий вопрос: можно ли при выборе параметра из справочника как-нибудь вытащить более подробные данные?

Собственно, идея в том, чтобы после выбора посёлка из списка (см.скрины) получить все его данные (отдельные страницы посёлков есть) - координаты, адрес и т.д. - чтобы потом их добавить в соответствующие поля на странице объекта недвижимости. Есть ли какой-либо стандартный метод, позволяющий это сделать?

Редакция real-estate 7.7

Спасибо.

Нравится

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

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

Вы можете воспользоваться бизнес-правилами. Более подробно:
https://academy.terrasoft.ru/documents/technic-sdk/7-8-0/biznes-pravila…

Там же есть примеры.

Алексей, спасибо, буду пробовать.

А именно методов, срабатывающих при выборе, как я понимаю, не существует?

Денис, какая разница писать методы или применять бизнесс-рулс?

Цитата: "То есть, для решения типовых задач нет необходимости писать дополнительные пользовательские методы. Достаточно выполнить конфигурирование колонок с использованием правил. "

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

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

Нужно динамически менять название поля на странице редактирования. Забиндив caption, получилось возвращать название через функцию. Подскажите как вызвать перерисовку компонента или что то подобное? Возможно есть способ напрямую менять название поля?

Нравится

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

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

Вы можете забиндить название поля на значение параметра. Значение параметра Вы можете получать на событии entityInitialized(), которое отрабатывает при открытии страницы редактирования. Событие entityInitialized() необходимо переопределить.

Алексей, спасибо. Но уже сделал так:

this.Ext.get("DocumentPageNumberLabel").update("New caption");

Подскажите насколько такой вариант правилен?

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

Коллеги, у кого есть опыт настройки сквозной аудентификации Пользователей по 7-ке.
Что необходимо взять у Заказчика, чтобы настроить аудентификацию?

Нравится

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

Добрый день, Марина!

Всю необходимую информацию Вы можете найти в руководстве пользователя:
1. Как работает аутентификацию по протоколу NTLM: https://academy.terrasoft.ua/documents/sales-team/7-8-0/kak-rabotaet-au…
2. Как настроить аутентификацию по протоколу NTLM: https://academy.terrasoft.ua/documents/sales-team/7-8-0/kak-nastroit-au…
3. Как осуществляется вход в систему при настроенной аутентификации по протоколу NTLM: https://academy.terrasoft.ua/documents/sales-team/7-8-0/kak-osushchestv…
Всю необходимую внутреннюю информацию Вы можете получить от системного администратора, в сети которого будете настраивать интеграцию.

Валерий, спасибо

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

Добрый день!
Настроил SVN, отдельную конфигурацию, добавил пакет, в нем переопределил OperatorSingleWindowPage, чтобы не было центрального контейнера

define("OperatorSingleWindowPage", [],
        function() {
                return {
                        messages: {},
                        mixins: {},
                        attributes: {},
                        methods: {
                                /**
                                 * Загружает содержимое Единого окна.
                                 * @protected
                                 * @virtual
                                 */

                                loadContent: function() {
                                        //this.loadModule("ESNFeedModule", "centerContainer");
                                        this.loadModule("SectionDashboardsModule", "rightContainer");
                                        this.loadModule("OperatorQueuesModule", "leftContainer");
                                }

                        },
                        diff: [
                                {
                                        "operation": "merge",
                                        "name": "centerContainer",
                                        "values": {
                                                "visible": false
                                        }
                                }
                        ]
                };
        });

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

С уважением,
Евгений Воронцов

Нравится

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

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

Евгений, визуально все правильно, тут требуется детальный анализ. Лучше обратитесь на support@terrasoft.ru

В зависимости пакета добавил пакет OperatorSingleWindow, заработало.

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

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

версия 5 сервис деск

Был применен скрипт:
delete from "SysProfileData"
where "ObjectId" =(select distinct "SysSchemaId" from "SysSchemaInSolution"
where "Name" = 'Название схемы');
commit;

где значение Name - название схем, а именно:
BaseApprovalGridPage
ApprovalInServiceRequestGridPage.

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

delete from "SysProfileData"
where "ObjectId" =(select distinct "SysSchemaId" from "SysSchemaInSolution"
where "Name" = 'BaseApprovalGridPage');
commit;
"
Данный скрипт не удаляет настроек колонок

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

Нравится

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

Возможно, настройки хранятся в записи с совсем другим значением поля ObjectId. Это можно увидеть, если сделать выборку из таблицы по дате изменений:

SELECT TOP 1000 [Id]
      ,(select max([Name]) from [SysSchemaInSolution] where [SysSchemaId]  = [ObjectId])
      ,[ModifiedOn]
      ,[CreatedOn]
      ,[CreatedById]
      ,[ModifiedById]
      ,[SysUserId]
      ,[ObjectId]
      ,[Key]
      ,[ObjectData]
      ,[ObjectDifference]
  FROM [SysProfileData]
  order by [ModifiedOn] desc

Если меняем настройки колонок в нескольких разделах, появляются изменённые записи, все связанные со схемой MainPage, но с разным значением поля Key.
Попробуйте поменять настройки средствами пользователя и посмотреть, какие записи при этом обновятся.

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

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

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

Заходим супервизором в Default конфигурацию, при попытке обновить пакет из хранилища,
появляется сообщение
сообщение3
но изменения подтягиваются.

Клиентский модуль содержит только текст комментария ///123456, больше ничего.

Что неправильно делаем?
Как правильно работать с SVN?

С уважением,
Евгений Воронцов

Нравится

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

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

Относительно первого скриншота, ошибка возникает когда элемент не заблокирован в SVN. По второму - элемент заблокирован пользователем Supervisor.
Рекомендую очистить закэшированные данные SVN удалив содержимое %APPDATA%\Subversion\auth
По третьему скриншоту, если ведется разработка в файловой системе и активирован параметр fileDesignMode (web.config загрузчика) необходимо обновиться до последней релизной версии.
Если параметр отключен - необдходимо проводить отладку.

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

Добрый день, коллеги.
Подскажите как правильно мигрировать данные из 7.5. в 7.8
Впервые этим занимаемся эти, инструкций нет.
Заранее благодарю, спасибо.

Нравится

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

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

Нравится

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

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

Здравствуйте!
Вам необходимо создать модуль в конфигурации системы, в котором прописать логику получения данных. Далее в разделе "Аналитика" Вам необходимо:
1) Выбрать модуль в полк "Модуль"
2) Прописать логику отображения этих данных в разделе "Аналитика", используя поле "Параметры модуля"

Пример Вы можете увидеть в разделе "Итоги" в продукте Marketing на вкладке "Лицензии".

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

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

var processName = "ilayMS1v2";
ProcessModuleUtilities.executeProcess({
        "sysProcessName": processName,
        "parameters": {
                "ProcessCurrentVisit1": this.getPrimaryColumnValue()
        },
        "callback": function(){},
        "scope": this
});

И на попытке запуска процесса, запрос который обращается к ProcessEngineService - переходит в состояние "pending"

а потом отваливается по таймауту, (30сек)

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

Подскажите пожалуйста, какие могут быть дальнейшие шаги в решении проблемы? Спасибо!

Нравится

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

Здравствуйте.
Возможно, вам поможет эта статья из Академии
https://academy.terrasoft.ru/documents/technic-sdk/7-8-0/zapusk-process…

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

Пример запуска процесса Вы можете найти по ссылке:
http://www.community.terrasoft.ua/forum/topic/10554#comment-47944

Коллеги, спасибо за ответы! изначально я запускал процес через метод executeProcess (как описано в статье с Академии), потом попробовал использовать this.RunProcess - как было в примере из комментария Алексея, но этот метод делает тоже самое - executeProcess, только с BasePage, поэтому на результат никак не повлияло. Даже если запускать процесс полностью "в ручную" - через XMLHttpRequest происходит тоже самое - сам запрос к ProcessEngineService не проходит, как на скриншотах выше.
Может быть проблема в настройке самого веб сервиса?

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