anchor.diff:  									No
   
   |===
  +
  +NOTE: The `Document` form field requires additional setup to be accessed from the relevant forms and processes. For information about enabling document attachments, see <<_enabling_document_attachments_in_forms>>.
   
   ``Complex field types`` are designed for work with properties that are not basic types but Java objects.
   To use these field types, it is necessary to create extra forms in order to display and write values to the specified Java objects.
  
positive.code: * Source: `document`
  --
  +
  . Next to Data Outputs and Assignments, click *Add* and enter the values:
  +
  ---
  +
  --
  * Name: `taskdoc_out`
  * Data Type: `Object`
  * Target: `document`
  --
  ---
  +
  Note that the `Source` and `Target` fields contain the name of the process variable you created earlier.
  +
  . Click *Save*.
  . In the Process Designer, click image:development-guide-6565.png[] and select *Generate all Forms*.
  . Click *Save* to save the process.
  
  You can now build and deploy your project. You can see the `Document` attachment in the *Documents* tab of the *Process Management* -> *Process Instances* view.
  
  image::6224.png[]
  
  [float]
  ==== Pluggable Variable Persistence
  
  
  New with this release is also the ability for you to store your document in a location of your choice.
  This is defined as _Pluggable Variable Persistence_ and this enables you to store these documents automatically in a centralized content management system (CMS) of choice, behind the scenes.
  
  To implement your custom persistence strategy, start by defining your __Marshaling Strategy__.
  This strategy is declared to the Process Engine by the use of deployment descriptors (see [ref]_{ADMIN_GUIDE}_) using the `<marshalling-strategy>` element.
  This element should name a type that provides an implementation of the `org.kie.api.marshalling`
   interface.
  
  The following methods in this interface help you create your strategy.
  
  * [method]``public boolean accept(Object object)``: Determines if the given object can be marshalled by the strategy.
  * [method]``byte[] marshal(Context context, ObjectOutputStream os, Object object)``: Marshals the given object and returns the marshalled object as byte[].
  * [method]``Object unmarshal(Context context, ObjectInputStream is, byte[] object, ClassLoader classloader)``: Reads the object received as byte[] and returns the unmarshalled object
  * [method]``void write(ObjectOutputStream os, Object object)``: same as [method]``marshal`` method, provided for backwards compatibility.
  * [method]``Object read(ObjectInputStream os)``: same as [method]``unmarshal``, provided for backwards compatibility.
  
  
  For example, if you create a custom strategy that stores your uploaded documents in Google Drive, your implementation class should not only implement the methods of the `org.kie.api.marshalling`
   package, but this implementation should also be made available to the Process Engine, by putting the classes in its classpath (and declaring the type in the deployment descriptors).
  
  There is a default marshalling strategy that simply saves the uploaded documents in the file system under a folder called `docs`.
  This default implementation is defined by the [class]``DocumentStorageService`` class and is implemented through the [class]``DocumentStorageServiceImpl`` class.
  
  [id='_sect_rendering_forms_for_external_use']
  === Rendering Forms for External Use
  
negative.code: +
  image::6226.png[]
  
  .Map Task Inputs and Outputs to the Document Variable
  If you want to view or modify the attachments inside of the task forms, create assignments inside of the task inputs and outputs.
  
  . In Business Central, navigate to your business process and open it in the Business Process Designer.
  . Click on a User Task and click image:3140.png[] on the right side of the window to open the *Properties* tab.
  . Next to *Assignments*, click the empty space and click image:6563.png[]. The *Data I/O* dialog window opens.
  . Next to *Data Inputs and Assignments*, click *Add* and enter the following values:
  +
  --
  * Name: `taskdoc_in`
  