Stoc |
---|
The Solution Model is a feature since Servoy version 4.1 which allows you to manipulate different kinds of objects on-the-fly through scripting. You can perform actions such as:
...
The Solution Model is the blueprint of your developed solution. You can modify its blueprint during runtime, but the object still needs to be actually built to become available to the user. Compare it to building a house and where certain rules apply when you want to make changes to the already built house.
...
It's also possible to create new instances of a form within Servoy (by using the function application.createNewFormInstance()). These are copies of the actual house, rather than copies of the blueprint. It is not possible for the Solution Model to grab the properties of these copies, but only from the original. So when you try to grab the new instance of a form by using the Solution Model, then it will retrieve the original form from which the new instance has been created and not the new instance itself.
Even though the Solution Model allows a wide variety of objects that can be manipulated, there are some limitations. The following objects are (currently) not included:
...
Note | ||
---|---|---|
| ||
Manipulating solutions and modules are not applicable for the Solution Model because they are not relevant during deployment. At this point the collection of solutions and modules have become one flat solution. Therefore, no (references to) solutions and modules can be made with the Solution Model. |
...
The Solution Model has certain types of functions:
...
Note | ||
---|---|---|
| ||
As of Servoy version 6 a new method exists, called servoyDeveloper.save(). By running this method in the Debug Client or the Command Console of the Developer, changes by the Solution Model are being pushed back and saved into the worspace. |
This section shows some (simple) examples of how different objects can be controlled with the Solution Model. Per object you will find how to:
...
To create a new blue line border of width 1 and use that on an existing form:
Code Block |
---|
var border = solutionModel.createLineBorder(1, 'blue');
var form = solutionModel.getForm('myForm);
form.borderType = border;
|
...
To create a new calculation with name myCalculation on table customers of server example_data which returns 1:
Code Block |
---|
var calculation = solutionModel.newCalculation('function myCalculation() { return 1; }', JSVariable.INTEGER, 'db:/example_data/customers');
|
To get the existing calculation myCalculation on table customers of server example_data:
Code Block |
---|
var calculation = solutionModel.getCalculation('myCalculation', 'db:/example_data/customers');
|
To output whether or not this calculation is a stored one:
Code Block |
---|
application.output('Stored calculation: ' + calculation.isStored();
|
To remove existing calculation myCalculation:
Code Block |
---|
solutionModel.removeCalculation('myCalculation', 'db:/example_data/customers');
|
...
To create a new stylesheet with name myStyle with a default style class for forms:
Code Block |
---|
var style = solutionModel.newStyle('myStyle' 'form { background-color: transparent; }';
|
To get existing stylesheet myStyle:
Code Block |
---|
var style = solutionModel.getStyle('myStyle')
|
To add a default style class for fields:
Code Block |
---|
style.text += 'field { background-color: blue; }';
|
To remove existing stylesheet myStyle:
Code Block |
---|
solutionModel.removeStyle('myStyle');
|
...
To create a new global variable with name myGlobalVariable of type TEXT:
Code Block |
---|
var globalVariable = solutionModel.newGlobalVariable('myGlobalVariable', JSVariable.TEXT);
|
To get existing global variable myGlobalVariable:
Code Block |
---|
var globalVariable = solutionModel.getGlobalVariable('myGlobalVariable');
|
To change its default value to abc:
Code Block |
---|
myGlobalVariable.defaultValue = 'abc';
|
To remove existing global variable myGlobalVariable:
Code Block |
---|
solutionModel.removeGlobalVariable('myGlobalVariable');
|
...
To create a new global method with name myGlobalMethod:
Code Block |
---|
var globalMethod = solutionModel.newGlobalMethod('function myGlobalMethod() { currentcontroller.newRecord(); }');
|
To get existing global method myGlobalMethod:
Code Block |
---|
var globalMethod = solutionModel.getGlobalMethod('myGlobalMethod');
|
To make it appear in the menu:
Code Block |
---|
globalMethod.showInMenu = true;
|
To remove existing global method myGlobalMethod:
Code Block |
---|
solutionModel.removeGlobalMethod('myGlobalMethod');
|
...
To create a new form with name myForm:
Code Block |
---|
var form = solutionModel.newForm('myForm');
|
To get existing form myForm:
Code Block |
---|
var form = solutionModel.getForm('myForm');
|
To disable its navigator:
Code Block |
---|
form.navigator = SM_DEFAULTS.NONE;
|
...
To clone existing form myForm to cloned form myClonedForm:
Code Block |
---|
var form = solutionModel.getForm('myForm');
var clonedForm = solutionModel.cloneForm('myClonedForm', form);
|
To remove existing form myForm:
Code Block |
---|
var success = history.removeForm('myForm');
if (success) {
solutionModel.removeForm('myForm');
}
|
To revert existing form myForm to its original design-time state:
Code Block |
---|
var success = history.removeForm('myForm');
if (success) {
solutionModel.revertForm('myForm');
}
|
...
To retrieve component with name myButton:
Code Block |
---|
var component = form.getComponent('myButton');
|
To hide the element:
Code Block |
---|
component.visible = true;
|
To retrieve all available components on the form:
Code Block |
---|
var components = form.getComponents();
|
To change the width of all elements to 200:
Code Block |
---|
for (var i = 0; i < components.length; i++) {
components[i].width = 200;
}
|
To clone an existing component:
Code Block |
---|
solutionModel.cloneComponent('myClonedComponent', component);
|
Note | ||
---|---|---|
| ||
To test to what type of object the retrieved component belongs to, you need to use the JavaScript operator instanceof. For example, if you want to find out if the component is a button, use: component instanceof JSButton |
...
To create a new form variable with name myFormVariable:
Code Block |
---|
var formVariable = form.newFormVariable('myFormVariable', JSField.TEXT_FIELD);
|
To get existing form variable myFormVariable:
Code Block |
---|
var formVariable = form.getFormVariable('myFormVariable');
|
To change its default value to abc:
Code Block |
---|
formVariable.defaultValue = 'abc';
|
To remove existing form variable myFormVariable:
Code Block |
---|
form.removeFormVariable('myFormVariable');
|
...
To create a new form method with name myFormMethod:
Code Block |
---|
var formMethod = form.newFormMethod('function myFormMethod() {controller.newRecord(); }');
|
To get existing form method myFormMethod:
Code Block |
---|
var formMethod = form.getFormMethod('myformMethod');
|
To make it appear in the menu:
Code Block |
---|
globalMethod.showInMenu = true;
|
To remove existing form method myFormMethod:
Code Block |
---|
form.removeFormMethod('myFormMethod');
|
...
To create a new body:
Code Block |
---|
var part = form.newPart(JSPart.BODY, 20);
|
To retrieve the existing body part:
Code Block |
---|
var part = form.getPart(JSPart.BODY);
|
To change its background to white:
Code Block |
---|
part.background = 'white';
|
To remove the existing body part:
Code Block |
---|
form.removePart(JSPart.BODY);
|
...
To create a tree view with name myBean:
Code Block |
---|
var bean = form.newBean('myBean', 'com.servoy.extensions.beans.dbtreeview.DBTreeView', 200, 200, 300, 300);
|
To get existing bean myBean:
Code Block |
---|
form.getBean('myBean');
|
To change its anchoring to top, left and bottom:
Code Block |
---|
bean.anchors = SM_ANCHOR.NORTH | SM_ANCHOR.WEST | SM_ANCHOR.SOUTH;
|
To remove existing bean myBean:
Code Block |
---|
form.removeBean('myBean');
|
...
To create a new button with name myButton and text Text and attaching global method myGlobalMethod to it:
Code Block |
---|
var globalMethod = solutionModel.getGlobalMethod('myGlobalMethod');
var button = form.newButton('Text', 0, 0, 80, 20, globalMethod);
button.name = 'myButton';
|
To get existing button myButton:
Code Block |
---|
var button = solutionModel.getButton('myButton');
|
To change its height to 30:
Code Block |
---|
button.height = 30;
|
To remove existing button myButton:
Code Block |
---|
form.removeButton('myButton');
|
...
To create a new text field with name myField with form variable myFormVariable as its dataprovider:
Code Block |
---|
var formVariable = form.getFormVariable('myFormVariable');
var field = form.newField(formVariable, JSField.TEXT_FIELD, 0, 0, 100, 200);
field.name = 'myField';
|
To get existing field myField:
Code Block |
---|
var field = form.getField('myField');
|
To change its display type to a text area:
Code Block |
---|
field.displayType = JSField.TEXT_AREA;
|
To remove existing field myField:
Code Block |
---|
form.removeField('myField');
|
...
To create a new label with name myLabel with text Text:
Code Block |
---|
var label = form.newLabel('Text', 0, 0, 100, 20);
label.name = 'myLabel';
|
To get existing label myLabel:
Code Block |
---|
var label = form.getLabel('myLabel');
|
To change its horizontal alignment to center:
Code Block |
---|
label.horizontalAlignment = SM_ALIGNMENT.CENTER;
|
To remove existing label myLabel:
Code Block |
---|
form.removeLabel('myLabel');
|
...
To create a new portal with name myPortal based on relation myRelation:
Code Block |
---|
var relation = solutionModel.getRelation('myRelation');
var portal = form.newPortal('myPortal', relation, 0, 0, 500, 500);
|
To get existing portal myPortal:
Code Block |
---|
var portal = form.getPortal('myPortal');
|
To make it resizable:
Code Block |
---|
portal.resizable = true;
|
To remove existing portal myPortal:
Code Block |
---|
form.removePortal('myPortal');
|
...
To create a new tab with name myTabPanel:
Code Block |
---|
var tabPanel = form.newTabPanel('myTabPanel', 0, 0, 500, 500);
|
To get existing tab panel myTabPanel:
Code Block |
---|
var tabPanel = form.getTabPanel('myTabPanel);
|
To add a new tab with name myTab based on relation myRelation:
Code Block |
---|
var relation = solutionModel.getRelation('myRelation');
var tab = tabPanel.newTab('myTab', 'Text', myRelatedForm, relation);
|
To remove existing tab panel myTabPanel:
Code Block |
---|
form.removeTabPanel('myTabPanel');
|
...
To create a new relation with name myRelation between tables customers and orders:
Code Block |
---|
var relation = solutionModel.newRelation('myRelation', 'db:/example_data/customers', 'db:/example_data/orders', JSRelation.INNER_JOIN);
|
To get existing relation myRelation:
Code Block |
---|
var relation = solutionModel.getRelation('myRelation');
|
To create new a new relation item based on fields id and customer_id:
Code Block |
---|
relation.newRelationItem('id', '=', 'customer_id');
|
To remove existing relation myRelation:
Code Block |
---|
solutionModel.removeRelation('myRelation');
|
...
To create a new value list with name myValueList:
Code Block |
---|
var valueList = solutionModel.newValueList('myValueList', JSValueList.CUSTOM_VALUES);
|
To get existing value list myValueList:
Code Block |
---|
var valueList = solutionModel.getValueList('myValueList');
|
To set custom values for the value list:
Code Block |
---|
valueList.customValues = '1\n2';
|
To remove existing value list myValueList:
Code Block |
---|
solutionModel.removeValueList('myValueList');
|
...
To create new media with name myMedia:
Code Block |
---|
var media = solutionModel.newMedia('myMedia', plugins.http.getMediaData('http://www.servoy.com/images/logo_servoy.gif'));
|
To get existing media myMedia:
Code Block |
---|
var media = solutionModel.getMedia('myMedia');
|
To change its content:
Code Block |
---|
media.bytes = plugins.http.getMediaData('http://servoy.com/images/headerimages/open_source.jpg');
|
To remove existing media myMedia:
Code Block |
---|
solutionModel.removeMedia('myMedia');
|
...