Shipping Rules
With Shipping Rules, you can automatically apply Value Added Services (VAS) to shipments based on definable conditions. For example, you can specify that all shipments over €500 are automatically insured, or that shipments to certain countries are always marked as "Named Person Only".
Opening the Page
- Open the DHL Dashboard → Click on the value next to "Active Rules".
- Or: Open the DHL Setup → Navigate to the "Shipping Rules" section → Click "Manage Rules".
- Or: Search directly for "DHL Shipping Rules" via the search bar.
Concept
Rule-Based VAS Application
Each shipping rule consists of three parts:
| Part | Description | Example |
|---|---|---|
| Condition | What is checked? | Order amount > 500 |
| Action | Which VAS is set? | Enable insurance |
| Priority | In which order is it evaluated? | 10 (lower = first) |
Processing Logic
- With every label creation, all active rules are sorted by priority (lowest first).
- For each rule, the condition is checked against the shipment data.
- On match: The defined action is applied to the shipment.
- Multiple rules can match — actions stack.
- Non-destructive: If the user already selected a VAS option manually in the label dialog, it is never overwritten by a rule.
Rules add, never remove
Shipping rules add VAS — they never take anything away. If you already enabled "GoGreen Plus" in the label dialog and a rule would also set "GoGreen Plus", nothing additional happens. The user always retains control.
Rules always run — even without pre-selected services (zero-config)
Shipping rules are evaluated on every label creation — including simple shipments for which no Value Added Services have been selected manually. No pre-configuration is therefore required for the rules to take effect: as soon as a rule matches, its action is applied (zero-config automation). A VAS record that does not yet exist is created automatically when needed.
Condition Types
| Condition Type | Checks Against | Example Value |
|---|---|---|
| Order Amount | Goods value of the underlying document incl. VAT, in its currency | 500 (with operator >) |
| Total Weight | Total weight in grams | 31500 (> 31.5 kg) |
| Ship-to Country | ISO country code of recipient | AT or CH |
| Ship-to Post Code | Postal code of recipient | 01 (starts with 01, with Contains) |
| Customer Group | BC customer posting group | WHOLESALE |
| Item Category | Item category of the lines that actually travel | ELECTRONICS |
| Shipping Agent | Shipping agent code of the underlying document | DHL |
Which document decides
A label is created either from a sales order or from a posted sales shipment. That determines what the conditions evaluate:
| Label created from … | Conditions read … |
|---|---|
| sales order | the order and its lines |
| posted shipment | that shipment and its lines |
This matters because Business Central deletes the order once it is fully invoiced. If Order Amount, Customer Group and Shipping Agent kept reading the order, they would come up empty for a label created from a posted shipment — and the rules would stop matching without any message.
Item Category evaluates only the lines that travel
The rule already takes effect when one of the travelling lines matches the chosen operator/value, regardless of what else the document holds. For rules such as "age verification for spirits" that is exactly the intended behaviour.
Only the lines going into this parcel are checked: for a label created from the sales order, the lines with Qty. to Ship greater than zero; for a label created from a posted shipment, that shipment's lines. Example: if you ship only the accessory of an order via DHL and the bicycle through your own carrier, a bulky-goods rule on category BICYCLE no longer turns the accessory parcel into bulky goods.
If nobody maintains Qty. to Ship in your system — for instance because Default Quantity to Ship is set to Blank in Sales & Receivables Setup — the whole order is evaluated as before. A rule therefore never falls silent unnoticed.
Order Amount in detail
For a label from a posted shipment the value is the sum of the shipment lines including VAT and less line discounts. An invoice discount at document level and a VAT base discount from payment terms do not exist on a posted shipment line and are not applied — the value may then be slightly too high, which for threshold rules such as "insure above 500" errs on the safe side.
Unlike Item Category, a label created from the sales order counts the entire order, including lines held back. On partial deliveries the same shipment may therefore be judged differently depending on whether you create the label before or after posting.
The threshold applies in the currency of the document — on a foreign-currency document it is not in euros.
Available Operators
| Operator | Description | Suitable For |
|---|---|---|
= |
Equal | Exact match (country, group) |
<> |
Not equal | Exclusion (country ≠ DE) |
> |
Greater than | Amounts, weights |
< |
Less than | Amounts, weights |
>= |
Greater or equal | Thresholds |
<= |
Less or equal | Upper limits |
Contains |
Contains substring | Postal code ranges, text search |
Action Types
| Action Type | Description | Action Value |
|---|---|---|
| Set Insurance | Enable transport insurance | Insurance amount (e.g., 500) |
| Set Age Check | Enable visual age check | A16 or A18 |
| Set Bulky Goods | Mark as bulky goods | (empty) |
| Set GoGreen Plus | Climate-neutral shipping | (empty) |
| Set Product | Override shipping agent service / product code | Service / product code (e.g., V01PAK) |
| Set Named Person Only | Personal delivery only | (empty) |
| Set Preferred Neighbour | Set preferred neighbour | Neighbour's name |
| Set Signed by Recipient | Signature required | (empty) |
| Set No Neighbour Delivery | No neighbour delivery | (empty) |
Set Product overrides the Contract Resolver input
The Set Product action overrides the shipping agent service code that the Contract Resolver subsequently uses to resolve the DHL product / billing number. This lets you control rule-based which product is used for shipping (e.g., an international product for certain countries). An empty action value is ignored — the originally determined service code then remains unchanged.
Managing Rules
Creating a New Rule
- Open the Shipping Rules list.
- Click New (or Ctrl+Insert).
- Fill in the fields:
- Code: Unique identifier (e.g.,
INS-500) - Description: Short description (e.g., "Insurance from 500 €")
- Priority: Processing order (default: 100)
- Enabled: Yes/No
- Condition Type: What is checked
- Operator: Comparison operator
- Condition Value: Comparison value
- Action Type: Which VAS is set
- Action Value: Optional value for the action
Changing Priority
Priority determines the processing order:
- Lower number = higher priority (processed first)
- Use the actions Move Up / Move Down to quickly change priority by ±10.
- Default priority for new rules: 100
Enabling / Disabling Rules
- Single rule: Set the "Enabled" field to Yes/No.
- All rules: Use the actions Enable All / Disable All.
Disabled Rules
Disabled rules are completely ignored during label creation. However, they remain saved and can be re-enabled at any time.
Examples
Example 1: Insurance from €500
| Field | Value |
|---|---|
| Code | INS-500 |
| Description | Insurance from order value 500 € |
| Priority | 10 |
| Condition Type | Order Amount |
| Operator | >= |
| Condition Value | 500 |
| Action Type | Set Insurance |
| Action Value | 500 |
Result: All shipments with an order value of 500 € or more automatically receive transport insurance for 500 €.
Example 2: Age Check for Electronics
| Field | Value |
|---|---|
| Code | AGE-ELEC |
| Description | Age check 18+ for electronics |
| Priority | 20 |
| Condition Type | Item Category |
| Operator | = |
| Condition Value | ELECTRONICS |
| Action Type | Set Age Check |
| Action Value | A18 |
Result: Shipments containing items in the "ELECTRONICS" category automatically receive a visual age check (18+).
Example 3: GoGreen Plus for Switzerland
| Field | Value |
|---|---|
| Code | GREEN-CH |
| Description | GoGreen Plus for Switzerland |
| Priority | 30 |
| Condition Type | Ship-to Country |
| Operator | = |
| Condition Value | CH |
| Action Type | Set GoGreen Plus |
| Action Value | (empty) |
Result: All shipments to Switzerland are automatically shipped climate-neutral.
Example 4: Bulky Goods above 31.5 kg
| Field | Value |
|---|---|
| Code | BULKY-31 |
| Description | Bulky goods above 31.5 kg |
| Priority | 5 |
| Condition Type | Total Weight |
| Operator | > |
| Condition Value | 31500 |
| Action Type | Set Bulky Goods |
| Action Value | (empty) |
Result: Shipments over 31.5 kg (31,500 g) are automatically marked as bulky goods.
VAS Conflicts and Mutual Exclusions
Some VAS options are mutually exclusive. If rules would set conflicting VAS, the rule with the higher priority (lower number) wins:
| VAS A | VAS B | Result |
|---|---|---|
| Visual Age Check | Signed by Recipient | Only one option possible |
| Named Person Only | Signed by Recipient | Only one option possible |
| No Neighbour Delivery | Visual Age Check | Only one option possible |
| Preferred Neighbour | Preferred Location | Only one option possible |
Automatic Conflict Resolution
When two rules set conflicting VAS, the rule with the lower priority number wins. The later rule is ignored for the conflicting VAS.
Interaction with the Label Dialog
When you create a label manually via the "Create Label" dialog:
- You select VAS options in the dialog (e.g., GoGreen Plus ✓).
- When you click "OK", the Shipping Rules are applied.
- Rules add additional VAS without overwriting your manual selection.
- The final VAS set (manual + rules) is sent to the DHL API.
For bulk shipping, rules are evaluated individually for each shipment — conditions such as order value or weight can differ for each shipment.