Skip to content

The filesystem

ADM organizes documents in a hierarchical structure, as other filesystems do. Each folder can contain subfolders and documents.

In ADM every user file or folder belongs to either a user or a group. Upon installation the root, users, and groups folders are created. When a group or user is created, a corresponding folder is also created in the filesystem.

  • Directoryα (root folder)
    • Directoryusers
      • Directoryuser01
        • …
      • Directoryuser02
        • …
    • Directorygroups
      • Directorygroup01
        • …
      • Directorygroup02
        • …

These system folders get marked in the adm_folders table with the is_system_folder flag. Users and administrators cannot delete or modify them.

select * from adm_folders
where is_system_folder = 'Y';

Each user has their own user folder for personal documents and files. It is the default location in the APEX app.

Each user folder gets created with a trash folder. The trash folder is system managed, so the user cannot delete it. When a user deletes a file, it lands in their trash folder.

Folders can be created to an unlimited depth.

  • Directoryα (root folder)
    • Directoryusers
      • Directoryuser01
        • Directorytrash (system folder)
          • …
        • Directoryfolder01 (user folder)
          • Directorysubfolder
            • …
          • …
        • Directoryfolder02 (user folder)
          • …
      • …

Documents or folders added to a user’s folder are owned by that user. Nobody else has access to these files unless explicitly shared.

Group folders work like user folders. The difference is that each member of the group has access to the group folder. They can still be explicitly shared with other users or groups.

  • Directoryα (root folder)
    • Directorygroups
      • Directorygroup01
        • Directoryfolder01 (group folder)
          • Directorysubfolder
            • …
          • …
        • Directoryfolder02 (group folder)
          • …
      • …

Deleting a document or folder moves it into the trash folder of the user who deleted it, rather than removing it. It leaves its folder, and the name it occupied becomes free again — trashed items never conflict with a new file of the same name.

The daily job permanently deletes items that have been in the trash longer than CLEAN_TRASH_DAYS (30 by default). Until then they can be restored; if the original folder no longer exists, the restore falls back to a valid location and adjusts the name rather than failing.

Documents under a retention policy or a legal hold refuse to be trashed at all — see Records management.

Every folder has a folder_path (/users/jdoe/projects), and paths are what several access and subtree queries are built on. Two consequences:

  • A username becomes a path segment, so % and / are rejected in one.
  • Folder and document names may contain _ and %, both of which are LIKE wildcards. Internal queries escape them with adm_utils.escape_like; if you write your own subtree query against folder_path, you have to do the same, or /users/bob/my_docs will also match /users/bob/myxdocs.