Добрый день!
 

У меня в CTI панели есть два поля:

Линия соединения и Тематика. В Тематике есть справочная колонка Линия соединения. Мне необходимо фильтровать справочник 2 по значению в поле 1.

Я попробовал сделать это тремя способами:

1. lookupListConfig. Не работает, в фильтр даже дебаггер не проваливается.

2. Бизнес правила. Тоже не работают.


3. 
И дальше я попытался написать метод, который будет вызываться по изменению колонки 1, чтобы там уже программно добавлять/удалять необходимые значения из справочника в поле 2.

В итоге и в этот метод не могу провалиться дебаггером.

Скрины по каждому варианту во вложении.
Кто сталкивался? Что происходит? В других карточках все методы работают, именно в CTI панели - нет.

 

Нравится

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

У Вас какая версия? У меня так же не работает код фильтрации в разделе активностей на поле "Ответственный" - версия Sales 7.15.2 для СУБД Oracle

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

 

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

scr_section_service_requests_buttons_on_call.png

Александр Тыра,

В обычных страницах у меня работает. Версия такая же только Service.

Зверев Александр,

Да, на крайний случай так и сделаю

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

Добрый день!

Подскажите, пожалуйста, можно ли сделать так чтобы значение справочного поля равнялось значению атрибута. Чтобы вопрос не казался странным, расскажу откуда растут корни. В атрибуте храниться значение Id продукта, который подбирается сложным, составным фильтром. Это значение надо передать в справочное поле продукта (привязанное к детали страницы), которое будет скрыто. Почему сделано так, потому что не смог реализовать комплексный фильтр к справочному полю детали (не нашел подходящего примера).

Нравится

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

А что мешает например при загрузке загрузить в справочник ваше значение атрибута и настроить чтоб при изменении атрибута менялось значения справочника или вам что-то другое нужно?  Обмен данными между страничкой и деталью можно через подписку на события реализовать.Таким событием может стать например изменение атрибута(виртуальной колонки)

Можете более подробно описать Вашу задачу (со скриншотами интерфейса пользователя), что и куда Вы хотите передавать?

Да. Вот моя страница подбора продукта.

На самом деле мне просто нужно сохранить подобранный продукт в детали. Я не смог найти как можно настроить комплексный фильтр для справочного поля детали. Смог только реализовать через esq для атрибута. Но теперь не могу значение этого атрибута передать в деталь. 

Руслан Хасанов пишет:
На самом деле мне просто нужно сохранить подобранный продукт в детали

Если Вам нужно сохранить нужный продукт в деталь, то сделать это можно либо с помощью бизнес-процесса, либо с помощью классов InsertQuery для клиентской или серверной части приложения bpm'online.

На самом деле хотелось бы просто передать значение Id продукта на клиентской схеме. Вариант прямого сохранения в объект детали используя запрос не удобен тем что:
1. Если пользователь редактирует запись детали, то инсерт вставит еще одну запись и их количество будет расти с каждым нажатием кнопки сохранения

2. Второе происходит из первого - надо проверять есть ли такой Id в детали, если да то йпдейт. 

3. Надо переопределить кнопку сохранения

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

Может есть способ передать подобранное значение в виртуальной колонке в колонку детали на схеме страницы?

А что мешает например при загрузке загрузить в справочник ваше значение атрибута и настроить чтоб при изменении атрибута менялось значения справочника или вам что-то другое нужно?  Обмен данными между страничкой и деталью можно через подписку на события реализовать.Таким событием может стать например изменение атрибута(виртуальной колонки)

Да, Григорий, мне так и надо сделать, чтобы в значение справочника устанавливалось значение атрибута. Мешает недостаток опыта, я не могу найти пример кода как это сделать. Если есть возможность, приведите, пожалуйста, пример. Спасибо огромное!

Нашел ветку в которой обсуждалась данная тема https://community.terrasoft.ru/questions/znacenie-v-pole-spravocnik

Вот решение для этого вопроса: 

this.loadLookupDisplayValue("Type", constants.ContractType.Standard);

Большое спасибо Сергею за подсказку.

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

Всем доброго времени суток! Подскажите как отфильтровать значения в атрибуте, атрибут типа справочник
 В ActionDashBoard есть поле - http://prntscr.com/j49u8q
Реализовано оно следующим способом - http://prntscr.com/j49v2d, задал на данный атрибут фильтрацию, но она не срабатывает. Подскажите как реализовать фильтрацию данного атрибута?
пробовал через правила так же не работает.

Что делаю не так?
 

Заранее спасибо.

Нравится

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

var countryId = this.get("Country") - Вы здесь получаете не айдишник, а объект. попробуйте в самом фильтре дописать - countryId.value

Alex Zaslavsky,

Данный атрибут у меня текст я заполняю его следующим образом:
"Country": {
                        "dataValueType": Terrasoft.DataValueType.TEXT,
                        "type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
                        "value": ""
                    }
