How Should We Handle Documents in Enterprise BPM with Appian + DMS?
Hi everyone,
We’re building a large BPM platform in Appian for a bank. It handles multiple core processes like Loan Origination, KYC, and other services. We’re also integrating with both CRM and a Document Management System (DMS) — so document handling is a key topic for us.
Our Setup
-
CRM sends us structured application data via Kafka events.
-
We use a central table called
BPM_PROCESS_MASTERto track each case (with caseId, correlationId, processKey, etc.). -
We built a shared table
BPM_DOCUMENT_LOGto store documents with fields like:-
processId -
entityType -
entityRefId -
documentType -
AppianDocId(if it’s stored in Appian) -
DMS_UUID(if it’s stored in our DMS)
-
This setup gives us flexibility:
-
We can store documents at any level (applicant, guarantor, collateral, etc.)
-
We can handle new document uploads mid-process (like if Credit asks CRM to re-send more docs)
-
It keeps our business data clean and avoids spreading document fields everywhere
But We’ve Hit Some Friction
Our vendor is pushing back. They want to store document references inside each business table (like APPLICANT, COLLATERAL, etc.).
Not only that — they also want to create dedicated relationships for each document inside those tables, meaning that for every document, there would be a foreign key column in the business entity pointing to the DOCUMENT_LOG.
For example:
-
APPLICANTwould have columns likecbjConsentDocId,idCopyDocId -
COLLATERALwould havecollateralAttachmentId, etc.
This tightly couples documents to each business entity, and makes our model less flexible, especially considering:
-
New documents may be requested during the process
-
Document types differ by process (e.g., KYC vs Loan)
-
Some documents exist only in DMS (not Appian)
We believe a centralized and normalized DOCUMENT_LOG table is more scalable across processes and systems.
They say:
The vendor mentioned Appian has a 3-level relationship depth limit, which makes saving deeper/nested data and documents together challenging, especially in bulk operations.
Additionally, the vendor raised a concern around bulk inserts of related entities like applicants and collaterals: when inserting many records at once, Appian returns generated IDs but does not specify which ID corresponds to which entity in the payload. This makes it difficult to correctly link multiple uploaded documents to their respective entities.
Honestly, this sounds more like a workaround than a limitation. But we want to do it right — and follow real best practices.
Our Questions to You
-
Is Appian really limited in a way that prevents us from using a shared
DOCUMENT_LOGtable? -
Is it better to keep document references in a centralized table, especially when we deal with:
-
Multiple processes
-
DMS integration (not just Appian documents)
-
Mid-process uploads
-
-
How do others handle this in large-scale or event-driven setups?
We’d love to hear how others approached this — or if we’re missing something important.
Thanks in advance!
CRM To Appian simplified sample JSON payload
{
"meta": {
"process": "Retail.Murabaha.CarLoan.CreditReview",
"eventType": "START_CREDIT_REVIEW",
"source": "CRM",
"destination": "BPM",
"isSynchronously": false,
"isAcknowledgment": true,
"correlationId": "abc12345-0000-1111-2222-1234567890ab",
"transactionId": "def67890-0000-2222-3333-0987654321ba",
"submittedBy": 1001,
"timestamp": "2025-07-13T12:00:00Z"
},
"data": {
"application": {
"applicationType": "1",
"branchCode": "1000",
"submissionDate": "2025-07-13T12:00:00Z",
"requestedAmount": 15000.0,
"currency": "USD",
"tenorMonths": 48,
"annualProfitRate": 6.0,
"totalAmount": 18000.0,
"installmentAmount": 375.0,
"productInfo": {
"carBrand": "GenericCar",
"carType": "Sedan",
"productionYear": 2020,
"attachments": {
"carLicenseAttachment": "uuid-car-license-001"
}
},
"applicants": [
{
"cif": 12345,
"personalInfo": {
"fullName": "John Doe",
"nationalId": "A123456789"
},
"attachments": {
"idCopy": "uuid-id-copy-001"
}
},
{
"cif": 12346,
"personalInfo": {
"fullName": "Jane Smith",
"nationalId": "B987654321"
},
"attachments": {
"idCopy": "uuid-id-copy-002"
}
}
],
"collaterals": [
{
"collateralType": "Vehicle",
"collateralAmount": 10000.0,
"attachments": {
"collateralAttachment": "uuid-collateral-001"
}
}
]
}
}
}
