Время создания
Фильтры

Здравствуйте! Возможно ли развернуть core версию 7.18.5 приложения на macos?

Нравится

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

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



К сожалению, Creatio пока официально не поддерживает macOS. Поэтому у нас нет инструкций по развертыванию приложения на macOS. Системные требования для Creatio можно найти перейдя по ссылке: https://academy.creatio.com/docs/user/on_site_deployment/system_require…

Malika,

Core Версия не встанет?

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

Mixed Content: The page at 'https://my-site-name/Login/NuiLogin.aspx?ReturnUrl=%2f' was loaded over HTTPS, but requested an insecure stylesheet 'http://192.168.100.106//core/c66a17e50a888481d93b0171c1f3ee64/combined/…'. This request has been blocked; the content must be served over HTTPS.



получаю следующую ошибку после перевода, проверил все конфиги из этой статьи https://academy.terrasoft.ua/docs/user/razvertyvanie_onsite/windows_net…, почему то стили тянутся все равно с адреса на сервере по http



куда копать не понимаю 

Нравится

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

Добрый вечер,

 

Это сообщение об ошибке явно указывает на то, что проблема в том, что система полностью на https переведена не была. Возможно в IIS остался binding на http, возможно какой-то параметр в Web.config (а если сайт на Web-ферме, то проверить обе ноды фермы) не изменен (или изменения не были сохранены). Это сообщение может возникать только в этом случае, нужно перепроверять все настройки перевода на https. 

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

Скажем, есть асинхронный метод в разделе Methods, ну или в пакете сервис с ними лежит. И надо это как-то вызвать внутри бизнес-процесса в блоке ScriptTask, но ведь, если я правильно понимаю, код внутри этого скрипт таска идёт в ScriptTask1Execute(), а тот в свою очередь синхронный и повлиять на это никак нельзя. Всё правильно или я что-то не так понимаю?

Нравится

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

Добрый день!

Рекомендую вам в БП вместо ScriptTask вызвать элементом подпроцесс, который будет фоновым и он выполнится в параллельном потоке.

В систетеме стоит использовать фоновые процессы и с процесса вызвать подпроцесс фоновый. Статьи про фоновые процессы, в которых есть примеры кода для реализации вашей задачи:

https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platform/back-end-development/data-operations-back-end/execute-operations-in-the-background/overview

https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platform/back-end-development/data-operations-back-end/execute-operations-in-the-background/examples/register-a-background-operation

Anhelina,



Добрый день! Прочитал статьи, но что-то не совсем понял, как там с асинхронным кодом работать. Метод Run(), что находится внутри IBackgroundTask, ведь синхронный. Единственный способ, что я вижу, чтобы в нём был асинхронный код - это вызывать его синхронно, условно

 

public void Run(UsrActivityData data) {
        var task = DoSmthAsync();
        task.Wait();
        return task.Result;
}

Я для решения своей задачи изначально планировал просто сделать отдельный класс с синхронными методами(которые будут вызываться из СкриптТаска), где точно так же, как на моём примере выше, будут вызываться нужные мне асинхронные. Но это в любом случае вызов аснхронного из синхронного, что плохо и что я пытаюсь понять, можно ли избежать. Здесь есть какое-то преимущество при использовании IBackgroundTask или я не так понял, как им пользоваться?

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

Есть пакет, в котором есть класс, что наследуется от интерфейса IAppEventListener, в нём своя логика для OnAppStart, OnAppEnd, OnSessionStart, OnSessionEnd. В рамках другого пакета мне понадобилось добавить свою логику в OnAppStart, соотетственно в нём я хочу сделать свой класс с наследованием от этого интерфейса. Но меня интересует, является ли такой подход рекоммендуемым? Не будет ли проблем от того, что в двух разных пакетах запускаются свои разные OnAppStart?

Нравится

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

Добрый день,

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

Добрый день,

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

Дима Вовченко,



Понял, спасибо.

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

Здравствуйте! Подскажите, пожалуйста, как правильно работать с тестами которые взаимодействуют с бд. И если есть, то тесты взаимодействующие с базовыми веб-сервисами

Нравится

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

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

 

По поводу тестов с веб-сервисами - увы, примеров нет.

 

А вот по поводу тестов с БД: 

