@steedos/standard-object-database 2.2.55-beta.16

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.
Files changed (90) hide show
  1. package/main/default/applications/.gitkeep +0 -0
  2. package/main/default/client/datasources.client.js +7 -0
  3. package/main/default/client/object_fields.client.js +212 -0
  4. package/main/default/client/object_layouts.client.js +86 -0
  5. package/main/default/objectTranslations/_object_reload_logs.en/_object_reload_logs.en.objectTranslation.yml +16 -0
  6. package/main/default/objectTranslations/_object_reload_logs.zh-CN/_object_reload_logs.zh-CN.objectTranslation.yml +16 -0
  7. package/main/default/objectTranslations/datasources.en/datasources.en.objectTranslation.yml +121 -0
  8. package/main/default/objectTranslations/datasources.zh-CN/datasources.zh-CN.objectTranslation.yml +105 -0
  9. package/main/default/objectTranslations/object_actions.en/object_actions.en.objectTranslation.yml +55 -0
  10. package/main/default/objectTranslations/object_actions.zh-CN/object_actions.zh-CN.objectTranslation.yml +50 -0
  11. package/main/default/objectTranslations/object_fields.en/object_fields.en.objectTranslation.yml +335 -0
  12. package/main/default/objectTranslations/object_fields.zh-CN/object_fields.zh-CN.objectTranslation.yml +312 -0
  13. package/main/default/objectTranslations/object_layouts.en/object_layouts.en.objectTranslation.yml +72 -0
  14. package/main/default/objectTranslations/object_layouts.zh-CN/object_layouts.zh-CN.objectTranslation.yml +116 -0
  15. package/main/default/objectTranslations/object_listviews.en/object_listviews.en.objectTranslation.yml +153 -0
  16. package/main/default/objectTranslations/object_listviews.zh-CN/object_listviews.zh-CN.objectTranslation.yml +146 -0
  17. package/main/default/objectTranslations/object_related_list.en/object_related_list.en.objectTranslation.yml +82 -0
  18. package/main/default/objectTranslations/object_related_list.zh-CN/object_related_list.zh-CN.objectTranslation.yml +82 -0
  19. package/main/default/objectTranslations/object_triggers.en/object_triggers.en.objectTranslation.yml +30 -0
  20. package/main/default/objectTranslations/object_triggers.zh-CN/object_triggers.zh-CN.objectTranslation.yml +29 -0
  21. package/main/default/objectTranslations/object_validation_rules.en/object_validation_rules.en.objectTranslation.yml +40 -0
  22. package/main/default/objectTranslations/object_validation_rules.zh-CN/object_validation_rules.zh-CN.objectTranslation.yml +38 -0
  23. package/main/default/objectTranslations/objects.en/objects.en.objectTranslation.yml +219 -0
  24. package/main/default/objectTranslations/objects.zh-CN/objects.zh-CN.objectTranslation.yml +218 -0
  25. package/main/default/objects/0.datasources.observe.object.js +83 -0
  26. package/main/default/objects/0.objects_reload.object.js +26 -0
  27. package/main/default/objects/1.objects.observe.object.js +61 -0
  28. package/main/default/objects/10.tabs.observe.object.js +36 -0
  29. package/main/default/objects/11.restriction_rules.observe.object.js +37 -0
  30. package/main/default/objects/12.share_rules.observe.object.js +37 -0
  31. package/main/default/objects/13.permission_fields.observe.object.js +37 -0
  32. package/main/default/objects/14.object_fields.observe.object.js +44 -0
  33. package/main/default/objects/15.permission_objects.observe.object.js +44 -0
  34. package/main/default/objects/2.object_triggers.observe.object.js +35 -0
  35. package/main/default/objects/3.permission_objects.observe.object.js +29 -0
  36. package/main/default/objects/4.permission_set.observe.object.js +39 -0
  37. package/main/default/objects/5.holidays.observe.object.js +30 -0
  38. package/main/default/objects/6.business_hours.observe.object.js +33 -0
  39. package/main/default/objects/7.object_actions.observe.object.js +43 -0
  40. package/main/default/objects/7.object_layouts.observe.object.js +33 -0
  41. package/main/default/objects/9.apps.observe.object.js +33 -0
  42. package/main/default/objects/_object_reload_logs.object.yml +10 -0
  43. package/main/default/objects/datasources.action.js +51 -0
  44. package/main/default/objects/datasources.core.js +34 -0
  45. package/main/default/objects/datasources.object.js +168 -0
  46. package/main/default/objects/datasources.object.yml +113 -0
  47. package/main/default/objects/object_actions.object.js +152 -0
  48. package/main/default/objects/object_actions.object.yml +142 -0
  49. package/main/default/objects/object_fields.action.js +128 -0
  50. package/main/default/objects/object_fields.function.js +104 -0
  51. package/main/default/objects/object_fields.object.js +501 -0
  52. package/main/default/objects/object_fields.object.yml +690 -0
  53. package/main/default/objects/object_layouts.action.js +31 -0
  54. package/main/default/objects/object_layouts.layouts.action.js +19 -0
  55. package/main/default/objects/object_layouts.object.yml +356 -0
  56. package/main/default/objects/object_listviews.action.js +93 -0
  57. package/main/default/objects/object_listviews.object.js +100 -0
  58. package/main/default/objects/object_listviews.object.yml +309 -0
  59. package/main/default/objects/object_manager.app.todo.yml +11 -0
  60. package/main/default/objects/object_related_list.object.js +110 -0
  61. package/main/default/objects/object_related_list.object.yml +208 -0
  62. package/main/default/objects/object_triggers.core.js +58 -0
  63. package/main/default/objects/object_triggers.object.js +65 -0
  64. package/main/default/objects/object_triggers.object.yml +124 -0
  65. package/main/default/objects/object_validation_rules.action.js +33 -0
  66. package/main/default/objects/object_validation_rules.object.yml +100 -0
  67. package/main/default/objects/objects.action.js +157 -0
  68. package/main/default/objects/objects.core.js +398 -0
  69. package/main/default/objects/objects.erd.data.function.js +85 -0
  70. package/main/default/objects/objects.lib.js +42 -0
  71. package/main/default/objects/objects.object.js +543 -0
  72. package/main/default/objects/objects.object.yml +512 -0
  73. package/main/default/objects/objects.tree.js +58 -0
  74. package/main/default/objects/permission_objects.core.js +75 -0
  75. package/main/default/permissionsets/.gitkeep +0 -0
  76. package/main/default/profiles/.gitkeep +0 -0
  77. package/main/default/tabs/.gitkeep +0 -0
  78. package/main/default/triggers/datasources.trigger.js +93 -0
  79. package/main/default/triggers/object_actions.trigger.js +98 -0
  80. package/main/default/triggers/object_fields.trigger.js +376 -0
  81. package/main/default/triggers/object_layouts.trigger.js +153 -0
  82. package/main/default/triggers/object_listviews.trigger.js +139 -0
  83. package/main/default/triggers/object_triggers.trigger.js +50 -0
  84. package/main/default/triggers/object_validation_rules.trigger.js +80 -0
  85. package/main/default/triggers/objects.trigger.js +136 -0
  86. package/package.json +16 -0
  87. package/package.service.js +75 -0
  88. package/public/.md +3 -0
  89. package/src/.md +3 -0
  90. package/webapp/.md +1 -0
