Вопрос

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

 

Может кто-то пробовал работать с RabbitMQ.

Поделитесь, пожалуйста, инструкцией по подключению к RabbitMQ в Creatio

 

Подскажите, пожалуйста, возможно ли забирать данные из очередей бизнес-процессом? Можно ли отправлять данные в очередь RabbitMQ из Creatio?

Нравится

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

Добрый день,

 

Что касается самого RabbitMQ, его вам необходимо разворачивать самостоятельно. Вы можете воспользоваться документацией: https://www.rabbitmq.com/docs/download.



Пример подключения к RabbitMQ вы можете найти в статье: https://academy.creatio.com/docs/8.x/setup-and-administration/on-site-d…, а именно последний пунк:

messageBroker manages the interaction with the RabbitMQ service. Fill out this parameter only if you need to set up the horizontal load scaling using RabbitMQ.



<add name="messageBroker" connectionString="amqp://[MessageBroker username]:[Password] @[Address of the server where the service is deployed]/[Virtual server name]" />



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

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

Здравствуйте, пожалуйста помогите как можно отфильтровать схему Employee.

Надо вывести все Сотрудники которые являются Supervisor - ом?

Я пробовал с помощью filtrGroup но к сожалению у меня не получился. 

Нравится

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

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

 

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

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

Mira Dmitruk,

 

На карточке у меня есть два справочника Подразделение (SysAdminUnit) и Сотрудник (Employee). Когда из Подразделение выбираем значение например Administrator, справочник Сотрудник надо отфильтровать и отображалась все сотрудники которые являются Администратором.

 

В SQL Я сделал это:

 

select * from "Employee" c join "SysAdminUnit" s on

c."ContactId" = s."ContactId" join "SysAdminUnitInRole" sys on

sys."SysAdminUnitRoleId" = '4b513fa7-40e9-40e7-8fbb-085f90ea2423' and

sys."SysAdminUnitId" = s."Id"

 

Теперь надо всё это реализовать через атрибут и Terrasoft.filtrGroup но к сожалению не получился.

 

 

 

На карточке у меня есть два справочника Подразделение (SysAdminUnit) и Сотрудник (Employee). Когда из Подразделение выбираем значение например Administrator, справочник Сотрудник надо отфильтровать и отображалась все сотрудники которые являются Администратором.

 

В SQL Я сделал это:

 

select * from "Employee" c join "SysAdminUnit" s on

c."ContactId" = s."ContactId" join "SysAdminUnitInRole" sys on

sys."SysAdminUnitRoleId" = '4b513fa7-40e9-40e7-8fbb-085f90ea2423' and

sys."SysAdminUnitId" = s."Id"

 

Теперь надо всё это реализовать через атрибут и Terrasoft.filtrGroup но к сожалению не получился.

Добрый день.

 

Я реализовывала подобную функциональность следующим образом (в моем примере фильтруются данные из таблицы Contact):

attributes: {
	"Responsible": {
		"dataValueType": Terrasoft.DataValueType.LOOKUP,
		"lookupListConfig": {
			"filter": function() {
				return this.responsibleManagersFilters();
			}
		}
	}
}
methods: {
	responsibleManagersFilters: function() {
		var filterGroup1 = new Terrasoft.createFilterGroup();
		filterGroup1.add("Account", Terrasoft.createColumnFilterWithParameter(
			Terrasoft.ComparisonType.EQUAL,
			"Account",
			EWBConfigurationConstants.Accounts.AccountId.EastWestBiopharma));
		var filterGroup2 = new Terrasoft.createFilterGroup();
		filterGroup2.logicalOperation = Terrasoft.LogicalOperatorType.OR;
		filterGroup2.add("EmployeeDatabaseAndPathologist", Terrasoft.createColumnInFilterWithParameters(
			"Department",
			[EWBConfigurationConstants.Contacts.Department.Database,
			 EWBConfigurationConstants.Contacts.Department.Pathologists]));
		filterGroup2.add("ExistsInSysRole", Terrasoft.createColumnFilterWithParameter(
			Terrasoft.ComparisonType.EQUAL,
			"[SysAdminUnit:Contact].[SysUserInRole:SysUser].SysRole",
			EWBConfigurationConstants.Users.SysRole.ResponsibleForPatientInfo));
		filterGroup1.add(filterGroup2);
		return filterGroup1;
	}
}	

 

