When digging into the details of the Appian 25.2 release, I discovered that I have to rethink my whole approach of how to manage user uploaded documents.
Allow me to explain.
The old Way
In my application, I create a folder to store any documents users can upload. I assign Editor permissions to my users group to make sure the upload works. Then I create a constant pointing to that folder and use it as the “Target” in file upload fields.
In case I want to add a more fine-grained security model, I create more folders dynamically. E.g., for each “Case”, giving only specific groups or individuals Editor or Reader permissions on these folders.
In addition to this, I store the document ID in a separate record to be able to store additional data, and to relate these documents to cases.
A simple approach, I have not been looking for an improvement. I mean, Integers are still only 32 Bit.
The new Way
But, luckily, the Appian product management had a different opinion, and gave us the Document record type.
From now on, documents are stored in automatically generated folders, and for the “Target” value, we use the function a!documentFolderForRecordType(). And security is defined using record level security, but not on the Document record, but on the application-specific record used to manage documents.
Well, quite confusing … this feature is brand new, and as usual, Appian will iteratively improve specific aspects of it.
Let me share my current understanding of the feature and how I plan to design my applications.
Creating the Document Record
Just like in most other apps, I create a record to store the document IDs. Then, I add a field “documentId” of type “Document”. In the following dialog, I select the first option.

As I prefer to store document types as constants in Appian, the “type” field, which I create next, becomes a “Text”. Another field “caseId” will then create the relation to my case record.
When saving, Appian will automatically create a hidden folder to store uploaded documents. This folder has an interesting behaviour, described here.
I would like to take a moment to express my appreciation for the effort Appian puts into their documentation after reading about the new document record feature. Thank you!
After setting up the relationship, I define record level security to inherit security from the related case record. Now, only users having access to the case, have access to any related documents.
Uploading Documents
This is simple, as the only difference to the old way is, to use the function a!documentFolderForRecordType() for the “Target” attribute.
Managing Application Assets
In most applications, I need some custom graphics, templates or other files to build specific features. As these documents typically are not user-generated content, but are deployable design assets, I create a folder in my application, and upload them from the Appian Designer.
This concept is also described here.
Final Considerations
Change is the only constant in life. A while ago, when Appian started releasing the Records concept, it really felt awkward to work with. Over time, I learned that Records allow me to build apps in a way I could not do before.
Recently, Appian added the “User” record, followed by “Document” now. What comes next? Maybe “Group”. I can’t wait for the next iterations to come.
Keep rocking, and embrace change!
