Фильтры

Как мне отображать значение в блоке итогов "Показатель" из определенного справочника, что связан с разделом? 

 

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

 

Как мне это сделать? Заранее спасибо.

Нравится

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

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

Проблема в том, что результаты EntitySchemaQuery.getEntityCollection отрабатываются в callback-функции, и происходит это в большинстве случаев позже, чем завершается работа функции filterMethod детали, в которой делается вызов getEntityCollection. Фильтр получается пустым.

Ниже проблемный код:

// функция назначена как "filterMethod" детали
applyFilter: function() {
    //
    var vFGroup = Terrasoft.createFilterGroup();
    vFGroup.logicalOperation = Terrasoft.LogicalOperatorType.AND;

    //

    var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
        rootSchemaName: "Tenants"
    });

    esq.addColumn("Id");
    esq.addColumn("ReportMonth");
    esq.addColumn("Area");

    var vArea = this.get("Area");

    // фильтры запроса - должна совпадать дата, и площадь быть в +-20%                    
    esq.filters.add("ReportMonthFilter", 
        esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, 
            "ReportMonth", this.get("ReportMonth")));
    esq.filters.add("AreaFilter", 
        esq.createColumnBetweenFilterWithParameters("Area", 
            vArea * 0.8, vArea * 1.2));

    // до этого места все работает корректно 
    // теперь запускаем запрос и получаем данные
     // насколько я понимаю, архитектурно система распараллеливает задачи,
    // т.е. function(result) и следующая инструкция после getEntityCollection()
    // начинают отрабатываться одновременно
    esq.getEntityCollection(function (result) {
        if (result.success) {

            // добавляем фильтр как UID по списку
            // здесь так можно, больших выборок не предполагается
            var vSelected = [];                        
            result.collection.each(function (item) {
                vSelected.push(item.get("Id"));
            });

            var vIdF = Terrasoft.createColumnInFilterWithParameters("Id", vSelected);

            // нужно как-то гарантировать, чтобы эта операция всегда выполнялась раньше, чем 
            // return vFGroup; в конце функции. Иначе в фильтры попадает пустой список, и фильтр
            // не работает. 
            vFGroup.add("vIdF", vIdF);
        }
    }, this);

    // Интересно, что при первом открытии детали после обновления 
    // страницы операция return vFGroup; 
    // выполняется корректно, т.е. после vFGroup.add("vIdF", vIdF);. 
    //Если дальше закрыть страницу и через реестр
    // открыть другую запись - уже не работает.

    // Также интересно, что если вбить вот сюда:
    // window.alert("!");
    // то пауза будет достаточна для формирования vFGroup 
    // независимо от того, в первый раз я открываю
    // запись или нет

    return vFGroup;
},

 

Нравится

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

Сорри, уже сам разобрался. Надо было всего-то создать property для списка UID и перенести его подгрузку в onEntityInitialized, оставив в applyFilter только сортировку и создание итогового фильтра для детали. 

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

Юрий, вообще, такая постановка намекает, что можно в БД сделать view с нужными данными: каждому Id записи в основном разделе будет соответствовать несколько строк для отображения на детали по нужному условию.

 

Создать объект с такими же колонками, привязать к этой view и далее в разделе настроить деталь стандартными средствами без всякого кода.

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

Пытаюсь обратиться к сервису http://.../0/rest/ITdsBSC/CaseBSC методом POST, предварительно получил в GET cookies и явно передавал params, в т.ч. utf-8, но возвращается в неизвестной кодировке 403 ошибка, как через postman правильно посылать POST запросы? Делал по гайду с академии, какие могут быть идеи в чем проблема? P.S. url очистил т.к. NDA

Нравится

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

Если сервис не анонимный, то не прошли аутентификацию. Надо сначала вызвать авторизоваться через метод http://.../ServiceModel/AuthService.svc/Login получить куки и в заголовке своего запроса передать значение BPMCSRF

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

Добрый день, Коллеги!
Подскажите, пожалуйста, какими технологиями\навыками\языками программирования должен обладать программист, чтобы на стороне Creatio интегрировать систему с сайтами клиента, различными программами? 

К примеру настроить интеграцию к новой почте или пром.юа.

Наверно гулпый вопрос, но я не знаю.

Каких знаний требовать от программиста для решения таких задач?

Нравится

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

Тут всё зависит от сложности и высоконагруженности интеграции. Есть стандартные способы, вообще не требующие программирования: блок «веб-сервис» в БП, позволяющий обратиться к сервисам на других сайтах, и наоборот, поддержка OData, позволяющая извне подключаться к сайту на 7.Х, читать и менять данные в его таблицах.

 

Но если требуется более сложная интеграция, потребуется создание своих сервисов в конфигурации (пишутся на C#), шлюзовых таблиц в базе (понадобится понимание SQL). Или вообще, как сделано в 7.X Marketing для интеграции с рассылками, отдельный сервис, работающий на своём сервере. Или интеграция с почтой Exchange, где применяется Linux, Docker, Kubernetes.

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

добрый день!
Например к новой почте или пром.юа. Там есть апи для https запросов. На стороне Creatio если писать свой web-сервис, надо знать C# и SQL? C# ответвтление ASP.NET именно?

Если самому писать серверную логику, то нужно на C#. Возможно, получится и готовыми элементами вызова веб-сервиса, но их возможности покрывают не всё.

 

Ещё есть дополнение «ApiX-Drive connector», может, через них получится вообще без разработки. Там на их сайте упомянуты и НП, и Пром.

Интеграция в Apix-Drive

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

Добрый день! Недавно задался таким вопросом. А возможно ли в bpm использовать DI, как, например, в ASP.NET? Нагуглить ничего не смог, поэтому обращаюсь сюда.)

Нравится

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

Тимофей, в ядре используется, есть пространство Terrasoft.Core.DI. 

В конфигурации примеров его применения нет.

 

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