define("UsrSchema042ca8fbDetail", ["ConfigurationEnums"], 

    function(configurationEnums) {

    return {

        entitySchemaName: "UsrCourierCertInOrder",

        details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,

        diff: /**SCHEMA_DIFF*/[

            {

                    /* Тип операции — слияние. */

                    "operation": "merge",

                    /* Название элемента схемы, над которым производится действие. */

                    "name": "DataGrid",

                    /* Объект, свойства которого будут объединены со свойствами элемента схемы. */

                    "values": {

                        "rowDataItemMarkerColumnName": "UsrDocumentLookup"

                    }

                },

                {

                    /* Тип операции — слияние. */

                    "operation": "merge",

                    /* Название элемента схемы, над которым производится действие. */

                    "name": "AddRecordButton",

                    /* Объект, свойства которого будут объединены со свойствами элемента схемы. */

                    "values": {

                        "visible": {"bindTo": "getToolsVisible"}

                    }

                }]/**SCHEMA_DIFF*/,

        methods: {

                                //Возвращает колонки, которые выбираются запросом.

                                getGridDataColumns: function() {

                                        return {

                                                "Id": {path: "Id"},

                                                "Document": {path: "UsrDocument"},

                                                "Document.Number": {path: "UsrDocument.Number"}

                                        };

                                },

                                //Конфигурирует и отображает модальное окно справочника.

                                openDocumentLookup: function() {

                                        //Конфигурационный объект

                                        var config = {

                                                // Название схемы объекта, записи которого будут отображены в справочнике.

                                                entitySchemaName: "UsrDocumentLookup",

                                                // Возможность множественного выбора.

                                                multiSelect: true,

                                                // Колонки, которые будут использованы в справочнике, например, для сортировки.

                                                columns: []

                                        };

                                        var OrderId = this.get("MasterRecordId");

                                        if (this.Ext.isEmpty(OrderId)) {

                                                return;

                                        }

                                        // Экземпляр класса [EntitySchemaQuery].

                                        var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {

                                                // Установка корневой схемы.

                                                rootSchemaName: this.entitySchemaName

                                        });

                                        // Добавление колонки [Id].

                                        esq.addColumn("Id");

                                        // Добавление колонки [Id] из схемы [Document].

                                        esq.addColumn("Document.Id", "DocumentId");

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

                                        esq.filters.add("filterOrder", this.Terrasoft.createColumnFilterWithParameter(

                                                this.Terrasoft.ComparisonType.EQUAL, "UsrOrder", OrderId));

                                        // Получение всей коллекции записей и отображение ее в модальном окне справочника.

                                        esq.getEntityCollection(function(result) {

                                                var existsDocumentsCollection = [];

                                                if (result.success) {

                                                        result.collection.each(function(item) {

                                                                existsDocumentsCollection.push(item.get("DocumentId"));

                                                        });

                                                }

                                                // Добавление фильтра в конфигурационный объект.

                                                if (existsDocumentsCollection.length > 0) {

                                                        var existsFilter = this.Terrasoft.createColumnInFilterWithParameters("Id",

                                                                existsDocumentsCollection);

                                                        existsFilter.comparisonType = this.Terrasoft.ComparisonType.NOT_EQUAL;

                                                        existsFilter.Name = "existsFilter";

                                                        config.filters = existsFilter;

                                                }

                                                // Вызов модального окна справочника

                                                this.openLookup(config, this.addCallBack, this);

                                        }, this);

                                },

                                // Обработчик события сохранения страницы редактирования.

                                onCardSaved: function() {

                                        this.openDocumentLookup();

                                },

                                //Открывает справочник документов в случае если страница редактирования заказа была ранее сохранена.

                                addRecord: function() {

                                        var masterCardState = this.sandbox.publish("GetCardState", null, [this.sandbox.id]);

                                        var isNewRecord = (masterCardState.state === configurationEnums.CardStateV2.ADD ||

                                        masterCardState.state === configurationEnums.CardStateV2.COPY);

                                        if (isNewRecord === true) {

                                                var args = {

                                                        isSilent: true,

                                                        messageTags: [this.sandbox.id]

                                                };

                                                this.sandbox.publish("SaveRecord", args, [this.sandbox.id]);

                                                return;

                                        }

                                        this.openDocumentLookup();

                                },

                                // Добавление выбранных продуктов.

                                addCallBack: function(args) {

                                        // Экземпляр класса пакетного запроса BatchQuery.

                                        var bq = this.Ext.create("Terrasoft.BatchQuery");

                                        var OrderId = this.get("MasterRecordId");

                                        // Коллекция выбранных в справочнике документов.

                                        this.selectedRows = args.selectedRows.getItems();

                                        // Коллекция, передаваемая в запрос.

                                        this.selectedItems = [];

                                        // Копирование необходимых данных.

                                        this.selectedRows.forEach(function(item) {

                                                item.OrderId = OrderId;

                                                item.DocumentId = item.value;

                                                bq.add(this.getDocumentInsertQuery(item));

                                                this.selectedItems.push(item.value);

                                        }, this);

                                        // Выполнение пакетного запроса, если он не пустой.

                                        if (bq.queries.length) {

                                                this.showBodyMask.call(this);

                                                bq.execute(this.onDocumentInsert, this);

                                        }

                                },

                                //Возвращает запрос на добавление текущего объекта.

                                getDocumentInsertQuery: function(item) {

                                        var insert = Ext.create("Terrasoft.InsertQuery", {

                                                rootSchemaName: this.entitySchemaName

                                        });

                                        insert.setParameterValue("UsrOrder", item.OrderId, this.Terrasoft.DataValueType.GUID);

                                        insert.setParameterValue("UsrDocument", item.DocumentId, this.Terrasoft.DataValueType.GUID);

                                        return insert;

                                },

                                //Метод, вызываемый при добавлении записей в реестр детали.

                                onDocumentInsert: function(response) {

                                        this.hideBodyMask.call(this);

                                        this.beforeLoadGridData();

                                        var filterCollection = [];

                                        response.queryResults.forEach(function(item) {

                                                filterCollection.push(item.id);

                                        });

                                        var esq = Ext.create("Terrasoft.EntitySchemaQuery", {

                                                rootSchemaName: this.entitySchemaName

                                        });

                                        this.initQueryColumns(esq);

                                        esq.filters.add("recordId", Terrasoft.createColumnInFilterWithParameters("Id", filterCollection));

                                        esq.getEntityCollection(function(response) {

                                                this.afterLoadGridData();

                                                if (response.success) {

                                                        var responseCollection = response.collection;

                                                        this.prepareResponseCollection(responseCollection);

                                                        this.getGridData().loadAll(responseCollection);

                                                }

                                        }, this);

                                },    

                                // Метод, вызываемый при удалении выбранных записей детали.

                                deleteRecords: function() {

                                        var selectedRows = this.getSelectedItems();

                                        if (selectedRows.length > 0) {

                                                this.set("SelectedRows", selectedRows);

                                                this.callParent(arguments);

                                        }

                                },

                                // Скрыть пункт меню [Копировать].

                                getCopyRecordMenuItem: Terrasoft.emptyFn,

                                 // Скрыть пункт меню [Изменить].

                                getEditRecordMenuItem: Terrasoft.emptyFn,

                                // Возвращает имя колонки по умолчанию для фильтра.

                                getFilterDefaultColumnName: function() {

                                        return "UsrDocument";

                                }

                        },

            

    };

});

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

 

 

 

