@steedos/objectql 2.2.55-beta.7 → 2.3.0-beta.10

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 (222) hide show
  1. package/lib/actions/field_updates.js +36 -50
  2. package/lib/actions/field_updates.js.map +1 -1
  3. package/lib/actions/workflow_notifications.d.ts +0 -12
  4. package/lib/actions/workflow_notifications.js +14 -31
  5. package/lib/actions/workflow_notifications.js.map +1 -1
  6. package/lib/actions/workflow_rule.js +33 -54
  7. package/lib/actions/workflow_rule.js.map +1 -1
  8. package/lib/broker.js +5 -5
  9. package/lib/broker.js.map +1 -1
  10. package/lib/driver/driver.d.ts +0 -38
  11. package/lib/driver/field-encrytion/index.js +0 -7
  12. package/lib/driver/field-encrytion/index.js.map +1 -1
  13. package/lib/driver/field-encrytion/mongosharedconst.js +4 -20
  14. package/lib/driver/field-encrytion/mongosharedconst.js.map +1 -1
  15. package/lib/driver/fieldDBType.js +0 -4
  16. package/lib/driver/fieldDBType.js.map +1 -1
  17. package/lib/driver/format.d.ts +0 -12
  18. package/lib/driver/format.js +0 -12
  19. package/lib/driver/format.js.map +1 -1
  20. package/lib/driver/metadata.js +2 -10
  21. package/lib/driver/metadata.js.map +1 -1
  22. package/lib/driver/meteorMongo.js +32 -36
  23. package/lib/driver/meteorMongo.js.map +1 -1
  24. package/lib/driver/mongo.d.ts +0 -3
  25. package/lib/driver/mongo.js +59 -64
  26. package/lib/driver/mongo.js.map +1 -1
  27. package/lib/driver/mysql.js +1 -8
  28. package/lib/driver/mysql.js.map +1 -1
  29. package/lib/driver/oracle.js +3 -11
  30. package/lib/driver/oracle.js.map +1 -1
  31. package/lib/driver/postgres.js +1 -8
  32. package/lib/driver/postgres.js.map +1 -1
  33. package/lib/driver/sqlite3.js +1 -8
  34. package/lib/driver/sqlite3.js.map +1 -1
  35. package/lib/driver/sqlserver.js +3 -10
  36. package/lib/driver/sqlserver.js.map +1 -1
  37. package/lib/dynamic-load/actions.js +26 -27
  38. package/lib/dynamic-load/actions.js.map +1 -1
  39. package/lib/dynamic-load/approval_process.js +0 -1
  40. package/lib/dynamic-load/approval_process.js.map +1 -1
  41. package/lib/dynamic-load/button.js +13 -13
  42. package/lib/dynamic-load/button.js.map +1 -1
  43. package/lib/dynamic-load/chart.js +3 -3
  44. package/lib/dynamic-load/chart.js.map +1 -1
  45. package/lib/dynamic-load/client_script.js +0 -24
  46. package/lib/dynamic-load/client_script.js.map +1 -1
  47. package/lib/dynamic-load/field.js +13 -13
  48. package/lib/dynamic-load/field.js.map +1 -1
  49. package/lib/dynamic-load/layout.js +16 -16
  50. package/lib/dynamic-load/layout.js.map +1 -1
  51. package/lib/dynamic-load/listview.js +13 -13
  52. package/lib/dynamic-load/listview.js.map +1 -1
  53. package/lib/dynamic-load/object_translations.js +8 -20
  54. package/lib/dynamic-load/object_translations.js.map +1 -1
  55. package/lib/dynamic-load/package.d.ts +0 -8
  56. package/lib/dynamic-load/package.js +83 -95
  57. package/lib/dynamic-load/package.js.map +1 -1
  58. package/lib/dynamic-load/page.js +3 -3
  59. package/lib/dynamic-load/page.js.map +1 -1
  60. package/lib/dynamic-load/permission.js +24 -25
  61. package/lib/dynamic-load/permission.js.map +1 -1
  62. package/lib/dynamic-load/permissionset.js +22 -23
  63. package/lib/dynamic-load/permissionset.js.map +1 -1
  64. package/lib/dynamic-load/preload_data.js +73 -73
  65. package/lib/dynamic-load/preload_data.js.map +1 -1
  66. package/lib/dynamic-load/profile.js +22 -25
  67. package/lib/dynamic-load/profile.js.map +1 -1
  68. package/lib/dynamic-load/query.js +3 -3
  69. package/lib/dynamic-load/query.js.map +1 -1
  70. package/lib/dynamic-load/restrictionRules.js +3 -3
  71. package/lib/dynamic-load/restrictionRules.js.map +1 -1
  72. package/lib/dynamic-load/shareRules.js +3 -3
  73. package/lib/dynamic-load/shareRules.js.map +1 -1
  74. package/lib/dynamic-load/tab.js +4 -4
  75. package/lib/dynamic-load/tab.js.map +1 -1
  76. package/lib/dynamic-load/tabs.d.ts +0 -3
  77. package/lib/dynamic-load/tabs.js +4 -7
  78. package/lib/dynamic-load/tabs.js.map +1 -1
  79. package/lib/dynamic-load/translations.js +17 -28
  80. package/lib/dynamic-load/translations.js.map +1 -1
  81. package/lib/dynamic-load/trigger.d.ts +0 -5
  82. package/lib/dynamic-load/trigger.js +0 -29
  83. package/lib/dynamic-load/trigger.js.map +1 -1
  84. package/lib/errors/index.js +1 -25
  85. package/lib/errors/index.js.map +1 -1
  86. package/lib/formula/core.d.ts +4 -67
  87. package/lib/formula/core.js +132 -238
  88. package/lib/formula/core.js.map +1 -1
  89. package/lib/formula/field_formula.d.ts +0 -23
  90. package/lib/formula/field_formula.js +12 -36
  91. package/lib/formula/field_formula.js.map +1 -1
  92. package/lib/formula/index.d.ts +3 -3
  93. package/lib/formula/index.js +24 -37
  94. package/lib/formula/index.js.map +1 -1
  95. package/lib/formula/params.js +23 -48
  96. package/lib/formula/params.js.map +1 -1
  97. package/lib/formula/recompute.d.ts +0 -8
  98. package/lib/formula/recompute.js +35 -51
  99. package/lib/formula/recompute.js.map +1 -1
  100. package/lib/formula/simple_params.js +10 -10
  101. package/lib/formula/simple_params.js.map +1 -1
  102. package/lib/formula/type.d.ts +1 -52
  103. package/lib/formula/type.js +0 -4
  104. package/lib/formula/type.js.map +1 -1
  105. package/lib/formula/util.d.ts +2 -71
  106. package/lib/formula/util.js +9 -79
  107. package/lib/formula/util.js.map +1 -1
  108. package/lib/index.js +0 -7
  109. package/lib/index.js.map +1 -1
  110. package/lib/metadata-register/_base.js +13 -13
  111. package/lib/metadata-register/_base.js.map +1 -1
  112. package/lib/metadata-register/app.js +8 -8
  113. package/lib/metadata-register/app.js.map +1 -1
  114. package/lib/metadata-register/chart.js +1 -1
  115. package/lib/metadata-register/index.js +49 -49
  116. package/lib/metadata-register/index.js.map +1 -1
  117. package/lib/metadata-register/layout.js +10 -10
  118. package/lib/metadata-register/layout.js.map +1 -1
  119. package/lib/metadata-register/object.js +10 -15
  120. package/lib/metadata-register/object.js.map +1 -1
  121. package/lib/metadata-register/page.js +1 -1
  122. package/lib/metadata-register/permissionFields.js +1 -1
  123. package/lib/metadata-register/permissionset.js +6 -6
  124. package/lib/metadata-register/permissionset.js.map +1 -1
  125. package/lib/metadata-register/process.js +1 -8
  126. package/lib/metadata-register/process.js.map +1 -1
  127. package/lib/metadata-register/processTrigger.d.ts +0 -11
  128. package/lib/metadata-register/processTrigger.js +1 -12
  129. package/lib/metadata-register/processTrigger.js.map +1 -1
  130. package/lib/metadata-register/profile.js +6 -6
  131. package/lib/metadata-register/profile.js.map +1 -1
  132. package/lib/metadata-register/query.js +1 -1
  133. package/lib/metadata-register/restrictionRules.js +1 -1
  134. package/lib/metadata-register/shareRules.js +1 -1
  135. package/lib/metadata-register/tab.js +1 -1
  136. package/lib/metadata-register/tabs.d.ts +0 -3
  137. package/lib/metadata-register/tabs.js +10 -13
  138. package/lib/metadata-register/tabs.js.map +1 -1
  139. package/lib/services/datasourceServiceFactory.js +5 -8
  140. package/lib/services/datasourceServiceFactory.js.map +1 -1
  141. package/lib/services/helpers/graphql/consts.js +0 -7
  142. package/lib/services/helpers/graphql/consts.js.map +1 -1
  143. package/lib/services/helpers/graphql/getPrimaryFieldType.d.ts +0 -4
  144. package/lib/services/helpers/graphql/getPrimaryFieldType.js +0 -12
  145. package/lib/services/helpers/graphql/getPrimaryFieldType.js.map +1 -1
  146. package/lib/services/helpers/graphql/getQueryFields.js +0 -4
  147. package/lib/services/helpers/graphql/getQueryFields.js.map +1 -1
  148. package/lib/services/helpers/graphql/index.js +84 -108
  149. package/lib/services/helpers/graphql/index.js.map +1 -1
  150. package/lib/services/objectService.js +127 -179
  151. package/lib/services/objectService.js.map +1 -1
  152. package/lib/services/objectServiceDispatcher.js +87 -87
  153. package/lib/services/objectServiceDispatcher.js.map +1 -1
  154. package/lib/services/objectServiceFactory.js +4 -4
  155. package/lib/services/objectServiceFactory.js.map +1 -1
  156. package/lib/summary/core.d.ts +0 -68
  157. package/lib/summary/core.js +46 -130
  158. package/lib/summary/core.js.map +1 -1
  159. package/lib/summary/field_summary.d.ts +0 -16
  160. package/lib/summary/field_summary.js +10 -27
  161. package/lib/summary/field_summary.js.map +1 -1
  162. package/lib/summary/index.d.ts +0 -5
  163. package/lib/summary/index.js +10 -28
  164. package/lib/summary/index.js.map +1 -1
  165. package/lib/summary/recompute.d.ts +0 -8
  166. package/lib/summary/recompute.js +8 -23
  167. package/lib/summary/recompute.js.map +1 -1
  168. package/lib/summary/type.d.ts +0 -17
  169. package/lib/summary/type.js +0 -13
  170. package/lib/summary/type.js.map +1 -1
  171. package/lib/typeorm/driver.js +96 -78
  172. package/lib/typeorm/driver.js.map +1 -1
  173. package/lib/typeorm/util.js +5 -4
  174. package/lib/typeorm/util.js.map +1 -1
  175. package/lib/types/action.js +1 -1
  176. package/lib/types/app.js +38 -43
  177. package/lib/types/app.js.map +1 -1
  178. package/lib/types/config.js +11 -15
  179. package/lib/types/config.js.map +1 -1
  180. package/lib/types/connection.d.ts +0 -10
  181. package/lib/types/connection.js +9 -16
  182. package/lib/types/connection.js.map +1 -1
  183. package/lib/types/dashboard.js +1 -1
  184. package/lib/types/datasource.d.ts +0 -3
  185. package/lib/types/datasource.js +97 -110
  186. package/lib/types/datasource.js.map +1 -1
  187. package/lib/types/field.js +4 -34
  188. package/lib/types/field.js.map +1 -1
  189. package/lib/types/field_permission.js +7 -7
  190. package/lib/types/field_permission.js.map +1 -1
  191. package/lib/types/list_view.js +2 -2
  192. package/lib/types/object.d.ts +0 -38
  193. package/lib/types/object.js +291 -403
  194. package/lib/types/object.js.map +1 -1
  195. package/lib/types/object_dynamic_load.js +40 -45
  196. package/lib/types/object_dynamic_load.js.map +1 -1
  197. package/lib/types/object_events.js +4 -14
  198. package/lib/types/object_events.js.map +1 -1
  199. package/lib/types/object_layouts.js +4 -4
  200. package/lib/types/object_layouts.js.map +1 -1
  201. package/lib/types/object_permission.js +2 -2
  202. package/lib/types/query.d.ts +0 -12
  203. package/lib/types/report.js +1 -1
  204. package/lib/types/restrictionRule.js +6 -6
  205. package/lib/types/restrictionRule.js.map +1 -1
  206. package/lib/types/schema.d.ts +0 -14
  207. package/lib/types/schema.js +14 -39
  208. package/lib/types/schema.js.map +1 -1
  209. package/lib/types/shareRule.js +6 -6
  210. package/lib/types/shareRule.js.map +1 -1
  211. package/lib/types/trigger.js +1 -1
  212. package/lib/types/validation_rules.js +11 -18
  213. package/lib/types/validation_rules.js.map +1 -1
  214. package/lib/util/index.d.ts +0 -12
  215. package/lib/util/index.js +10 -50
  216. package/lib/util/index.js.map +1 -1
  217. package/lib/util/locale.d.ts +0 -6
  218. package/lib/util/locale.js +0 -6
  219. package/lib/util/locale.js.map +1 -1
  220. package/lib/util/suffix.js +4 -12
  221. package/lib/util/suffix.js.map +1 -1
  222. package/package.json +13 -13
