Здравствуйте. Сервер Creatio версии 7.18.2.1236 развёрнут на Astra Linux. Мной была настроена синхронизация пользователей AD – группы AD успешно импортировались в систему, а после этого была произведена успешная синхронизация орг. Роли с группой AD. В результате, во вкладку «Пользователи» были автоматически добавлены пользователи из группы LDAP. Настройка производилась по инструкции на Академии.

Однако, после настроек аутентификации – а именно, изменения файла «Terrasoft.WebHost.dll.config» (т.к. Creatio развёрнуто на Astra Linux), авторизация под учётными записями AD осталась недоступной. Следовал инструкциям по настройке. Просьба подсказать, в чём может быть проблема. Файл настройки «Terrasoft.WebHost.dll.config» прилагаю.

P.S. Есть так же отдельный сервер Creatio на Windows. Там синхронизация с AD и авторизация по учётным записям AD работают корректно (Был изменен файл настройки Web.config)

Прикрепленные файлы

Нравится

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

Добрый день!

Попробуйте заменить Ldap на LdapProvider в следующих строках:<provider name="Ldap" type="Terrasoft.Authentication.Core.Ldap.NetStandardLdapProvider, Terrasoft.Authentication">

 

<auth providerNames="InternalUserPassword,Ldap"

 

Должно получится так:

<provider name="LdapProvider" type="Terrasoft.Authentication.Core.Ldap.NetStandardLdapProvider, Terrasoft.Authentication">

 

<auth providerNames="InternalUserPassword,LdapProvider"

 

Также убедитесь, что сервер приложения включён в домен сервера, где расположен AD.

Добрый день!

Попробуйте заменить Ldap на LdapProvider в следующих строках:<provider name="Ldap" type="Terrasoft.Authentication.Core.Ldap.NetStandardLdapProvider, Terrasoft.Authentication">

 

<auth providerNames="InternalUserPassword,Ldap"

 

Должно получится так:

<provider name="LdapProvider" type="Terrasoft.Authentication.Core.Ldap.NetStandardLdapProvider, Terrasoft.Authentication">

 

<auth providerNames="InternalUserPassword,LdapProvider"

 

Также убедитесь, что сервер приложения включён в домен сервера, где расположен AD.

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

Сторонняя система вызывает бизнес-процесс, передавая в него входящие параметры:

http://my.site.name/0/ServiceModel/ProcessEngineService.svc/UsrTestProcess/Execute?Number=123456



Далее процесс производит некоторую обработку, создаёт активность и открывает страницу с ней с помощью скрипта:

 

Guid activityId = Get<Guid>("UsrActivityId");
 
string messageText = "{\"hash\": \"CardModuleV2/ActivityPageV2/edit/" + activityId.ToString() + "\"}";
MsgChannelUtilities.PostMessageToAll("PushHistoryState", messageText);
 
return true;

Всё работает, но страница открывается не в той вкладке, в которой была открыта ссылка (а она остаётся пустой). Как сделать так, чтобы страница открывалась в той же вкладке браузера, в которой и произошёл вызов процесса?

Нравится

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

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

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

При работе с ESQ на стороне сервера столкнулся с проблемой при добавлении фильтров.

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

var esq = new EntitySchemaQuery("AdaptationActivities");
 
esq.CreateFilter(FilterComparisonType.Equal,
 
                "AdaptationsSettings.[Adaptations:Status:Status].Employee.Job",
 
                "AdaptationsSettings.EmployeeJob");

Вместо AdaptationsSettings.EmployeeJobId на выходе при запросе в бд я получаю AdaptationActivities.EmployeeJobId.

Это баг в esq? Или так этот инструмент нельзя использовать?

Нравится

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

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

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

Всем привет. Есть ли у кого-то пример реализации быстрых фильтров в детали, а не в разделе?

Нравится

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

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

 

Вы можете посмотреть как похожий фильтр реализован в базовой версии системы.  Примеров реализации будет фильтр на детали "Хронология". Блок фильтров этой детали сделан в TimelineFiltersSchema. 

 

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

https://community.terrasoft.ua/questions/kak-dobavit-filtr-v-detali

https://community.terrasoft.ru/articles/primery-filtrov-v-detali

https://community.terrasoft.ru/questions/bystrye-filtry-po-dannym-detal…

https://community.creatio.com/questions/quick-filters-detail

https://community.creatio.com/questions/prefilter-detail-grid-page-load

https://community.creatio.com/questions/how-add-quick-filters-detail

set

 

 

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

 

В базовой функциональности в детали есть пункт меню [Установить фильтр], в котором как раз и реализована функциональность установки быстрых фильтров в детали:

 

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

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

