Добрый день. Делаем перевод разделов Контакты и Контрагенты на английский и хорватский. Хорватский язык добавили в системных настройках. Английский используется по умолчанию. Перевод делали в объектах в конфигурации.

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

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

Так же удаляется перевод локализуемых строк.

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

Почему это происходит? И как решить эту проблему?

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

Нравится

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

Добрый день!

В основной таблице SysModule лежат данные, которые Вы вносили при создании раздела. Если Вы переходите в другую локализацию, то при переименовании раздела Ваши изменения записываются в локализируемую таблицу SysModuleLcz.

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

 

Также существует раздел "Переводы", но там нужно искать по ключу.

Более детально описано в статье: 

https://academy.terrasoft.ua/docs/user/kastomizacija_no_code/polzovatel…

 

 

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



Здравствуйте, собираю по инструкции с академии, единственное имя поменял

https://academy.terrasoft.ru/docs/user/ustanovka_i_administrirovanie/ra…

 

Система чистая, это была первая сборка. Содержимое Dockerfile:

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS base

EXPOSE 5000 5002

RUN apt-get update && \

    apt-get -y --no-install-recommends install \

    libgdiplus \

    libc6-dev && \

    apt-get clean all && \

    rm -rf /var/lib/apt/lists/* /var/cache/apt/*

WORKDIR /app

COPY . ./

FROM base AS final

WORKDIR /app

ENV ASPNETCORE_ENVIRONMENT Development

ENV TZ US/Eastern

ENTRYPOINT [ "dotnet", "Terrasoft.WebHost.dll" ]

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS base

EXPOSE 5000 5002

RUN apt-get update && \

apt-get -y --no-install-recommends install \

libgdiplus \

libc6-dev && \

apt-get clean all && \

   rm -rf /var/lib/apt/lists/* /var/cache/apt/*

WORKDIR /app

COPY . ./

FROM base AS final

WORKDIR /app

ENV ASPNETCORE_ENVIRONMENT Development

ENV TZ US/Eastern

ENTRYPOINT [ "dotnet", "Terrasoft.WebHost.dll" ]

 

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

Нравится

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

Евгений, здравствуйте! 

 

Ошибка "base stage name already used" говорит, что у вас компонент уже используется.

Дело в том, что у вас код продублирован:

 

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS base

EXPOSE 5000 5002

RUN apt-get update && \

    apt-get -y --no-install-recommends install \

    libgdiplus \

    libc6-dev && \

    apt-get clean all && \

    rm -rf /var/lib/apt/lists/* /var/cache/apt/*

WORKDIR /app

COPY . ./

FROM base AS final

WORKDIR /app

ENV ASPNETCORE_ENVIRONMENT Development

ENV TZ US/Eastern

ENTRYPOINT [ "dotnet", "Terrasoft.WebHost.dll" ]

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS base

EXPOSE 5000 5002

RUN apt-get update && \

apt-get -y --no-install-recommends install \

libgdiplus \

libc6-dev && \

apt-get clean all && \

   rm -rf /var/lib/apt/lists/* /var/cache/apt/*

WORKDIR /app

COPY . ./

FROM base AS final

WORKDIR /app

ENV ASPNETCORE_ENVIRONMENT Development

ENV TZ US/Eastern

ENTRYPOINT [ "dotnet", "Terrasoft.WebHost.dll" ]

На Академии уже исправили этот момент:

 

https://academy.terrasoft.ru/docs/user/ustanovka_i_administrirovanie/ra…

 

Для продолжения работы нужно выполнить

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS base
EXPOSE 5000 5002
RUN apt-get update && \
apt-get -y --no-install-recommends install \
libgdiplus \
libc6-dev && \
apt-get clean all && \
rm -rf /var/lib/apt/lists/* /var/cache/apt/*
WORKDIR /app
COPY . ./
FROM base AS final
WORKDIR /app
ENV ASPNETCORE_ENVIRONMENT Development
ENV TZ US/Eastern
ENV COMPlus_ThreadPool_ForceMinWorkerThreads 100
ENTRYPOINT ["dotnet", "Terrasoft.WebHost.dll"]

Вильшанский Дмитрий, здравствуйте подскажите в чем может быть проблема, ошибка вида:

Unhandled exception. System.Exception: Could not resolve a service of type 'Terrasoft.WebHost.IApplication' for the parameter 'application' of method 'Configure' on type 'Terrasoft.WebHost.Startup'.

 ---> Autofac.Core.DependencyResolutionException: An error occurred during the activation of a particular registration. See the inner exception for details. Registration: Activator = Application (ReflectionActivator), Services = [Terrasoft.WebHost.IApplication], Lifetime = Autofac.Core.Lifetime.RootScopeLifetime, Sharing = Shared, Ownership = OwnedByLifetimeScope ---> An error occurred during the activation of a particular registration. See the inner exception for details. Registration: Activator = RedisSessionSynchronizationService (ReflectionActivator), Services = [Terrasoft.WebHost.Session.ISessionSynchronizationService], Lifetime = Autofac.Core.Lifetime.RootScopeLifetime, Sharing = Shared, Ownership = OwnedByLifetimeScope ---> An error occurred during the activation of a particular registration. See the inner exception for details. Registration: Activator = RedisSessionSynchronizer (ReflectionActivator), Services = [Terrasoft.Redis.ISessionSynchronizer], Lifetime = Autofac.Core.Lifetime.RootScopeLifetime, Sharing = Shared, Ownership = OwnedByLifetimeScope ---> An error occurred during the activation of a particular registration. See the inner exception for details. Registration: Activator = IRedisClientsManager (DelegateActivator), Services = [Terrasoft.Redis.Abstractions.IRedisClientsManager], Lifetime = Autofac.Core.Lifetime.RootScopeLifetime, Sharing = Shared, Ownership = OwnedByLifetimeScope ---> No connection is available to service this operation: INFO; UnableToConnect on localhost:6379/Interactive, Initializing/NotStarted, last: NONE, origin: BeginConnectAsync, outstanding: 0, last-read: 0s ago, last-write: 0s ago, keep-alive: 60s, state: Connecting, mgr: 10 of 10 available, last-heartbeat: never, global: 0s ago, v: 2.0.601.3402; IOCP: (Busy=0,Free=1000,Min=4,Max=1000), WORKER: (Busy=0,Free=32767,Min=256,Max=32767), Local-CPU: n/a (See inner exception for details.) (See inner exception for details.) (See inner exception for details.) (See inner exception for details.)

 ---> Autofac.Core.DependencyResolutionException: An error occurred during the activation of a particular registration. See the inner exception for details. Registration: Activator = RedisSessionSynchronizationService (ReflectionActivator), Services = [Terrasoft.WebHost.Session.ISessionSynchronizationService], Lifetime = Autofac.Core.Lifetime.RootScopeLifetime, Sharing = Shared, Ownership = OwnedByLifetimeScope ---> An error occurred during the activation of a particular registration. See the inner exception for details. Registration: Activator = RedisSessionSynchronizer (ReflectionActivator), Services = [Terrasoft.Redis.ISessionSynchronizer], Lifetime = Autofac.Core.Lifetime.RootScopeLifetime, Sharing = Shared, Ownership = OwnedByLifetimeScope ---> An error occurred during the activation of a particular registration. See the inner exception for details. Registration: Activator = IRedisClientsManager (DelegateActivator), Services = [Terrasoft.Redis.Abstractions.IRedisClientsManager], Lifetime = Autofac.Core.Lifetime.RootScopeLifetime, Sharing = Shared, Ownership = OwnedByLifetimeScope ---> No connection is available to service this operation: INFO; UnableToConnect on localhost:6379/Interactive, Initializing/NotStarted, last: NONE, origin: BeginConnectAsync, outstanding: 0, last-read: 0s ago, last-write: 0s ago, keep-alive: 60s, state: Connecting, mgr: 10 of 10 available, last-heartbeat: never, global: 0s ago, v: 2.0.601.3402; IOCP: (Busy=0,Free=1000,Min=4,Max=1000), WORKER: (Busy=0,Free=32767,Min=256,Max=32767), Local-CPU: n/a (See inner exception for details.) (See inner exception for details.) (See inner exception for details.)

 ---> Autofac.Core.DependencyResolutionException: An error occurred during the activation of a particular registration. See the inner exception for details. Registration: Activator = RedisSessionSynchronizer (ReflectionActivator), Services = [Terrasoft.Redis.ISessionSynchronizer], Lifetime = Autofac.Core.Lifetime.RootScopeLifetime, Sharing = Shared, Ownership = OwnedByLifetimeScope ---> An error occurred during the activation of a particular registration. See the inner exception for details. Registration: Activator = IRedisClientsManager (DelegateActivator), Services = [Terrasoft.Redis.Abstractions.IRedisClientsManager], Lifetime = Autofac.Core.Lifetime.RootScopeLifetime, Sharing = Shared, Ownership = OwnedByLifetimeScope ---> No connection is available to service this operation: INFO; UnableToConnect on localhost:6379/Interactive, Initializing/NotStarted, last: NONE, origin: BeginConnectAsync, outstanding: 0, last-read: 0s ago, last-write: 0s ago, keep-alive: 60s, state: Connecting, mgr: 10 of 10 available, last-heartbeat: never, global: 0s ago, v: 2.0.601.3402; IOCP: (Busy=0,Free=1000,Min=4,Max=1000), WORKER: (Busy=0,Free=32767,Min=256,Max=32767), Local-CPU: n/a (See inner exception for details.) (See inner exception for details.)

 ---> Autofac.Core.DependencyResolutionException: An error occurred during the activation of a particular registration. See the inner exception for details. Registration: Activator = IRedisClientsManager (DelegateActivator), Services = [Terrasoft.Redis.Abstractions.IRedisClientsManager], Lifetime = Autofac.Core.Lifetime.RootScopeLifetime, Sharing = Shared, Ownership = OwnedByLifetimeScope ---> No connection is available to service this operation: INFO; UnableToConnect on localhost:6379/Interactive, Initializing/NotStarted, last: NONE, origin: BeginConnectAsync, outstanding: 0, last-read: 0s ago, last-write: 0s ago, keep-alive: 60s, state: Connecting, mgr: 10 of 10 available, last-heartbeat: never, global: 0s ago, v: 2.0.601.3402; IOCP: (Busy=0,Free=1000,Min=4,Max=1000), WORKER: (Busy=0,Free=32767,Min=256,Max=32767), Local-CPU: n/a (See inner exception for details.)

 ---> StackExchange.Redis.RedisConnectionException: No connection is available to service this operation: INFO; UnableToConnect on localhost:6379/Interactive, Initializing/NotStarted, last: NONE, origin: BeginConnectAsync, outstanding: 0, last-read: 0s ago, last-write: 0s ago, keep-alive: 60s, state: Connecting, mgr: 10 of 10 available, last-heartbeat: never, global: 0s ago, v: 2.0.601.3402; IOCP: (Busy=0,Free=1000,Min=4,Max=1000), WORKER: (Busy=0,Free=32767,Min=256,Max=32767), Local-CPU: n/a

 ---> StackExchange.Redis.RedisConnectionException: UnableToConnect on localhost:6379/Interactive, Initializing/NotStarted, last: NONE, origin: BeginConnectAsync, outstanding: 0, last-read: 0s ago, last-write: 0s ago, keep-alive: 60s, state: Connecting, mgr: 10 of 10 available, last-heartbeat: never, global: 0s ago, v: 2.0.601.3402

   --- End of inner exception stack trace ---

   at StackExchange.Redis.RedisServer.ExecuteSync[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) in C:\projects\stackexchange-redis\src\StackExchange.Redis\RedisServer.cs:line 589

   at StackExchange.Redis.RedisServer.Info(RedisValue section, CommandFlags flags) in C:\projects\stackexchange-redis\src\StackExchange.Redis\RedisServer.cs:line 258

   at Terrasoft.Redis.StackExchangeAdapters.RedisClientAdapter.get_Info() in /opt/buildagent/work/ApplicationCoreLinux/TSBpm/Src/Lib/Terrasoft.Redis.StackExchangeAdapters/RedisClientAdapter.cs:line 64

   at Terrasoft.Redis.RedisValidator.GetVersion(IRedisClientsManager redisClientsManager) in /opt/buildagent/work/ApplicationCoreLinux/TSBpm/Src/Lib/Terrasoft.Redis/RedisValidator.cs:line 28

   at Terrasoft.Redis.RedisValidator.CheckVersion(IRedisClientsManager redisClientsManager) in /opt/buildagent/work/ApplicationCoreLinux/TSBpm/Src/Lib/Terrasoft.Redis/RedisValidator.cs:line 42

   at Terrasoft.Redis.RedisClientsManager..ctor(String connectionStringName, IRedisValidator redisValidator) in /opt/buildagent/work/ApplicationCoreLinux/TSBpm/Src/Lib/Terrasoft.Redis/RedisClientsManager.cs:line 57

   at Terrasoft.Redis.RedisClientsManager..ctor() in /opt/buildagent/work/ApplicationCoreLinux/TSBpm/Src/Lib/Terrasoft.Redis/RedisClientsManager.cs:line 39

   at Terrasoft.Redis.RedisClientsManager.<>c.<.cctor>b__21_1() in /opt/buildagent/work/ApplicationCoreLinux/TSBpm/Src/Lib/Terrasoft.Redis/RedisClientsManager.cs:line 75

   at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)

   at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)

   at System.Lazy`1.CreateValue()

   at System.Lazy`1.get_Value()

   at Terrasoft.Redis.RedisClientsManager.get_Instance() in /opt/buildagent/work/ApplicationCoreLinux/TSBpm/Src/Lib/Terrasoft.Redis/RedisClientsManager.cs:line 80

   at Terrasoft.Redis.RedisExtensions.<>c.<AddRedis>b__0_0(IServiceProvider container) in /opt/buildagent/work/ApplicationCoreLinux/TSBpm/Src/Lib/Terrasoft.Redis/RedisExtensions.cs:line 15

   at Terrasoft.Core.DI.ServiceProvider.ServiceProviderAutofacModule.<>c__DisplayClass15_0.<ConfigureFactoryBinding>b__0(IComponentContext context, IEnumerable`1 parameters) in /opt/buildagent/work/ApplicationCoreLinux/TSBpm/Src/Lib/Terrasoft.Core.DI/ServiceProvider/ServiceProviderAutofacModule.cs:line 216

   at Autofac.Core.Activators.Delegate.DelegateActivator.ActivateInstance(IComponentContext context, IEnumerable`1 parameters)

   at Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable`1 parameters, Object& decoratorTarget)

   --- End of inner exception stack trace ---

   at Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable`1 parameters, Object& decoratorTarget)

   at Autofac.Core.Resolving.InstanceLookup.<>c__DisplayClass5_0.<Execute>b__0()

   at Autofac.Core.Lifetime.LifetimeScope.GetOrCreateAndShare(Guid id, Func`1 creator)

   at Autofac.Core.Resolving.InstanceLookup.Execute()

   at Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, IComponentRegistration registration, IEnumerable`1 parameters)

   at Autofac.Core.Resolving.InstanceLookup.ResolveComponent(IComponentRegistration registration, IEnumerable`1 parameters)

   at Autofac.Core.Activators.Reflection.AutowiringParameter.<>c__DisplayClass0_0.<CanSupplyValue>b__0()

   at Autofac.Core.Activators.Reflection.ConstructorParameterBinding.Instantiate()

   at Autofac.Core.Activators.Reflection.ReflectionActivator.ActivateInstance(IComponentContext context, IEnumerable`1 parameters)

   at Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable`1 parameters, Object& decoratorTarget)

   --- End of inner exception stack trace ---

   at Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable`1 parameters, Object& decoratorTarget)

   at Autofac.Core.Resolving.InstanceLookup.<>c__DisplayClass5_0.<Execute>b__0()

   at Autofac.Core.Lifetime.LifetimeScope.GetOrCreateAndShare(Guid id, Func`1 creator)

   at Autofac.Core.Resolving.InstanceLookup.Execute()

   at Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, IComponentRegistration registration, IEnumerable`1 parameters)

   at Autofac.Core.Resolving.InstanceLookup.ResolveComponent(IComponentRegistration registration, IEnumerable`1 parameters)

   at Autofac.Core.Activators.Reflection.AutowiringParameter.<>c__DisplayClass0_0.<CanSupplyValue>b__0()

   at Autofac.Core.Activators.Reflection.ConstructorParameterBinding.Instantiate()

   at Autofac.Core.Activators.Reflection.ReflectionActivator.ActivateInstance(IComponentContext context, IEnumerable`1 parameters)

   at Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable`1 parameters, Object& decoratorTarget)

   --- End of inner exception stack trace ---

   at Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable`1 parameters, Object& decoratorTarget)

   at Autofac.Core.Resolving.InstanceLookup.<>c__DisplayClass5_0.<Execute>b__0()

   at Autofac.Core.Lifetime.LifetimeScope.GetOrCreateAndShare(Guid id, Func`1 creator)

   at Autofac.Core.Resolving.InstanceLookup.Execute()

   at Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, IComponentRegistration registration, IEnumerable`1 parameters)

   at Autofac.Core.Resolving.InstanceLookup.ResolveComponent(IComponentRegistration registration, IEnumerable`1 parameters)

   at Autofac.Core.Activators.Reflection.AutowiringParameter.<>c__DisplayClass0_0.<CanSupplyValue>b__0()

   at Autofac.Core.Activators.Reflection.ConstructorParameterBinding.Instantiate()

   at Autofac.Core.Activators.Reflection.ReflectionActivator.ActivateInstance(IComponentContext context, IEnumerable`1 parameters)

   at Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable`1 parameters, Object& decoratorTarget)

   --- End of inner exception stack trace ---

   at Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable`1 parameters, Object& decoratorTarget)

   at Autofac.Core.Resolving.InstanceLookup.<>c__DisplayClass5_0.<Execute>b__0()

   at Autofac.Core.Lifetime.LifetimeScope.GetOrCreateAndShare(Guid id, Func`1 creator)

   at Autofac.Core.Resolving.InstanceLookup.Execute()

   at Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, IComponentRegistration registration, IEnumerable`1 parameters)

   at Autofac.Core.Resolving.ResolveOperation.ResolveComponent(IComponentRegistration registration, IEnumerable`1 parameters)

   at Autofac.Core.Resolving.ResolveOperation.Execute(IComponentRegistration registration, IEnumerable`1 parameters)

   at Autofac.Core.Lifetime.LifetimeScope.ResolveComponent(IComponentRegistration registration, IEnumerable`1 parameters)

   at Autofac.ResolutionExtensions.TryResolveService(IComponentContext context, Service service, IEnumerable`1 parameters, Object& instance)

   at Autofac.ResolutionExtensions.ResolveService(IComponentContext context, Service service, IEnumerable`1 parameters)

   at Autofac.ResolutionExtensions.Resolve(IComponentContext context, Type serviceType, IEnumerable`1 parameters)

   at Autofac.ResolutionExtensions.Resolve(IComponentContext context, Type serviceType)

   at Autofac.Extensions.DependencyInjection.AutofacServiceProvider.GetRequiredService(Type serviceType)

   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)

   at Microsoft.AspNetCore.Hosting.ConfigureBuilder.Invoke(Object instance, IApplicationBuilder builder)

   --- End of inner exception stack trace ---

   at Microsoft.AspNetCore.Hosting.ConfigureBuilder.Invoke(Object instance, IApplicationBuilder builder)

   at Microsoft.AspNetCore.Hosting.ConfigureBuilder.<>c__DisplayClass4_0.<Build>b__0(IApplicationBuilder builder)

   at Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.<>c__DisplayClass13_0.<UseStartup>b__2(IApplicationBuilder app)

   at Microsoft.AspNetCore.Mvc.Filters.MiddlewareFilterBuilderStartupFilter.<>c__DisplayClass0_0.<Configure>g__MiddlewareFilterBuilder|0(IApplicationBuilder builder)

   at Microsoft.AspNetCore.HostFilteringStartupFilter.<>c__DisplayClass0_0.<Configure>b__0(IApplicationBuilder app)

   at Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancellationToken)

   at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken)

   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)

   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)

   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run(IHost host)

   at Terrasoft.WebHost.Program.StartWebApplication(String[] args) in /opt/buildagent/work/ApplicationCoreLinux/TSBpm/Src/Lib/Terrasoft.WebHost/Program.cs:line 28

   at Terrasoft.WebHost.Program.<>c__DisplayClass2_0.<Main>b__0(StartOptions _) in /opt/buildagent/work/ApplicationCoreLinux/TSBpm/Src/Lib/Terrasoft.WebHost/Program.cs:line 61

   at CommandLine.ParserResultExtensions.MapResult[T1,T2,TResult](ParserResult`1 result, Func`2 parsedFunc1, Func`2 parsedFunc2, Func`2 notParsedFunc)

   at Terrasoft.WebHost.Program.Main(String[] args) in /opt/buildagent/work/ApplicationCoreLinux/TSBpm/Src/Lib/Terrasoft.WebHost/Program.cs:line 64

Евгений Шевченко,Это ошибка при сборке images*

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

Добрый день! 

Имеем лид. Создали поле с типом "Дата" на лиде. Хотелось бы создать бизнес-процесс, который бы заполнял дату тем значением, которое являлось бы текущей датой на момент перехода стадии Лида на стадию "Победа".

Другими словами, хотим отслеживать дату, когда Лид стал победным. Возможно ли это сделать? Не нашла вариантов, которые бы нам подходили в начальном событии "Сигнал". 

Нравится

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

Да, возможно. В кейса в стадии Победа Добавьте БП. В качестве параметра процесса передать ID лида. В самом БП сделать редактирование данных лида.

 

У меня подобное сделано для установки ответственного в обращении при переходе на стадию "В работе"

 

Да, возможно. В кейса в стадии Победа Добавьте БП. В качестве параметра процесса передать ID лида. В самом БП сделать редактирование данных лида.

 

У меня подобное сделано для установки ответственного в обращении при переходе на стадию "В работе"

 

Алексей Следь,

Алексей, спасибо за пример ! Попробую воспроизвести. А в бизнес процессе, что будет являться начальной точкой запуска процесса ? простой кружок или сигнал ? если сигнал, не понимаю, на что он должен реагировать, на изменение Лида? Была бы Вам признательна, если бы скинули скрин бизнес процесса.

Алексей Следь,

Создала бизнес процесс с сигналом, при изменении лида. Добавила параметр (надеюсь, правильно, ни разу этим не пользовалась). Далее выбрала пункт "изменить данные" и тут начался ступор, т.к. обычно я использую информацию, полученную вычитками в данном бизнес процессе. как же тогда передать в поле Дата победы (на лиде) - дату, когда изменилась стадия ? 

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

Лилия, будет простой. Если процесс не выбран и нажать на кнопку [+], откроется дизайнер с заготовкой нового процесса. Если процессу добавить параметры, в дизайнере кейса можно настроить передачу туда значения (например, Id записи). Подробнее о настройке этого элемента см. в статье.

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

Добрый день ! 

Скажите, можно ли выгрузить все файлы из раздела Документы, которые соответствовали бы определённому формату (excel).  Желательно конечно, отфильтровать документы также по полю "Тип", но это второстепенный вопрос. 

Нравится

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

Добрый день.

Посмотрите обсуждение подобной темы в этом посте.

Добрый день.

Посмотрите обсуждение подобной темы в этом посте.

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

Добрый день ! 

 

Стоит задача направить на почту контакту письмо с оповещением, что контакт был упомянут в Ленте (в любом объекте). Чаще всего это объект Документ.

Нашла на маркетплейс темплейт, который реализует данную задачу на конфигурации Service. https://marketplace.terrasoft.ru/template/uvedomlenie-ob-upominanii-v-l…; Дабы не изобретать велосипед, хотела переделать бизнес-процесс под нашу конфигурацию, но непонятны некоторые позиции в бизнес процессе. Также установила данный темплейт на триальную версию конфигурацию сервис, и протестила его, но уведомления на почту не падают.

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

 

Нравится

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

LilyG,

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

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

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

P.S. Кстати, скриншоты своих изменений Вы так и не прикрепили.

Добрый день.

Все возникшие с настройкой вопросы Вы можете задать разработчику данного бизнес-процесса. Напишите письмо на bpmonlinelabs@bpmonline.com.

Алла Савельева пишет:

Добрый день.

Все возникшие с настройкой вопросы Вы можете задать разработчику данного бизнес-процесса. Напишите письмо на bpmonlinelabs@bpmonline.com.

Добрый день ! 

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

LilyG,

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

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

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

P.S. Кстати, скриншоты своих изменений Вы так и не прикрепили.

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

мне не совсем понятно, для чего используется схема.id у объекта сообщение, можете сказать источники, где я смогу узнать об этом ? Что вообще представляет из себя эта схема ? Гугление ничего не дало по этому вопросу. 

LilyG, причём тут гугление, это же дополнение из маркета, Алла выше привела почту разработчиков.

Судя по этим двум скриншотам, по пустому Id схемы определяется, является ли комментарий в ленте корневым или ответом на другой комментарий и в зависимости от этого отрабатывает различная логика.

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

LilyG, причём тут гугление, это же дополнение из маркета, Алла выше привела почту разработчиков.

Судя по этим двум скриншотам, по пустому Id схемы определяется, является ли комментарий в ленте корневым или ответом на другой комментарий и в зависимости от этого отрабатывает различная логика.

Разработчики отправили меня переделывать процесс самостоятельно, я писала выше. А чтобы его переделать, нужно понимать что происходит при выполнении процесса. А чтобы это понимать, я должна знать ту часть формул,что не описаны в разделе "Формулы" на академии, например, упоминание схем. 

Спасибо. 

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

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



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

[#Читать пользователя контакта.Первый элемент результирующей коллекции.Тип подключения#]==0&&[#Message Schema ID#]==[#Cases Schema ID#]&&[#Читать системную настройку NoReplyNotificationMailboxSettings.Первый элемент результирующей коллекции.Значение уникального идентификатора#]!=Guid.Empty&&[#Читать контакта.Первый элемент результирующей коллекции.Email#]!=String.Empty

Тип  подключения пользователя: что это ? я нашла данную колонку в пользователях, вывела её и у всех стоит "0". Но что означает этот ноль непонятно .

Системная настройка не должна быть пустой (это выглядит логично, но я не нашла данную системную настройку "NoReplyNotificationMailboxSettings" в нашей конфигурации и в гугле).

Не пустой email тоже выглядит логично.

И главный вопрос, зачем приравнивать id Схем сообщения и кейса ? 

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

По типу пользователя, см. тему.

Системной настройки с таким кодом стандартно не вижу, возможно, она идёт в пакете с этим БП. Судя по названию, в ней может хранится Id записи о ящике «noreply@...».

Процесс предназначен для работы с напоминаниями раздела обращений, потому и сравнивается Id со схемой Case.

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

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

Нравится

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

Система полагается на стандартные настройки базы данных. В MS SQL по умолчанию регистр не учитывается, настройка меняется на уровне всей базы, как описано тут. Только учтите, что работу системы с изменёнными настройками регистрозависимости никто не тестировал и сайт может заработать некорректно в других местах.

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

Благодарю за ответ

Может кому пригодится. Решили эту проблему следующим образом - конвертировали строку в base64.

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

Добрый день! Прошу подсказать, как в печатных формах менять окончания, к примеру ОБЩАЯ СУММА: 46 232 778,78 "Рублей", Цена за ед. в "Рублях", когда Валюта = Рубль без привлечения разработчика 

 

 

 

Нравится

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

Можно с помощью простой функции "Заменить" (Ctrl+H)

Не знаю, какой именно Вы используете из механизмов отчётов, но подозреваю, что без разработки не получится. Если в движке отчётов есть возможность написать логику макроса для подстановки, можно функцией по числовому значению получать нужный текст. Вот пример функции на JS, под C# адаптировать будет несложно.

А если отчёт не позволяет вычислений, можно в объекте рядом с числовым полем добавить текстовое, которое заполнять аналогичным образом в бизнес-процессе на создании и изменении записи, а затем подставить его значение в отчёт.

Также см. статью о том, какие макросы для Word-отчётов в системе есть стандартно, а вот статья о создании своего макроса.

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

Коллеги, добрый день.

Столкнулся с проблемой отображения уведомлений в коммуникационной панели.

Задача: при добавлении нового участника в деталь "команда" в карточке продажи - уведомлять добавленного участника в коммуникационной панели.

Делал через бп (скриншот во вложении).



При смене NotificationType на Notification - во вкладке системных уведомлений все отображается корректно. Можно перейти в продажу по ссылке.

При значении Reminding - во вкладке напоминаний пустота (а напоминание нужно как раз именно там). При этом на счетчике самой вкладки видно, что напоминание есть.

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

С Активностями-Участниками аналогичный бп работает нормально (уведомления в напоминаниях отображаются).

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

Нравится

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

Возможно, при создании записи в таблице Reminding не заполнены нужными значениями все поля. Сравните в базе значения у той записи, что отображается у пользователя в этом разделе верно и у Вашей, созданной при помощи БП.

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

Александр, спасибо за подсказку. В таблице Reminding поле SourceId получает null. Не совсем пока понятно что с этим сделать, но это уже хоть что-то) Буду разбираться.

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

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

Александр, так я тоже пробовал еще в самом начале. К сожалению никакого эффекта это не дает (но кстати SourceId в таблице заполняется, это да).

На данный момент оставил уведомления как NotificationType = Notification. Но хотелось бы конечно разобраться.

Сравните значения полей с уже существующими записями,которые отобразились верно.

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

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

Есть задача: сделать веб-сервис, принимающий на вход сложное json-тело.

В ходе реализации столкнулась с двумя проблемами:

1. Не нашла, как описать прием сложного параметра в сервисе, кроме робкого указания на модификаторы [DataContract] и [DataMember]. Подскажите, где-нибудь есть информация об этом? 

2. При вызове из Postman сервис возвращает ответ "403 - Вы не имеете разрешения на просмотр этого каталога пли страницы." (скриншот ниже). Нужно ли где-то отдельно прописывать права на доступ к сервисам?

 

Скриншот ошибки:

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

Листинг пример json тела запроса.

{
"scoring_events" : [
		{
			"type" : "pageview",
			"page_url" : "https://bpmonline.com/",
			"datetime_utc" : "2018-08-08 12:00:12",
			"responsible_user" : {
				"name" : "Иван Иванов",
				"email" : "i.ivanov@yandex.ru",
				"type" : "user"
			},
			"partner" : {
				"name" : "ООО Ромашка"
				"bpm_id" : "783967ef-c629-4f1d-8cd4-3b3dba955ffc",
				"contact_email" : "n.ivanova@yandex.ru"
			}
		},
		...
		{
			...
		}
	]
}

 

листинг сервиса:

namespace Terrasoft.Configuration.WScoringService
{
	using System;
<...>
#region Class: WScoringService 
	[ServiceContract]
	[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
	public class WScoringService : BaseService
	{
        private WScoringServiceResponse wScoringServiceResponse;
 
        #region Methods: Public
        [OperationContract]
        [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped,
        ResponseFormat = WebMessageFormat.Json)]
        public string AddScoringEvent(List<ScoringEvent> scoring_events)
        {
            if (scoring_events.IsEmpty()) wScoringServiceResponse = new WScoringServiceResponse(true, "empty");
            else wScoringServiceResponse = new WScoringServiceResponse(true, scoring_events[0].ToString());
            return wScoringServiceResponse.ToJsonString();
        }
        #endregion
        #region  DataContract
	    [DataContract]
	    public class ScoringEvent
	    {
	    	[DataMember]
	        public string type;
	        [DataMember]
	        public string page_url;
	        [DataMember]
	        public string datetime_utc;
	        [DataMember]
	        public ResponsibleUser responsible_user;
	        [DataMember]
	        public Partner partner;
	        public override string ToString()
	        {
	            string result;
	            result = "type=" + type + ";";
	            result += "page_url=" + page_url + ";";
	            result += "datetime_utc=" + datetime_utc + ";";
	            result += "responsible_user_name=" + responsible_user.name + ";";
	            result += "partner_name=" + partner.name + ";\n";
	            return result;
	        }
	    }
	    [DataContract]
	    public struct ResponsibleUser
	    {
	    	[DataMember]
	        public string name;
	        [DataMember]
	        public string email;
	        [DataMember]
	        public string type;
	    }
	    [DataContract]
	    public struct Partner
	    {
	    	[DataMember]
	        public string name;
	        [DataMember]
	        public string bpm_id;
	        [DataMember]
	        public string contact_email;
	    }
	    #endregion
    }
    #endregion
 
    #region Class: WScoringServiceResponse
    public class WScoringServiceResponse
    {
        private bool success;
        private string message;
        public WScoringServiceResponse() { }
        public WScoringServiceResponse(bool success, string message = null)
        {
            this.success = success;
            this.message = message;
        }
        public string ToJsonString()
        {
            string result = "{\"status\":\"";
            if (success) result += "ok\",";
            else result += "error\",";
            result += "\"message\":\"" + message+ "\"}";
            return result;
        }
    }
    #endregion
}

 

Нравится

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

Примеры сервисов можно найти в конфигурации. Например, [DataContract] и [DataMember] применяют в CurrentUserService так:

[DataContract]
public class UserCultureInfo
{
	[DataMember(Name = "timeZoneCode")]
	public string TimeZoneCode { get; set; }
 
	[DataMember(Name = "timeZoneName")]
	public string TimeZoneName { get; set; }
 
	[DataMember(Name = "timeZoneId")]
	public Guid TimeZoneId { get; set; }
 
	[DataMember(Name = "cultureId")]
	public Guid CultureId { get; set; }
 
	[DataMember(Name = "cultureName")]
	public string CultureName { get; set; }
 
	[DataMember(Name = "cultureLanguage")]
	public string CultureLanguage { get; set; }
 
	[DataMember(Name = "dateTimeFormatId")]
	public Guid DateTimeFormatId { get; set; }
 
	[DataMember(Name = "dateTimeFormatName")]
	public string DateTimeFormatName { get; set; }
}

По поводу 403, такое бывает, если при отправке запроса к сервису не передать CSRF-токен.

И вот я пишу другой подобный сервис, привожу пример, который у меня заработал

 

Данные, которые отправляются в сервис:

{
    "WCases": [{
            "message": "webinar test",
            "user_crm_id": "CFAC23D8-8EEA-4EB6-A257-0001538F0723"
        }, {
            "message": "webinar test 2",
            "user_crm_id": "CFAC23D8-8EEA-4EB6-A257-0001538F0723"
        }
    ]
}

Код сервиса:

namespace Terrasoft.Configuration.WCaseService
{
    using System;
    using System.ServiceModel;
    using System.ServiceModel.Web;
    using System.ServiceModel.Activation;
    using System.Collections.Generic;
    using Terrasoft.Core;
    using Terrasoft.Web.Common;
    using Terrasoft.Configuration.Slack;
    using System.Runtime.Serialization;
 
    #region WCaseService
    [ServiceContract]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
    public class WCaseService : BaseService
    {
        #region init
        private SystemUserConnection _systemUserConnection;
        private SystemUserConnection SystemUserConnection
        {
            get
            {
                return _systemUserConnection ?? (_systemUserConnection = (SystemUserConnection)AppConnection.SystemUserConnection);
            }
        }
        #endregion
        #region main: endPoints
        [OperationContract]
        [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped,
        ResponseFormat = WebMessageFormat.Json)]
        public string ImportData(List&lt;WCaseTemplate&gt; WCases)
        {
            string result = "";
 
            if (WCases != null)
            {
                foreach (WCaseTemplate wCasein WCases)
                {
                    result += "message: " + wCase.UserMessage + "\nuser_crm_id: " + wCase.UsrLoginId.ToString() + "\n";
                }
            }
            else result = "NULL";
 
            return result;
        }
        #endregion
    }
    #endregion
    [DataContract]
    public class WCaseTemplate
    {
        [DataMember(Name = "message")]
        public string UserMessage { get; set; }
 
        [DataMember(Name = "user_crm_id")]
        public Guid UsrLoginId { get; set; }
    }
}

 

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

Коллеги, приветствую!

Столкнулся с проблемой у детали с редактируемым реестром.

Не получается заставить работать кнопку "настроить деталь" в карточке. Пишет что деталь не зарегистрирована в справочнике деталей.

Делаю все по инструкции из https://academy.terrasoft.ru/documents/technic-sdk/7-14/detal-s-redaktiruemym-reestrom (включая регистрацию через sql-запрос)

+ пункт 3 из https://academy.terrasoft.ru/documents/technic-sdk/7-14/detal-so-stranicey-dobavleniya (включая регистрацию связи между схемой объекта детали и схемой страницы редактирования записи детали через sql-запрос и перекомпиляцию в конфигурации)

Так же пробовал на демо-стенде с грубо говоря копипастом из инструкции - результат тот же.

Что забыл\упустил? Заранее благодарю!

 

Нравится

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

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

Проверьте, действительно, ли добавилась нужная информация в SysDetails, SysModuleEntity и SysModuleEdit в базе данных Вашего сайта.

Это можно сделать с помощью sql-запроса к базе данных.

P.S. Обычно, чтобы не возиться с написанием специальных sql-запросов для регистрации детали, я сначала создаю стандартную деталь через мастер деталей, а потом вношу изменения в схему самой детали, чтобы она стала редактируемой.

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

Проверьте, действительно, ли добавилась нужная информация в SysDetails, SysModuleEntity и SysModuleEdit в базе данных Вашего сайта.

Это можно сделать с помощью sql-запроса к базе данных.

P.S. Обычно, чтобы не возиться с написанием специальных sql-запросов для регистрации детали, я сначала создаю стандартную деталь через мастер деталей, а потом вношу изменения в схему самой детали, чтобы она стала редактируемой.

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

Алла, добрый день!

По базе вроде бы все на своих местах. Но так или иначе ваш способ сработал, спасибо вам огромное)

Надо будет сравнить таблицы и разобраться с вариантом "вручную".

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