Alla Savelieva,

спасибо Вам, но Я не понял свойство

EWBConfigurationConstants. Откуда взяли?

Creatio,

 

В данном случае EWBConfigurationConstants не имеет значения, это всего лишь способ получить нужные данные.

В вашем случае вы можете использовать всё что нужно, от this.get("ColumnValue") до хардкода нужного значение "value"

Creatio,

Дима Вам выше уже ответил.

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

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

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

Схема: GridUtilitiesV2.js

Метод: getEditableGridRowViewModelClassName

        getEditableGridRowViewModelClassName: function(config) {

            if (!config) {

                return null;

            }

            let className = "Terrasoft.BaseConfigurationGridRowViewModel";

            const entitySchemaName = this.getGridEntitySchemaName();

            const entityStructure = Terrasoft.configuration.EntityStructure[entitySchemaName];

            const rawData = config.rawData;

            const typeColumn = this.getTypeColumn(entitySchemaName);

            let schemaName = null;

            let pages = [];

            if (entityStructure) {

                pages = entityStructure.pages;

            } else {

                pages.push({cardSchema: this.getDefaultConfigurationGridItemSchemaName()});

            }

            this.Terrasoft.each(pages, function(page) {

                if (typeColumn) {

                    const path = typeColumn.path;

                    if (rawData.hasOwnProperty(path)) {

                        const typeColumnValue = rawData[path].value;

                        if (page.UId === typeColumnValue) {

                            schemaName = page.cardSchema;

                        }

                    }

                } else {

                    schemaName = page.cardSchema;

                }

            }, this);

            if (schemaName) {

                className = "Terrasoft." + schemaName + "ConfigurationGridRow" + entitySchemaName + "ViewModel";

            }

            return className;

        },





Вот в этой строке

const entityStructure = Terrasoft.configuration.EntityStructure[entitySchemaName];

мы получаем такой результат:

 

  1. attribute: "ProductCategory"
  2. entitySchemaName: "FinApplication"
  3. entitySchemaUId: "cdda1304-e571-42de-9df7-6dfe528ea7b6"
  4. pages: [{…}]
  5. searchRowSchema: ""



    Свойства attribute быть не должно, но я не знаю как его убрать. Возможно кто-то может объяснить что оно значит и как с ним работать при вызове Terrasoft.configuration.EntityStructure[entitySchemaName];

Нравится

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

Добрый день,

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

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

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

Нравится

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

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



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

Malika,

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

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

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

Нравится

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

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

 

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

 

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

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

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

 

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

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

&lt;None Include="..\UnitTest\Integration.config"&gt;
 &lt;Link&gt;Integration.config&lt;/Link&gt;
 &lt;CopyToOutputDirectory&gt;Always&lt;/CopyToOutputDirectory&gt;
&lt;/None&gt;

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

&lt;connectionStrings&gt;
&lt;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" /&gt;
&lt;/connectionStrings&gt;

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

&lt;appSettings&gt;
    &lt;add key="ConfigurationRuntimeDirectory" value="_путь_к_папке_Terrasoft.WebApp" /&gt;
&lt;/appSettings&gt;

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

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

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&lt;Type&gt; GetRequiringInitializationSchemas() {
        EntitySchemaManager.AddCustomizedEntitySchema("Contact",
            new Dictionary&lt;string, string&gt; {
                { "Name", "MediumText"},
                { "Email", "MediumText"}
            });
        return new List&lt;Type&gt;();
    }
    [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&lt;string&gt;("Name"));
                }
            }
        }
    }
}

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

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

Oscar Dylan,

BaseConfigurationTestFixture с какого пространства имен? 

Подскажите подробнее про Integration.config

Какой name давать connectionStrings если работаем с Postgre?

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

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

