Property Calculator Other Calculation Mode Examples

Overview

Standalone examples for every calculation mode besides Calculate Expression — Set Static Values, Pick Substring, Remove Property, Convert Date, Count Date Or Time, Period Length, the MSLU modes, Search Objects, Create Object, History, File Operation, Send Email, and Grouping Level.

The Basic, Intermediate, and Advanced example pages all use Calculate Expression mode. This page covers standalone examples of every other calculation mode.

Set Static Values

Scenario: When a document is moved to “Archived” status, set the Confidential property to true.

Mode:        Set Static Values
Property:    PD.Confidential
Value:       true (Static)
Conditions:
  - Type: Basic Conditions
    Property PD.Status = "Archived"

The same mode also sets a property to NULL — just choose “Set to NULL” as the Value instead of a static value.


Pick Substring

Full field reference (Remove Substring from Main String, In Error Case, Pick Only Subexpression, etc.): Pick Substring settings.

Scenario: Incoming scanned documents have titles like "INV-2026-0042 Acme Corp 15.01.2026". Parse them into separate properties.

Mode:        Pick Substring
Pick Substrings From: %PROPERTY_{PD.Title}%

Substrings:
  - Substring 1: RegExp INV-\d{4}-\d+                          → Save To PD.InvoiceNumber  (extracts "INV-2026-0042")
  - Substring 2: RegExp (?<=\d{4}\s)[\w\s]+(?=\s\d{2}\.)        → Save To PD.CustomerName   (extracts "Acme Corp")
  - Substring 3: RegExp \d{2}\.\d{2}\.\d{4}                     → Save To PD.DateText       (extracts "15.01.2026")

Scenario — Named group extraction:

Pick Substrings From: %PROPERTY_{PD.Code}%
Substrings:
  - Save To:         PD.YearCode
    Condition Type:  Pick first founded RegExp
    RegExp:          PRJ-(?<value>\d{4})-[A-Z]+
    Pick Only Subexpression: ✅
    → From "PRJ-2026-FIN" extracts just "2026"

Remove Property

Scenario: Remove the PD.TechnicalReviewDate property from non-technical documents.

Mode:        Remove Property
Property:    PD.TechnicalReviewDate
Conditions:
  - Type: Advanced Conditions
    Expression: lookupName(%PROPERTY_{PD.DocumentType}%) != 'Technical Report'

To remove several properties on the same condition (e.g. all approval fields when a document returns to Draft), add one Remove Property rule per property — each with the same Conditions block.


Convert Date

Full field reference (Set Timezone, Text Timezone, etc.): Convert Date settings.

Scenario: Convert a date stored as Finnish text (from imported data) into a proper DateTime property.

Mode:            Convert Date
Conversion Type: String to Date
Value From:      PD.ImportedDateText     → "15.01.2026"
String Format:   dd.MM.yyyy
Language:        fi-FI
Target Property: PD.DocumentDate
→ Result: 2026-01-15T00:00:00 (DateTime)

Variant — source text includes a timezone: turn on Set Timezone and set Text Timezone (e.g. FLE Standard Time for UTC+2 Helsinki) to convert the parsed value from UTC into local time as part of the same conversion.

Scenario: Format a DateTime property as a locale-specific text for display.

Mode:            Convert Date
Conversion Type: Date to String
Value From:      PD.Created              → 2026-05-07T14:30:00
String Format:   d. MMMM yyyy 'klo' HH:mm
Language:        fi-FI
Target Property: PD.CreatedText
→ Result: "7. toukokuuta 2026 klo 14:30"

Count Date Or Time

Full field reference (per-operation Increase/Decrease, Unit, Data Type, etc.): Count Date Or Time settings.

Scenario: Set a due date to 5 business days after the received date.

Mode:       Count Date Or Time
Property:   PD.DueDate
Base Date:  PD.ReceivedDate            → 2026-01-10 (Friday)
Operations:
  1. Increase by 5 Business Days (Fixed)
→ Result: 2026-01-17 (Friday — skips Sat+Sun)

Scenario: Calculate warranty expiration as contract start + N months (from metadata).

Mode:       Count Date Or Time
Property:   PD.WarrantyExpiration
Base Date:  PD.ContractStart           → 2026-01-01
Operations:
  1. Increase by [PD.WarrantyMonths] Months (From Metadata, PD.WarrantyMonths = 24)
→ Result: 2028-01-01

Scenario: Chained operations — project milestone with buffer.

Mode:       Count Date Or Time
Property:   PD.MilestoneDeadline
Base Date:  PD.ProjectStart            → 2026-01-15
Operations:
  1. Increase by 6 Months (Fixed)            → 2026-07-15
  2. Decrease by 5 Business Days (Fixed)     → 2026-07-08
  3. Set Hour to 17 (Fixed)                  → 2026-07-08 17:00:00