1) Развернуть на SQL сервере БД.

2) Настроить проект тестов например Base.UnitTests

 

а.В проекте открыть файл Integration.config

если такового у вас в проекте нет то необходимо добавить ссылку на Integration.config из проекта UnitTest. Сделать это можно посредством Visual Studio, либо добавив конфиг через файл проекта:

<None Include="..\UnitTest\Integration.config">
 <Link>Integration.config</Link>
 <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>

b. прописать путь к базе данных в connectionString

<connectionStrings>
<add name="mssqlUnitTest" connectionString="Data Source=server_name; Initial Catalog=db_name; Persist Security Info=True; MultipleActiveResultSets=True; Integrated Security=SSPI; Pooling = true; Max Pool Size = 100; Async = true" />
</connectionStrings>

3) В файл App.config тестового проекта добавить (если ее нет) 

<appSettings>
    <add key="ConfigurationRuntimeDirectory" value="_путь_к_папке_Terrasoft.WebApp" />
</appSettings>

пример значения "_путь_к_папке_Terrasoft.WebApp" - "C:\Projects\Autocheckout\Creatio\TSBpm\Src\Lib\Terrasoft.WebApp.Loader\Terrasoft.WebApp" для примера, привожу файл App.config полностью

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7" />
    </startup>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="Common.Logging.Core" publicKeyToken="af08829b84f0328e" culture="neutral" />
                <bindingRedirect oldVersion="0.0.0.0-3.4.1.0" newVersion="3.4.1.0" />
            </dependentAssembly>
            <dependentAssembly>
                <assemblyIdentity name="Common.Logging" publicKeyToken="af08829b84f0328e" culture="neutral" />
                <bindingRedirect oldVersion="0.0.0.0-3.4.1.0" newVersion="3.4.1.0" />
            </dependentAssembly>
            <dependentAssembly>
                <assemblyIdentity name="Microsoft.Extensions.DependencyInjection.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
                <bindingRedirect oldVersion="0.0.0.0-2.2.0.0" newVersion="2.2.0.0" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
    <appSettings>
        <add key="ConfigurationRuntimeDirectory" value="C:\Projects\Autocheckout\Creatio\TSBpm\Src\Lib\Terrasoft.WebApp.Loader\Terrasoft.WebApp" />
    </appSettings>
</configuration>

4) Создать класс в тестовом проекте с учетом Name Convention

5) Создаем класс с тестом (кейс показывает возможность работы) будем через наш Entity создавать запись с константным именем и email контакта и проверять по email что такой контакт создался в базе.

[TestFixture, Category("Integration")]
public class ContactDataTests : BaseConfigurationTestFixture
{
 
    private const string ContactEmail = "testemail@test.com";
    private const string ContactName = "David";
 
    protected override IEnumerable<Type> GetRequiringInitializationSchemas() {
        EntitySchemaManager.AddCustomizedEntitySchema("Contact",
            new Dictionary<string, string> {
                { "Name", "MediumText"},
                { "Email", "MediumText"}
            });
        return new List<Type>();
    }
    [Test]
    public void SaveContactEmail_EmailSaved_EmailCorrect() {
        var contactSchema = UserConnection.EntitySchemaManager.GetInstanceByName("Contact");
        var contact = contactSchema.CreateEntity(UserConnection);
        contact.SetColumnValue(contact.Schema.GetPrimaryColumnName(), Guid.NewGuid());
        contact.SetColumnValue("Email", ContactEmail);
        contact.SetColumnValue("Name", ContactName);
        contact.SetDefColumnValues();
        contact.Save(false);
        var select = new Select(UserConnection)
                            .Column("Name")
                        .From("Contact")
                        .Where("Email").IsEqual(Column.Const(ContactEmail)) as Select;
        using (DBExecutor dbExec = UserConnection.EnsureDBConnection()) {
            using (IDataReader reader = dbExec.ExecuteReader(select.GetSqlText(), select.Parameters)) {
                if (reader.Read()) {
                    Assert.AreEqual(ContactName, reader.GetColumnValue<string>("Name"));
                }
            }
        }
    }
}

Обязательно указать категорию Integration для класса тестов [TestFixture, Category("Integration")]

6) Запускаем тест стандартными средствами студии или Resharper. Результат запуска:

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