Ну например как описано в документации, но не с разделами, а с деталями. 

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

 

Вы можете посмотреть как похожий фильтр реализован в базовой версии системы.  Примеров реализации будет фильтр на детали "Хронология". Блок фильтров этой детали сделан в TimelineFiltersSchema. 

 

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

https://community.terrasoft.ua/questions/kak-dobavit-filtr-v-detali

https://community.terrasoft.ru/articles/primery-filtrov-v-detali

https://community.terrasoft.ru/questions/bystrye-filtry-po-dannym-detal…

https://community.creatio.com/questions/quick-filters-detail

https://community.creatio.com/questions/prefilter-detail-grid-page-load

https://community.creatio.com/questions/how-add-quick-filters-detail

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

Добрый день, речь идет про данный коннектор: https://marketplace.terrasoft.ru/app/microsoft-teams-connector-creatio

Может кто-то настраивал и сможет подсказать, в документации есть ссылка на docker hub, там и лежит другая часть документации(https://hub.docker.com/r/onellect/teams-bot-creatio). Мне не понятные какими значениями заполнять следующие конфиги:

 

  • VIRTUAL_HOST - домен, с которого будет проксировать nginx на вашего бота
  • LETSENCRYPT_HOST - домен, на которой letsencrypt будет генерировать ssl сертификат
  • LETSENCRYPT_EMAIL - почта, на которую будут приходить уведомления, связанные с генерацией ssl сертификата

    У нас в целом нет нигде nginx, и получается его нужно настраивать или как? Так же не понятно для какого сервера и какие сертификаты предполагается генерировать, и не подойдут ли те что уже у нас есть?

    Так же непонятны следующие конфиги:

     
  • BotWebhookUrl - адрес, по которому будет доступен сервис бота (для ссылок на самого себя, например на иконки)
  • CreatioUrl - URL, по которому доступен Creatio для сервиса бота - для работы с визами.

    Получается это адрес сервера откуда предполагается запуск docker-compose? И по CreatioUrl , это адрес просто из браузера на страницу которая открывается после того как поставишь бота в Creatio?

Нравится

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

Евгений Шевченко,

Полный файл docker-compose.yml будет выглядеть так: 

version: '2'
services:
  bot:
    image: "onellect/teams-bot-creatio:latest"
    ports:
        - 85:80
    depends_on:
      - redis
    volumes:
      - ./appsettings.json:/app/appsettings.json
    links:
    - redis
    restart: always
  redis:
    image: redis
    command: redis-server --appendonly yes
    volumes:
      - ./redis:/data
    restart: always

Nginx уже входит в состав пула сервисов на https://hub.docker.com/r/onellect/teams-bot-creatio.&nbsp;

 

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

 

Из пула можно исключить:

nginx-proxy:
    image: jwilder/nginx-proxy
    container_name: nginx-proxy
    labels:
      - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./certs:/etc/nginx/certs:ro
      - ./vhost.d:/etc/nginx/vhost.d:ro
      - /usr/share/nginx/html
    restart: always
  letsencrypt-companion:
    image: jrcs/letsencrypt-nginx-proxy-companion
    container_name: letsencrypt-companion
    volumes_from:
      - nginx-proxy
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./certs:/etc/nginx/certs:rw
      - ./vhost.d:/etc/nginx/vhost.d:rw
    restart: always

если вы своими силами обеспечите шифрование трафика (https сертификаты), тогда конфиг для самого сервиса бота сократится:

 bot:
    image: "onellect/teams-bot-creatio:latest"
    ports:
        - 85:80
    depends_on:
      - redis
      - nginx-proxy
      - letsencrypt-companion
    volumes:
      - ./appsettings.json:/app/appsettings.json
    links:
    - redis
    restart: always

 

при этом сервис бота будет висеть на 85 порту (можно изменить на любой, вам удобный) и ваша инфраструктура должна будет проксировать трафик на него.

 

Хочу обратить внимание, что тимс может отправлять трафик только по https протоколу с действующим сертификатом.

 

BotWebhookUrl  - да, это днс имя которое будет ссылаться на сервер, от куда будет запущен docker-compose и должен иметь формат 

https://днс-имя/api/webhook

CreatioUrl - это базовый адрес стенда, где располагается ваша Creatio, например для демо - стенда это может быть адрес вроде:

https://107214-crm-bundle.terrasoft.ru/

 

Дятлов Павел Юрьевич,спасибо за такое подробное описание, а не подскажете сократил все про nginx попытался запустить, но получил ошибку Service 'bot' depends on service 'nginx-proxy' which is undefined.

Евгений Шевченко,

 

Вам надо удалить из блока 

 depends_on:
      - redis
      - nginx-proxy
      - letsencrypt-companion

Все, что связано с nginx ( две последних строчки ) - то есть должно получится вот так:

 

depends_on:
      - redis

 

 

Евгений Шевченко,

Полный файл docker-compose.yml будет выглядеть так: 

version: '2'
services:
  bot:
    image: "onellect/teams-bot-creatio:latest"
    ports:
        - 85:80
    depends_on:
      - redis
    volumes:
      - ./appsettings.json:/app/appsettings.json
    links:
    - redis
    restart: always
  redis:
    image: redis
    command: redis-server --appendonly yes
    volumes:
      - ./redis:/data
    restart: always
Показать все комментарии

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

Нравится

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

Если кому-то интересно, пока получилось решить задачу просмотром логов самого докера по контейнеру, вот команда sudo docker logs CONTAINER_ID

Добрый день.

Вы можете получить логи сервиса EXCHANGE LISTENER из докера выполнив команду:

docker logs -f название сервиса 



Также Вы можете получить логи Exchange Listener из логов самого приложения, папка Syns, файл ExchangeListener.

Обращаю внимание, что логи Listener из логов приложения менее информативны чем логи из пода сервиса.



Стандартный путь логов приложения:

C:\Windows\Temp\Creatio\myApp\0\Log

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

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

Нравится

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

Специального механизма массовой актуализации данных в интерфейсе нет.

 

Как вариант, можно использовать разработку в файловой системе. Если выгрузить привязки в ФС, то с помощью любого продвинутого текстового редактора и регулярных выражений можно произвести массовые изменения по файлам привязок, а потом загрузить полученные файлы обратно в БД (ну или залить в SVN). Аналогичные манипуляции можно провести напрямую в БД (таблица SysPackageSchemaData), только в таком случае процесс будет еще более сложным.

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

Коллеги, есть вопрос к тем кто ответственный за приложение "Журнилрование" Самарасофт, подскажите, планируется ли поддержка Net Core системы или каким образом можно самим переделать пакет приложения, чтобы он поддерживал Net Core версию системы?

Нравится

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

 Да можно адаптировать самому изменив web сервис SmrLoggingService

Алекс, прошу прощения за задержку с ответом. У нас сейчас нет ни возможностей, ни планов переделывать Changelog под Net Core. Что не исключает появления таких возможностей в будущем, но без каких-либо сроков. Попробуйте адаптировать самостоятельно как советует Алексей.

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

Привет.

Интересная ошибка: при включенном журнале изменений, прис оздании обращение под портальным пользователем получаем ошибку несовместимых операторов int и uniqueidentifier.

 

В профайлере ловим заппрос:

 

exec sp_executesql 
 N'
INSERT INTO [dbo].[SysCaseLog]([Id], [ChangeTrackedOn], [ChangeTrackedById],[ChangeTrackedId], [ChangeTypeId], [ClosureDate], [Number], [ClientIP])
SELECT
	@P2  [P],
	@P3  [P1],
	@P4  [P2],
	@P5  [P3],
	(
SELECT
	NULL [Id]
FROM
	[dbo].[SysEmpty] [SysEntityChangeType] WITH(NOLOCK)
WHERE
	NULL = @P6) [SubSysEntityChangeType],
	[Case].[ClosureDate] [ClosureDate],
	[Case].[Number] [Number],
	@P7
FROM
	[dbo].[Case] [Case] WITH(NOLOCK)
WHERE
	[Case].[Id] = @P1
	AND EXISTS (
SELECT
	NULL
FROM
	[dbo].[SysCaseRight] WITH(NOLOCK)
WHERE
	[SysCaseRight].[RecordId] = [Case].[Id]
	AND EXISTS (
SELECT
	1
FROM
	[dbo].[SysAdminUnitInRole] WITH(NOLOCK)
WHERE
	[SysAdminUnitInRole].[SysAdminUnitId] = @CurrentUserIdParam
	AND [SysAdminUnitInRole].[SysAdminUnitRoleId] = [SysCaseRight].[SysAdminUnitId])
	AND [SysCaseRight].[RightLevel] >= 1
	AND [SysCaseRight].[Operation] = 0)',N'@P1 uniqueidentifier,@CurrentUserIdParam uniqueidentifier,@P2 uniqueidentifier,@P3 datetime2(7),@P4 uniqueidentifier,@P5 uniqueidentifier,@P6 nvarchar(8),@P7 nvarchar(3)',@P1='1F30B03B-9445-4FFF-BC89-CA86C86353E5',@CurrentUserIdParam='FBEE0412-977E-46F6-A043-63F2912C0301',@P2='F3B73F28-B537-45B6-AAA3-61F7E00CA3BB',@P3='2021-11-29 06:45:00.4808907',@P4='C4ED336C-3E9B-40FE-8B82-5632476472B4',@P5='1F30B03B-9445-4FFF-BC89-CA86C86353E5',@P6=N'Inserted',@P7=N'::1'

 

Проблема в том, что почемуто вместо того чтобы взять реальный ID из таблицы SysEntityChangeType, Creatio делает SELECT NULL FROM dbo.Empty. При этом NULL имеет по умолчанию INT тип данных. Соответсвенно получаем такую ошибку.

 

Вопрос, как это поправить?

Нравится

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

т.е. ошибка исчезает если написать так:

 

SELECT
	CAST(NULL AS UNIQUEIDENTIFIER) [Id]
FROM
	[dbo].[SysEmpty] [SysEntityChangeType] WITH(NOLOCK)
WHERE
	NULL = @P6) [SubSysEntityChangeType]

 

