Code Editor
The Code Editor is designed to display and edit the runtime behavior of a single UBIK® object. Technically, it reads the definition of overrideable properties and methods of the context object (directly from the context object if it is of type MetaClass, otherwise it gets the MetaClass of the context object and reads the definition from there). When using the Code Editor, basic programming skills in Microsoft's C# are certainly beneficial.
Code Editor | |
---|---|
Code Editor control displaying events | |
Name | Code Editor |
Internal Name | CtrlObjectCodeEditor |
Purpose | Edit runtime behavior of objects |
Context object | MetaClass |
Version | 2+ |
Contents
Basics
The Code Editor is probably the most powerful control in UBIK® since it allows to modify the behavior of objects with hardly any limitations. Handle with care! |
Appearance
Code controls
The control reads the definition from the current context object and displays a code editing box for each eligible property or method, its appearance depending on status of the actual property/method:
Captions
Per default, each Code control shows the name of the respective property/method as its caption.
Tooltips
When hovering over the expand/collapse button of a code control, a Tooltip with its code will appear.
Drag & Drop
The Code Editor does not support Drag&Drop operations.
Toolbar
The Code Editor features a toolbar with the following items, from left to right:
Item | Purpose |
---|---|
View Style | Indicates or changes the View Style of the control; changing it will result in reloading of the control |
Insert code snippet... | Displays a sub menu with predefined UBIK® code snippets; selecting one will insert the respective code at the current caret position |
Navigate to context object | Attempts to navigate to the current context MetaClass |
Save | Saves the context object |
Delete | Deletes the custom code and replaces it with the default code |
This control doesn't feature any context menu yet.
View Styles
The Code Editor has four different View Styles, each of them providing different views and functionality.
Events
In this view mode you can override certain events that are thrown by a UBIK® object. This means that custom code can be executed once the event raises. The following events are currently exposed by UBIK® objects:
Methods
In this view mode you can override certain properties and methods that are exposed by an UBIK® object.
Name | Kind | Exposed by | Description |
---|---|---|---|
DisplayString | Property | All | Concatenated from DisplayString[0] and DisplayString[1], separated by a space character; define how objects are displayed in a property configured with a reference. |
DisplayStrings | Property | All | Array of strings defining how objects are visualized on the UBIK® Client (array items 0 and 1 only) as well as in the View Test Environment (all array items). |
DisplayStringItem | Method | All | Optional method to individually define the items of the DisplayStrings array. |
NumberOfDisplayStrings | Method | All | Method to define the number of expected display strings (default = 2, set to a higher number if necessary) |
ToString | Method | All | The string representation of the object can be overwritten here; is evaluated in most of the UBIK® Studio controls. |
EvaluateRowCollection | Method | Query | Method to evaluate the base (primary) collection of result items for the current query; this member must be overwritten if the default functionality (using a database query) does not match; every single row item is validated by ValidateSingleRowResult |
ValidateSingleRowResult | Method | Query | This member is used to validate every single row item that is evaluated in the primary collection with EvaluateRowCollection(); only items where the validation returns true will be part of the Evaluate() collection |
EvaluateBaseChildrenCollection | Method | ViewItem | Method to evaluate the base (primary) collection of children items for the current view item; this member must be overwritten if the default functionality does not match; every single parent item is validated by ValidateSingleParentResult |
EvaluateBaseParentsCollection | Method | ViewItem | Method to evaluate the base (primary) collection of parent items for the current view item; this member must be overwritten if the default functionality does not match; every single parent item is validated by ValidateSingleParentResult |
EvaluateRootObjectsCollection | Method | View | Method to evaluate the base (primary) collection of root object items for the current view; this member must be overwritten if the default functionality does not match; every single root item is validated by ValidateSingleRootObject |
ValidateSingleChildResult | Method | View | This member is used to validate every single child item that is evaluated in the primary collection with EvaluateBaseChildrenCollection(); only items where the validation returns true will be part of the Children collection |
ValidateSingleParentResult | Method | View | This member is used to validate every single parent item that is evaluated in the primary collection with EvaluateBaseParentsCollection(); only items where the validation returns true will be part of the Parents collection |
ValidateSingleRootObject | Method | View | This member is used to validate every single root item that is evaluated in the primary collection with EvaluateRootObjectsCollection(); only items where the validation returns true will be part of the root objects collection |
FilterSingleChild | Method | ViewItem | This member is used to validate every single child item that is evaluated in the primary collection with EvaluateBaseChildrenCollection(); only items where the validation returns false will be part of the Children collection |
FilterSingleParent | Method | ViewItem | This member is used to validate every single parent item that is evaluated in the primary collection with EvaluateBaseParentsCollection(); only items where the validation returns false will be part of the Parents collection |
EnabledForContentObject | Method | PropertyValueValidation | |
ValidationValue | Method | PropertyValueValidation | |
CreateReferenceDescription | Method | Rule | |
CreateReferenceMetaPropertyDescription | Method | Rule | |
CreateReferenceMetaPropertyName | Method | Rule | |
CreateRelationDescription | Method | Rule | |
CreateRelationName | Method | Rule | |
CreateScopeDescription | Method | Rule | |
CreateScopeName | Method | Rule | |
CreateViewItemDescription | Method | Rule | |
CreateViewItemName | Method | Rule | |
CustomGroupRights | Method | All | |
CustomPropertyGroupRights | Method | All | |
TryConvertProxyValueFrom | Method | Proxy | |
TryConvertProxyValueTo | Method | Proxy | |
CreateProxyScannerInstance | Method | InterfaceExecution | |
ExecuteExport | Method | InterfaceExecution | |
ExecuteImport | Method | InterfaceExecution | |
AddSystemAssemblies | Method | CustomizingClass | Provides the possibility to define Assemblies being added to the compiler You can find an example code here. |
MetaProperties
In this view mode you can modify the code that is executed within the accessors of a UBIK® MetaProperty
The Code Editor will display inherited MetaProperties, but without the code located at its inherit base! |
Custom
In this view mode it is possible to store code which is not related to events, methods or MetaProperties but shall still be assembled with a MetaClass or with the entire customizing. Use this if you want to provide a code library or classes that shall be used by your custom event or property/method code.
Section | Exposed by | Description |
---|---|---|
Custom Object Code | All | The code placed here will be assembled into the class code of the current UBIK® object. Any classes, methods, properties, etc. can be accessed via an instance of this MetaClass. |
UBIK Code Library | All | This code will be assembled only once per customizing, and is therefore available across all objects. Static classes, methods, properties, etc. can be directly accessed by its type via the namespace UBIK.Runtime. |
Code snippets
This menu allows you to insert pre-configured, yet dynamic code snippets for typical customizing tasks in UBIK®. Insert will always happen at the current caret position in the selected coding box.
Start workflow snippet
This snippet will insert the code to execute a UBIK® Workflow synchronously, meaning in the same thread as the rest of the code is executed. So code execution will only continue after the workflow is finished. Example:
Dictionary<string, object> args = new Dictionary<string, object>();
IDictionary<string, object> outArgs;
args.Add("UBIKObject", this);
outArgs = UBIK.WorkflowBase.Invoker.InvokeWorkflow(this.Environment.UBIKDataFactory()_
.ContentObject(new System.Guid("2bf8f8e9-156d-4914-bd25-fd133148638d")) as UBIK.Kernel.Workflow, args);
//*** End of calling UBIK Workflow
This code locates the workflow object at the MetaClass of the object using its UID, loads the declared XAML code and sends it to the invoker. The calling object will be passed to the workflow as first and only parameter UBIKObject.
If you need the workflow to be executed conditionally, just wrap the conditions (e.g. an if block) around the generated snippet! |