Нравится

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

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

Сложно сказать причину такого поведения смотря только на код.

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

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

Добрый день,

Подскажите, пожалуйста, где можно добавить новое поле на данную форму. Форма открывается, если в action dashboard нажать на кнопку "Complete" на активности.

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

Нравится

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

Ищите пример в ActivityMiniPage (UIv2).

Вам нужно будет кодом добавить элемент в родительский контейнер ResultsContainer и в ResultInfoContainer. Или вообще сделать свой контейнер (или или элемент), настроить "видимость" через bindTo на метод isEditableResultsVisible

 

Пример элемента:

{

                "operation": "insert",

                "parentName": "ResultsContainer",

                "propertyName": "items",

                "name": "ProcessResult",

.........

 

если это справочник с "выпадающим списком", то нужно повторять свою логику, как методах onPrepareProcessResultList и ProcessResultList.

 

или вот еще пример элемента  

  

 {

                "operation": "insert",

                "parentName": "MiniPage",

                "propertyName": "items",

                "name": "DetailedResult",

........

 

В принципе можно добавить элемент через мастер, а потом в коде прописать видимость. 

"visible": {  "bindTo": "isEditableResultsVisible" // или какой-то другой метод.

 

Само поле добавлял через мастер редактирования раздела, а потом в созданной схеме руками дописывал в секции values для созданного поля значения :

"wrapClass": ["container-mini-wrap"],
"controlWrapConfig": {
	"classes": {
		"wrapClassName": ["control-mini-wrap"]
	}
},

 

Ищите пример в ActivityMiniPage (UIv2).

Вам нужно будет кодом добавить элемент в родительский контейнер ResultsContainer и в ResultInfoContainer. Или вообще сделать свой контейнер (или или элемент), настроить "видимость" через bindTo на метод isEditableResultsVisible

 

Пример элемента:

{

                "operation": "insert",

                "parentName": "ResultsContainer",

                "propertyName": "items",

                "name": "ProcessResult",

.........

 

если это справочник с "выпадающим списком", то нужно повторять свою логику, как методах onPrepareProcessResultList и ProcessResultList.

 

или вот еще пример элемента  

  

 {

                "operation": "insert",

                "parentName": "MiniPage",

                "propertyName": "items",

                "name": "DetailedResult",

........

 

В принципе можно добавить элемент через мастер, а потом в коде прописать видимость. 

"visible": {  "bindTo": "isEditableResultsVisible" // или какой-то другой метод.

 

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

Есть замещённая страница VisaNotificationsSchema. В ней нужно получить данные об объекте, который указан в нотификации(например Case). Пока моя идея в том, чтобы как-то получить id этого объекта, а потом через ESQ достать все нужные мне данные об этом объекте.



Вопрос в том, как получить этот id ?

this.get("Id")

даёт именно Id визы, а не объекта, на который идёт ссылка.



Видел ещё в VisaNotificationsSchema функцию getVisaEntity: function(callback), но как из неё достать Id тоже не разобрался.

Нравится

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

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

 

Заменили Timer на Thread.Sleep. На средах разработки и тестирования всё прошло хорошо, но у клиента на средах и Sleep зависает, оставляя процессы в состоянии Running навсегда.



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



Спасибо!

Нравится

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

Добрый день, Владимир.

Вероятнее всего дело все же в большой нагрузке на планировщик Quartz.

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

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

Детальнее об этом описано в статье на академии по настройке планировщика.

https://academy.terrasoft.ru/docs/developer/komponenty_prilozheniya/pla…

Добрый день, Владимир.

Вероятнее всего дело все же в большой нагрузке на планировщик Quartz.

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

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

Детальнее об этом описано в статье на академии по настройке планировщика.

https://academy.terrasoft.ru/docs/developer/komponenty_prilozheniya/pla…

Зубов Максим,

Очень хотелось бы от них отказаться, но для workaround'а другого бага, приходится ввести задержку в процессе, чтобы данные успели появиться.



А подскажите, как перезапустить Quartz, если в Process log уже есть висящие на таймере процессы?

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

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

 

Подскажите в какую сторону смотреть?

 

define("ClientUnit_8926375", [], function() {

    return {

        entitySchemaName: "",

        attributes: {},

        modules: /**SCHEMA_MODULES*/{

            "Chart91fd6d56-8c0e-438d-90d1-dbd7e159c555": {

                "moduleId": "Chart91fd6d56-8c0e-438d-90d1-dbd7e159c555",

                "moduleName": "CardWidgetModule",

                "config": {

                    "parameters": {

                        "viewModelConfig": {

                            "widgetKey": "Chart91fd6d56-8c0e-438d-90d1-dbd7e159c555",

                            "recordId": "b420b58a-9774-4f1a-86df-e118903c50ed",

                            "primaryColumnValue": {

                                "getValueMethod": "getPrimaryColumnValue"

                            }

                        }

                    }

                }

            },

Нравится

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

Алексей, здраствуйте!

Изменить фильтр виджета на странице редактирования не получиться, запрос строится через метод createSelect в BaseWidgetViewModel коллекцию фильтров получаем с таблицы SysWidgetDashboard (SysWidgetDashboardLcz).

Однако вы можете фильтровать результат виджета относительно записи, в которой вы находитесь, через заполнение параметра "Как связать с разделом" в настройках итога.

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

Добрый день, 

Подскажите, пожалуйста, возможно ли скрыть кнопки Reject, Change approver для определенного объекта и как это сделать? 

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

Нравится

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

Это возможно, для реализации можно создать замещающую схему VisaNotificationsSchema со следующим содержимым:

 

define("VisaNotificationsSchema", function() {
   return {
      methods: {

         getVisaActionButtonMenu: function() {
            const menu = this.get("VisaActionButtonMenu");
            if (menu.getCount() > 3) {
               menu.removeByIndex(1);
               menu.removeByIndex(1);
               menu.removeByIndex(1);
            }
            return menu;
         }
      },
      diff: [
         {
            "operation": "merge",
            "name": "VisaActionButton",
            "parentName": "NotificationItemTopContainer",
            "propertyName": "items",
            "values": {
               "itemType": Terrasoft.ViewItemType.BUTTON,
               "style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
               "classes": {"wrapperClass": ["visaActionButtonWrap-class"]},
               "caption": {"bindTo": "Resources.Strings.VisaActionButton"},
               "prepareMenu": {"bindTo": "selectNotificationItemOnActionButtonClick"},
               "menu": {
                  "items": {"bindTo": "getVisaActionButtonMenu"}
               }
            }
         }
      ]
   };
});

Олег Нефедьев,

 

спасибо, будем пробовать!

Олег Нефедьев,

 

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

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

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



 message: Uncaught Terrasoft.ItemNotFoundException: Item with key  Does not exist 



Нет никакого Id, что искать.

Пробовали очистить всю схему страницы, но не помогло. Видимо, проблема где-то в регистрированных данных



Как с этой ситуацией справится?

Нравится

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

Здравствуйте, Владимир!



Попробуйте добавить пустой модуль, сохранить его и удалить. Это перегенерирует бандлы и решит ошибку.

Станислав Чернышев,

уточню:



добавил новый раздел, но ошибка осталась. Или я не так понял?

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

 

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







Тоже попробовал - тоже без результата. К тому же, насколько я понимаю, компиляция всего тоже перегенерирует статический контент?



Может, его можно удалить как-то на сервере?

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

Добрый день,

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

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

Нравится

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

Подскажите, каким образом реализовано визирование в бизнес-процессе, с помощью элемента "Визирование", или с помощью добавления новой записи объекта визы?

 

Есть ли при открытии коммуникационной панели какие-либо ошибки в консоли браузера (F12)?

Олег Нефедьев,

Визирование реализовано с помощью элемента "Визирование". В консоли какие-то ошибки есть.

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

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

Установлена библиотека Aspose.Word. При ее использовании для конвертации Печатных форм из word в pdf исчезают картинки. Кто-нибудь сталкивался с таким? Есть идеи, в чем может быть проблема?

Нравится

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

Добрый день, Наталия!

 

Подскажите, пожалуйста, Вы используете маркетплейс дополнение https://marketplace.terrasoft.ru/app/asposepdf-connector-creatio для формирования печатных форм в формате PDF?

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

На среде разработки без ошибок генерируется отчет Fast report. Но после переноса пакета на другие среды, там в логах видим ошибку:



ERROR NT AUTHORITY\SYSTEM Terrasoft.Web.Common.ServiceModel.ErrorHandler HandleError - Internal Server Error

System.ServiceModel.Web.WebFaultException`1[Terrasoft.Configuration.Reporting.FastReport.FastReportGenerationException]: Internal Server Error (Fault Detail is equal to Terrasoft.Configuration.Reporting.FastReport.FastReportGenerationException: Error during report generation).

2022-01-30 22:18:10,085 [71] ERROR NT AUTHORITY\SYSTEM Terrasoft.Nui.ServiceModel.Extensions.QueryExtension AddQueryColumns - Terrasoft.Common.ItemNotFoundException: Collection item with name  UsrRequest.UsrGroup not found.

 

При этом UsrRequestнигде в отчёте не использоваться, а поля UsrGroup в UsrRequest никогда не существовало. В FastReportDataSource тоже нет упоминаний таких полей и объектов.

 

Естественно, пробовали чистить Redis, cache, перекомпилировать всё, пересохранять отчёт - без результатов. Другие отчёты генерируются корректно.

 

В чём может быть причина того, что Creatio пытается найти несуществующее поле в неиспользуемом объекте?

Нравится

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

Владимир, добрый день!

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

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