@steedos/objectql 2.1.76 → 2.1.84

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 (279) hide show
  1. package/lib/actions/field_updates.js +15 -15
  2. package/lib/actions/field_updates.js.map +1 -1
  3. package/lib/actions/index.js +3 -3
  4. package/lib/actions/index.js.map +1 -1
  5. package/lib/actions/workflow_notifications.js +10 -10
  6. package/lib/actions/workflow_notifications.js.map +1 -1
  7. package/lib/actions/workflow_rule.js +19 -19
  8. package/lib/actions/workflow_rule.js.map +1 -1
  9. package/lib/driver/index.js +1 -0
  10. package/lib/driver/index.js.map +1 -1
  11. package/lib/driver/metadata.js +3 -3
  12. package/lib/driver/metadata.js.map +1 -1
  13. package/lib/driver/meteorMongo.js +36 -36
  14. package/lib/driver/meteorMongo.js.map +1 -1
  15. package/lib/driver/mongo.js +43 -43
  16. package/lib/driver/mongo.js.map +1 -1
  17. package/lib/driver/mysql.js +2 -2
  18. package/lib/driver/mysql.js.map +1 -1
  19. package/lib/driver/oracle.js +5 -5
  20. package/lib/driver/oracle.js.map +1 -1
  21. package/lib/driver/postgres.js +2 -2
  22. package/lib/driver/postgres.js.map +1 -1
  23. package/lib/driver/sqlite3.js +2 -2
  24. package/lib/driver/sqlite3.js.map +1 -1
  25. package/lib/driver/sqlserver.js +4 -4
  26. package/lib/driver/sqlserver.js.map +1 -1
  27. package/lib/dynamic-load/actions.js +22 -18
  28. package/lib/dynamic-load/actions.js.map +1 -1
  29. package/lib/dynamic-load/approval_process.js +15 -10
  30. package/lib/dynamic-load/approval_process.js.map +1 -1
  31. package/lib/dynamic-load/button.js +25 -18
  32. package/lib/dynamic-load/button.js.map +1 -1
  33. package/lib/dynamic-load/chart.js +20 -23
  34. package/lib/dynamic-load/chart.js.map +1 -1
  35. package/lib/dynamic-load/field.js +21 -16
  36. package/lib/dynamic-load/field.js.map +1 -1
  37. package/lib/dynamic-load/flow_role.js +12 -8
  38. package/lib/dynamic-load/flow_role.js.map +1 -1
  39. package/lib/dynamic-load/index.d.ts +1 -0
  40. package/lib/dynamic-load/index.js +20 -19
  41. package/lib/dynamic-load/index.js.map +1 -1
  42. package/lib/dynamic-load/layout.js +19 -14
  43. package/lib/dynamic-load/layout.js.map +1 -1
  44. package/lib/dynamic-load/listview.js +14 -11
  45. package/lib/dynamic-load/listview.js.map +1 -1
  46. package/lib/dynamic-load/method.js +9 -6
  47. package/lib/dynamic-load/method.js.map +1 -1
  48. package/lib/dynamic-load/object_translations.js +29 -51
  49. package/lib/dynamic-load/object_translations.js.map +1 -1
  50. package/lib/dynamic-load/originalObject.js +1 -1
  51. package/lib/dynamic-load/originalObject.js.map +1 -1
  52. package/lib/dynamic-load/package.d.ts +9 -0
  53. package/lib/dynamic-load/package.js +507 -0
  54. package/lib/dynamic-load/package.js.map +1 -0
  55. package/lib/dynamic-load/page.js +20 -23
  56. package/lib/dynamic-load/page.js.map +1 -1
  57. package/lib/dynamic-load/permission.js +61 -65
  58. package/lib/dynamic-load/permission.js.map +1 -1
  59. package/lib/dynamic-load/permissionset.js +30 -25
  60. package/lib/dynamic-load/permissionset.js.map +1 -1
  61. package/lib/dynamic-load/preload_data.js +55 -74
  62. package/lib/dynamic-load/preload_data.js.map +1 -1
  63. package/lib/dynamic-load/profile.js +33 -28
  64. package/lib/dynamic-load/profile.js.map +1 -1
  65. package/lib/dynamic-load/query.js +20 -23
  66. package/lib/dynamic-load/query.js.map +1 -1
  67. package/lib/dynamic-load/restrictionRules.js +18 -23
  68. package/lib/dynamic-load/restrictionRules.js.map +1 -1
  69. package/lib/dynamic-load/role.js +12 -8
  70. package/lib/dynamic-load/role.js.map +1 -1
  71. package/lib/dynamic-load/shareRules.js +18 -23
  72. package/lib/dynamic-load/shareRules.js.map +1 -1
  73. package/lib/dynamic-load/tab.js +4 -3
  74. package/lib/dynamic-load/tab.js.map +1 -1
  75. package/lib/dynamic-load/tabs.js +9 -7
  76. package/lib/dynamic-load/tabs.js.map +1 -1
  77. package/lib/dynamic-load/translations.js +23 -17
  78. package/lib/dynamic-load/translations.js.map +1 -1
  79. package/lib/dynamic-load/trigger.js +14 -10
  80. package/lib/dynamic-load/trigger.js.map +1 -1
  81. package/lib/dynamic-load/validation_rule.js +13 -8
  82. package/lib/dynamic-load/validation_rule.js.map +1 -1
  83. package/lib/dynamic-load/workflow.js +38 -25
  84. package/lib/dynamic-load/workflow.js.map +1 -1
  85. package/lib/errors/index.js +2 -1
  86. package/lib/errors/index.js.map +1 -1
  87. package/lib/formula/core.js +105 -91
  88. package/lib/formula/core.js.map +1 -1
  89. package/lib/formula/field_formula.js +26 -20
  90. package/lib/formula/field_formula.js.map +1 -1
  91. package/lib/formula/index.js +26 -26
  92. package/lib/formula/index.js.map +1 -1
  93. package/lib/formula/params.js +1 -1
  94. package/lib/formula/params.js.map +1 -1
  95. package/lib/formula/recompute.js +27 -25
  96. package/lib/formula/recompute.js.map +1 -1
  97. package/lib/formula/simple_params.js +2 -2
  98. package/lib/formula/simple_params.js.map +1 -1
  99. package/lib/formula/util.js +33 -23
  100. package/lib/formula/util.js.map +1 -1
  101. package/lib/index.d.ts +0 -1
  102. package/lib/index.js +15 -16
  103. package/lib/index.js.map +1 -1
  104. package/lib/metadata-register/_base.d.ts +1 -0
  105. package/lib/metadata-register/_base.js +45 -15
  106. package/lib/metadata-register/_base.js.map +1 -1
  107. package/lib/metadata-register/app.js +8 -8
  108. package/lib/metadata-register/chart.js +1 -1
  109. package/lib/metadata-register/chart.js.map +1 -1
  110. package/lib/metadata-register/index.js +72 -72
  111. package/lib/metadata-register/index.js.map +1 -1
  112. package/lib/metadata-register/layout.js +18 -16
  113. package/lib/metadata-register/layout.js.map +1 -1
  114. package/lib/metadata-register/object.d.ts +0 -1
  115. package/lib/metadata-register/object.js +17 -35
  116. package/lib/metadata-register/object.js.map +1 -1
  117. package/lib/metadata-register/page.js +1 -1
  118. package/lib/metadata-register/page.js.map +1 -1
  119. package/lib/metadata-register/permissionFields.js +2 -2
  120. package/lib/metadata-register/permissionFields.js.map +1 -1
  121. package/lib/metadata-register/permissionset.js +6 -6
  122. package/lib/metadata-register/profile.js +6 -6
  123. package/lib/metadata-register/query.js +1 -1
  124. package/lib/metadata-register/query.js.map +1 -1
  125. package/lib/metadata-register/restrictionRules.js +2 -2
  126. package/lib/metadata-register/restrictionRules.js.map +1 -1
  127. package/lib/metadata-register/shareRules.js +2 -2
  128. package/lib/metadata-register/shareRules.js.map +1 -1
  129. package/lib/metadata-register/tab.js +1 -1
  130. package/lib/metadata-register/tab.js.map +1 -1
  131. package/lib/metadata-register/tabs.js +18 -16
  132. package/lib/metadata-register/tabs.js.map +1 -1
  133. package/lib/services/datasourceServiceFactory.d.ts +1 -0
  134. package/lib/services/datasourceServiceFactory.js +51 -0
  135. package/lib/services/datasourceServiceFactory.js.map +1 -0
  136. package/lib/services/helpers/graphql.js +86 -87
  137. package/lib/services/helpers/graphql.js.map +1 -1
  138. package/lib/services/helpers/index.js +2 -2
  139. package/lib/services/helpers/index.js.map +1 -1
  140. package/lib/services/helpers/rest.js +1 -1
  141. package/lib/services/helpers/rest.js.map +1 -1
  142. package/lib/services/index.d.ts +3 -0
  143. package/lib/services/index.js +10 -4
  144. package/lib/services/index.js.map +1 -1
  145. package/lib/services/objectService.d.ts +1 -1
  146. package/lib/services/objectService.js +148 -147
  147. package/lib/services/objectService.js.map +1 -1
  148. package/lib/services/objectServiceDispatcher.js +102 -92
  149. package/lib/services/objectServiceDispatcher.js.map +1 -1
  150. package/lib/{metadata-register/objectServiceManager.d.ts → services/objectServiceFactory.d.ts} +0 -0
  151. package/lib/{metadata-register/objectServiceManager.js → services/objectServiceFactory.js} +5 -5
  152. package/lib/services/objectServiceFactory.js.map +1 -0
  153. package/lib/summary/core.js +51 -44
  154. package/lib/summary/core.js.map +1 -1
  155. package/lib/summary/field_summary.js +21 -16
  156. package/lib/summary/field_summary.js.map +1 -1
  157. package/lib/summary/index.js +25 -22
  158. package/lib/summary/index.js.map +1 -1
  159. package/lib/summary/recompute.js +13 -11
  160. package/lib/summary/recompute.js.map +1 -1
  161. package/lib/ts-types/index.js +3 -3
  162. package/lib/ts-types/index.js.map +1 -1
  163. package/lib/typeorm/driver.js +58 -58
  164. package/lib/typeorm/driver.js.map +1 -1
  165. package/lib/typeorm/index.js +2 -1
  166. package/lib/typeorm/index.js.map +1 -1
  167. package/lib/typeorm/util.js +2 -2
  168. package/lib/typeorm/util.js.map +1 -1
  169. package/lib/types/app.js +41 -35
  170. package/lib/types/app.js.map +1 -1
  171. package/lib/types/config.js +52 -45
  172. package/lib/types/config.js.map +1 -1
  173. package/lib/types/connection.js +20 -18
  174. package/lib/types/connection.js.map +1 -1
  175. package/lib/types/dashboard.js +10 -7
  176. package/lib/types/dashboard.js.map +1 -1
  177. package/lib/types/datasource.d.ts +14 -3
  178. package/lib/types/datasource.js +205 -198
  179. package/lib/types/datasource.js.map +1 -1
  180. package/lib/types/field.d.ts +2 -2
  181. package/lib/types/field.js +6 -6
  182. package/lib/types/field.js.map +1 -1
  183. package/lib/types/field_permission.d.ts +1 -0
  184. package/lib/types/field_permission.js +30 -6
  185. package/lib/types/field_permission.js.map +1 -1
  186. package/lib/types/index.d.ts +1 -0
  187. package/lib/types/index.js +11 -9
  188. package/lib/types/index.js.map +1 -1
  189. package/lib/types/list_view.d.ts +1 -1
  190. package/lib/types/list_view.js +1 -1
  191. package/lib/types/list_view.js.map +1 -1
  192. package/lib/types/object.d.ts +17 -13
  193. package/lib/types/object.js +275 -234
  194. package/lib/types/object.js.map +1 -1
  195. package/lib/types/object_dynamic_load.d.ts +1 -0
  196. package/lib/types/object_dynamic_load.js +129 -164
  197. package/lib/types/object_dynamic_load.js.map +1 -1
  198. package/lib/types/object_events.js +5 -5
  199. package/lib/types/object_events.js.map +1 -1
  200. package/lib/types/object_layouts.js +7 -7
  201. package/lib/types/object_layouts.js.map +1 -1
  202. package/lib/types/object_permission.d.ts +1 -1
  203. package/lib/types/object_permission.js +1 -1
  204. package/lib/types/object_permission.js.map +1 -1
  205. package/lib/types/report.js +10 -7
  206. package/lib/types/report.js.map +1 -1
  207. package/lib/types/restrictionRule.js +11 -11
  208. package/lib/types/restrictionRule.js.map +1 -1
  209. package/lib/types/schema.d.ts +1 -4
  210. package/lib/types/schema.js +41 -30
  211. package/lib/types/schema.js.map +1 -1
  212. package/lib/types/shareRule.js +11 -11
  213. package/lib/types/shareRule.js.map +1 -1
  214. package/lib/types/trigger.js +2 -2
  215. package/lib/types/trigger.js.map +1 -1
  216. package/lib/types/validation_rules.js +5 -5
  217. package/lib/types/validation_rules.js.map +1 -1
  218. package/lib/util/convert.d.ts +2 -0
  219. package/lib/util/convert.js +130 -0
  220. package/lib/util/convert.js.map +1 -0
  221. package/lib/util/field.js +5 -3
  222. package/lib/util/field.js.map +1 -1
  223. package/lib/util/function_expression.js +5 -3
  224. package/lib/util/function_expression.js.map +1 -1
  225. package/lib/util/index.d.ts +2 -7
  226. package/lib/util/index.js +86 -166
  227. package/lib/util/index.js.map +1 -1
  228. package/lib/util/locale.js +5 -3
  229. package/lib/util/locale.js.map +1 -1
  230. package/lib/util/permission_shares.js +2 -2
  231. package/lib/util/permission_shares.js.map +1 -1
  232. package/lib/util/suffix.js +22 -16
  233. package/lib/util/suffix.js.map +1 -1
  234. package/lib/util/transform.js +11 -11
  235. package/lib/util/transform.js.map +1 -1
  236. package/lib/validators/index.js +3 -2
  237. package/lib/validators/index.js.map +1 -1
  238. package/package.json +13 -13
  239. package/server.js +0 -7
  240. package/src/dynamic-load/chart.ts +6 -1
  241. package/src/dynamic-load/index.ts +1 -0
  242. package/src/dynamic-load/object_translations.ts +19 -10
  243. package/src/dynamic-load/package.ts +303 -0
  244. package/src/dynamic-load/page.ts +7 -1
  245. package/src/dynamic-load/permission.ts +1 -5
  246. package/src/dynamic-load/preload_data.ts +2 -3
  247. package/src/dynamic-load/query.ts +6 -1
  248. package/src/dynamic-load/restrictionRules.ts +6 -2
  249. package/src/dynamic-load/shareRules.ts +5 -1
  250. package/src/dynamic-load/translations.ts +3 -1
  251. package/src/index.ts +0 -1
  252. package/src/metadata-register/_base.ts +23 -0
  253. package/src/metadata-register/object.ts +1 -20
  254. package/src/services/datasourceServiceFactory.ts +37 -0
  255. package/src/services/helpers/graphql.ts +5 -3
  256. package/src/services/index.ts +7 -0
  257. package/src/services/objectService.ts +9 -7
  258. package/src/services/objectServiceDispatcher.ts +6 -2
  259. package/src/{metadata-register/objectServiceManager.ts → services/objectServiceFactory.ts} +4 -4
  260. package/src/types/datasource.ts +81 -80
  261. package/src/types/field.ts +2 -2
  262. package/src/types/field_permission.ts +16 -0
  263. package/src/types/index.ts +1 -0
  264. package/src/types/list_view.ts +1 -1
  265. package/src/types/object.ts +71 -37
  266. package/src/types/object_dynamic_load.ts +14 -48
  267. package/src/types/object_permission.ts +1 -1
  268. package/src/types/schema.ts +11 -14
  269. package/src/util/convert.ts +130 -0
  270. package/src/util/index.ts +6 -120
  271. package/lib/graphql/index.d.ts +0 -3
  272. package/lib/graphql/index.js +0 -374
  273. package/lib/graphql/index.js.map +0 -1
  274. package/lib/graphql/utils.d.ts +0 -7
  275. package/lib/graphql/utils.js +0 -67
  276. package/lib/graphql/utils.js.map +0 -1
  277. package/lib/metadata-register/objectServiceManager.js.map +0 -1
  278. package/src/graphql/index.ts +0 -361
  279. package/src/graphql/utils.ts +0 -61