либо так:

 

SELECT
	[Id]
FROM
	[dbo].[SysEntityChangeType] WITH(NOLOCK)
WHERE
	[Name] = @P6) [SubSysEntityChangeType]

 

либо даже так

 

SELECT [Id]

FROM [dbo].[SysEmpty] [SysEntityChangeType] WITH(NOLOCK)

WHERE NULL = @P6) [SubSysEntityChangeType]

 

но как повлиять на генератор этого запроса? ничего в конфигурации не нашел. каким образом генерируется этот запрос...

т.к. сейчас идет попытка инсерта NULL (в MSSQL это тип INT) в колонку с типом UNIQUEINDENTIFIER...

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

 

Боюсь, что самостоятельно данную проблему решить не получится. Напишите в службу поддержки Террасофт.

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

 

Если для объекта Case настроен журнал изменений, а справочник "Тип изменения объекта" не внесен в справочник "Список объектов, доступных пользователям портала" и на него не настроены права доступа для портальных пользователей, то при создании обращения на портале будет возникать ошибка [Operand type clash: int is incompatible with uniqueidentifier]. (Конфликт типов операндов: int несовместим с uniqueidentifier).

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

 

Это известная ситуация, в будущих релизах её должный исправить.



Проверьте есть ли у пользователей портала доступа на чтение справочника "Тип изменения объекта" (используется в журнале изменений)? Также, внесен ли справочник "Тип изменения объекта", в справочник "Список объектов, доступных пользователям портала". 

