Добрый день!



Хочу отобразить коллекцию в деталь, без сохранения в бд.

Есть коллекция Collection состоящая из полей из разных обьектов, мне удалось ее заполнить данными, но столкнулся с проблемой при заполнении через this.getGridData(), который переопределил, при вызове деталь не заполняется данными.



entitySchemaName: "AllParentImplementationsByService" - обьект с проставленным Поведение->виртуальный, думал это поможет но нет



Как корректно сделать вставку этой коллекции в GridData детали?



Предоставляю мою схему детали :

define("AllParentImplementationsByService_Detail", [
	"ConfigurationGrid",
	"ConfigurationGridGenerator",
	"ConfigurationGridUtilities",
	"ProcessModuleUtilities"
],
	function (
		ProcessModuleUtilities
	) {
		return {
			entitySchemaName: "AllParentImplementationsByService",
			modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/,
			dataModels: /**SCHEMA_DATA_MODELS*/{}/**SCHEMA_DATA_MODELS*/,
			mixins: {
				ConfigurationGridUtilites: "Terrasoft.ConfigurationGridUtilities",           	
			},
			businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/,
			attributes: {
				IsGridEmpty: {
					dataValueType: this.Terrasoft.DataValueType.BOOLEAN,
					value: true
				},
				/**
				* Grid data collection.
				* @type {Terrasoft.BaseViewModelCollection}
				*/
				Collection: {
					dataValueType: Terrasoft.DataValueType.COLLECTION,
					value: this.Ext.create("Terrasoft.BaseViewModelCollection")
				},
				CaseId: {
					dataValueType: Terrasoft.DataValueType.GUID,
					type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
					caption: "Id"
				},
				CaseNumber: {
					dataValueType: Terrasoft.DataValueType.TEXT,
					type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
					caption: "CaseNumber" // Номер
				},
				CaseSymptoms: {
					dataValueType: Terrasoft.DataValueType.TEXT,
					type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
					caption: "CaseSymptoms" //Описание
				},
				TcName: {
					dataValueType: Terrasoft.DataValueType.TEXT,
					type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
					caption: "TcName" // Тех.карта процесса
				},
				AccountAddress: {
					dataValueType: Terrasoft.DataValueType.TEXT,
					type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
					caption: "AccountAddress" // Адрес контрагента
				},
				CasereatedOn: {
					dataValueType: Terrasoft.DataValueType.DATE_TIME,
					type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
					caption: "CasereatedOn" // Дата регистраци
				}
			},
			messages: {},
			details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
			methods: {
				init: function () {
					this.callParent(arguments);
					this.callAllParentImplementationsByServiceProvisionService();
				},
 
				onEntityInitialized: function () {
					this.callParent(arguments);
				},
 
				callAllParentImplementationsByServiceProvisionService: function () {
					this.showBodyMask({
						caption: "callAllParentImplementationsByServiceProvisionService"
					});
					let config = this.getAllParentImplementationsByServiceProvisionServiceConfig();
					this.callService(config, this.allParentImplementationsByServiceProvisionServiceHandler, this);
				},
 
				getAllParentImplementationsByServiceProvisionServiceConfig: function () {
					return {
						serviceName: "AllParentImplementationsByServiceProvisionService",
						methodName: "GetAllParentImplementationsByServiceProvision",
						timeout: 300000,
						data: {
							Id: this.$MasterRecordId
						}
					};
				},
 
				allParentImplementationsByServiceProvisionServiceHandler: function (response) {
					this.hideBodyMask();
 
					var result = JSON.parse(response);
					var resultCollection = Ext.create("Terrasoft.BaseViewModelCollection");
 
					for (var i = 0; i < result.length; i++) {
						if (!result[i].ExeptionMsg) {
                          	const casereatedOnStr = result[i].CasereatedOn;
							const timestamp = parseInt(casereatedOnStr.substring(
                              casereatedOnStr.indexOf('(') + 1, casereatedOnStr.indexOf(')')));
							const date = new Date(timestamp);
							const options = { day: '2-digit', month: '2-digit', year: 'numeric', hour: '2-digit', minute:'2-digit' };
							const formattedDate = date.toLocaleString(options);	
 
							var resultViewModel = Ext.create("Terrasoft.BaseViewModel", {
								values: {
									"CaseId": result[i].CaseId,
									"Number": result[i].CaseNumber,
									"Symptoms": result[i].CaseSymptoms,
									"Name": result[i].TcName,
									"AccountAddress": result[i].AccountAddress,
									"CasereatedOn" : formattedDate
								}
							});
							resultCollection.add(resultViewModel);
						} else {
                          	const casereatedOnStr = result[i].CasereatedOn;
							const timestamp = parseInt(casereatedOnStr.substring(
                              casereatedOnStr.indexOf('(') + 1, casereatedOnStr.indexOf(')')));
							const date = new Date(timestamp);
							const options = { day: '2-digit', month: '2-digit', year: 'numeric', hour: '2-digit', minute:'2-digit' };
							const formattedDate = date.toLocaleString(options);
 
							var resultErrViewModel = Ext.create("Terrasoft.BaseViewModel", {
								values: {
									"CaseId": result[i].CaseId,
									"CaseNumber": result[i].CaseNumber,
									"CaseSymptoms": result[i].CaseSymptoms,
									"TcName": result[i].TcName,
									"AccountAddress": result[i].AccountAddress,
									"CasereatedOn": formattedDate,
									"ExeptionMsg": result[i].ExeptionMsg
								}
							});
							resultCollection.add(resultErrViewModel);
						}
					}
 
					this.set("IsGridEmpty", false);
					this.set("Collection", resultCollection);
					this.getGridData();
				},
 
				getGridData: function () {
					return this.get("Collection");
				},
 
				useVirtualRecord: function () {
					return true;
				},
				/**
				 * @inheritDoc BaseGridDetailV2#getCopyRecordMenuItem
				  * @override
				 */
				getCopyRecordMenuItem: this.Terrasoft.emptyFn,
 
				/**
				 * @inheritDoc BaseGridDetailV2#getEditRecordMenuItem
				 * @override
				 */
				getEditRecordMenuItem: this.Terrasoft.emptyFn,
 
				/**
				 * @inheritDoc BaseGridDetailV2#getDeleteRecordMenuItem
				 * @override
				 */
				getDeleteRecordMenuItem: Terrasoft.emptyFn,
 
				/**
				 * @inheritDoc BaseGridDetailV2#getAddRecordButtonVisible
				 * @override
				 */
				getAddRecordButtonVisible: function () {
					return false;
				},
 
				getAddTypedRecordButtonVisible: function () {
					return false;
				},
 
				getDetailCaption: function () {
					return this.get("Resources.Strings.AllParentImplementationsByServiceDetailLabel");
				}
			},
			diff: /**SCHEMA_DIFF*/[
				{
					"operation": "insert",
					"name": "Container",
					"parentName": "Header",
					"propertyName": "items",
					"values": {
						"itemType": this.Terrasoft.ViewItemType.CONTAINER,
						"layout": { "column": 0, "row": 0, "colSpan": 24 },
						"items": []
					}
				},
				{
					"operation": "merge",
					"name": "DataGrid",
					"parentName": "Container",
					"propertyName": "items",
					"values": {
                      	//"generator": "Terrasoft.GridGenerator.generateGrid",
						"itemType": this.Terrasoft.ViewItemType.GRID,
						"type": this.Terrasoft.GridType.LISTED,
						"collection": "Collection",
						"isEmpty": { "bindTo": "IsGridEmpty" },
                      	"captionsConfig": []						
					}
				},
				{
					operation: "insert",
					name: "InfoButton",
					parentName: "ActionButtonsContainer",
					propertyName: "items",
					values: {
						click: { bindTo: "callAllParentImplementationsByServiceProvisionService" },
						itemType: this.Terrasoft.ViewItemType.BUTTON,
						style: this.Terrasoft.controls.ButtonEnums.style.GREEN,
						hint: { bindTo: "showHint" },
						caption: "Test",
					},
				},
			]/**SCHEMA_DIFF*/
		};
	});

 

