Training Guide for Developers


QBO developers should work toward establishing expertise in the following areas:
  • Transact SQL: know how to query a database
  • XSLT: know how to transform data for display
  • Web components: know how to invoke methods using QBO 3 .ashx end points
  • Javascript: know how to leverage MooTools and QBO classes to invoke .ashx end points

Visual Studio Conventions

The qbo.Core solution comprises 95% of the QBO source code.

  • Application tier: contains app tier projects for core "widgets"
  • Web tier: contains web tier projects for core "widgets"
  • Plugins: contains projects that are wrappers to third party software using one or more QBO interfaces
  • Themes: projects that override or add to core functionality; generally client or product specific
With the exception of the Application tier projects, all projects are web projects so we can publish them with MSBuild / Web Deploy.  This includes Plugins.

  • Application tier / qbo.Decision: our workflow module
  • Web tier / qbo.DecisionWeb: our workflow module's presentation tier
  • Plugins / Amazon / qbo.Attachment.Amazon: our IFileObject wrapper to S3 storage
  • Themes / theme.QLS: our Quandis Loan Servicing theme
Within any web tier projects, folder structures are:
  • {Project}: a folder dedicate to project-specific resources (e.g. Decision)
  • Config: a folder containing any configuration and QBO setup package files
  • Images: nuff said
  • Scripts: any project-specific javascript files or behaviors
  • Styles: any project-specific css or less
  • Templates: any presentation tier XSLTs
    • {Project}: most project specific XSLTs
    • Specs: project specific Jasmine specifications

NuGet Packages

Various projects, including qbo.Application, include NuGet packages. The DLLs associated with NuGet packages are not normally source controlled by Quandis; NuGet acts as their source control, with Visual Studio pulling these packages on demand.  When Visual Studio's NuGet Package Manager installs (or restores) packages, it does to to a package folder under the solution folder.  E.g.:
  • qbo.Core.sln installs packages to qbo.Core > packages
  • qbo.Amazon.sln installs packages to qbo.Core > Plugins > Amazon > packages
When you need to install NuGet packages, or if you need to update packages for a particular project, do so from the "main" solution associated with the project. This will ensure that NuGet package references remain relative to the most commonly used solution for a given project.

For example, assume you are working on a Queuing solution, which includes qbo.Queue.Amazon as a project.
  • Incorrect: open qbo.Queuing.sln, navigate to View > Other Windows > Package Manager Control, and click the Restore button
    • this would install AWS NuGet components to Plugins > packages, instead of Amazon > packages
  • Correct: open qbo.Amazon.sln, navigate to View > Other Windows > Package Manager Control, and click the Restore button
Any projects that use 'common' NuGet packages (e.g. Amazon.Core) should include all projects that reference the common package, so all projects can be upgraded in lockstep with each other. This is done by right-clicking on the solution > Manage NuGet Packages > Consolidate tab. For example, if you need a newer version of Amazon.SQS, you should upgrade it using the qbo.Amazon solution, so that the NuGet Consolidate tab will check each Amazon-dependent project.