РасширенныйФильтр
Деталь
7.10_()
-Sales_Creatio
enterprise_edition_()

Добрый день, помогите пожалуйста, при попытке добавить новые столбцы в расширенный

фильтр из детали, указывается лишь кол-во и датаИзображение удалено.

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

Изображение удалено.

Нравится

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

Доброе утро.

Все верно, так и должно быть.

В колонке выбираете количество, после этого в самой области фильтра 'количество' можно сменить на 'существует' или 'не существует' и в области подфильтра уже работать с табличкой детали и настраивать нужные фильтры.

Более подробно о том, как построить exist-фильтр можно почитать на Академии по ссылке (подтема 'Установка агрегирующего фильтра').

Доброе утро.

Все верно, так и должно быть.

В колонке выбираете количество, после этого в самой области фильтра 'количество' можно сменить на 'существует' или 'не существует' и в области подфильтра уже работать с табличкой детали и настраивать нужные фильтры.

Более подробно о том, как построить exist-фильтр можно почитать на Академии по ссылке (подтема 'Установка агрегирующего фильтра').

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

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

Касымов Сакен,

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

Нашел другой способ, создал вьюшку в БД и объект, поставил галочку в "Представление в БД"в этой вьюшке есть есть значения с "NULL" (это не проблема?)

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

Касымов Сакен,

А какой график нужно получить в итоге?

Возможно, неправильно сделали представление.

Посмотрите в SQL Management Studio, какие данные возвращает Ваше представление.

Может быть, дело в том, что в созданном view не уникальный Id, которые есть в каждой обычной таблице и которые может пытаться использовать движок графиков.

Превратить Null в пустую или какую угодно строку можно функцией IsNull со вторым параметром.

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

Зверев Александр пишет:

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

Не согласна с этим утверждением.

Все зависит от того для реализации какой функциональности создается то или другое представление. 

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

Показать все комментарии
7.10_()
Sales_Creatio_()

Добрый день!

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

Нравится

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

Касымов Сакен,

В версии 7.10 такой функциональной возможности нет.

Она была добавлена в более поздней версии -  7.11.3.

У Вас 2 варианта: либо обновиться до версии 7.11.3, либо реализовать собственную функциональность для данного справочника.

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

 

Если я правильно понял что нужно сделать, то Вам нужно в конфигурации зайти в Ваш справочник, к примеру [AccountType] и отметить признак "Разрешить деактивацию записей", сохранить, опубликовать. Потом зайти в раздел "Справочники", зайти в Ваш справочник и там у каждой записи появится признак "Деактивирована" и эти записи не будут доступны для выбора больше.

Alex Zaslavsky,

Да, Вы правильно все поняли, только не могу понять, как добавить признак "Деактивирована" ?

Касымов Сакен,

В версии 7.10 такой функциональной возможности нет.

Она была добавлена в более поздней версии -  7.11.3.

У Вас 2 варианта: либо обновиться до версии 7.11.3, либо реализовать собственную функциональность для данного справочника.

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

 

Да, Алла права, я не обратил внимание на версию продукта.

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

Добрый день.

Есть несколько  вопросов по обслуживанию БД MSSQL.

1. Есть ли рекомендации вендора по обслуживанию таблиц CRM в БД? Например, как часто нужно обновлять статистику, перестраивать индексы и т.д.

2. Какой допустимый процент фрагментации индексов для таблиц? Для примера:

  • SysProcessElementData
  • SysProcessLogData 
  • SysProcessElementLog
  • Activity
  • Contacts

Спасибо.

Нравится

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

Добрый день.

В нашем плане по обслуживанию БД мы руководствуемся следующими правилами:

  • если фрагментация до 10%, то такие индексы мы пропускаем
  • если размер индекса менее 1000 страниц, то такие индексы мы не анализируем, так как их фрагментация практически ни на что не влияет
  • при фрагментации от 10% до 30% проводится реорганизация индекса
  • при фрагментации более 30% проводится перестроение индекса

 

При этом нужно учитывать некоторые нюансы.

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

Online перестроение индекса доступно только в Enterprise Edition. Во всех других изданиях перестроение проводится в offline-режиме, т.е. таблица становится недоступной для пользователей.

Если БД работает в режиме full recovery model, то нужно иметь ввиду, что перестроение индексов является логируемой операцией, т.е. следует ожидать резкого увеличения объёма журнала транзакций. Если увеличение объёма критично, то можно перестоение заменить на реорганизацию, однако в этом случае процесс будет идти несколько дольше.

Мотков Илья,

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

Это очень индивидуально. Можно ориентироваться на деградацию производительности. Т.е. если через неделю после дефрагментации появляются заметные подтормаживания, значит расписание нужно запланировать таким образом чтоб не доводить до этого. Если система не используется 24\7, то можно проводить данную акцию каждый день в нерабочие часы. Т.е. нет чётких критериев.

 

