OCLOperators PSEvalValue
No edit summary
(Automatically adding template at the end of the page.)
(5 intermediate revisions by 3 users not shown)
Line 1: Line 1:
Makes it possible use oclPS in any OCL expression.
OCLOperator PSEvalValue makes it possible to use oclPS in any OCL expression.


Expression template
Expression template:
  SomeClass.PSEvalValue(SomeClass.allinstances->select(x|x.name=vWhatever)->size,dependon)  
  SomeClass.PSEvalValue(SomeClass.allinstances->select(x|x.name=vWhatever)->size,dependon)  
Using this you can "reach into" the database from OCL and action-language (EAL)
Using this, you can "reach into" the database from OCL and action-language (EAL).


'''Note!''' - PSEval don't subscribe on the value from the db. To make the operator auto-updating, provide an expression in "dependon" that when changed should also rerun the PSEval expression. This can for example be a timer.
'''Note!''' PSEval doesn't subscribe to the value from the DB. To make the operator auto-updating, provide an expression in "dependon" that, when changed, should also rerun the PSEval expression. This can, for example, be a timer.


For example this expression from a method having "userName" as a parameter
For example, this expression from a method has "userName" as a parameter:
  SysAsyncTicket.PSEvalValue(SysAsyncTicket.allInstances->select(at|at.Error.notNull)->size, Calendar.Now).asString
  SysAsyncTicket.PSEvalValue(SysAsyncTicket.allInstances->select(at|at.Error.notNull)->size, Calendar.Now).asString
The expression above will execute the a '''select count(*)''' on the table SysAsyncTicket with a where statement filtering on '''Error IS NOT NULL''' and the getting the value (number of rows). In the [[BaseApp]] model Calendar.Now updates every minute, which makes the count to reevaluate as long as this value is used.
The expression above will execute the '''select count(*)''' on the table SysAsyncTicket with a where statement filtering on '''Error IS NOT NULL''' and then getting the value (number of rows). In the [[BaseApp]] model, Calendar.Now updates every minute, which makes the count reevaluate as long as this value is used.


Always remember that your SQL-server might also need indexes and other performance settings to be able to execute your expression efficient.
Always remember that your SQL-server might also need indexes and other performance settings to execute your expression efficiently.


See also [[OCLOperators Sqlpassthrough|Sqlpassthrough]], [[OCLOperators PSEval|PSEval]]
See also: [[OCLOperators Sqlpassthrough|Sqlpassthrough]], [[OCLOperators PSEval|PSEval]], [[OCLOperators PSEvalTuples|PSEvalTuples]]
[[Category:OCLOperators]]
{{Edited|July|12|2024}}

Revision as of 15:39, 10 February 2024

OCLOperator PSEvalValue makes it possible to use oclPS in any OCL expression.

Expression template:

SomeClass.PSEvalValue(SomeClass.allinstances->select(x|x.name=vWhatever)->size,dependon) 

Using this, you can "reach into" the database from OCL and action-language (EAL).

Note! PSEval doesn't subscribe to the value from the DB. To make the operator auto-updating, provide an expression in "dependon" that, when changed, should also rerun the PSEval expression. This can, for example, be a timer.

For example, this expression from a method has "userName" as a parameter:

SysAsyncTicket.PSEvalValue(SysAsyncTicket.allInstances->select(at|at.Error.notNull)->size, Calendar.Now).asString

The expression above will execute the select count(*) on the table SysAsyncTicket with a where statement filtering on Error IS NOT NULL and then getting the value (number of rows). In the BaseApp model, Calendar.Now updates every minute, which makes the count reevaluate as long as this value is used.

Always remember that your SQL-server might also need indexes and other performance settings to execute your expression efficiently.

See also: Sqlpassthrough, PSEval, PSEvalTuples

This page was edited 8 days ago on 05/03/2024. What links here