Så fungerar fildelning på poster (ContentDocumentLink)
Datamodellen bakom Salesforce Files: ContentDocument, ContentVersion och ContentDocumentLink — och hur ShareType och Visibility avgör vem som ser en fil.
Om du någonsin undrat varför en fil dyker upp där den gör i Salesforce — eller behövt fråga ut filer i Apex eller en rapport — behöver du datamodellen under ytan. Moderna Salesforce Files är tre relaterade objekt, och två fält på länken avgör vem som ser vad. Det här är admin/utvecklar-följeslagaren till vem som kan se en fil i Salesforce.
De tre objekten
| Objekt | Vad det är | Hur många |
|---|---|---|
| ContentDocument | Själva filen | En per fil |
| ContentVersion | En specifik version av filens innehåll | En per uppladdning/revision |
| ContentDocumentLink | En länk som binder filen till en post, användare eller grupp | Många per fil |
När du laddar upp en fil skapar du en ContentVersion, som Salesforce kapslar in i en ContentDocument. När du kopplar den filen till en post eller delar den med någon skapar du en ContentDocumentLink.
Filen är ContentDocument. Var den finns och vem som kan se den ligger helt och hållet i dess ContentDocumentLinks.
ContentDocumentLink: fältet som betyder mest
En rad i ContentDocumentLink säger “den här filen är länkad till den där saken, på den här åtkomstnivån, för den här målgruppen.” Dess viktigaste fält:
LinkedEntityId — vad filen är kopplad till
ID:t för det som filen är länkad till:
- En post (Account, Opportunity, Case, anpassat objekt…) → filen är “kopplad till” den posten.
- En User eller Group → filen delas direkt med den personen eller gruppen.
En enda fil kan ha många länkar samtidigt — kopplad till två poster och delad med en användare på samma gång. Varje länk är en oberoende väg till att se filen.
ShareType — åtkomstnivån
| Värde | Nivå | Kan göra |
|---|---|---|
V | Viewer | Öppna och ladda ner |
C | Collaborator | Visa, redigera, ladda upp nya versioner, ändra delning |
I | Inferred | Åtkomstnivå ärvd från åtkomst till den länkade posten |
Inferred (I) är den viktiga för filer kopplade till poster: en användares åtkomst till filen härleds från deras åtkomst till posten den är länkad till. Det är mekanismen bakom “alla som kan se posten kan se dess filer.”
Visibility — vilken målgrupp
| Värde | Målgrupp |
|---|---|
AllUsers | Interna och externa (community) användare |
InternalUsers | Endast interna användare |
SharedUsers | Endast användare som filen uttryckligen delats med |
Det här är fältet som tyst bryter åtkomst i Experience Cloud: en fil kopplad till en post med Visibility = InternalUsers visas inte för community-användare även om de kan se posten. (Mer om det i filer och gäst- / Experience Cloud-användare.)
Hur åtkomst faktiskt avgörs
Sammantaget kan en användare se en fil om någon av dess ContentDocumentLinks ger åtkomst:
- En länk till en post de kan komma åt (ShareType
I) — åtkomst ärvd från postens delning. - En länk direkt till dem eller deras grupp (ShareType
V/C). - Ett biblioteksmedlemskap eller en publik länk (separata mekanismer).
…och länkens Visibility måste inkludera deras målgrupp. De flesta ärenden om “filen syns inte” beror på en saknad länk eller en för snäv Visibility.
Fråga ut det
Eftersom allt är data kan du inspektera det direkt — t.ex. hitta varje plats där en fil delas:
SELECT ContentDocumentId, LinkedEntityId, ShareType, Visibility
FROM ContentDocumentLink
WHERE ContentDocumentId = '069...'
Varje rad är en målgrupp som kan nå filen. För att räkna upp personerna expanderar du sedan hela delningsmålgruppen för varje LinkedEntityId-post — och det är där det snabbt blir omfattande.
Från rader till ett svar i klartext
En fil kopplad till flera poster ärver varje posts hela målgrupp — rollhierarki, delningsregler, team och allt — multiplicerat över varje ContentDocumentLink. Att rekonstruera det för hand utifrån råa rader är precis det arbete som döljer oavsiktlig exponering. AgentForceAccess går igenom ContentDocumentLinks och postdelningen bakom var och en, och svarar på “vem kan se den här filen, och varför” i klartext.
Vanliga frågor
Vad är skillnaden mellan ContentDocument, ContentVersion och ContentDocumentLink?
ContentDocument är själva filen (en per fil). ContentVersion är en specifik version av den filen (en per uppladdning/revision). ContentDocumentLink kopplar en ContentDocument till något annat — en post, användare eller grupp — och bär åtkomstnivån och synligheten för just den länken.
Vad pekar LinkedEntityId på?
Det är ID:t för det som filen är länkad till. För en fil kopplad till en post är det postens ID (Account, Opportunity, Case osv.); för en fil som delas direkt med en person eller grupp är det ett User- eller Group-ID. En enda fil kan ha många ContentDocumentLinks samtidigt.
Vad betyder ShareType-värdena V, C och I?
V = Viewer (öppna och ladda ner), C = Collaborator (visa, redigera, ladda upp versioner, ändra delning), I = Inferred (åtkomstnivån en användare får indirekt via åtkomst till den länkade posten). Inferred är hur poståtkomst sprids vidare till en fil.
Vad gör fältet Visibility?
Visibility anger vem länken exponeras för: AllUsers (interna och externa/community-användare), InternalUsers (endast interna) eller SharedUsers (endast användare som filen uttryckligen delats med). Community-/Experience Cloud-användare behöver vanligtvis AllUsers för att se en fil kopplad till en post.
Se det i din egen organisation
AgentForceAccess förklarar, på vanlig svenska, varför vilken användare som helst kan se vilken post eller fil som helst — över varje delningsmekanism i Salesforce.
Begär förhandsåtkomst