@@ -9,27 +9,18 @@ var summary_1 = require("../summary");
9
9
  var util_1 = require("./util");
10
10
  var util_2 = require("../util");
11
11
  var _ = require("lodash");
12
- // import _eval = require('eval')
13
12
  var formula_1 = require("@steedos/formula");
14
13
  var params_1 = require("./params");
15
14
  var simple_params_1 = require("./simple_params");
16
- /**
17
- * 根据公式内容,取出其中{}中的变量
18
- * @param formula
19
- */
20
15
  var pickFormulaVars = function (formula) {
21
16
  return (0, formula_1.extract)(formula);
22
17
  };
23
18
  exports.pickFormulaVars = pickFormulaVars;
24
- /**
25
- * 根据公式内容,取出其中{}中的变量,并进一步取出这些变量中引用了当前对象的哪些字段
26
- * @param fieldFormulaConfig
27
- */
28
19
  var pickFieldFormulaVarFields = function (fieldFormulaConfigs) {
29
20
  if (!_.isArray(fieldFormulaConfigs)) {
30
21
  fieldFormulaConfigs = [fieldFormulaConfigs];
31
22
  }
32
- var result = ["space"]; //space字段作为基础字段不能少
23
+ var result = [];
33
24
  fieldFormulaConfigs.forEach(function (fieldFormulaConfig) {
34
25
  var vars = fieldFormulaConfig.vars;
35
26
  result = _.union(result, (0, exports.pickFormulaVarFields)(vars));
@@ -37,15 +28,10 @@ var pickFieldFormulaVarFields = function (fieldFormulaConfigs) {
37
28
  return _.uniq(result);
38
29
  };
39
30
  exports.pickFieldFormulaVarFields = pickFieldFormulaVarFields;
40
- /**
41
- * 根据公式内容已取出的{}中的变量,进一步取出这些变量中引用了当前对象的哪些字段
42
- * @param vars
43
- */
44
31
  var pickFormulaVarFields = function (vars) {
45
- var result = ["space"]; //space字段作为基础字段不能少
32
+ var result = [];
46
33
  vars.forEach(function (varItem) {
47
34
  if (varItem.paths.length) {
48
- // 如果是$user变量则paths肯定为空,所以取paths中第一个,第一个一定是当前对象中的字段
49
35
  var firstPath = varItem.paths[0];
50
36
  var firstKey = firstPath.field_name;
51
37
  result.push(firstKey);
@@ -54,42 +40,23 @@ var pickFormulaVarFields = function (vars) {
54
40
  return _.uniq(result);
55
41
  };
56
42
  exports.pickFormulaVarFields = pickFormulaVarFields;
57
- /**
58
- * 根据公式中的变量值,计算出跨对象引用的记录对应的字段值,作为公式运算的参数返回
59
- * @param doc
60
- * @param vars
61
- * return Array<SteedosFormulaParamTypeConfig>
62
- */
63
- var computeFormulaParams = function (doc, vars, currentUserId) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
64
- var params, spaceId, _loop_1, lastReferenceToField, vars_1, vars_1_1, _a, key, paths, isUserVar, isSimpleVar;
43
+ var computeFormulaParams = function (doc, vars, userSession) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
44
+ var params, spaceId, currentUserId, _loop_1, lastReferenceToField, vars_1, vars_1_1, _a, key, paths, isUserVar, isUserSessionVar, isSimpleVar;
65
45
  var e_1, _b;
66
46
  return tslib_1.__generator(this, function (_c) {
67
47
  params = [];
68
- spaceId = doc.space;
48
+ spaceId = userSession === null || userSession === void 0 ? void 0 : userSession.spaceId;
49
+ currentUserId = userSession === null || userSession === void 0 ? void 0 : userSession.userId;
69
50
  if (vars && vars.length) {
70
- _loop_1 = function (key, paths, isUserVar, isSimpleVar) {
51
+ _loop_1 = function (key, paths, isUserVar, isUserSessionVar, isSimpleVar) {
71
52
  key = key.trim();
72
- // 如果变量key以$user开头,则解析为userSession,此时paths为空
73
53
  var tempValue = void 0;
74
- if (isUserVar) {
75
- if (!currentUserId) {
76
- throw new Error("computeFormulaParams:The param 'currentUserId' is required for the formula var key ".concat(key, " while running"));
54
+ if (isUserVar || isUserSessionVar) {
55
+ if (!userSession) {
56
+ throw new Error("computeFormulaParams:The param 'userSession' is required for the formula var key ".concat(key, " while running"));
77
57
  }
78
- if (!spaceId) {
79
- throw new Error("computeFormulaParams:The 'space' property is required for the doc of the formula var key ".concat(key, " while running"));
80
- }
81
- // if (!currentUserId) {
82
- // throw new Error(`computeFormulaParams:The param 'currentUserId' is required for the formula var key ${key}`);
83
- // }
84
- // let tempFormulaParams = {};
85
- // let tepmFormula = key.replace(FormulaUserKey, `__params["${FormulaUserKey}"]`);
86
- // tepmFormula = `return ${tepmFormula}`
87
- // tempFormulaParams[FormulaUserKey] = currentUserId;
88
- // tempValue = evalFieldFormula(tepmFormula, tempFormulaParams);
89
58
  }
90
59
  if (isSimpleVar) {
91
- // 普通变量,取参数值时直接取值,而不用走变量上的paths属性。
92
- // 注意未传入objectName时,公式中的user var的isSimpleVar为false,还是走下面的paths取值逻辑。
93
60
  tempValue = doc[key];
94
61
  params.push({
95
62
  key: key,
@@ -97,12 +64,26 @@ var computeFormulaParams = function (doc, vars, currentUserId) { return tslib_1.
97
64
  });
98
65
  return "continue";
99
66
  }
67
+ if (isUserSessionVar) {
68
+ tempValue = _.reduce(key.split("."), function (reslut, next, index) {
69
+ if (index === 0) {
70
+ return reslut;
71
+ }
72
+ else {
73
+ return reslut[next];
74
+ }
75
+ }, userSession);
76
+ params.push({
77
+ key: key,
78
+ value: tempValue
79
+ });
80
+ return "continue";
81
+ }
100
82
  lastReferenceToField = null;
101
83
  tempValue = _.reduce(paths, function (reslut, next, index) {
102
84
  if (index === 0) {
103
85
  lastReferenceToField = next.reference_to_field;
104
86
  if (isUserVar) {
105
- // $user变量也要按查相关表记录的方式取值,第一个path为根据id取出对应的space_users记录
106
87
  var sus = (0, util_2.wrapAsync)(function () {
107
88
  return (0, index_1.getSteedosSchema)().getObject("space_users").find({
108
89
  filters: [["user", "=", currentUserId], ["space", "=", spaceId]],
@@ -123,7 +104,6 @@ var computeFormulaParams = function (doc, vars, currentUserId) { return tslib_1.
123
104
  }
124
105
  else {
125
106
  if (!reslut) {
126
- // 当上一轮返回空值或0时,直接返回
127
107
  return reslut;
128
108
  }
129
109
  reslut = (0, util_2.wrapAsync)(function () {
@@ -151,8 +131,8 @@ var computeFormulaParams = function (doc, vars, currentUserId) { return tslib_1.
151
131
  };
152
132
  try {
153
133
  for (vars_1 = tslib_1.__values(vars), vars_1_1 = vars_1.next(); !vars_1_1.done; vars_1_1 = vars_1.next()) {
154
- _a = vars_1_1.value, key = _a.key, paths = _a.paths, isUserVar = _a.is_user_var, isSimpleVar = _a.is_simple_var;
155
- _loop_1(key, paths, isUserVar, isSimpleVar);
134
+ _a = vars_1_1.value, key = _a.key, paths = _a.paths, isUserVar = _a.is_user_var, isUserSessionVar = _a.is_user_session_var, isSimpleVar = _a.is_simple_var;
135
+ _loop_1(key, paths, isUserVar, isUserSessionVar, isSimpleVar);
156
136
  }
157
137
  }
158
138
  catch (e_1_1) { e_1 = { error: e_1_1 }; }
@@ -163,23 +143,23 @@ var computeFormulaParams = function (doc, vars, currentUserId) { return tslib_1.
163
143
  finally { if (e_1) throw e_1.error; }
164
144
  }
165
145
  }
166
- return [2 /*return*/, params];
146
+ return [2, params];
167
147
  });
168
148
  }); };
169
149
  exports.computeFormulaParams = computeFormulaParams;
170
- var computeFieldFormulaValue = function (doc, fieldFormulaConfig, currentUserId) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
150
+ var computeFieldFormulaValue = function (doc, fieldFormulaConfig, userSession) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
171
151
  var formula, vars, data_type, formula_blank_value, params;
172
152
  return tslib_1.__generator(this, function (_a) {
173
153
  switch (_a.label) {
174
154
  case 0:
175
- if (!currentUserId) {
176
- (0, util_1.checkCurrentUserIdNotRequiredForFieldFormulas)(fieldFormulaConfig);
155
+ if (!userSession) {
156
+ (0, util_1.checkUserSessionNotRequiredForFieldFormulas)(fieldFormulaConfig);
177
157
  }
178
158
  formula = fieldFormulaConfig.formula, vars = fieldFormulaConfig.vars, data_type = fieldFormulaConfig.data_type, formula_blank_value = fieldFormulaConfig.formula_blank_value;
179
- return [4 /*yield*/, (0, exports.computeFormulaParams)(doc, vars, currentUserId)];
159
+ return [4, (0, exports.computeFormulaParams)(doc, vars, userSession)];
180
160
  case 1:
181
161
  params = _a.sent();
182
- return [2 /*return*/, (0, exports.runFormula)(formula, params, {
162
+ return [2, (0, exports.runFormula)(formula, params, {
183
163
  returnType: data_type,
184
164
  blankValue: formula_blank_value
185
165
  }, fieldFormulaConfig)];
@@ -189,117 +169,82 @@ var computeFieldFormulaValue = function (doc, fieldFormulaConfig, currentUserId)
189
169
  exports.computeFieldFormulaValue = computeFieldFormulaValue;
190
170
  var evalFieldFormula = function (formula, formulaParams) {
191
171
  try {
192
- // let formulaFun = `module.exports = function (__params) { ${formula} }`;
193
- // console.log("==evalFieldFormula==formulaFun===", formulaFun);
194
- // console.log("==evalFieldFormula==formulaParams===", formulaParams);
195
- // return _eval(formulaFun)(formulaParams);
196
172
  return (0, formula_1.parse)(formula, formulaParams);
197
173
  }
198
174
  catch (ex) {
199
- formulaParams[type_1.FormulaUserKey] = "{...}"; //$user简化,打出的日志看得清楚点
175
+ formulaParams[type_1.FormulaUserKey] = "{...}";
200
176
  throw new Error("evalFieldFormula:Catch an error \"".concat(ex, "\" while eval formula \"").concat(formula, "\" with params \"").concat(JSON.stringify(formulaParams), "\""));
201
177
  }
202
178
  };
203
179
  exports.evalFieldFormula = evalFieldFormula;
204
- /**
205
- * 运行公式
206
- * @param formula 公式脚本内容
207
- * @param params 参数
208
- * @param options 公式返回类型,及空值配置
209
- * @param messageTag 用于显示错误日志的标识信息,可以是一个json对象
210
- */
211
180
  var runFormula = function (formula, params, options, messageTag) {
212
181
  if (!options) {
213
182
  options = {};
214
183
  }
215
- // console.log("===runFormula===formula====", formula);
216
- // console.log("===runFormula===params====", params);
217
184
  var returnType = options.returnType, blankValue = options.blankValue;
218
185
  var formulaParams = {};
219
186
  params.forEach(function (_a) {
220
187
  var key = _a.key, path = _a.path, value = _a.value;
221
- // formulaParams[key] = value;
222
- // 把{}括起来的变量替换为计算得到的变量值
223
- // formula = formula.replace(`{${key}}`, `__params["${key}"]`);
224
188
  if (path) {
225
189
  formulaParams[key] = (0, params_1.getFieldSubstitution)(path.reference_from, path.field_name, value, blankValue);
226
190
  }
227
191
  else {
228
- // 变量中没有path属性说明是普通变量
229
192
  formulaParams[key] = (0, simple_params_1.getSimpleParamSubstitution)(value, blankValue);
230
193
  }
231
194
  });
232
- // console.log("===runFormula===formula====", formula);
233
- // console.log("===runFormula===formulaParams====", formulaParams);
234
195
  var result = (0, exports.evalFieldFormula)(formula, formulaParams);
235
- // console.log("===runFormula===result====", result);
236
196
  var formulaValue = result.value;
237
197
  var formulaValueType = result.dataType;
238
198
  if (result.type === 'error') {
239
199
  console.error(formula, formulaParams);
240
200
  throw new Error("runFormula:Catch an error \"".concat(result.message, "\" while eval formula \"").concat(formula, "\" with params: \"").concat(JSON.stringify(formulaParams), "\" for \"").concat(JSON.stringify(messageTag), "\""));
241
- // if(blankValue === SteedosFormulaBlankValue.blanks && result.errorType === "ArgumentError"){
242
- // // 配置了空参数视为空值时会直接返回空值类型,这里就会报错,直接返回空值,而不是抛错
243
- // // TODO:result.errorType === "ArgumentError"不够细化,下一版本应该视错误情况优化返回空值的条件
244
- // formulaValue = null;
245
- // }yar
246
- // else{
247
- // throw new Error(result.message);
248
- // }
249
201
  }
250
- if (formulaValueType === "number" /* Number */ && _.isNaN(formulaValue)) {
251
- // 数值类型计算结果为NaN时,保存为空值
202
+ if (formulaValueType === "number" && _.isNaN(formulaValue)) {
252
203
  formulaValue = null;
253
204
  }
254
205
  if (returnType && formulaValueType && formulaValueType != "null") {
255
206
  switch (returnType) {
256
207
  case "boolean":
257
- if (formulaValueType !== "checkbox" /* Checkbox */) {
208
+ if (formulaValueType !== "checkbox") {
258
209
  throw new Error("runFormula:The field formula \"".concat(formula, "\" with params \"").concat(JSON.stringify(formulaParams), "\" should return a boolean type result but got a ").concat(formulaValueType, " type value '").concat(formulaValue, "'."));
259
210
  }
260
211
  break;
261
212
  case "number":
262
- if (formulaValueType !== "number" /* Number */) {
213
+ if (formulaValueType !== "number") {
263
214
  throw new Error("runFormula:The field formula \"".concat(formula, "\" with params \"").concat(JSON.stringify(formulaParams), "\" should return a number type result but got a ").concat(formulaValueType, " type value '").concat(formulaValue, "'."));
264
215
  }
265
216
  break;
266
217
  case "currency":
267
- if (formulaValueType !== "number" /* Number */) {
218
+ if (formulaValueType !== "number") {
268
219
  throw new Error("runFormula:The field formula \"".concat(formula, "\" with params \"").concat(JSON.stringify(formulaParams), "\" should return a number type result but got a ").concat(formulaValueType, " type value '").concat(formulaValue, "'."));
269
220
  }
270
221
  break;
271
222
  case "percent":
272
- if (formulaValueType !== "number" /* Number */) {
223
+ if (formulaValueType !== "number") {
273
224
  throw new Error("runFormula:The field formula \"".concat(formula, "\" with params \"").concat(JSON.stringify(formulaParams), "\" should return a number type result but got a ").concat(formulaValueType, " type value '").concat(formulaValue, "'."));
274
225
  }
275
226
  break;
276
227
  case "text":
277
- if (formulaValueType !== "text" /* Text */) {
228
+ if (formulaValueType !== "text") {
278
229
  throw new Error("runFormula:The field formula \"".concat(formula, "\" with params \"").concat(JSON.stringify(formulaParams), "\" should return a string type result but got a ").concat(formulaValueType, " type value '").concat(formulaValue, "'."));
279
230
  }
280
231
  break;
281
232
  case "date":
282
- if (formulaValueType !== "date" /* Date */) {
283
- // 这里不可以直接用result.constructor == Date或result instanceof Date,因为eval后的同一个基础类型的构造函数指向的不是同一个
233
+ if (formulaValueType !== "date") {
284
234
  throw new Error("runFormula:The field formula \"".concat(formula, "\" with params \"").concat(JSON.stringify(formulaParams), "\" should return a date type result but got a ").concat(formulaValueType, " type value '").concat(formulaValue, "'."));
285
235
  }
286
236
  break;
287
237
  case "datetime":
288
- if (formulaValueType !== "datetime" /* Datetime */) {
289
- // 这里不可以直接用result.constructor == Date或result instanceof Date,因为eval后的同一个基础类型的构造函数指向的不是同一个
238
+ if (formulaValueType !== "datetime") {
290
239
  throw new Error("runFormula:The field formula \"".concat(formula, "\" with params \"").concat(JSON.stringify(formulaParams), "\" should return a date type result but got a ").concat(formulaValueType, " type value '").concat(formulaValue, "'."));
291
240
  }
292
241
  break;
293
242
  }
294
243
  }
295
- // console.log("===runFormula===formulaValue====", formulaValue);
296
244
  return formulaValue;
297
245
  };
298
246
  exports.runFormula = runFormula;
299
247
  var addToAggregatePaths = function (varItemToAggregatePaths, toAggregatePaths) {
300
- // 当引用了同一个对象的不同属性时,只需要记录其中一个,因为一个公式里面引用的字段变更后,只需要重算一次,比如以下两个都将只有第一条会加入到toAggregatePaths中
301
- // [{"key":"account.website","paths":[{"field_name":"account","reference_from":"contacts"},{"field_name":"website","reference_from":"accounts"}]}]
302
- // [{"key":"account.name","paths":[{"field_name":"account","reference_from":"contacts"},{"field_name":"name","reference_from":"accounts"}]}]
303
248
  var pathLength = varItemToAggregatePaths.length;
304
249
  var existPath = toAggregatePaths.find(function (item) {
305
250
  return JSON.stringify(item.slice(0, pathLength)) === JSON.stringify(varItemToAggregatePaths.slice(0, pathLength));
@@ -308,37 +253,26 @@ var addToAggregatePaths = function (varItemToAggregatePaths, toAggregatePaths) {
308
253
  toAggregatePaths.push(varItemToAggregatePaths);
309
254
  }
310
255
  };
311
- /**
312
- * 在所有字段引用关系(包括跨对象的字段引用关系)中找到引用了当前正在update的对象字段的公式字段并更新其字段值
313
- * 如果当前不是update而是insert则不需要调用该函数,因为这时这条记录不可能存在引用关系
314
- * @param objectName
315
- * @param recordId
316
- * @param currentUserId
317
- * @param options.fieldNames 传入该参数时,只查找和处理引用了该对象中这些指定字段的公式字段
318
- * @param options.escapeConfigs 传入该参数时,将额外跳过这些公式字段配置的运算,提高性能
319
- * @param options.quotedByConfigs 如果已经根据objectName和fieldNames查过相关配置了,请直接传入,可以避免重复查找,提高性能
320
- */
321
256
  var runQuotedByObjectFieldFormulas = function (objectName, recordId, userSession, options) {
322
257
  if (options === void 0) { options = {}; }
323
258
  return tslib_1.__awaiter(this, void 0, void 0, function () {
324
- var currentUserId, fieldNames, escapeConfigs, quotedByConfigs, onlyForOwn, withoutCurrent, _a, _b, config, e_2_1;
259
+ var fieldNames, escapeConfigs, quotedByConfigs, onlyForOwn, withoutCurrent, _a, _b, config, e_2_1;
325
260
  var e_2, _c;
326
261
  return tslib_1.__generator(this, function (_d) {
327
262
  switch (_d.label) {
328
263
  case 0:
329
- currentUserId = userSession ? userSession.userId : undefined;
330
264
  fieldNames = options.fieldNames, escapeConfigs = options.escapeConfigs, quotedByConfigs = options.quotedByConfigs, onlyForOwn = options.onlyForOwn, withoutCurrent = options.withoutCurrent;
331
- if (!!quotedByConfigs) return [3 /*break*/, 2];
332
- return [4 /*yield*/, (0, field_formula_1.getObjectQuotedByFieldFormulaConfigs)(objectName, fieldNames, escapeConfigs, { onlyForOwn: onlyForOwn, withoutCurrent: withoutCurrent })];
265
+ if (!!quotedByConfigs) return [3, 2];
266
+ return [4, (0, field_formula_1.getObjectQuotedByFieldFormulaConfigs)(objectName, fieldNames, escapeConfigs, { onlyForOwn: onlyForOwn, withoutCurrent: withoutCurrent })];
333
267
  case 1:
334
268
  quotedByConfigs = _d.sent();
335
269
  _d.label = 2;
336
270
  case 2:
337
271
  if (!quotedByConfigs.allConfigs.length) {
338
- return [2 /*return*/];
272
+ return [2];
339
273
  }
340
- if (!currentUserId) {
341
- (0, util_1.checkCurrentUserIdNotRequiredForFieldFormulas)(quotedByConfigs.allConfigs);
274
+ if (!userSession) {
275
+ (0, util_1.checkUserSessionNotRequiredForFieldFormulas)(quotedByConfigs.allConfigs);
342
276
  }
343
277
  _d.label = 3;
344
278
  case 3:
@@ -346,63 +280,54 @@ var runQuotedByObjectFieldFormulas = function (objectName, recordId, userSession
346
280
  _a = tslib_1.__values(quotedByConfigs.allConfigs), _b = _a.next();
347
281
  _d.label = 4;
348
282
  case 4:
349
- if (!!_b.done) return [3 /*break*/, 7];
283
+ if (!!_b.done) return [3, 7];
350
284
  config = _b.value;
351
- return [4 /*yield*/, (0, exports.updateQuotedByObjectFieldFormulaValue)(objectName, recordId, config, userSession, quotedByConfigs.ownConfigs)];
285
+ return [4, (0, exports.updateQuotedByObjectFieldFormulaValue)(objectName, recordId, config, userSession, quotedByConfigs.ownConfigs)];
352
286
  case 5:
353
287
  _d.sent();
354
288
  _d.label = 6;
355
289
  case 6:
356
290
  _b = _a.next();
357
- return [3 /*break*/, 4];
358
- case 7: return [3 /*break*/, 10];
291
+ return [3, 4];
292
+ case 7: return [3, 10];
359
293
  case 8:
360
294
  e_2_1 = _d.sent();
361
295
  e_2 = { error: e_2_1 };
362
- return [3 /*break*/, 10];
296
+ return [3, 10];
363
297
  case 9:
364
298
  try {
365
299
  if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
366
300
  }
367
301
  finally { if (e_2) throw e_2.error; }
368
- return [7 /*endfinally*/];
369
- case 10: return [2 /*return*/];
302
+ return [7];
303
+ case 10: return [2];
370
304
  }
371
305
  });
372
306
  });
373
307
  };
374
308
  exports.runQuotedByObjectFieldFormulas = runQuotedByObjectFieldFormulas;
375
- /**
376
- * 找到当前正在insert/update的对象中的公式字段并更新其字段值
377
- * @param objectName
378
- * @param recordId
379
- * @param doc
380
- * @param currentUserId
381
- * @param needRefetchDoc 当doc不可信赖时,需要从数据库中重新抓取doc,请传入true值
382
- * @param configs 如果已经根据objectName查过相关配置了,请直接传入,可以避免重复查找,提高性能
383
- */
384
- var runCurrentObjectFieldFormulas = function (objectName, recordId, doc, currentUserId, needRefetchDoc, configs) {
309
+ var runCurrentObjectFieldFormulas = function (objectName, recordId, doc, userSession, needRefetchDoc, configs) {
385
310
  return tslib_1.__awaiter(this, void 0, void 0, function () {
386
311
  var formulaVarFields, setDoc, configs_1, configs_1_1, config, _a, _b, e_3_1;
387
312
  var e_3, _c;
388
313
  return tslib_1.__generator(this, function (_d) {
389
314
  switch (_d.label) {
390
315
  case 0:
391
- if (!!configs) return [3 /*break*/, 2];
392
- return [4 /*yield*/, (0, field_formula_1.getObjectFieldFormulaConfigs)(objectName)];
316
+ if (!!configs) return [3, 2];
317
+ return [4, (0, field_formula_1.getObjectFieldFormulaConfigs)(objectName)];
393
318
  case 1:
394
319
  configs = _d.sent();
395
320
  _d.label = 2;
396
321
  case 2:
397
322
  if (!configs.length) {
398
- return [2 /*return*/];
323
+ return [2];
399
324
  }
400
- if (!currentUserId) {
401
- (0, util_1.checkCurrentUserIdNotRequiredForFieldFormulas)(configs);
325
+ if (!userSession) {
326
+ (0, util_1.checkUserSessionNotRequiredForFieldFormulas)(configs);
402
327
  }
403
- if (!(needRefetchDoc !== false)) return [3 /*break*/, 4];
328
+ if (!(needRefetchDoc !== false)) return [3, 4];
404
329
  formulaVarFields = (0, exports.pickFieldFormulaVarFields)(configs);
405
- return [4 /*yield*/, (0, index_1.getSteedosSchema)().getObject(objectName).findOne(recordId, { fields: formulaVarFields })];
330
+ return [4, (0, index_1.getSteedosSchema)().getObject(objectName).findOne(recordId, { fields: formulaVarFields })];
406
331
  case 3:
407
332
  doc = _d.sent();
408
333
  _d.label = 4;
@@ -414,61 +339,55 @@ var runCurrentObjectFieldFormulas = function (objectName, recordId, doc, current
414
339
  configs_1 = tslib_1.__values(configs), configs_1_1 = configs_1.next();
415
340
  _d.label = 6;
416
341
  case 6:
417
- if (!!configs_1_1.done) return [3 /*break*/, 9];
342
+ if (!!configs_1_1.done) return [3, 9];
418
343
  config = configs_1_1.value;
419
- doc = Object.assign({}, doc, setDoc); //setDoc中计算得到的结果应该重新并到doc中支持计算
344
+ doc = Object.assign({}, doc, setDoc);
420
345
  _a = setDoc;
421
346
  _b = config.field_name;
422
- return [4 /*yield*/, (0, exports.computeFieldFormulaValue)(doc, config, currentUserId)];
347
+ return [4, (0, exports.computeFieldFormulaValue)(doc, config, userSession)];
423
348
  case 7:
424
349
  _a[_b] = _d.sent();
425
350
  _d.label = 8;
426
351
  case 8:
427
352
  configs_1_1 = configs_1.next();
428
- return [3 /*break*/, 6];
429
- case 9: return [3 /*break*/, 12];
353
+ return [3, 6];
354
+ case 9: return [3, 12];
430
355
  case 10:
431
356
  e_3_1 = _d.sent();
432
357
  e_3 = { error: e_3_1 };
433
- return [3 /*break*/, 12];
358
+ return [3, 12];
434
359
  case 11:
435
360
  try {
436
361
  if (configs_1_1 && !configs_1_1.done && (_c = configs_1.return)) _c.call(configs_1);
437
362
  }
438
363
  finally { if (e_3) throw e_3.error; }
439
- return [7 /*endfinally*/];
440
- case 12: return [4 /*yield*/, (0, index_1.getSteedosSchema)().getObject(objectName).directUpdate(recordId, setDoc)];
364
+ return [7];
365
+ case 12: return [4, (0, index_1.getSteedosSchema)().getObject(objectName).directUpdate(recordId, setDoc)];
441
366
  case 13:
442
367
  _d.sent();
443
- return [2 /*return*/];
368
+ return [2];
444
369
  }
445
370
  });
446
371
  });
447
372
  };
448
373
  exports.runCurrentObjectFieldFormulas = runCurrentObjectFieldFormulas;
449
- /**
450
- * 找到当前正在update的对象多条记录的公式字段并更新其字段值
451
- * @param objectName
452
- * @param filters
453
- * @param currentUserId
454
- */
455
- var runManyCurrentObjectFieldFormulas = function (objectName, filters, currentUserId) {
374
+ var runManyCurrentObjectFieldFormulas = function (objectName, filters, userSession) {
456
375
  return tslib_1.__awaiter(this, void 0, void 0, function () {
457
376
  var configs, formulaVarFields, docs, docs_1, docs_1_1, doc, e_4_1;
458
377
  var e_4, _a;
459
378
  return tslib_1.__generator(this, function (_b) {
460
379
  switch (_b.label) {
461
- case 0: return [4 /*yield*/, (0, field_formula_1.getObjectFieldFormulaConfigs)(objectName)];
380
+ case 0: return [4, (0, field_formula_1.getObjectFieldFormulaConfigs)(objectName)];
462
381
  case 1:
463
382
  configs = _b.sent();
464
383
  if (!configs.length) {
465
- return [2 /*return*/];
384
+ return [2];
466
385
  }
467
- if (!currentUserId) {
468
- (0, util_1.checkCurrentUserIdNotRequiredForFieldFormulas)(configs);
386
+ if (!userSession) {
387
+ (0, util_1.checkUserSessionNotRequiredForFieldFormulas)(configs);
469
388
  }
470
389
  formulaVarFields = (0, exports.pickFieldFormulaVarFields)(configs);
471
- return [4 /*yield*/, (0, index_1.getSteedosSchema)().getObject(objectName).find({ filters: filters, fields: formulaVarFields })];
390
+ return [4, (0, index_1.getSteedosSchema)().getObject(objectName).find({ filters: filters, fields: formulaVarFields })];
472
391
  case 2:
473
392
  docs = _b.sent();
474
393
  _b.label = 3;
@@ -477,38 +396,32 @@ var runManyCurrentObjectFieldFormulas = function (objectName, filters, currentUs
477
396
  docs_1 = tslib_1.__values(docs), docs_1_1 = docs_1.next();
478
397
  _b.label = 4;
479
398
  case 4:
480
- if (!!docs_1_1.done) return [3 /*break*/, 7];
399
+ if (!!docs_1_1.done) return [3, 7];
481
400
  doc = docs_1_1.value;
482
- return [4 /*yield*/, (0, exports.runCurrentObjectFieldFormulas)(objectName, doc._id, doc, currentUserId, false, configs)];
401
+ return [4, (0, exports.runCurrentObjectFieldFormulas)(objectName, doc._id, doc, userSession, false, configs)];
483
402
  case 5:
484
403
  _b.sent();
485
404
  _b.label = 6;
486
405
  case 6:
487
406
  docs_1_1 = docs_1.next();
488
- return [3 /*break*/, 4];
489
- case 7: return [3 /*break*/, 10];
407
+ return [3, 4];
408
+ case 7: return [3, 10];
490
409
  case 8:
491
410
  e_4_1 = _b.sent();
492
411
  e_4 = { error: e_4_1 };
493
- return [3 /*break*/, 10];
412
+ return [3, 10];
494
413
  case 9:
495
414
  try {
496
415
  if (docs_1_1 && !docs_1_1.done && (_a = docs_1.return)) _a.call(docs_1);
497
416
  }
498
417
  finally { if (e_4) throw e_4.error; }
499
- return [7 /*endfinally*/];
500
- case 10: return [2 /*return*/];
418
+ return [7];
419
+ case 10: return [2];
501
420
  }
502
421
  });
503
422
  });
504
423
  };
505
424
  exports.runManyCurrentObjectFieldFormulas = runManyCurrentObjectFieldFormulas;
506
- /**
507
- * 修改记录时,根据查到的引用了该记录相关字段公式配置,重新计算字段公式,并把计算结果更新到数据库相关记录中
508
- * @param objectName 当前修改的记录所属对象名称
509
- * @param recordId 当前修改的记录ID
510
- * @param fieldFormulaConfig 查到的引用了该记录所属对象的相关字段公式配置之一
511
- */
512
425
  var updateQuotedByObjectFieldFormulaValue = function (objectName, recordId, fieldFormulaConfig, userSession, escapeConfigs) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
513
426
  var vars, fieldFormulaObjectName, currentObject, fieldFormulaObject, toAggregatePaths, vars_2, vars_2_1, varItem, paths, isInPaths, varItemToAggregatePaths, paths_1, paths_1_1, pathItem, formulaVarFields, toAggregatePaths_1, toAggregatePaths_1_1, toAggregatePathsItem, tempPath, doc, referenceToValue, record, docs, aggregateLookups, lastLookup, referenceToValue, record, aggregateFilters, docs, e_5_1;
514
427
  var e_6, _a, e_7, _b, e_5, _c;
@@ -543,7 +456,6 @@ var updateQuotedByObjectFieldFormulaValue = function (objectName, recordId, fiel
543
456
  finally { if (e_7) throw e_7.error; }
544
457
  }
545
458
  if (isInPaths) {
546
- // 添加时去除重复项
547
459
  addToAggregatePaths(varItemToAggregatePaths, toAggregatePaths);
548
460
  }
549
461
  }
@@ -562,77 +474,77 @@ var updateQuotedByObjectFieldFormulaValue = function (objectName, recordId, fiel
562
474
  toAggregatePaths_1 = tslib_1.__values(toAggregatePaths), toAggregatePaths_1_1 = toAggregatePaths_1.next();
563
475
  _d.label = 2;
564
476
  case 2:
565
- if (!!toAggregatePaths_1_1.done) return [3 /*break*/, 17];
477
+ if (!!toAggregatePaths_1_1.done) return [3, 17];
566
478
  toAggregatePathsItem = toAggregatePaths_1_1.value;
567
- if (!(toAggregatePathsItem.length < 3)) return [3 /*break*/, 11];
479
+ if (!(toAggregatePathsItem.length < 3)) return [3, 11];
568
480
  tempPath = toAggregatePathsItem[0];
569
- if (!(fieldFormulaObjectName === objectName && tempPath.reference_from === objectName)) return [3 /*break*/, 5];
570
- return [4 /*yield*/, fieldFormulaObject.findOne(recordId, { fields: formulaVarFields })];
481
+ if (!(fieldFormulaObjectName === objectName && tempPath.reference_from === objectName)) return [3, 5];
482
+ return [4, fieldFormulaObject.findOne(recordId, { fields: formulaVarFields })];
571
483
  case 3:
572
484
  doc = _d.sent();
573
- return [4 /*yield*/, (0, exports.updateDocsFieldFormulaValue)(doc, fieldFormulaConfig, userSession, escapeConfigs)];
485
+ return [4, (0, exports.updateDocsFieldFormulaValue)(doc, fieldFormulaConfig, userSession, escapeConfigs)];
574
486
  case 4:
575
487
  _d.sent();
576
- return [3 /*break*/, 10];
488
+ return [3, 10];
577
489
  case 5:
578
490
  referenceToValue = recordId;
579
- if (!(tempPath.reference_to_field && tempPath.reference_to_field !== "_id")) return [3 /*break*/, 7];
580
- return [4 /*yield*/, currentObject.findOne(recordId, { fields: [tempPath.reference_to_field] })];
491
+ if (!(tempPath.reference_to_field && tempPath.reference_to_field !== "_id")) return [3, 7];
492
+ return [4, currentObject.findOne(recordId, { fields: [tempPath.reference_to_field] })];
581
493
  case 6:
582
494
  record = _d.sent();
583
495
  referenceToValue = record && record[tempPath.reference_to_field];
584
496
  _d.label = 7;
585
- case 7: return [4 /*yield*/, fieldFormulaObject.find({ filters: [[tempPath.field_name, "=", referenceToValue]], fields: formulaVarFields })];
497
+ case 7: return [4, fieldFormulaObject.find({ filters: [[tempPath.field_name, "=", referenceToValue]], fields: formulaVarFields })];
586
498
  case 8:
587
499
  docs = _d.sent();
588
- return [4 /*yield*/, (0, exports.updateDocsFieldFormulaValue)(docs, fieldFormulaConfig, userSession, escapeConfigs)];
500
+ return [4, (0, exports.updateDocsFieldFormulaValue)(docs, fieldFormulaConfig, userSession, escapeConfigs)];
589
501
  case 9:
590
502
  _d.sent();
591
503
  _d.label = 10;
592
- case 10: return [3 /*break*/, 16];
504
+ case 10: return [3, 16];
593
505
  case 11:
594
506
  aggregateLookups = (0, util_1.getFormulaVarPathsAggregateLookups)(toAggregatePathsItem);
595
507
  lastLookup = aggregateLookups[aggregateLookups.length - 1]["$lookup"];
596
508
  referenceToValue = recordId;
597
- if (!(lastLookup.foreignField && lastLookup.foreignField !== "_id")) return [3 /*break*/, 13];
598
- return [4 /*yield*/, currentObject.findOne(recordId, { fields: [lastLookup.foreignField] })];
509
+ if (!(lastLookup.foreignField && lastLookup.foreignField !== "_id")) return [3, 13];
510
+ return [4, currentObject.findOne(recordId, { fields: [lastLookup.foreignField] })];
599
511
  case 12:
600
512
  record = _d.sent();
601
513
  referenceToValue = record && record[lastLookup.foreignField];
602
514
  _d.label = 13;
603
515
  case 13:
604
516
  aggregateFilters = [["".concat(lastLookup.as, ".").concat(lastLookup.foreignField), "=", referenceToValue]];
605
- return [4 /*yield*/, fieldFormulaObject.directAggregatePrefixalPipeline({
517
+ return [4, fieldFormulaObject.directAggregatePrefixalPipeline({
606
518
  filters: aggregateFilters,
607
519
  fields: formulaVarFields
608
520
  }, aggregateLookups)];
609
521
  case 14:
610
522
  docs = _d.sent();
611
- return [4 /*yield*/, (0, exports.updateDocsFieldFormulaValue)(docs, fieldFormulaConfig, userSession, escapeConfigs)];
523
+ return [4, (0, exports.updateDocsFieldFormulaValue)(docs, fieldFormulaConfig, userSession, escapeConfigs)];
612
524
  case 15:
613
525
  _d.sent();
614
526
  _d.label = 16;
615
527
  case 16:
616
528
  toAggregatePaths_1_1 = toAggregatePaths_1.next();
617
- return [3 /*break*/, 2];
618
- case 17: return [3 /*break*/, 20];
529
+ return [3, 2];
530
+ case 17: return [3, 20];
619
531
  case 18:
620
532
  e_5_1 = _d.sent();
621
533
  e_5 = { error: e_5_1 };
622
- return [3 /*break*/, 20];
534
+ return [3, 20];
623
535
  case 19:
624
536
  try {
625
537
  if (toAggregatePaths_1_1 && !toAggregatePaths_1_1.done && (_c = toAggregatePaths_1.return)) _c.call(toAggregatePaths_1);
626
538
  }
627
539
  finally { if (e_5) throw e_5.error; }
628
- return [7 /*endfinally*/];
629
- case 20: return [2 /*return*/];
540
+ return [7];
541
+ case 20: return [2];
630
542
  }
631
543
  });
632
544
  }); };
633
545
  exports.updateQuotedByObjectFieldFormulaValue = updateQuotedByObjectFieldFormulaValue;
634
546
  var updateDocsFieldFormulaValue = function (docs, fieldFormulaConfig, userSession, escapeConfigs) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
635
- var fieldFormulaObjectName, fieldFormulaObject, currentUserId, docs_2, docs_2_1, doc, value, setDoc, e_8_1;
547
+ var fieldFormulaObjectName, fieldFormulaObject, docs_2, docs_2_1, doc, value, setDoc, e_8_1;
636
548
  var e_8, _a;
637
549
  return tslib_1.__generator(this, function (_b) {
638
550
  switch (_b.label) {
@@ -642,48 +554,44 @@ var updateDocsFieldFormulaValue = function (docs, fieldFormulaConfig, userSessio
642
554
  docs = [docs];
643
555
  }
644
556
  if (!docs.length) {
645
- return [2 /*return*/];
557
+ return [2];
646
558
  }
647
559
  fieldFormulaObject = (0, index_1.getSteedosSchema)().getObject(fieldFormulaObjectName);
648
- currentUserId = userSession ? userSession.userId : undefined;
649
560
  _b.label = 1;
650
561
  case 1:
651
562
  _b.trys.push([1, 7, 8, 9]);
652
563
  docs_2 = tslib_1.__values(docs), docs_2_1 = docs_2.next();
653
564
  _b.label = 2;
654
565
  case 2:
655
- if (!!docs_2_1.done) return [3 /*break*/, 6];
566
+ if (!!docs_2_1.done) return [3, 6];
656
567
  doc = docs_2_1.value;
657
- return [4 /*yield*/, (0, exports.computeFieldFormulaValue)(doc, fieldFormulaConfig, currentUserId)];
568
+ return [4, (0, exports.computeFieldFormulaValue)(doc, fieldFormulaConfig, userSession)];
658
569
  case 3:
659
570
  value = _b.sent();
660
571
  setDoc = {};
661
572
  setDoc[fieldFormulaConfig.field_name] = value;
662
- return [4 /*yield*/, fieldFormulaObject.directUpdate(doc._id, setDoc)];
573
+ return [4, fieldFormulaObject.directUpdate(doc._id, setDoc)];
663
574
  case 4:
664
575
  _b.sent();
665
576
  _b.label = 5;
666
577
  case 5:
667
578
  docs_2_1 = docs_2.next();
668
- return [3 /*break*/, 2];
669
- case 6: return [3 /*break*/, 9];
579
+ return [3, 2];
580
+ case 6: return [3, 9];
670
581
  case 7:
671
582
  e_8_1 = _b.sent();
672
583
  e_8 = { error: e_8_1 };
673
- return [3 /*break*/, 9];
584
+ return [3, 9];
674
585
  case 8:
675
586
  try {
676
587
  if (docs_2_1 && !docs_2_1.done && (_a = docs_2.return)) _a.call(docs_2);
677
588
  }
678
589
  finally { if (e_8) throw e_8.error; }
679
- return [7 /*endfinally*/];
680
- case 9:
681
- // 这里特意重新遍历一次docs而不是直接在当前函数中每次更新一条记录后立即处理被引用字段的级联变更,见:公式或汇总触发级联重算时,数据类型变更可能会造成无法重算 #965
682
- return [4 /*yield*/, (0, exports.updateQuotedByDocsForFormulaType)(docs, fieldFormulaConfig, userSession, escapeConfigs)];
590
+ return [7];
591
+ case 9: return [4, (0, exports.updateQuotedByDocsForFormulaType)(docs, fieldFormulaConfig, userSession, escapeConfigs)];
683
592
  case 10:
684
- // 这里特意重新遍历一次docs而不是直接在当前函数中每次更新一条记录后立即处理被引用字段的级联变更,见:公式或汇总触发级联重算时,数据类型变更可能会造成无法重算 #965
685
593
  _b.sent();
686
- return [2 /*return*/];
594
+ return [2];
687
595
  }
688
596
  });
689
597
  }); };
@@ -699,13 +607,13 @@ var updateQuotedByDocsForFormulaType = function (docs, fieldFormulaConfig, userS
699
607
  docs = [docs];
700
608
  }
701
609
  if (!docs.length) {
702
- return [2 /*return*/];
610
+ return [2];
703
611
  }
704
612
  fieldNames = [fieldFormulaConfig.field_name];
705
- return [4 /*yield*/, (0, field_formula_1.getObjectQuotedByFieldFormulaConfigs)(fieldFormulaObjectName, fieldNames, escapeConfigs)];
613
+ return [4, (0, field_formula_1.getObjectQuotedByFieldFormulaConfigs)(fieldFormulaObjectName, fieldNames, escapeConfigs)];
706
614
  case 1:
707
615
  formulaQuotedByConfigs = _b.sent();
708
- return [4 /*yield*/, (0, summary_1.getObjectQuotedByFieldSummaryConfigs)(fieldFormulaObjectName, fieldNames)];
616
+ return [4, (0, summary_1.getObjectQuotedByFieldSummaryConfigs)(fieldFormulaObjectName, fieldNames)];
709
617
  case 2:
710
618
  summaryQuotedByConfigs = _b.sent();
711
619
  _b.label = 3;
@@ -714,69 +622,55 @@ var updateQuotedByDocsForFormulaType = function (docs, fieldFormulaConfig, userS
714
622
  docs_3 = tslib_1.__values(docs), docs_3_1 = docs_3.next();
715
623
  _b.label = 4;
716
624
  case 4:
717
- if (!!docs_3_1.done) return [3 /*break*/, 8];
625
+ if (!!docs_3_1.done) return [3, 8];
718
626
  doc = docs_3_1.value;
719
- // 公式字段修改后,需要找到引用了该公式字段的其他公式字段并更新其值
720
- return [4 /*yield*/, (0, exports.runQuotedByObjectFieldFormulas)(fieldFormulaObjectName, doc._id, userSession, {
627
+ return [4, (0, exports.runQuotedByObjectFieldFormulas)(fieldFormulaObjectName, doc._id, userSession, {
721
628
  fieldNames: fieldNames,
722
629
  quotedByConfigs: formulaQuotedByConfigs,
723
630
  escapeConfigs: escapeConfigs
724
- })
725
- // 公式字段修改后,需要找到引用了该公式字段的其他汇总字段并更新其值
726
- ];
631
+ })];
727
632
  case 5:
728
- // 公式字段修改后,需要找到引用了该公式字段的其他公式字段并更新其值
729
633
  _b.sent();
730
- // 公式字段修改后,需要找到引用了该公式字段的其他汇总字段并更新其值
731
- return [4 /*yield*/, (0, summary_1.runQuotedByObjectFieldSummaries)(fieldFormulaObjectName, doc._id, null, userSession, {
634
+ return [4, (0, summary_1.runQuotedByObjectFieldSummaries)(fieldFormulaObjectName, doc._id, null, userSession, {
732
635
  fieldNames: fieldNames,
733
636
  quotedByConfigs: summaryQuotedByConfigs
734
637
  })];
735
638
  case 6:
736
- // 公式字段修改后,需要找到引用了该公式字段的其他汇总字段并更新其值
737
639
  _b.sent();
738
640
  _b.label = 7;
739
641
  case 7:
740
642
  docs_3_1 = docs_3.next();
741
- return [3 /*break*/, 4];
742
- case 8: return [3 /*break*/, 11];
643
+ return [3, 4];
644
+ case 8: return [3, 11];
743
645
  case 9:
744
646
  e_9_1 = _b.sent();
745
647
  e_9 = { error: e_9_1 };
746
- return [3 /*break*/, 11];
648
+ return [3, 11];
747
649
  case 10:
748
650
  try {
749
651
  if (docs_3_1 && !docs_3_1.done && (_a = docs_3.return)) _a.call(docs_3);
750
652
  }
751
653
  finally { if (e_9) throw e_9.error; }
752
- return [7 /*endfinally*/];
753
- case 11: return [2 /*return*/];
654
+ return [7];
655
+ case 11: return [2];
754
656
  }
755
657
  });
756
658
  }); };
757
659
  exports.updateQuotedByDocsForFormulaType = updateQuotedByDocsForFormulaType;
758
- /**
759
- * 某个对象上的公式字段是否引用了某个对象和字段
760
- * @param formulaObjectName 公式字段在所在对象名称
761
- * @param formulaFieldName 公式字段名称
762
- * @param object_name 是否引用了该对象
763
- * @param field_name 是否引用了该字段
764
- */
765
660
  var isFormulaFieldQuotingObjectAndFields = function (formulaObjectName, formulaFieldName, objectName, fieldNames) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
766
661
  var configs;
767
662
  return tslib_1.__generator(this, function (_a) {
768
663
  switch (_a.label) {
769
- case 0: return [4 /*yield*/, (0, field_formula_1.getObjectFieldFormulaConfigs)(formulaObjectName, formulaFieldName)];
664
+ case 0: return [4, (0, field_formula_1.getObjectFieldFormulaConfigs)(formulaObjectName, formulaFieldName)];
770
665
  case 1:
771
666
  configs = _a.sent();
772
667
  if (configs && configs.length) {
773
- return [2 /*return*/, (0, util_1.isFieldFormulaConfigQuotingObjectAndFields)(configs[0], objectName, fieldNames)];
668
+ return [2, (0, util_1.isFieldFormulaConfigQuotingObjectAndFields)(configs[0], objectName, fieldNames)];
774
669
  }
775
670
  else {
776
- // 没找到公式字段配置说明传入的参数不是公式字段
777
- return [2 /*return*/, false];
671
+ return [2, false];
778
672
  }
779
- return [2 /*return*/];
673
+ return [2];
780
674
  }
781
675
  });
782
676
  }); };