The JSDataSourceNode class facilitates interaction with data source nodes within a Servoy solution model. It enables the creation, retrieval, and management of calculations and foundset methods associated with a data source. * This class is tied to an IApplication instance and a specified data source, allowing dynamic manipulation of related objects.
## Core Functionality
The class provides methods for retrieving and managing calculations and foundset methods. Calculations can be created using JavaScript code, * with the ability to specify types and validate names. Similarly, foundset methods can be dynamically defined and linked to the data source. Both calculations and methods support retrieval, enumeration, and removal, enhancing the flexibility of database scripting.
## Additional Features
The JSDataSourceNode ensures persistence management by integrating with the Servoy framework’s FlattenedSolution and TableNode objects. It supports cloning of script providers and handles runtime exceptions gracefully, ensuring stability. It also provides utility methods like hashCode, equals, and toString for seamless object management in Java environments.
Creates a new calculation for the given code, the type will be the column where it could be build on (if name is a column name), else it will default to JSVariable.
Returns:JSMethod the JSMethod object for the specified method name, or null if no such method exists.
Sample
var method = solutionModel.getDataSourceNode("db:/example_data/orders").newMethod("function doubleSize() { return 2*getSize(); }");
application.output('Doubled orders for this customer: '+customers_to_orders.doubleSize())
getMethods()
Gets all the foundset methods for the datasource node.
Returns:Array an array of all JSMethod objects for the data source node.
Sample
var method = solutionModel.getDataSourceNode("db:/example_data/orders").newMethod("function doubleSize() { return 2*getSize(); }");
application.output('Doubled orders for this customer: '+customers_to_orders.doubleSize())
newCalculation(code)
Creates a new calculation for the given code, the type will be the column where it could be build on (if name is a column name), else it will default to JSVariable.TEXT;
Parameters
Stringcode The code of the calculation, this must be a full function declaration.
Returns:JSCalculation the created JSCalculation object for the specified code with default type TEXT.
Sample
var calc = solutionModel.getDataSourceNode("db:/example_data/customers").newCalculation("function myCalculation() { return 123; }", JSVariable.INTEGER);
var calc2 = solutionModel.getDataSourceNode("db:/example_data/customers").newCalculation("function myCalculation2() { return '20'; }");
var calc3 = solutionModel.getDataSourceNode("db:/example_data/employees").newCalculation("function myCalculation3() { return 'Hello World!'; }", JSVariable.TEXT);
var c = solutionModel.getDataSourceNode("db:/example_data/customers").getCalculation("myCalculation");
application.output("Name: " + c.getName() + ", Stored: " + c.isStored());
var allCalcs = solutionModel.getDataSourceNode("db:/example_data/customers").getCalculations();
for (var i = 0; i < allCalcs.length; i++) {
application.output(allCalcs[i]);
}
newCalculation(code, type)
Creates a new calculation for the given code and the type, if it builds on a column (name is a column name) then type will be ignored.
Parameters
Stringcode The code of the calculation, this must be a full function declaration.
Numbertype The type of the calculation, one of the JSVariable types.
Returns:JSCalculation the created JSCalculation object for the specified code and type.
Sample
var calc = solutionModel.getDataSourceNode("db:/example_data/customers").newCalculation("function myCalculation() { return 123; }", JSVariable.INTEGER);
var calc2 = solutionModel.getDataSourceNode("db:/example_data/customers").newCalculation("function myCalculation2() { return '20'; }");
var calc3 = solutionModel.getDataSourceNode("db:/example_data/employees").newCalculation("function myCalculation3() { return 'Hello World!'; }", JSVariable.TEXT);
var c = solutionModel.getDataSourceNode("db:/example_data/customers").getCalculation("myCalculation");
application.output("Name: " + c.getName() + ", Stored: " + c.isStored());
var allCalcs = solutionModel.getDataSourceNode("db:/example_data/customers").getCalculations();
for (var i = 0; i < allCalcs.length; i++) {
application.output(allCalcs[i]);
}
newMethod(code)
Creates a new foundset method with the specified code.
Parameters
Stringcode the specified code for the foundset method
var method = solutionModel.getDataSourceNode("db:/example_data/orders").newMethod("function doubleSize() { return 2*getSize(); }");
application.output('Doubled orders for this customer: '+customers_to_orders.doubleSize())
removeCalculation(name)
Removes the calculation specified by name.
Parameters
Stringname the name of the calculation to be removed
Returns:Boolean true if the removal was successful, false otherwise
Sample
var calc1 = solutionModel.getDataSourceNode("db:/example_data/customers").newCalculation("function myCalculation1() { return 123; }", JSVariable.INTEGER);
var calc2 = solutionModel.getDataSourceNode("db:/example_data/customers").newCalculation("function myCalculation2() { return '20'; }");
var c = solutionModel.getDataSourceNode("db:/example_data/customers").getCalculation("myCalculation1");
application.output("Name: " + c.getName() + ", Stored: " + c.isStored());
solutionModel.getDataSourceNode("db:/example_data/customers").removeCalculation("myCalculation1");
c = solutionModel.getDataSourceNode("db:/example_data/customers").getCalculation("myCalculation1");
if (c != null) {
application.output("myCalculation could not be removed.");
}
var allCalcs = solutionModel.getDataSourceNode("db:/example_data/customers").getCalculations();
for (var i = 0; i < allCalcs.length; i++) {
application.output(allCalcs[i]);
}
Returns:Boolean true if the removal was successful, false otherwise
Sample
var method1 = solutionModel.getDataSourceNode("db:/example_data/customers").newMethod("function myFoundsetMethod1() { return 123; }");
var method2 = solutionModel.getDataSourceNode("db:/example_data/customers").newCalculation("function myFoundsetMethod2() { return '20'; }");
var m = solutionModel.getDataSourceNode("db:/example_data/customers").getMethod("myFoundsetMethod1");
application.output("Name: " + m.getName());
solutionModel.getDataSourceNode("db:/example_data/customers").removeMethod("myFoundsetMethod1");
m = solutionModel.getDataSourceNode("db:/example_data/customers").getCalculation("myFoundsetMethod1");
if (m != null) { application.output("myFoundsetMethod1 could not be removed."); }
var allMethods = solutionModel.getDataSourceNode("db:/example_data/customers").getMethod();
for (var i = 0; i < allMethods; i++)
{
application.output(allMethods[i]);
}