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

Создал новую деталь по инструкции.

https://academy.creatio.com/documents/technic-sdk/7-15/adding-attachments-detail#

 

Схемы:

Деталь:

Файл загружается в таблицу. После перезагрузки страницы содержимое на детали не показывает. Ошибка: 

Uncaught 1.       i {message: 'Значение аргумента "columnPath" не может быть пустым'}

Не пойму, что ещё нужно настроить?

Нравится

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

Добрый день,

 

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

Пожалуйста, сравните деталь в Мастере с базовой деталью:

 

 

Также хочу обратить внимание, что при добавлении детали в конкретный раздел, должна быть привязка по этому разделу. Например, для раздела Контакты, деталь будет называться Contact's attachment.

 

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

 

С уважением,

Глеб.

Gleb Tkach, Постараюсь поэтапно приложить.

Имеется такая же деталь файлы и ссылки на странице, которая работает. Назову так: 

"Файлы и ссылки33" - работает,

"Файлы и ссылки22" - не работает.

Деталь "Файлы и ссылки33" была создана ранее  не мной. Сравниваю с ней.

Схема страницы:

define("CasePage", [], function() {
               return {
                              entitySchemaName: "Case",
                              attributes: {},
                              modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/,
                              details: /**SCHEMA_DETAILS*/{
                                            "FileForCaseDetail6803fbd2": {
                                                           "schemaName": "FileForCaseDetail",
                                                           "entitySchemaName": "FileForCase",
                                                           "filter": {
                                                                          "detailColumn": "Case",
                                                                          "masterColumn": "Id"
                                                           }
                                            },
                                            "Schema44Detail284e7799": {
                                                           "schemaName": "Schema44Detail",
                                                           "entitySchemaName": "PrintServiceFile",
                                                           "filter": {
                                                                          "detailColumn": "Case",
                                                                          "masterColumn": "Id"
                                                           }
                                            }
                              }/**SCHEMA_DETAILS*/,
                              businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/,
                              methods: {},
                              dataModels: /**SCHEMA_DATA_MODELS*/{}/**SCHEMA_DATA_MODELS*/,
                              diff: /**SCHEMA_DIFF*/[
                                            {
                                                           "operation": "insert",
                                                           "name": "FileForCaseDetail6803fbd2",
                                                           "values": {
                                                                          "itemType": 2,
                                                                          "markerValue": "added-detail"
                                                           },
                                                           "parentName": "Tab548d2867TabLabel",
                                                           "propertyName": "items",
                                                           "index": 24
                                            },
                                            {
                                                           "operation": "insert",
                                                           "name": "Schema44Detail284e7799",
                                                           "values": {
                                                                          "itemType": 2,
                                                                          "markerValue": "added-detail"
                                                           },
                                                           "parentName": "Tab548d2867TabLabel",
                                                           "propertyName": "items",
                                                           "index": 25
                                            }
                              ]/**SCHEMA_DIFF*/
               };
});

Прикладываю файлы в деталь:

Обновляю страницу:

 

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

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

Нравится

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

Здравствуйте, Рустам. 

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

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

С уважением,
Богдан
 

Bogdan,

Да, непонятно сформулировал вопрос. Причины зависаний понятны, различные блокировки в БД. Вопрос в другом, эти висящие процессы, влияют ли на производительность системы? 

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

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

В рамках интеграции C#-приложения (.Net 5.0) с Creatio (7.15.4) пытаюсь настроить создание сущности "Обращение" ("Case") с помощью протокола OData 4 и через передачу параметров. Сущность создается ,но часть из переданных параметров игнорируется, хотя  GUID указан верный.

Пример POST запроса из Postman и ответа от сервиса (значение для CgrCommunicationTypeId установлено некорректное)

 

