Вопрос

Редактируемый реестр раздела.

Делаю редактируемый реестр раздела для справочника. Пример взял тут. Требование на странице SystemDesigner добавить ссылки на редактировние справочника. Вязл объект NavDefectClassificator, записи которого содержит в себе 3 справочых поля.

создал схему раздела NavDefectClassificatorSection (код ниже). добавил записи в SysModuleEntity, SysModule

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

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

а в консоли ошибки

Uncaught TypeError: Cannot read properties of undefined (reading 'pages')

вот сам код схемы раздела

define("NavDefectClassificatorSection", ["ConfigurationGrid", "ConfigurationGridGenerator", "ConfigurationGridUtilities"],
	   function() {
	return {
		entitySchemaName: "NavDefectClassificator",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[
			{
				"operation": "merge",
				"name": "DataGrid",
				"values": {
					"className": "Terrasoft.ConfigurationGrid",
					"generator": "ConfigurationGridGenerator.generatePartial",
					"generateControlsConfig": {"bindTo": "generateActiveRowControlsConfig"},
					"changeRow": {"bindTo": "changeRow"},
					"unSelectRow": {"bindTo": "unSelectRow"},
					"onGridClick": {"bindTo": "onGridClick"},
					"initActiveRowKeyMap": {"bindTo": "initActiveRowKeyMap"},
					"activeRowAction": {"bindTo": "onActiveRowAction"},
					"multiSelect": {"bindTo": "MultiSelect"}
				}
			},
			{
				"operation": "insert",
				"name": "activeRowActionSave",
				"parentName": "DataGrid",
				"propertyName": "activeRowActions",
				"values": {
					"className": "Terrasoft.Button",
					"style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
					"tag": "save",
					"markerValue": "save",
					"imageConfig": {"bindTo": "Resources.Images.SaveIcon"}
				}
			},
			{
				"operation": "insert",
				"name": "activeRowActionCopy",
				"parentName": "DataGrid",
				"propertyName": "activeRowActions",
				"values": {
					"className": "Terrasoft.Button",
					"style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
					"tag": "copy",
					"markerValue": "copy",
					"imageConfig": {"bindTo": "Resources.Images.CopyIcon"}
				}
			},
			{
				"operation": "insert",
				"name": "activeRowActionCard",
				"parentName": "DataGrid",
				"propertyName": "activeRowActions",
				"values": {
					"className": "Terrasoft.Button",
					"style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
					"tag": "card",
					"markerValue": "card",
					"visible": {"bindTo": "HasEditPages"},
					"imageConfig": {"bindTo": "Resources.Images.CardIcon"}
				}
			},
			{
				"operation": "insert",
				"name": "activeRowActionCancel",
				"parentName": "DataGrid",
				"propertyName": "activeRowActions",
				"values": {
					"className": "Terrasoft.Button",
					"style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
					"tag": "cancel",
					"markerValue": "cancel",
					"imageConfig": {"bindTo": "Resources.Images.CancelIcon"}
				}
			},
			{
				"operation": "insert",
				"name": "activeRowActionRemove",
				"parentName": "DataGrid",
				"propertyName": "activeRowActions",
				"values": {
					"className": "Terrasoft.Button",
					"style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
					"tag": "remove",
					"markerValue": "remove",
					"imageConfig": {"bindTo": "Resources.Images.RemoveIcon"}
				}
			},
			{
				"operation": "remove",
				"name": "DataGridActiveRowOpenAction"
			},
			{
				"operation": "remove",
				"name": "DataGridActiveRowCopyAction"
			},
			{
				"operation": "remove",
				"name": "DataGridActiveRowDeleteAction"
			},
			{
				"operation": "remove",
				"name": "ProcessEntryPointGridRowButton"
			}
		]/**SCHEMA_DIFF*/,
		mixins: {
			ConfigurationGridUtilites: "Terrasoft.ConfigurationGridUtilities"
		},
		messages: {},
		methods: {
			edit: function() {
				var procElId = this.getActiveRow().get("ProcessElementId");
				var recordId = this.get("ActiveRow");
				if (procElId && !this.Terrasoft.isEmptyGUID(procElId)) {
					this.sandbox.publish("ProcessExecDataChanged", {
						procElUId: procElId,
						recordId: recordId,
						scope: this,
						parentMethodArguments: null,
						parentMethod: function() {
							return false;
						}
					});
					return true;
				}
				this.editRecord(recordId);
			},
			editRecord: function(primaryColumnValue) {
				this.Terrasoft.chain(
					function(next) {
						var activeRow = this.findActiveRow();
						this.saveRowChanges(activeRow, next);
					},
					function() {
						var activeRow = this.getActiveRow();
						var typeColumnValue = this.getTypeColumnValue(activeRow);
						var schemaName = this.getEditPageSchemaName(typeColumnValue);
 
						var config = {
							schemaName: schemaName,
							id: primaryColumnValue,
							operation: Terrasoft.ConfigurationEnums.CardOperation.EDIT,
							moduleId: this.getChainCardModuleSandboxId(typeColumnValue)
						};
 
						this.sandbox.publish("PushHistoryState", {
							hash: Ext.String.format("{0}/{1}/{2}/{3}",
													"CardModuleV2", schemaName, Terrasoft.ConfigurationEnums.CardOperation.EDIT, primaryColumnValue),
							silent: true
						});
						this.openCardInChain(config);
					}, this);
			},
			addRecord: function(typeColumnValue) {
				if (!typeColumnValue) {
					if (this.get("EditPages").getCount() > 1) {
						return false;
					}
					var tag = this.get("AddRecordButtonTag");
					typeColumnValue = tag || this.Terrasoft.GUID_EMPTY;
				}
				this.addRow(typeColumnValue);
			},
			copyRecord: function(primaryColumnValue) {
				this.copyRow(primaryColumnValue);
			},
			getGridRowViewModelConfig: function() {
				var gridRowViewModelConfig =
					this.mixins.GridUtilities.getGridRowViewModelConfig.apply(this, arguments);
				Ext.apply(gridRowViewModelConfig, {entitySchema: this.entitySchema});
				var editPages = this.get("EditPages");
				this.Ext.apply(gridRowViewModelConfig.values, {HasEditPages: editPages && !editPages.isEmpty()});
				return gridRowViewModelConfig;
			},
			getGridRowViewModelClassName: function() {
				return this.mixins.GridUtilities.getGridRowViewModelClassName.apply(this, arguments);
			},
			onRender: function() {
				this.callParent(arguments);
				if (!this.get("Restored")) {
					this.reloadGridColumnsConfig(true);
				}
			},
			getDefaultGridColumns: function() {
				var systemColumns = this.systemColumns;
				var allowedDataValueTypes = this.get("AllowedDataValueTypes");
				var entitySchema = this.entitySchema;
				var entitySchemaColumns = [];
				Terrasoft.each(entitySchema.columns, function(column, columnName) {
					if (Ext.Array.contains(systemColumns, columnName) ||
						!Ext.Array.contains(allowedDataValueTypes, column.dataValueType)) {
						return;
					}
					entitySchemaColumns.push(column);
				}, this);
				var primaryDisplayColumnName = entitySchema.primaryDisplayColumnName;
				entitySchemaColumns.sort(function(a, b) {
					if (a.name === primaryDisplayColumnName) {
						return -1;
					}
					if (b.name === primaryDisplayColumnName) {
						return 1;
					}
					return 0;
				}, this);
				return (entitySchemaColumns.length > 4) ? entitySchemaColumns.slice(0, 4) : entitySchemaColumns;
			},
			onActiveRowAction: function() {
				this.mixins.ConfigurationGridUtilities.onActiveRowAction.apply(this, arguments);
				this.callParent(arguments);
			},
			onActiveRowAction: function(buttonTag, primaryColumnValue) {
				switch (buttonTag) {
					case "card":
						this.edit();
						break;
					case "copy":
						this.copyRecord(primaryColumnValue);
						break;
					case "remove":
						this.deleteRecords();
						break;
					case "cancel":
						this.discardChanges(primaryColumnValue);
						break;
					case "save":
						this.onActiveRowSave(primaryColumnValue);
						break;
				}
			}
		},
		attributes: {
			IsEditable: {
				dataValueType: Terrasoft.DataValueType.BOOLEAN,
				type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
				value: true
			}
		},
	};
});

Как побороть?

Нравится

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

Алексей, трудно сказать как побороть. У вас происходит ошибка при получении свойства pages у какого-то объекта. Единственное - это остановится в строке, где выпадает ошибка и разобраться, что это за объект, почему он undefined и тогда должно стать ясно что еще нужно добавить. 

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

Решил вопрос. причина была вот в этом:

"добавил записи в SysModuleEntity, SysModule" Видимо не корректно добавил записи.

я делал сразу 2 раздела. NavDefectClassificator и NavDefect. Второй как справочник для первого.

Что сделал.

1. Отменил все измнеения, что сделал для NavDefectClassificator

2. Зарегистрировал раздел через мастер разделов. сдалал страницу редактирования.

3. Ошибка осталась.

4. Отменил вообще все изменения и начал регистрировать все через мастер разделов.

5. Ошибка устранена.

 

Вывод. что то не так сделал при добавлении записей в  SysModuleEntity, SysModule

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