@steedos/standard-object-database 2.5.0-beta.3 → 2.5.0-beta.30

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 (26) hide show
  1. package/main/default/objectTranslations/object_fields.en/object_fields.en.objectTranslation.yml +2 -2
  2. package/main/default/objectTranslations/object_fields.zh-CN/object_fields.zh-CN.objectTranslation.yml +2 -2
  3. package/main/default/objectTranslations/object_triggers.zh-CN/object_triggers.zh-CN.objectTranslation.yml +3 -5
  4. package/main/default/objects/13.permission_fields.observe.object.js +3 -0
  5. package/main/default/objects/14.object_fields.observe.object.js +3 -3
  6. package/main/default/objects/15.permission_objects.observe.object.js +5 -2
  7. package/main/default/objects/2.object_triggers.observe.object.js +42 -34
  8. package/main/default/objects/3.permission_objects.observe.object.js +39 -6
  9. package/main/default/objects/datasources.object.js +4 -0
  10. package/main/default/objects/datasources.object.yml +10 -0
  11. package/main/default/objects/object_actions.object.yml +16 -10
  12. package/main/default/objects/object_fields.object.js +1 -1
  13. package/main/default/objects/object_fields.object.yml +67 -62
  14. package/main/default/objects/object_triggers.object.yml +51 -52
  15. package/main/default/objects/objects.core.js +0 -28
  16. package/main/default/objects/objects.object.yml +0 -1
  17. package/main/default/pages/object_detail.page.amis.json +168 -149
  18. package/main/default/routes/amis_button_design.ejs +6 -5
  19. package/main/default/routes/amis_listview_design.router.js +1 -1
  20. package/main/default/services/database-objects.service.js +115 -0
  21. package/main/default/services/suggestions.service.js +185 -0
  22. package/main/default/triggers/datasources.trigger.js +16 -29
  23. package/main/default/triggers/object_triggers.trigger.js +78 -33
  24. package/package.json +2 -2
  25. package/main/default/objects/object_triggers.core.js +0 -58
  26. package/main/default/objects/object_triggers.object.js +0 -65
@@ -53,9 +53,9 @@ fields:
53
53
  value: percent
54
54
  - label: Password
55
55
  value: password
56
- - label: Lookup
56
+ - label: Lookup Relationship
57
57
  value: lookup
58
- - label: Master Detail
58
+ - label: Master-Detail Relationship
59
59
  value: master_detail
60
60
  - label: Autonumber
61
61
  value: autonumber
@@ -50,9 +50,9 @@ fields:
50
50
  value: percent
51
51
  - label: 密码
52
52
  value: password
53
- - label: 相关表
53
+ - label: 查找关系
54
54
  value: lookup
55
- - label: 主表/子表
55
+ - label: 主-详细信息关系
56
56
  value: master_detail
57
57
  - label: 自动编号
58
58
  value: autonumber
@@ -14,14 +14,12 @@ fields:
14
14
  label: 运行时
15
15
  help:
16
16
  description:
17
- is_enable:
17
+ isEnabled:
18
18
  label: 已启用
19
19
  help:
20
20
  description:
21
- todo:
22
- label: >-
23
- 执行的脚本 <a target="_blank"
24
- href="https://developer.steedos.com/developer/object_trigger">查看帮助</a>
21
+ handler:
22
+ label: 内容
25
23
  help:
26
24
  description:
27
25
  listviews:
