Доброго времени суток.



На странице обращений располагается грид - http://joxi.ru/LmGg9DxUJdJ1dm

В отображении грида была проставлена галочка в фильтре-флаге "Отображать закрытое".

При редактировании дашбордов секции (были добавлены две цифры 5 в конце) http://joxi.ru/LmGg9DxUJdJzdm и последующем сохранении



Случается следующее:



При переключении на отображение грида данные из колонок будто бы "пропадают" - http://joxi.ru/zANMzV8F6O6Ln2



Данная проблема наблюдается только при включенном флаге "Отображать закрытые".



В консоли разработчика никаких ошибок не наблюдается, запросы уходят корректно. 

Алгоритм действий при отключенном флаге-фильтре корректно отрабатывает.



Кто-нибудь сталкивался с подобным? Является ли это ошибкой\недоработкой в базовом коде клиентского модуля Creatio?

Нравится

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

Отправили запрос в тех. поддержку - назвали багом, в итоге получили фикс. Фикс вошел в состав 7.16.1

Отправили запрос в тех. поддержку - назвали багом, в итоге получили фикс. Фикс вошел в состав 7.16.1

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

Добрый день!

На кастомной странице редактирования в БП разместил обычную деталь с карточкой редактирования (наследует от Базовая схема детали с реестром). На onRender карточки повесил метод updateDetails(). Однако при добавлении записи в деталь обновления не происходит. Добавленная запись отображается в гриде только после настройки колонок. Подскажите, пожалуйста, как решить проблему обновления грида детали.

Нравится

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

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

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

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

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

subscriber пробовали повесить?

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

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

Пробовал, не попадает в отладчике в метод, указанный в subscriber.

Вот код добавления детали, методы filterMethod и subscriber. Подскажите пожалуйста, возможно, есть идеи что не так. 

"DepositInFinApplicationDetail": {
	"schemaName": "snGoldDepositDetail",
	"filter": {
		"masterColumn": "Id",
		"detailColumn": "Id"
	},
	"filterMethod": "goldDetailFilter",
	"subscriber": {
		"methodName": "updateGoldDetail"
	}
},
 
goldDetailFilter: function() {
	var finApplication =  this.get("Id");
	var goldType = ""
	var filterGroup = new this.Terrasoft.createFilterGroup();
	filterGroup.logicalOperation = this.Terrasoft.LogicalOperatorType.AND;
	filterGroup.add("DepositFilter", this.Terrasoft.createColumnFilterWithParameter(
			this.Terrasoft.ComparisonType.EQUAL, "[snDepositInFinApplication:Deposit:Id].FinApplication.Id", finApplication));
	filterGroup.add("DepositTypeFilter", this.Terrasoft.createColumnFilterWithParameter(
			this.Terrasoft.ComparisonType.EQUAL, "[snDepositInFinApplication:Deposit:Id].Deposit.Type.Id", this.goldTypeId));
	return filterGroup;
},
 
	updateGoldDetail: function() {
				var detailId = this.getDetailId("DepositInFinApplicationDetail");
				this.sandbox.publish("UpdateDetail", {
					reloadAll: true
				}, [detailId]);
	},

 

Может, вообще убрать дополнительный код, оставить только стандартную логику. В обычных разделах всё ведь работает.

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

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

Бизнес-логику можно реализовать и на уровне объекта, серверной логикой.

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

Добрый день.

Проблема с обновлением грида детали после добавления элемента в деталь. Элемент не появляется в гриде сразу после выбора.

1. Выбор элементов в детали реализован с помощью LookupUtilities:

        var lookupConfig = {
                entitySchemaName: "BankingService",
                columnName: "Name",
                columns: ["ClientType"],
                multiSelect: true,
                filters: filters
        };
           
        LookupUtilities.ThrowOpenLookupMessage(
            sandbox,
            lookupConfig,
            this.addBankingServiceItemsCallback,
            this,
            this.getCardModuleSandboxId()
        );