P.S. Ещё рекомендуется регулярно обновлять статистику.

Показать все комментарии
выборка
выборкасфильтрацией
7.10
service

Не могу понять в чем ошибка... помогите разобраться...

https://[url_app]/0/ServiceModel/EntityDataService.svc/ActivityCollection?$filter=CreatedOn ge datetime'2018-12-01T00:00' возвращает ошибку - см. аттач.

Изображение удалено.

Нравится

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

<message xml:lang="">Unrecognized 'Edm.DateTime' literal 'datetime'2018-12-12T00:00'' in '13'.</message>

Очень интересно...

https://[url_app]/0/ServiceModel/EntityDataService.svc/ActivityCollection?$filter=CreatedOn ge datetime'2018-12-12' - а вот так заработало...

Как оказалось, если нужно с часовым поясом, то надо «/0/ServiceModel/EntityDataService.svc/ActivityCollection?$filter=CreatedOn ge datetime'2018-12-01T00:00:00' », так работает.

А еще в статье  путаница: 

где-то в примере указывают ?select=Id, а где-то $select...

по факту работает так:

$filter=CreatedOn ge datetime'2018-12-01'&$select=Id...

В спецификации тоже везде с долларом.

Показать все комментарии
РасширенныйФильтр
справочник
7.10
studio

Неоднократно задавал тут вопрос: возможно ли применить функционал расширенного фильтра к объекту "справочник".

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

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

  1. Создал раздел внутренними механизмами BPM
  2. Дропнул тейбл раздела в БД
  3. Создал представление (с inner join из 2 таблиц) с таким же названием в БД из п.2.
  4. Внес изменения в объект в БПМ - создал columns точь-в-точь как в представлении + установил признак "представление БД" (!)
  5. Закастомил страницу реестра.

Правда теперь не понимаю может ли эти изменения как-то негативно повлиять на работу приложения в целом?

Нравится

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

Использовать схемы на основе view вполне допустимо, парой сообщений ниже Алла Савельева как раз предлагает такое для решения вопроса с графиком.

Только обычно создают в обратном порядке: сначала — схему с установленной галкой, потом — view в базе с такими же полями. Таблицы при этом не создаётся.

Обычно в названии объекта для ясности вначале пишут Vw, можете посмотреть такие в стандартной системе.

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

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

ключевое слово - расширенный фильтр.

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

Соответственно создал раздел, (руками его создавать - неблагодарное дело). А уже потом ахалай-махалай с Vw...

Случайно обнаружил: подобное действие с разделом привело к ошибке (см. принт-скрин).

  УРЛ https://[url_app]/0/ServiceModel/EntityDataService.svc/ для меня крайне важен...

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

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

Добрый день, подскажите пожалуйста как исправить ошибку , развернул приложение на сервере указал строку подключения в connectionstrings настроил web.config файл, при запуске приложения появляется ошибка 

"Could not load file or assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' or one of its dependencies. Не удается найти указанный файл" 

Изображение удалено.

Нравится

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

Очень похоже, что данная ошибка связана с работой Microsoft .NET Framework.

Проверьте, какая версия .NET Framework установлена на этом сервере. Согласно документации на Академии версия Microsoft .NET Framework 4.7 и выше используется для версий bpm’online 7.11.1 - 7.13.1; Microsoft .NET Framework 4.7.2 — для версий bpm’online 7.13.2 и выше. Так как у Вас версия bpm'online 7.10, то, возможно, Вам подойдет .NET Framework 4.6.

Вы можете найти различные варианты решения данной проблемы по ссылке.

Очень похоже, что данная ошибка связана с работой Microsoft .NET Framework.

Проверьте, какая версия .NET Framework установлена на этом сервере. Согласно документации на Академии версия Microsoft .NET Framework 4.7 и выше используется для версий bpm’online 7.11.1 - 7.13.1; Microsoft .NET Framework 4.7.2 — для версий bpm’online 7.13.2 и выше. Так как у Вас версия bpm'online 7.10, то, возможно, Вам подойдет .NET Framework 4.6.

Вы можете найти различные варианты решения данной проблемы по ссылке.

Добрый день,Дмитрий! По тексту ошибки можно предположить что серверу не удается найти библиотеку .NETStandard. Проверьте еще раз обязательные компоненты Windows по инструкции.

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

Реализовал несколько методов, которые используют API BPM. Все отлично работает от имени пользователя Supervisor, но от любого другого пользователя, с аналогичными правами, сервер возвращает error: "Удаленный сервер возвратил ошибку: (401) Несанкционированный."

Помогите понять в чем косяк...

Нравится

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

У пользователя не хватает прав на работу через OData. Где добавить права, см. тут.

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

