Resolvers
If a configuration requires a relationship to a specific value, a value configuration almost always comes into play – regardless of whether it is a ‘simple’ value or a more or less complex data object.
A placeholder for a value configuration then appears in the configuration context, which can be used – usually optionally – to set up exactly one specific ‘value resolver’.
This screenshot shows a ‘clear’ value configuration, i.e. the appearance of the placeholder for a value configuration within another configuration (e.g. as a parameter in an event action).
The text ‘No value configured’ indicates that there is no value configuration. This status is not identical to ‘No value’ ($null) being explicitly assigned as a static ‘non-value’ (see No value).
The purpose for which a specific Resolvers is used depends on the configuration in the context. In principle, the following cases can be distinguished:
The value configuration defines a ‘data source’, i.e. it should ‘obtain’ a value (through a read access or the ‘creation’ of a value) so that it can be processed (e.g. output or assigned).
The value configuration defines a ‘data sink’, i.e. the transfer point for a value assignment, e.g. a variable or a field of a data object to which a value is to assigned.
The configuration of the Set value event action (see screenshot on the right) perfectly visualises both use cases for a value configuration: The left-hand value configuration defines where the value obtained by the right-hand value configuration is written. |
|
Lobster Data Platform / Orchestration offers value resolvers in the following categories, depending in part on the licensing of certain modules:
Configuration
Each value configuration begins by clicking on the menu icon (on the left of each placeholder), which opens the context-specific selection dialogue:
The selection dialogue lists all available categories of value resolvers on the left. By default, the overarching (pseudo) category ‘all’ is selected so that all available value resolvers are displayed in the selection list (on the right), including a reference to their parent category (in the ‘bottom line’). The first entry in the selection list is focussed in the image: A user-defined value resolver with the name ‘myResolver’, which belongs to the ‘Custom blocks’ category. At the top left (in the menu bar above the lists) there is an input field for a search criterion that only searches the entries in the selection list (i.e. the Resolvers in the selected category). The ‘all’ category is always preset when opening the selection dialogue so that entering a search criterion without selecting a specific category always takes all available Resolvers into account. More experienced users skip the category selection and simply enter a proven string to quickly reach the selection for a specific resolver. Various ribbon buttons appear to the right of the search field depending on the circumstances. In the screenshot, for example, the ‘Paste’ ribbon button appears because the Lobster Data Platform / Orchestration clipboard contains content suitable for pasting. This must be a value resolver. |
|
Search value resolver |
|
The screenshot on the right shows a selection list that is restricted by the selection of a category (‘Content builder’) in the menu bar. Here, the name of the category is not shown in the bottom line, as it matches the preselection for all ‘matches’. As long as a category only contains a manageable number of value resolvers, the selection of the ‘right’ choice for a particular task is quite easy based on the short list for the category. As can be seen from the numbers behind the name of the category in the menu bar, there are also categories (e.g. ‘Value resolvers (38)’ or ‘String processing (14)’) to which so many value resolvers are assigned that the restricted selection list is also long. The system for assigning value resolvers to categories is a single-level hierarchy, i.e. each value resolver is assigned to exactly one category. This means that ‘finding’ the right value resolver by selecting a category only works if the user makes the right choice from the categories offered. Not all categories offered are named in such a way that a specific profile can be derived from the name. In addition, the range of tasks for custom value resolvers in the ‘Custom subroutines’ category, for example, is unspecific by definition. Whether a user prefers the selection from a self-selected category over a ‘global’ search via the 'all’ category depends on many factors – such as individual knowledge, experience and preferences – as well as on the specific task: Whether the aim is to ‘find’ a known value resolver in order to select it as efficiently as possible, or to search for a ‘suitable’ candidate that might not even exist, or how it is named, and where it should be categorised. |
|
In the screenshot on the right, the character string ‘relative’ was entered in the search field while the category ‘all’ was selected (default when opening). The selection list in the screenshot shows exactly two matches for the search string entered, in whose name the text ‘relative’ was ‘found’ in a coherent but case-insensitive manner. However, it is not a criterion for the search that the characters entered were used as a continuous substring in the name, as the next example demonstrates. |
|
In the screenshot on the right, the ‘rangetime’ string has been entered in the search field. The ‘all’ category has been retained. With this string, the selection list only shows one hit that contains the characters entered (r-a-n-g-e-t-i-m-e) in the order in which they were entered: 'Relative date range with time' The underscoring indicates the matches by character. It remains to be seen whether it is worth remembering the unhelpful keyword ‘rangetime’ for the precise selection of the Relative date with time resolver. In any case, the input speeds up the selection process, which can be finalised by pressing the Enter key. |
|
Getting help with value resolvers |
|
Within the selection list, a small
|
|
Symbols |
|
The placeholder for a value configuration shown at the beginning is represented graphically as the outline of a stadium (geometric figure). This shape is intended to symbolise the value that a specific value configuration returns. In the screenshot on the right, this relates to the left-hand side (placeholder) within a Set value event action. In contrast, the right-hand side of the Set value configuration shows a trapezoid with a blue border, which represents a specific value resolver (here: Random long value). The symbol is intended to represent the value resolver as a funnel into which an input value is tipped ‘from above’ in order to obtain a specific return value ‘below’. |
|
The screenshot on the right shows a Set value event action that defines the assignment of a random long Long value (Random long value resolver on the right) as the value of a variable (Variable value resolver on the left).
|
|
The screenshot on the right shows the same Set value event action, but after clicking on the minus sign at the top right in the blue framed area for both value configurations. The configuration interface with the parameters is therefore no longer visible and the funnel symbol with the blue border now only shows the name of the value resolver (in grey at the top) and specific detailed information (left: name of the variable, right: type of return value). |
|
The screenshot on the right again shows the same Set value event action, but after clicking on the minus sign at the top right of the grey rectangle for both value configurations. The blue-framed funnel symbol for the value resolver has now disappeared completely and only the stadium symbol, which indicates the area for a value configuration (with or without a configured value resolver), can be seen. |
|
Concatenation of value resolvers |
|
The aim of a value configuration is always to provide exactly one return value. This can also be a ‘list’ of values or a complex data object with several values in data fields. However, these complex data structures are also returned as one value (object), just like a simple numerical value or text. However, each value configuration can contain more than one value resolver if these are combined to form a value resolver chain. Within the chain, which appears in the configuration interface as a ‘stack’ of value resolvers, each value resolver has exactly one input value (possibly from its predecessor in the chain) and exactly one return value, which either serves as the input value for its successor in the chain or represents the return value of the entire chain. The screenshot on the right illustrates this using the example of a Set value event action in the value configuration for the value to be assigned (right):
|
|
The screenshot on the right shows the configuration for the Set value resolver after clicking on the minus sign at the top right in the value configuration for the value to be assigned (right).
|
|
The selection dialogue described above, which must be called up to add a value resolver in an existing value configuration for an insertion point selected by the user, enables value resolvers to be chained. As shown in the screenshot on the right, each value resolver has an insertion point at the top and bottom of the funnel icon to allow a predecessor or successor to be added. All available insertion points within a value configuration are marked with a When concatenating a single value resolver with a second one, a Chained resolver is automatically created, which acts as an invisible interface between the value configuration and the value resolver chain. If only a single value resolver remains after removing the other resolvers from the chain (menu icon → selection dialogue → ribbon button ‘Remove value’ or ‘Cut’), and automatically disappears again from the value configuration. |
|
Nesting of value resolvers |
|
If Resolvers have parameters of a certain type, it should be possible to assign a value to these parameters in the context of the configuration. The value resolver for static text shown on the right (see Text) provides an input field for text, the value of which can only be changed in the configuration context. At runtime, the configured text value ‘static’ (unchangeable) is returned. |
|
In contrast, the Variable value resolver shown on the right provides two alternative ways of providing the Variable name text parameter:
|
|
If the value of a parameter (here: Variable name) allows the parameter value to be defined as the return value of another value resolver, the two value resolvers can be considered to be nested or cascaded, whereby the inner value resolver must provide its return value so that the outer resolver can determine its return value. In the example on the right, the Variable name is determined in the outer Variable value resolver using a two-stage value resolver chain:
With this configuration, the Variable value resolver enables read/write access to a variable that is dynamically ‘named’ depending on the role applicable in the context (e.g. ‘Super user limited’). |
|
If the value configuration for the Variable name parameter is changed so that only the static Text resolver offered by default defines the parameter value (see first screenshot on the right), then the next time the entire configuration is opened or after the configuration interface for the Variable value resolver is expanded/collapsed, the direct input originally offered appears again with the small grey arrow symbol at the bottom. |
|
While the choice between direct input vs. value configuration is only offered selectively and almost exclusively for text parameters, the concept of nesting value resolvers is used in a variety of ways – in general, a placeholder for a value configuration is displayed for a parameter by default. Occasionally, a specific value resolver is also pre-assigned. The Conditional value resolver shown in the screenshot on the right offers the option of case differentiation, in which the return value for each case can be determined by a freely definable value configuration. In the example on the right, an Entity property rule with the Is empty compare type was inserted as a rule for case differentiation. This rule contains a value configuration for the check value, which is pre-assigned with an Object property value resolver by default. However, this is only a suggestion. The Object property resolver can easily be replaced by any other type. |
|
The example configuration for the Conditional value shown on the right checks the Entity property rule to see whether the Trim value resolver (check value) returns a string or is empty based on the input value for the Conditional value.
►IMPORTANT◄ The arrows in the configuration interface could give the impression that the check value ‘trimmed’ in the Entity property rule is forwarded to the second branch of the case differentiation as an input value if it is not empty. This is not the case! Instead, in the context of case differentiation, the arrows only symbolise the order in which the branches are logically processed and not the passing on of any value. Both for a further check (not shown in the example) and for a value configuration in each branch, only the input value that was passed to the Conditional value from outside is relevant. |
|