2. Собственно callback-функция для обработки выбора пользователя:

                this.methods.addBankingServiceItemsCallback = function(args) {
                        if (!args || args.selectedRows.getCount() === 0) {
                                return;
                        }
                       
                        var selectedIds = args.selectedRows.getKeys();
                        var synchronizedRule = this.filterValue;
                        var batchQuery = Ext.create('Terrasoft.BatchQuery');
                        Terrasoft.each(selectedIds, function(item) {
                                var insert = Ext.create('Terrasoft.InsertQuery', {
                                        rootSchemaName: this.entitySchema.name
                                });
                                var newGuid = Terrasoft.generateGUID();
                                insert.setParameterValue(
                                        'Id',
                                        newGuid,
                                        Terrasoft.DataValueType.GUID
                                );
                                insert.setParameterValue(
                                        'BankingService',
                                        item,
                                        Terrasoft.DataValueType.GUID
                                );
                                insert.setParameterValue(
                                        'SynchronizedRule',
                                        synchronizedRule,
                                        Terrasoft.DataValueType.GUID
                                );
                                batchQuery.add(insert);
                        }, this);
                        batchQuery.execute();
                        sandbox.publish('DetailChanged', {detailName: this.entitySchema.name}, [this.getSenderSandboxId()]);
                };

3. Обработчик события DetailChanged на странице редактирования объекта с деталью:

                this.methods.detailChangedSubscriber = function(args) {
                        viewModel.reloadDetail(args.detailName + 'Detail');
                };

Однако, после нажатия кнопки "Выбрать", выбранные записи в гриде детали не отображаются. Если нажать "Сохранить" на странице редактирования объекта и потом открыть заново этот объект для редактирования, то в детали выбранные записи видны.

Как обновить грид детали, чтобы выбранные элементы отображались непосредственно после выбора?

Заранее благодарен за помощь!

Нравится

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

Добрый день Артем!!!

уточните пожалуйста версию и конфигурацию BPMOnline. Спасибо!!!

"Власов Михаил Викторович" написал:

Добрый день Артем!!!

уточните пожалуйста версию и конфигурацию BPMOnline. Спасибо!!!

Михаил, версия 7.2; конфигурация вроде "lending"

Здравствуйте, я не воссоздавал на тестовом примере batchQuery, это не суть вопроса, сразу менял данные детали в базе данных, через sql management studio. Самое главное здесь в вашем вопросе, это вызов «viewModel.reloadDetail(args.detailName + 'Detail');»

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

Во-вторых, почему viewModel? Данный метод же есть прямо в главном скоупе страницы. Я закешировал для теста скоуп страницы в инит методе:

structure.userCode = function() {
   this.methods.init = function() {
      document.scp = this;
   };
};

И вот видно наш метод для обновления детали:

Во вторых, имя, передаваемое как аргумент должно соответствовать именно «name» свойству детали, а не «schemaName». Вот, к примеру, деталь опыта работы контакта:

И вот такой её вызов, отлично обновляет содержимое грида:

document.scp.reloadDetail("contactCareer");

где «document.scp» по сути this скоуп страницы контакта.

Вывод: Отладьте метод, проверьте имена.

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

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

Окошко с гридом вызываю по нажатию на кнопку следующим образом:

function btnSerialsOnClick(Control) {
        var SerialsWindow = Services.GetNewItemByUSI('wnd_SerialsGridArea');
        SetAttribute(SerialsWindow, 'DatasetUSI', 'ds_Serials');
        SetAttribute(SerialsWindow, 'EditWindowUSI', 'wnd_SerialEdit');        
        SerialsWindow.Prepare();
        SerialsWindow.Show();
}

Нравится

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

В вызываемое окошко на событие OnPrepare повесить открытие того датасета, который там назначен для грида. Так, например - dlData.Dataset.Open();

ООО "Лайнсервис"
www.ls-crm.ru

спасибо большое, в точку)

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