добрый вечер.

необходимо создать след функционал - при изменении Sender counterparty должно устанавливаться значение в колонках Sender City & Sender door. при это при изменении поля Sender City надо фильтровать список Sender door по городу. Я сделал правила для:

- установки значения города

- установки значения двери

- фильтрации Sender door лукапа в зависимости от поля Sender City.

но сейчас получается так, что значение в Sender door пустое при изменении Sender counterparty. я подозреваю что влияет правило фильтрации по городу. при отключении его значение ставится, но это не устраивает, нужна фильтрация.

как решить такую проблему?Изображение удалено.

Нравится

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

Добрый день!

 

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

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

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

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

спасибо за ответ!

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

Добрый день.

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

Например у меня есть правило:

rules: {

            "Status": {

                "FiltrationStatusNrbUseInCalls": {

                    ruleType: BusinessRuleModule.enums.RuleType.FILTRATION,

                    autocomplete: true,

                    autoClean: true,

                    baseAttributePatch: "Finish",

                    comparisonType: Terrasoft.ComparisonType.EQUAL,

                    type: BusinessRuleModule.enums.ValueType.CONSTANT,

                    value: true

                },

        },

},

и оно не работает, ошибки в консоли нет.

но если я буду фильтровать по полю с id (например укажу baseAttributePatch: "Id"? а в value конкретный Id), то фильтр работает.

 "Status" указан в атрибутах, как виртуальная колонка.

Нравится

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

Решила вопрос сама, где бы не располагалась фильтрация, будь то в секции filters у атрибута, или в rules, для справочников типа ENUM это не работает. Помогло только вынести метод getLookupQuery и все его зависимые методы на страницу. 

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

Добрый день!

 

У меня в 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

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