→ Deadline is 6 months out minus 5 business days, at 5 PM

Period Length

Scenario: Calculate contract duration in days.

Mode:       Period Length
Property:   PD.ContractDuration
Start Date: PD.ContractStart          → 2026-01-01
End Date:   PD.ContractEnd            → 2026-12-31
Unit:       Day
Modifier:   1  (inclusive)
→ Result: 366

Scenario: Calculate processing time in hours.

Mode:       Period Length
Property:   PD.ProcessingHours
Start Date: PD.ReceivedTimestamp      → 2026-05-07 08:00
End Date:   PD.CompletedTimestamp     → 2026-05-07 14:30
Unit:       Hour
Modifier:   0
→ Result: 6

Filter Lookup Values

Scenario: An order’s Related Suppliers MSLU should only contain suppliers with “Active” status.

Mode:       Filter Lookup Values
Property:   PD.RelatedSuppliers (MSLU)
Lookup Values From: PD.RelatedSuppliers
Conditions:
  - Type: Basic Conditions
    Property "Status" equals "Active"
→ Suppliers with Status ≠ Active are removed from the list on each check-in

Scenario: Filter project tasks to keep only those assigned to the current user’s department.

Mode:       Filter Lookup Values
Property:   PD.MyDeptTasks (MSLU)
Lookup Values From: PD.AllTasks
Conditions:
  - Type: Compare Properties
    Property X: %PROPERTY_{PD.Department}%
    Comparison: Equal
    Property Y: %PROPERTY_{PD.Department}%
    Read Y from Main Object: ON
→ Keeps only tasks whose Department matches the parent object's Department

Order Lookup Values

Scenario: Sort an MSLU of meeting participants alphabetically.

Mode:       Order Lookup Values
Property:   PD.Participants (MSLU)
Lookup Values From: PD.Participants
Order Type:     Alphabetical
Reverse Order:  ❌ (A → Z)
Order By:       %PROPERTY_{PD.FullName}%
Amount of Lookups: 0 (keep all)

Scenario: Keep only the 3 most expensive items, sorted by price descending.

Mode:       Order Lookup Values
Property:   PD.TopItems (MSLU)
Lookup Values From: PD.AllItems
Order Type:     Numerical
Reverse Order:  ✅ (highest first)
Order By:       %PROPERTY_{PD.Price}%
Amount of Lookups: 3
→ From 10 items, keeps the 3 most expensive, sorted high → low

Values From MSLU

Scenario: Collect all task descriptions from project tasks into a summary text field.

Mode:       Values From MSLU
Property:   PD.TaskSummary (Text)
Multi-Select Lookup: PD.ProjectTasks
Conditions for Listed Object: (none)
→ Result: "Design UI, Implement backend, Write tests, Deploy"

Scenario: Collect email addresses from active team members only.

Mode:       Values From MSLU
Property:   PD.TeamEmails (Text)
Multi-Select Lookup: PD.TeamMembers
Conditions for Listed Object:
  - Type: Basic Conditions
    Property "Status" equals "Active"
→ Result: "alice@company.com, bob@company.com"
  (inactive members excluded)

Search Objects

Full field reference (Keep Previous Content, Include Deleted Objects, Add version-specific reference, etc.): Search Objects settings.

Scenario: Populate an MSLU with all invoices belonging to the same customer.

Mode:       Search Objects
Property:   PD.CustomerInvoices (MSLU)
Property Conditions:
  - Object Type = Invoice
  - PD.Customer equals %PROPERTY_{PD.Customer}%
Max Results: 50
→ Finds up to 50 invoices for the same customer (add an Additional Condition to exclude e.g. "Cancelled" ones)

Scenario — Value list item resolution by name:

Mode:       Search Objects
Property:   PD.Department (SSLU)
Search Value List Items: ✅
Search By:  Name
Search Value: %PROPERTY_{PD.DepartmentText}%
→ Converts text "Finance" → Department lookup value "Finance" (ID: 3)

Variant — resolving multiple values at once: target an MSLU property, set Value Delimiter (e.g. ,), and give a delimited Search Value such as "Urgent,Review,Final" — each term is resolved to its own lookup value.


Create Object

Full field reference (Create as Copy, Append Text to File Names, Create in Background, etc.): Create Object settings.

Scenario: When an order is confirmed, create a single delivery note.

