Last modified on 14 June 2016, at 15:27

Code Editor

Revision as of 15:27, 14 June 2016 by KNO (Talk | contribs)

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
UI CodeEditor.png
Code Editor control displaying events
Name Code Editor
Internal Name CtrlObjectCodeEditor
Purpose Edit runtime behavior of objects
Context object MetaClass
Version 2+

Basics

IC Attention.pngThe 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:

Appearance Example Comment
Disabled UI CodeEditor CodeControl Disabled.png The code for this property/method can't be edited
Enabled UI CodeEditor CodeControl Enabled.png The code for this property/method is editable
Raised caption UI CodeEditor CodeControl Disabled Overridden.png There is already custom code for this property/method stored, but is is not editable
Raised caption UI CodeEditor CodeControl Overridden.png There is already custom code for this property/method stored and it can be edited
Bold caption UI CodeEditor CodeControl Changed.png The custom code for this property/method was edited but not saved yet

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

Context menu

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:

Event Exposed by Description
OnAddedToRelationship All event fired when the given object was added as a child to a relation
OnAttributeAdded All event fired when a new attribute is added to the attribute collection of the given base object
OnAttributeChanged All event fired when the value of one the own attributes changes
OnAttributeValueValidating All event fired when the validation of a new attribute value occurs; possibility to block the change
OnBeforeDelete All event fired when a base object is deleted; possibility to cancel the deletion
OnPrepareForSave All event fired just before a base object is about to get saved; possibility to edit the object right before saving
OnBeforeSave All event fired when a base object is saved; possibility to cancel the saving
OnContentInvalidated All event fired when an instance of the object was set to content invalid
OnCreated All event fired when a new instance of the object was created
OnDeleted All event fired when the given object was deleted
OnDisposed All event fired when an instance of the object was disposed (garbage collection)
OnInitializeCompleted All event fired when the initialization of the object was successful
OnInitializeFailed All event fired when the initialization of an object failed => returned false
OnNotLongerReferencedBy All event fired when an object removes its reference to the given object
OnObjectChanged All event fired when: PropertyValueChanged, PropertyIndexValueChanged, ReferenceChanged, AttributeChanged, AttributeAdded
OnPropertyIdxValueChanged All event fired when the value of one of the property objects changes
OnPropertyValueChanged All event fired when the value of one of the property objects changes; is not fired for references
OnPropertyValueIdxValidating All event fired when the validation of a new property index value occurs possibility to block the change
OnPropertyValueValidating All event fired when the validation of a new property value occurs; possibility to block the change
OnReferenceChanged All event fired when the value of one of the reference property objects changes
OnReferencedBy All event fired when an object refers to the given object via a reference
OnRelationAdded All event fired when the given object has got a new relation child
OnRelationRemoved All event fired when an object was removed as child from a relation
OnRemovedFromRelationship All event fired when the given object was removed as a child from a relation
OnSaved All event fired when the given object was saved
OnLocalFileDocumentIsAvailable Document event fired when the current document is available for local (remote) access.
OnLocalFileDocumentNoLongerAvailable Document event fired when the current document is no longer available for local (remote) access
OnLocalFileDocumentUpdated Document event fired when the current document was updated
OnBeforeDeleteFile Document event fired when the belonging local file copy of a document is about to be deleted; possibility to cancel the file deletion
BeforeImportStatusChange Proxy Event fired before the Import Staus of a proxy instance is changed. Possibilty to cancel the status change.
BeforeExportStatusChange Proxy Event fired before the Export Staus of a proxy instance is changed. Possibilty to cancel the status change.
ImportStatusChanged Proxy Event fired after the import status was changed for the proxy instance.
ExportStatusChanged Proxy Event fired after the export status was changed for the proxy instance.
OnInterfaceError InterfaceExecution
OnInterfaceFinished InterfaceExecution
OnInterfaceStarted InterfaceExecution
OnProxyError InterfaceExecution
OnProxyFinished InterfaceExecution

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

IC Hint square.pngThe 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:

//*** Calling UBIK Workflow: WFICON Assign icon
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.

IC Hint square.pngIf you need the workflow to be executed conditionally, just wrap the conditions (e.g. an if block) around the generated snippet!

See also