Если нет, необходимо настроить права доступа к справочнику "Тип изменения объекта" для портальных пользователей и внести его в справочник "Список объектов, доступных пользователям портала".

После этого проверить воспроизводится ли ошибка, её быть не должно

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

Сделал сервис для .netcore по стате https://academy.terrasoft.ru/docs/developer/back-end_development/config…

Обращаюсь к сервису из вкладки браузера после входа в систему http://172.23.1.117/rest/UsrCustomConfigurationService/SomeMethod

но получаю сообщение 404 (Creatio развернуто в докере, докер перезапускал, все компилировал). Прошу подсказать что еще можно сделать чтоб сервис заработал?

 

 namespace Terrasoft.Configuration.UsrCustomConfigurationService
{
    using System;
    using System.Collections.Generic;
    using System.Security;
    using System.ServiceModel;
    using System.ServiceModel.Activation;
    using System.ServiceModel.Web;
    using System.Web.SessionState;
    using Terrasoft.Common;
    using Terrasoft.Core;
    using Terrasoft.Core.DB;
    using Terrasoft.Core.Factories;
    using Terrasoft.Core.ServiceModelContract;
    using Terrasoft.Web.Common;
    using Terrasoft.Web.Http.Abstractions;
 
     #region Class: UsrCustomConfigurationService
 
    [ServiceContract]
 
     [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
 
    public class UsrCustomConfigurationService: BaseService
    {
        #region Methods: Public
        /* Метод веб-сервиса. */
        [OperationContract]
        [WebInvoke(Method = "GET", UriTemplate = "SomeMethod", 
            BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json,
            ResponseFormat = WebMessageFormat.Json)]
        public string SomeMethod() {
            
            var httpContext = HttpContext.Current;
            return "12345";
        }
        #endregion
    }
    #endregion
}

 

Нравится

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

Столкнулись с похожей проблемой -- нам помогла перезагрузка :)

Столкнулись с похожей проблемой -- нам помогла перезагрузка :)

Вадим Курунов,

Спасибо, помогло! Надеюсь в следующих релизах такое не потребуется

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