# d.velop Importer

## Introduction

The d.velop Importer imports document objects processed by migration-center into a d.velop documents repository by using the d.velop DMS and migration bulk APIs.

The importer supports:

* Document import with content, common attributes, and category attributes including datasets
* Multi-version document trees
* Document updates for already imported objects
* Optional content integrity verification
* Optional assignment to one or more parent Dossiers
* Retry and backoff handling for transient API errors, including throttling responses

## Known issues and limitations

* No error thrown when importing dataset attributes with invalid value (#80136)
* Document is imported with value that breaks attribute limits (#80132)
* Unreported deletion of previous imported versions when a versions down the tree throws an error and is not reimported (#80148)
* Intermediate version update document triggers rollback of the other versions that are newer (#80182)
* Access date attribute is set to 'Jan 1, 1 1:44:24 AM' in target system when no value is set in MC (#80393)

## Prerequisites

### Java version

The d.velop importer requires a minimum of Java 17.

### API Key

An API Key needs to be created in d.velop from Configuration -> Infrastructure and security -> API Key. This API Key will be used to run the d.velop Importer.

## Importer Configuration

The common adaptor parameters are described in [Common Parameters](https://docs.migration-center.com/common-parameters#common-adaptor-details).

The configuration parameters available for the d.velop importer are described below:

### Importer Parameters

* **serverUrl\***  \
  URL of the d.velop server.  \
  Example: <https://my-tenant.d-velop.cloud/dms/r>

* **apiKey\***  \
  API key used to connect to d.velop.

* **repositoryName\***  \
  Name of the target repository in d.velop.

* **checkContentIntegrity**  \
  Enables content integrity verification during import. RIPEMD256 algorithm required for the scanned objects.\
  See [Content](#content).\\

* **batchSize**  \
  The number of objects that can be added to a bulk import request. The default value is 50.  \\

* **numberOfThreads**  \
  Number of parallel importer threads. \
  Maximum allowed threads across all running import jobs per d.velop server is 10.

* **loggingLevel\***  \
  See [Common Parameters](https://docs.migration-center.com/common-parameters#logging-level).

### Throttling Configuration

You can find the **dvelop-importer-config.properties** file in \<Your Jobserver Installation Folder>/lib/mc-dvelop-importer.

This file allows you to configure several parameters that will change the importer behavior in case the import is being throttled and requests are timing out.&#x20;

```
# HTTP connection timeout in milliseconds (default: 1800000)
timeout=1800000

# Maximum number of retry attempts for API calls (default: 4)
max_retries=4

# Initial backoff time (in seconds) in seconds before retrying a failed API call (default: 5)
initial_backoff=5

# Delay in seconds between starting each thread during ramp-up (default: 1)
ramp_up_delay=1

```

## Migset System Rules

* **alterationText**  \
  Version change reason text sent for a document version.
* **filename\***  \
  File name including extension.  \
  Example: contract\_2026.pdf  \
  Required.
* **mc\_content\_location**\
  Absolute path to content file used for import.  \
  If empty, importer uses the object content location from scan data.
* **parentDossiers**  \
  Multivalue list of parent dossier IDs to link the document to one or more dossiers.  \
  Each ID must exist in d.velop and be a dossier type.
* **target\_type\***  \
  Multivalue rule with exactly 2 values.  \
  Value 1 must be dvelop\_document  \
  Value 2 must be the d.velop category name  \
  Example values: dvelop\_document and Invoices

## Features

### Common Attributes

You need to use the **dvelop\_document** object type as the first value in target\_type for all documents you are importing.\
This object type has the following common d.velop attributes:

* **Owner\***
* **Created\***
* **Last Modified**
* **File Changed On**
* **Access Date**
* **Comments**
* **Document Number**
* **Variant Number**

{% hint style="info" %}
The **Document Number** needs to be unique per document. \
**Multiple documents** can be imported under the **same Document Number** only if their **Variant Number is unique per document.**
{% endhint %}

### Categories

You need to set a Category as the second value in target\_type.&#x20;

Your category can have any number of custom attributes. All available d.velop attribute types are supported, including attributes with Datasets.

{% hint style="warning" %}
d.velop allows a Category to contain multiple attributes with the same name. This is not supported in migration-center. \
Setting attributes which are not unique in the d.velop Category will result in an error.
{% endhint %}

### Content

d.velop requires that all documents have content and that their content is not 0 kb.

If **checkContentIntegrity** is enabled your source objects need to have had their checksum values calculated during the scanning process. \
This checksum value needs to have been calculated using **RIPEMD256** algorithm. Using any other algorithm will result in an error on import.&#x20;

### Dossiers

You can use the parentDossiers system attribute to assign documents to one or more Dossiers.&#x20;

You need to use the Dossier's ID, setting one value for each Dossier. \
Any Dossier set here needs to already exist in d.velop. If a set Dossier does not exist an error will be thrown on import.

### Versions and Updates

Document versions and updates are supported.

Because of how the d.velop API works, when new versions are imported for an existing version tree, the previously imported versions are deleted and the whole version tree is reimported. There are certain scenarios where this can result in unintuitive behavior in migration-center.

#### **Version tree size is larger than your maximum batch size**

In this case, after importing the first part of the version tree in one batch, when importing the second part of the version tree in the following batch the previously imported versions will be deleted from d.velop and reimported.&#x20;

This can result in a scenario where, if an error is thrown during the import of the second part, the first part of the version tree shows up as imported in MC but is actually not present in d.velop.&#x20;

The solution is to reset the entire version tree and reimport it.

#### A version tree is imported in different migsets

When importing new versions for an existing version tree in a separate migset, if the second import throws an error, the previously imported version tree will be deleted in d.velop but will still show up as imported in migration-center.

The solution is to reset the entire version tree and reimport it.

#### An update for an intermediate version is imported after the full version tree

After importing a full version tree, if an update for an intermediate version is imported (Ex. Update for version 3 out of 6), the version tree in d.velop will now only show the state of the version tree for that intermediate update. So only versions 1 to 3.&#x20;


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.migration-center.com/importers/d.velop-importer.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
