var exprManager = new ExprManager();
var expr = "0.1 + 0.2";
var v = exprManager.calc(expr);
if (!v.errorMsg) {
console.log(v.toValue());
} else {
console.log(v.errorMsg);
}
var calcData = {v1: "hello", v2: "world"};
expr = "v1 + ' ' + v2 + '!'";
v = exprManager.calc(expr, calcData);
console.log(v.toValue());
expr = "IIf(1 > 2, 'a', 'b')";
v = exprManager.calc(expr);
console.log(v.toValue());
expr = "123.ToString()"
v = exprManager.calc(expr);
console.log(v.toValue());
var dataContext = {
"Table": {
fields: {
"Field0": { type: "number", primaryKey: true },
"Field1": { type: "string" },
"Field2": { type: "object" },
"Field3": { type: "array" },
"Field4": { type: "date" },
"Field5": { type: "boolean" },
"CalcField0": { type: "string" },
"CalcField1": { type: "string" }
},
childs: {
"SubTable": {
fields: {
"Field0": { type: "number", primaryKey: true },
"Field1": { type: "string" },
"Field2": { type: "object" },
"Field3": { type: "array" },
"Field4": { type: "date" },
"Field5": { type: "boolean" }
}
}
}
}
};
var data = {
Table: [{
Field0: 0,
Field1: "Hello",
Field2: {key: "i", value: 0},
Field3: [0, 1],
Field4: new Date(),
Field5: false,
SubTable: [{
Field0: 0,
Field1: "Wrold",
Field2: {key: "j", value: 10},
Field3: [2, 3],
Field4: new Date(),
Field5: true
}]
}]
};
var context = {
Field0: "!"
};
exprManager.init(data, dataContext, context);
var tableName = "Table";
var dataCursor = {
"Table": 0,
"Table.SubTable": 0
};
expr = "Field1 + ' ' + SubTable[0].Field1 + $C.Field0";
v = exprManager.calcExpr(expr, tableName, dataCursor);
console.log(v.toValue());
var t = exprManager.calcDependencies(expr, tableName);
console.log(t.dependencies);
exprManager.resetExpression();
var doCalc = function(type, info) {
console.log(type);
};
exprManager.addExpression("Field1 + ' ' + SubTable[0].Field1",
"Table", "CalcField0", ["load", "add", "update", "remove"],
doCalc, null);
exprManager.addExpression("CalcField0 + SubTable.Count().ToString()",
"Table", "CalcField1", ["load", "add", "update", "remove"],
doCalc, null);
var errorMsg = exprManager.checkAndSort();
if (!errorMsg) {
exprManager.calcExpression("load", {
entityName: "Table"
});
exprManager.calcExpression("add", {
entityName: "Table"
});
exprManager.calcExpression("update", {
entityName: "Table",
propertyName: "Field1"
});
exprManager.calcExpression("remove", {
entityName: "Table.SubTable"
});
} else {
console.log(errorMsg)
}