добавил... не помогло.

Значит, добавили не всюду, где надо. Там несколько пунктов.

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

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

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

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

такая же ошибка с доступом и к разделу "Обращения" - можно предположить, что дело совсем не в кастомном справочнике...

Значит, второй пользователь не совсем администратор, каких-то прав у него нет.

Проверьте что ваш пользователь входит в группу системные администраторы, не забудьте актуализировать роли  или раздайте права на доступ к объекту второму пользователю

Григорий Чех,

ничего не помогло...

Григорий Чех,

Опытным путем определил, что проблема действительно с конкретным кастомным справочником... 

В при обращении к другим объектам все работает успешно от пользователей из группы сис. админов.

...к сожалению так и не смог выявить в чем именно проблема.

Перераздайте права на ваш кастомный справочник

например через это приложение

Григорий Чех,

Заработало! Дело не в правах.

Пересоздал справочник: на странице редактирования любого раздела (я в контактах делал) создал поле с типом справочник и сохранил схему.

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

Показать все комментарии
EntitySchemaQuery
ServiceHelper
7.10
service

Добрый день коллеги.

Столкнулся со странной ситуацией. Обратился к ТС, но все же решил и тут задать свой вопрос:

При реализации очередной кастомизации необходимо было выполнить запрос EntitySchemaQuery:

    

    var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager.GetInstanceByName("ServiceEngineer"));

    var colId = esq.AddColumn(esq.CreateAggregationFunction(AggregationTypeStrict.Count, "Id"));

    var esqFilter = esq.CreateFilterWithParameters(FilterComparisonType.Equal, "ServiceItem", serviseId);

    esq.Filters.Add(esqFilter);

    result = esq.GetSelectQuery(UserConnection).GetSqlText();

    return result;

Реализовывал с использованием ServiceHelper, где для анализа данных реализовал два метода: GET и POST.

Странность заключается в том, что исходный код у данных методов одинаков, а результат разный (см. аттач GET.png и POST.png)

Изображение удалено.

Изображение удалено.

Нравится

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

Вероятно, дело не в GET и POST, а в том, что второй раз запускается под пользователем, у которого нет прав на таблицу ServiceEngineer. См. тут или тут.

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

Коллеги, подскажите есть ли в EntitySchemaQuery аналог Select COUNT (*)

Нравится

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

Добрый день!

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

new Select(UserConnection).Column(Func.Count(Column.Asterisk())).From("Account")

Если необходимо именно esq, то примерно так

var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager.GetInstanceByName("Account"));
esq.AddColumn(esq.CreateAggregationFunction(AggregationTypeStrict.Count, "Id"));

Во втором варианте будет конечно не select count(*), а select count(Id), но, думаю, нужный эффект будет достигнут.

 

Ну и на всякий случай клиент

var esq = Ext.create('Terrasoft.EntitySchemaQuery', {
	rootSchemaName: "Account"
});
esq.addAggregationSchemaColumn("Id", Terrasoft.AggregationType.COUNT, 'CountRows');

 

Добрый день!

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

new Select(UserConnection).Column(Func.Count(Column.Asterisk())).From("Account")

Если необходимо именно esq, то примерно так

var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager.GetInstanceByName("Account"));
esq.AddColumn(esq.CreateAggregationFunction(AggregationTypeStrict.Count, "Id"));

Во втором варианте будет конечно не select count(*), а select count(Id), но, думаю, нужный эффект будет достигнут.

 

Ну и на всякий случай клиент

var esq = Ext.create('Terrasoft.EntitySchemaQuery', {
	rootSchemaName: "Account"
});
esq.addAggregationSchemaColumn("Id", Terrasoft.AggregationType.COUNT, 'CountRows');

 

Лопатин Константин Николаевич,

Уточню:

Речь идет о запросе на сервере.

Сам запрос выглядит так:

Select COUNT (*) as CountServiceEngineers 

FROM [dbo].[ServiceEngineer] as [ServiceEngineer]

LEFT OUTER JOIN [dbo].[ServiceItem] as [ServiceItem] on [ServiceItem].id = [ServiceEngineer].[ServiceItemId]

Where [ServiceItem].Id = '9ac3a38b-fd9f-4802-b9d7-a3bcb28f8e96'

Во втором примере выше приведен именно серверный ESQ, о котором спрашиваете. Останется только наложить фильтр, как обычно.

Кстати, в приведенном запросе даже JOIN не нужен, поскольку ServiceItemId есть прямо в ServiceEngineer.

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

Добрый день.

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

record.changeProperty("ColumnName", {
    isValid: {
        value: isValid,
        message: columnMessage
    }
});

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

Есть возможность как-то решить данную проблему, желательно не модифицируя сам объект.

Нравится

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

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

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

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

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

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