In this chapter we will cover the following recipes:
- Refactoring your plugin using a three-layer pattern
- Replacing your LINQ data access layer with QueryExpressions
- Logging an error from your customization
- Converting your plugin into a custom workflow activity
- Unit testing your plugin business logic
- Unit testing your plugin with an in-memory context
- Integration testing your plugin end-to-end
- Profiling your plugin
- Building a generic read audit plugin
- Using Cross-Origin Resource Sharing with CRM Online