Как устанавливается связь между деталью и ее страницей редактирования ?
Как устанавливается связь между деталью и ее страницей редактирования ?
Не удается найти упоминаний в исходном коде или в какой либо записи в БД, что явным образом бы связывало деталь и ее страницу редактирования, неужели связь происходит по имени схемы ?
Схема детали указывается при объявлении детали в схеме карточки куда она добавляется, там же указывается и целевой объект БД, мастер-колонки и т.д.
В таблице SysDetails существует запись которая связывает конкретную деталь ее наименование и опять же объект детали.
Где-же связь со страницей редактирования ?
Нравится
"Севостьянов Илья Сергеевич" написал:Как устанавливается связь между деталью и ее страницей редактирования ?
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 миникарточки и еще мног овсего интересного :)