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