JSDataSourceNode
Overview
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.
Methods Summarized
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.
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.
Methods Detailed
getCalculation(name)
Get an existing calculation for the datasource node.
Parameters
String name The name of the calculation
Returns: JSCalculation a JSCalculation object for the specified calculation name, or null if no such calculation exists.
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]);
}
getCalculations()
Gets all the calculations for the datasource node.
Returns: Array an array of all JSCalculation objects for the data source node.
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]);
}
getDataSource()
Get the data source for this node.
Returns: String the dataSource
Sample
var nodeDataSource = solutionModel.getDataSourceNode("db:/example_data/customers").getDataSource();
getMethod(name)
Get an existing foundset method for the datasource node.
Parameters
String name The name of the method
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
String code 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
String code The code of the calculation, this must be a full function declaration.
Number type 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
String code the specified code for the foundset method
Returns: JSMethod a JSMethod object
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())
removeCalculation(name)
Removes the calculation specified by name.
Parameters
String name 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]);
}
removeMethod(name)
Removes the foundset method specified by name.
Parameters
String name the name of the method to be removed
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]);
}
Last updated
Was this helpful?