getCurrentContactCountry: function () {
                        var currentContactId = Terrasoft.SysValue.CURRENT_USER_CONTACT.value;
                        var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
                            rootSchemaName: "Contact"
                        });
                        esq.addColumn("Country", "CountryId");
                        esq.getEntity(currentContactId, function(result) {
                            if (!result.success) {
                                this.showInformationDialog(Resources.localizableStrings.AbCurrentUserCountryError);
                                return;
                            }
                            var country = result.entity.get("CountryId");
                            if(country!== null || country!== undefined) {
                                this.set("Country", country.value);
                            }
                        },this)
                    }
У меня проблема в другом в функцию фильтрации даже и не заходит

Я не силен в этом, но попробуйте вместо - 

"filters": [

function()

написать - 

filter: function()

я, к примеру, у себя в лиде вот таким образом фильтрую поле "Партнер"

Alex Zaslavsky,​​​​​​

Благодарю. Подскажите, а UsrSourcePartner определен у Вас в лиде? Мой атрибут не определен в моем объекте. Я ссылаюсь на другой объект. Данное поле грубо говоря у меня одноразовое, достал id и передал на сервис. Может не срабатывать фильтрация если нет связи основного объекта с атрибутом?

Нигрескул Алексей,

Да, это определенное поле "Партнер" (справочник Контрагенты).

По второму вопросу не подскажу, не сталкивался.

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

Нигрескул Алексей пишет:
Коллеги нужна помощь, не работает фильтрация в атрибутах

Спрашивали - помогаю.
TLDR: террасофт факапнулся. В очередной раз. Убирите ContentType.ENUM. 

Теперь подробно (тестил на CallMessagePublisherPage. У вас я так понимаю аналог, ну да не важно):
1. Сделал фильтр, запустил, контакты отфильтровались

2. Раскомментировал contentType. ВНЕЗАПНО сортировка перестала работать.

3. Нет. Тот факт, что колонка виртуальная никак не влияет. тестил.

В итоге: я бы посоветовал посмотреть что творится в функции loadLookupData или др. функции которую, возможно, запускает enum. Честно говоря, устал воевать с ветряными мельницами. Сначала редактируемый реестр испоганили, теперь вот это...

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

Благодарю! Проверим.

Нигрескул Алексей пишет:
Благодарю! Проверим.

Я тут вспомнил, что уже сталкивался с таким поведением) BaseMessagePublisherPage не наследуется от BasePageV2, и из BasePageV2 не вызывается getLookupQuery. Чтобы исправить поведение ENUM-ов придётся ручками перекопировать функцию (и все вложеные в неё) на вашу страницу.

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

Благодарю! Все получилось! Так же сделал при добавлении нового элемента в маркетинговой кампании  - 

http://prntscr.com/j5wl4q
Работает - УРА!))

 

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

Добрый день! Помогите, пожалуйста, разобраться с такой проблемой. Необходимо сделать фильтрацию поля (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)

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

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

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

Есть задача скрыть редактирование поля страны в детали по организационным ролям(супервайзер, руководители, менеджеры), закрыть право на редактирование для менеджеров.
Пробывал разные варианты через конфигурацию и добавления правил, все равно не работает.
Версия bpm7.6.

Как лучше мне это сделать?

Нравится

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

Здравствуйте, Сергей!

Вы можете видимость поля задать бизнес правилом. Параметр видимости будет определяться в момент открытия страницы редактирования (Вам необходимо переопределить метод onEntityItialized()). Замещенный метод onEntityItialized() должен вызывать родительский, а также проверять вхождение пользователя в роли (используйте ESQ по объекту SysAdminUnitInRole). Обратите внимание, что один пользователь может входить в несколько ролей.

Сформировал запрос к таблице SysAdminUnitInRole по своей Id

SELECT *
FROM            dbo.SysAdminUnit sa LEFT JOIN
                         dbo.SysAdminUnitInRole saur ON sa.Id = saur.SysAdminUnitId
WHERE sa.Id = 'мой Id'

Вернуло 3 строки - это означает, что в меня есть 3 роли?

Да, это значит что Администратор с sa.Id = 'мой Id' входит в три роли
Если вы выполните

SELECT saur.SysAdminUnitId, saur.SysAdminUnitRoleId
FROM            dbo.SysAdminUnitInRole saur
Where saur.SysAdminUnitId = 'мой Id'

То увидите айдишники ролей

Спасибо за подсказку, пытался вывести название ролей:

SELECT saur.SysAdminUnitId, saur.SysAdminUnitRoleId, s.Name
FROM            dbo.SysAdminUnitInRole saur Left JOIN
                         dbo.SysAdminUnit s ON saur.SysAdminUnitId = s.Id
WHERE saur.SysAdminUnitId = 'мой Id'

Результат имя моего контакта. Может я неправильно делаю?

так ваш запрос и выводит имя контакта из s.Name (SysAdminUnit)

можно сделать так

select s.Name 
from SysAdminUnit s
where s.id in (
select saur.SysAdminUnitRoleId
from dbo.SysAdminUnitInRole saur
where saur.SysAdminUnitId = 'мой Id'
)

Вот только одна запись похоже тоже будет вашим контактом, т.к. есть соответствие одинаковых id в SysAdminUnitInRole

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