Возможно кто-то сталкивался с подобной проблемой и знает куда копать, буду благодарен за любую помощь. Поиск не помог :(

Нравится

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

Здравствуйте, попробуйте на уровне интерфейса или БД изменить/установить значение колонки.
Если выполнять запрос на обновление, то колонка изменит значение?

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

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

Нравится

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

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

 

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

Если мы меняем поля на странице местами или добавляем новые но по существующим в объекте колонкам - мы меняем схему и обновляем схему.

Если добавляем новые поля - мы меняем объект и схему.

 

Все логи приложения по умолчанию можно посмотреть по пути (путь [TEMP]\Creatio\Site_[{SiteId}]\[{ApplicationName}]\Log\) или проще (диск):\Windows\Temp\Creatio

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

Коллеги, доброго дня!
Эксплуатируем систему уже 5 лет, накопились бизнес-процессы, которые более пользователями не используются. Смотрю в сторону того, чтобы их удалить, дабы не смущать людей и новых разработчиков. Хотелось поинтересоваться у знающих и опытных, насколько целесообразны такие процедуры, какие есть подводные камни и неочевидные выгоды.

Нравится

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

и можно заодно узнать, как удалять старые версии процессов?

Владимир Соколов,

Старые версии бизнес процессов можно удалять через конфигурацию. Для того, чтобы понять, какую версию БП нужно удалить - необходимо знать Название версии БП (не заголовок). Его можно посмотреть в Дизайнере процессов, открыв данную версию. На вкладке "Настройки" в пол "Имя".

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

Доброго дня!

Установили 7.15.4, но после ввода логина-пароля на странице ничего не происходит, а консоль "краснеет". Сам файл /ServiceModel/AuthService.svc в папке есть .. Как это исправить, есть идеи?

 

Нравится

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

Добрый день.

 

Пройдитесь ещё раз по инструкции по разворачиванию приложения bpm'online on-site, возможно, требуется донастроить какой-то компонент либо же серверу приложений на что-то не хватает доступа.

Также посмотрите файлы логов, часто там можно найти информацию о непосредственной причине проблемы. Их можно найти на сервере в папке Temp/BPMOnline.

Разобрался, спасибо!

Не хватало модуля IIS "Авторизация по HTTP" и WCF

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

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

В папке Assemblies библы лежат, а вот по указанным путям - пустые файлы:

Итого порядок действий:
1. Загрузил библиотеки через конфигуратор

2. Выгрузил в файловую систему наработки

3. Мердж в гите

4. Залил девелоп на тестовый сервер через файловую систему

5. Компиляция

Нравится

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

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

 

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

Проверьте, что на веб-сервере установлены .NET Core SDK 3.1.301 и .NET Framework SDK v 4.7.2., а также Microsoft Visual C++ 2010.

 

Ссылки на скачивание есть в официальной документации:

https://academy.terrasoft.ru/docs/user/razvertyvanie_onsite/server_pril…

 

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

На форуме есть много разных примеров, но ни один из них не заработал на нашей версии. Нужно, чтобы деталь представляла собой таблицу, колонки которой - это колонки объекта, к которому привязана деталь, а каждая строка - это объекты, связанные через деталь с редактируемой страницей (допустим, деталь счета на странице контактов, где каждая строка - это счет текущего контакта). Нужно, чтобы при нажатии на плюс возле названия детали, добавлялась строка, которую пользователь может заполнить. Сейчас при нажатии плюса открывается страница редактирования детали, а нужно, чтобы деталь редактировалась напрямую в Grid'e. 
Financial Services, v7.15

Нравится

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

опишите то как вы добавляете от создания объекта до создания детали, включая примеры кода

Dima Avdoshin,

Я создал объект, привязал его к детали, добавил деталь на страницу. В схему детали добавил следующий код:

define("Schema5Detail", ["ConfigurationGrid", "ConfigurationGridGenerator", "ConfigurationGridUtilities"], function() {
	return {
		entitySchemaName: "BankAccount",
		attributes: {
            "IsEditable": {
                dataValueType: Terrasoft.DataValueType.BOOLEAN,
                type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
                value: true
            }
        },
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[
            {
                "operation": "merge",
                "name": "DataGrid",
                "values": {
                    "className": "Terrasoft.ConfigurationGrid",
                    "generator": "ConfigurationGridGenerator.generatePartial",
                    "generateControlsConfig": { "bindTo": "generatActiveRowControlsConfig" },
                    "changeRow": { "bindTo": "changeRow" },
                    "unSelectRow": { "bindTo": "unSelectRow" },
                    "onGridClick": { "bindTo": "onGridClick" },
                    "activeRowActions": [
                        {
                            "className": "Terrasoft.Button",
                            "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                            "tag": "save",
                            "markerValue": "save",
                            "imageConfig": { "bindTo": "Resources.Images.SaveIcon" }
                        },
                        {
                            "className": "Terrasoft.Button",
                            "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                            "tag": "cancel",
                            "markerValue": "cancel",
                            "imageConfig": { "bindTo": "Resources.Images.CancelIcon" }
                        },
                        // {
                        //     "className": "Terrasoft.Button",
                        //     "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                        //     "tag": "remove",
                        //     "markerValue": "remove",
                        //     "imageConfig": { "bindTo": "Resources.Images.RemoveIcon" }
                        // },
                        {
                            "className": "Terrasoft.Button", // последняя кнопка в коде
                            "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                            "tag": "card",
                            "markerValue": "card",
                            "imageConfig": { "bindTo": "Resources.Images.RemoveIcon" }
                        },
                    ],
                    "initActiveRowKeyMap": { "bindTo": "initActiveRowKeyMap" },
                    "activeRowAction": { "bindTo": "onActiveRowAction" },
                    "multiSelect": false
                }
            }
        ]/**SCHEMA_DIFF*/,
		methods: {},
		mixins: {
			ConfigurationGridUtilites: "Terrasoft.ConfigurationGridUtilities"
		}
	};
});

Но я не знаю, как определить, какие именно значения отобразить в гриде. Объект довольно большой, я хочу отобразить только необходимые поля с возможностью отображения карточки по нажатию на последнюю кнопку в коде. Не заполнив в реестре все необходимые поля, нельзя открыть карточку. Или я могу как-то сыгнорировать эту проверку?

Возьмите прекрасное дополнение с Marketplace и используйте готовые шаблоны https://marketplace.terrasoft.ru/template/templates-developing-custom-d…

Владимир Соколов,

большое спасибо, но, увы, это дополнение поддерживается только начиная с 7.16, а у меня установлена 7.15.
Нельзя как-то в коде настроить, в каком порядке отображать колонки объекта на гриде?

Гусейн Гулиев,

Вам проще будет обновиться до новой версии :-)

