Guidelines for Apps
With great powers comes great responsibilities. As part of the curation process for Apps we've created a list of guidelines you need to follow to ensure high quality apps that can work across all the content management systems that Ucommerce integrates with and to ensure they work well along side other installed apps as well.
The points mentioned in this section are thing that we will look for in the curation process of apps.
Ucommerce App Template
Helps you get started on building e-commerce apps for Ucommerce. Set up a solution that makes it easy to hit the ground running.
Download the App Template here.
When the App Template is installed and the solution is created with the template. You can package the whole solution into an Ucommerce App by building the solution (located in /package in the solution root).
Ucommerce Sample App
To help you build your shiny new app, you can leverage the Ucommerce Sample App project. It contains examples of many of the most common extensions you might need and conventions you need to follow.
Unique component ids are important to avoid conflicts between apps unless you're specifically looking to override existing components of Ucommerce or others apps.
To avoid this your component ids should be prefixed with the app name, e.g. MyApp.MyComponent as opposed to MyComponent.
Ucommerce will pick up all the .config in the apps folder and therefore the ids of the components registered are very important, as you shouldn't override other app developer's components.
Your app package shouldn't contain any Ucommerce assemblies as they will already be present on the system when your package is installed. Besides that Ucommerce core tools like Castle Windsor or NHibernate should not be part of the package either.
To make your app run across all CMSs supported by Ucommerce, your app must depend on the Ucommerce CMS abstractions instead of CMS's own implementations.
This also ensures that your app will work when additional CMS integrations are released. You're always welcome to contact us if you feel we're missing something obivous that will help you build your app.
To avoid dependency conflicts between your app and other apps, it is best practice that all of your app's assembly dependencies are signed.
This is to ensure that .NET always pick the right assembly if the same assembly is present in multiple versions. Unsigned assemblies (assmeblies with PublicKeyToken=null) are considered the same version regardless of version number of the assembly.
Your app can't contain the assembly System.Web.Mvc.
The installation process of an app in Ucommerce looks for database migrations in your app package and executes those against the database.
The App Installation pipeline search the folder called "Database" for file with the following naming convention. AppName.SchemaVersion.sql, e.g. UcommerceDB.001.sql
Ucommerce will then use the schema version to make sure that it doesn't run a migration twice in upgrading scenarios and the migrations are run in sequential order based on the schema version.
Installing Your App
Go to the Ucommerce backend and open "Settings" -> "Apps" -> "Install App" in the menu tree to the left. Upload the your app nupkg file and click the upload button. In the details page for the app click the install button.
When your app is installed, views, binaries, and configuration will be added to the Apps folder, e.g. uCommmerce/Apps/MyApp. As Ucommerce starts it will load the assembly dependencies of all the installed apps.
Your app may need to setup something for your app to work, for this there is an initialization pipeline, which is run when Ucommerce starts up.
The documentation for you app can be part of the nuget pacakge that you upload to the app store and the documentation will be hosted on our documentation site.
Supporting your app is important because users will have questions about your app that won't be covered in your documentation, they will encounter bugs using your app and they will need your help, and Users will have suggestions to changes and extensions that you might not have thought about.