@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.
- package/main/default/applications/.gitkeep +0 -0
- package/main/default/client/datasources.client.js +7 -0
- package/main/default/client/object_fields.client.js +212 -0
- package/main/default/client/object_layouts.client.js +86 -0
- package/main/default/objectTranslations/_object_reload_logs.en/_object_reload_logs.en.objectTranslation.yml +16 -0
- package/main/default/objectTranslations/_object_reload_logs.zh-CN/_object_reload_logs.zh-CN.objectTranslation.yml +16 -0
- package/main/default/objectTranslations/datasources.en/datasources.en.objectTranslation.yml +121 -0
- package/main/default/objectTranslations/datasources.zh-CN/datasources.zh-CN.objectTranslation.yml +105 -0
- package/main/default/objectTranslations/object_actions.en/object_actions.en.objectTranslation.yml +55 -0
- package/main/default/objectTranslations/object_actions.zh-CN/object_actions.zh-CN.objectTranslation.yml +50 -0
- package/main/default/objectTranslations/object_fields.en/object_fields.en.objectTranslation.yml +335 -0
- package/main/default/objectTranslations/object_fields.zh-CN/object_fields.zh-CN.objectTranslation.yml +312 -0
- package/main/default/objectTranslations/object_layouts.en/object_layouts.en.objectTranslation.yml +72 -0
- package/main/default/objectTranslations/object_layouts.zh-CN/object_layouts.zh-CN.objectTranslation.yml +116 -0
- package/main/default/objectTranslations/object_listviews.en/object_listviews.en.objectTranslation.yml +153 -0
- package/main/default/objectTranslations/object_listviews.zh-CN/object_listviews.zh-CN.objectTranslation.yml +146 -0
- package/main/default/objectTranslations/object_related_list.en/object_related_list.en.objectTranslation.yml +82 -0
- package/main/default/objectTranslations/object_related_list.zh-CN/object_related_list.zh-CN.objectTranslation.yml +82 -0
- package/main/default/objectTranslations/object_triggers.en/object_triggers.en.objectTranslation.yml +30 -0
- package/main/default/objectTranslations/object_triggers.zh-CN/object_triggers.zh-CN.objectTranslation.yml +29 -0
- package/main/default/objectTranslations/object_validation_rules.en/object_validation_rules.en.objectTranslation.yml +40 -0
- package/main/default/objectTranslations/object_validation_rules.zh-CN/object_validation_rules.zh-CN.objectTranslation.yml +38 -0
- package/main/default/objectTranslations/objects.en/objects.en.objectTranslation.yml +219 -0
- package/main/default/objectTranslations/objects.zh-CN/objects.zh-CN.objectTranslation.yml +218 -0
- package/main/default/objects/0.datasources.observe.object.js +83 -0
- package/main/default/objects/0.objects_reload.object.js +26 -0
- package/main/default/objects/1.objects.observe.object.js +61 -0
- package/main/default/objects/10.tabs.observe.object.js +36 -0
- package/main/default/objects/11.restriction_rules.observe.object.js +37 -0
- package/main/default/objects/12.share_rules.observe.object.js +37 -0
- package/main/default/objects/13.permission_fields.observe.object.js +37 -0
- package/main/default/objects/14.object_fields.observe.object.js +44 -0
- package/main/default/objects/15.permission_objects.observe.object.js +44 -0
- package/main/default/objects/2.object_triggers.observe.object.js +35 -0
- package/main/default/objects/3.permission_objects.observe.object.js +29 -0
- package/main/default/objects/4.permission_set.observe.object.js +39 -0
- package/main/default/objects/5.holidays.observe.object.js +30 -0
- package/main/default/objects/6.business_hours.observe.object.js +33 -0
- package/main/default/objects/7.object_actions.observe.object.js +43 -0
- package/main/default/objects/7.object_layouts.observe.object.js +33 -0
- package/main/default/objects/9.apps.observe.object.js +33 -0
- package/main/default/objects/_object_reload_logs.object.yml +10 -0
- package/main/default/objects/datasources.action.js +51 -0
- package/main/default/objects/datasources.core.js +34 -0
- package/main/default/objects/datasources.object.js +168 -0
- package/main/default/objects/datasources.object.yml +113 -0
- package/main/default/objects/object_actions.object.js +152 -0
- package/main/default/objects/object_actions.object.yml +142 -0
- package/main/default/objects/object_fields.action.js +128 -0
- package/main/default/objects/object_fields.function.js +104 -0
- package/main/default/objects/object_fields.object.js +501 -0
- package/main/default/objects/object_fields.object.yml +690 -0
- package/main/default/objects/object_layouts.action.js +31 -0
- package/main/default/objects/object_layouts.layouts.action.js +19 -0
- package/main/default/objects/object_layouts.object.yml +356 -0
- package/main/default/objects/object_listviews.action.js +93 -0
- package/main/default/objects/object_listviews.object.js +100 -0
- package/main/default/objects/object_listviews.object.yml +309 -0
- package/main/default/objects/object_manager.app.todo.yml +11 -0
- package/main/default/objects/object_related_list.object.js +110 -0
- package/main/default/objects/object_related_list.object.yml +208 -0
- package/main/default/objects/object_triggers.core.js +58 -0
- package/main/default/objects/object_triggers.object.js +65 -0
- package/main/default/objects/object_triggers.object.yml +124 -0
- package/main/default/objects/object_validation_rules.action.js +33 -0
- package/main/default/objects/object_validation_rules.object.yml +100 -0
- package/main/default/objects/objects.action.js +157 -0
- package/main/default/objects/objects.core.js +398 -0
- package/main/default/objects/objects.erd.data.function.js +85 -0
- package/main/default/objects/objects.lib.js +42 -0
- package/main/default/objects/objects.object.js +543 -0
- package/main/default/objects/objects.object.yml +512 -0
- package/main/default/objects/objects.tree.js +58 -0
- package/main/default/objects/permission_objects.core.js +75 -0
- package/main/default/permissionsets/.gitkeep +0 -0
- package/main/default/profiles/.gitkeep +0 -0
- package/main/default/tabs/.gitkeep +0 -0
- package/main/default/triggers/datasources.trigger.js +93 -0
- package/main/default/triggers/object_actions.trigger.js +98 -0
- package/main/default/triggers/object_fields.trigger.js +376 -0
- package/main/default/triggers/object_layouts.trigger.js +153 -0
- package/main/default/triggers/object_listviews.trigger.js +139 -0
- package/main/default/triggers/object_triggers.trigger.js +50 -0
- package/main/default/triggers/object_validation_rules.trigger.js +80 -0
- package/main/default/triggers/objects.trigger.js +136 -0
- package/package.json +16 -0
- package/package.service.js +75 -0
- package/public/.md +3 -0
- package/src/.md +3 -0
- 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,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
|
+
}
|