@@ -0,0 +1,309 @@
1
+ name: object_listviews
2
+ label: List View
3
+ icon: forecasts
4
+ version: 2
5
+ fields:
6
+ label:
7
+ label: Label
8
+ type: text
9
+ is_name: true
10
+ required: true
11
+ name:
12
+ label: API Name
13
+ type: text
14
+ searchable: true
15
+ index: true
16
+ required: true
17
+ inlineHelpText: Can only contain lowercase letters and numbers, must start with a letter, cannot end with an underscore character or contain two consecutive underscore characters
18
+ object_name:
19
+ label: Object
20
+ type: master_detail
21
+ write_requires_master_read: true
22
+ required: true
23
+ reference_to: objects
24
+ reference_to_field: name
25
+ optionsFunction: !<tag:yaml.org,2002:js/function> |-
26
+ function () {
27
+ var _options;
28
+
29
+ _options = [];
30
+
31
+ _.forEach(Creator.objectsByName, function (o, k) {
32
+ return _options.push({
33
+ label: o.label,
34
+ value: k,
35
+ icon: o.icon
36
+ });
37
+ });
38
+
39
+ return _options;
40
+ }
41
+ filter_scope:
42
+ label: Filter Scope
43
+ type: select
44
+ defaultValue: space
45
+ required: true
46
+ options:
47
+ - label: 我的
48
+ value: mine
49
+ - label: 工作区
50
+ value: space
51
+ shared:
52
+ label: Shared to All Users
53
+ type: boolean
54
+ show_count:
55
+ label: Show Record Count
56
+ type: boolean
57
+ type:
58
+ label: Type
59
+ type: select
60
+ options:
61
+ - label: Grid
62
+ value: grid
63
+ - label: Calendar
64
+ value: calendar
65
+ defaultValue: '"grid"'
66
+ hidden: true
67
+ scrolling_mode:
68
+ label: Scrolling Mode
69
+ inlineHelpText: Define the scroll bar display style for the data list.
70
+ type: select
71
+ options:
72
+ - label: Standard ( Click the page number to load the data of the corresponding page. )
73
+ value: standard
74
+ - label: Virtual ( Switch the page through the scroll bar. When you scroll to the corresponding page, the data will be loaded remotely. )
75
+ value: virtual
76
+ - label: Infinite ( Initially, only the first page will be loaded, and the next page will be loaded while scrolling. )
77
+ value: infinite
78
+ defaultValue: '"standard"'
79
+ hidden: true
80
+ columns:
81
+ label: Columns
82
+ type: grid
83
+ is_wide: true
84
+ required: true
85
+ columns.$:
86
+ label: Column
87
+ blackbox: true
88
+ type: object
89
+ columns.$.field:
90
+ label: Field
91
+ type: lookup
92
+ multiple: false
93
+ is_wide: false
94
+ required: true
95
+ depend_on:
96
+ - object_name
97
+ optionsFunction: !<tag:yaml.org,2002:js/function> |-
98
+ function (values) {
99
+ if (!(values != null ? values.object_name : void 0)) {
100
+ values.object_name = Session.get("object_name");
101
+ }
102
+
103
+ if(values.object_name && !_.isString(values.object_name)){
104
+ values.object_name = values.object_name.name
105
+ }
106
+
107
+ return Creator.getObjectFieldOptions(values != null ? values.object_name : void 0, true);
108
+ }
109
+ columns.$.width:
110
+ label: Width
111
+ type: text
112
+ # ag-grid配置rowModelType为infinite的话,列的warp属性功能异常,即不会换行显示且显示效果异常 #258
113
+ # columns.$.wrap:
114
+ # label: Wrap
115
+ # type: boolean
116
+ filter_fields:
117
+ label: Default Filter Fields
118
+ type: lookup
119
+ multiple: true
120
+ is_wide: true
121
+ depend_on:
122
+ - object_name
123
+ optionsFunction: !<tag:yaml.org,2002:js/function> |-
124
+ function (values) {
125
+ if (!(values != null ? values.object_name : void 0)) {
126
+ values.object_name = Session.get("object_name");
127
+ }
128
+ if(values.object_name && !_.isString(values.object_name)){
129
+ values.object_name = values.object_name.name
130
+ }
131
+ return Creator.getObjectFieldOptions(values != null ? values.object_name : void 0);
132
+ }
133
+ sort:
134
+ label: Default Sort Order
135
+ type: grid
136
+ is_wide: true
137
+ depend_on:
138
+ - object_name
139
+ sort.$:
140
+ label: Order
141
+ blackbox: true
142
+ type: object
143
+ sort.$.field_name:
144
+ label: Field Name
145
+ type: lookup
146
+ optionsFunction: !<tag:yaml.org,2002:js/function> |-
147
+ function (values) {
148
+ var _object, _options, fields, icon;
149
+ if(values.object_name && !_.isString(values.object_name)){
150
+ values.object_name = values.object_name.name
151
+ }
152
+ _options = [];
153
+ _object = Creator.getObject(values != null ? values.object_name : void 0);
154
+ fields = Creator.getFields(values != null ? values.object_name : void 0);
155
+ icon = _object.icon;
156
+
157
+ _.forEach(fields, function (f) {
158
+ var label;
159
+
160
+ if (!_object.fields[f].hidden) {
161
+ label = _object.fields[f].label;
162
+ return _options.push({
163
+ label: label || f,
164
+ value: f,
165
+ icon: icon
166
+ });
167
+ }
168
+ });
169
+
170
+ return _options;
171
+ }
172
+ sort.$.order:
173
+ label: Sort Order
174
+ type: select
175
+ defaultValue: asc
176
+ options:
177
+ - label: ASC
178
+ value: asc
179
+ - label: DESC
180
+ value: desc
181
+ filters:
182
+ label: Filters
183
+ type: code
184
+ is_wide: true
185
+ hidden: false
186
+ readonly: true
187
+ visible_on: "{{global.mode ==='read' ? true : false}}"
188
+ depend_on:
189
+ - object_name
190
+ # filters.$:
191
+ # label: Filter
192
+ # blackbox: true
193
+ # filters.$.field:
194
+ # label: Field
195
+ # type: lookup
196
+ # showIcon: false
197
+ # optionsFunction: !!js/function |
198
+ # function(values){
199
+ # if(values.object_name){
200
+ # return Creator.getObjectFilterFieldOptions(values.object_name)
201
+ # }
202
+ # return []
203
+ # }
204
+ # filters.$.operation:
205
+ # label: Operator
206
+ # type: lookup
207
+ # showIcon: false
208
+ # optionsFunction: !!js/function |
209
+ # function(values){
210
+ # if(values.object_name){
211
+ # if(!this.template){
212
+ # let options = Creator.getFieldOperation();
213
+ # Creator.pushBetweenBuiltinOptionals('date', options);
214
+ # return options;
215
+ # }
216
+
217
+ # const filter = _.find(values.filters, function (item) {
218
+ # return item._id === values._grid_row_id
219
+ # })
220
+
221
+ # if(filter){
222
+ # var field = filter.field;
223
+ # if(field){
224
+ # var object_fields = Creator.getObject(values.object_name).fields
225
+ # var filter_field_type;
226
+ # if(object_fields[field]){
227
+ # filter_field_type = object_fields[field].type
228
+ # return Creator.getFieldOperation(filter_field_type);
229
+ # }
230
+ # }
231
+ # }
232
+ # }
233
+ # return [];
234
+ # }
235
+ # filters.$.value:
236
+ # label: Value
237
+ # blackbox: true
238
+ filter_logic:
239
+ label: Logic
240
+ type: text
241
+ readonly: true
242
+ hidden: true
243
+ visible_on: "{{global.mode ==='read' ? true : false}}"
244
+ mobile_columns:
245
+ label: Mobile Columns
246
+ type: grid
247
+ is_wide: true
248
+ depend_on:
249
+ - object_name
250
+ mobile_columns.$:
251
+ label: Column
252
+ blackbox: true
253
+ type: object
254
+ mobile_columns.$.field:
255
+ label: Field
256
+ type: lookup
257
+ multiple: false
258
+ is_wide: false
259
+ optionsFunction: !<tag:yaml.org,2002:js/function> |-
260
+ function (values) {
261
+ if (!(values != null ? values.object_name : void 0)) {
262
+ values.object_name = Session.get("object_name");
263
+ }
264
+
265
+ if(values.object_name && !_.isString(values.object_name)){
266
+ values.object_name = values.object_name.name
267
+ }
268
+
269
+ return Creator.getObjectFieldOptions(values != null ? values.object_name : void 0, true);
270
+ }
271
+ sort_no:
272
+ label: Sort no
273
+ type: number
274
+ scale: 0
275
+ defaultValue: 100
276
+ paging:
277
+ enabled: false
278
+ list_views:
279
+ all:
280
+ columns:
281
+ - label
282
+ - name
283
+ - shared
284
+ - owner
285
+ - modified
286
+ label: All List View
287
+ filter_scope: space
288
+ actions:
289
+ customize:
290
+ label: Customize
291
+ on: record_only
292
+ copy:
293
+ label: 复制
294
+ on: record_only
295
+ permission_set:
296
+ user:
297
+ allowCreate: true
298
+ allowDelete: true
299
+ allowEdit: true
300
+ allowRead: false
301
+ modifyAllRecords: false
302
+ viewAllRecords: false
303
+ admin:
304
+ allowCreate: true
305
+ allowDelete: true
306
+ allowEdit: true
307
+ allowRead: false
308
+ modifyAllRecords: true
309
+ viewAllRecords: true
@@ -0,0 +1,11 @@
1
+ _id: object_manager
2
+ name: 对象管理
3
+ is_creator: false
4
+ admin_menus:
5
+ - _id: object_manager
6
+ name: 对象管理
7
+ permission_sets:
8
+ - admin
9
+ object_name: objects
10
+ parent: menu_advanced
11
+ sort: 1
@@ -0,0 +1,110 @@
1
+ var _ = require("underscore");
2
+ var objectql = require('@steedos/objectql');
3
+ var objectCore = require('./objects.core.js');
4
+ function _syncToObject(doc, event) {
5
+ objectCore.triggerReloadObject(doc.object_name, 'related_list', doc, event);
6
+ // var relatedList = Creator.getCollection("object_related_list").find({
7
+ // space: doc.space,
8
+ // object_name: doc.object_name
9
+ // }, {
10
+ // sort: {sort_no: -1},
11
+ // fields: {
12
+ // _id: 0,
13
+ // space: 0,
14
+ // object_name: 0,
15
+ // created: 0,
16
+ // modified: 0,
17
+ // owner: 0,
18
+ // created_by: 0,
19
+ // modified_by: 0
20
+ // }
21
+ // }).fetch();
22
+ // return Creator.getCollection("objects").update({
23
+ // space: doc.space,
24
+ // name: doc.object_name
25
+ // }, {
26
+ // $set: {
27
+ // relatedList: relatedList
28
+ // }
29
+ // });
30
+ };
31
+
32
+ function check(object_name, objectName, _id){
33
+ let query = {
34
+ object_name: object_name,
35
+ objectName: objectName
36
+ }
37
+ if(_id){
38
+ query._id = {$ne: _id}
39
+ }
40
+ let count = Creator.getCollection("object_related_list").find(query).count();
41
+
42
+ if(count > 0){
43
+ throw new Error("object_related_list_error_unique");
44
+ }
45
+ }
46
+
47
+ function allowChangeObject(){
48
+ var config = objectql.getSteedosConfig();
49
+ if(config.tenant && config.tenant.saas){
50
+ return false
51
+ }else{
52
+ return true;
53
+ }
54
+ }
55
+
56
+ Creator.Objects.object_related_list.triggers = {
57
+ "before.insert.server.object_related_list.check": {
58
+ on: 'server',
59
+ when: 'before.insert',
60
+ todo: function(userId, doc){
61
+ if(!allowChangeObject()){
62
+ throw new Meteor.Error(500, "华炎云服务不包含自定义业务对象的功能,请部署私有云版本");
63
+ }
64
+ check(doc.object_name, doc.objectName)
65
+ }
66
+ },
67
+ "before.update.server.object_related_list.check": {
68
+ on: 'server',
69
+ when: 'before.update',
70
+ todo: function(userId, doc, fieldNames, modifier, options){
71
+ if(!allowChangeObject()){
72
+ throw new Meteor.Error(500, "华炎云服务不包含自定义业务对象的功能,请部署私有云版本");
73
+ }
74
+ modifier.$set = modifier.$set || {}
75
+ if(_.has(modifier.$set, 'object_name') || _.has(modifier.$set, 'objectName')){
76
+ check(doc.object_name || modifier.$set.object_name, doc.objectName || modifier.$set.objectName, doc._id)
77
+ }
78
+ }
79
+ },
80
+ "before.remove.server.object_related_list.check": {
81
+ on: "server",
82
+ when: "before.remove",
83
+ todo: function (userId, doc) {
84
+ if(!allowChangeObject()){
85
+ throw new Meteor.Error(500, "华炎云服务不包含自定义业务对象的功能,请部署私有云版本");
86
+ }
87
+ }
88
+ },
89
+ "after.insert.server.object_related_list": {
90
+ on: "server",
91
+ when: "after.insert",
92
+ todo: function (userId, doc) {
93
+ _syncToObject(doc, 'insert');
94
+ }
95
+ },
96
+ "after.update.server.object_related_list": {
97
+ on: "server",
98
+ when: "after.update",
99
+ todo: function (userId, doc, fieldNames, modifier, options) {
100
+ _syncToObject(doc, 'update');
101
+ }
102
+ },
103
+ "after.remove.server.object_related_list": {
104
+ on: "server",
105
+ when: "after.remove",
106
+ todo: function (userId, doc) {
107
+ return _syncToObject(doc, 'remove');
108
+ }
109
+ }
110
+ }
@@ -0,0 +1,208 @@
1
+ name: object_related_list
2
+ label: Object Related List
3
+ icon: related_list
4
+ hidden: true
5
+ fields:
6
+ object_name:
7
+ label: To Object
8
+ type: master_detail
9
+ required: true
10
+ reference_to: objects
11
+ reference_to_field: name
12
+ optionsFunction: !<tag:yaml.org,2002:js/function> |-
13
+ function () {
14
+ var _options;
15
+
16
+ _options = [];
17
+
18
+ _.forEach(Creator.objectsByName, function (o, k) {
19
+ return _options.push({
20
+ label: o.label,
21
+ value: k,
22
+ icon: o.icon
23
+ });
24
+ });
25
+
26
+ return _options;
27
+ }
28
+ objectName:
29
+ label: Related Object
30
+ type: lookup
31
+ required: true
32
+ depend_on:
33
+ - object_name
34
+ optionsFunction: !<tag:yaml.org,2002:js/function> |-
35
+ function (values) {
36
+ var object_name = values.object_name
37
+ if(_.isObject(object_name)){
38
+ object_name = object_name.name
39
+ }
40
+ var _options;
41
+
42
+ _options = [];
43
+
44
+ _.forEach(Creator.objectsByName, function (o, k) {
45
+ if(_.include(['cms_files', 'instances', 'tasks', 'notes', 'events', 'approvals', 'audit_records'], k)){
46
+ return _options.push({
47
+ label: o.label,
48
+ value: k,
49
+ icon: o.icon
50
+ });
51
+ }else{
52
+ _.each(o.fields, function(field, fieldName){
53
+ if((field.type === 'master_detail' || field.type === 'lookup') && field.reference_to && field.reference_to == object_name){
54
+ return _options.push({
55
+ label: o.label,
56
+ value: k,
57
+ icon: o.icon
58
+ });
59
+ }
60
+ })
61
+ }
62
+ });
63
+ return _.uniq(_options, function(item){ return item.value});
64
+ }
65
+ columns:
66
+ label: Columns
67
+ type: grid
68
+ is_wide: true
69
+ required: true
70
+ depend_on:
71
+ - objectName
72
+ columns.$:
73
+ label: Column
74
+ blackbox: true
75
+ type: object
76
+ columns.$.field:
77
+ label: Field
78
+ type: lookup
79
+ multiple: false
80
+ is_wide: false
81
+ required: true
82
+ optionsFunction: !<tag:yaml.org,2002:js/function> |-
83
+ function (values) {
84
+ if (!(values != null ? values.objectName : void 0)) {
85
+ values.objectName = Session.get("object_name");
86
+ }
87
+
88
+ if(values.objectName && !_.isString(values.objectName)){
89
+ values.objectName = values.objectName.name
90
+ }
91
+
92
+ return Creator.getObjectFieldOptions(values != null ? values.objectName : void 0, true);
93
+ }
94
+ columns.$.width:
95
+ label: Width
96
+ type: text
97
+ columns.$.wrap:
98
+ label: Wrap
99
+ type: boolean
100
+ mobile_columns:
101
+ label: Mobile Columns
102
+ type: grid
103
+ is_wide: true
104
+ depend_on:
105
+ - objectName
106
+ mobile_columns.$:
107
+ label: Column
108
+ blackbox: true
109
+ type: object
110
+ mobile_columns.$.field:
111
+ label: Field
112
+ type: lookup
113
+ multiple: false
114
+ is_wide: false
115
+ optionsFunction: !<tag:yaml.org,2002:js/function> |-
116
+ function (values) {
117
+ if (!(values != null ? values.objectName : void 0)) {
118
+ values.objectName = Session.get("object_name");
119
+ }
120
+
121
+ if(values.objectName && !_.isString(values.objectName)){
122
+ values.objectName = values.objectName.name
123
+ }
124
+
125
+ return Creator.getObjectFieldOptions(values != null ? values.objectName : void 0, true);
126
+ }
127
+ sort:
128
+ label: Default Sort Order
129
+ type: grid
130
+ is_wide: true
131
+ depend_on:
132
+ - objectName
133
+ sort.$:
134
+ label: Order
135
+ blackbox: true
136
+ type: object
137
+ sort.$.field_name:
138
+ label: Field Name
139
+ type: lookup
140
+ optionsFunction: !<tag:yaml.org,2002:js/function> |-
141
+ function (values) {
142
+ var _object, _options, fields, icon;
143
+ if(values.objectName && !_.isString(values.objectName)){
144
+ values.objectName = values.objectName.name
145
+ }
146
+ _options = [];
147
+ _object = Creator.getObject(values != null ? values.objectName : void 0);
148
+ fields = Creator.getFields(values != null ? values.objectName : void 0);
149
+ icon = _object.icon;
150
+
151
+ _.forEach(fields, function (f) {
152
+ var label;
153
+
154
+ if (!_object.fields[f].hidden) {
155
+ label = _object.fields[f].label;
156
+ return _options.push({
157
+ label: label || f,
158
+ value: f,
159
+ icon: icon
160
+ });
161
+ }
162
+ });
163
+
164
+ return _options;
165
+ }
166
+ sort.$.order:
167
+ label: Sort Order
168
+ type: select
169
+ defaultValue: asc
170
+ options:
171
+ - label: ASC
172
+ value: asc
173
+ - label: DESC
174
+ value: desc
175
+ filters:
176
+ label: Filters
177
+ type: textarea
178
+ is_wide: true
179
+ sort_no:
180
+ type: number
181
+ label: Sort Number
182
+ inlineHelpText: High Value First.
183
+ paging:
184
+ enabled: false
185
+ list_views:
186
+ all:
187
+ columns:
188
+ - object_name
189
+ - objectName
190
+ - sort_no
191
+ label: All List View
192
+ filter_scope: space
193
+ sort: [["sort_no", "desc"]]
194
+ permission_set:
195
+ user:
196
+ allowCreate: true
197
+ allowDelete: true
198
+ allowEdit: true
199
+ allowRead: false
200
+ modifyAllRecords: false
201
+ viewAllRecords: false
202
+ admin:
203
+ allowCreate: true
204
+ allowDelete: true
205
+ allowEdit: true
206
+ allowRead: false
207
+ modifyAllRecords: true
208
+ viewAllRecords: true
@@ -0,0 +1,58 @@
1
+ var objectql = require('@steedos/objectql');
2
+ var objectCore = require('./objects.lib.js');
3
+ const defaultDatasourceName = 'default';
4
+ function reloadObject(objectName, objectDataSourceName){
5
+ const datasource = objectql.getDataSource(objectDataSourceName);
6
+ if(!datasource){
7
+ return
8
+ }
9
+ //获取到最新的对象
10
+ const object = objectql.getObjectConfig(objectName);
11
+ datasource.setObject(object.name, object);
12
+ try {
13
+ if(!objectDataSourceName || objectDataSourceName == defaultDatasourceName){
14
+ Creator.Objects[object.name] = object;
15
+ Creator.loadObjects(object, object.name);
16
+ }
17
+ } catch (error) {
18
+ console.log('error', error);
19
+ }
20
+ }
21
+
22
+ function loadObjectTrigger(doc){
23
+ var dbObject = objectCore.getObjectFromDB(doc.object);
24
+ var objectDataSourceName = objectCore.getDataSourceName(dbObject);
25
+
26
+ if(!dbObject || !objectCore.canLoadObject(dbObject.name, objectDataSourceName)){
27
+ console.warn('warn: Not loaded. Invalid custom object_triggers -> ', doc.name);
28
+ return;
29
+ }
30
+ try {
31
+ //给对象添加触发器
32
+ objectql.addObjectListenerConfig({
33
+ _id: doc._id,
34
+ listenTo: doc.object,
35
+ [doc.when]: eval(`(async function(){${doc.todo}})`)//warn: 此处代码存在风险
36
+ });
37
+ reloadObject(doc.object, objectDataSourceName);
38
+ } catch (error) {
39
+ console.log('info', error.message)
40
+ }
41
+ }
42
+
43
+ function removeObjectTrigger(doc){
44
+ var dbObject = objectCore.getObjectFromDB(doc.object);
45
+ var objectDataSourceName = objectCore.getDataSourceName(dbObject);
46
+ if(!objectCore.canLoadObject(dbObject.name, objectDataSourceName)){
47
+ console.warn('warn: Not deleted. Invalid custom object -> ', doc.name);
48
+ return;
49
+ }
50
+ console.log('remove object trigger', doc._id, doc.object, doc.when);
51
+ objectql.removeObjectListenerConfig(doc._id, doc.object, doc.when);
52
+ reloadObject(doc.object, objectDataSourceName);
53
+ }
54
+
55
+
56
+ module.exports = {
57
+ loadObjectTrigger,removeObjectTrigger
58
+ }