Гусейн Гулиев пишет:
это дополнение поддерживается только начиная с 7.16, а у меня установлена 7.15.

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

Ну, и даже с этим дополнением иногда нужно перекомпилировать и очистить Redis, чтобы заработало, как надо

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

Добрый день.

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

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

Добрый день!

Есть объект "Заявка", в нём поле "Анкета", мне нужно на страницу редактирования раздела заявки (вроде так называется, наследуется от BaseModulePageV2 ( NUI )) вывести поля анкеты.

Что я сделал: добавил в код страницы редактирования заявки и раздела заявки кусок:

dataModels: /**SCHEMA_DATA_MODELS*/{
                "AppQ": {
                    "entitySchemaName": "ApplicationQuestionnaire",
                    "primaryColumnValue": {
                        "bindTo": "ApplicationQuestionnaire"
                    }
                }
            }/**SCHEMA_DATA_MODELS*/,

 

В diff'е страницы редактирования заявки прописал несколько полей по типу:

{
                    "operation": "insert",
                    "name": "TscAppFilingMethod",
                    "values": {
                        "bindTo": "AppQ.AppFilingMethod",
                        "layout": {
                            "column": 0,
                            "row": 0,
                            "colSpan": 12,
                            "rowSpan": 1
                        },
                        "enabled": false
                    },
                    "parentName": "AppQInfoGroupGridLayout",
                    "propertyName": "items"
                }

Дальше происходит следующее:

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

Когда поля не отображаются в консоль выводится следующее сообщение:

Заголовок для подписи "AppFilingMethod" не был найден.
Невозможно найти колонку по конфигурации: "{"bindTo":"AppQ.AppFilingMethod","layout":{"colSpan":12,"rowSpan":1,"column":0,"row":0},"enabled":false,"name":"AppFilingMethod"}" .

Отображаются эти ошибки как на странице раздела, так и на странице редактирования.

Нужно как-то проинициализировать AppQ на странице раздела или я не прав? Подскажите, пожалуйста. 

Использовать запросы и выводить виртуальные поля очень не хочется.

Нравится

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

eduard-t,

Добрый день.

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

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

1.    Добавляем виртуальный атрибут нужного типа в секцию атрибутов:
attributes: {

    "AlternativeMobilePhone": {
        dataValueType: this.Terrasoft.DataValueType.TEXT,
        type: this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
        caption: "Alternative mobile phone",
        value: null
    },
            
2.    Выводим его на странице в секции дифов:

{
    "operation": "insert",
    "name": "AlternativeMobilePhone",
    "values": {
        "layout": {
            "colSpan": 12,
            "rowSpan": 1,
            "column": 0,
            "row": 2,
            "layoutName": "ContactTab"
        },
        "bindTo": "AlternativeMobilePhone"
    },
    "parentName": "ContactTab",
    "propertyName": "items",
    "index": 4
},
            
3.    Пишем функцию получения нужных данных и установки в вируальные атрибуты\атрибут:

getContactInfo: function() {
    var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
        rootSchemaName: "Contact"
    });

    esq.addColumn("Phone");

    esq.filters.add("ContactFilter", this.Terrasoft.createColumnFilterWithParameter(
        this.Terrasoft.ComparisonType.EQUAL, "Id", this.get("Contact").value));
    esq.getEntityCollection(function(result) {
        if (result.success) {
            var collection = result.collection;
            if (collection && collection.collection.items.length > 0) {
                var item = collection.collection.items[0];

                this.set("AlternativeMobilePhone", item.get("Phone"));

            }
        }
    }.bind(this));
},
            
4.    При инициализации карточки вызываем этот метод:

onEntityInitialized: function() {
    this.callParent(arguments);
    this.getContactInfo();
},

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

