@steedos/standard-object-database 2.5.19-beta.4 → 2.5.19

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.
@@ -454,6 +454,34 @@ var triggers = {
454
454
  if(!allowChangeObject()){
455
455
  throw new Meteor.Error(500, "华炎云服务不包含自定义业务对象的功能,请部署私有云版本");
456
456
  }
457
+
458
+ const staticRequiredFields = ['object','label','_name','type'];
459
+ // const staticRequiredFieldLabel = ['所属对象','显示名称','字段名','字段类型'];
460
+ for(let i = 0; i<staticRequiredFields.length; i++){
461
+ const fieldName = staticRequiredFields[i];
462
+ const fieldValue = doc[fieldName];
463
+ if(!fieldValue){
464
+ throw new Meteor.Error(fieldName, "必填字段");
465
+ }
466
+ }
467
+ // options子字段、precision、scale、summary_field不参与以下简单动态必填字段组。
468
+ const dynamicsRequired = [
469
+ ['language',['code']],['reference_to',['lookup', 'master_detail']],['formula',['autonumber', 'formula']],
470
+ ['data_type',['formula']],['rows',['textarea']],['options',['select']],
471
+ ['formula_blank_value',['formula']],['summary_object',['summary']],['summary_type',['summary']],
472
+ ['deleted_lookup_record_behavior',['lookup']]
473
+ ];
474
+
475
+ for(let i = 0; i<dynamicsRequired.length; i++){
476
+ if( dynamicsRequired[i][1].indexOf(doc.type) > -1 ){
477
+ const fieldName = dynamicsRequired[i][0];
478
+ const fieldValue = doc[fieldName];
479
+ if(!fieldValue){
480
+ throw new Meteor.Error(fieldName, "动态必填字段");
481
+ }
482
+ }
483
+ }
484
+
457
485
  checkName(doc._name);
458
486
  if(['name','owner','parent','children'].indexOf(doc._name)>-1){
459
487
  doc.name = doc._name;
@@ -236,7 +236,7 @@ fields:
236
236
  reference_to: objects
237
237
  reference_to_field: name
238
238
  visible_on: "{{['lookup', 'master_detail'].indexOf(formData.type) > -1 ? true: false}}"
239
- required: "{{['master_detail'].indexOf(formData.type) > -1 ? true: false}}"
239
+ required: "{{['lookup','master_detail'].indexOf(formData.type) > -1 ? true: false}}"
240
240
  sort_no: 180
241
241
  amis:
242
242
  menuTpl: "<div>${label}(${value})</div>"
@@ -705,7 +705,7 @@ fields:
705
705
  visible_on: "{{['autonumber','summary','formula'].indexOf(formData.type) > -1 ? false: true}}"
706
706
  sort_no: 272
707
707
  amis:
708
- disabledOn: "${is_system == true}"
708
+ # disabledOn: "${is_system == true}"
709
709
  onEvent:
710
710
  change:
711
711
  weight: 0
@@ -818,7 +818,7 @@ fields:
818
818
  enable_enhanced_lookup:
819
819
  type: boolean
820
820
  label: Enable Enhanced Lookup
821
- visible_on: "{{false}}"
821
+ hidden: true # 这里不可以用 visible_on: "{{false}}",否则在界面上新建字段时会被默认设置为false
822
822
  paging:
823
823
  enabled: false
824
824
  list_views:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steedos/standard-object-database",
3
- "version": "2.5.19-beta.4",
3
+ "version": "2.5.19",
4
4
  "main": "package.service.js",
5
5
  "private": false,
6
6
  "publishConfig": {
@@ -15,5 +15,5 @@
15
15
  },
16
16
  "repository": {},
17
17
  "license": "MIT",
18
- "gitHead": "1dba5cd1c2522748e824b724d323f55412a3ade5"
18
+ "gitHead": "f45f110239267697485b421285e61ca020e4779b"
19
19
  }
@@ -1,8 +1,8 @@
1
1
  /*
2
2
  * @Author: sunhaolin@hotoa.com
3
3
  * @Date: 1985-10-26 16:15:00
4
- * @LastEditors: 孙浩林 sunhaolin@steedos.com
5
- * @LastEditTime: 2023-11-04 16:05:25
4
+ * @LastEditors: baozhoutao@steedos.com
5
+ * @LastEditTime: 2023-11-10 16:53:59
6
6
  * @Description:
7
7
  */
8
8
  "use strict";
@@ -10,7 +10,7 @@ const project = require('./package.json');
10
10
  const packageName = project.name;
11
11
  const packageLoader = require('@steedos/service-meteor-package-loader');
12
12
  const serviceObjectMixin = require('@steedos/service-object-mixin');
13
-
13
+ const validator = require('validator');
14
14
  const triggers = require('./src/triggers');
15
15
 
16
16
  /**
@@ -48,48 +48,12 @@ module.exports = {
48
48
  "objects__upsert(id: String, doc: JSON): objects"
49
49
  },
50
50
  async handler(ctx) {
51
+ if(validator.toBoolean(process.env.STEEDOS_TENANT_ENABLE_SAAS || 'false', true) == true){
52
+ throw new Error('No permission')
53
+ }
51
54
  const userSession = ctx.meta.user;
52
55
  let { id, doc } = ctx.params;
53
- let data = '';
54
- if (_.isString(doc)) {
55
- data = JSON.parse(doc);
56
- } else {
57
- data = JSON.parse(JSON.stringify(doc));
58
- }
59
-
60
- if(data.form && _.isString(data.form)){
61
- data.form = JSON.parse(data.form)
62
- }
63
-
64
- delete data.space;
65
-
66
- if(data.is_system){
67
- data = _.pick(data, ['label', 'icon', 'enable_files', 'enable_tasks', 'enable_notes', 'enable_events', 'enable_workflow', 'enable_instances', 'enable_inline_edit', 'enable_tree', 'enable_enhanced_lookup', 'description', 'is_deleted'])
68
- }
69
-
70
- const object = await this.getObject('objects');
71
- const dbRecord = await object.directFind({filters: ['_id','=',id]});
72
- if(dbRecord.length === 0){
73
- // const newId = await object._makeNewID();
74
- const now = new Date();
75
- await object.directInsert(Object.assign({}, data, {
76
- // _id: newId,
77
- _id: id, // saas模式不支持修改对象
78
- owner: userSession.userId,
79
- space: userSession.spaceId,
80
- created: now,
81
- modified: now,
82
- created_by: userSession.userId,
83
- modified_by: userSession.userId,
84
- company_id: userSession.company_id,
85
- company_ids: userSession.company_ids,
86
- extend: data.name,
87
- custom: false,
88
- is_system: true
89
- }));
90
- // id = newId;
91
- }
92
- return object.update(id, data, userSession)
56
+ return this.objectsUpsert(id, doc, userSession)
93
57
  },
94
58
  },
95
59
  object_fields__upsert: {
@@ -98,6 +62,9 @@ module.exports = {
98
62
  "object_fields__upsert(id: String, doc: JSON): object_fields"
99
63
  },
100
64
  async handler(ctx) {
65
+ if(validator.toBoolean(process.env.STEEDOS_TENANT_ENABLE_SAAS || 'false', true) == true){
66
+ throw new Error('No permission')
67
+ }
101
68
  const userSession = ctx.meta.user;
102
69
  let { id, doc } = ctx.params;
103
70
  let data = '';
@@ -108,13 +75,21 @@ module.exports = {
108
75
  }
109
76
  delete data.space;
110
77
 
111
- if(data.is_system){
112
- data = _.pick(data, ['label', 'defaultValue', 'group', 'rows', 'sort_no', 'is_wide', 'index', 'sortable', 'searchable', 'filterable', 'visible_on', 'inlineHelpText', 'description', 'amis'])
113
- }
78
+
114
79
 
115
80
  const object = await this.getObject('object_fields');
116
81
  if(id.indexOf('.') > 0){
117
82
  const [objectName, fieldName] = id.split('.');
83
+
84
+ const dbObj = await this.getObject('objects').directFind({filters: ['name','=', objectName]});
85
+
86
+ if(dbObj.length === 0){
87
+ const records = await this.getObject('objects').find({filters: ['name','=', objectName]});
88
+ if(records.length > 0){
89
+ this.objectsUpsert(objectName, records[0], userSession)
90
+ }
91
+ }
92
+
118
93
  const dbRecord = await object.directFind({filters: [['object','=',objectName], ['name','=',fieldName]]});
119
94
  if(dbRecord.length > 0){
120
95
  id = dbRecord[0]._id;
@@ -138,6 +113,9 @@ module.exports = {
138
113
  id = newId;
139
114
  }
140
115
  }
116
+ if(data.is_system){
117
+ data = _.pick(data, ['label', 'defaultValue', 'group', 'rows', 'sort_no', 'is_wide', 'index', 'sortable', 'searchable', 'filterable', 'visible_on', 'inlineHelpText', 'description', 'amis', 'required'])
118
+ }
141
119
  return object.update(id, data, userSession)
142
120
  },
143
121
  },
@@ -154,7 +132,53 @@ module.exports = {
154
132
  * Methods
155
133
  */
156
134
  methods: {
135
+ objectsUpsert: {
136
+ async handler(id, doc, userSession){
137
+ let data = '';
138
+ if (_.isString(doc)) {
139
+ data = JSON.parse(doc);
140
+ } else {
141
+ data = JSON.parse(JSON.stringify(doc));
142
+ }
157
143
 
144
+ if(data.form && _.isString(data.form)){
145
+ data.form = JSON.parse(data.form)
146
+ }
147
+
148
+ delete data.space;
149
+ const name = data.name;
150
+
151
+ const object = await this.getObject('objects');
152
+ const dbRecord = await object.directFind({filters: ['_id','=',id]});
153
+ if(dbRecord.length === 0){
154
+ // const newId = await object._makeNewID();
155
+ const now = new Date();
156
+ await object.directInsert(Object.assign({}, data, {
157
+ // _id: newId,
158
+ _id: id, // saas模式不支持修改对象
159
+ name: name,
160
+ owner: userSession.userId,
161
+ space: userSession.spaceId,
162
+ created: now,
163
+ modified: now,
164
+ created_by: userSession.userId,
165
+ modified_by: userSession.userId,
166
+ company_id: userSession.company_id,
167
+ company_ids: userSession.company_ids,
168
+ extend: name,
169
+ custom: false,
170
+ is_system: true
171
+ }));
172
+ // id = newId;
173
+ }
174
+
175
+ if(data.is_system){
176
+ data = _.pick(data, ['label', 'icon', 'enable_files', 'enable_tasks', 'enable_notes', 'enable_events', 'enable_workflow', 'enable_instances', 'enable_inline_edit', 'enable_tree', 'enable_enhanced_lookup', 'description', 'is_deleted'])
177
+ }
178
+
179
+ return object.update(id, data, userSession)
180
+ }
181
+ }
158
182
  },
159
183
 
160
184
  /**