Plugins are .net-based classes implementing IPlugin. Plugins are used to interact with Verint Community's in-process API by being installed directly within each web- and job-scheduler- node running the Verint Community platform.
IPlugin is the base interface for all plugins. Additional, special-use plugin types extend IPlugin
to provide access to use-case-specific functionality and provide a tighter integration with components of Verint Community. For example, the IActivityStoryType plugin interface extends IPlugin
to provide support for extending the Verint Community activity stream.
The plugin manager both manages the lifecycle of plugins and provides access for retrieving instances of specific plugin types.
Getting started
Plugins are .net classes implementing one or more plugin interfaces. To create a new plugin:
- Set up your development environment for Verint Community.
- Create a new .NET class library project in Visual Studio using .net 4.x.
- Add a reference to the Verint Community assembly identified in the documentation associated to the plugin you want to implement. For example, to implement IPlugin, a reference to Telligent.Evolution.Components.dll is required.
- Create a new public class in your class library project.
- Implement the plugin type. For example, the following class would implement IPlugin:
using System; namespace Samples { public class MyPlugin : Telligent.Evolution.Extensibility.Version1.IPlugin { } }
Right-click the IPlugin reference in the code and select "Implement Interface" and Visual Studio will stub out the implementation of the plugin type. For example, the code above, once stubbed out, results in:using System; namespace Samples { public class MyPlugin : Telligent.Evolution.Extensibility.Version1.IPlugin { #region IPlugin Members public string Name { get { throw new NotImplementedException(); } } public string Description { get { throw new NotImplementedException(); } } public void Initialize() { throw new NotImplementedException(); } #endregion } }
- Update the plugin's Name and Description. These properties are read to identify this plugin within the administration UI (where plugins are categorized, enabled, and configured).
- Implement the members defined by the plugin type. This is what defines what your plugin does. For example, it may attach an event handler to an event exposed by the In-process API and perform an action when that event occurs.
- Build the solution.
- Copy the resulting assembly (Samples.dll for example) into the web/bin/ folder of each Verint Community web node and job scheduler instance.
- As an administrator, go to Administration, browse the existing categories or search for your plugin, enable the plugin, and save the changes.
- Your plugin is now running within Verint Community.
Best practices
There are a few best practices to keep in mind when developing plugins:
- Ensure that the plugin class is publicly accessible.
- Either don't define an explicit constructor or ensure that a public, parameterless constructor exists. The public, parameterless constructor is the one used by the plugin manager to instantiate your plugin.
- Register event handlers within the Initialize() method only.
- Do not attach to any resources (database, file system, etc.) until the plugin's Initialize() method has been called.
- Implement more than one plugin interface with a single plugin class. Plugin types are all interfaces to enable implementing many interfaces with a single concrete class.
- Make use of other base plugin types when needed:
- IInstallablePlugin enables plugins to implement their own installation lifecycle with support for installation, upgrades, downgrades, and uninstallation.
- IConfigurablePlugin enables plugins to expose configuration on the Manage Plugins page of the Control Panel.
- IRequiredConfigurationPlugin ensures that a minimal amount of configuration information is provided by users before allowing the plugin to be enabled.
- IRenderableConfigurablePlugin enables configurable plugins to render a custom configuration UI.
- IPluginGroup enables multiple dependent plugins to be enabled/disabled as a single unit.
- ITranslatablePlugin enables plugins to manage translatable text resources.
- ITemplatablePlugin enables text-based configuration to make use of editor-based templating.
- IScriptablePlugin enables plugins to define custom UI via widgets which can then optionally be edited within the platform widget editor.
- ISingletonPlugin forces only a single instance of the derived plugin type to be enabled at a time.