UBIK Plugin Design
The UBIK® Plugin Design feature allows users to create a UBIK® Plugin C# solution, including system definitions purely from customizing in UBIK® Studio.
Overview
Relevant use-cases
Getting a customizing from one UBIK® database into another can be quite a challenge. There are several use-cases in which this is required though:
- Staging: E.g., moving a feature from a test environment to the productive environment
- Hotfixes: A bugfix should be done in multiple environments
- Reusing features: A set of features should be reused in multiple projects
- Standardization: An implementation should be positioned as a verifiable standard package
Benefit of UBIK® Plugins
Plugins are a good way to deal with this, because of the following benefits:
- Plugins can be developed and maintained using industry-standard processes and tools (e.g., IDEs like Visual Studio and CVSs like Git).
- Plugins can be transported and deployed rather easily.
- Plugins can be strong-named (signed) and versioned.
- Plugins can be compiled, tested and even deployed automatically using DevOps infrastructure.
Manual configuration, automatic generation
However, developing a UBIK® Plugin from scratch is an expert-level task. Optimally, one could configure a customizing in UBIK® Studio, as usual, and generate a Plugin out of this configuration. This can be achieved with the UBIK® Plugin Design feature.
Usage
Setup
The UBIK® Plugin Design feature-set is contained in a UBIK® Plugin itself. It's called "UBIK.Module.PluginDesign" and can be downloaded from the Release Portal.
To install it, copy & paste the UBIK.Module.PluginDesign.dll into the Injection folder of your UBIK® Studio. After this, when connecting to a UBIK® Environment (database), an upgrade dialog allowing the installation of the Plugin should appear.
Creation of a new Plugin Design Configuration
The feature is accessible through the "System.PluginDesign.PLUGIN_DESIGN_CONFIGURATION" MetaClass in UBIK Studio. A new Plugin Design Configuration instance can be created in the Bulk Editor to define a custom plugin context.
Adding MetaClasses to the configuration
Custom MetaClasses can be added to the plugin configuration using the "SYSREL_PLUGINDESIGNCONFIG_METACLASS" relation in the Relation Editor.
Adding other objects to the configuration
In the initial version of this feature, we're assuming that your MetaClasses are the center of your customizing; everything else will be detected as a dependency of those. E.g., if you're using a MetaProperty in a MetaClass you related to the Plugin Design Configuration instance, it will also be contained in the generated C# solution. The same is true for all other (supported) kinds of objects. The Plugin Design feature is subject to active development.
Exporting a C# solution for the plugin
A C# solution can be generated for the plugin via context menu action in the Class Browser (content view style): Right-click the Plugin Configuration instance, 'Start Action → "" → Create a C# solution for a custom UBIK plugin'. This will increase the plugin version (revision), generate the C# solution and prompt the user with a save dialog for a respective .zip archive.
Next steps
The generated solution can be opened using Visual Studio. You can build the C# project contained in the solution and deploy the resulting plugin DLL to your target system's injection folders. However, you can also use the generated solution code as a basis for further development and push it into a Git repository, for example. Further, you could set up some DevOps infrastructure for automatic building, testing and deployment - it's up to you.
Supported capabilities and roadmap
| Feature | Release State | Version |
|---|---|---|
| Generation of a basic Plugin project, including the Module and a SystemDefinitions stub |
|
5.0 Initial Release |
| Incremental versioning of the generated Plugin to support upgrades in a target Environment | |
5.0 Initial Release |
| MetaClasses | |
5.0 Initial Release |
| MetaProperties | |
5.0 Initial Release |
| Custom Class Code | |
5.0 Initial Release |
| Custom Code Library | |
5.0 Initial Release |
| Classifications | |
5.0 Initial Release |
| Relations | |
5.0 Initial Release |
| Selective Lists and Selective Items | |
5.0 Initial Release |
| References | |
5.0 Initial Release |
| MetaProxies and MetaProxyProperties | |
5.0 Initial Release |
| Units and Unit Items | |
5.0 Initial Release |
| MetaProperty assignment properties (RelationData) | Imminent | 5.1 Initial Release |
| Multi-language translations for References, Relations, Units & UnitItems | WiP | 5.1 Initial Release |
| LOCALIZATION instances for multi-language translation of MetaClasses, MetaProperties, SelectiveLists & SelectiveItems | WiP | 5.1 Service Pack |
| Queries | Requirement | Future version |
| ACM-related content | Requirement | Future version |
