Multi-Currency and CRM 3.0

In my roles as a Microsoft CRM Pre-Sales Technology Specialist in our Enterprise team here in the UK, I am constantly trying to find partner solutions which meet customers’ business requirements. A couple of weeks ago I met some folk from K3 Business Technology, who have developed a comprehensive multi-currency solution for CRM 3.0. I was really impressed with the elegance of their solution as well as the fact it worked equally well offline as well as online, so I thought I’d use my post to show how far you can take CRM customisations

First off, there are some new custom entities which allow you to create Currency and Currency Rates. Now because currency fields show up in several entities such as Opportunities, Quotes, Orders, Invoices, Contracts, Price Lists & Discount Lists, entity relationships are also configured:

Having set up currencies, you can create Product Catalogs (sic) each with a particular currency. Also included are tools to create catalog copies with different currencies, as well as setting sensible defaults for pricing rules and rounding calculations for each copy.

Once catalogs have been configured and you have (optionally) applied a default currency to Accounts and Contacts, you can go ahead and create Opportunities, Quotes, Orders, Invoices and Contracts in any currency. The currency will default to that of the customer (if present) or the default system currency, and the current exchange rate. These defaults can be overridden before the transaction is committed.

There’s a lot I haven’t covered here such as multi-currency reporting, but I just wanted to give you an overview. More details are available here:

Now, I’m pretty familiar with the Microsoft CRM SDK and I couldn’t figure out how K3 could develop this type of solution without breaking some rules. Firstly, CRM doesn’t provide an offline SDK so the use of custom callouts for business logic will only work online. Secondly, there is no way to override CRM’s pricing engine to calculate prices based on foreign currency. Finally there are a number of entities which cannot be customised such as Price Lists, as well as a number of forms which cannot changed such as the Convert Quote to Order form

Direct updates to the CRM database are not an option, the data has to be saved and retrieved by the CRM platform, so the solution makes use of ASP.NET 1.1 page inheritance by slotting in K3 classes in between the CRM code-behind base classes and the relevant .aspx pages. Although not strictly supported, this approach means they can manipulate the data returned by the client page before it is saved (by the base class).

Well that’s enough from me except to thank Ilana for giving me the opportunity to write for the CRM Team Blog. Don’t forget to stop by my UK CRM blog at

Simon Hutson