Как устанавливается связь между деталью и ее страницей редактирования ?

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

Схема детали указывается при объявлении детали в схеме карточки куда она добавляется, там же указывается и целевой объект БД, мастер-колонки и т.д.
В таблице SysDetails существует запись которая связывает конкретную деталь ее наименование и опять же объект детали.
Где-же связь со страницей редактирования ?

Нравится

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

"Севостьянов Илья Сергеевич" написал:Как устанавливается связь между деталью и ее страницей редактирования ?

sql запросом

Ну в смысле SQL-запросом.
Вот деталь CustomDetail для объекта CustomObject:
1) Создаем схему детали - CustomDetailScheme

define("СustomDetailScheme", [], function() {
	return {
		entitySchemaName: "CustomObject",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
		methods: {}
	};
});

2) Создаем страницу редактирования CustomObjectAddPage ([color=red]это я так хотел бы ее назвать[/color], мастер создает CustomObject1Page)

define("CustomObjectAddPage", [], function() {
	return {
		entitySchemaName: "CustomObject",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[
			{
				"operation": "insert",
				"name": "SomeField4e5d48ba-e8d3-4e7f-936d-cbf296d05c99",
				"values": {
					"layout": {
						"colSpan": 24,
						"rowSpan": 1,
						"column": 0,
						"row": 0,
						"layoutName": "Header"
					},
					"bindTo": "SomeField"
				},
				"parentName": "Header",
				"propertyName": "items",
				"index": 0
			}
		]/**SCHEMA_DIFF*/,
		methods: {},
		rules: {}
	};
});

3) В некой схеме карточки, например в схеме Контакта - в замещающем объекте объявляем добавление на страницу, в синтаксисе которого определяется объект детали и ее схема, а так же колонки по которым запись текущей карточки объединяется с записью в объекте детали:

define("ContactPageV2", [],
	function() {
		return {
			entitySchemaName: "Contact",
			attributes: {},
			details: {
				"myCustomDetail": {
					"schemaName": "СustomDetailScheme",
					"filter": {
						"detailColumn": "Contact",
						"masterColumn": "Id"
					}
				}
			},
			diff: [
				{
					"operation": "insert",
					"name": "myCustomDetail",
					"values": {
						"itemType": 2,
						"markerValue": "added-detail",
						"visible": true
					},
					"parentName": "GeneralInfoTab",
					"propertyName": "items",
					"index": 3
				}
			],
			methods: {}
		};
	}
);

Саму же деталь, называем "КастомнаяДеталь" и регистрируем
запись в SysDetail в которой собственно и сопоставляются:
"Заголовок" (Caption) к UId записям в таблице SysSchema - схемы детали (DetailSchemaUId) и схемы объекта детали (EntitySchemaUId)

Связи схемы детали и объекта детали - аш в 3-х местах, и ни единого упоминания страницы редактирования для объекта детали ни в коде ни в БД.
Каким же образом созданная мастером CustomObject1Page работает, а стоит создать схему мне самостоятельно и назвать ее CustomObjectAddPage то каким образом мне установить ее как странице редактирования для детали - ни в коде ни в БД я не нашел упоминаний, мысль только одна - что схема карточки редактирования объекта детали выбирается по имени, т.е. для детали с объектом CustomObject бедт осуществляться поиск схемы CustomObject[цифра]Page .
Так что ли получается ?

"Севостьянов Илья Сергеевич" написал:Так что ли получается ?

Нет, связь происходит через таблицу SysModuleEdit через развязочный объект SysModuleEntity. К примеру:

Вот объект:
SELECT * FROM SysSchema WHERE Name = 'Opportunity' AND ExtendParent = 0
запоминаем его UId --ae46fb87-c02c-4ae8-ad31-a923cdd994cf

Вот его развязочная запись:
SELECT * FROM SysModuleEntity WHERE SysEntitySchemaUId = 'ae46fb87-c02c-4ae8-ad31-a923cdd994cf'
Запоминаем Id --a4e7bf65-7380-e011-afbc-00155d04320c

Ну и вот страница(цы) редактирования:
SELECT * FROM SysModuleEdit WHERE SysModuleEntityId = 'a4e7bf65-7380-e011-afbc-00155d04320c'

Вот собственно в SysModuleEdit и можно подменить страницу.

Спасибо, вот теперь ситуация немного прояснилась, там же и UId миникарточки и еще мног овсего интересного :)

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