@@ -19,6 +19,9 @@ Meteor.startup(function () {
19
19
  }
20
20
  }).observe({
21
21
  added: function (newDocument) {
22
+ if (newDocument.copy_from) { // 通过复制简档创建的字段权限,使用批量注册
23
+ return;
24
+ }
22
25
  if (inited) {
23
26
  return _change(newDocument);
24
27
  }
@@ -1,8 +1,8 @@
1
1
  /*
2
2
  * @Author: baozhoutao@steedos.com
3
3
  * @Date: 2022-08-05 14:17:44
4
- * @LastEditors: baozhoutao@steedos.com
5
- * @LastEditTime: 2023-02-22 10:23:14
4
+ * @LastEditors: sunhaolin@hotoa.com
5
+ * @LastEditTime: 2023-05-12 09:33:27
6
6
  * @Description:
7
7
  */
8
8
  const objectql = require("@steedos/objectql");
@@ -13,7 +13,7 @@ Meteor.startup(function () {
13
13
  // 重置字段权限延迟10秒,防止对象服务未上线
14
14
  setTimeout(()=>{
15
15
  try {
16
- console.log("====resetAllPermissionSetFieldPermissions====")
16
+ // console.log("====resetAllPermissionSetFieldPermissions====")
17
17
  objectql.getSteedosSchema().broker.call(`permission_fields.resetAllPermissionSetFieldPermissions`, {
18
18
  objectName: document.object
19
19
  }, {
@@ -1,8 +1,8 @@
1
1
  /*
2
2
  * @Author: baozhoutao@steedos.com
3
3
  * @Date: 2022-08-05 14:17:44
4
- * @LastEditors: baozhoutao@steedos.com
5
- * @LastEditTime: 2023-02-22 10:32:01
4
+ * @LastEditors: sunhaolin@hotoa.com
5
+ * @LastEditTime: 2023-05-13 17:09:31
6
6
  * @Description:
7
7
  */
8
8
  const objectql = require("@steedos/objectql");
@@ -38,6 +38,9 @@ Meteor.startup(function () {
38
38
  }
39
39
  }).observe({
40
40
  added: function (newDocument) {
41
+ if (newDocument.copy_from) { // 通过复制简档创建的对象权限,不需要重置字段权限
42
+ return;
43
+ }
41
44
  if (inited) {
42
45
  return _change(newDocument);
43
46
  }
@@ -1,35 +1,43 @@
1
- var objectql = require('@steedos/objectql');
2
- var triggerCore = require('./object_triggers.core.js');
1
+ /*
2
+ * @Author: baozhoutao@steedos.com
3
+ * @Date: 2022-08-05 14:17:44
4
+ * @LastEditors: baozhoutao@steedos.com
5
+ * @LastEditTime: 2023-04-21 17:06:15
6
+ * @Description:
7
+ */
8
+ // var objectql = require('@steedos/objectql');
9
+ // var triggerCore = require('./object_triggers.core.js');
3
10
 
4
- Meteor.startup(function () {
5
- var _change, _remove;
6
- _change = function (document) {
7
- triggerCore.loadObjectTrigger(document)
8
- };
9
- _remove = function (document) {
10
- triggerCore.removeObjectTrigger(document);
11
- };
12
- var config = objectql.getSteedosConfig();
13
- if(config.tenant && config.tenant.saas){
14
- return ;
15
- }else{
16
- Creator.getCollection("object_triggers").find({is_enable: true}, {
17
- fields: {
18
- created: 0,
19
- created_by: 0,
20
- modified: 0,
21
- modified_by: 0
22
- }
23
- }).observe({
24
- added: function (newDocument) {
25
- return _change(newDocument);
26
- },
27
- changed: function (newDocument, oldDocument) {
28
- return _change(newDocument);
29
- },
30
- removed: function (oldDocument) {
31
- return _remove(oldDocument);
32
- }
33
- });
34
- }
35
- });
11
+ // Meteor.startup(function () {
12
+ // var _change, _remove;
13
+ // _change = function (document) {
14
+ // console.log("object_triggers===> _change");
15
+ // triggerCore.loadObjectTrigger(document)
16
+ // };
17
+ // _remove = function (document) {
18
+ // triggerCore.removeObjectTrigger(document);
19
+ // };
20
+ // var config = objectql.getSteedosConfig();
21
+ // if(config.tenant && config.tenant.saas){
22
+ // return ;
23
+ // }else{
24
+ // Creator.getCollection("object_triggers").find({is_enable: true}, {
25
+ // fields: {
26
+ // created: 0,
27
+ // created_by: 0,
28
+ // modified: 0,
29
+ // modified_by: 0
30
+ // }
31
+ // }).observe({
32
+ // added: function (newDocument) {
33
+ // return _change(newDocument);
34
+ // },
35
+ // changed: function (newDocument, oldDocument) {
36
+ // return _change(newDocument);
37
+ // },
38
+ // removed: function (oldDocument) {
39
+ // return _remove(oldDocument);
40
+ // }
41
+ // });
42
+ // }
43
+ // });
@@ -1,13 +1,46 @@
1
- var permissionCore = require('./permission_objects.core.js');
1
+ /*
2
+ * @Author: baozhoutao@steedos.com
3
+ * @Date: 2022-08-05 14:17:44
4
+ * @LastEditors: baozhoutao@steedos.com
5
+ * @LastEditTime: 2023-05-06 18:58:32
6
+ * @Description:
7
+ */
2
8
 
9
+ const cachers = require('@steedos/cachers');
10
+ const objectql = require("@steedos/objectql");
11
+ const _ = require('lodash');
12
+ let permissionObjectsLoadSetTimeoutId = null;
3
13
  Meteor.startup(function () {
4
14
  var _change, _remove;
5
15
  _change = function (document) {
6
- permissionCore.loadObjectPermission(document)
7
- };
8
- _remove = function (document) {
9
- permissionCore.removeObjectPermission(document);
16
+ if(permissionObjectsLoadSetTimeoutId){
17
+ clearTimeout(permissionObjectsLoadSetTimeoutId);
18
+ permissionObjectsLoadSetTimeoutId = null;
19
+ }
20
+ permissionObjectsLoadSetTimeoutId = setTimeout(()=>{
21
+ objectql.getObject("permission_set").find({}).then((permissionSets)=>{
22
+ objectql.getObject("permission_objects").directFind({}).then((records)=>{
23
+ records = _.map(records, (doc)=>{
24
+ if(_.includes(['admin', 'user', 'customer', 'supplier'], doc.permission_set_id)){
25
+ doc.name = doc.permission_set_id
26
+ }else{
27
+ const record = _.find(permissionSets, (item)=>{
28
+ return doc.permission_set_id == item._id
29
+ })
30
+ if(record){
31
+ doc.name = record.name;
32
+ }else{
33
+ doc.name = _.last(doc.name.split('.')) || doc.permission_set_id;
34
+ }
35
+ }
36
+ return doc;
37
+ })
38
+ cachers.getCacher('permission_objects').set('permission_objects', _.groupBy(records, 'space'));
39
+ })
40
+ })
41
+ }, 1000 * 3)
10
42
  };
43
+
11
44
  Creator.getCollection("permission_objects").find({}, {
12
45
  fields: {
13
46
  created: 0,
@@ -23,7 +56,7 @@ Meteor.startup(function () {
23
56
  return _change(newDocument);
24
57
  },
25
58
  removed: function (oldDocument) {
26
- return _remove(oldDocument);
59
+ return _change(oldDocument);
27
60
  }
28
61
  });
29
62
  });
@@ -1,4 +1,5 @@
1
1
  const _ = require("underscore");
2
+ const lodash = require("lodash");
2
3
  var objectql = require('@steedos/objectql');
3
4
  var schema = objectql.getSteedosSchema();
4
5
  const datasourceCore = require('./datasources.core');
@@ -20,6 +21,9 @@ Creator.Objects['datasources'].methods = {
20
21
  testConnection: async function (req, res) {
21
22
  var userSession = req.user
22
23
  var recordId = req.params._id;
24
+ if(lodash.includes(defaultDatasourceName, recordId)){
25
+ return res.send({ok: 1});
26
+ }
23
27
  var spaceId = userSession.spaceId
24
28
  let doc = await objectql.getObject('datasources').findOne(recordId, {filters: `(space eq \'${spaceId}\')`});
25
29
  if(doc){
@@ -82,6 +82,15 @@ fields:
82
82
  is_enable:
83
83
  type: boolean
84
84
  label: Enable
85
+ record_permissions:
86
+ type: object
87
+ visible_on: "{{global.mode ==='read' ? true : false}}"
88
+ is_system:
89
+ type: boolean
90
+ label: System
91
+ readonly: true
92
+ visible_on: "{{global.mode ==='read' ? true : false}}"
93
+ disabled: true
85
94
  list_views:
86
95
  all:
87
96
  columns:
@@ -89,6 +98,7 @@ list_views:
89
98
  - name
90
99
  - is_enable
91
100
  - driver
101
+ - is_system
92
102
  label: All
93
103
  filter_scope: space
94
104
  actions:
@@ -76,6 +76,7 @@ fields:
76
76
  type:
77
77
  type: select
78
78
  sort_no: 170
79
+ hidden: true
79
80
  options:
80
81
  - label: Custom JavaScript
81
82
  value: script
@@ -89,16 +90,16 @@ fields:
89
90
  # reference_to: word_templates
90
91
  # visible_on: "{{formData.type === 'word-print' ? true: false}}"
91
92
  # create: false
92
- todo:
93
- label: Execute Script
94
- sort_no: 180
95
- type: code
96
- language: javascript
97
- required: "{{formData.type != 'amis_button' ? true: false}}"
98
- # omit: true
99
- # hidden: true
100
- is_wide: true
101
- visible_on: "{{formData.type != 'amis_button' ? true: false}}"
93
+ # todo:
94
+ # label: Execute Script
95
+ # sort_no: 180
96
+ # type: code
97
+ # language: javascript
98
+ # required: "{{formData.type != 'amis_button' ? true: false}}"
99
+ # # omit: true
100
+ # # hidden: true
101
+ # is_wide: true
102
+ # visible_on: "{{formData.type != 'amis_button' ? true: false}}"
102
103
  amis_schema:
103
104
  label: Amis Schema
104
105
  sort_no: 180
@@ -108,6 +109,11 @@ fields:
108
109
  is_wide: true
109
110
  hidden: true
110
111
  visible_on: "{{formData.type == 'amis_button' ? true: false}}"
112
+ form:
113
+ initialValues: !!js/function |
114
+ function(){
115
+ return {type: 'amis_button'}
116
+ }
111
117
  paging:
112
118
  enabled: false
113
119
  actions:
@@ -268,7 +268,7 @@ function checkName(name){
268
268
  var reg = new RegExp('^[a-z]([a-z0-9]|_(?!_))*[a-z0-9]$'); //支持表格类型的验证表达式(待优化.$.限制只能出现一次): new RegExp('^[a-z]([a-z0-9]|_(?!_))*(\\.\\$\\.\\w+)*[a-z0-9]$')
269
269
  //TODO 撤销注释
270
270
  if(!reg.test(name)){
271
- throw new Error("名称只能包含小写字母、数字,必须以字母开头,不能以下划线字符结尾或包含两个连续的下划线字符");
271
+ throw new Error("'字段名'只能包含小写字母、数字,必须以字母开头,不能以下划线字符结尾或包含两个连续的下划线字符");
272
272
  }
273
273
  if(name.length > 50){
274
274
  throw new Error("名称长度不能大于50个字符");
@@ -110,23 +110,46 @@ fields:
110
110
  visible_on: "{{['lookup', 'master_detail'].indexOf(formData.type) > -1 ? true: false}}"
111
111
  required: "{{['master_detail'].indexOf(formData.type) > -1 ? true: false}}"
112
112
  sort_no: 180
113
- # reference_to_field:
114
- # type: lookup
115
- # label: Reference to field
116
- # reference_to: object_fields
117
- # reference_to_field: name
118
- # visible_on: "{{['lookup', 'master_detail'].indexOf(formData.type) > -1 ? true: false}}"
119
- # depend_on:
120
- # - reference_to
121
- # filtersFunction: !<tag:yaml.org,2002:js/function> |-
122
- # function (filters, values) {
123
- # if(values && values.reference_to){
124
- # return ['object', '=', values.reference_to]
125
- # }else{
126
- # return ['_id', '=', 'no']
127
- # }
128
- # }
129
- # sort_no: 182
113
+ amis:
114
+ menuTpl: "<div>${label}(${value})</div>"
115
+ depend_on:
116
+ type: lookup
117
+ group: Advanced
118
+ label: 依赖的字段
119
+ reference_to: object_fields
120
+ reference_to_field: name
121
+ multiple: true
122
+ visible_on: "{{['lookup', 'master_detail'].indexOf(formData.type) > -1 ? true: false}}"
123
+ depend_on:
124
+ - object
125
+ filtersFunction: !<tag:yaml.org,2002:js/function> |-
126
+ function (filters, values) {
127
+ if(values && values.object){
128
+ return ['object', '=', values.object]
129
+ }else{
130
+ return ['_id', '=', 'no']
131
+ }
132
+ }
133
+ sort_no: 450
134
+ reference_to_field:
135
+ type: lookup
136
+ group: Advanced
137
+ label: 关联的字段
138
+ description: '默认为主键'
139
+ reference_to: object_fields
140
+ reference_to_field: name
141
+ visible_on: "{{['lookup', 'master_detail'].indexOf(formData.type) > -1 ? true: false}}"
142
+ depend_on:
143
+ - reference_to
144
+ filtersFunction: !<tag:yaml.org,2002:js/function> |-
145
+ function (filters, values) {
146
+ if(values && values.reference_to){
147
+ return ['object', '=', values.reference_to]
148
+ }else{
149
+ return ['_id', '=', 'no']
150
+ }
151
+ }
152
+ sort_no: 450
130
153
  multiple:
131
154
  type: boolean
132
155
  label: Multiple
@@ -163,16 +186,23 @@ fields:
163
186
  sort_no: 220
164
187
  filtersFunction:
165
188
  label: filters Function
166
- type: textarea
167
- is_wide: true
168
- visible_on: "{{['lookup', 'master_detail'].indexOf(formData.type) > -1 ? true: false}}"
169
- sort_no: 230
170
- optionsFunction:
171
- label: options Function
172
- type: textarea
189
+ type: code
190
+ language: javascript
173
191
  is_wide: true
174
192
  visible_on: "{{['lookup', 'master_detail'].indexOf(formData.type) > -1 ? true: false}}"
175
- sort_no: 240
193
+ sort_no: 448
194
+ group: Advanced
195
+ amis:
196
+ placeholder: |-
197
+ function(filters, values){
198
+
199
+ }
200
+ # optionsFunction:
201
+ # label: options Function
202
+ # type: textarea
203
+ # is_wide: true
204
+ # visible_on: "{{['lookup', 'master_detail'].indexOf(formData.type) > -1 ? true: false}}"
205
+ # sort_no: 240
176
206
  precision:
177
207
  type: currency
178
208
  label: Precision
@@ -381,48 +411,23 @@ fields:
381
411
  summary_field:
382
412
  type: lookup
383
413
  label: Field to Aggregate
414
+ reference_to: object_fields
415
+ reference_to_field: name
384
416
  inlineHelpText: If the field type is a 'Roll-Up Summary' and the 'Roll-Up Type' is not COUNT, this field must be filled in, Only fields that aggregate number, currency, date, and datetime types are supported.
385
417
  depend_on:
386
418
  - summary_object
387
419
  - summary_type
388
420
  defaultIcon: service_contract
389
- optionsFunction: !<tag:yaml.org,2002:js/function> |-
390
- function (values) {
391
- if(!values.summary_object){
392
- return [];
393
- }
394
- if(values.summary_type && values.summary_type !== "count"){
395
- var options = Creator.getObjectLookupFieldOptions(values.summary_object, false, true);
396
- var object = Creator.getObject(values.summary_object);
397
- var fields = object ? object.fields : null;
398
- if(!fields){
399
- return [];
400
- }
401
- if(values.summary_type === "sum" || values.summary_type === "avg"){
402
- /*sum/avg类型可以汇总数值、金额、百分比字段*/
403
- options = options.filter(function(option){
404
- var optionFieldType = fields[option.value] && fields[option.value].type;
405
- if(["formula", "summary"].indexOf(optionFieldType) > -1){
406
- /*要聚合的字段为公式或汇总字段时,按其字段数据类型判断是否支持聚合*/
407
- optionFieldType = fields[option.value].data_type;
408
- }
409
- return ["number", "currency", "percent"].indexOf(optionFieldType) > -1
410
- });
411
- }
412
- else{
413
- /*min、max类型可以汇总数值、金额、百分比、日期、日期时间字段*/
414
- options = options.filter(function(option){
415
- var optionFieldType = fields[option.value] && fields[option.value].type;
416
- if(["formula", "summary"].indexOf(optionFieldType) > -1){
417
- /*要聚合的字段为公式或汇总字段时,按其字段数据类型判断是否支持聚合*/
418
- optionFieldType = fields[option.value].data_type;
419
- }
420
- return ["number", "currency", "percent", "date", "datetime"].indexOf(optionFieldType) > -1
421
- });
422
- }
423
- return options;
424
- }
425
- }
421
+ amis:
422
+ "autoComplete":
423
+ "method": "get"
424
+ "url": "${context.rootUrl}/service/api/@${summary_object}/uiSchema?summary_object=${summary_object}&summary_type=${summary_type}&term=${term}"
425
+ "data":
426
+ "summary_type": "${summary_type}"
427
+ "headers":
428
+ "Authorization": "Bearer ${context.tenantId},${context.authToken}"
429
+ "sendOn": "!!this.summary_object && !!this.summary_type"
430
+ "adaptor": "const summary_type = api.body.summary_type;\nconst term = api.query.term;\nlet fields = payload.fields;\nlet options = [];\nif (fields) {\n if (summary_type && summary_type !== \"count\") {\n if (summary_type === \"sum\" || summary_type === \"avg\") {\n /*sum/avg类型可以汇总数值、金额、百分比字段*/\n _.forEach(fields, (value, key) => {\n let fieldType = value.type;\n if ([\"formula\", \"summary\"].indexOf(fieldType) > -1) {\n /*要聚合的字段为公式或汇总字段时,按其字段数据类型判断是否支持聚合*/\n fieldType = value.data_type;\n }\n if ([\"number\", \"currency\", \"percent\"].indexOf(fieldType) > -1) {\n options.push({ label: value.label, value: value.name });\n }\n })\n }\n else {\n /*min、max类型可以汇总数值、金额、百分比、日期、日期时间字段*/\n _.forEach(fields, (value, key) => {\n let fieldType = value.type;\n if ([\"formula\", \"summary\"].indexOf(fieldType) > -1) {\n /*要聚合的字段为公式或汇总字段时,按其字段数据类型判断是否支持聚合*/\n fieldType = value.data_type;\n }\n if ([\"number\", \"currency\", \"percent\", \"date\", \"datetime\"].indexOf(fieldType) > -1) {\n options.push({ label: value.label, value: value.name });\n }\n })\n }\n }\n if (term) {\n options = _.filter(options, (item) => {\n return item.label.toLowerCase().indexOf(term.toLowerCase()) > -1;\n })\n }\n}\npayload = {\n data: { options: options },\n msg: \"\",\n status: 0\n}\nreturn payload;"
426
431
  visible_on: "{{formData.type === 'summary' && formData.summary_type !== 'count' ? true: false}}"
427
432
  required: "{{formData.type === 'summary' && formData.summary_type !== 'count' ? true: false}}"
428
433
  sort_no: 320
@@ -1,94 +1,93 @@
1
1
  name: object_triggers
2
2
  icon: apex
3
3
  label: Object Triggers
4
+ version: 2.0
4
5
  hidden: true
5
6
  fields:
6
- name:
7
+ _name:
7
8
  type: text
8
- label: Name
9
+ label: Api Name
9
10
  searchable: true
10
11
  index: true
11
12
  required: true
12
- # label:
13
- # label: 显示名称
14
- # type: text
15
- object:
13
+ name:
14
+ data_type: text
15
+ type: text
16
+ visible_on: "{{false}}"
17
+ listenTo:
16
18
  label: Object
17
19
  type: master_detail
18
20
  reference_to: objects
19
21
  reference_to_field: name
20
22
  required: true
21
- # on:
22
- # label: 运行于
23
- # type: lookup
24
- # required: true
25
- # optionsFunction: !<tag:yaml.org,2002:js/function> |-
26
- # function () {
27
- # return [{
28
- # label: "客户端",
29
- # value: "client",
30
- # icon: "address"
31
- # }, {
32
- # label: "服务端",
33
- # value: "server",
34
- # icon: "address"
35
- # }];
36
- # }
37
23
  when:
38
24
  label: Execution Time Option
39
- type: lookup
25
+ type: select
40
26
  required: true
41
- optionsFunction: !<tag:yaml.org,2002:js/function> |-
42
- function () {
43
- return [{
27
+ multiple: true
28
+ is_wide: true
29
+ options: [{
44
30
  label: "新增记录之前",
45
- value: "beforeInsert",
46
- icon: "asset_relationship"
31
+ value: "beforeInsert"
47
32
  }, {
48
33
  label: "新增记录之后",
49
- value: "afterInsert",
50
- icon: "asset_relationship"
34
+ value: "afterInsert"
51
35
  }, {
52
36
  label: "修改记录之前",
53
- value: "beforeUpdate",
54
- icon: "asset_relationship"
37
+ value: "beforeUpdate"
55
38
  }, {
56
39
  label: "修改记录之后",
57
- value: "afterUpdate",
58
- icon: "asset_relationship"
40
+ value: "afterUpdate"
59
41
  }, {
60
42
  label: "删除记录之前",
61
- value: "beforeDelete",
62
- icon: "asset_relationship"
43
+ value: "beforeDelete"
63
44
  }, {
64
45
  label: "删除记录之后",
65
- value: "afterDelete",
66
- icon: "asset_relationship"
46
+ value: "afterDelete"
67
47
  }, {
68
48
  label: "查下记录之前",
69
- value: "beforeFind",
70
- icon: "asset_relationship"
71
- }];
72
- }
73
- is_enable:
74
- label: Enable
49
+ value: "beforeFind"
50
+ }]
51
+ isEnabled:
52
+ label: Enabled
75
53
  type: boolean
76
- todo:
77
- label: Execute Script <a target="_blank" href="https://developer.steedos.com/developer/object_trigger">View Help</a>
78
- type: textarea
79
- required: true
54
+ defaultValue: true
55
+ handler:
56
+ label: Handler
57
+ type: code
58
+ language: javascript
80
59
  is_wide: true
60
+ required: true
61
+ defaultValue: |-
62
+ const { params, getObject, getUser, call } = ctx;
63
+ editorDidMount: |-
64
+ if(window._registerCompletionItemProviderTrigger){
65
+ return ;
66
+ }
67
+ window._registerCompletionItemProviderTrigger = true;
68
+ const result = Steedos.authRequest("/service/api/suggestions/trigger.d.ts", {async: false});
69
+ monaco.languages.typescript.javascriptDefaults.addExtraLib(
70
+ result
71
+ );
72
+ record_permissions:
73
+ type: object
74
+ visible_on: "{{global.mode ==='read' ? true : false}}"
75
+ is_system:
76
+ type: boolean
77
+ label: System
78
+ readonly: true
79
+ visible_on: "{{global.mode ==='read' ? true : false}}"
80
+ disabled: true
81
81
  paging:
82
82
  enabled: false
83
83
  list_views:
84
84
  all:
85
85
  columns:
86
86
  - name
87
- # - label
88
- - object
89
- # - 'on'
87
+ - listenTo
90
88
  - when
91
- - is_enable
89
+ - isEnabled
90
+ - is_system
92
91
  label: All
93
92
  filter_scope: space
94
93
  permission_set: