Exploring the Extensions Development Solution


Ingeniux CMS 9.0 includes a Visual Studio 2012 solution file called API_Extensions_Development_Harness.sln. This solution contains projects that cover most aspects of extension development for Ingeniux CMS. 

The solution is located at [siteName]/App_Data/xml/Custom. 

It contains the following projects:

API_Extensions_Development_Harness.csproj

This project's main purpose is to facilitate development of custom hooks, custom indexes, and element value choice hooks. Within the project environment, developers can work with all three with full Intellisense support. The CMS site instance, however, doesn't use the compiled result from this project. Instead, it compiles the three code files (CustomHooks.cs., CustomIndexes.cs, and get_element_values.cs) at runtime, whenever the files are updated. The project itself is solely a development harness.

In addition to the runtime-compiled code files, this project also includes other extension points: email notification templates, UI languages, and spell-checking dictionaries.

An important side note: Because all custom hook methods are triggered due to a method call or property update, repeating in the body of the hook method the action that just occurred (for example, setting the value page.Name within the OnRename method) will cause an infinite loop. 

Automated_Task_Standard_Operations.csproj

This project contains the sample controller for an automated task script that performs basic operations like emptying the recycle bin and publishing pages. It is both a sample project and an actual deployment option. It's OK for developers to customize this project and the controller, since the site upgrader doesn't overwrite project files during an upgrade.

Unlike the development harness project, the CMS site instance uses this project's compiled output via an MEF-based late-binding system.

Except for the Ingeniux CMS references, all references in the project are NuGet packages. The package definitions are in place, but to save space, actual packages are not included in the installer. Before building the project the first time, restoring the packages is recommended.

Note that a site instance holds onto the assembly when it's first invoked. To rebuild or redeploy the task assembly, recycle the application pool for the site instance. 

Custom_Apps_Development_Examples.csproj

This project is an sample project for developing custom tabs, custom workflow external clients, and custom UI for Dynamic Execute. Because the site upgrade doesn't overwrite project files during upgrade, this project can be customized for deployment. As with Automated_Task_Standard_Operations.csproj, the CMS site instance uses this project's compiled output via an MEF-based late-binding system.

Except for the Ingeniux CMS references, all references in the project are NuGet packages. The package definitions are in place, but to save space, actual packages are not included in the installer. Before building the project the first time, restoring the packages is recommended.