Создание простой детали с карточкой редактирования (4

advertisement
Создание простой детали с карточкой
редактирования (4-6 полей, без
логики)
Кейс: Необходимо создать деталь Лицензии контрагента (5 полей), карточку
редактирования для этой детали, и зарегистрировать деталь для раздела
контрагенты.
Решение.
1. Создаем объект Лицензия контрагента с нужным набором полей. Среди
полей должно присутствовать поле Account для связи детали и раздела.
2. Создаем Схему представления модели карточки, в качестве родителя
указываем "BaseModulePageV2". в Dependencies добавляем объект
созданный на первом этапе. Страницу называем как "<имя
объекта>PageV2". Сохраняем метаданные.
3. Создаем схему модели представления детали с реестром, в качестве
родителя указываем "Базовая схема детали с реестром", в Dependencies
добавляем объект созданный на первом этапе. Страницу называем как
"<имя объекта>DetailV2". Меняем заголовок в локализированой строке
Caption. Публикуемся.
4. Обновляем клиентские модули из БД.
5. Открываем страницу карточки в WebStorm. Заполняем ее кодом примерно
следующего содержания:
6. define("AccountLicensePageV2",["terrasoft"],
7.
function(Terrasoft){
8.
return{
9.
entitySchemaName: "AccountLicense",
10.
attributes:[],
11.
diff: /**SCHEMA_DIFF*/[
12.
{
13.
"operation": "insert",
14.
"name": "AccountLicensePageGeneralTabContainer",
15.
"values": {
16.
"itemType": Terrasoft.ViewItemType.CONTAINER,
17.
"items":[]
18.
}
19.
},
20.
{
21.
"operation": "insert",
22.
"parentName": "AccountLicensePageGeneralTabContainer",
23.
"propertyName": "items",
24.
"name": "AccountLicensePageGeneralBlock",
25.
"values": {
26.
"itemType": Terrasoft.ViewItemType.GRID_LAYOUT,
27.
"items":[]
28.
}
29.
},
30.
{
31.
"operation":"insert",
32.
"parentName": "Header",
33.
"propertyName": "items",
34.
"name": "Number",
35.
values: {
36.
"bindTo": "Number",
37.
"layout": {
38.
"column": 0,
39.
"row": 0,
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
"colSpan": 12
}
}
},
{
"operation":"insert",
"parentName": "Header",
"propertyName": "items",
"name": "Institution",
values: {
"bindTo": "Institution",
"layout": {
"column": 12,
"row": 0,
"colSpan": 12
}
}
},
{
"operation":"insert",
"parentName": "Header",
"propertyName": "items",
"name": "StartDate",
values: {
"bindTo": "StartDate",
"layout": {
"column": 0,
"row": 1,
"colSpan": 12
}
}
},
{
"operation":"insert",
"parentName": "Header",
"propertyName": "items",
"name": "DueDate",
values: {
"bindTo": "DueDate",
"layout": {
"column": 12,
"row": 1,
"colSpan": 12
}
}
}
]
}
}
);
89. В карточку детали добавляем примерно следующий код:
90. define("AccountLicenseDetailV2", [],
91.
function(){
92.
return {
93.
entitySchemaName: "AccountLicense",
94.
attributes: {},
95.
methods: {},
96.
diff: [/*по желанию, тут можно настроить наборы колонок по
умолчанию для плиточного и списочного представлений. Подробней можно поискать
по исходным кодам деталей конфигурации*/]
97.
}
98.
}
);
99. После этого модифицируем карточку контрагента (если не переопределена,
необходимо создать замещающий клиентский модуль, и в качестве
родителя указать AccountPageV2), указываем в блоке details следующее:
100. AccountLicenses: {
101.
102.
103.
104.
105.
schemaName: "AccountLicenseDetailV2",
filter: {
masterColumn: "Id",
detailColumn: "Account"
}
}
106.
И в diff карточки нужно добавить эту деталь, в нужное место, чтобы
она отобразилась.
107.
После этого, можно уже увидеть деталь, но нельзя на нее ничего
добавить. Для того чтобы можно было добавить записи на деталь,
необходимо связать карточку редактирования с объектом. Для этого
необходимо выполнить скрипт tsp_RegisterPage в качестве первого
параметра передать наименование объекта с которым необходимо связать
карточку, в качестве второго параметра необходимо передать название
схемы карточки AccountLicensePageV2. Перелогиниться.
108.
Все хорошо, но из дизайнера раздела эту деталь добавить нельзя
(отсутствует в списке). Для этого необходимо сделать INSERT в таблицу
SysDetail, примерно следующего содержания:
109. -------РЕГИСТРАЦИЯ ДЕТАЛИ В SYSDETAIL---------110. insert into SysDetail (Id, CreatedOn, ModifiedOn, Caption, DetailSchemaUid,
EntitySchemaUId) values (
111. newid(),
112. getdate(),
113. getdate(),
114. 'Лицензии',
115. '4048C2F8-72DD-4AC3-9633-2D8B8FF6FBB6', --detailschema
116. '25D7C1AB-1DE0-4501-B402-02E0E5A72D6E') --entityschema
117.
118. select UId from VwSysEntitySchemaInWorkspace where Name like 'AccountLicense'
--entitySchemaUId
select UId from VwSysSchemaInWorkspace where Name like 'AccountLicenseDetailV2'
--detailSchema
119.
После этого нужно привязать данную деталь к пакету, и все.
Download