@steedos/standard-object-database 2.7.18-beta.6 → 2.7.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.txt +12 -652
- package/main/default/client/object_fields.client.js +14 -1
- package/main/default/objectTranslations/objects.en/objects.en.objectTranslation.yml +4 -1
- package/main/default/objectTranslations/objects.zh-CN/objects.zh-CN.objectTranslation.yml +5 -2
- package/main/default/objects/object_fields/fields/auto_fill_mapping.$.to.field.yml +28 -13
- package/main/default/objects/object_fields/fields/is_name.field.yml +1 -1
- package/main/default/objects/object_fields/listviews/all.listview.yml +1 -0
- package/main/default/objects/objects/fields/datasource.field.yml +3 -4
- package/main/default/objects/objects/fields/enable_audit.field.yml +6 -0
- package/main/default/objects/objects/fields/enable_chatter.field.yml +1 -0
- package/main/default/objects/objects/fields/table_name.field.yml +6 -3
- package/main/default/objects/objects/fields/table_pk_generated.field.yml +8 -0
- package/main/default/objects/objects/fields/table_pk_is_name.field.yml +8 -0
- package/main/default/objects/objects/fields/table_pk_name.field.yml +12 -0
- package/main/default/objects/objects/fields/table_pk_type.field.yml +14 -0
- package/main/default/objects/objects/objects.object.yml +8 -0
- package/main/default/pages/object_detail.page.amis.json +2 -1
- package/main/default/pages/object_form.page.amis.json +1 -1
- package/main/default/server/object_fields.object.js +5 -2
- package/main/default/server/objects.object.js +163 -114
- package/main/default/services/suggestions.service.js +1 -0
- package/main/default/triggers/object_fields.trigger.js +8 -0
- package/main/default/triggers/objects.trigger.js +36 -0
- package/package.json +5 -5
|
@@ -243,12 +243,25 @@ Steedos.ObjectFieldManager.getSummaryFiltersOperation = function(field_type) {
|
|
|
243
243
|
flex-grow: 0;
|
|
244
244
|
}
|
|
245
245
|
|
|
246
|
+
.defaultValue_field .defaultValue_field_formula_hidden > .antd-Form-label {
|
|
247
|
+
display: none;
|
|
248
|
+
}
|
|
249
|
+
.defaultValue_field .defaultValue_field_formula_hidden > .antd-Form-value .antd-FormulaPicker .antd-InputBox {
|
|
250
|
+
display: none;
|
|
251
|
+
}
|
|
252
|
+
|
|
246
253
|
.defaultValue_field .defaultValue_field_formula_hidden {
|
|
247
254
|
margin-left: 0.5rem;
|
|
248
255
|
}
|
|
249
256
|
|
|
250
257
|
.defaultValue_field.steedos-defaultValue-html-edit .defaultValue_field_formula_hidden {
|
|
251
|
-
margin-left:
|
|
258
|
+
margin-left: 7rem;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
@media (max-width: 767px) {
|
|
262
|
+
.defaultValue_field.steedos-defaultValue-html-edit .defaultValue_field_formula_hidden {
|
|
263
|
+
margin-left: 0rem;
|
|
264
|
+
}
|
|
252
265
|
}
|
|
253
266
|
</style>`);
|
|
254
267
|
$("head").append(styleCss);
|
|
@@ -19,7 +19,6 @@ fields:
|
|
|
19
19
|
description:
|
|
20
20
|
table_name:
|
|
21
21
|
label: Table Name
|
|
22
|
-
help: The default data source does not support this property
|
|
23
22
|
description:
|
|
24
23
|
icon:
|
|
25
24
|
label: Icon
|
|
@@ -78,6 +77,10 @@ fields:
|
|
|
78
77
|
label: Enable Instances
|
|
79
78
|
help:
|
|
80
79
|
description:
|
|
80
|
+
enable_audit:
|
|
81
|
+
label: Enable Audit
|
|
82
|
+
help:
|
|
83
|
+
description:
|
|
81
84
|
enable_chatter:
|
|
82
85
|
label: Enable Comments
|
|
83
86
|
help:
|
|
@@ -15,8 +15,7 @@ fields:
|
|
|
15
15
|
help: API 名称只能包含小写字母、数字,必须以字母开头,不能以下划线字符结尾或包含两个连续的下划线字符
|
|
16
16
|
description:
|
|
17
17
|
table_name:
|
|
18
|
-
label:
|
|
19
|
-
help: 默认数据源不支持此属性
|
|
18
|
+
label: 表名称
|
|
20
19
|
description:
|
|
21
20
|
icon:
|
|
22
21
|
label: 图标
|
|
@@ -75,6 +74,10 @@ fields:
|
|
|
75
74
|
label: 显示审批单子表
|
|
76
75
|
help:
|
|
77
76
|
description:
|
|
77
|
+
enable_audit:
|
|
78
|
+
label: 记录字段历史
|
|
79
|
+
help:
|
|
80
|
+
description:
|
|
78
81
|
enable_chatter:
|
|
79
82
|
label: 允许添加评论
|
|
80
83
|
help:
|
|
@@ -21,7 +21,8 @@ filtersFunction: !<tag:yaml.org,2002:js/function> |-
|
|
|
21
21
|
"email": ["email", "text", "textarea"]
|
|
22
22
|
};
|
|
23
23
|
var currentFilter = [];
|
|
24
|
-
|
|
24
|
+
//这里调用getUISchemaSync时传入true强制抓取最新schema是因为:设置自动填充时,如果from中选择了一个刚新建的字段,下面的fromField变量会取不到刚新建的字段,造成设置to属性会报错
|
|
25
|
+
var referenceObject = BuilderAmisObject && BuilderAmisObject.AmisLib && BuilderAmisObject.AmisLib.getUISchemaSync(values.reference_to, true);
|
|
25
26
|
var fromField = referenceObject && referenceObject.fields[values.from];
|
|
26
27
|
|
|
27
28
|
if (values.multiple) {
|
|
@@ -37,20 +38,34 @@ filtersFunction: !<tag:yaml.org,2002:js/function> |-
|
|
|
37
38
|
currentFilter.push(['multiple', '!=', true]);
|
|
38
39
|
}
|
|
39
40
|
}
|
|
40
|
-
if (fromField
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
if(
|
|
46
|
-
currentFilter.push([['
|
|
41
|
+
if (fromField) {
|
|
42
|
+
if(fromField.type == "select"){
|
|
43
|
+
//要注意下拉框字段类型有data_type属性,可能为boolean/number/text/null,默认值为null,表示text类型
|
|
44
|
+
var fromFieldDataType = fromField.data_type || "text";
|
|
45
|
+
currentFilter.push(['type', '=', 'select']);
|
|
46
|
+
if (fromFieldDataType === "text") {
|
|
47
|
+
currentFilter.push([['data_type', '=', 'text'], 'or', ['data_type', '=', null]]);
|
|
47
48
|
}
|
|
48
|
-
else{
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
else {
|
|
50
|
+
currentFilter.push(['data_type', '=', fromFieldDataType]);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else if (fromField.data_type) {
|
|
54
|
+
// 公式字段类型按data_type属性处理
|
|
55
|
+
currentFilter.push(['type', 'in', fieldFilters[fromField.data_type] || fromField.data_type.split()]);
|
|
56
|
+
} else {
|
|
57
|
+
currentFilter.push(['type', 'in', fieldFilters[fromField.type] || fromField.type.split()]);
|
|
58
|
+
if (fromField.type == "lookup" || fromField.type == "master_detail") {
|
|
59
|
+
if(fromField.reference_to === "users"){
|
|
60
|
+
currentFilter.push([['reference_to', '=', "users"],"or", ['reference_to', '=', "space_users"]]);
|
|
51
61
|
}
|
|
52
|
-
|
|
53
|
-
|
|
62
|
+
else{
|
|
63
|
+
if (fromField.reference_to) {
|
|
64
|
+
currentFilter.push(['reference_to', '=', fromField.reference_to]);
|
|
65
|
+
}
|
|
66
|
+
if (fromField.reference_to_field) {
|
|
67
|
+
currentFilter.push(['reference_to_field', '=', fromField.reference_to_field]);
|
|
68
|
+
}
|
|
54
69
|
}
|
|
55
70
|
}
|
|
56
71
|
}
|
|
@@ -6,4 +6,4 @@ hidden: false
|
|
|
6
6
|
label: Is Name
|
|
7
7
|
sort_no: 650
|
|
8
8
|
type: boolean
|
|
9
|
-
visible_on: ${ARRAYSOME(['text', 'textarea', 'autonumber', 'date', 'datetime', 'time', 'formula', 'lookup', 'master_detail'], item => item === type) && !multiple}
|
|
9
|
+
visible_on: ${ARRAYSOME(['text', 'textarea', 'autonumber', 'date', 'datetime', 'time', 'formula', 'lookup', 'master_detail', 'number', 'select'], item => item === type) && !multiple}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
name: datasource
|
|
2
2
|
amis:
|
|
3
|
-
disabledOn: '${is_system == true}'
|
|
3
|
+
disabledOn: '${is_system == true || !!recordId}'
|
|
4
4
|
defaultValue: default
|
|
5
5
|
filters: []
|
|
6
|
-
group: advanced
|
|
7
6
|
hidden: false
|
|
8
7
|
label: Datasource
|
|
9
8
|
reference_to: datasources
|
|
10
9
|
required: false
|
|
11
10
|
showIcon: false
|
|
12
|
-
sort_no:
|
|
13
|
-
type:
|
|
11
|
+
sort_no: 5
|
|
12
|
+
type: lookup
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
name: table_name
|
|
2
2
|
amis:
|
|
3
3
|
disabledOn: '${is_system == true}'
|
|
4
|
-
|
|
4
|
+
requiredOn: ${datasource != null &&(datasource != "meteor") &&(datasource != "default")}
|
|
5
|
+
group: 外部数据源
|
|
5
6
|
hidden: false
|
|
6
7
|
index: true
|
|
7
|
-
inlineHelpText: The default data source does not support this property
|
|
8
8
|
label: Table Name
|
|
9
9
|
searchable: true
|
|
10
|
-
sort_no:
|
|
10
|
+
sort_no: 51
|
|
11
11
|
type: text
|
|
12
|
+
description: 数据库中表的名称
|
|
13
|
+
visible_on: >-
|
|
14
|
+
${datasource != null &&(datasource != "meteor") &&(datasource != "default")}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
name: table_pk_name
|
|
2
|
+
group: 外部数据源
|
|
3
|
+
hidden: false
|
|
4
|
+
index: true
|
|
5
|
+
label: 主键字段名
|
|
6
|
+
searchable: true
|
|
7
|
+
sort_no: 191
|
|
8
|
+
type: text
|
|
9
|
+
required: true
|
|
10
|
+
description: 数据库表的主键字段名
|
|
11
|
+
visible_on: >-
|
|
12
|
+
${datasource != null &&(datasource != "meteor") &&(datasource != "default")}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
name: table_pk_type
|
|
2
|
+
group: 外部数据源
|
|
3
|
+
hidden: false
|
|
4
|
+
label: 主键值类型
|
|
5
|
+
sort_no: 192
|
|
6
|
+
type: select
|
|
7
|
+
required: true
|
|
8
|
+
options:
|
|
9
|
+
- label: 字符串
|
|
10
|
+
value: text
|
|
11
|
+
- label: 数值
|
|
12
|
+
value: number
|
|
13
|
+
visible_on: >-
|
|
14
|
+
${datasource != null &&(datasource != "meteor") &&(datasource != "default")}
|
|
@@ -3,7 +3,15 @@ custom: true
|
|
|
3
3
|
enable_dataloader: false
|
|
4
4
|
field_groups:
|
|
5
5
|
- group_name: switch
|
|
6
|
+
collapsed: true
|
|
7
|
+
- group_name: 外部数据源
|
|
8
|
+
collapsed: false
|
|
6
9
|
- group_name: advanced
|
|
10
|
+
collapsed: true
|
|
11
|
+
- group_name: 高级
|
|
12
|
+
collapsed: true
|
|
13
|
+
- group_name: 界面
|
|
14
|
+
collapsed: true
|
|
7
15
|
hidden: true
|
|
8
16
|
icon: orders
|
|
9
17
|
label: Objects
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"objectApiName": "objects",
|
|
8
8
|
"recordId": "${recordId}",
|
|
9
9
|
"className": "",
|
|
10
|
-
"enableTabs":
|
|
10
|
+
"enableTabs": false,
|
|
11
11
|
"mode": "edit",
|
|
12
12
|
"layout": "horizontal",
|
|
13
13
|
"apiRequestAdaptor": "console.log('api.data.query===', api.data.query);api.data.query = api.data.query.replace('objects__update', 'objects__upsert')",
|
|
@@ -279,6 +279,9 @@ function onChangeName(oldName, newDoc){
|
|
|
279
279
|
//[Task]: 字段名允许输入大写字母 #6702
|
|
280
280
|
//只能包含字母、数字,必须以字母开头,不能以下划线字符结尾或包含两个连续的下划线字符 TODO 支持表格
|
|
281
281
|
function checkName(name){
|
|
282
|
+
if(name === '_id'){
|
|
283
|
+
return true;
|
|
284
|
+
}
|
|
282
285
|
var reg = new RegExp('^[a-zA-Z]([A-Za-z0-9]|_(?!_))*[A-Za-z0-9]$'); //支持表格类型的验证表达式(待优化.$.限制只能出现一次): new RegExp('^[a-z]([a-z0-9]|_(?!_))*(\\.\\$\\.\\w+)*[a-z0-9]$')
|
|
283
286
|
//TODO 撤销注释
|
|
284
287
|
if(!reg.test(name)){
|
|
@@ -300,8 +303,8 @@ function allowChangeObject(){
|
|
|
300
303
|
}
|
|
301
304
|
|
|
302
305
|
function checkNameField(nameField){
|
|
303
|
-
if(["text", "textarea", "autonumber", "date", "datetime", "time", "formula", "lookup", "master_detail"].indexOf(nameField.type) < 0){
|
|
304
|
-
throw new Error("
|
|
306
|
+
if(["text", "textarea", "autonumber", "date", "datetime", "time", "formula", "lookup", "master_detail", 'number', 'select'].indexOf(nameField.type) < 0){
|
|
307
|
+
throw new Error("只有文本、长文本、自动编号、日期、日期时间、时间、公式、相关表、数值这些类型的字段可以被设置为名称字段");
|
|
305
308
|
} else if(nameField.type == "lookup" && nameField.multiple) {
|
|
306
309
|
throw new Error("多选的相关表字段不可以被设置为名称字段");
|
|
307
310
|
}
|
|
@@ -304,121 +304,170 @@ let objectTriggers = {
|
|
|
304
304
|
on: "server",
|
|
305
305
|
when: "after.insert",
|
|
306
306
|
todo: function (userId, doc) {
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
307
|
+
if(doc.datasource != 'meteor' && doc.datasource != 'default' && doc.datasource){
|
|
308
|
+
let { table_pk_name, table_pk_type, table_pk_generated, table_pk_is_name } = doc;
|
|
309
|
+
|
|
310
|
+
if(!table_pk_name){
|
|
311
|
+
table_pk_name = 'id'
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
if(!table_pk_type){
|
|
315
|
+
table_pk_type = 'number'
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
Creator.getCollection("object_fields").insert({
|
|
319
|
+
object: doc.name,
|
|
320
|
+
owner: userId,
|
|
321
|
+
_name: "_id",
|
|
322
|
+
name: '_id',
|
|
323
|
+
label: "ID",
|
|
324
|
+
column_name: table_pk_name,
|
|
325
|
+
primary: true,
|
|
326
|
+
generated: table_pk_generated,
|
|
327
|
+
space: doc.space,
|
|
328
|
+
type: table_pk_type,
|
|
329
|
+
searchable: true,
|
|
330
|
+
filterable: true,
|
|
331
|
+
sort_no: 5,
|
|
332
|
+
is_name: table_pk_is_name,
|
|
333
|
+
locked: true
|
|
334
|
+
});
|
|
335
|
+
|
|
336
|
+
Creator.getCollection("object_listviews").insert({
|
|
337
|
+
name: "all",
|
|
338
|
+
label: "所有",
|
|
339
|
+
space: doc.space,
|
|
340
|
+
owner: userId,
|
|
341
|
+
object_name: doc.name,
|
|
342
|
+
shared_to: "space",
|
|
343
|
+
filter_scope: "space",
|
|
344
|
+
crud_mode: 'table',
|
|
345
|
+
columns: [{field: '_id'}],
|
|
346
|
+
"sort" : [
|
|
347
|
+
{
|
|
348
|
+
"field_name" : "_id",
|
|
349
|
+
"order" : "asc"
|
|
350
|
+
}
|
|
351
|
+
]
|
|
352
|
+
});
|
|
353
|
+
|
|
354
|
+
}else{
|
|
355
|
+
//新增object时,默认新建一个name字段
|
|
356
|
+
Creator.getCollection("object_fields").insert({
|
|
357
|
+
object: doc.name,
|
|
358
|
+
owner: userId,
|
|
359
|
+
_name: "name",
|
|
360
|
+
label: "名称",
|
|
361
|
+
space: doc.space,
|
|
362
|
+
type: "text",
|
|
363
|
+
required: true,
|
|
364
|
+
index: true,
|
|
365
|
+
searchable: true,
|
|
366
|
+
filterable: true,
|
|
367
|
+
sort_no: 10
|
|
368
|
+
});
|
|
369
|
+
Creator.getCollection("object_fields").insert({
|
|
370
|
+
object: doc.name,
|
|
371
|
+
owner: userId,
|
|
372
|
+
_name: "created",
|
|
373
|
+
name: "created",
|
|
374
|
+
label: "创建时间",
|
|
375
|
+
space: doc.space,
|
|
376
|
+
type: "datetime",
|
|
377
|
+
group: '',
|
|
378
|
+
sort_no: 9999,
|
|
379
|
+
readonly: true,
|
|
380
|
+
disabled: true,
|
|
381
|
+
sortable: true
|
|
382
|
+
});
|
|
383
|
+
Creator.getCollection("object_fields").insert({
|
|
384
|
+
object: doc.name,
|
|
385
|
+
owner: userId,
|
|
386
|
+
_name: "created_by",
|
|
387
|
+
name: "created_by",
|
|
388
|
+
label: "创建人",
|
|
389
|
+
space: doc.space,
|
|
390
|
+
type: "lookup",
|
|
391
|
+
reference_to: 'users',
|
|
392
|
+
group: '',
|
|
393
|
+
sort_no: 9999,
|
|
394
|
+
readonly: true,
|
|
395
|
+
disabled: true,
|
|
396
|
+
});
|
|
397
|
+
Creator.getCollection("object_fields").insert({
|
|
398
|
+
object: doc.name,
|
|
399
|
+
owner: userId,
|
|
400
|
+
_name: "modified",
|
|
401
|
+
name: "modified",
|
|
402
|
+
label: "修改时间",
|
|
403
|
+
space: doc.space,
|
|
404
|
+
type: "datetime",
|
|
405
|
+
group: '',
|
|
406
|
+
sort_no: 9999,
|
|
407
|
+
readonly: true,
|
|
408
|
+
disabled: true,
|
|
409
|
+
sortable: true
|
|
410
|
+
});
|
|
411
|
+
Creator.getCollection("object_fields").insert({
|
|
412
|
+
object: doc.name,
|
|
413
|
+
owner: userId,
|
|
414
|
+
_name: "modified_by",
|
|
415
|
+
name: "modified_by",
|
|
416
|
+
label: "修改人",
|
|
417
|
+
space: doc.space,
|
|
418
|
+
type: "lookup",
|
|
419
|
+
reference_to: 'users',
|
|
420
|
+
group: '',
|
|
421
|
+
sort_no: 9999,
|
|
422
|
+
readonly: true,
|
|
423
|
+
disabled: true,
|
|
424
|
+
});
|
|
425
|
+
// Creator.getCollection("object_fields").insert({
|
|
426
|
+
// object: doc.name,
|
|
427
|
+
// owner: userId,
|
|
428
|
+
// _name: "owner",
|
|
429
|
+
// label: "所有者",
|
|
430
|
+
// space: doc.space,
|
|
431
|
+
// type: "lookup",
|
|
432
|
+
// reference_to: "users",
|
|
433
|
+
// sortable: true,
|
|
434
|
+
// index: true,
|
|
435
|
+
// defaultValue: "{userId}",
|
|
436
|
+
// omit: true,
|
|
437
|
+
// hidden: true
|
|
438
|
+
// });
|
|
439
|
+
Creator.getCollection("object_listviews").insert({
|
|
440
|
+
name: "all",
|
|
441
|
+
label: "所有",
|
|
442
|
+
space: doc.space,
|
|
443
|
+
owner: userId,
|
|
444
|
+
object_name: doc.name,
|
|
445
|
+
shared_to: "space",
|
|
446
|
+
filter_scope: "space",
|
|
447
|
+
crud_mode: 'table',
|
|
448
|
+
columns: [{field: 'name'}, {field: 'created_by'}, {field: 'created'}],
|
|
449
|
+
"sort" : [
|
|
450
|
+
{
|
|
451
|
+
"field_name" : "created",
|
|
452
|
+
"order" : "desc"
|
|
453
|
+
}
|
|
454
|
+
]
|
|
455
|
+
});
|
|
456
|
+
Creator.getCollection("object_listviews").insert({
|
|
457
|
+
name: "recent",
|
|
458
|
+
label: "最近查看",
|
|
459
|
+
space: doc.space,
|
|
460
|
+
owner: userId,
|
|
461
|
+
object_name: doc.name,
|
|
462
|
+
shared_to: "space",
|
|
463
|
+
filter_scope: "space",
|
|
464
|
+
crud_mode: 'table',
|
|
465
|
+
columns: [{field: 'name'}]
|
|
466
|
+
});
|
|
467
|
+
}
|
|
420
468
|
initObjectPermission(userId, doc);
|
|
421
469
|
}
|
|
470
|
+
|
|
422
471
|
},
|
|
423
472
|
"before.update.server.objects": {
|
|
424
473
|
on: "server",
|
|
@@ -467,7 +516,7 @@ let objectTriggers = {
|
|
|
467
516
|
var set = modifier.$set || {}
|
|
468
517
|
if((set.name || set.datasource) && this.previous.name != doc.name){
|
|
469
518
|
onChangeObjectName(this.previous.name, doc);
|
|
470
|
-
}
|
|
519
|
+
};
|
|
471
520
|
}
|
|
472
521
|
},
|
|
473
522
|
"before.remove.server.objects": {
|
|
@@ -124,6 +124,7 @@ module.exports = {
|
|
|
124
124
|
directDelete(id: SteedosIDType, userSession?: SteedosUserSession): Promise<any>;
|
|
125
125
|
count(query: SteedosQueryOptions, userSession?: SteedosUserSession): Promise<any>;
|
|
126
126
|
_makeNewID(): Promise<any>;
|
|
127
|
+
sql(sql: string, param?: any): Promise<any>;
|
|
127
128
|
}
|
|
128
129
|
${objectsTypes}
|
|
129
130
|
${servicesTypes}
|
|
@@ -329,6 +329,9 @@ module.exports = {
|
|
|
329
329
|
},
|
|
330
330
|
beforeUpdate: async function () {
|
|
331
331
|
let { doc, object_name, id} = this;
|
|
332
|
+
if(doc.name === '_id' || doc._name === '_id'){
|
|
333
|
+
throw new Error('禁止修改ID字段')
|
|
334
|
+
}
|
|
332
335
|
delete doc.is_customize
|
|
333
336
|
validateDoc(doc);
|
|
334
337
|
// const dbDoc = await objectql.getObject(object_name).findOne(id)
|
|
@@ -396,6 +399,11 @@ module.exports = {
|
|
|
396
399
|
}
|
|
397
400
|
},
|
|
398
401
|
beforeDelete: async function () {
|
|
402
|
+
let { object_name, id} = this;
|
|
403
|
+
const doc = await this.getObject("object_fields").findOne(id);
|
|
404
|
+
if(doc.name === '_id' || doc._name === '_id'){
|
|
405
|
+
throw new Error('禁止删除ID字段')
|
|
406
|
+
}
|
|
399
407
|
const field = await this.getObject(this.object_name).findOne(this.id,{fields:['name','object']});
|
|
400
408
|
const enable_tree = await objectql.getObject(field.object).enable_tree;
|
|
401
409
|
if( ["parent","children"].indexOf(field.name) > -1 && enable_tree ){
|