Error while executing element Name = ScriptVwWorkspaceObjectsUpdated UId = 71be0708-dede-4ab1-b9d4-0df319348242 SchemaElementUId = 2bdc98ab-bf56-48ee-9ec3-e71d569a42eb	
"System.InvalidOperationException: Sequence contains more than one matching element
   at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
   at Terrasoft.Core.ClientContentGeneration.SchemaInfoComparer.<>c__DisplayClass15_0.<Compare>b__0(SchemaInfo newSchemaPublishInfo)
   at System.Threading.Tasks.Parallel.<>c__DisplayClass17_0`1.<ForWorker>b__1()
   at System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
   at System.Threading.Tasks.Task.<>c__DisplayClass176_0.<ExecuteSelfReplicating>b__0(Object <p0>)"

 

Нравится

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

Добрый день!

 

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

 

В случае если у вас возникнут трудности или же дополнительные проблемы, пожалуйста, создайте запрос обратившись на почту support@creatio.com.

Kyrylo Atamanenko,

Спасибо за комментарий.



Я проверил записи в таблице SysSchema, группировал по колонкам 

"ManagerName", "Caption" и "ManagerName", "Name", там правда есть дубли, но они присутствуют из-за замещения объектов и страниц. В моём пакете тоже присутствуют дубли при группировке по колонкам "ManagerName", "Caption", но при группировке по колонкам"ManagerName", "Name" дублей нету.  На данный момент не уверен что проблема связана с дублями в колонке "Caption", ибо в базовых пакетах такая же ситуация. 



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



Может быть я что-то упустил. Куда я могу ещё обратить внимание?

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

Доброго вечора! Скажіть, чи можна написати кастомну assembly (dll) для того щоб працювати з сховищем amazon s3?

Може хтось будь ласка розписати хоча б основні кроки?

Нравится

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

Доброго дня!



Теоретично це можно зробити. Для цього вам потрібно імпортувати бібліотеку (dll) в пакет через Конфігурацію.

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

в бизнес процесс надо добавить скрипт таск, в него написать код например



 

var value = Get&lt;Guid&gt;("Field1");
var con = Get&lt;UserConnection&gt;("UserConnection");
 
var scenario = new YourClassFromAssembly();
scenario.ValueId = value;
scenario.Run(con);
 
return true;

 

так же надо не забыть добавить неймспейс класса в вкладке Методы бизнесс процесса.

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

Добрый день. Подскажите, пожалуйста, возможно ли средствами Creatio использовать формулу в дашборде "Показатель" на главной странице? Например, в представлении "Итоги" для определенного раздела это можно сделать при помощи дашборда "Список" и сводной таблице.

Нравится

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

Добрый день,

 

К сожалению, в дашборд "Показатель" нет возможности использовать формулу. 

 

Как альтернативное решение, в Classic UI есть возможность настроить сводную таблицу (дашборд - список) и вывести ее на главную страницу для пользователя.

 

Всего хорошего!

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

Може хтось будь ласка пояснити що прописано в цій колонці довідника "Хранилища содержимого файлов"

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

 Тут потрібно вказувати клас і namespace в якому він знаходиться?

Нравится

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

Доброго дня,



Надайте, будь ласка, більше деталей що саме ви маєте на увазі під "що прописано в цій колонці довідника". 

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

Доброго дня!

Підкажіть будь ласка як зробити кастомне сховище для файлів в creatio?

Я створив сховище по цьому гайду:

https://academy.terrasoft.ua/docs/7-18/developer/back_end_razrabotka/ap…

А спробував додати його в налаштуваннях системи в довідник "Хранилища содержимого файлов"

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

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

І після компіляції спробував закріпити файл до користувача:

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

Підкажіть будь ласка на якому етапі я допустив помилку?

Код для роботи з кастомним сховищем я спробував реалізувати в пакеті а не сторонній бібліотеці

Нравится

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

Добрий день,

 

Тут треба аналізувати логи і відлажувати написану логіку. По скріншоту помилки, яку ми бачимо на UI, це неможливо зробити. Можливо буде звал запиту UpoadFile у вкладці network в консолі браузера, там в response може бути повний стек виклику серверної логіки, який призвів до звалу. Якщо його немає - треба передивлятись логери додатку і шукати стек. По стеку шукати метод, який повернув цей звал, далі відладити в Visual studio.

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