@steedos/standard-object-database 2.7.18-beta.36 → 2.7.18-beta.39

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.
@@ -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
@@ -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: 图标
@@ -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}
@@ -2,6 +2,7 @@ name: all
2
2
  columns:
3
3
  - label
4
4
  - name
5
+ - column_name
5
6
  - group
6
7
  - type
7
8
  - object
@@ -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: 180
13
- type: master_detail
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
- group: advanced
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: 190
10
+ sort_no: 51
11
11
  type: text
12
+ description: 数据库中表的名称
13
+ visible_on: >-
14
+ ${datasource != null &&(datasource != "meteor") &&(datasource != "default")}
@@ -0,0 +1,8 @@
1
+ name: table_pk_generated
2
+ group: 外部数据源
3
+ hidden: false
4
+ label: 主键是否自增
5
+ sort_no: 194
6
+ type: boolean
7
+ visible_on: >-
8
+ ${datasource != null &&(datasource != "meteor") &&(datasource != "default")}
@@ -0,0 +1,8 @@
1
+ name: table_pk_is_name
2
+ group: 外部数据源
3
+ hidden: false
4
+ label: 主键作为对象名称字段
5
+ sort_no: 195
6
+ type: boolean
7
+ visible_on: >-
8
+ ${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
@@ -41,7 +41,8 @@
41
41
  "relatedKey": "object"
42
42
  }
43
43
  ],
44
- "id": "u:f1a52545b642"
44
+ "id": "u:f1a52545b642",
45
+ "unmountOnExit": true
45
46
  },
46
47
  {
47
48
  "title": "${'objects_amis_list_view' | t}",
@@ -7,7 +7,7 @@
7
7
  "objectApiName": "objects",
8
8
  "recordId": "${recordId}",
9
9
  "className": "",
10
- "enableTabs": true,
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
- //新增object时,默认新建一个name字段
308
- Creator.getCollection("object_fields").insert({
309
- object: doc.name,
310
- owner: userId,
311
- _name: "name",
312
- label: "名称",
313
- space: doc.space,
314
- type: "text",
315
- required: true,
316
- index: true,
317
- searchable: true,
318
- filterable: true,
319
- sort_no: 10
320
- });
321
- Creator.getCollection("object_fields").insert({
322
- object: doc.name,
323
- owner: userId,
324
- _name: "created",
325
- name: "created",
326
- label: "创建时间",
327
- space: doc.space,
328
- type: "datetime",
329
- group: '',
330
- sort_no: 9999,
331
- readonly: true,
332
- disabled: true,
333
- sortable: true
334
- });
335
- Creator.getCollection("object_fields").insert({
336
- object: doc.name,
337
- owner: userId,
338
- _name: "created_by",
339
- name: "created_by",
340
- label: "创建人",
341
- space: doc.space,
342
- type: "lookup",
343
- reference_to: 'users',
344
- group: '',
345
- sort_no: 9999,
346
- readonly: true,
347
- disabled: true,
348
- });
349
- Creator.getCollection("object_fields").insert({
350
- object: doc.name,
351
- owner: userId,
352
- _name: "modified",
353
- name: "modified",
354
- label: "修改时间",
355
- space: doc.space,
356
- type: "datetime",
357
- group: '',
358
- sort_no: 9999,
359
- readonly: true,
360
- disabled: true,
361
- sortable: true
362
- });
363
- Creator.getCollection("object_fields").insert({
364
- object: doc.name,
365
- owner: userId,
366
- _name: "modified_by",
367
- name: "modified_by",
368
- label: "修改人",
369
- space: doc.space,
370
- type: "lookup",
371
- reference_to: 'users',
372
- group: '',
373
- sort_no: 9999,
374
- readonly: true,
375
- disabled: true,
376
- });
377
- // Creator.getCollection("object_fields").insert({
378
- // object: doc.name,
379
- // owner: userId,
380
- // _name: "owner",
381
- // label: "所有者",
382
- // space: doc.space,
383
- // type: "lookup",
384
- // reference_to: "users",
385
- // sortable: true,
386
- // index: true,
387
- // defaultValue: "{userId}",
388
- // omit: true,
389
- // hidden: true
390
- // });
391
- Creator.getCollection("object_listviews").insert({
392
- name: "all",
393
- label: "所有",
394
- space: doc.space,
395
- owner: userId,
396
- object_name: doc.name,
397
- shared_to: "space",
398
- filter_scope: "space",
399
- crud_mode: 'table',
400
- columns: [{field: 'name'}, {field: 'created_by'}, {field: 'created'}],
401
- "sort" : [
402
- {
403
- "field_name" : "created",
404
- "order" : "desc"
405
- }
406
- ]
407
- });
408
- Creator.getCollection("object_listviews").insert({
409
- name: "recent",
410
- label: "最近查看",
411
- space: doc.space,
412
- owner: userId,
413
- object_name: doc.name,
414
- shared_to: "space",
415
- filter_scope: "space",
416
- crud_mode: 'table',
417
- columns: [{field: 'name'}]
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.36",
3
+ "version": "2.7.18-beta.39",
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.36",
16
- "@steedos/service-object-mixin": "2.7.18-beta.36",
17
- "@steedos/standard-objects": "2.7.18-beta.36",
15
+ "@steedos/metadata-core": "2.7.18-beta.39",
16
+ "@steedos/service-object-mixin": "2.7.18-beta.39",
17
+ "@steedos/standard-objects": "2.7.18-beta.39",
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": "d70e05ac2c86b847e8aceaf11ae7b192c46020fc"
24
+ "gitHead": "dd7d323b56551ef52f0707587204cd54ab9f4197"
25
25
  }