Нравится

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

Добрый день.

Возможно есть смысл сделать представление?

Логику формирования записей сделать не в вебсервиме и отображение этой коллекции в детале. А сделать объект, который пометить как вьюха, и на SQL написать код, который будет формировать коллекцию. Тогда кроме как вьюхи никакого дополнительного кода не требуется, и будет работать стандартная логика детали.

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

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

вопрос такого характера, а что может быть причиной не отображения данных в гриде детали? которая отображается в модуле (наследуется от Базовой схемы карточки NUI), а модуль в свою очередь расположен в модальном окне. Когда я делаю экспорт в exel, то в файле отображаются все те данные которые приходят по filterMethod для детали. Но Грид пустой там нету ни одной записи. Подскажите в чем секрет? Как эти данные отобразить?

Нравится

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

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

Это то что выгружено в exel файл:

А это та самая деталь расположена на обычной странице без всяких там модальных окон:

 

Андрей, проверьте, какой запрос уходит к DataService для считывания данных для детали с сервера и что приходит на него в ответ. Возможно, условия фильтрации такие, что там 0 записей?

 

Либо же произошла ошибка, которую видно в консоли (но Вы писали, что нет).

 

Точно отличается только то, что окно модальное, а для немодального такая же деталь с наполнением данными?

Зверев Александр, для не модального окна, а именно тогда как я ее располагаю на станице контрагента как отдельную деталь, то все данные отображаются именно в соответсвии с установленным фильтром в filterMethod. Данные там есть это даже видно из ответа на вкладке network в консоле. И ошибки не прилетают. А хотелось хоть одну увидеть)))

