anchor.diff:  == Attachments
   
   Content is usually stored in folders but content can also be attached to domain instances.
  -In fact when content is stored in a folder, it is actually "attached" to a +CrmResourceFolder+ domain instance.
  +In fact when content is stored in a folder, it is actually "attached" to a `CrmResourceFolder` domain instance.
   So there is no technical difference between files stored in folders and files attached to domain instances.
   
  -A +CrmResourceRef+ instance is used to attach content to a domain instance. The +ref+ property references
  -the domain instance using a *Resource Identifier* and the +res+ property contains the provider specific URI to the content.
  +A `CrmResourceRef` instance is used to attach content to a domain instance. The `ref` property references
  +the domain instance using a *Resource Identifier* and the `res` property contains the provider specific URI to the content.
   This is nothing that you need to care about, the framework takes care about setting these properties when you create and attach content.
   
   == Security
  
positive.code: 
  == CrmFreeMarkerService
  
  The *FreeMarker* service is used when you want to store http://freemarker.org[FreeMarker^] templates with the +crm-content+ plugin.
  You can use FreeMarker templates when you send email or render HTML pages.
  If used together with the +crm-content-ui+ plugin you can let administrators edit templates with an HTML editor.
  
  === process
  
  +void process(String templatePath, Map binding, Writer out)+
  
  Let FreeMarker parse the template located at +templatePath+ in the current tenant.
  Values in +binding+ can be referenced from the template. The output is written to +out+.
  
  +void process(Long tenant, String templatePath, Map binding, Writer out)+
  
  Same as above but a tenant can be specified from which templates will be retrieved.
  
  +void process(CrmResourceRef ref, Map binding, Writer out)+
  
  Same as above but an instance of +CrmResourceRef+ will be used as template.
  
  
  == Events
  
negative.code: 
  === updateResource
  
  `long updateResource(CrmResourceRef resource, InputStream inputStream, String contentType = null)`
  
  Update/overwrite existing content.
  
  