@@ -28,8 +28,7 @@ import {
28
28
  addAllConfigFiles
29
29
  } from '.';
30
30
  import { SteedosDriverConfig } from '../driver';
31
- import { createObjectService } from '../metadata-register/objectServiceManager';
32
- import { getObjectDispatcher } from '../services/index';
31
+ import { getObjectDispatcher, createObjectService, createDataSourceService } from '../services/index';
33
32
  import path = require('path');
34
33
  let Fiber = require('fibers');
35
34
  declare var Creator: any;
@@ -87,6 +86,21 @@ export class SteedosDataSourceType implements Dictionary {
87
86
  private _locale?: string;
88
87
  private _schema: SteedosSchema;
89
88
  private _objects: Dictionary<SteedosObjectType> = {};
89
+ private _cacheObjects?: Array<SteedosObjectType> = [];
90
+ public get cacheObjects(): any {
91
+ return this._cacheObjects;
92
+ }
93
+ public set cacheObjects(value: any) {
94
+ this._cacheObjects = value;
95
+ }
96
+ private _service?: any;
97
+ public get service(): any {
98
+ return this._service;
99
+ }
100
+ public set service(value: any) {
101
+ this._service = value;
102
+ }
103
+
90
104
  private _objectsConfig: Dictionary<SteedosObjectTypeConfig> = {};
91
105
  private _objectsRolesPermission: Dictionary<Dictionary<SteedosObjectPermissionType>> = {};
92
106
  private _objectsSpaceRolesPermission: Dictionary<Dictionary<Dictionary<SteedosObjectPermissionType>>> = {};
@@ -110,10 +124,19 @@ export class SteedosDataSourceType implements Dictionary {
110
124
  }
111
125
 
112
126
  async getObjects() {
113
- if(!this.schema.metadataRegister){
114
- return this._objects
115
- }
116
- return await this.schema.metadataRegister.getObjectsConfig(this.name);
127
+ // if(!this.schema.metadataRegister){
128
+ // return this._objects
129
+ // }
130
+ // return await this.schema.metadataRegister.getObjectsConfig(this.name);
131
+ return this.getCacheObjects();
132
+ }
133
+
134
+ getCacheObjects() {
135
+ return this.cacheObjects;
136
+ }
137
+
138
+ async flushCacheObjects() {
139
+ this.cacheObjects = await this.schema.metadataRegister.getObjectsConfig(this.name);
117
140
  }
118
141
 
119
142
  getLocalObjects() {
@@ -147,7 +170,17 @@ export class SteedosDataSourceType implements Dictionary {
147
170
  async setObject(objectApiName: string, objectConfig: SteedosObjectTypeConfig) {
148
171
  const serviceName = getObjectServiceName(objectApiName)
149
172
  let object = new SteedosObjectType(objectApiName, this, objectConfig)
173
+
150
174
  this._objectsConfig[objectApiName] = objectConfig;
175
+
176
+ const findIndex = _.findIndex(this.cacheObjects, (item: any) => { return item?.metadata?.name === objectApiName });
177
+
178
+ if (findIndex != -1) {
179
+ this.cacheObjects[findIndex] = Object.assign({ service: { name: serviceName } }, { metadata: objectConfig });
180
+ } else {
181
+ this.cacheObjects.push(Object.assign({ service: { name: serviceName } }, { metadata: objectConfig }));
182
+ }
183
+
151
184
  this._objects[objectApiName] = object;
152
185
  await createObjectService(this._schema.metadataBroker, serviceName, objectConfig)
153
186
  return object;
@@ -206,71 +239,32 @@ export class SteedosDataSourceType implements Dictionary {
206
239
  }
207
240
  }
208
241
 
209
- async initObjects(){
242
+ async initObject(objectConfig) {
243
+ //从本地对象配置中读取触发器配置
244
+ const localObjectConfig = getObjectConfig(objectConfig.name);
245
+ if (localObjectConfig) {
246
+ objectConfig.listeners = localObjectConfig.listeners;
247
+ objectConfig.methods = localObjectConfig.methods;
248
+ }
249
+ if (this.name === "meteor") {
250
+ try {
251
+ const _db = Creator.createCollection(objectConfig)
252
+ Creator.Collections[_db._name] = _db
253
+ } catch (error) {
254
+ // console.log(`error`, error) //此处无需打印日志,@steedos/core 在init Creator 时,会兼容此部分的异常逻辑。
255
+ }
256
+ }
257
+ await this.setObject(objectConfig.name, objectConfig);
258
+ }
259
+
260
+ async initObjects() {
210
261
  // 从缓存中加载所有本数据源对象到datasource中
211
- let objects: Array<any> = await this.getObjects();
262
+ let objects: Array<any> = this.cacheObjects;
212
263
  let self = this;
213
264
  for await (const object of _.values(objects)) {
214
265
  const objectConfig = object.metadata;
215
- //从本地对象配置中读取触发器配置
216
- const localObjectConfig = getObjectConfig(objectConfig.name);
217
- if(localObjectConfig){
218
- objectConfig.listeners = localObjectConfig.listeners;
219
- objectConfig.methods = localObjectConfig.methods;
220
- }
221
- // if(self._schema.metadataBroker){
222
- // const res = await self._schema.metadataRegister.object(object)
223
- // if(res){
224
- // self.setObject(object.name, object);
225
- // }
226
- // }else{
227
- // self.setObject(object.name, object);
228
- // }
229
- await self.setObject(objectConfig.name, objectConfig);
230
-
231
- if(this.name === "default"){
232
- try {
233
- const _db = Creator.createCollection(objectConfig)
234
- Creator.Collections[_db._name] = _db
235
- } catch (error) {
236
- // console.log(`error`, error) //此处无需打印日志,@steedos/core 在init Creator 时,会兼容此部分的异常逻辑。
237
- }
238
- }
266
+ await self.initObject(objectConfig)
239
267
  }
240
-
241
- // _.each(objects, (object) => {
242
- // const obj = this.getObject(object.name);
243
- // if(obj){
244
- // // 加try catch是因为有错误时不应该影响下一个对象加载
245
- // try{
246
- // obj.initMasterDetails();
247
- // }
248
- // catch(ex){
249
- // console.error(ex);
250
- // }
251
- // }
252
- // });
253
-
254
- // _.each(objects, (object) => {
255
- // const obj = this.getObject(object.name);
256
- // if(obj){
257
- // // 加try catch是因为有错误时不应该影响下一个对象加载
258
- // try{
259
- // obj.checkMasterDetails();
260
- // }
261
- // catch(ex){
262
- // console.error(ex);
263
- // }
264
- // }
265
- // });
266
-
267
- _.each(this.config.objectsRolesPermission, (objectRolesPermission, object_name) => {
268
- _.each(objectRolesPermission, (objectRolePermission, role_name) => {
269
- objectRolePermission.name = role_name
270
- this.setObjectPermission(object_name, objectRolePermission)
271
- })
272
- })
273
-
274
268
  return true;
275
269
  }
276
270
 
@@ -436,14 +430,6 @@ export class SteedosDataSourceType implements Dictionary {
436
430
  return this._schema;
437
431
  }
438
432
 
439
- buildGraphQLSchema() {
440
- return this._schema.buildGraphQLSchema();
441
- }
442
-
443
- getGraphQLSchema() {
444
- return this._schema.getGraphQLSchema();
445
- }
446
-
447
433
  async dropEntities() {
448
434
  if (this._adapter.dropEntities) {
449
435
  return await this._adapter.dropEntities();
@@ -469,15 +455,30 @@ export class SteedosDataSourceType implements Dictionary {
469
455
  }
470
456
 
471
457
  async init() {
472
- await this.initObjects();
473
- await this.initTypeORM();
474
- // initObjectFieldsSummarys(this.name);
475
- // this.schema.transformReferenceOfObject(this);
458
+ // await this.flushCacheObjects();
459
+ // await this.initObjects();
460
+ this.initObjectPermissions();
461
+ if (!this.service) {
462
+ const broker = this._schema.metadataBroker
463
+ this.service = await createDataSourceService(broker, this)
464
+ }
465
+ }
466
+
467
+ /**
468
+ * 初始化数据源上配置的对象权限。
469
+ */
470
+ initObjectPermissions() {
471
+ _.each(this.config.objectsRolesPermission, (objectRolesPermission, object_name) => {
472
+ _.each(objectRolesPermission, (objectRolePermission, role_name) => {
473
+ objectRolePermission.name = role_name
474
+ this.setObjectPermission(object_name, objectRolePermission)
475
+ })
476
+ })
476
477
  }
477
478
 
478
- async initTypeORM() {
479
+ initTypeORM() {
479
480
  const _objects = {};
480
- _.map(await this.getObjects(), (item)=>{
481
+ _.map(this.cacheObjects, (item) => {
481
482
  if(item && item.metadata){
482
483
  _objects[item.metadata.name] = item.metadata
483
484
  }
@@ -52,7 +52,7 @@ abstract class SteedosFieldProperties{
52
52
  object_name?: string
53
53
  name?: string
54
54
  column_name?: string
55
- type?: string
55
+ abstract type?: string
56
56
  primary?: boolean
57
57
  generated?: true
58
58
  label?: string
@@ -88,7 +88,7 @@ abstract class SteedosFieldProperties{
88
88
  reference_limit?: number
89
89
  is_company_limited?: boolean
90
90
  system?: string;
91
- fieldDBType?: SteedosFieldDBType | string
91
+ abstract fieldDBType: SteedosFieldDBType | string
92
92
  formula?: string
93
93
  data_type?: string
94
94
  formula_blank_value?: string
@@ -23,4 +23,20 @@ export class FieldPermission {
23
23
  })
24
24
  return result;
25
25
  }
26
+
27
+ static async getObjectsFieldsPermissionGroupRole() {
28
+ const permissions = await this.getObjectFieldsPermission('*', '*');
29
+ const result = {};
30
+ _.each(permissions, (permission) => {
31
+ if (!result[permission.object_name]) {
32
+ result[permission.object_name] = {};
33
+ }
34
+ const { permission_set_id, field, editable, readable } = permission.metadata;
35
+ if (!result[permission.object_name][permission_set_id]) {
36
+ result[permission.object_name][permission_set_id] = [];
37
+ }
38
+ result[permission.object_name][permission_set_id].push({ field: field, read: readable, edit: editable })
39
+ })
40
+ return result;
41
+ }
26
42
  }
@@ -7,6 +7,7 @@ export * from "./dashboard";
7
7
  export * from "./object";
8
8
  export * from "./connection";
9
9
  export * from "./object_layouts";
10
+ export * from "./field_permission";
10
11
  export { SteedosFieldType, SteedosFieldTypeConfig } from "./field";
11
12
  export { SteedosListenerConfig } from './listeners'
12
13
  export { SteedosTriggerType } from './trigger'
@@ -2,7 +2,7 @@ import { SteedosObjectType } from ".";
2
2
  import _ = require('underscore')
3
3
 
4
4
  abstract class SteedosObjectListViewTypeProperties{
5
- name?: string
5
+ abstract name?: string
6
6
  label?: string
7
7
  type?: string
8
8
  filter_scope?: string
@@ -58,9 +58,9 @@ export const getRepeatObjectNameFromPaths = (paths: string[]) => {
58
58
 
59
59
  abstract class SteedosObjectProperties {
60
60
  _id?: string
61
- name?: string
61
+ abstract name?: string
62
62
  extend?: string
63
- table_name?: string
63
+ abstract table_name?: string
64
64
  label?: string
65
65
  icon?: string
66
66
  enable_search?: boolean
@@ -70,11 +70,11 @@ abstract class SteedosObjectProperties {
70
70
  enable_notes?: boolean
71
71
  enable_events?: boolean
72
72
  enable_api?: boolean //TODO 未开放功能
73
- enable_share?: boolean
74
- enable_instances?: boolean
73
+ abstract enable_share?: boolean
74
+ abstract enable_instances?: boolean
75
75
  enable_chatter?: boolean
76
- enable_audit?: boolean
77
- enable_trash?: boolean
76
+ abstract enable_audit?: boolean
77
+ abstract enable_trash?: boolean
78
78
  enable_space_global?: boolean
79
79
  enable_tree?: boolean
80
80
  parent_field?: string
@@ -91,10 +91,10 @@ abstract class SteedosObjectProperties {
91
91
  // triggers?: object
92
92
  sidebar?: object //TODO
93
93
  calendar?: object //TODO
94
- actions?: Dictionary<SteedosActionTypeConfig>
95
- fields?: Dictionary<SteedosFieldTypeConfig>
96
- listeners?: Dictionary<SteedosListenerConfig>
97
- list_views?: Dictionary<SteedosObjectListViewTypeConfig>
94
+ abstract actions?: Dictionary<SteedosActionTypeConfig>
95
+ abstract fields?: Dictionary<SteedosFieldTypeConfig>
96
+ abstract listeners?: Dictionary<SteedosListenerConfig>
97
+ abstract list_views?: Dictionary<SteedosObjectListViewTypeConfig>
98
98
  permissions?: Dictionary<SteedosObjectPermissionTypeConfig>
99
99
  methods?: Dictionary<Function>
100
100
  fields_serial_number?: number
@@ -107,7 +107,7 @@ export interface SteedosObjectTypeConfig extends SteedosObjectProperties {
107
107
  name?: string
108
108
  isMain?: boolean
109
109
  datasource?: string
110
- fields: Dictionary<SteedosFieldTypeConfig>
110
+ fields?: Dictionary<SteedosFieldTypeConfig>
111
111
  actions?: Dictionary<SteedosActionTypeConfig>
112
112
  listeners?: Dictionary<SteedosListenerConfig>
113
113
  permission_set?: Dictionary<SteedosObjectPermissionTypeConfig> //TODO remove ; 目前为了兼容现有object的定义保留
@@ -609,7 +609,7 @@ export class SteedosObjectType extends SteedosObjectProperties {
609
609
  return globalPermission
610
610
  }
611
611
 
612
- async getUserObjectPermission(userSession: SteedosUserSession) {
612
+ async getUserObjectPermission(userSession: SteedosUserSession, rolesFieldsPermission?: any) {
613
613
 
614
614
  if (!userSession) {
615
615
  throw new Error('userSession is required')
@@ -649,7 +649,9 @@ export class SteedosObjectType extends SteedosObjectProperties {
649
649
  throw new Error('not find user permission');
650
650
  }
651
651
 
652
- const rolesFieldsPermission = await FieldPermission.getObjectFieldsPermissionGroupRole(this.name);
652
+ if (!rolesFieldsPermission) {
653
+ rolesFieldsPermission = await FieldPermission.getObjectFieldsPermissionGroupRole(this.name);
654
+ }
653
655
 
654
656
  roles.forEach((role) => {
655
657
  let rolePermission = objectRolesPermission[role];
@@ -926,6 +928,13 @@ export class SteedosObjectType extends SteedosObjectProperties {
926
928
  return await this.callMetadataObjectServiceAction(`getLookupDetailsInfo`, {objectApiName: this.name});
927
929
  }
928
930
 
931
+ /**
932
+ * 此函数返回getDetailsInfo、getMastersInfo、getLookupDetailsInfo 3个请求的结果,用于优化访问速度
933
+ */
934
+ async getRelationsInfo() {
935
+ return await this.callMetadataObjectServiceAction(`getRelationsInfo`, { objectApiName: this.name });
936
+ }
937
+
929
938
  async getRecordPermissions(record, userSession){
930
939
  const permissions = await this.getUserObjectPermission(userSession);
931
940
  const { userId, company_ids: user_company_ids } = userSession;
@@ -985,22 +994,39 @@ export class SteedosObjectType extends SteedosObjectProperties {
985
994
  return permissions
986
995
  }
987
996
 
988
- async getRecordView(userSession){
997
+ async getRecordView(userSession, context?: any) {
998
+ let objectConfig;
999
+ let layouts;
1000
+ let spaceProcessDefinition;
1001
+ let dbListViews;
1002
+ let rolesFieldsPermission;
1003
+
1004
+ if (context) {
1005
+ objectConfig = context.objectConfig;
1006
+ layouts = context.layouts;
1007
+ spaceProcessDefinition = context.spaceProcessDefinition;
1008
+ dbListViews = context.dbListViews;
1009
+ rolesFieldsPermission = context.rolesFieldsPermission;
1010
+ }
1011
+
989
1012
  const lng = userSession.language;
990
- const objectMetadataConfig: any = await this.callMetadataObjectServiceAction('get', {objectApiName: this.name});
991
- let objectConfig = objectMetadataConfig.metadata;
1013
+ if (!objectConfig) {
1014
+ const objectMetadataConfig: any = await this.callMetadataObjectServiceAction('get', { objectApiName: this.name });
1015
+ objectConfig = objectMetadataConfig.metadata;
1016
+ }
992
1017
  objectConfig.name = this.name
993
1018
  objectConfig.datasource = this.datasource.name;
994
- objectConfig.permissions = await this.getUserObjectPermission(userSession);
995
- objectConfig.details = await this.getDetailsInfo();
996
- objectConfig.masters = await this.getMastersInfo();
997
- objectConfig.lookup_details = await this.getLookupDetailsInfo();
998
-
1019
+ objectConfig.permissions = await this.getUserObjectPermission(userSession, rolesFieldsPermission);
1020
+ const relationsInfo = await this.getRelationsInfo();
1021
+ objectConfig.details = relationsInfo.details;
1022
+ objectConfig.masters = relationsInfo.masters;
1023
+ objectConfig.lookup_details = relationsInfo.lookup_details;
999
1024
  delete objectConfig.db
1000
1025
 
1001
1026
  translationObject(lng, objectConfig.name, objectConfig, true);
1002
-
1003
- const layouts = await getObjectLayouts(userSession.profile, userSession.spaceId, this.name);
1027
+ if (!layouts) {
1028
+ layouts = await getObjectLayouts(userSession.profile, userSession.spaceId, this.name);
1029
+ }
1004
1030
  if(layouts && layouts.length > 0){
1005
1031
  const layout = layouts[0];
1006
1032
  let _fields = {};
@@ -1084,24 +1110,31 @@ export class SteedosObjectType extends SteedosObjectProperties {
1084
1110
  const userObjectFields = objectConfig.fields;
1085
1111
  _.each(objectConfig.permissions.field_permissions, (field_permission, field) => {
1086
1112
  const { read, edit } = field_permission;
1087
- if (read) {
1088
- userObjectFields[field].omit = true;
1089
- }
1090
- if (edit) {
1091
- userObjectFields[field].omit = false;
1092
- userObjectFields[field].hidden = false;
1093
- userObjectFields[field].readonly = false;
1094
- userObjectFields[field].disabled = false;
1095
- }
1096
- if (!read && !edit) {
1097
- delete userObjectFields[field]
1113
+ if (userObjectFields[field]) {
1114
+ if (read) {
1115
+ userObjectFields[field].hidden = false;
1116
+ userObjectFields[field].omit = true;
1117
+ userObjectFields[field].readonly = true;
1118
+ userObjectFields[field].disabled = true;
1119
+ }
1120
+ if (edit) {
1121
+ userObjectFields[field].omit = false;
1122
+ userObjectFields[field].hidden = false;
1123
+ userObjectFields[field].readonly = false;
1124
+ userObjectFields[field].disabled = false;
1125
+ }
1126
+ if (!read && !edit) {
1127
+ delete userObjectFields[field]
1128
+ }
1098
1129
  }
1099
1130
  })
1100
1131
 
1101
1132
  objectConfig.fields = userObjectFields
1102
1133
 
1103
1134
  // TODO object layout 是否需要控制审批记录显示?
1104
- let spaceProcessDefinition = await getObject("process_definition").directFind({ filters: [['space', '=', userSession.spaceId], ['object_name', '=', this.name], ['active', '=', true]] })
1135
+ if (!spaceProcessDefinition) {
1136
+ spaceProcessDefinition = await getObject("process_definition").directFind({ filters: [['space', '=', userSession.spaceId], ['object_name', '=', this.name], ['active', '=', true]] })
1137
+ }
1105
1138
  if (spaceProcessDefinition.length > 0) {
1106
1139
  objectConfig.enable_process = true
1107
1140
  }
@@ -1113,8 +1146,9 @@ export class SteedosObjectType extends SteedosObjectProperties {
1113
1146
  delete objectConfig.triggers[key];
1114
1147
  }
1115
1148
  })
1116
-
1117
- const dbListViews = await getObject("object_listviews").find({ filters: [['space', '=', userSession.spaceId], ['object_name', '=', this.name], [['owner', '=', userSession.userId], 'or', ['shared', '=', true]]] })
1149
+ if (!dbListViews) {
1150
+ dbListViews = await getObject("object_listviews").directFind({ filters: [['space', '=', userSession.spaceId], ['object_name', '=', this.name], [['owner', '=', userSession.userId], 'or', ['shared', '=', true]]] })
1151
+ }
1118
1152
  objectConfig.list_views = Object.assign({}, objectConfig.list_views)
1119
1153
  _.each(dbListViews, function(dbListView){
1120
1154
  delete dbListView.created;
@@ -3,7 +3,7 @@ import path = require('path')
3
3
  import { SteedosObjectTypeConfig, SteedosObjectPermissionTypeConfig, SteedosActionTypeConfig, getDataSource } from '.'
4
4
  // import { isMeteor } from '../util'
5
5
  import { Dictionary } from '@salesforce/ts-types';
6
- import { loadObjectFields, loadObjectListViews, loadObjectButtons, loadObjectMethods, loadObjectActions, loadObjectTriggers, addObjectListenerConfig, loadObjectLayouts, getLazyLoadFields, getLazyLoadButtons, loadObjectPermissions, loadSourceProfiles, loadSourcePermissionset, loadObjectValidationRules, loadSourceRoles, loadSourceFlowRoles, loadSourceApprovalProcesses, loadSourceWorkflows, loadStandardProfiles, loadStandardPermissionsets, preloadDBObjectFields, preloadDBObjectButtons, preloadDBApps, preloadDBObjectLayouts, preloadDBTabs, preloadDBShareRules, preloadDBRestrictionRules, preloadDBPermissionFields } from '../dynamic-load'
6
+ import { addObjectListenerConfig, loadObjectLayouts, loadSourceProfiles, loadSourcePermissionset, loadObjectValidationRules, loadSourceRoles, loadSourceFlowRoles, loadSourceApprovalProcesses, loadSourceWorkflows, loadStandardProfiles, loadStandardPermissionsets, preloadDBObjectFields, preloadDBObjectButtons, preloadDBApps, preloadDBObjectLayouts, preloadDBTabs, preloadDBShareRules, preloadDBRestrictionRules, preloadDBPermissionFields, loadPackageMetadatas } from '../dynamic-load'
7
7
  import { transformListenersToTriggers } from '..';
8
8
  import { getSteedosSchema } from './schema';
9
9
 
@@ -24,6 +24,7 @@ const _routers: Array<any> = [];
24
24
  const _objectsData: Dictionary<any> = {};
25
25
  const delayLoadExtendObjectConfigQueue: Dictionary<any> = {};
26
26
  let standardObjectsLoaded: boolean = false;
27
+ let dbMetadataLoaing: boolean = false;
27
28
 
28
29
  const addDelayLoadExtendObjectConfig = function (extend: string, config: SteedosObjectTypeConfig){
29
30
  if(!delayLoadExtendObjectConfigQueue[extend]){
@@ -93,54 +94,12 @@ export const addObjectConfigFiles = async (filePath: string, datasource: string,
93
94
  if (!datasource)
94
95
  datasource = 'meteor'
95
96
 
96
- let objectJsons = util.loadObjects(filePath);
97
- for await (const element of objectJsons) {
98
- let startNo = 10;
99
- _.each(element.fields, function(field){
100
- if(!_.has(field, 'sort_no')){
101
- field.sort_no = startNo;
102
- startNo = startNo + 10;
103
- }
104
- })
105
- if(!element.fields){
106
- element.fields = {}
107
- }
108
- _.each(getLazyLoadFields(element.name), function(field){
109
- util.extend(element.fields, {[field.name]: field})
110
- })
111
- if(!element.actions){
112
- element.actions = {}
113
- }
114
- _.each(getLazyLoadButtons(element.name), function(action){
115
- util.extend(element.actions, {[action.name]: action})
116
- })
117
- let _mf = _.maxBy(_.values(element.fields), function (field) { return field.sort_no; });
118
- if(_mf && element.name){
119
- element.fields_serial_number = _mf.sort_no + 10;
120
- }
121
- await addObjectConfig(element, datasource, serviceName);
122
- }
123
-
124
- await loadObjectFields(filePath, serviceName);
125
-
126
- await loadObjectListViews(filePath, serviceName);
127
-
128
- await loadObjectButtons(filePath, serviceName);
129
-
130
- loadObjectTriggers(filePath);
131
-
132
- await loadObjectActions(filePath, serviceName);
133
-
134
- loadObjectMethods(filePath); //此功能不支持微服务模式
97
+ await loadPackageMetadatas(filePath, datasource, serviceName)
135
98
 
136
99
  await loadObjectLayouts(filePath, serviceName);
137
-
138
- await loadObjectPermissions(filePath, serviceName);
139
-
100
+ // await loadObjectPermissions(filePath, serviceName);
140
101
  await loadSourceProfiles(filePath, serviceName);
141
-
142
102
  await loadSourcePermissionset(filePath, serviceName);
143
-
144
103
  loadObjectValidationRules(filePath);
145
104
 
146
105
  loadSourceRoles(filePath);
@@ -323,10 +282,17 @@ export const removeObjectListenerConfig = (_id, listenTo, when)=>{
323
282
  }
324
283
  }
325
284
 
326
- export const loadStandardMetadata = async (serviceName: string, datasourceApiName: string) =>{
327
- await loadStandardProfiles(serviceName);
328
- await loadStandardPermissionsets(serviceName);
285
+ export const loadStandardMetadata = async (serviceName: string, datasourceApiName: string) => {
329
286
  await loadStandardBaseObjects(serviceName);
287
+ if (dbMetadataLoaing != true) {
288
+ dbMetadataLoaing = true;
289
+ await loadStandardProfiles(serviceName);
290
+ await loadStandardPermissionsets(serviceName);
291
+ await loadDbMetadatas(datasourceApiName);
292
+ }
293
+ }
294
+
295
+ export const loadDbMetadatas = async (datasourceApiName: string) => {
330
296
  if(datasourceApiName === 'default' || datasourceApiName === 'meteor'){
331
297
  const datasource = getDataSource(datasourceApiName)
332
298
  if(datasource && datasourceApiName === 'default'){
@@ -1,7 +1,7 @@
1
1
  import _ = require('underscore')
2
2
 
3
3
  abstract class SteedosObjectPermissionTypeProperties {
4
- name?: string
4
+ abstract name?: string
5
5
  object_name?: string
6
6
  allowRead?: boolean
7
7
  allowCreate?: boolean
@@ -7,7 +7,6 @@ import { getFromContainer } from 'typeorm';
7
7
  // import { loadCoreValidators } from '../validators';
8
8
  // import { loadStandardBaseObjects } from './object_dynamic_load';
9
9
  // import { preloadDBObjectFields, preloadDBObjectButtons } from '../dynamic-load';
10
- import { buildGraphQLSchema } from '../graphql';
11
10
  import { MetadataRegister } from '../metadata-register';
12
11
  import { MetadataDriver } from '../driver/metadata';
13
12
 
@@ -22,7 +21,6 @@ export type SteedosSchemaConfig = {
22
21
  export class SteedosSchema {
23
22
  private _datasources: Dictionary<SteedosDataSourceType> = {};
24
23
  private _objectsMap: Dictionary<{ datasourceName: string, filePath?: string }> = {};
25
- private graphQLSchema: any = null;
26
24
  private _broker: any = null;
27
25
  private _metadataBroker: any = null;
28
26
  metadataRegister: MetadataRegister = null;
@@ -230,19 +228,18 @@ export class SteedosSchema {
230
228
  return this._datasources
231
229
  }
232
230
 
233
- buildGraphQLSchema() {
234
- this.graphQLSchema = buildGraphQLSchema(this);
235
- }
236
-
237
- getGraphQLSchema() {
238
- if (!this.graphQLSchema) {
239
- this.buildGraphQLSchema();
240
- }
241
- return this.graphQLSchema;
242
- }
243
-
244
231
  async getAllObject() {
245
- return await this.metadataBroker.call("objects.getAll");
232
+ let schemaObjects = [];
233
+ const datasources = this.getDataSources();
234
+ for (const name in datasources) {
235
+ const datasource = datasources[name]
236
+ const datasourceObjects = await datasource.getObjects();
237
+ if (datasourceObjects && datasourceObjects.length > 0) {
238
+ schemaObjects = schemaObjects.concat(datasourceObjects);
239
+ }
240
+ }
241
+ return schemaObjects;
242
+ // return await this.metadataBroker.call("objects.getAll");
246
243
  }
247
244
  }
248
245