@steedos/standard-object-database 2.7.18-beta.35 → 2.7.18-beta.38
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/main/default/objectTranslations/objects.en/objects.en.objectTranslation.yml +0 -1
- package/main/default/objectTranslations/objects.zh-CN/objects.zh-CN.objectTranslation.yml +1 -2
- 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 +2 -3
- 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 +2 -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
|
@@ -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:
|
|
11
|
+
sort_no: 5
|
|
13
12
|
type: master_detail
|
|
@@ -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')",
|
|
@@ -303,8 +303,8 @@ function allowChangeObject(){
|
|
|
303
303
|
}
|
|
304
304
|
|
|
305
305
|
function checkNameField(nameField){
|
|
306
|
-
if(["text", "textarea", "autonumber", "date", "datetime", "time", "formula", "lookup", "master_detail"].indexOf(nameField.type) < 0){
|
|
307
|
-
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("只有文本、长文本、自动编号、日期、日期时间、时间、公式、相关表、数值这些类型的字段可以被设置为名称字段");
|
|
308
308
|
} else if(nameField.type == "lookup" && nameField.multiple) {
|
|
309
309
|
throw new Error("多选的相关表字段不可以被设置为名称字段");
|
|
310
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 ){
|
|
@@ -150,6 +150,42 @@ module.exports = {
|
|
|
150
150
|
}
|
|
151
151
|
*/
|
|
152
152
|
}
|
|
153
|
+
if (_.has(doc, 'datasource')) {
|
|
154
|
+
const obj = this.getObject(object_name);
|
|
155
|
+
const latestDoc = await obj.findOne(id);
|
|
156
|
+
const newObjDatasource = latestDoc.datasource;
|
|
157
|
+
if(doc.datasource != newObjDatasource){
|
|
158
|
+
throw new Error(`禁止修改数据源`);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
if(doc.datasource != 'meteor' && doc.datasource != 'default' && doc.datasource){
|
|
162
|
+
var idFieldSet = {}
|
|
163
|
+
if(_.has(doc, 'table_pk_name')){
|
|
164
|
+
idFieldSet.column_name = doc.table_pk_name
|
|
165
|
+
}
|
|
166
|
+
if(_.has(doc, 'table_pk_type')){
|
|
167
|
+
idFieldSet.type = doc.table_pk_type
|
|
168
|
+
}
|
|
169
|
+
if(_.has(doc, 'table_pk_generated')){
|
|
170
|
+
idFieldSet.generated = doc.table_pk_generated
|
|
171
|
+
}
|
|
172
|
+
if(_.has(doc, 'table_pk_is_name')){
|
|
173
|
+
idFieldSet.is_name = doc.table_pk_is_name
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
if(!_.isEmpty(idFieldSet)){
|
|
177
|
+
const adapter = objectql.getDataSource('default').adapter;
|
|
178
|
+
await adapter.connect()
|
|
179
|
+
let collection = adapter.collection('object_fields');
|
|
180
|
+
await collection.update({
|
|
181
|
+
object: doc.name,
|
|
182
|
+
name: '_id'
|
|
183
|
+
}, {
|
|
184
|
+
$set: idFieldSet
|
|
185
|
+
})
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
}
|
|
153
189
|
},
|
|
154
190
|
afterUpdate: async function () {
|
|
155
191
|
const { doc, previousDoc } = this;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@steedos/standard-object-database",
|
|
3
|
-
"version": "2.7.18-beta.
|
|
3
|
+
"version": "2.7.18-beta.38",
|
|
4
4
|
"main": "package.service.js",
|
|
5
5
|
"private": false,
|
|
6
6
|
"publishConfig": {
|
|
@@ -12,14 +12,14 @@
|
|
|
12
12
|
"description": "steedos package",
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"@steedos-widgets/amis-lib": "^1.0.22",
|
|
15
|
-
"@steedos/metadata-core": "2.7.18-beta.
|
|
16
|
-
"@steedos/service-object-mixin": "2.7.18-beta.
|
|
17
|
-
"@steedos/standard-objects": "2.7.18-beta.
|
|
15
|
+
"@steedos/metadata-core": "2.7.18-beta.38",
|
|
16
|
+
"@steedos/service-object-mixin": "2.7.18-beta.38",
|
|
17
|
+
"@steedos/standard-objects": "2.7.18-beta.38",
|
|
18
18
|
"amis-formula": "~6.3.0",
|
|
19
19
|
"clone": "^2.1.2",
|
|
20
20
|
"moleculer-bullmq": "3.0.0"
|
|
21
21
|
},
|
|
22
22
|
"repository": {},
|
|
23
23
|
"license": "MIT",
|
|
24
|
-
"gitHead": "
|
|
24
|
+
"gitHead": "39e68f2f79256ac7c8e1760320f19f80e5fd3b2f"
|
|
25
25
|
}
|