Mode:       Create Object
Object Type: DeliveryNote
Duplicate Detection: PD.SourceOrder = (current object)
Other Property Values: PD.Customer = %PROPERTY_{PD.Customer}%, PD.Status = "Pending"
Conditions: PD.Status changes to "Confirmed"
→ Creates one DeliveryNote per confirmed order; skips if one already exists for this order

Scenario — Copy an object as a new revision:

Mode:       Create Object
Create as Copy: ✅
Source Object: (current object GUID)
Properties to be Removed: PD.ApprovedBy, PD.ApprovalDate, PD.DigitalSignature
Other Property Values: PD.Status = "Draft", PD.PreviousRevision = (current object)
Conditions: PD.Status changes to "Superseded"
→ Copies the object as a new Draft revision, stripped of approval data

Scenario — Create separate line items from MSLU:

Mode:       Create Object
Separate Object for Each Value Combination: ✅
Value Combinations: PD.Products → PD.Product
Other Property Values: PD.ParentOrder = (current object)
→ If PD.Products has 3 items, creates 3 separate LineItem objects

History

Scenario: Preserve the original submission date from when the document was first submitted.

Mode:       History
Conditions for Source Version:
  - Type: Basic Conditions
    Property "PD.Status" equals "Submitted"
Copy from All Matching Versions: ❌ (first match only)
Replace Files: ❌
Throw Exception: ❌
Property Mappings:
  - Source: %PROPERTY_{PD.SubmissionDate}% → Target: PD.OriginalSubmissionDate
→ Reads the SubmissionDate from the first version where Status was "Submitted"

Scenario: Restore approved version’s files.

Mode:       History
Conditions for Source Version:
  - Type: Basic Conditions
    Property "PD.Status" equals "Approved"
Replace Files: ✅
Throw Exception: ✅
→ Overwrites current files with files from the approved version
→ Throws an error if no approved version exists

File Operation

Scenario: Prefix all filenames with the document number.

Mode:       File Operation
Operation:  PrefixPostfix
Prefix:     %PROPERTY_{PD.DocumentNumber}% -
Postfix:    (empty)
Always Add: ❌
→ "Report.pdf" → "DOC-2026-0042 - Report.pdf"
→ On next check-in, prefix is already there → no change

Scenario: Add revision code as postfix to filenames.

Mode:       File Operation
Operation:  PrefixPostfix
Prefix:     (empty)
Postfix:    _Rev%PROPERTY_{PD.Revision}%
Always Add: ❌
→ "Drawing.dwg" → "Drawing_RevC.dwg"

Send Email

Scenario: Notify the project manager when a document is approved.

Mode:       Send Email
Allow Email Sending: ✅
To:         %PROPERTY_{PD.ProjectManager}.PROPERTY_{PD.Email}%
Subject:    ✅ Approved: %OBJTITLE%
Body:       <h2>Document Approved</h2>
            <p><b>%OBJTITLE%</b> has been approved.</p>
            <p>Approved by: %PROPERTY_{PD.ApprovedBy}%</p>
            <p>Date: %PROPERTY_{PD.ApprovalDate}%</p>
            <p>Value: %PROPERTY_{PD.ContractValue}% EUR</p>
Conditions:
  - Type: Changed Propertyvalues
    Properties: PD.Status
  - Type: Basic Conditions
    Property PD.Status = "Approved"

To trigger on a computed condition instead of a simple status match (e.g. “invoice more than 14 days overdue”), use an Advanced Conditions entry with an NCalc expression such as dateDiff(%PROPERTY_{PD.DueDate}%, today(), 'days') > 14.


Grouping Level

Scenario: Group all line item calculations under a shared condition.

Mode:       Grouping Level
Name:       "Line Item Financial Calculations"
Conditions:
  - Type: Changed Propertyvalues
    Properties: PD.Quantity, PD.UnitPrice, PD.DiscountPercent

Nested Properties:
  - Rule 1: "Gross Amount"
    Mode: Calculate Expression
    Property: PD.GrossAmount
    Expression: %PROPERTY_{PD.Quantity}% * %PROPERTY_{PD.UnitPrice}%

  - Rule 2: "Discount Amount"
    Mode: Calculate Expression
    Property: PD.DiscountAmount
    Expression: %PROPERTY_{PD.GrossAmount}% * ifNull(%PROPERTY_{PD.DiscountPercent}%, 0) / 100

  - Rule 3: "Net Amount"
    Mode: Calculate Expression
    Property: PD.NetAmount
    Expression: %PROPERTY_{PD.GrossAmount}% - %PROPERTY_{PD.DiscountAmount}%

→ All 3 rules only execute when Quantity, UnitPrice, or DiscountPercent changes
→ The Changed Propertyvalues condition on the group applies to all nested rules