@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.
- 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 +4 -67
- package/lib/formula/core.js +132 -238
- 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.d.ts +3 -3
- package/lib/formula/index.js +24 -37
- 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 +35 -51
- 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 +1 -52
- package/lib/formula/type.js +0 -4
- package/lib/formula/type.js.map +1 -1
- package/lib/formula/util.d.ts +2 -71
- package/lib/formula/util.js +9 -79
- 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 +96 -78
- package/lib/typeorm/driver.js.map +1 -1
- package/lib/typeorm/util.js +5 -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 +4 -34
- 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 +291 -403
- package/lib/types/object.js.map +1 -1
- package/lib/types/object_dynamic_load.js +40 -45
- 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 +11 -18
- 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 = [
|
|
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 = [
|
|
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 =
|
|
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 (!
|
|
76
|
-
throw new Error("computeFormulaParams:The param '
|
|
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
|
|
146
|
+
return [2, params];
|
|
167
147
|
});
|
|
168
148
|
}); };
|
|
169
149
|
exports.computeFormulaParams = computeFormulaParams;
|
|
170
|
-
var computeFieldFormulaValue = function (doc, fieldFormulaConfig,
|
|
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 (!
|
|
176
|
-
(0, util_1.
|
|
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
|
|
159
|
+
return [4, (0, exports.computeFormulaParams)(doc, vars, userSession)];
|
|
180
160
|
case 1:
|
|
181
161
|
params = _a.sent();
|
|
182
|
-
return [2
|
|
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] = "{...}";
|
|
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"
|
|
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"
|
|
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"
|
|
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"
|
|
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"
|
|
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"
|
|
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"
|
|
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"
|
|
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
|
|
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
|
|
332
|
-
return [4
|
|
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
|
|
272
|
+
return [2];
|
|
339
273
|
}
|
|
340
|
-
if (!
|
|
341
|
-
(0, util_1.
|
|
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
|
|
283
|
+
if (!!_b.done) return [3, 7];
|
|
350
284
|
config = _b.value;
|
|
351
|
-
return [4
|
|
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
|
|
358
|
-
case 7: return [3
|
|
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
|
|
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
|
|
369
|
-
case 10: return [2
|
|
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
|
|
392
|
-
return [4
|
|
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
|
|
323
|
+
return [2];
|
|
399
324
|
}
|
|
400
|
-
if (!
|
|
401
|
-
(0, util_1.
|
|
325
|
+
if (!userSession) {
|
|
326
|
+
(0, util_1.checkUserSessionNotRequiredForFieldFormulas)(configs);
|
|
402
327
|
}
|
|
403
|
-
if (!(needRefetchDoc !== false)) return [3
|
|
328
|
+
if (!(needRefetchDoc !== false)) return [3, 4];
|
|
404
329
|
formulaVarFields = (0, exports.pickFieldFormulaVarFields)(configs);
|
|
405
|
-
return [4
|
|
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
|
|
342
|
+
if (!!configs_1_1.done) return [3, 9];
|
|
418
343
|
config = configs_1_1.value;
|
|
419
|
-
doc = Object.assign({}, doc, setDoc);
|
|
344
|
+
doc = Object.assign({}, doc, setDoc);
|
|
420
345
|
_a = setDoc;
|
|
421
346
|
_b = config.field_name;
|
|
422
|
-
return [4
|
|
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
|
|
429
|
-
case 9: return [3
|
|
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
|
|
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
|
|
440
|
-
case 12: return [4
|
|
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
|
|
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
|
|
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
|
|
384
|
+
return [2];
|
|
466
385
|
}
|
|
467
|
-
if (!
|
|
468
|
-
(0, util_1.
|
|
386
|
+
if (!userSession) {
|
|
387
|
+
(0, util_1.checkUserSessionNotRequiredForFieldFormulas)(configs);
|
|
469
388
|
}
|
|
470
389
|
formulaVarFields = (0, exports.pickFieldFormulaVarFields)(configs);
|
|
471
|
-
return [4
|
|
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
|
|
399
|
+
if (!!docs_1_1.done) return [3, 7];
|
|
481
400
|
doc = docs_1_1.value;
|
|
482
|
-
return [4
|
|
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
|
|
489
|
-
case 7: return [3
|
|
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
|
|
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
|
|
500
|
-
case 10: return [2
|
|
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
|
|
477
|
+
if (!!toAggregatePaths_1_1.done) return [3, 17];
|
|
566
478
|
toAggregatePathsItem = toAggregatePaths_1_1.value;
|
|
567
|
-
if (!(toAggregatePathsItem.length < 3)) return [3
|
|
479
|
+
if (!(toAggregatePathsItem.length < 3)) return [3, 11];
|
|
568
480
|
tempPath = toAggregatePathsItem[0];
|
|
569
|
-
if (!(fieldFormulaObjectName === objectName && tempPath.reference_from === objectName)) return [3
|
|
570
|
-
return [4
|
|
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
|
|
485
|
+
return [4, (0, exports.updateDocsFieldFormulaValue)(doc, fieldFormulaConfig, userSession, escapeConfigs)];
|
|
574
486
|
case 4:
|
|
575
487
|
_d.sent();
|
|
576
|
-
return [3
|
|
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
|
|
580
|
-
return [4
|
|
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
|
|
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
|
|
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
|
|
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
|
|
598
|
-
return [4
|
|
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
|
|
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
|
|
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
|
|
618
|
-
case 17: return [3
|
|
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
|
|
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
|
|
629
|
-
case 20: return [2
|
|
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,
|
|
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
|
|
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
|
|
566
|
+
if (!!docs_2_1.done) return [3, 6];
|
|
656
567
|
doc = docs_2_1.value;
|
|
657
|
-
return [4
|
|
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
|
|
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
|
|
669
|
-
case 6: return [3
|
|
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
|
|
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
|
|
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
|
|
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
|
|
610
|
+
return [2];
|
|
703
611
|
}
|
|
704
612
|
fieldNames = [fieldFormulaConfig.field_name];
|
|
705
|
-
return [4
|
|
613
|
+
return [4, (0, field_formula_1.getObjectQuotedByFieldFormulaConfigs)(fieldFormulaObjectName, fieldNames, escapeConfigs)];
|
|
706
614
|
case 1:
|
|
707
615
|
formulaQuotedByConfigs = _b.sent();
|
|
708
|
-
return [4
|
|
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
|
|
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
|
|
742
|
-
case 8: return [3
|
|
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
|
|
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
|
|
753
|
-
case 11: return [2
|
|
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
|
|
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
|
|
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
|
|
673
|
+
return [2];
|
|
780
674
|
}
|
|
781
675
|
});
|
|
782
676
|
}); };
|