"AnyName": {
    "value": false,
    "dataValueType": Terrasoft.DataValueType.BOOLEAN,
    "type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
    "dependencies": [
        {
            "columns": ["Contact"],
            "methodName": "getContactInfo"
        }
    ]
},

Добрый день. 

Попробуйте добавить в values свойство caption и указать конкретное название:
"layout": {
                            "column": 0,
                            "row": 0,
                            "colSpan": 12,
                            "rowSpan": 1,

                           "caption":"MyCaption"
                        }

После этого ошибка должна уйти. Или же проверьте есть ли заголовок данной колонки в объекте. 

Mykhailo Storozhuk,

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

Если указать, как вы написали, то получаю просто надпись заголовка без значения:

Обновляю страницу, и всё подтягивается:

Как сделать, чтобы подтягивалось без обновления страницы?

eduard-t,

Добрый день.

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

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

1.    Добавляем виртуальный атрибут нужного типа в секцию атрибутов:
attributes: {

    "AlternativeMobilePhone": {
        dataValueType: this.Terrasoft.DataValueType.TEXT,
        type: this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
        caption: "Alternative mobile phone",
        value: null
    },
            
2.    Выводим его на странице в секции дифов:

{
    "operation": "insert",
    "name": "AlternativeMobilePhone",
    "values": {
        "layout": {
            "colSpan": 12,
            "rowSpan": 1,
            "column": 0,
            "row": 2,
            "layoutName": "ContactTab"
        },
        "bindTo": "AlternativeMobilePhone"
    },
    "parentName": "ContactTab",
    "propertyName": "items",
    "index": 4
},
            
3.    Пишем функцию получения нужных данных и установки в вируальные атрибуты\атрибут:

getContactInfo: function() {
    var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
        rootSchemaName: "Contact"
    });

    esq.addColumn("Phone");

    esq.filters.add("ContactFilter", this.Terrasoft.createColumnFilterWithParameter(
        this.Terrasoft.ComparisonType.EQUAL, "Id", this.get("Contact").value));
    esq.getEntityCollection(function(result) {
        if (result.success) {
            var collection = result.collection;
            if (collection && collection.collection.items.length > 0) {
                var item = collection.collection.items[0];

                this.set("AlternativeMobilePhone", item.get("Phone"));

            }
        }
    }.bind(this));
},
            
4.    При инициализации карточки вызываем этот метод:

onEntityInitialized: function() {
    this.callParent(arguments);
    this.getContactInfo();
},

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

"AnyName": {
    "value": false,
    "dataValueType": Terrasoft.DataValueType.BOOLEAN,
    "type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
    "dependencies": [
        {
            "columns": ["Contact"],
            "methodName": "getContactInfo"
        }
    ]
},

Mykhailo Storozhuk,

Большое спасибо! Не знал про существование ProfileSchema, это как раз то, что нужно.

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

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

 

Есть задача: Сразу после авторизации пользователя выводить ему системное сообщение с текстом (Текст каждый раз может меняться, своего рода оповещение пользователя о возможном обновлении системы, недоступности или любом другом объявлении).

Полагаю, что можно сделать системную настройку с полем "Текст сообщения" и логическим полем "Выводить сообщение". И когда поле "Выводить сообщение" true, выводить "Текст сообщения" пользователю после авторизации.
Подскажите пожалуйста, в какую часть кода вставлять эту проверку? Где найти этот момент после авторизации? Может навесить на нажатие кнопки "Войти"?

 

Заранее благодарю!

Нравится

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

Артур, добрый день!
 

Вот пример, нужно только создать сис. настройки:

1. Схема UsrBaseViewModule:

 define("UsrBaseViewModule", [], function() {
    Ext.define("Terrasoft.configuration.UsrBaseViewModule", {
        override: "Terrasoft.configuration.BaseViewModule",
        alternateClassName: "Terrasoft.UsrBaseViewModule",
        
        initHomePage: function(callback, scope) {
            this.callParent(arguments);
            this.showStartMessage(scope);
        },
        
        showStartMessage: function(scope) {
            Terrasoft.SysSettings.querySysSetting(["IsShowIntroMessage", "IntroMessageText"], function(result) {
                if (result && result.IsShowIntroMessage) {
                    if (result.IntroMessageText) {
                        Terrasoft.showMessage(result.IntroMessageText);
                    }
                }
            }, scope);
        }
    });
    return Terrasoft.UsrBaseViewModule;
});
 

2. Схема BootstrapModulesV2 (нужна для загрузки первой):

define("BootstrapModulesV2", ["UsrBaseViewModule"], function() {
    return {};
});

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

Они оба замещающие объекты или нет?

Артур, только вторая схема замещена, первая создаётся как новый модуль.

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