Нужно смотреть в элементах открывшейся страницы, есть ли там вообще элементы с записями. Может, их кто-то сверху закрывает или сдвинулись вне области отображения. Или попытаться отладить, корректно ли отрабатывает вся JS-логика. Не видя развёрнутого сайта и кода страниц, сложно сказать.

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

Возникает проблема в
(anonymous function) (SchemaBuilderV2.js:338)
(anonymous function) (SchemaBuilderV2.js:126)
(anonymous function) (commonutils.js:1463)

в строке:

generatorConfig.entitySchemaName = schemaResponse.entitySchemaName; //schemaResponse = undefined

Что нужно проверить, чтоб schemaResponse был "живым"?

Нравится

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

Опишите подробнее на каком этапе появляется ошибка?

Очистил кэш браузера, всё заработало.

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

"AlexLS" написал:Что нужно проверить, чтоб schemaResponse был "живым"?

Добрый день!!!

проверять ничего не требуется, нужно знать четкие правила, что при создание новых разделов, страниц редактирования, деталей их обязательно нужно регистрировать в базе данных в таблицах SysModule, SysModuleLcz, SysModuleEdit, SysModuleEditLcz, SysDetail. И тогда подобные ошибки возникать у вас или вообще не будут или будут возникать очень редко.

"Власов Михаил Викторович" написал:их обязательно нужно регистрировать в базе данных в таблицах SysModule, SysModuleLcz, SysModuleEdit, SysModuleEditLcz, SysDetail

Михаил, спасибо за ответ! А как это правильно делать, где-то сказано?

"AlexLS" написал:Михаил, спасибо за ответ! А как это правильно делать, где-то сказано?

По данному вопросу есть информация на Академии, плюс данные вопросы уже не раз обсуждали на комьюнити, если поискать то можно найти ответа. Я своей практики написал сам SQL скрипты по регистрации Разделов, Страниц редактирования, Деталей и пользуюсь ими. Мне так удобнее и быстрее. Если нужно могу поделиться.

"Власов Михаил Викторович" написал:SQL скрипты по регистрации Разделов, Страниц редактирования, Деталей и пользуюсь ими. Мне так удобнее и быстрее. Если нужно могу поделиться

Михаил, спасибо!

Буду очень благодарен, если поделитесь (например, в личном сообщении)!

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